diff --git a/.github/workflows/chromatic-7180.yml b/.github/workflows/chromatic-7180.yml new file mode 100644 index 00000000000..d449a712769 --- /dev/null +++ b/.github/workflows/chromatic-7180.yml @@ -0,0 +1,46 @@ +name: "Chromatic - epic/7180-component-tokens" +on: + push: + branches: [epic/7180-component-tokens] + pull_request: + branches: [epic/7180-component-tokens] + types: [labeled, synchronize] +jobs: + run: + if: | + (github.event.action == 'labeled' && github.event.label.name == 'pr ready for visual snapshots') || github.event_name == 'push' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions/setup-node@v3 + with: + node-version-file: package.json + - run: npm install + - run: npm --workspace="packages/calcite-design-tokens" run build + - name: Publish to Chromatic + uses: chromaui/action@v1 + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + zip: true + exitOnceUploaded: true + workingDir: packages/calcite-components + # Re-enable this option once the snapshots are fixed on the epic branch. Until then, snapshots will need to be + # approved/rejected in both the PR and the commit on epic/7180-component-tokens after installing + # autoAcceptChanges: epic/7180-component-tokens + env: + STORYBOOK_SCREENSHOT_TEST_BUILD: true + CHROMATIC_DIFF_THRESHOLD: ${{ secrets.CHROMATIC_DIFF_THRESHOLD }} + skip: + if: contains(github.event.pull_request.labels.*.name, 'skip visual snapshots') + runs-on: ubuntu-latest + steps: + - name: Skip Chromatic + uses: Sibz/github-status-action@v1 + with: + authToken: ${{ secrets.GITHUB_TOKEN }} + context: UI Tests + description: Chromatic run skipped + state: success + sha: ${{github.event.pull_request.head.sha || github.sha}} diff --git a/package-lock.json b/package-lock.json index f3c793fe8f3..e0bfd596b30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,9 +110,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", "dev": true }, "node_modules/@alloc/quick-lru": { @@ -678,30 +678,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -741,37 +741,38 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -812,18 +813,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -834,12 +823,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -979,14 +968,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1078,28 +1067,28 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", - "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.23.0", - "@babel/template": "^7.24.0", - "@babel/types": "^7.24.5" + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dev": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1133,13 +1122,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", - "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1149,12 +1138,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1164,14 +1153,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1181,13 +1170,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1299,12 +1288,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1314,12 +1303,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1501,12 +1490,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1516,14 +1505,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1534,14 +1523,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1551,12 +1540,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1566,12 +1555,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", - "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1581,13 +1570,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1597,13 +1586,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1614,18 +1603,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", - "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" }, "engines": { @@ -1636,13 +1625,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1652,12 +1641,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", - "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1667,13 +1656,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1683,12 +1672,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1698,12 +1687,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1714,13 +1703,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1730,12 +1719,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1762,13 +1751,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1778,14 +1767,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1795,12 +1784,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1811,12 +1800,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1826,12 +1815,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1842,12 +1831,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1857,13 +1846,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1890,15 +1879,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1908,13 +1897,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1924,13 +1913,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1940,12 +1929,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1955,12 +1944,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1971,12 +1960,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1987,15 +1976,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", - "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.5" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2005,13 +1994,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2021,12 +2010,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -2037,13 +2026,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", - "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -2054,12 +2043,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", - "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2069,13 +2058,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2085,14 +2074,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", - "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -2103,12 +2092,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2118,12 +2107,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -2134,12 +2123,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2219,12 +2208,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2234,13 +2223,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2250,12 +2239,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2265,12 +2254,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2280,12 +2269,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", - "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2312,25 +2301,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2340,13 +2317,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2356,13 +2333,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2372,13 +2349,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2388,27 +2365,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", - "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2420,54 +2397,54 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.5", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.5", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.5", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.24.5", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.5", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.5", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", @@ -2704,9 +2681,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2889,9 +2866,9 @@ "dev": true }, "node_modules/@cspell/dict-aws": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.2.tgz", - "integrity": "sha512-aNGHWSV7dRLTIn8WJemzLoMF62qOaiUQlgnsCwH5fRCD/00gsWCwg106pnbkmK4AyabyxzneOV4dfecDJWkSxw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.3.tgz", + "integrity": "sha512-0C0RQ4EM29fH0tIYv+EgDQEum0QI6OrmjENC9u98pB8UcnYxGG/SqinuPxo+TgcEuInj0Q73MsBpJ1l5xUnrsw==", "dev": true }, "node_modules/@cspell/dict-bash": { @@ -3162,9 +3139,9 @@ "dev": true }, "node_modules/@cspell/dict-software-terms": { - "version": "3.4.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.4.8.tgz", - "integrity": "sha512-r3gvmSGd8wZp4bbofTey/2Tu3gdBc5kxTRoFo1MaCh5vMLiBOSCLvyZgzr0DcMl8c5dxL7nFpNwbWZJxmKmtUA==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.4.10.tgz", + "integrity": "sha512-S5S2sz98v4GWJ9TMo62Vp4L5RM/329e5UQfFn7yJfieTcrfXRH4IweVdz34rZcK9o5coGptgBUIv/Jcrd4cMpg==", "dev": true }, "node_modules/@cspell/dict-sql": { @@ -3273,9 +3250,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -3291,13 +3268,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -3314,9 +3291,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -3332,8 +3309,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { @@ -3776,9 +3753,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -3925,11 +3902,11 @@ "dev": true }, "node_modules/@floating-ui/core": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", - "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.4.tgz", + "integrity": "sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.4" } }, "node_modules/@floating-ui/dom": { @@ -3942,9 +3919,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz", + "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==" }, "node_modules/@glideapps/ts-necessities": { "version": "2.2.3", @@ -3956,6 +3933,7 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -4000,7 +3978,8 @@ "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", @@ -4605,6 +4584,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -4815,19 +4795,6 @@ "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -4940,9 +4907,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -5634,6 +5601,22 @@ "tar-stream": "^2.1.4" } }, + "node_modules/@ngtools/webpack": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.8.tgz", + "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ==", + "dev": true, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.5", + "webpack": "^5.54.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5683,13 +5666,10 @@ } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/@npmcli/fs": { "version": "3.1.1", @@ -5704,12 +5684,13 @@ } }, "node_modules/@npmcli/git": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", - "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", "proc-log": "^4.0.0", @@ -5722,6 +5703,15 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -5732,13 +5722,10 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/@npmcli/git/node_modules/proc-log": { "version": "4.2.0", @@ -5896,21 +5883,21 @@ } }, "node_modules/@nrwl/devkit": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.4.2.tgz", + "integrity": "sha512-uvJ2kjEUq2VAQHKgaDaumFzowagqOJJgAk9dL9mdB4ZwmDi2i3XroInp/X64phrlHRyJAcYEdRJyaaM/924KVQ==", "dev": true, "dependencies": { - "@nx/devkit": "18.3.5" + "@nx/devkit": "19.4.2" } }, "node_modules/@nrwl/tao": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.3.5.tgz", - "integrity": "sha512-gB7Vxa6FReZZEGva03Eh+84W8BSZOjsNyXboglOINu6d8iZZ0eotSXGziKgjpkj3feZ1ofKZMs0PRObVAOROVw==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.4.2.tgz", + "integrity": "sha512-bRCRWWqR86ckji7tK4xRl9czB2WSZG4qSGqvttQMmxCvQc+njnG/QhnoGXYueaz2xr5Z1z7RJWNEqTYEAILh5Q==", "dev": true, "dependencies": { - "nx": "18.3.5", + "nx": "19.4.2", "tslib": "^2.3.0" }, "bin": { @@ -5918,28 +5905,44 @@ } }, "node_modules/@nrwl/tao/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/@nx/devkit": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.3.5.tgz", - "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.4.2.tgz", + "integrity": "sha512-4Lp3E7TiIkdYDZCk3dlCPgeTDBIaLqqEis02kgi/vO16Jek7fHet7Irkg3zU9JcjJPuoPjUyyqEXvOv5IL31IA==", "dev": true, "dependencies": { - "@nrwl/devkit": "18.3.5", + "@nrwl/devkit": "19.4.2", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", + "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 16 <= 19" + "nx": ">= 17 <= 20" + } + }, + "node_modules/@nx/devkit/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@nx/devkit/node_modules/tmp": { @@ -5952,15 +5955,15 @@ } }, "node_modules/@nx/devkit/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/@nx/nx-darwin-arm64": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.5.tgz", - "integrity": "sha512-4I5UpZ/x2WO9OQyETXKjaYhXiZKUTYcLPewruRMODWu6lgTM9hHci0SqMQB+TWe3f80K8VT8J8x3+uJjvllGlg==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.4.2.tgz", + "integrity": "sha512-yy0ik+MYli6lg9khgb0/NJIjMr2re2fpE7hl/MhaHWZmTH9PUmzz6vWpx74O3tnz93oT/9ENXFLBagQuj9hjww==", "cpu": [ "arm64" ], @@ -5974,9 +5977,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.5.tgz", - "integrity": "sha512-Drn6jOG237AD/s6OWPt06bsMj0coGKA5Ce1y5gfLhptOGk4S4UPE/Ay5YCjq+/yhTo1gDHzCHxH0uW2X9MN9Fg==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.4.2.tgz", + "integrity": "sha512-UEZw7qzvWyOe0B5SvvrN4I2irq8FGlf1V6ut0ajL0vDbLR2IiiF6EYiM36ewpJmx5XspjhbLxEyQJn1TUMUm4w==", "cpu": [ "x64" ], @@ -5990,9 +5993,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.5.tgz", - "integrity": "sha512-8tA8Yw0Iir4liFjffIFS5THTS3TtWY/No2tkVj91gwy/QQ/otvKbOyc5RCIPpbZU6GS3ZWfG92VyCSm06dtMFg==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.4.2.tgz", + "integrity": "sha512-kAB73FAe3Ae50XnZ+DrCFjbbqHJoTF2ZJVYiHdtRfAefEqsrFltM3Py2/qeeSp1Pxtri3sp4yeEui8WGV2ArWA==", "cpu": [ "x64" ], @@ -6006,9 +6009,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.5.tgz", - "integrity": "sha512-BrPGAHM9FCGkB9/hbvlJhe+qtjmvpjIjYixGIlUxL3gGc8E/ucTyCnz5pRFFPFQlBM7Z/9XmbHvGPoUi/LYn5A==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.4.2.tgz", + "integrity": "sha512-24cHzxYB/cxlvX8I/cYZIp88TNgCrl4srMeUzqV5bHuDKVYjA1BL/gzP/pRmsdOSq+ggAKxzXhgCG3nwStUvdw==", "cpu": [ "arm" ], @@ -6022,9 +6025,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.5.tgz", - "integrity": "sha512-/Xd0Q3LBgJeigJqXC/Jck/9l5b+fK+FCM0nRFMXgPXrhZPhoxWouFkoYl2F1Ofr+AQf4jup4DkVTB5r98uxSCA==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.4.2.tgz", + "integrity": "sha512-6gbBak/bL4vEV2aoTFc7VaeWYF+ossJ0YOqx+hwLpv9SSt6e3yIJrqf7SiwdKq0lcoPeHq3DO06+bRzNLZxVTQ==", "cpu": [ "arm64" ], @@ -6038,9 +6041,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.5.tgz", - "integrity": "sha512-r18qd7pUrl1haAZ/e9Q+xaFTsLJnxGARQcf/Y76q+K2psKmiUXoRlqd3HAOw43KTllaUJ5HkzLq2pIwg3p+xBw==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.4.2.tgz", + "integrity": "sha512-JKc3Bw84jWbOhlqXGBIH9/qz3kzTwpKfsIqtar8K8Gd5/UFJS8GLEdy0mXsnoeFrA1DuYJJ0PWxoHkAa1MYLxg==", "cpu": [ "arm64" ], @@ -6054,9 +6057,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.5.tgz", - "integrity": "sha512-vYrikG6ff4I9cvr3Ysk3y3gjQ9cDcvr3iAr+4qqcQ4qVE+OLL2++JDS6xfPvG/TbS3GTQpyy2STRBwiHgxTeJw==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.4.2.tgz", + "integrity": "sha512-hyf0cDZ3rAM8WERZ/M82v1rnf6oO1X+xwYq363Qx04SufU+Knto7xHGndLNkx2i18+UtCoEr4ZhDYrIb8ZWHww==", "cpu": [ "x64" ], @@ -6070,9 +6073,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.5.tgz", - "integrity": "sha512-6np86lcYy3+x6kkW/HrBHIdNWbUu/MIsvMuNH5UXgyFs60l5Z7Cocay2f7WOaAbTLVAr0W7p4RxRPamHLRwWFA==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.4.2.tgz", + "integrity": "sha512-XbKut3RTb04FNA0diDhO/OM8DgqaWaaXhyybRocfhITxH+mPQBZPUs/NM3xeQCrzlGjwrBYxt+Y9Ep8Ftgd/MA==", "cpu": [ "x64" ], @@ -6086,9 +6089,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.5.tgz", - "integrity": "sha512-H3p2ZVhHV1WQWTICrQUTplOkNId0y3c23X3A2fXXFDbWSBs0UgW7m55LhMcA9p0XZ7wDHgh+yFtVgu55TXLjug==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.4.2.tgz", + "integrity": "sha512-VMOQ44KlndtAKE6JaXSQqrAdHBEqbJSJP4EKrBREn8HyVyr6LAfAG3Pj93ZPMvQC47uheisBcDwitxEY/Mhs1Q==", "cpu": [ "arm64" ], @@ -6102,9 +6105,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.5.tgz", - "integrity": "sha512-xFwKVTIXSgjdfxkpriqHv5NpmmFILTrWLEkUGSoimuRaAm1u15YWx/VmaUQ+UWuJnmgqvB/so4SMHSfNkq3ijA==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.4.2.tgz", + "integrity": "sha512-FOK4XVanWZYM4cLS9uAx8Xg4BpPRdo0z/jt8gVto8BwgoBPIJuytGhnTVyDNgB+nRJf8K3fz7RFcZm5jup/krg==", "cpu": [ "x64" ], @@ -6352,6 +6355,23 @@ "node": ">=16.3.0" } }, + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@puppeteer/browsers/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -6380,25 +6400,19 @@ } }, "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "dev": true }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6407,16 +6421,13 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6425,32 +6436,31 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz", + "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==", + "dev": true, + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.5.7" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6462,23 +6472,22 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", + "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6490,16 +6499,13 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", + "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6508,21 +6514,20 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6534,17 +6539,16 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6553,19 +6557,19 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", + "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6577,20 +6581,19 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", + "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6602,19 +6605,18 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6626,17 +6628,16 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6645,16 +6646,13 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6663,17 +6661,16 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6682,17 +6679,16 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6701,16 +6697,13 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.13.10" - }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6854,12 +6847,6 @@ } } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.18.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", @@ -7069,9 +7056,9 @@ ] }, "node_modules/@rollup/wasm-node": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.17.2.tgz", - "integrity": "sha512-4F6C3XaUn02XY/GJMQTXncWrLyCkRHdRZe4OyWuQUprWKmU2u+esISOtCYdr3Bp9AqCIo/X3So2Ik7N9dNDwow==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.18.1.tgz", + "integrity": "sha512-/5JNIo7af3BkPdsm0omZTwi/KcEiknR3/bs2HEdmudgey+xDyX0qtcM7Q8MFbpqddzR6+FleUjyGVv1ykL3v1Q==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -7723,9 +7710,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", - "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8100,9 +8087,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.36.tgz", - "integrity": "sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8139,15 +8126,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/core-server/node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/@storybook/core-server/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8187,18 +8165,18 @@ } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.36.tgz", - "integrity": "sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@storybook/csf": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.7.tgz", - "integrity": "sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", + "integrity": "sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==", "dev": true, "dependencies": { "type-fest": "^2.19.0" @@ -8314,9 +8292,9 @@ } }, "node_modules/@storybook/html-webpack5/node_modules/@types/node": { - "version": "18.19.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.36.tgz", - "integrity": "sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8391,21 +8369,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/manager-api/node_modules/@storybook/router": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.9.tgz", - "integrity": "sha512-b7e/pnqfYLD3oxdStnAZI+Gxp0Bodk3q5Jo9FUoiSNZaa3Pu8conq+jsyyXT19uDZtWwOursBKVvDM2/dtHGLg==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.9", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/node-logger": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.9.tgz", @@ -8436,9 +8399,9 @@ } }, "node_modules/@storybook/preset-html-webpack/node_modules/@types/node": { - "version": "18.19.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", - "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8494,6 +8457,21 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, + "node_modules/@storybook/router": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.9.tgz", + "integrity": "sha512-b7e/pnqfYLD3oxdStnAZI+Gxp0Bodk3q5Jo9FUoiSNZaa3Pu8conq+jsyyXT19uDZtWwOursBKVvDM2/dtHGLg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "8.1.9", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/storybook-deployer": { "version": "2.8.16", "resolved": "https://registry.npmjs.org/@storybook/storybook-deployer/-/storybook-deployer-2.8.16.tgz", @@ -8525,6 +8503,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -8783,12 +8762,12 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", - "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.6.tgz", + "integrity": "sha512-8qpnGVincVDLEcQXWaHOf6zmlbwTKc6Us6PPu4CRnPXCzo2OGBS5cwgMMOWdxDpEz1mkbvXHpEy99M5Yvt682w==", "dev": true, "dependencies": { - "@adobe/css-tools": "^4.3.2", + "@adobe/css-tools": "^4.4.0", "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", @@ -9020,9 +8999,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -9136,9 +9115,9 @@ "dev": true }, "node_modules/@types/emscripten": { - "version": "1.39.12", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.12.tgz", - "integrity": "sha512-AQImDBgudQfMqUBfrjZYilRxoHDzTBp+ejh+g1fY67eSMalwIKtBXofjpyI0JBgNpHGzxeGAR2QDya0wxW9zbA==", + "version": "1.39.13", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", + "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", "dev": true }, "node_modules/@types/eslint": { @@ -9180,9 +9159,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", - "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", "dev": true, "dependencies": { "@types/node": "*", @@ -9340,9 +9319,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", "dev": true }, "node_modules/@types/lodash-es": { @@ -9394,9 +9373,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -9894,6 +9873,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@vitest/expect/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/@vitest/expect/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -9953,6 +9941,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/@vitest/utils/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -10235,15 +10232,15 @@ "dev": true }, "node_modules/@yarnpkg/parsers/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "dev": true, "dependencies": { "argparse": "^2.0.1" @@ -10287,9 +10284,9 @@ } }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "bin": { "acorn": "bin/acorn" }, @@ -10306,6 +10303,15 @@ "acorn": "^8" } }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -10315,10 +10321,13 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -10867,9 +10876,9 @@ } }, "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/astral-regex": { @@ -10963,9 +10972,9 @@ } }, "node_modules/axios": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.1.tgz", - "integrity": "sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -11189,9 +11198,9 @@ } }, "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, "engines": { "node": ">=12.20" @@ -11359,9 +11368,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", - "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", "dev": true, "optional": true }, @@ -11598,9 +11607,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -11617,10 +11626,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -11752,13 +11761,10 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/cacache/node_modules/p-map": { "version": "4.0.0", @@ -11824,9 +11830,9 @@ } }, "node_modules/camel-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/camelcase": { @@ -11865,9 +11871,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001637", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001637.tgz", - "integrity": "sha512-1x0qRI1mD1o9e+7mBI7XtzFAP4XszbHaVWsMiGbSPLYekKTJF7K+FNk6AsXH4sUpc+qrsI3pVgf1Jdl/uGkuSQ==", + "version": "1.0.30001641", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", + "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", "dev": true, "funding": [ { @@ -11896,9 +11902,9 @@ } }, "node_modules/capital-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/case-sensitive-paths-webpack-plugin": { @@ -11973,9 +11979,9 @@ } }, "node_modules/change-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/char-regex": { @@ -12133,9 +12139,9 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "engines": { "node": ">=6.0" @@ -12316,9 +12322,9 @@ "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -12584,9 +12590,9 @@ } }, "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.4.tgz", + "integrity": "sha512-E5AjpSW+O+N5T2GsOQMHLLsJvrYw6G/AFt9GvU6NguEAfzKShh7hRiLtVo6S9KbRpFMGqE5ojo0/hE+sdteWvQ==", "dev": true, "dependencies": { "array-timsort": "^1.0.3", @@ -12845,6 +12851,12 @@ "node": ">=12" } }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true + }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -12881,9 +12893,9 @@ } }, "node_modules/constant-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/constants-browserify": { @@ -13767,12 +13779,30 @@ } }, "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cspell-config-lib": { @@ -13880,18 +13910,6 @@ "node": ">=18" } }, - "node_modules/cspell-lib/node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cspell-trie-lib": { "version": "8.9.1", "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.9.1.tgz", @@ -14021,6 +14039,12 @@ "node": ">=18" } }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -14140,9 +14164,9 @@ "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -14233,9 +14257,9 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "dependencies": { "type-detect": "^4.0.0" @@ -14544,9 +14568,9 @@ "dev": true }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -14682,9 +14706,9 @@ } }, "node_modules/dot-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/dot-prop": { @@ -14802,9 +14826,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", - "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==", + "version": "1.4.823", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.823.tgz", + "integrity": "sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w==", "dev": true }, "node_modules/emittery": { @@ -14876,9 +14900,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -14913,12 +14937,15 @@ } }, "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/envinfo": { @@ -15086,9 +15113,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, "node_modules/es-object-atoms": { @@ -15575,9 +15602,9 @@ } }, "node_modules/eslint-plugin-prettier/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/eslint-plugin-react": { @@ -16041,9 +16068,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dependencies": { "estraverse": "^5.1.0" }, @@ -16071,13 +16098,10 @@ } }, "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -16679,6 +16703,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16709,6 +16734,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -16725,9 +16751,9 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/flow-parser": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.0.tgz", - "integrity": "sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==", + "version": "0.239.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.239.1.tgz", + "integrity": "sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==", "dev": true, "engines": { "node": ">=0.4.0" @@ -16771,9 +16797,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -17018,6 +17044,43 @@ "node": ">= 0.6" } }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/front-matter/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -17613,23 +17676,21 @@ "dev": true }, "node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -18072,9 +18133,9 @@ } }, "node_modules/header-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/highlight.js": { @@ -18413,9 +18474,9 @@ "dev": true }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -18716,6 +18777,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -18799,9 +18861,9 @@ } }, "node_modules/injection-js/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/inquirer": { @@ -19082,12 +19144,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19609,9 +19674,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "dependencies": { "@babel/core": "^7.23.9", @@ -19724,16 +19789,13 @@ } }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -20328,6 +20390,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -21233,6 +21296,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -21714,9 +21778,9 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, "bin": { "jiti": "bin/jiti.js" @@ -21841,6 +21905,17 @@ "node": ">=8" } }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -21890,12 +21965,6 @@ } } }, - "node_modules/jsdom/node_modules/rrweb-cssom": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.0.tgz", - "integrity": "sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g==", - "dev": true - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -22122,9 +22191,9 @@ "dev": true }, "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", "dev": true, "dependencies": { "picocolors": "^1.0.0", @@ -22864,9 +22933,9 @@ } }, "node_modules/less/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/leven": { @@ -23054,9 +23123,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, "engines": { "node": ">=14" @@ -23266,16 +23335,16 @@ } }, "node_modules/listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz", + "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -23313,9 +23382,9 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -23655,9 +23724,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -23743,9 +23812,9 @@ } }, "node_modules/lower-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/lowlight": { @@ -24040,9 +24109,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", "dev": true, "dependencies": { "@types/mdast": "^4.0.0", @@ -24396,9 +24465,9 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, "dependencies": { "micromark-util-character": "^2.0.0", @@ -24412,9 +24481,9 @@ } }, "node_modules/micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, "dependencies": { "devlop": "^1.0.0", @@ -24432,9 +24501,9 @@ } }, "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dev": true, "dependencies": { "devlop": "^1.0.0", @@ -24450,9 +24519,9 @@ } }, "node_modules/micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", "dev": true, "dependencies": { "devlop": "^1.0.0", @@ -24480,9 +24549,9 @@ } }, "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dev": true, "dependencies": { "devlop": "^1.0.0", @@ -24959,9 +25028,9 @@ "dev": true }, "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -25224,6 +25293,18 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -25430,9 +25511,9 @@ } }, "node_modules/no-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/node-abort-controller": { @@ -25540,9 +25621,9 @@ } }, "node_modules/node-gyp": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", - "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -25551,9 +25632,9 @@ "graceful-fs": "^4.2.6", "make-fetch-happen": "^13.0.0", "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.1.0", "semver": "^7.3.5", - "tar": "^6.1.2", + "tar": "^6.2.1", "which": "^4.0.0" }, "bin": { @@ -25575,6 +25656,15 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -25584,6 +25674,15 @@ "node": ">=16" } }, + "node_modules/node-gyp/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/node-gyp/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -25732,13 +25831,10 @@ } }, "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/npm-packlist": { "version": "5.1.1", @@ -25762,6 +25858,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -25867,9 +25964,9 @@ } }, "node_modules/npm-registry-fetch/node_modules/cacache/node_modules/minipass": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", - "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -26039,9 +26136,9 @@ } }, "node_modules/npm-registry-fetch/node_modules/ssri/node_modules/minipass": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", - "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -26094,36 +26191,36 @@ } }, "node_modules/nwsapi": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", - "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", "dev": true }, "node_modules/nx": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/nx/-/nx-18.3.5.tgz", - "integrity": "sha512-wWcvwoTgiT5okdrG0RIWm1tepC17bDmSpw+MrOxnjfBjARQNTURkiq4U6cxjCVsCxNHxCrlAaBSQLZeBgJZTzQ==", + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.4.2.tgz", + "integrity": "sha512-h4NMoy9uvSHuM+kyioZXb5G4hfBZ7E4a5dswG2RPe3g/GcY9wdpkUMd/EJJ0cHQwv36kRZOMCflhounYCd7OeA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "18.3.5", + "@nrwl/tao": "19.4.2", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.6", + "@zkochan/js-yaml": "0.0.7", "axios": "^1.6.0", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", - "dotenv": "~16.3.1", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", + "front-matter": "^4.0.2", "fs-extra": "^11.1.0", "ignore": "^5.0.4", "jest-diff": "^29.4.1", - "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", "minimatch": "9.0.3", @@ -26146,16 +26243,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "18.3.5", - "@nx/nx-darwin-x64": "18.3.5", - "@nx/nx-freebsd-x64": "18.3.5", - "@nx/nx-linux-arm-gnueabihf": "18.3.5", - "@nx/nx-linux-arm64-gnu": "18.3.5", - "@nx/nx-linux-arm64-musl": "18.3.5", - "@nx/nx-linux-x64-gnu": "18.3.5", - "@nx/nx-linux-x64-musl": "18.3.5", - "@nx/nx-win32-arm64-msvc": "18.3.5", - "@nx/nx-win32-x64-msvc": "18.3.5" + "@nx/nx-darwin-arm64": "19.4.2", + "@nx/nx-darwin-x64": "19.4.2", + "@nx/nx-freebsd-x64": "19.4.2", + "@nx/nx-linux-arm-gnueabihf": "19.4.2", + "@nx/nx-linux-arm64-gnu": "19.4.2", + "@nx/nx-linux-arm64-musl": "19.4.2", + "@nx/nx-linux-x64-gnu": "19.4.2", + "@nx/nx-linux-x64-musl": "19.4.2", + "@nx/nx-win32-arm64-msvc": "19.4.2", + "@nx/nx-win32-x64-msvc": "19.4.2" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -26201,16 +26298,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/nx/node_modules/dotenv": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", - "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "node_modules/nx/node_modules/dotenv-expand": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", "dev": true, + "dependencies": { + "dotenv": "^16.4.4" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/nx/node_modules/has-flag": { @@ -26310,9 +26410,9 @@ } }, "node_modules/nx/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/nx/node_modules/y18n": { @@ -26343,16 +26443,17 @@ } }, "node_modules/nypm": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", - "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.9.tgz", + "integrity": "sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==", "dev": true, "dependencies": { "citty": "^0.1.6", "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", - "ufo": "^1.4.0" + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" }, "bin": { "nypm": "dist/cli.mjs" @@ -26513,10 +26614,13 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -27087,9 +27191,9 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "dev": true, "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", @@ -27097,9 +27201,9 @@ "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" @@ -27118,6 +27222,12 @@ "node": ">= 14" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/pacote": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", @@ -27266,22 +27376,18 @@ } }, "node_modules/pacote/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/pacote/node_modules/normalize-package-data": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", - "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "dependencies": { "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -27414,9 +27520,9 @@ } }, "node_modules/param-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/parent-module": { @@ -27451,9 +27557,9 @@ } }, "node_modules/parse-imports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.0.tgz", - "integrity": "sha512-JQWgmK2o4w8leUkZeZPatWdAny6vXGU/3siIUvMF6J2rDCud9aTt8h/px9oZJ6U3EcfhngBJ635uPFI0q0VAeA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz", + "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==", "dev": true, "dependencies": { "es-module-lexer": "^1.5.3", @@ -27594,9 +27700,9 @@ } }, "node_modules/pascal-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/patch-package": { @@ -27698,6 +27804,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -27751,6 +27858,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -27794,9 +27902,9 @@ } }, "node_modules/path-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/path-exists": { @@ -27846,13 +27954,10 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -27971,6 +28076,17 @@ "node": ">=10" } }, + "node_modules/pkg-types": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "dev": true, + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -28175,6 +28291,15 @@ } } }, + "node_modules/postcss-loader/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", @@ -28308,9 +28433,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -28680,7 +28805,7 @@ "version": "21.5.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.5.0.tgz", "integrity": "sha512-prvy9rdauyIaaEgefQRcw9zhQnYQbl8O1Gj5VJazKJ7kwNx703+Paw/1bwA+b96jj/S+r55hrmF5SfiEG5PUcg==", - "deprecated": "< 22.5.0 is no longer supported", + "deprecated": "< 22.6.4 is no longer supported", "dev": true, "hasInstallScript": true, "dependencies": { @@ -28709,6 +28834,23 @@ "node": ">=16.3.0" } }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.14.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", @@ -28773,9 +28915,9 @@ ] }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", + "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", "dev": true, "dependencies": { "side-channel": "^1.0.6" @@ -28976,12 +29118,12 @@ "dev": true }, "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", "dev": true, "dependencies": { - "react-remove-scroll-bar": "^2.3.3", + "react-remove-scroll-bar": "^2.3.4", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -29475,9 +29617,9 @@ } }, "node_modules/recast": { - "version": "0.23.7", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.7.tgz", - "integrity": "sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag==", + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", "dev": true, "dependencies": { "ast-types": "^0.16.1", @@ -29512,9 +29654,9 @@ } }, "node_modules/recast/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/rechoir": { @@ -30113,9 +30255,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rimraf": { @@ -30172,9 +30314,9 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true }, "node_modules/run-async": { @@ -30232,9 +30374,9 @@ } }, "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/safe-array-concat": { "version": "1.1.2", @@ -30355,9 +30497,9 @@ } }, "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "dev": true, "optional": true }, @@ -30488,9 +30630,9 @@ } }, "node_modules/sentence-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/serialize-javascript": { @@ -30709,6 +30851,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -31039,13 +31182,12 @@ "dev": true }, "node_modules/smol-toml": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.2.1.tgz", - "integrity": "sha512-OtZKrVrGIT+m++lxyF0z5n68nkwdgZotPhy89bfA4T7nSWe0xeQtfbjM1z5VLTilJdWXH46g8i0oAcpQNkzZTg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.2.2.tgz", + "integrity": "sha512-fVEjX2ybKdJKzFL46VshQbj9PuA4IUKivalgp48/3zwS9vXzyykzQ6AX92UxHSvWJagziMRLeHMgEzoGO7A8hQ==", "dev": true, "engines": { - "node": ">= 18", - "pnpm": ">= 9" + "node": ">= 18" } }, "node_modules/snake-case": { @@ -31059,9 +31201,9 @@ } }, "node_modules/snake-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/sockjs": { @@ -31099,14 +31241,14 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", - "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dev": true, "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" @@ -31268,9 +31410,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/spdy": { @@ -31438,13 +31580,14 @@ "dev": true }, "node_modules/streamx": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", - "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" @@ -32365,9 +32508,9 @@ } }, "node_modules/synckit/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/tabbable": { @@ -32697,33 +32840,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dev": true, - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tempy/node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", @@ -32745,25 +32861,10 @@ "node": ">=14.16" } }, - "node_modules/tempy/node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dev": true, - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "version": "5.31.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz", + "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -32952,6 +33053,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -32980,6 +33082,15 @@ "node": "*" } }, + "node_modules/text-decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", + "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -33146,9 +33257,9 @@ } }, "node_modules/tocbot": { - "version": "4.27.20", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.27.20.tgz", - "integrity": "sha512-6M78FT20+FA5edtx7KowLvhG3gbZ6GRcEkL/0b2TcPbn6Ba+1ayI3SEVxe25zjkWGs0jd04InImaO81Hd8Hukw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", + "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", "dev": true }, "node_modules/toidentifier": { @@ -33352,6 +33463,15 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -34270,9 +34390,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "dev": true, "optional": true, "bin": { @@ -34407,9 +34527,9 @@ } }, "node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, "dependencies": { "@types/unist": "^3.0.0", @@ -34456,15 +34576,18 @@ } }, "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/unist-util-is": { @@ -34570,9 +34693,9 @@ } }, "node_modules/unplugin": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz", - "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.11.0.tgz", + "integrity": "sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==", "dev": true, "dependencies": { "acorn": "^8.11.3", @@ -34585,9 +34708,9 @@ } }, "node_modules/unplugin/node_modules/webpack-virtual-modules": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", - "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true }, "node_modules/untildify": { @@ -34610,9 +34733,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -34746,15 +34869,15 @@ } }, "node_modules/upper-case-first/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/upper-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/uri-js": { @@ -34912,9 +35035,9 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -35542,9 +35665,9 @@ } }, "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -35553,10 +35676,10 @@ "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", + "enhanced-resolve": "^5.17.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -36231,6 +36354,15 @@ "concat-map": "0.0.1" } }, + "node_modules/workbox-build/node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/workbox-build/node_modules/estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", @@ -36369,6 +36501,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/workbox-build/node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/workbox-build/node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -36588,14 +36732,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/write-json-file": { @@ -36655,6 +36801,17 @@ "semver": "bin/semver" } }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/write-pkg": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", @@ -36679,9 +36836,9 @@ } }, "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" @@ -37090,22 +37247,6 @@ } } }, - "packages/calcite-components-angular/node_modules/@angular-devkit/build-angular/node_modules/@ngtools/webpack": { - "version": "17.3.8", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.8.tgz", - "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ==", - "dev": true, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "typescript": ">=5.2 <5.5", - "webpack": "^5.54.0" - } - }, "packages/calcite-components-angular/node_modules/@babel/core": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", @@ -37160,6 +37301,18 @@ "node": ">=6.9.0" } }, + "packages/calcite-components-angular/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "packages/calcite-components-angular/node_modules/@babel/helper-define-polyfill-provider": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", @@ -37873,6 +38026,19 @@ "node": ">=4.0" } }, + "packages/calcite-components-angular/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "packages/calcite-components-angular/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -38515,6 +38681,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/calcite-components/node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "packages/calcite-components/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -38560,7 +38732,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/@typescript-eslint/parser": { "version": "5.62.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", @@ -38586,7 +38759,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "peer": true, "dependencies": { "@typescript-eslint/types": "5.62.0", @@ -38602,7 +38776,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/@typescript-eslint/types": { "version": "5.62.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -38614,7 +38789,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "peer": true, "dependencies": { "@typescript-eslint/types": "5.62.0", @@ -38640,7 +38816,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "peer": true, "dependencies": { "@typescript-eslint/types": "5.62.0", @@ -38656,7 +38833,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/globby": { "version": "11.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "peer": true, "dependencies": { "array-union": "^2.1.0", @@ -38675,7 +38853,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/slash": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "peer": true, "engines": { "node": ">=8" @@ -38683,7 +38862,8 @@ }, "packages/eslint-plugin-calcite-components/node_modules/stencil-eslint-core": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stencil-eslint-core/-/stencil-eslint-core-0.4.1.tgz", + "integrity": "sha512-Nep0M+YNzHBK/Y0rzoKP6+VlNp9TkoliWFQBcKb2JRP/lJiPxwlUegs9eXUfzQoJ38AG/Hq8COi8xI5rc/jNJQ==", "dependencies": { "eslint-utils": "~3.0.0", "tsutils": "~3.21.0" diff --git a/packages/calcite-components/conventions/Styling.md b/packages/calcite-components/conventions/Styling.md index ec5b51d3d6d..c8a4e80e2a6 100644 --- a/packages/calcite-components/conventions/Styling.md +++ b/packages/calcite-components/conventions/Styling.md @@ -83,6 +83,10 @@ There are some edge cases where you may wish to isolate and use only the values } ``` +#### Component Tokens + +Component tokens provide custom theming to individual components. Component tokens inherit from the global semantic tokens provided by Calcite Design Tokens. + ## Legacy Tokens In Calcite's [2.0.0](https://github.com/Esri/calcite-design-system/releases/tag/%40esri%2Fcalcite-design-tokens%402.0.0) release, design tokens were refactored, which included the removal and refactoring of legacy CSS custom properties. Refer to the [map of token changes from 2.0.0](https://github.com/Esri/calcite-design-tokens/CHANGELOG.md#20-map-of-token-changes) for a more comprehensive list of changes. diff --git a/packages/calcite-components/src/assets/styles/_floating-ui.scss b/packages/calcite-components/src/assets/styles/_floating-ui.scss index 3783853269d..31f728a4758 100644 --- a/packages/calcite-components/src/assets/styles/_floating-ui.scss +++ b/packages/calcite-components/src/assets/styles/_floating-ui.scss @@ -3,19 +3,19 @@ $floating-ui-transform-top: translateY(5px); $floating-ui-transform-left: translateX(5px); $floating-ui-transform-right: translateX(-5px); -@mixin floating-ui-base { - --calcite-floating-ui-transition: var(--calcite-animation-timing); - --calcite-floating-ui-z-index: theme("zIndex.dropdown"); -} - -@mixin floatingUIAnim { +@mixin floatingUIAnim($boxShadow, $borderRadius, $borderWidth, $borderColor, $backgroundColor) { .calcite-floating-ui-anim { position: relative; - transition: var(--calcite-floating-ui-transition); + transition: var(--calcite-animation-timing); transition-property: transform, visibility, opacity; opacity: 0; - box-shadow: $shadow-2; - @apply rounded z-default; + border-style: solid; + border-width: #{$borderWidth}; + box-shadow: #{$boxShadow}; + border-radius: #{$borderRadius}; + z-index: var(--calcite-z-index); + background-color: #{$backgroundColor}; + border-color: #{$borderColor}; } } @@ -24,9 +24,16 @@ $floating-ui-transform-right: translateX(-5px); transform: translate(0); } -@mixin floatingUIElemAnim($selector) { +@mixin floatingUIElemAnim( + $selector, + $boxShadow: "var(--calcite-shadow-md)", + $borderRadius: "var(--calcite-corner-radius-0)", + $borderWidth: "var(--calcite-border-width-none)", + $borderColor: "var(--calcite-color-border-3)", + $backgroundColor: "var(--calcite-color-foreground-1)" +) { #{$selector} { - @include floatingUIAnim(); + @include floatingUIAnim($boxShadow, $borderRadius, $borderWidth, $borderColor, $backgroundColor); &[data-placement^="bottom"] .calcite-floating-ui-anim { transform: $floating-ui-transform-bottom; @@ -50,8 +57,8 @@ $floating-ui-transform-right: translateX(-5px); } } -@mixin floatingUIHostAnim { - @include floatingUIAnim(); +@mixin floatingUIHostAnim($boxShadow, $borderRadius, $borderWidth, $borderColor, $backgroundColor) { + @include floatingUIAnim($boxShadow, $borderRadius, $borderWidth, $borderColor, $backgroundColor); :host([data-placement^="bottom"]) .calcite-floating-ui-anim { transform: $floating-ui-transform-bottom; @@ -74,10 +81,10 @@ $floating-ui-transform-right: translateX(-5px); } } -@mixin floatingUIContainer() { +@mixin floatingUIContainer($zIndex) { display: block; position: absolute; - z-index: var(--calcite-floating-ui-z-index); + z-index: #{$zIndex}; } @mixin floatingUIWrapper { @@ -88,25 +95,34 @@ $floating-ui-transform-right: translateX(-5px); visibility: visible; } -@mixin floatingUIHost() { +@mixin floatingUIHost( + $zIndex: "var(--calcite-z-index-dropdown)", + $boxShadow: "var(--calcite-shadow-md)", + $borderRadius: "var(--calcite-corner-radius-0)", + $borderWidth: "var(--calcite-border-width-none)", + $borderColor: "var(--calcite-color-border-3)", + $backgroundColor: "var(--calcite-color-foreground-1)" +) { :host { - @include floatingUIContainer(); + @include floatingUIContainer($zIndex); } - @include floatingUIHostAnim(); + @include floatingUIHostAnim($boxShadow, $borderRadius, $borderWidth, $borderColor, $backgroundColor); @include calciteHydratedHidden(); + + @include floatingUIArrow($backgroundColor, $borderColor); } -@mixin floatingUIArrow { +@mixin floatingUIArrow($backgroundColor, $borderColor) { .calcite-floating-ui-arrow { - @apply -z-default - absolute - pointer-events-none - fill-background-foreground-1; + z-index: var(--calcite-z-index-default); + position: absolute; + pointer-events: none; + fill: #{$backgroundColor}; } .calcite-floating-ui-arrow__stroke { - stroke: theme("borderColor.color.3"); + stroke: #{$borderColor}; } } diff --git a/packages/calcite-components/src/assets/styles/_header.scss b/packages/calcite-components/src/assets/styles/_header.scss index 6b1befbdcc1..6639e20f323 100644 --- a/packages/calcite-components/src/assets/styles/_header.scss +++ b/packages/calcite-components/src/assets/styles/_header.scss @@ -1,17 +1,26 @@ -/* Shared styles for header elements */ -.header { - @apply text-color-2 - fill-color-2 - m-0 - flex - content-between - items-center; -} +@mixin header( + $textColor: "--calcite-color-text-2", + $fontWeight: "--calcite-font-weight-medium", + $spacing: "--calcite-spacing-xxs" +) { + /* Shared styles for header elements */ + .header { + color: var(#{$textColor}, var(--calcite-color-text-2)); + fill: var(#{$textColor}, var(--calcite-color-text-2)); + margin: 0px; + display: flex; + align-content: space-between; + align-items: center; + } -.heading { - @apply m-0 p-0 font-medium; -} + .heading { + margin: 0px; + padding: 0px; + font-weight: var(#{$fontWeight}, var(--calcite-font-weight-medium)); + } -.header .heading { - @apply flex-auto p-2; + .header .heading { + flex: 1 1 auto; + padding: var(#{$spacing}, var(--calcite-spacing-xxs)); + } } diff --git a/packages/calcite-components/src/assets/styles/_host.scss b/packages/calcite-components/src/assets/styles/_host.scss index cde73f0c6ad..9072421d857 100644 --- a/packages/calcite-components/src/assets/styles/_host.scss +++ b/packages/calcite-components/src/assets/styles/_host.scss @@ -8,3 +8,11 @@ color: var(--calcite-color-text-2); font-size: var(--calcite-font-size--1); } + +@mixin base-host() { + /* Base ":host" styles for the component */ + box-sizing: border-box; + * { + box-sizing: border-box; + } +} diff --git a/packages/calcite-components/src/assets/styles/_shadow.scss b/packages/calcite-components/src/assets/styles/_shadow.scss deleted file mode 100644 index 1945754888b..00000000000 --- a/packages/calcite-components/src/assets/styles/_shadow.scss +++ /dev/null @@ -1,14 +0,0 @@ -%shadow-vars { - /* - * Component shadow variables - */ - --calcite-shadow-0: 0 4px 8px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04); - --calcite-shadow-1: 0 4px 8px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04); - --calcite-shadow-1-hover: 0 4px 16px 0 rgba(0, 0, 0, 0.08), 0 2px 8px 0 rgba(0, 0, 0, 0.04); - --calcite-shadow-1-press: 0 1px 6px -1px rgba(0, 0, 0, 0.16), 0 1px 2px -1px rgba(0, 0, 0, 0.08); - --calcite-shadow-2: 0 6px 20px -4px rgba(0, 0, 0, 0.1), 0 4px 12px -2px rgba(0, 0, 0, 0.08); - --calcite-shadow-2-hover: 0 12px 32px -2px rgba(0, 0, 0, 0.1), 0 4px 20px 0 rgba(0, 0, 0, 0.08); - --calcite-shadow-2-press: 0 2px 12px -4px rgba(0, 0, 0, 0.2), 0 2px 4px -2px rgba(0, 0, 0, 0.16); - --calcite-shadow-border-bottom: 0 1px 0 var(--calcite-color-border-3); - --calcite-shadow-border-active: 0 0 0 1px var(--calcite-color-brand-press); -} diff --git a/packages/calcite-components/src/assets/styles/_sortable.scss b/packages/calcite-components/src/assets/styles/_sortable.scss index ae119bc7ea5..43a497bf17d 100644 --- a/packages/calcite-components/src/assets/styles/_sortable.scss +++ b/packages/calcite-components/src/assets/styles/_sortable.scss @@ -9,20 +9,17 @@ .calcite-sortable--ghost::before { content: ""; - @apply box-border - border - border-dashed - border-color-brand - bg-foreground-2 - absolute - top-0 - left-0 - bottom-0 - right-0 - z-default; + box-sizing: border-box; + border-width: var(--calcite-border-width-sm); + border-style: dashed; + border-color: var(--calcite-color-brand); + background-color: var(--calcite-color-foreground-2); + position: absolute; + inset: 0px; + z-index: var(--calcite-z-index); } .calcite-sortable--drag { - @apply shadow-2; + box-shadow: var(--calcite-shadow-2); } } diff --git a/packages/calcite-components/src/assets/styles/_spacing.scss b/packages/calcite-components/src/assets/styles/_spacing.scss deleted file mode 100644 index 2a8682e1ffe..00000000000 --- a/packages/calcite-components/src/assets/styles/_spacing.scss +++ /dev/null @@ -1,26 +0,0 @@ -%component-spacing { - /* Component spacing variables */ - - --calcite-icon-size: 1rem; - - --calcite-spacing-eighth: theme("spacing[0.5]"); - - --calcite-spacing-quarter: theme("spacing.1"); - - --calcite-spacing-half: theme("spacing.2"); - - --calcite-spacing-three-quarters: theme("spacing.3"); - - --calcite-spacing: theme("spacing.4"); - - --calcite-spacing-plus-quarter: theme("spacing.5"); - - --calcite-spacing-plus-half: theme("spacing.6"); - - --calcite-spacing-double: theme("spacing.8"); - - --calcite-menu-min-width: theme("spacing.40"); - - --calcite-header-min-height: theme("spacing.12"); - --calcite-footer-min-height: theme("spacing.12"); -} diff --git a/packages/calcite-components/src/assets/styles/_x-button.scss b/packages/calcite-components/src/assets/styles/_x-button.scss new file mode 100644 index 00000000000..d17ab1bf819 --- /dev/null +++ b/packages/calcite-components/src/assets/styles/_x-button.scss @@ -0,0 +1,61 @@ +@mixin xButton( + $textColor: "--calcite-color-text-3", + $backgroundColor: "--calcite-color-foreground-2", + $hoverTextColor: "--calcite-color-text-3", + $hoverBackgroundColor: "--calcite-color-foreground-3", + $activeBorderColor: "--calcite-color-brand", + $borderWidth: "--calcite-border-width-md" +) { + .x-button { + appearance: none; + align-content: center; + cursor: pointer; + display: flex; + outline-color: transparent; + align-items: center; + justify-content: center; + margin: 0px; + align-self: center; + color: var(#{$textColor}, var(--calcite-color-text-3)); + transition: + color, + background-color, + border-color var(--calcite-animation-timing) ease-in-out 0s, + outline 0s, + outline-offset 0s; + border-width: var(#{$borderWidth}, var(--calcite-border-width-md)); + border-radius: 50%; + border-color: transparent; + background-color: var(#{$backgroundColor}, var(--calcite-color-foreground-2)); + + &:active, + &:hover { + color: var(#{$hoverTextColor}); + background-color: var(#{$hoverBackgroundColor}, var(--calcite-color-foreground-3)); + } + + &:active { + border-style: solid; + border-color: var(#{$activeBorderColor}, var(--calcite-color-brand)); + } + + & calcite-icon { + color: inherit; + } + } + + :host([scale="s"]) .x-button { + inline-size: var(--calcite-spacing-lg); + block-size: var(--calcite-spacing-lg); + } + + :host([scale="m"]) .x-button { + inline-size: var(--calcite-size-xxl); + block-size: var(--calcite-size-xxl); + } + + :host([scale="l"]) .x-button { + inline-size: var(--calcite-size-xxxl); + block-size: var(--calcite-size-xxxl); + } +} diff --git a/packages/calcite-components/src/assets/styles/global.scss b/packages/calcite-components/src/assets/styles/global.scss index f3ade88386a..74ec4c8a32e 100644 --- a/packages/calcite-components/src/assets/styles/global.scss +++ b/packages/calcite-components/src/assets/styles/global.scss @@ -1,4 +1,4 @@ -@import "~@esri/calcite-base/dist/_index"; +@import "~@esri/calcite-base/dist/index"; @import "~@esri/calcite-design-tokens/dist/scss/index"; @import "~@esri/calcite-design-tokens/dist/scss/core"; @@ -13,13 +13,10 @@ :root { @extend %type-vars; - @include floating-ui-base(); @include animation-base(); --calcite-popover-z-index: var(--calcite-z-index-popup); --calcite-border-radius: var(--calcite-border-radius-round, 4px); - --calcite-border-radius-base: 0; --calcite-offset-invert-focus: 0; // should be 0 or 1 - --calcite-panel-width-multiplier: 1; --calcite-ui-icon-color: currentColor; text-rendering: optimizeLegibility; diff --git a/packages/calcite-components/src/assets/styles/includes.scss b/packages/calcite-components/src/assets/styles/includes.scss index 222c67ae839..d2613e3aaf8 100644 --- a/packages/calcite-components/src/assets/styles/includes.scss +++ b/packages/calcite-components/src/assets/styles/includes.scss @@ -1,15 +1,16 @@ @import "~@esri/calcite-colors/dist/colors"; -@import "~@esri/calcite-base/dist/_index"; +@import "~@esri/calcite-base/dist/index"; @import "~@esri/calcite-design-tokens/dist/scss/index"; @import "~@esri/calcite-design-tokens/dist/scss/core"; /* mixins & extensions */ @import "animation"; @import "focus"; +@import "header"; @import "host"; -@import "spacing"; @import "floating-ui"; @import "sortable"; +@import "x-button"; @mixin slotted($selector, $tag, $scope: "") { #{$scope} slot[name="#{$selector}"]::slotted(#{$tag}), @@ -49,11 +50,11 @@ :host([scale="m"]) .validation-container, :host([scale="l"]) .validation-container { - padding-block-start: 0.5rem; + padding-block-start: var(--calcite-spacing-sm); } :host([scale="s"]) .validation-container { - padding-block-start: 0.25rem; + padding-block-start: var(--calcite-spacing-xxs); } } @@ -67,7 +68,7 @@ ::slotted([calcite-hydrated][disabled]), [calcite-hydrated][disabled] { /* prevent opacity stacking */ - @apply opacity-100; + opacity: var(--calcite-opacity-full); } } @@ -78,14 +79,16 @@ // used for host-specific styling when the `disabled` mixin cannot be applied on the host (e.g., `display: contents`) %disabled-host-only { - @apply opacity-disabled cursor-default select-none; + opacity: var(--calcite-opacity-disabled); + cursor: default; + user-select: none; @extend %non-interactive-host-contents; } %non-interactive-host-contents { *, ::slotted(*) { - @apply pointer-events-none; + pointer-events: none; } } @@ -99,56 +102,43 @@ @mixin base-component() { :host([hidden]) { - @apply hidden; + display: none; } [hidden] { - @apply hidden; + display: none; } } -@mixin xButton() { - :host([scale="s"]) { - .x-button { - inline-size: theme("spacing.4"); - block-size: theme("spacing.4"); - } - } - - :host([scale="m"]) { - .x-button { - inline-size: theme("spacing.6"); - block-size: theme("spacing.6"); - } - } - - :host([scale="l"]) { - .x-button { - inline-size: theme("spacing.8"); - block-size: theme("spacing.8"); - } - } - - .x-button { - @apply appearance-none bg-transparent border-2 content-center cursor-pointer flex focus-base items-center justify-center m-0 self-center text-color-3 transition-default; - - border-radius: 50%; - border-color: transparent; - background-color: var(--calcite-color-foreground-2); +@mixin srOnly() { + position: absolute; + inline-size: 1px; + block-size: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} - &:active, - &:hover { - @apply text-color-1; - background-color: var(--calcite-color-foreground-3); - } +@mixin outlineNone() { + outline: 2px solid transparent; + outline-offset: 2px; +} - &:active { - @apply border-solid; - border-color: theme("borderColor.color-brand"); - } +@mixin focusInset($outline, $outlineOffset) { + outline: var( + #{$outline}, + 2px solid var(--calcite-color-brand-hover, var(--calcite-ui-focus-color, var(--calcite-color-brand))) + ); + outline-offset: var(#{$outlineOffset}, calc(-2px * calc(1 - 2 * clamp(0, var(--calcite-offset-invert-focus), 1)))); +} - & calcite-icon { - color: inherit; - } - } +@mixin focusOutset($outline, $outlineOffset) { + outline: var( + #{$outline}, + 2px solid var(--calcite-color-brand-hover, var(--calcite-ui-focus-color, var(--calcite-color-brand))) + ); + outline-offset: var(#{$outlineOffset}, calc(2px * calc(1 - 2 * clamp(0, var(--calcite-offset-invert-focus), 1)))); } diff --git a/packages/calcite-components/src/components/accordion-item/accordion-item.e2e.ts b/packages/calcite-components/src/components/accordion-item/accordion-item.e2e.ts index 00e7d5432a6..fc22fa7c9a7 100644 --- a/packages/calcite-components/src/components/accordion-item/accordion-item.e2e.ts +++ b/packages/calcite-components/src/components/accordion-item/accordion-item.e2e.ts @@ -1,5 +1,5 @@ import { newE2EPage } from "@stencil/core/testing"; -import { accessible, renders, slots, hidden, focusable } from "../../tests/commonTests"; +import { accessible, renders, slots, hidden, themed, focusable } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { CSS, IDS, SLOTS } from "./resources"; @@ -24,6 +24,49 @@ describe("calcite-accordion-item", () => { focusable("calcite-accordion-item"); }); + describe("theme", () => { + const tokens = { + "--calcite-accordion-item-text-color": { + selector: "calcite-accordion-item", + targetProp: "color", + }, + "--calcite-accordion-item-background-color": { + selector: "calcite-accordion-item", + targetProp: "backgroundColor", + }, + "--calcite-accordion-item-border-color": { + selector: "calcite-accordion-item", + shadowSelector: `.${CSS.header}`, + targetProp: "borderBottomColor", + }, + "--calcite-accordion-item-description-text-color": { + selector: "calcite-accordion-item", + shadowSelector: `.${CSS.description}`, + targetProp: "color", + }, + "--calcite-accordion-item-heading-text-color": { + selector: "calcite-accordion-item", + shadowSelector: `.${CSS.heading}`, + targetProp: "color", + }, + "--calcite-accordion-item-icon-color": { + selector: "calcite-accordion-item", + shadowSelector: ".icon", + targetProp: "--calcite-icon-color", + }, + "--calcite-accordion-item-expand-icon-color": { + selector: "calcite-accordion-item", + shadowSelector: ".expand-icon", + targetProp: "--calcite-icon-color", + }, + } as const; + + themed( + `Accordion Item Content `, + tokens, + ); + }); + it("properly uses ARIA and roles", async () => { // this test covers a11y relationships not reported by axe-core/accessible test helper diff --git a/packages/calcite-components/src/components/accordion-item/accordion-item.scss b/packages/calcite-components/src/components/accordion-item/accordion-item.scss index f214f886e3d..d682d291f29 100644 --- a/packages/calcite-components/src/components/accordion-item/accordion-item.scss +++ b/packages/calcite-components/src/components/accordion-item/accordion-item.scss @@ -1,210 +1,262 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-accordion-item-background-color: defines the background color for the component. + * @prop --calcite-accordion-item-border-color: defines the border color for the component. + * @prop --calcite-accordion-item-description-text-color: defines the text color of the description in the component. + * @prop --calcite-accordion-item-heading-text-color: defines the text color of the heading in the component. + * @prop --calcite-accordion-item-icon-color: defines the icon color for the component. + * @prop --calcite-accordion-item-expand-icon-color: defines the icon color for the component. + * @prop --calcite-accordion-item-text-color: defines the text color for the component. + * + */ + %icon-position { /* icon rotation variables */ - --calcite-accordion-item-icon-rotation: calc(theme("rotate.90") * -1); - --calcite-accordion-item-active-icon-rotation: theme("rotate.0"); - --calcite-accordion-item-icon-rotation-rtl: theme("rotate.90"); - --calcite-accordion-item-active-icon-rotation-rtl: theme("rotate.0"); + --calcite-internal-accordion-item-icon-rotation: calc(theme("rotate.90") * -1); + --calcite-internal-accordion-item-active-icon-rotation: theme("rotate.0"); + --calcite-internal-accordion-item-icon-rotation-rtl: theme("rotate.90"); + --calcite-internal-accordion-item-active-icon-rotation-rtl: theme("rotate.0"); +} + +:host { + @apply relative + flex + flex-col + no-underline; + color: var(--calcite-accordion-item-text-color, var(--calcite-color-text-3)); + background-color: var(--calcite-accordion-item-background-color, var(--calcite-color-foreground-1)); } // icon position variants for child .icon-position--start { @extend %icon-position; - --calcite-accordion-item-flex-direction: row-reverse; - --calcite-accordion-item-icon-spacing-start: 0; - --calcite-accordion-item-icon-spacing-end: var(--calcite-accordion-icon-margin); + --calcite-internal-accordion-item-flex-direction: row-reverse; + --calcite-internal-accordion-item-icon-space-x-start: 0; + --calcite-internal-accordion-item-icon-space-x-end: var(--calcite-internal-accordion-item-icon-space); } .icon-position--end { @extend %icon-position; - --calcite-accordion-item-flex-direction: row; - --calcite-accordion-item-icon-spacing-start: var(--calcite-accordion-icon-margin); - --calcite-accordion-item-icon-spacing-end: 0; + --calcite-internal-accordion-item-flex-direction: row; + --calcite-internal-accordion-item-icon-space-x-start: var(--calcite-internal-accordion-item-icon-space); + --calcite-internal-accordion-item-icon-space-x-end: 0; } .icon-position--end:not(.icon-type--plus-minus) { - --calcite-accordion-item-icon-rotation: theme("rotate.0"); - --calcite-accordion-item-active-icon-rotation: theme("rotate.180"); - --calcite-accordion-item-icon-rotation-rtl: theme("rotate.0"); - --calcite-accordion-item-active-icon-rotation-rtl: calc(theme("rotate.180") * -1); + --calcite-internal-accordion-item-icon-rotation: theme("rotate.0"); + --calcite-internal-accordion-item-active-icon-rotation: theme("rotate.180"); + --calcite-internal-accordion-item-icon-rotation-rtl: theme("rotate.0"); + --calcite-internal-accordion-item-active-icon-rotation-rtl: calc(theme("rotate.180") * -1); } -:host { - @apply text-color-3 - relative - flex - flex-col - no-underline; - background-color: var(--calcite-accordion-item-background, theme("backgroundColor.foreground.1")); -} - -// focus styles -:host .header-content { - @apply focus-base; -} - -:host(:focus) .header-content { - @apply focus-inset - outline-none; -} - -:host([expanded]) { - @apply text-color-1; - & .content { - @apply text-color-1 block; - } - & .header { - border-block-end-color: transparent; - } +.content, +.header { + border-block-end-width: var(--calcite-border-width-sm); + border-block-end-style: solid; + border-block-end-color: var(--calcite-accordion-item-border-color, var(--calcite-color-border-2)); } // .header / content -:host .header { +.header { @apply flex items-stretch; -} -:host .icon { - @apply text-color-3 - relative - m-0 - inline-flex - duration-150 - ease-in-out; - margin-inline-end: var(--calcite-accordion-item-icon-spacing-start); - margin-inline-start: var(--calcite-accordion-item-icon-spacing-end); + * { + @apply inline-flex + items-center + duration-150 + ease-in-out; + @include word-break(); + } } -.icon--start { +.actions-start, +.actions-end { @apply flex items-center; - margin-inline-end: var(--calcite-accordion-icon-margin); } -.icon--end { - @apply flex items-center; - margin-inline-end: var(--calcite-accordion-icon-margin); - margin-inline-start: var(--calcite-accordion-icon-margin); +// focus styles +.header-content { + @apply focus-base flex-grow cursor-pointer; + + padding: var(--calcite-internal-accordion-item-content-space); + flex-direction: var(--calcite-internal-accordion-item-flex-direction); } .header-container { - inline-size: 100%; + inline-size: var(--calcite-container-size-content-fluid); } -.content { - padding: var(--calcite-accordion-item-padding); +// accordion item title +.header-text { + @apply my-0 flex-grow flex-col py-0; + text-align: initial; + margin-inline-end: theme("margin.auto"); } -:host .content, -:host .header { - border-block-end: 1px solid var(--calcite-accordion-item-border, theme("borderColor.color.2")); +.heading, +.description { + @apply flex; + inline-size: var(--calcite-container-size-content-fluid); } -:host .header * { - @apply inline-flex - items-center - duration-150 - ease-in-out; - @include word-break(); +.heading { + @apply font-medium; + color: var( + --calcite-accordion-item-heading-text-color, + var(--calcite-accordion-item-text-color, var(--calcite-color-text-2)) + ); } -:host .content { - @apply text-color-3 hidden pt-0; - text-align: initial; +.description { + @apply mt-1; + color: var( + --calcite-accordion-item-description-text-color, + var(--calcite-accordion-item-text-color, var(--calcite-color-text-3)) + ); } -// accordion item icon -:host .expand-icon { - @apply text-color-3; - margin-inline-start: var(--calcite-accordion-item-icon-spacing-start); - margin-inline-end: var(--calcite-accordion-item-icon-spacing-end); - transform: rotate(var(--calcite-accordion-item-icon-rotation)); -} +calcite-icon { + --calcite-icon-color: var( + --calcite-accordion-item-icon-color, + var(--calcite-accordion-item-text-color, var(--calcite-color-text-3)) + ); -.calcite--rtl .expand-icon { - transform: rotate(var(--calcite-accordion-item-icon-rotation-rtl)); -} + @apply relative + m-0 + duration-150 + ease-in-out + items-center; -:host([expanded]) .expand-icon { - @apply text-color-3; - transform: rotate(var(--calcite-accordion-item-active-icon-rotation)); -} + margin-inline-end: var(--calcite-internal-accordion-item-icon-space-x-start, 0); + margin-inline-start: var(--calcite-internal-accordion-item-icon-space-x-end, 0); + + &.expand-icon { + --calcite-icon-color: var( + --calcite-accordion-item-expand-icon-color, + var(--calcite-accordion-item-icon-color, var(--calcite-accordion-item-text-color, var(--calcite-color-text-3))) + ); + margin-inline-start: var(--calcite-internal-accordion-item-icon-space-x-start); + margin-inline-end: var(--calcite-internal-accordion-item-icon-space-x-end); + transform: rotate(var(--calcite-internal-accordion-item-icon-rotation)); + } -:host([expanded]) .calcite--rtl .expand-icon { - transform: rotate(var(--calcite-accordion-item-active-icon-rotation-rtl)); + &.icon--start { + margin-inline-end: var(--calcite-internal-accordion-item-icon-space); + } + + &.icon--end { + margin-inline-end: var(--calcite-internal-accordion-item-icon-space); + margin-inline-start: var(--calcite-internal-accordion-item-icon-space); + } } -// accordion item title -:host .header-text { - @apply my-0 flex-grow flex-col py-0; +.content { + @apply hidden; + padding: var(--calcite-internal-accordion-item-content-space); + padding-block-start: 0; text-align: initial; - margin-inline-end: theme("margin.auto"); } -:host .heading, -:host .description { - @apply flex w-full; +.calcite--rtl .expand-icon { + transform: rotate(var(--calcite-internal-accordion-item-icon-rotation-rtl)); } -:host .heading { - @apply text-color-2 font-medium; -} -:host .description { - @apply text-color-3 mt-1; +:host(:focus) { + .header-content { + @apply focus-inset outline-none; + } } -:host(:focus), -:host(:hover) { - & .heading { - @apply text-color-1; +:host([expanded]) { + color: var(--calcite-accordion-item-text-color, var(--calcite-color-text-1)); + + .content { + @apply block; } - & .icon { - @apply text-color-1; + .header { + border-block-end-color: transparent; } - & .expand-icon { - @apply text-color-1; + .expand-icon { + transform: rotate(var(--calcite-internal-accordion-item-active-icon-rotation)); } - & .description { - @apply text-color-2; + + .calcite--rtl .expand-icon { + transform: rotate(var(--calcite-internal-accordion-item-active-icon-rotation-rtl)); + } + + &:host(:last-child) { + .header { + border-block-end-color: transparent; + } + } +} + +:host(:last-child) { + .content, + .header { + border-block-end-color: var(--calcite-accordion-border-color, var(--calcite-color-border-2)); } } :host(:focus), +:host(:hover), :host(:active), :host([expanded]) { & .heading { - @apply text-color-1; + color: var( + --calcite-accordion-item-heading-text-color, + var(--calcite-accordion-item-text-color, var(--calcite-color-text-1)) + ); } - & .icon { - @apply text-color-1; + + .icon { + color: var( + --calcite-accordion-item-icon-color, + var(--calcite-accordion-item-text-color, var(--calcite-color-text-1)) + ); } - & .description { - @apply text-color-2; + + .expand-icon { + color: var( + --calcite-accordion-item-expand-icon-color, + var(--calcite-accordion-item-icon-color, var(--calcite-accordion-item-text-color, var(--calcite-color-text-1))) + ); } -} -.header-content { - @apply flex-grow cursor-pointer; - padding: var(--calcite-accordion-item-padding); - flex-direction: var(--calcite-accordion-item-flex-direction); + & .description { + color: var( + --calcite-accordion-item-description-text-color, + var(--calcite-accordion-item-text-color, var(--calcite-color-text-2)) + ); + } } -.actions-start, -.actions-end { - @apply flex items-center; +:host([expanded]) { + .expand-icon { + color: var( + --calcite-accordion-item-expand-icon-color, + var(--calcite-accordion-item-icon-color, var(--calcite-accordion-item-text-color, var(--calcite-color-text-3))) + ); + } } @media (forced-colors: active) { :host([expanded]) { - & .header { + .header { border-block-end: none; } - & .heading { + .heading { /** give visual indicator of expanded state since subtle color changes can't be done **/ font-weight: bolder; } } :host(:hover), :host(:focus) { - & .heading { + .heading { /** give visual indicator of expandability/click-ability since subtle color changes can't be done **/ text-decoration: underline; } diff --git a/packages/calcite-components/src/components/accordion-item/accordion-item.tsx b/packages/calcite-components/src/components/accordion-item/accordion-item.tsx index c8e99f9512b..6dbda17e690 100644 --- a/packages/calcite-components/src/components/accordion-item/accordion-item.tsx +++ b/packages/calcite-components/src/components/accordion-item/accordion-item.tsx @@ -163,7 +163,7 @@ export class AccordionItem implements ConditionalSlotComponent, LoadableComponen const dir = getElementDir(this.el); const iconStartEl = this.iconStart ? (
diff --git a/packages/calcite-components/src/components/accordion-item/resources.ts b/packages/calcite-components/src/components/accordion-item/resources.ts index 32de2307438..8ae2084ad6d 100644 --- a/packages/calcite-components/src/components/accordion-item/resources.ts +++ b/packages/calcite-components/src/components/accordion-item/resources.ts @@ -4,6 +4,7 @@ export const SLOTS = { }; export const CSS = { + container: "container", icon: "icon", header: "header", headerContent: "header-content", @@ -17,6 +18,11 @@ export const CSS = { iconStart: "icon--start", iconEnd: "icon--end", headerContainer: "header-container", + iconPositionStart: "icon-position--start", + iconPositionEnd: "icon-position--end", + iconTypeChevron: "icon-type--chevron", + iconTypeCaret: "icon-type--caret", + iconTypePlusMinus: "icon-type--plus-minus", }; export const IDS = { diff --git a/packages/calcite-components/src/components/accordion/accordion.e2e.ts b/packages/calcite-components/src/components/accordion/accordion.e2e.ts index 00058a67578..8543311c57c 100644 --- a/packages/calcite-components/src/components/accordion/accordion.e2e.ts +++ b/packages/calcite-components/src/components/accordion/accordion.e2e.ts @@ -1,5 +1,5 @@ import { newE2EPage } from "@stencil/core/testing"; -import { accessible, defaults, hidden, reflects, renders } from "../../tests/commonTests"; +import { accessible, defaults, hidden, reflects, renders, themed } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { CSS } from "../accordion-item/resources"; @@ -84,6 +84,16 @@ describe("calcite-accordion", () => { ]); }); + describe("theme", () => { + const tokens = { + "--calcite-accordion-border-color": { + shadowSelector: ".accordion", + targetProp: "borderColor", + }, + } as const; + themed(`${accordionContent}`, tokens); + }); + it("inheritable props: `iconPosition`, `iconType`, `selectionMode`, and `scale` modified on the parent get passed into items", async () => { const page = await newE2EPage(); await page.setContent(` diff --git a/packages/calcite-components/src/components/accordion/accordion.scss b/packages/calcite-components/src/components/accordion/accordion.scss index 896e5da332a..eb6db61d212 100644 --- a/packages/calcite-components/src/components/accordion/accordion.scss +++ b/packages/calcite-components/src/components/accordion/accordion.scss @@ -1,41 +1,60 @@ -// scale variants for child -:host([scale="s"]) { - --calcite-accordion-item-spacing-unit: theme("spacing.1"); - --calcite-accordion-icon-margin: theme("spacing.2"); - --calcite-accordion-item-padding: var(--calcite-accordion-item-spacing-unit) theme("spacing.2"); - @apply text-n2h; -} - -:host([scale="m"]) { - --calcite-accordion-item-spacing-unit: theme("spacing.2"); - --calcite-accordion-icon-margin: theme("spacing.3"); - --calcite-accordion-item-padding: var(--calcite-accordion-item-spacing-unit) theme("spacing.3"); - @apply text-n1h; -} - -:host([scale="l"]) { - --calcite-accordion-item-spacing-unit: theme("spacing.3"); - --calcite-accordion-icon-margin: theme("spacing.4"); - --calcite-accordion-item-padding: var(--calcite-accordion-item-spacing-unit) theme("spacing.4"); - @apply text-0h; -} +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-accordion-border-color: defines the border color for the component and it's slotted accordion-items. + */ :host { @apply relative block - max-w-full leading-6; - --calcite-accordion-item-border: theme("borderColor.color.2"); - --calcite-accordion-item-background: theme("backgroundColor.foreground.1"); + max-inline-size: var(--calcite-container-size-content-fluid); + font-size: var(--calcite-internal-accordion-font-size); + line-height: var(--calcite-internal-accordion-line-height); +} + +::slotted(calcite-accordion-item) { + --calcite-internal-accordion-item-icon-space: var(--calcite-internal-accordion-space-large); + --calcite-internal-accordion-item-content-space: var(--calcite-internal-accordion-space-small) + var(--calcite-internal-accordion-space-large); } -.accordion--transparent { - --calcite-accordion-item-border: transparent; - --calcite-accordion-item-background: transparent; +:host([appearance="transparent"]) { + ::slotted(calcite-accordion-item) { + --calcite-accordion-item-border-color: var(--calcite-color-transparent); + --calcite-accordion-item-background-color: var(--calcite-color-transparent); + } } .accordion { - @apply border border-solid border-color-2 border-b-0; + border-width: var(--calcite-border-width-sm); + border-color: var(--calcite-accordion-border-color, var(--calcite-color-border-2)); + border-block-end-width: var(--calcite-border-width-none); + border-style: solid; +} + +// scale variants for child +:host([scale="s"]) { + --calcite-internal-accordion-space-small: theme("spacing.1"); + --calcite-internal-accordion-space-large: theme("spacing.2"); + --calcite-internal-accordion-font-size: var(--calcite-font-size--2); + --calcite-internal-accordion-line-height: 1rem /* 16px */; +} + +:host([scale="m"]) { + --calcite-internal-accordion-space-small: theme("spacing.2"); + --calcite-internal-accordion-space-large: theme("spacing.3"); + --calcite-internal-accordion-font-size: var(--calcite-font-size--1); + --calcite-internal-accordion-line-height: 1rem /* 16px */; +} + +:host([scale="l"]) { + --calcite-internal-accordion-space-small: theme("spacing.3"); + --calcite-internal-accordion-space-large: theme("spacing.4"); + --calcite-internal-accordion-font-size: var(--calcite-font-size-0); + --calcite-internal-accordion-line-height: 1.25rem /* 20px */; } @include base-component(); diff --git a/packages/calcite-components/src/components/action-bar/action-bar.e2e.ts b/packages/calcite-components/src/components/action-bar/action-bar.e2e.ts index 5ab4d2a3967..bd296e4fd3c 100755 --- a/packages/calcite-components/src/components/action-bar/action-bar.e2e.ts +++ b/packages/calcite-components/src/components/action-bar/action-bar.e2e.ts @@ -10,6 +10,7 @@ import { renders, slots, t9n, + themed, } from "../../tests/commonTests"; import { getFocusedElementProp } from "../../tests/utils"; import { CSS, SLOTS } from "./resources"; @@ -532,4 +533,113 @@ describe("calcite-action-bar", () => { expect(await group.getProperty("layout")).toBe("vertical"); }); + + describe("theme", () => { + describe("default", () => { + const tokens = { + "--calcite-action-bar-trigger-background-color": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "backgroundColor", + }, + "--calcite-action-bar-trigger-icon-color": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> calcite-icon", + targetProp: "color", + }, + "--calcite-action-bar-trigger-shadow": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "boxShadow", + }, + "--calcite-action-bar-trigger-text-color": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + }, + "--calcite-action-bar-trigger-background-color-active": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "backgroundColor", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-bar-trigger-background-color-focus": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "backgroundColor", + state: "focus", + }, + "--calcite-action-bar-trigger-background-color-hover": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "backgroundColor", + state: "hover", + }, + "--calcite-action-bar-trigger-icon-color-active": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-bar-trigger-icon-color-focus": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + state: "focus", + }, + "--calcite-action-bar-trigger-icon-color-hover": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + state: "hover", + }, + "--calcite-action-bar-trigger-shadow-active": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "boxShadow", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-bar-trigger-shadow-focus": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "boxShadow", + state: "focus", + }, + "--calcite-action-bar-trigger-shadow-hover": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "boxShadow", + state: "hover", + }, + "--calcite-action-bar-trigger-text-color-active": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-bar-trigger-text-color-focus": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + state: "focus", + }, + "--calcite-action-bar-trigger-text-color-hover": { + selector: "calcite-action-bar", + shadowSelector: "calcite-action-group calcite-action >>> .button", + targetProp: "color", + state: "hover", + }, + } as const; + themed(`calcite-action-bar`, tokens); + }); + describe("vertical", () => { + const tokens = { + "--calcite-action-bar-expanded-max-width": { + selector: "calcite-action-bar", + targetProp: "maxWidth", + }, + } as const; + themed(``, tokens); + }); + }); }); diff --git a/packages/calcite-components/src/components/action-bar/action-bar.scss b/packages/calcite-components/src/components/action-bar/action-bar.scss index 9e8cec562c4..aa0ab989f89 100755 --- a/packages/calcite-components/src/components/action-bar/action-bar.scss +++ b/packages/calcite-components/src/components/action-bar/action-bar.scss @@ -4,6 +4,23 @@ * These properties can be overridden using the component's tag as selector. * * @prop --calcite-action-bar-expanded-max-width: When `layout` is `"vertical"`, specifies the expanded max width of the component. + * @prop --calcite-action-bar-trigger-background-color-active: Specifies the background color of the nested trigger when active in the component. + * @prop --calcite-action-bar-trigger-background-color-focus: Specifies the background color of the nested trigger when focused in the component. + * @prop --calcite-action-bar-trigger-background-color-hover: Specifies the background color of the nested trigger when hovered in the component. + * @prop --calcite-action-bar-trigger-background-color: Specifies the background color of the nested trigger in the component. + * @prop --calcite-action-bar-trigger-icon-color-active: Specifies the icon color color of the nested trigger when active in the component + * @prop --calcite-action-bar-trigger-icon-color-focus: Specifies the icon color of the nested trigger when focused in the component. + * @prop --calcite-action-bar-trigger-icon-color-hover: Specifies the icon color of the nested trigger when hovered in the component. + * @prop --calcite-action-bar-trigger-icon-color: Specifies the icon color of the nested trigger in the component. + * @prop --calcite-action-bar-trigger-loader-color: Specifies the loader color of the nested trigger in the component component. + * @prop --calcite-action-bar-trigger-shadow-active: Specifies the shadow of the nested trigger when active in the component. + * @prop --calcite-action-bar-trigger-shadow-focus: Specifies the shadow of the nested trigger when focused in the component. + * @prop --calcite-action-bar-trigger-shadow-hover: Specifies the shadow of the nested trigger when hovered in the component. + * @prop --calcite-action-bar-trigger-shadow: Specifies the shadow of the nested trigger in the component. + * @prop --calcite-action-bar-trigger-text-color-active: Specifies the text color of the nested trigger when active in the component. + * @prop --calcite-action-bar-trigger-text-color-focus: Specifies the text color of the nested trigger when focused in the component. + * @prop --calcite-action-bar-trigger-text-color-hover: Specifies the text color of the nested trigger when hovered in the component. + * @prop --calcite-action-bar-trigger-text-color: Specifies the text color of the nested trigger in the component. */ :host { @@ -11,55 +28,70 @@ @apply pointer-events-auto inline-flex self-stretch; - --calcite-action-bar-expanded-max-width: auto; } -:host([layout="vertical"]) { - @apply flex-col; - .action-group--end { - margin-block-start: auto; - } -} +calcite-action { + --calcite-action-background-color: var(--calcite-action-bar-trigger-background-color); + --calcite-action-text-color: var(--calcite-action-bar-trigger-text-color); + --calcite-action-shadow: var(--calcite-action-bar-trigger-shadow); + --calcite-action-icon-color: var(--calcite-action-bar-trigger-icon-color); -:host([layout="horizontal"]) { - @apply flex-row; - .action-group--end { - @apply ms-auto; + &:hover { + --calcite-action-background-color: var(--calcite-action-bar-trigger-background-color-hover); + --calcite-action-text-color: var(--calcite-action-bar-trigger-text-color-hover); + --calcite-action-shadow: var(--calcite-action-bar-trigger-shadow-hover); + } + &:focus { + --calcite-action-background-color: var(--calcite-action-bar-trigger-background-color-focus); + --calcite-action-text-color: var(--calcite-action-bar-trigger-text-color-focus); + --calcite-action-shadow: var(--calcite-action-bar-trigger-shadow-focus); + } + &:active { + --calcite-action-background-color: var(--calcite-action-bar-trigger-background-color-active); + --calcite-action-text-color: var(--calcite-action-bar-trigger-text-color-active); + --calcite-action-shadow: var(--calcite-action-bar-trigger-shadow-active); } } -:host([layout="vertical"][overflow-actions-disabled]) { - overflow-y: auto; +.action-group--end { + @apply justify-end; } -:host([layout="horizontal"][overflow-actions-disabled]) { - overflow-x: auto; -} +:host([layout="vertical"]) { + @apply flex-col; -:host([layout="vertical"][expanded]) { - max-inline-size: var(--calcite-action-bar-expanded-max-width); -} + &:host([overflow-actions-disabled]) { + overflow-y: auto; + } + &:host([expanded]) { + max-inline-size: var(--calcite-action-bar-expanded-max-width, auto); + } -::slotted(calcite-action-group) { - border-block-end: 1px solid var(--calcite-color-border-3); + .action-group--end { + margin-block-start: auto; + } } -:host([layout="horizontal"]) ::slotted(calcite-action-group) { - border-block-end: 0; - border-inline-end: 1px solid var(--calcite-color-border-3); -} +:host([layout="horizontal"]) { + @apply flex-row; -:host([layout="horizontal"][expand-disabled]) ::slotted(calcite-action-group:last-of-type) { - border-inline-end: 0; -} + &:host([overflow-actions-disabled]) { + overflow-x: auto; + } + &:host([expand-disabled]) { + ::slotted(calcite-action-group:last-of-type) { + border-inline-end: 0; + } + } -::slotted(calcite-action-group:last-child) { - border-block-end: 0; - border-inline-end: 0; -} + .action-group--end { + @apply ms-auto; + } -.action-group--end { - @apply justify-end; + ::slotted(calcite-action-group) { + border-block-end: 0; + border-inline-end-style: solid; + } } @include base-component(); diff --git a/packages/calcite-components/src/components/action-bar/action-bar.tsx b/packages/calcite-components/src/components/action-bar/action-bar.tsx index 21e37492fb7..6256b53988a 100755 --- a/packages/calcite-components/src/components/action-bar/action-bar.tsx +++ b/packages/calcite-components/src/components/action-bar/action-bar.tsx @@ -407,6 +407,7 @@ export class ActionBar const expandToggleNode = !expandDisabled ? ( @@ -72,4 +74,124 @@ describe("calcite-action-group", () => { describe("translation support", () => { t9n("calcite-action-group"); }); + + describe("theme", () => { + const tokens: ComponentTestTokens = { + "--calcite-action-group-border-color": [ + { + targetProp: "borderLeftColor", + }, + { + shadowSelector: "calcite-action-menu", + targetProp: "--calcite-action-menu-popover-border-color", + }, + ], + "--calcite-action-group-popover-background-color": { + shadowSelector: "calcite-action-menu", + targetProp: "--calcite-action-menu-popover-background-color", + }, + "--calcite-action-group-popover-border-color": { + shadowSelector: "calcite-action-menu", + targetProp: "--calcite-action-menu-popover-border-color", + }, + "--calcite-action-group-popover-corner-radius": { + shadowSelector: "calcite-action-menu", + targetProp: "--calcite-action-menu-popover-corner-radius", + }, + "--calcite-action-group-popover-shadow": { + shadowSelector: "calcite-action-menu", + targetProp: "--calcite-action-menu-popover-shadow", + }, + "--calcite-action-group-trigger-background-color-active": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-background-color", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-group-trigger-background-color-focus": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-background-color", + state: "focus", + }, + "--calcite-action-group-trigger-background-color-hover": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-background-color", + state: "hover", + }, + "--calcite-action-group-trigger-background-color": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-background-color", + }, + "--calcite-action-group-trigger-icon-color-active": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-icon-color", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-group-trigger-icon-color-focus": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-icon-color", + state: "focus", + }, + "--calcite-action-group-trigger-icon-color-hover": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-icon-color", + state: "hover", + }, + "--calcite-action-group-trigger-icon-color": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-icon-color", + }, + "--calcite-action-group-trigger-indicator-color": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-indicator-color", + }, + "--calcite-action-group-trigger-loader-color": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-loader-color", + }, + "--calcite-action-group-trigger-shadow-active": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-shadow", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-group-trigger-shadow-hover": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-shadow", + state: "hover", + }, + "--calcite-action-group-trigger-shadow-focus": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-shadow", + state: "focus", + }, + "--calcite-action-group-trigger-shadow": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-shadow", + }, + "--calcite-action-group-trigger-text-color-active": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-text-color", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-group-trigger-text-color-hover": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-text-color", + state: "hover", + }, + "--calcite-action-group-trigger-text-color-focus": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-text-color", + state: "focus", + }, + "--calcite-action-group-trigger-text-color": { + shadowSelector: `.${CSS.expandToggle}`, + targetProp: "--calcite-action-text-color", + }, + }; + themed( + html``, + tokens, + ); + }); }); diff --git a/packages/calcite-components/src/components/action-group/action-group.scss b/packages/calcite-components/src/components/action-group/action-group.scss index 84457f2f916..8c68d1a7e50 100755 --- a/packages/calcite-components/src/components/action-group/action-group.scss +++ b/packages/calcite-components/src/components/action-group/action-group.scss @@ -3,48 +3,119 @@ * * These properties can be overridden using the component's tag as selector. * - * @prop --calcite-action-group-columns: Sets number of grid-template-columns when the `layout` property is `"grid"`. - * @prop --calcite-action-group-gap: Sets the gap (gutters) between rows and columns when the `layout` property is `"grid"`. - * @prop --calcite-action-group-padding: Sets the padding when the `layout` property is `"grid"`. + * @prop --calcite-action-group-border-color: Specifies the border color of the component. + * @prop --calcite-action-group-columns: [Deprecated] Sets number of grid-template-columns when the `layout` property is `"grid"`. + * @prop --calcite-action-group-gap: [Deprecated] Sets the gap (gutters) between rows and columns when the `layout` property is `"grid"`. + * @prop --calcite-action-group-padding: [Deprecated] Sets the padding when the `layout` property is `"grid"`. + * @prop --calcite-action-group-popover-background-color: Specifies the background color of the popover in the component. + * @prop --calcite-action-group-popover-border-color: Specifies the border color of the popover in the component. + * @prop --calcite-action-group-popover-corner-radius: Specifies the corner radius of the popover in the component. + * @prop --calcite-action-group-popover-shadow: Specifies the shadow of the popover in the component. + * @prop --calcite-action-group-trigger-background-color-active: Specifies the background color of the nested trigger when active in the component. + * @prop --calcite-action-group-trigger-background-color-focus: Specifies the background color of the nested trigger when focused in the component. + * @prop --calcite-action-group-trigger-background-color-hover: Specifies the background color of the nested trigger when hovered in the component. + * @prop --calcite-action-group-trigger-background-color: Specifies the background color of the nested trigger in the component. + * @prop --calcite-action-group-trigger-icon-color-active: Specifies the icon color color of the nested trigger when active in the component + * @prop --calcite-action-group-trigger-icon-color-focus: Specifies the icon color of the nested trigger when focused in the component. + * @prop --calcite-action-group-trigger-icon-color-hover: Specifies the icon color of the nested trigger when hovered in the component. + * @prop --calcite-action-group-trigger-icon-color: Specifies the icon color of the nested trigger in the component. + * @prop --calcite-action-group-trigger-indicator-color: Specifies the indicator color of the nested trigger in the component. + * @prop --calcite-action-group-trigger-loader-color: Specifies the loader color of the nested trigger in the component component. + * @prop --calcite-action-group-trigger-shadow-active: Specifies the shadow of the nested trigger when active in the component. + * @prop --calcite-action-group-trigger-shadow-focus: Specifies the shadow of the nested trigger when focused in the component. + * @prop --calcite-action-group-trigger-shadow-hover: Specifies the shadow of the nested trigger when hovered in the component. + * @prop --calcite-action-group-trigger-shadow: Specifies the shadow of the nested trigger in the component. + * @prop --calcite-action-group-trigger-text-color-active: Specifies the text color of the nested trigger when active in the component. + * @prop --calcite-action-group-trigger-text-color-focus: Specifies the text color of the nested trigger when focused in the component. + * @prop --calcite-action-group-trigger-text-color-hover: Specifies the text color of the nested trigger when hovered in the component. + * @prop --calcite-action-group-trigger-text-color: Specifies the text color of the nested trigger in the component. + * */ :host { @extend %component-host; - @apply flex flex-col p-0; - --calcite-action-group-columns: 3; - --calcite-action-group-gap: theme("gap.px"); - --calcite-action-group-padding: theme("padding.px"); -} + --calcite-internal-action-group-columns: 3; -.container { - @apply flex flex-col flex-grow; + border-style: none; + border-block-end-style: solid; + border-width: var(--calcite-border-width-sm); + border-color: var(--calcite-action-group-border-color, var(--calcite-color-border-3)); } -:host([columns="1"]) { - --calcite-action-group-columns: 1; -} -:host([columns="2"]) { - --calcite-action-group-columns: 2; -} -:host([columns="3"]) { - --calcite-action-group-columns: 3; +calcite-action { + --calcite-action-background-color: var(--calcite-action-group-trigger-background-color); + --calcite-action-text-color: var(--calcite-action-group-trigger-text-color); + --calcite-action-shadow: var(--calcite-action-group-trigger-shadow); + --calcite-action-icon-color: var(--calcite-action-group-trigger-icon-color); + --calcite-action-indicator-color: var(--calcite-action-group-trigger-indicator-color); + --calcite-action-loader-color: var(--calcite-action-group-trigger-loader-color); + + &:hover { + --calcite-action-background-color: var(--calcite-action-group-trigger-background-color-hover); + --calcite-action-text-color: var(--calcite-action-group-trigger-text-color-hover); + --calcite-action-shadow: var(--calcite-action-group-trigger-shadow-hover); + --calcite-action-icon-color: var(--calcite-action-group-trigger-icon-color-hover); + } + &:focus { + --calcite-action-background-color: var(--calcite-action-group-trigger-background-color-focus); + --calcite-action-text-color: var(--calcite-action-group-trigger-text-color-focus); + --calcite-action-shadow: var(--calcite-action-group-trigger-shadow-focus); + --calcite-action-icon-color: var(--calcite-action-group-trigger-icon-color-focus); + } + &:active { + --calcite-action-background-color: var(--calcite-action-group-trigger-background-color-active); + --calcite-action-text-color: var(--calcite-action-group-trigger-text-color-active); + --calcite-action-shadow: var(--calcite-action-group-trigger-shadow-active); + --calcite-action-icon-color: var(--calcite-action-group-trigger-icon-color-active); + } } -:host([columns="4"]) { - --calcite-action-group-columns: 4; +calcite-action-menu { + --calcite-action-menu-popover-background-color: var(--calcite-action-group-popover-background-color); + --calcite-action-menu-popover-border-color: var( + --calcite-action-group-popover-border-color, + var(--calcite-action-group-border-color) + ); + --calcite-action-menu-popover-corner-radius: var(--calcite-action-group-popover-corner-radius); + --calcite-action-menu-popover-shadow: var(--calcite-action-group-popover-shadow); + --calcite-action-menu-trigger-background-color-active: var(--calcite-action-group-trigger-background-color-active); + --calcite-action-menu-trigger-background-color-focus: var(--calcite-action-group-trigger-background-color-focus); + --calcite-action-menu-trigger-background-color-hover: var(--calcite-action-group-trigger-background-color-hover); + --calcite-action-menu-trigger-background-color: var(--calcite-action-group-trigger-background-color); + --calcite-action-menu-trigger-icon-color-active: var(--calcite-action-group-trigger-icon-color-active); + --calcite-action-menu-trigger-icon-color-focus: var(--calcite-action-group-trigger-icon-color-focus); + --calcite-action-menu-trigger-icon-color-hover: var(--calcite-action-group-trigger-icon-color-hover); + --calcite-action-menu-trigger-icon-color: var(--calcite-action-group-trigger-icon-color); + --calcite-action-menu-trigger-indicator-color: var(--calcite-action-group-trigger-indicator-color); + --calcite-action-menu-trigger-loader-color: var(--calcite-action-group-trigger-loader-color); + --calcite-action-menu-trigger-shadow: var(--calcite-action-group-trigger-shadow); + --calcite-action-menu-trigger-text-color-active: var(--calcite-action-group-trigger-text-color-active); + --calcite-action-menu-trigger-text-color-focus: var(--calcite-action-group-trigger-text-color-focus); + --calcite-action-menu-trigger-text-color-hover: var(--calcite-action-group-trigger-text-color-hover); + --calcite-action-menu-trigger-text-color: var(--calcite-action-group-trigger-text-color); } -:host([columns="5"]) { - --calcite-action-group-columns: 5; + +.container { + @apply flex-col flex-grow; + display: var(--calcite-internal-action-group-display, flex); + background-color: var(--calcite-action-group-background, var(--calcite-internal-action-group-background-color)); } -:host([columns="6"]) { - --calcite-action-group-columns: 6; + +@for $i from 1 through 6 { + :host([columns="#{$i}"]) { + --calcite-internal-action-group-columns: $i; + } } :host(:first-child) { - @apply pt-0; + padding-block-start: 0; +} +:host(:last-child) { + border-block-end: 0; + border-inline-end: 0; } :host([layout="horizontal"]), @@ -56,13 +127,21 @@ @apply grid; } -:host([layout="grid"]) .container { - @apply bg-background - grid - place-content-stretch; - gap: var(--calcite-action-group-gap); - padding: var(--calcite-action-group-gap); - grid-template-columns: repeat(var(--calcite-action-group-columns), auto); +:host([layout="grid"]) { + --calcite-internal-action-group-space: var(--calcite-spacing-px); + --calcite-internal-action-group-display: grid; + --calcite-internal-action-group-background-color: var(--calcite-color-background); + + .container { + @apply place-content-stretch; + + gap: var(--calcite-action-group-gap, var(--calcite-internal-action-group-space)); + padding: var(--calcite-action-group-gap, var(--calcite-internal-action-group-space)); + grid-template-columns: repeat( + var(--calcite-action-group-columns, var(--calcite-internal-action-group-columns)), + auto + ); + } } @include base-component(); diff --git a/packages/calcite-components/src/components/action-group/action-group.tsx b/packages/calcite-components/src/components/action-group/action-group.tsx index 4d9f309e002..5bfc8a4cea5 100755 --- a/packages/calcite-components/src/components/action-group/action-group.tsx +++ b/packages/calcite-components/src/components/action-group/action-group.tsx @@ -194,6 +194,7 @@ export class ActionGroup scale={scale} > { expect(clickSpy).toHaveReceivedEventTimes(1); }); }); + + describe("theme", () => { + describe("default", () => { + const tokens = { + "--calcite-action-menu-trigger-background-color-active": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-background-color", + state: { press: { attribute: "class", value: CSS.defaultTrigger } }, + }, + "--calcite-action-menu-trigger-background-color-focus": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-background-color", + state: "focus", + }, + "--calcite-action-menu-trigger-background-color-hover": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-background-color", + state: "hover", + }, + "--calcite-action-menu-trigger-background-color": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-background-color", + }, + "--calcite-action-menu-trigger-icon-color-active": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-icon-color", + state: { press: { attribute: "class", value: CSS.defaultTrigger } }, + }, + "--calcite-action-menu-trigger-icon-color-focus": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-icon-color", + state: "focus", + }, + "--calcite-action-menu-trigger-icon-color-hover": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-icon-color", + state: "hover", + }, + "--calcite-action-menu-trigger-icon-color": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-icon-color", + }, + "--calcite-action-menu-trigger-shadow-active": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-shadow", + state: { press: { attribute: "class", value: CSS.defaultTrigger } }, + }, + "--calcite-action-menu-trigger-shadow-focus": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-shadow", + state: "focus", + }, + "--calcite-action-menu-trigger-shadow-hover": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-shadow", + state: "hover", + }, + "--calcite-action-menu-trigger-shadow": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-shadow", + }, + "--calcite-action-menu-trigger-text-color-active": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-text-color", + state: { press: { attribute: "class", value: CSS.defaultTrigger } }, + }, + "--calcite-action-menu-trigger-text-color-focus": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-text-color", + state: "focus", + }, + "--calcite-action-menu-trigger-text-color-hover": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-text-color", + state: "hover", + }, + "--calcite-action-menu-trigger-text-color": { + shadowSelector: "calcite-action", + targetProp: "--calcite-action-text-color", + }, + } as const; + themed("calcite-action-menu", tokens); + }); + describe("popover", () => { + const tokens = { + "--calcite-action-menu-popover-background-color": { + shadowSelector: "calcite-popover", + targetProp: "--calcite-popover-background-color", + }, + "--calcite-action-menu-popover-border-color": { + shadowSelector: "calcite-popover", + targetProp: "--calcite-popover-border-color", + }, + "--calcite-action-menu-popover-corner-radius": { + shadowSelector: "calcite-popover", + targetProp: "--calcite-popover-corner-radius", + }, + "--calcite-action-menu-popover-shadow": { + shadowSelector: "calcite-popover", + targetProp: "--calcite-popover-shadow", + }, + "--calcite-action-menu-popover-text-color": { + shadowSelector: "calcite-popover", + targetProp: "--calcite-popover-text-color", + }, + } as const; + themed( + html` + + + `, + tokens, + ); + }); + }); }); diff --git a/packages/calcite-components/src/components/action-menu/action-menu.scss b/packages/calcite-components/src/components/action-menu/action-menu.scss index b04468fa512..ee94e234b9e 100755 --- a/packages/calcite-components/src/components/action-menu/action-menu.scss +++ b/packages/calcite-components/src/components/action-menu/action-menu.scss @@ -1,31 +1,85 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-action-menu-trigger-background-color-active: Specifies the background color of the component's default trigger when active. + * @prop --calcite-action-menu-trigger-background-color-focus: Specifies the background color of the component's default trigger when focused. + * @prop --calcite-action-menu-trigger-background-color-hover: Specifies the background color of the component's default trigger when hovered. + * @prop --calcite-action-menu-trigger-background-color: Specifies the background color of the component. + * @prop --calcite-action-menu-trigger-icon-color-active: Specifies the background color of the component's default trigger when active. + * @prop --calcite-action-menu-trigger-icon-color-focus: Specifies the background color of the component's default trigger when focused. + * @prop --calcite-action-menu-trigger-icon-color-hover: Specifies the background color of the component's default trigger when hovered. + * @prop --calcite-action-menu-trigger-icon-color: Specifies the color of the component's default trigger icon. + * @prop --calcite-action-menu-trigger-shadow-active: Specifies the shadow of the component default trigger when active. + * @prop --calcite-action-menu-trigger-shadow-focus: Specifies the shadow of the component default trigger when focused. + * @prop --calcite-action-menu-trigger-shadow-hover: Specifies the shadow of the component default trigger when hovered. + * @prop --calcite-action-menu-trigger-shadow: Specifies the shadow of the component default trigger . + * @prop --calcite-action-menu-trigger-text-color-active: Specifies the background color of the component's default trigger when active. + * @prop --calcite-action-menu-trigger-text-color-focus: Specifies the background color of the component's default trigger when focused. + * @prop --calcite-action-menu-trigger-text-color-hover: Specifies the background color of the component's default trigger when hovered. + * @prop --calcite-action-menu-trigger-text-color: Specifies the text color of the default trigger . + * @prop --calcite-action-menu-popover-background-color: Specifies the background color of the popover sub-componen. + * @prop --calcite-action-menu-popover-border-color: Specifies the border color of the popover sub-componen. + * @prop --calcite-action-menu-popover-close-background-color-active: Specifies the background color of an popover sub-component close button when active inside the component. + * @prop --calcite-action-menu-popover-close-background-color-hover: Specifies the background color of an popover sub-component close button when hovered inside the component. + * @prop --calcite-action-menu-popover-close-background-color: Specifies the background color of an popover sub-component close button. + * @prop --calcite-action-menu-popover-close-icon-color-active: Specifies the icon color of an popover sub-component close button when active inside the component. + * @prop --calcite-action-menu-popover-close-icon-color-hover: Specifies the icon color of an popover sub-component close button when hovered inside the component. + * @prop --calcite-action-menu-popover-close-icon-color: Specifies the icon color of an popover sub-component close button. + * @prop --calcite-action-menu-popover-corner-radius: Specifies the corner radius of an popover sub-component. + * @prop --calcite-action-menu-popover-shadow: Specifies the shadow of an popover sub-component. + * @prop --calcite-action-menu-popover-text-color: Specifies the text color of an popover sub-component. + * + */ + :host { - @apply text-color-2 - text-1 + @apply text-1 box-border flex flex-col; } -::slotted(calcite-action-group) { - border-block-end: 1px solid var(--calcite-color-border-3); +.container { + display: contents; } -::slotted(calcite-action-group:last-child) { - border-block-end: 0; +calcite-action { + --calcite-action-background-color: var(--calcite-action-menu-trigger-background-color); + --calcite-action-text-color: var(--calcite-action-menu-trigger-text-color); + --calcite-action-icon-color: var(--calcite-action-menu-trigger-icon-color); + --calcite-action-shadow: var(--calcite-action-menu-trigger-shadow); + + &:hover { + --calcite-action-background-color: var(--calcite-action-menu-trigger-background-color-hover); + --calcite-action-text-color: var(--calcite-action-menu-trigger-text-color-hover); + --calcite-action-icon-color: var(--calcite-action-menu-trigger-icon-color-hover); + } + &:focus { + --calcite-action-background-color: var(--calcite-action-menu-trigger-background-color-focus); + --calcite-action-text-color: var(--calcite-action-menu-trigger-text-color-focus); + --calcite-action-icon-color: var(--calcite-action-menu-trigger-icon-color-focus); + } + &:active { + --calcite-action-background-color: var(--calcite-action-menu-trigger-background-color-active); + --calcite-action-text-color: var(--calcite-action-menu-trigger-text-color-active); + --calcite-action-icon-color: var(--calcite-action-menu-trigger-icon-color-active); + } } -.default-trigger { - @apply relative - h-full - flex-initial - self-stretch; +calcite-popover { + --calcite-popover-background-color: var(--calcite-action-menu-popover-background-color); + --calcite-popover-border-color: var(--calcite-action-menu-popover-border-color); + --calcite-popover-corner-radius: var(--calcite-action-menu-popover-corner-radius); + --calcite-popover-shadow: var(--calcite-action-menu-popover-shadow); + --calcite-popover-text-color: var(--calcite-action-menu-popover-text-color); } -@include slotted("trigger", "calcite-action") { +.default-trigger { @apply relative - h-full flex-initial self-stretch; + block-size: var(--calcite-container-size-content-fluid); } .menu { @@ -37,4 +91,12 @@ max-h-menu; } +@include slotted("trigger", "calcite-action") { + @apply relative + flex-initial + self-stretch; + + block-size: var(--calcite-container-size-content-fluid); +} + @include base-component(); diff --git a/packages/calcite-components/src/components/action-menu/action-menu.tsx b/packages/calcite-components/src/components/action-menu/action-menu.tsx index c49e17b093d..d0dad762d63 100755 --- a/packages/calcite-components/src/components/action-menu/action-menu.tsx +++ b/packages/calcite-components/src/components/action-menu/action-menu.tsx @@ -9,7 +9,7 @@ import { State, Watch, } from "@stencil/core"; -import { Fragment, VNode } from "@stencil/core/internal"; +import { VNode } from "@stencil/core/internal"; import { getRoundRobinIndex } from "../../utils/array"; import { focusElement, toAriaBoolean } from "../../utils/dom"; import { FlipPlacement, LogicalPlacement, OverlayPositioning } from "../../utils/floating-ui"; @@ -321,11 +321,11 @@ export class ActionMenu implements LoadableComponent { render(): VNode { return ( - +
{this.renderMenuButton()} {this.renderMenuItems()} - +
); } diff --git a/packages/calcite-components/src/components/action-menu/resources.ts b/packages/calcite-components/src/components/action-menu/resources.ts index 38223214d32..eabb3e14550 100644 --- a/packages/calcite-components/src/components/action-menu/resources.ts +++ b/packages/calcite-components/src/components/action-menu/resources.ts @@ -1,6 +1,7 @@ export const CSS = { menu: "menu", defaultTrigger: "default-trigger", + container: "container", }; export const SLOTS = { diff --git a/packages/calcite-components/src/components/action-pad/action-pad.e2e.ts b/packages/calcite-components/src/components/action-pad/action-pad.e2e.ts index f8cd30eabcd..6947065200d 100755 --- a/packages/calcite-components/src/components/action-pad/action-pad.e2e.ts +++ b/packages/calcite-components/src/components/action-pad/action-pad.e2e.ts @@ -9,6 +9,7 @@ import { renders, slots, t9n, + themed, } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { CSS, SLOTS } from "./resources"; @@ -347,4 +348,109 @@ describe("calcite-action-pad", () => { expect(await group.getProperty("layout")).toBe("vertical"); }); + + describe("theme", () => { + describe("default", () => { + const tokens = { + "--calcite-action-pad-background-color": { + shadowSelector: ".container", + targetProp: "backgroundColor", + }, + "--calcite-action-pad-corner-radius": { + shadowSelector: ".container", + targetProp: "borderRadius", + }, + "--calcite-action-pad-shadow": { + shadowSelector: ".container", + targetProp: "boxShadow", + }, + "--calcite-action-pad-trigger-background-color-active": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-background-color", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-pad-trigger-background-color-focus": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-background-color-focus", + state: "focus", + }, + "--calcite-action-pad-trigger-background-color-hover": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-background-color-hover", + state: "hover", + }, + "--calcite-action-pad-trigger-background-color": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-background-color", + }, + "--calcite-action-pad-trigger-icon-color-active": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color-active", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-pad-trigger-icon-color-focus": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color-focus", + state: "focus", + }, + "--calcite-action-pad-trigger-icon-color-hover": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color-hover", + state: "hover", + }, + "--calcite-action-pad-trigger-icon-color": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color", + }, + "--calcite-action-pad-trigger-shadow-active": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-shadow-active", + state: { press: { attribute: "title", value: "Expand" } }, + }, + "--calcite-action-pad-trigger-shadow-focus": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-shadow-focus", + state: "focus", + }, + "--calcite-action-pad-trigger-shadow-hover": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-shadow-hover", + state: "hover", + }, + "--calcite-action-pad-trigger-shadow": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-shadow", + }, + "--calcite-action-pad-trigger-text-color-active": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color-active", + state: { press: { attribute: "class", value: CSS.expandToggle } }, + }, + "--calcite-action-pad-trigger-text-color-focus": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color-focus", + state: "focus", + }, + "--calcite-action-pad-trigger-text-color-hover": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color-hover", + state: "hover", + }, + "--calcite-action-pad-trigger-text-color": { + shadowSelector: "calcite-action-group", + targetProp: "--calcite-action-group-trigger-icon-color", + }, + } as const; + themed("calcite-action-pad", tokens); + }); + describe("expanded", () => { + const tokens = { + "--calcite-action-pad-expanded-max-width": { + targetProp: "maxWidth", + shadowSelector: `.${CSS.container}`, + }, + } as const; + themed(``, tokens); + }); + }); }); diff --git a/packages/calcite-components/src/components/action-pad/action-pad.scss b/packages/calcite-components/src/components/action-pad/action-pad.scss index e91eb0ec224..954747be12f 100755 --- a/packages/calcite-components/src/components/action-pad/action-pad.scss +++ b/packages/calcite-components/src/components/action-pad/action-pad.scss @@ -3,57 +3,100 @@ * * These properties can be overridden using the component's tag as selector. * + * @prop --calcite-action-pad-background-color: Specifies the background color of the component. + * @prop --calcite-action-pad-corner-radius: Specifies the corner radius of the component. * @prop --calcite-action-pad-expanded-max-width: When `layout` is `"vertical"`, specifies the expanded max width of the component. + * @prop --calcite-action-pad-shadow: Specifies the shadow of the component. + * @prop --calcite-action-pad-trigger-background-color-active: Specifies the background color of the nested trigger when active in the component. + * @prop --calcite-action-pad-trigger-background-color-focus: Specifies the background color of the nested trigger when focused in the component. + * @prop --calcite-action-pad-trigger-background-color-hover: Specifies the background color of the nested trigger when hovered in the component. + * @prop --calcite-action-pad-trigger-background-color: Specifies the background color of the nested trigger in the component. + * @prop --calcite-action-pad-trigger-icon-color-active: Specifies the icon color color of the nested trigger when active in the component + * @prop --calcite-action-pad-trigger-icon-color-focus: Specifies the icon color of the nested trigger when focused in the component. + * @prop --calcite-action-pad-trigger-icon-color-hover: Specifies the icon color of the nested trigger when hovered in the component. + * @prop --calcite-action-pad-trigger-icon-color: Specifies the icon color of the nested trigger in the component. + * @prop --calcite-action-pad-trigger-shadow-active: Specifies the shadow of the nested trigger when active in the component. + * @prop --calcite-action-pad-trigger-shadow-focus: Specifies the shadow of the nested trigger when focused in the component. + * @prop --calcite-action-pad-trigger-shadow-hover: Specifies the shadow of the nested trigger when hovered in the component. + * @prop --calcite-action-pad-trigger-shadow: Specifies the shadow of the nested trigger in the component. + * @prop --calcite-action-pad-trigger-text-color-active: Specifies the text color of the nested trigger when active in the component. + * @prop --calcite-action-pad-trigger-text-color-focus: Specifies the text color of the nested trigger when focused in the component. + * @prop --calcite-action-pad-trigger-text-color-hover: Specifies the text color of the nested trigger when hovered in the component. + * @prop --calcite-action-pad-trigger-text-color: Specifies the text color of the nested trigger in the component. */ :host { @extend %component-host; @apply animate-in block rounded-sm; - --calcite-action-pad-expanded-max-width: auto; background: transparent; } +calcite-action { + --calcite-action-background-color: var(--calcite-action-pad-trigger-background-color); + --calcite-action-text-color: var(--calcite-action-pad-trigger-text-color); + --calcite-action-icon-color: var(--calcite-action-pad-trigger-icon-color); + --calcite-action-shadow: var(--calcite-action-pad-trigger-shadow); + + &:hover { + --calcite-action-background-color: var(--calcite-action-pad-trigger-background-color-hover); + --calcite-action-text-color: var(--calcite-action-pad-trigger-text-color-hover); + --calcite-action-icon-color: var(--calcite-action-pad-trigger-icon-color-hover); + --calcite-action-shadow: var(--calcite-action-pad-trigger-shadow-hover); + } + &:focus { + --calcite-action-background-color: var(--calcite-action-pad-trigger-background-color-focus); + --calcite-action-text-color: var(--calcite-action-pad-trigger-text-color-focus); + --calcite-action-icon-color: var(--calcite-action-pad-trigger-icon-color-focus); + --calcite-action-shadow: var(--calcite-action-pad-trigger-shadow-focus); + } + &:active { + --calcite-action-background-color: var(--calcite-action-pad-trigger-background-color-active); + --calcite-action-text-color: var(--calcite-action-pad-trigger-text-color-active); + --calcite-action-icon-color: var(--calcite-action-pad-trigger-icon-color-active); + --calcite-action-shadow: var(--calcite-action-pad-trigger-shadow-active); + } +} + :host([expanded][layout="vertical"]) .container { - max-inline-size: var(--calcite-action-pad-expanded-max-width); + max-inline-size: var(--calcite-action-pad-expanded-max-width, auto); } ::slotted(calcite-action-group) { - @apply border-color-3 - border-0 - border-b - border-solid - pb-0 pt-0; + padding-block: 0px; } .container { - @apply bg-background - shadow-2 - inline-flex + @apply inline-flex flex-col - overflow-y-auto - rounded; + overflow-y-auto; + border-radius: var(--calcite-action-pad-corner-radius, var(--calcite-corner-radius-round)); + background-color: var(--calcite-action-pad-background-color, var(--calcite-color-background)); + box-shadow: var( + --calcite-action-pad-shadow, + var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), + 0 6px 20px -4px rgba(0, 0, 0, 0.1), + 0 4px 12px -2px rgba(0, 0, 0, 0.08) + ); } .action-group--bottom { - @apply flex-grow justify-end pb-0; + @apply flex-grow justify-end; + padding-block-end: 0px; } :host([layout="horizontal"]) { .container { @apply flex-row; + .action-group--bottom { @apply p-0; } - ::slotted(calcite-action-group) { - @apply border-0 - p-0; - border-inline-end-width: theme("borderWidth.DEFAULT"); - } } -} - -::slotted(calcite-action-group:last-child) { - @apply border-b-0; + ::slotted(calcite-action-group) { + border-block-end-style: none; + border-inline-end-style: solid; + } } @include base-component(); diff --git a/packages/calcite-components/src/components/action-pad/action-pad.tsx b/packages/calcite-components/src/components/action-pad/action-pad.tsx index dae5b7570ba..6e08d6c6c4a 100755 --- a/packages/calcite-components/src/components/action-pad/action-pad.tsx +++ b/packages/calcite-components/src/components/action-pad/action-pad.tsx @@ -281,6 +281,7 @@ export class ActionPad const expandToggleNode = !expandDisabled ? ( { @@ -205,4 +207,65 @@ describe("calcite-action", () => { expect(liveRegion.getAttribute("role")).toBe("region"); expect(liveRegion.textContent).toBe("Indicator present"); }); + + describe("theme", () => { + describe("default", () => { + const tokens: ComponentTestTokens = { + "--calcite-action-background-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "backgroundColor", + }, + "--calcite-action-text-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "color", + }, + "--calcite-action-shadow": { + shadowSelector: `.${CSS.button}`, + targetProp: "boxShadow", + }, + "--calcite-action-icon-color": { + shadowSelector: "calcite-icon", + targetProp: "--calcite-icon-color", + }, + "--calcite-action-indicator-color": { + shadowSelector: `.${CSS.actionIndicator}::after`, + targetProp: "backgroundColor", + }, + }; + themed( + html``, + tokens, + ); + }); + describe("loading", () => { + const tokens: ComponentTestTokens = { + "--calcite-action-loader-color": { + shadowSelector: "calcite-loader", + targetProp: "--calcite-loader-color-start", + }, + }; + + themed( + html``, + tokens, + ); + }); + }); }); diff --git a/packages/calcite-components/src/components/action/action.scss b/packages/calcite-components/src/components/action/action.scss index f8cf1e00237..eb8a82441a1 100755 --- a/packages/calcite-components/src/components/action/action.scss +++ b/packages/calcite-components/src/components/action/action.scss @@ -3,227 +3,236 @@ * * These properties can be overridden using the component's tag as selector. * + * @prop --calcite-action-background-color: Specifies the background color of the component. + * @prop --calcite-action-text-color: Specifies the text color of the component. + * @prop --calcite-action-shadow: Specifies the shadow of the component. + * @prop --calcite-action-icon-color: Specifies the color of the component's icon. * @prop --calcite-action-indicator-color: Specifies the color of the component's indicator. + * @prop --calcite-action-loader-color: Specifies the color of the component's loader. */ :host { - @extend %component-host; - @apply flex bg-transparent; - --calcite-action-indicator-color: theme("colors.brand"); - --calcite-action-color-transparent-hover: var(--calcite-color-transparent-hover); - --calcite-action-color-transparent-press: var(--calcite-color-transparent-press); -} + @include base-host(); -@mixin action-indicator() { - position: relative; - &::after { - content: ""; - @apply absolute - h-2 - w-2 - rounded-full; - inset-block-end: calc(-0.275rem); - inset-inline-end: calc(-0.275rem); - background-color: var(--calcite-action-indicator-color); - } + box-sizing: border-box; + display: flex; + background-color: var(--calcite-color-transparent); } -@include disabled(); - .button { - @apply bg-foreground-1 - fill-color-3 - focus-base - text-n2h - text-color-3 + @apply focus-base relative m-0 flex w-auto cursor-pointer items-center - justify-start - border-none - font-medium - font-sans; - - text-align: unset; + border-none; + align-items: center; + background-color: var( + --calcite-action-background-color, + var(--calcite-internal-action-background-color, var(--calcite-color-foreground-1)) + ); + color: var(--calcite-action-text-color, var(--calcite-internal-action-text-color, var(--calcite-color-text-3))); flex: 1 0 auto; - &:hover { - @apply bg-foreground-2 text-color-1 fill-color-1; - } - - &:focus { - @apply bg-foreground-2 text-color-1 fill-color-1 focus-inset; - } - - &:active { - @apply bg-foreground-3; - } - - .icon-container { - @apply pointer-events-none - m-0 - flex - items-center - justify-center; - min-inline-size: theme("spacing.4"); - min-block-size: theme("spacing.6"); - } + font-family: var(--calcite-font-family); + font-size: var(--calcite-internal-action-font-size, var(--calcite-font-size--2)); + justify-content: var(--calcite-internal-action-justify-content, start); + line-height: var(--calcite-internal-action-line-height, 1rem /* 16px */); + text-align: unset; + padding-inline: var(--calcite-internal-action-space-x); + padding-block: var(--calcite-internal-action-space-y); + box-shadow: var(--calcite-action-shadow); - .text-container { - @apply m-0 - w-0 - truncate - leading-6 - opacity-0 - transition-opacity - duration-150 - ease-in-out; - transition-property: margin; - transition-property: inline-size; - } + &.button--text-visible { + inline-size: var(--calcite-container-size-content-fluid); - .text-container--visible { - @apply w-auto flex-auto opacity-100; + .icon-container { + margin-inline-end: var(--calcite-internal-action-icon-container-space-x-end, theme("spacing.3")); + } } } -:host([data-active]) .button { - @apply focus-inset; +.icon-container { + @apply pointer-events-none + m-0 + flex + items-center + justify-center; + min-inline-size: theme("spacing.4"); + min-block-size: theme("spacing.6"); +} + +.text-container { + @apply m-0 + w-0 + truncate + leading-6 + opacity-0 + transition-opacity + duration-150 + ease-in-out; + transition-property: margin; + transition-property: inline-size; } -:host([scale="s"]) { - .button { - @apply text-n2h px-2 py-1 font-normal; - } - .button--text-visible .icon-container { - margin-inline-end: theme("spacing.2"); - } +.text-container--visible { + @apply w-auto flex-auto; + opacity: var(--calcite-opacity-full); } -:host([scale="m"]) { - .button { - @apply text-n1h px-4 py-3 font-normal; - } - .button--text-visible .icon-container { - margin-inline-end: theme("spacing.3"); - } -} +.action-indicator { + position: relative; + block-size: var(--calcite-internal-action-line-height); + inline-size: var(--calcite-internal-action-line-height); -:host([scale="l"]) { - .button { - @apply text-0h p-5 font-normal; - } - .button--text-visible .icon-container { - margin-inline-end: theme("spacing.4"); + &::after { + position: absolute; + block-size: 0.5rem /* 8px */; + inline-size: 0.5rem /* 8px */; + content: ""; + @apply rounded-full; + inset-block-end: -0.275rem; + inset-inline-end: -0.275rem; + background-color: var(--calcite-action-indicator-color, var(--calcite-color-brand)); } } -:host([alignment="center"]) .button { - @apply justify-center; +calcite-icon { + --calcite-icon-color: var( + --calcite-action-icon-color, + var(--calcite-internal-action-icon-color, var(--calcite-color-text-3)) + ); } -:host([alignment="end"]) .button { - @apply justify-end; +calcite-loader { + --calcite-loader-color-start: var(--calcite-action-loader-color, var(--calcite-color-text-3)); + margin-inline-end: theme("spacing.0"); } -:host([alignment="center"]), -:host([alignment="end"]) { - .button .text-container--visible { - @apply flex-initial; - } +.indicator-without-icon { + @apply w-4 mx-1; } -// Compact -:host([scale="s"][compact]) .button, -:host([scale="m"][compact]) .button, -:host([scale="l"][compact]) .button { - @apply px-0; +.indicator-text { + @apply sr-only; } .slot-container { @apply flex; -} - -.slot-container--hidden { - @apply hidden; -} - -.button--text-visible { - @apply w-full; -} -:host([active]) .button, -:host([active]) .button:hover, -:host([active]) .button:focus, -:host([active][loading]) .button { - @apply text-color-1 fill-color-1 bg-foreground-3; + &.slot-container--hidden { + @apply hidden; + } } -:host([appearance="transparent"]) .button { - @apply bg-transparent - transition-shadow - duration-150 - ease-in-out; +// States +:host(:hover), +:host(:focus) { + --calcite-internal-action-text-color: var(--calcite-color-text-1); + --calcite-internal-action-icon-color: var(--calcite-color-text-1); } - -:host([active]) .button:active { - @apply bg-foreground-1; +:host(:focus), +:host([data-active]) { + .button { + @apply focus-inset; + } } - -:host([appearance="transparent"][active]) .button, -:host([appearance="transparent"]) .button:hover, -:host([appearance="transparent"]) .button:focus { - background-color: var(--calcite-action-color-transparent-hover); +:host(:active), +:host([active]) { + --calcite-internal-action-icon-color: var(--calcite-color-text-1); + --calcite-internal-action-text-color: var(--calcite-color-text-1); } -:host([appearance="transparent"]) .button:active { - background-color: var(--calcite-action-color-transparent-press); -} +// Appearance +:host([appearance="solid"]) { + &:host(:hover), + &:host(:focus) { + --calcite-internal-action-background-color: var(--calcite-color-foreground-2); + } + &:host(:active), + &:host([active]) { + --calcite-internal-action-background-color: var(--calcite-color-foreground-3); + } -:host([appearance="transparent"][disabled]) .button { - @apply bg-transparent; + &:host([loading]) { + --calcite-internal-action-background-color: var(--calcite-color-foreground-1); + .text-container { + @apply opacity-disabled; + } + } } +:host([appearance="transparent"]) { + --calcite-internal-action-background-color: var(--calcite-color-transparent); -:host([loading][appearance="solid"]) .button, -:host([loading][appearance="solid"]) .button:hover, -:host([loading][appearance="solid"]) .button:focus { - @apply bg-foreground-1; + .button { + @apply transition-shadow + duration-150 + ease-in-out; + } - .text-container { - @apply opacity-disabled; + &:host(:hover), + &:host(:focus) { + --calcite-internal-action-background-color: var(--calcite-action-color-transparent-hover); + } + &:host(:active), + &:host([active]) { + --calcite-internal-action-background-color: var(--calcite-action-color-transparent-press); } } -:host([loading]) calcite-loader[inline] { - @apply text-color-3; - margin-inline-end: theme("spacing.0"); +// Scale +:host([scale="s"]) { + --calcite-internal-action-font-size: var(--calcite-font-size--2); + --calcite-internal-action-line-height: 1rem /* 16px */; + --calcite-internal-action-icon-container-space-x-end: theme("spacing.2"); + --calcite-internal-action-space-x: 0.5rem /* 8px */; + --calcite-internal-action-space-y: 0.25rem /* 4px */; } - -:host([disabled]) .button, -:host([disabled]) .button:hover, -:host([disabled]) .button:focus { - @apply opacity-disabled bg-foreground-1 cursor-default; +:host([scale="m"]) { + --calcite-internal-action-font-size: var(--calcite-font-size--1); + --calcite-internal-action-line-height: 1rem /* 16px */; + --calcite-internal-action-icon-container-space-x-end: theme("spacing.3"); + --calcite-internal-action-space-x: 1rem /* 8px */; + --calcite-internal-action-space-y: 0.75rem /* 12px */; } - -:host([disabled][active]) .button, -:host([disabled][active]) .button:hover, -:host([disabled][active]) .button:focus { - @apply opacity-disabled bg-foreground-3; +:host([scale="l"]) { + --calcite-internal-action-font-size: var(--calcite-font-size-0); + --calcite-internal-action-line-height: 1.25rem /* 20px */; + --calcite-internal-action-icon-container-space-x-end: theme("spacing.4"); + --calcite-internal-action-space-x: 1.25rem /* 20px */; + --calcite-internal-action-space-y: 1.25rem /* 20px */; } - -.indicator-with-icon { - @include action-indicator(); +// Compact +:host([scale="s"][compact]), +:host([scale="m"][compact]), +:host([scale="l"][compact]) { + --calcite-internal-action-space-x: 0; } -.indicator-without-icon { - @apply w-4 mx-1; - @include action-indicator(); +// Alignment +:host([alignment="center"]) { + --calcite-internal-action-justify-content: center; } - -.indicator-text { - @apply sr-only; +:host([alignment="end"]) { + --calcite-internal-action-justify-content: end; +} +:host([alignment="center"]), +:host([alignment="end"]) { + .text-container--visible { + @apply flex-initial; + } } @include base-component(); +@include disabled() { + &:host([active]) { + --calcite-internal-action-background-color: var(--calcite-color-foreground-3); + } + &:host([appearance="solid"]) { + --calcite-internal-action-background-color: var(--calcite-color-foreground-1); + } + &:host([appearance="transparent"]) { + --calcite-internal-action-background-color: var(--calcite-color-transparent); + } +} diff --git a/packages/calcite-components/src/components/action/action.tsx b/packages/calcite-components/src/components/action/action.tsx index 59acf41142a..b41fe2db08c 100644 --- a/packages/calcite-components/src/components/action/action.tsx +++ b/packages/calcite-components/src/components/action/action.tsx @@ -256,12 +256,14 @@ export class Action ) : null; const calciteIconNode = icon ? ( - +
+ +
) : null; const iconNode = calciteLoaderNode || calciteIconNode; const hasIconToDisplay = iconNode || el.children?.length; @@ -327,7 +329,12 @@ export class Action > {this.renderIconContainer()} {this.renderTextContainer()} - {!icon && indicator &&
} + {!icon && indicator && ( +
+ )} {this.renderIndicatorText()} diff --git a/packages/calcite-components/src/components/action/resources.ts b/packages/calcite-components/src/components/action/resources.ts index 464cf6a0891..478ddf5dd50 100644 --- a/packages/calcite-components/src/components/action/resources.ts +++ b/packages/calcite-components/src/components/action/resources.ts @@ -1,15 +1,16 @@ export const CSS = { + actionIndicator: "action-indicator", button: "button", - buttonTextVisible: "button--text-visible", buttonCompact: "button--compact", - indicatorText: "indicator-text", + buttonTextVisible: "button--text-visible", iconContainer: "icon-container", + indicatorText: "indicator-text", + icon: "icon", + indicatorWithoutIcon: "indicator-without-icon", slotContainer: "slot-container", slotContainerHidden: "slot-container--hidden", textContainer: "text-container", textContainerVisible: "text-container--visible", - indicatorWithIcon: "indicator-with-icon", - indicatorWithoutIcon: "indicator-without-icon", }; export const SLOTS = { diff --git a/packages/calcite-components/src/components/alert/alert.e2e.ts b/packages/calcite-components/src/components/alert/alert.e2e.ts index daa5bc120e1..51a4edf5af3 100644 --- a/packages/calcite-components/src/components/alert/alert.e2e.ts +++ b/packages/calcite-components/src/components/alert/alert.e2e.ts @@ -1,8 +1,10 @@ import { E2EElement, E2EPage, newE2EPage } from "@stencil/core/testing"; import { html } from "../../../support/formatting"; -import { accessible, defaults, hidden, HYDRATED_ATTR, renders, t9n } from "../../tests/commonTests"; +import { accessible, defaults, hidden, HYDRATED_ATTR, renders, t9n, themed } from "../../tests/commonTests"; +import { ComponentTestTokens } from "../../tests/commonTests/themed"; import { getElementXY } from "../../tests/utils"; import { openClose } from "../../tests/commonTests"; +import { CSS as CHIP_CSS } from "../chip/resources"; import { CSS, DURATIONS } from "./resources"; describe("defaults", () => { @@ -43,6 +45,124 @@ describe("calcite-alert", () => { openClose("calcite-alert"); }); + describe("theme", () => { + const alertHtml = html` +
Title Text
+
Message Text
+
`; + + const alertQueueHtml = html` open alert + +
Title of alert Uno
+
Message text of the alert Uno
+ Retry +
+ + +
Title of alert Dos
+
Message text of the alert Dos
+ Retry +
`; + + describe("default", () => { + const tokens: ComponentTestTokens = { + "--calcite-alert-accent-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "borderBlockStartColor", + }, + "--calcite-alert-background-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "backgroundColor", + }, + "--calcite-alert-border-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "borderInlineColor", + }, + "--calcite-alert-corner-radius": { + shadowSelector: `.${CSS.container}`, + targetProp: "borderRadius", + }, + "--calcite-alert-shadow": { + targetProp: "boxShadow", + shadowSelector: `.${CSS.container}`, + }, + "--calcite-alert-icon-color": { + shadowSelector: `.${CSS.icon} >>> calcite-icon`, + targetProp: "color", + }, + "--calcite-alert-close-background-color": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + }, + "--calcite-alert-close-background-color-hover": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + state: { hover: { attribute: "class", value: CSS.close } }, + }, + "--calcite-alert-close-background-color-active": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + state: { press: { attribute: "class", value: CSS.close } }, + }, + "--calcite-alert-close-background-color-focus": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + state: { focus: { attribute: "class", value: CSS.close } }, + }, + "--calcite-alert-close-icon-color-hover": { + shadowSelector: `.${CSS.close}`, + targetProp: "color", + state: { hover: { attribute: "class", value: CSS.close } }, + }, + "--calcite-alert-close-icon-color-active": { + shadowSelector: `.${CSS.close}`, + targetProp: "color", + state: { press: { attribute: "class", value: CSS.close } }, + }, + "--calcite-alert-close-icon-color-focus": { + shadowSelector: `.${CSS.close}`, + targetProp: "color", + state: { focus: { attribute: "class", value: CSS.close } }, + }, + }; + themed(alertHtml, tokens); + }); + describe("queued Alerts", () => { + const tokens: ComponentTestTokens = { + "--calcite-alert-chip-background-color": { + targetProp: "backgroundColor", + shadowSelector: `.${CSS.queueCount} >>> calcite-chip >>> .${CHIP_CSS.container}`, + }, + "--calcite-alert-chip-border-color": { + targetProp: "borderColor", + shadowSelector: `.${CSS.queueCount} >>> calcite-chip >>> .${CHIP_CSS.container}`, + }, + "--calcite-alert-chip-corner-radius": { + targetProp: "borderRadius", + shadowSelector: `.${CSS.queueCount} >>> calcite-chip >>> .${CHIP_CSS.container}`, + }, + "--calcite-alert-chip-text-color": { + targetProp: "color", + shadowSelector: `.${CSS.queueCount} >>> calcite-chip >>> .${CHIP_CSS.container}`, + }, + }; + themed(async () => { + const page = await newE2EPage(); + await page.setContent(alertQueueHtml); + await page.$eval("#button", (button: HTMLCalciteButtonElement) => { + button.click(); + }); + await page.waitForChanges(); + + return { tag: "calcite-alert", page }; + }, tokens); + }); + }); + it("renders default props when none are provided", async () => { const page = await newE2EPage(); await page.setContent(` diff --git a/packages/calcite-components/src/components/alert/alert.scss b/packages/calcite-components/src/components/alert/alert.scss index b726d2e0ee9..c8c3bf32e00 100644 --- a/packages/calcite-components/src/components/alert/alert.scss +++ b/packages/calcite-components/src/components/alert/alert.scss @@ -3,20 +3,35 @@ * * These properties can be overridden using the component's tag as selector. * + * @prop --calcite-alert-accent-color: Specifies the accent color of the component. + * @prop --calcite-alert-background-color: Specifies the background color of the component. + * @prop --calcite-alert-border-color: Specifies the border color of the component. + * @prop --calcite-alert-chip-background-color: Specifies the background color of the queue count chip in the component. + * @prop --calcite-alert-chip-border-color: Specifies the border color of the queue count chip in the component. + * @prop --calcite-alert-chip-corner-radius: Specifies the corner radius of the queue count chip in the component. + * @prop --calcite-alert-chip-text-color: Specifies the color of the queue count chip text in the component. + * @prop --calcite-alert-close-background-color-active: Specifies the background color of the close button in the component when the close button is active. + * @prop --calcite-alert-close-background-color-focus: Specifies the background color of the close button in the component when the close button is focused. + * @prop --calcite-alert-close-background-color-hover: Specifies the background color of the close button in the component when the close button is hovered. + * @prop --calcite-alert-close-background-color: Specifies the background color of the close button in the component. + * @prop --calcite-alert-close-icon-color-active: Specifies the color of the close button icon in the component when the close button is active. + * @prop --calcite-alert-close-icon-color-focus: Specifies the color of the close button icon in the component when the close button is focused. + * @prop --calcite-alert-close-icon-color-hover: Specifies the color of the close button icon in the component when the close button is hovered. + * @prop --calcite-alert-close-icon-color: Specifies the color of the close button icon in the component. + * @prop --calcite-alert-corner-radius: Specifies the corner radius of the component. + * @prop --calcite-alert-icon-color: Specifies the color of the icon in the component. + * @prop --calcite-alert-shadow: Specifies the shadow of the component. * @prop --calcite-alert-width: Specifies the width of the component. */ -$border-style: 1px solid var(--calcite-color-border-3); - :host { - --calcite-alert-edge-distance: theme("spacing.8"); - --calcite-alert-dismiss-progress-background: var(--calcite-color-transparent-tint); + --calcite-internal-alert-edge-distance: var(--calcite-spacing-xxxl); + @apply block; } .container { - @apply bg-foreground-1 - box-border + @apply box-border fixed flex items-center @@ -26,17 +41,22 @@ $border-style: 1px solid var(--calcite-color-border-3); my-0 opacity-0 pointer-events-none - shadow-2 text-start w-full z-toast; - border-radius: var(--calcite-border-radius); + --calcite-internal-alert-border-color: var(--calcite-alert-border-color, var(--calcite-color-border-3)); + --calcite-internal-alert-corner-radius: var(--calcite-alert-corner-radius, var(--calcite-border-radius)); + + background-color: var(--calcite-alert-background-color, var(--calcite-color-foreground-1)); + border-radius: var(--calcite-internal-alert-corner-radius, var(--calcite-border-radius)); border-block-start: 0 solid transparent; - border-inline: $border-style; - border-block-end: $border-style; - inline-size: var(--calcite-alert-width); - max-inline-size: calc(100% - (var(--calcite-alert-edge-distance) * 2)); + border-inline: 1px solid var(--calcite-internal-alert-border-color); + border-block-end: 1px solid var(--calcite-internal-alert-border-color); + border-block-start-color: var(--calcite-internal-alert-status-color); + box-shadow: var(--calcite-alert-shadow, var(--calcite-shadow-sm)); + inline-size: var(--calcite-internal-alert-width); + max-inline-size: calc(100% - (var(--calcite-internal-alert-edge-distance) * 2)); transition: var(--calcite-internal-animation-timing-slow) $easing-function, opacity var(--calcite-internal-animation-timing-slow) $easing-function, @@ -48,53 +68,60 @@ $border-style: 1px solid var(--calcite-color-border-3); inset-inline-start: 0; } &[class*="bottom"] { - transform: translate3d(0, var(--calcite-alert-edge-distance), 0); - inset-block-end: var(--calcite-alert-edge-distance); + transform: translate3d(0, var(--calcite-internal-alert-edge-distance), 0); + inset-block-end: var(--calcite-internal-alert-edge-distance); } &[class*="top"] { - transform: translate3d(0, calc(-1 * var(--calcite-alert-edge-distance)), 0); - inset-block-start: var(--calcite-alert-edge-distance); + transform: translate3d(0, calc(-1 * var(--calcite-internal-alert-edge-distance)), 0); + inset-block-start: var(--calcite-internal-alert-edge-distance); } &[class*="start"] { - inset-inline-start: var(--calcite-alert-edge-distance); + inset-inline-start: var(--calcite-internal-alert-edge-distance); inset-inline-end: auto; } &[class*="end"] { - inset-inline-end: var(--calcite-alert-edge-distance); + inset-inline-end: var(--calcite-internal-alert-edge-distance); inset-inline-start: auto; } } .icon { + --calcite-icon-color: var(--calcite-alert-icon-color, var(--calcite-internal-alert-status-color)); @apply flex flex-col items-center justify-center p-0; margin-block: auto; margin-inline-end: auto; - padding-inline-start: var(--calcite-alert-spacing-token-large); + padding-inline-start: var(--calcite-internal-alert-spacing-token-large); } .close { - @apply bg-transparent border-none cursor-pointer flex items-center justify-end outline-none self-stretch text-color-3; + @apply border-none cursor-pointer flex items-center justify-end outline-none self-stretch; -webkit-appearance: none; - padding: var(--calcite-alert-spacing-token-large); + padding: var(--calcite-internal-alert-spacing-token-large); + + background-color: var(--calcite-alert-close-background-color, var(--calcite-color-transparent)); + color: var(--calcite-alert-close-icon-color); @apply focus-base; &:focus { @apply focus-inset; } - &:hover, + &:hover { + background-color: var(--calcite-alert-close-background-color-hover, var(--calcite-color-foreground-2)); + color: var(--calcite-alert-close-icon-color-hover, var(--calcite-color-text-1)); + } &:focus { - @apply bg-foreground-2 text-color-1; + background-color: var(--calcite-alert-close-background-color-focus, var(--calcite-color-foreground-2)); + color: var(--calcite-alert-close-icon-color-focus, var(--calcite-color-text-1)); } - &:active { - @apply bg-foreground-3; + background-color: var(--calcite-alert-close-background-color-active, var(--calcite-color-foreground-3)); + color: var(--calcite-alert-close-icon-color-active, var(--calcite-color-text-1)); } } .queue-count { - @apply bg-foreground-1 - cursor-default + @apply cursor-default flex font-medium invisible @@ -105,7 +132,6 @@ $border-style: 1px solid var(--calcite-color-border-3); overflow-hidden self-stretch text-center - text-color-2 transition-default; border-inline: 0 solid transparent; border-start-end-radius: 0; @@ -115,6 +141,13 @@ $border-style: 1px solid var(--calcite-color-border-3); } } +.queue-count calcite-chip { + --calcite-chip-background-color: var(--calcite-alert-chip-background-color); + --calcite-chip-border-color: var(--calcite-alert-chip-border-color); + --calcite-chip-corner-radius: var(--calcite-alert-chip-corner-radius); + --calcite-chip-text-color: var(--calcite-alert-chip-text-color, var(--calcite-color-text-2)); +} + .dismiss-progress { @apply absolute block @@ -123,14 +156,15 @@ $border-style: 1px solid var(--calcite-color-border-3); inset-inline: 0; inset-block-start: -2px; block-size: 2px; - border-radius: var(--calcite-border-radius) var(--calcite-border-radius) 0 0; + border-radius: var(--calcite-internal-alert-corner-radius) var(--calcite-internal-alert-corner-radius) 0 0; + &::after { @apply absolute top-0 block; block-size: 2px; content: ""; - background-color: var(--calcite-alert-dismiss-progress-background); + background-color: var(--calcite-color-transparent-tint); inset-inline-end: 0; } } @@ -141,8 +175,8 @@ $border-style: 1px solid var(--calcite-color-border-3); .text-container { @apply box-border flex flex-auto min-w-0 flex-col break-words; - padding-block: var(--calcite-alert-spacing-token-small); - padding-inline: var(--calcite-alert-spacing-token-large) var(--calcite-alert-spacing-token-small); + padding-block: var(--calcite-internal-alert-spacing-token-small); + padding-inline: var(--calcite-internal-alert-spacing-token-large) var(--calcite-internal-alert-spacing-token-small); } .footer { @@ -152,11 +186,11 @@ $border-style: 1px solid var(--calcite-color-border-3); // scale variables :host([scale="s"]) { - --calcite-alert-width: 40em; - --calcite-alert-spacing-token-small: theme("spacing.2"); - --calcite-alert-spacing-token-large: theme("spacing.3"); - --calcite-alert-footer-height: theme("height.8"); - --calcite-alert-footer-divider-gap: theme("spacing[0.5]"); + --calcite-internal-alert-width: var(--calcite-alert-width, 40em); + --calcite-internal-alert-spacing-token-small: theme("spacing.2"); + --calcite-internal-alert-spacing-token-large: theme("spacing.3"); + --calcite-internal-alert-footer-height: theme("height.8"); + --calcite-internal-alert-footer-divider-gap: theme("spacing[0.5]"); @include slotted("title", "*") { @apply text-n1-wrap; @@ -170,17 +204,14 @@ $border-style: 1px solid var(--calcite-color-border-3); .queue-count { @apply mx-2; } - .container { - --calcite-alert-min-height: 3.5rem; - } } :host([scale="m"]) { - --calcite-alert-width: 50em; - --calcite-alert-spacing-token-small: theme("spacing.3"); - --calcite-alert-spacing-token-large: theme("spacing.4"); - --calcite-alert-footer-height: theme("height.12"); - --calcite-alert-footer-divider-gap: theme("spacing.1"); + --calcite-internal-alert-width: var(--calcite-alert-width, 50em); + --calcite-internal-alert-spacing-token-small: theme("spacing.3"); + --calcite-internal-alert-spacing-token-large: theme("spacing.4"); + --calcite-internal-alert-footer-height: theme("height.12"); + --calcite-internal-alert-footer-divider-gap: theme("spacing.1"); @include slotted("title", "*") { @apply text-0-wrap; @@ -194,17 +225,14 @@ $border-style: 1px solid var(--calcite-color-border-3); .queue-count { @apply mx-3; } - .container { - --calcite-alert-min-height: 4.1875rem; - } } :host([scale="l"]) { - --calcite-alert-width: 60em; - --calcite-alert-spacing-token-small: theme("spacing.4"); - --calcite-alert-spacing-token-large: theme("spacing.5"); - --calcite-alert-footer-height: theme("height.16"); - --calcite-alert-footer-divider-gap: theme("spacing.2"); + --calcite-internal-alert-width: var(--calcite-alert-width, 60em); + --calcite-internal-alert-spacing-token-small: theme("spacing.4"); + --calcite-internal-alert-spacing-token-large: theme("spacing.5"); + --calcite-internal-alert-footer-height: theme("height.16"); + --calcite-internal-alert-footer-divider-gap: theme("spacing.2"); @include slotted("title", "*") { @apply text-1-wrap mb-1; @@ -218,9 +246,6 @@ $border-style: 1px solid var(--calcite-color-border-3); .queue-count { @apply mx-4; } - .container { - --calcite-alert-min-height: 5.625rem; - } } :host([open]) { @@ -228,10 +253,10 @@ $border-style: 1px solid var(--calcite-color-border-3); @apply border-t-2 opacity-100; pointer-events: initial; &[class*="bottom"] { - transform: translate3d(0, calc(-1 * var(--calcite-alert-edge-distance)), inherit); + transform: translate3d(0, calc(-1 * var(--calcite-internal-alert-edge-distance)), inherit); } &[class*="top"] { - transform: translate3d(0, var(--calcite-alert-edge-distance), inherit); + transform: translate3d(0, var(--calcite-internal-alert-edge-distance), inherit); } } } @@ -241,43 +266,41 @@ $border-style: 1px solid var(--calcite-color-border-3); } @include slotted("title", "*") { - @apply text-0-wrap - text-color-1 - font-medium; + color: var(--calcite-color-text-1); + + @apply font-medium + text-0-wrap; } @include slotted("message", "*") { - @apply text-n1-wrap - text-color-2 - m-0 + color: var(--calcite-color-text-2); + + @apply font-normal inline - font-normal; + m-0 + text-n1-wrap; margin-inline-end: theme("margin.2"); } @include slotted("link", "*") { - @apply text-color-link inline-flex; + color: var(--calcite-color-text-link); + + @apply inline-flex; } $alertKinds: - "brand" var(--calcite-color-brand), - "info" var(--calcite-color-status-info), - "danger" var(--calcite-color-status-danger), - "success" var(--calcite-color-status-success), - "warning" var(--calcite-color-status-warning); + "brand" var(--calcite-alert-accent-color, var(--calcite-color-brand)), + "info" var(--calcite-alert-accent-color, var(--calcite-color-status-info)), + "danger" var(--calcite-alert-accent-color, var(--calcite-color-status-danger)), + "success" var(--calcite-alert-accent-color, var(--calcite-color-status-success)), + "warning" var(--calcite-alert-accent-color, var(--calcite-color-status-warning)); @each $alertKind in $alertKinds { $name: nth($alertKind, 1); $kind: nth($alertKind, 2); :host([kind="#{$name}"]) { - .container { - border-block-start-color: $kind; - - & .icon { - color: $kind; - } - } + --calcite-internal-alert-status-color: #{$kind}; } } diff --git a/packages/calcite-components/src/components/avatar/avatar.e2e.ts b/packages/calcite-components/src/components/avatar/avatar.e2e.ts index f42dcbf6e4f..2fbeb8657b8 100644 --- a/packages/calcite-components/src/components/avatar/avatar.e2e.ts +++ b/packages/calcite-components/src/components/avatar/avatar.e2e.ts @@ -1,5 +1,5 @@ import { newE2EPage } from "@stencil/core/testing"; -import { accessible, defaults, hidden, renders } from "../../tests/commonTests"; +import { accessible, defaults, hidden, renders, themed } from "../../tests/commonTests"; import { placeholderImage } from "../../../.storybook/placeholderImage"; import { html } from "../../../support/formatting"; import { CSS } from "./resources"; @@ -98,4 +98,56 @@ describe("calcite-avatar", () => { expect(secondBgColor).not.toEqual(thirdBgColor); expect(firstBgColor).not.toEqual(thirdBgColor); }); + + describe("theme", () => { + describe("thumbnail", () => { + themed( + html``, + { + "--calcite-avatar-corner-radius": [ + { + targetProp: "borderRadius", + }, + { + shadowSelector: `.${CSS.thumbnail}`, + targetProp: "borderRadius", + }, + ], + }, + ); + }); + + describe("icon", () => { + themed(html``, { + "--calcite-avatar-icon-color": { + shadowSelector: `.${CSS.icon}`, + targetProp: "color", + }, + "--calcite-avatar-corner-radius": [ + { + targetProp: "borderRadius", + }, + { + shadowSelector: `.${CSS.background}`, + targetProp: "borderRadius", + }, + ], + }); + }); + + describe("initials", () => { + themed(html``, { + "--calcite-avatar-text-color": { + shadowSelector: `.${CSS.initials}`, + targetProp: "color", + }, + "--calcite-avatar-corner-radius": { + shadowSelector: `.${CSS.background}`, + targetProp: "borderRadius", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/avatar/avatar.scss b/packages/calcite-components/src/components/avatar/avatar.scss index df0f91758f7..86b18e1a3c0 100644 --- a/packages/calcite-components/src/components/avatar/avatar.scss +++ b/packages/calcite-components/src/components/avatar/avatar.scss @@ -1,33 +1,58 @@ -:host { - @apply rounded-half inline-block overflow-hidden; -} +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-avatar-corner-radius: defines the corner radius of the component. + * @prop --calcite-avatar-text-color: defines the text color of the component. + * @prop --calcite-avatar-icon-color: defines the icon color of the component. + * + */ -:host([scale="s"]) { - @apply text-n3 h-6 w-6; +:host { + @apply inline-block overflow-hidden; } -:host([scale="m"]) { - @apply text-n2 h-8 w-8; +:host, +.background, +.thumbnail { + border-radius: var(--calcite-avatar-corner-radius, 50%); } -:host([scale="l"]) { - @apply text-0 h-11 w-11; +.background, +.thumbnail { + block-size: var(--calcite-container-size-content-fluid); + inline-size: var(--calcite-container-size-content-fluid); } -.icon { +.icon, +.background { @apply flex; } .background { - @apply rounded-half flex h-full w-full items-center justify-center; + @apply items-center justify-center; +} + +.icon { + --calcite-icon-color: var(--calcite-avatar-icon-color, var(--calcite-avatar-text-color, var(--calcite-color-text-2))); } .initials { - @apply text-color-2 font-bold uppercase; + @apply font-bold uppercase; + color: var(--calcite-avatar-text-color, var(--calcite-color-text-2)); } -.thumbnail { - @apply rounded-half h-full w-full; +:host([scale="s"]) { + @apply text-n3 h-6 w-6; +} + +:host([scale="m"]) { + @apply text-n2 h-8 w-8; +} + +:host([scale="l"]) { + @apply text-0 h-11 w-11; } @include base-component(); diff --git a/packages/calcite-components/src/components/block-section/block-section.e2e.ts b/packages/calcite-components/src/components/block-section/block-section.e2e.ts index 0913ae112b9..a2a99b8d8d6 100644 --- a/packages/calcite-components/src/components/block-section/block-section.e2e.ts +++ b/packages/calcite-components/src/components/block-section/block-section.e2e.ts @@ -1,5 +1,5 @@ import { E2EPage, newE2EPage } from "@stencil/core/testing"; -import { accessible, defaults, focusable, hidden, reflects, renders, t9n } from "../../tests/commonTests"; +import { accessible, defaults, focusable, hidden, reflects, renders, t9n, themed } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { CSS } from "./resources"; @@ -232,4 +232,95 @@ describe("calcite-block-section", () => { expect(await element.getProperty("open")).toBe(false); expect(toggle.getAttribute("aria-expanded")).toBe("false"); } + + describe("theme", () => { + describe("default", () => { + themed(html``, { + "--calcite-block-section-background-color": { + targetProp: "backgroundColor", + }, + "--calcite-block-section-heading-text-color": { + shadowSelector: `.${CSS.sectionHeader}`, + targetProp: "color", + }, + "--calcite-block-section-heading-text-color-hover": { + shadowSelector: `.${CSS.sectionHeader}`, + targetProp: "color", + state: "hover", + }, + "--calcite-block-section-text-color": { + targetProp: "color", + }, + "--calcite-block-section-toggle-icon-color": { + shadowSelector: `.${CSS.chevronIcon}`, + targetProp: "color", + }, + }); + }); + + describe("open", () => { + themed(``, { + "--calcite-block-section-border-color": { + targetProp: "borderColor", + }, + }); + }); + + describe("status icon", () => { + themed(``, { + "--calcite-block-section-status-icon-color": { + shadowSelector: `.${CSS.statusIcon}`, + targetProp: "--calcite-icon-color", + }, + }); + }); + + describe("switch toggle (open)", () => { + themed(``, { + "--calcite-block-section-switch-handle-border-color-checked": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-handle-border-color", + state: "hover", + }, + "--calcite-block-section-switch-track-background-color-checked": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-track-background-color", + }, + "--calcite-block-section-switch-border-color-checked": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-border-color", + }, + }); + }); + + describe("switch toggle (closed)", () => { + themed(``, { + "--calcite-block-section-switch-corner-radius": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-corner-radius", + }, + "--calcite-block-section-switch-handle-background-color": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-handle-background-color", + }, + "--calcite-block-section-switch-handle-border-color": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-handle-border-color", + }, + "--calcite-block-section-switch-handle-border-color-hover": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-handle-border-color", + state: "hover", + }, + "--calcite-block-section-switch-track-background-color": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-track-background-color", + }, + "--calcite-block-section-switch-border-color": { + shadowSelector: `calcite-switch`, + targetProp: "--calcite-switch-border-color", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/block-section/block-section.scss b/packages/calcite-components/src/components/block-section/block-section.scss index 3166d9f0493..77d10bf355a 100644 --- a/packages/calcite-components/src/components/block-section/block-section.scss +++ b/packages/calcite-components/src/components/block-section/block-section.scss @@ -1,30 +1,42 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-block-section-background-color: Specifies the background color of the component. + * @prop --calcite-block-section-border-color: Specifies the border color of the component. Applicable on bottom border when open. + * @prop --calcite-block-section-heading-text-color-hover: Specifies the component's heading text color on hover. + * @prop --calcite-block-section-heading-text-color: Specifies the component's heading text color. + * @prop --calcite-block-section-icon-color: Specifies the component's heading text color. + * @prop --calcite-block-section-status-icon-color: Specifies the status icon color of the component. + * @prop --calcite-block-section-switch-corner-radius: Specifies the border radius of the switch. + * @prop --calcite-block-section-switch-handle-background-color: Specifies the background color of the switch handle. + * @prop --calcite-block-section-switch-handle-border-color-checked: Specifies the border color of the switch handle when checked. + * @prop --calcite-block-section-switch-handle-border-color-hover: Specifies the border color of the switch handle on hover. + * @prop --calcite-block-section-switch-handle-border-color: Specifies the border color of the switch handle. + * @prop --calcite-block-section-switch-track-background-color-checked: Specifies the background color of the switch track when checked. + * @prop --calcite-block-section-switch-track-background-color: Specifies the background color of the switch track. + * @prop --calcite-block-section-switch-track-border-color-checked: Specifies the border color of the switch track when checked. + * @prop --calcite-block-section-switch-track-border-color: Specifies the border color of the switch track. + * @prop --calcite-block-section-text-color: Specifies the text color of the component. + * @prop --calcite-block-section-toggle-icon-color: Specifies the icon color of the toggle. + */ + :host { - @apply bg-foreground-1 text-n1 box-border block; + @apply block + box-border + text-n1; - color: var(--calcite-color-text-2); + background-color: var(--calcite-block-section-background-color, var(--calcite-color-foreground-1)); + color: var(--calcite-block-section-text-color, var(--calcite-color-text-2)); } :host([open]) { - @apply border-b-color-3 - border-0 + border-color: var(--calcite-block-section-border-color, var(--calcite-color-border-3)); + + @apply border-0 border-b border-solid; - - .toggle { - color: var(--calcite-color-text-1); - - &:hover { - color: var(--calcite-color-text-1); - } - } - - .chevron-icon { - color: var(--calcite-color-text-3); - - &:hover { - color: var(--calcite-color-text-1); - } - } } :host(:last-child) { @@ -32,38 +44,59 @@ } .toggle { - @apply font-sans w-full border-0 bg-transparent; + @apply border-0 font-medium font-sans w-full; + + background-color: var(--calcite-color-transparent); + gap: var(--calcite-spacing-md); +} + +.status-icon { + --calcite-icon-color: var( + --calcite-block-section-status-icon-color, + var(--calcite-internal-block-section-icon-color) + ); gap: var(--calcite-spacing-md); - color: var(--calcite-color-text-2); font-weight: var(--calcite-font-weight-normal); +} - &:hover { - color: var(--calcite-color-text-1); - } +.status-icon.valid { + --calcite-internal-block-section-icon-color: var(--calcite-color-status-success); +} + +.status-icon.invalid { + --calcite-internal-block-section-icon-color: var(--calcite-color-status-danger); } .toggle--switch, .section-header { - @apply text-n1 + @apply cursor-pointer + flex focus-base + items-center mx-0 my-1 - flex - cursor-pointer - select-none - items-center px-0 - py-2; + py-2 + select-none + text-n1; + + color: var(--calcite-block-section-heading-text-color, var(--calcite-color-text-2)); &:focus { @apply focus-outset; } &:hover { - color: var(--calcite-color-text-1); + color: var(--calcite-block-section-heading-text-color-hover, var(--calcite-color-text-1)); } } +.label { + @apply flex items-center justify-center my-1; + + margin-inline-start: var(--calcite-spacing-md); +} + .section-header__text { @apply my-0 flex-auto; @@ -80,29 +113,41 @@ @apply flex flex-auto items-center; } - .icon--end, - .icon--start, - .chevron-icon { + .switch { @apply flex items-center; - - color: var(--calcite-color-text-3); - - &:hover { - color: var(--calcite-color-text-1); - } } } -.status-icon { - @apply flex items-center; +.icon--start, +.icon--end { + --calcite-icon-color: var(--calcite-internal-block-section-icon-color, var(--calcite-color-text-3)); } -.status-icon.valid { - color: theme("colors.success"); +.chevron-icon { + --calcite-icon-color: var(--calcite-block-section-toggle-icon-color, var(--calcite-color-text-3)); + + &:hover { + --calcite-icon-color: var(--calcite-block-section-toggle-icon-color-hover, var(--calcite-color-text-1)); + } } -.status-icon.invalid { - color: theme("colors.danger"); +calcite-switch { + --calcite-switch-border-color: var(--calcite-block-section-switch-border-color); + --calcite-switch-corner-radius: var(--calcite-block-section-switch-corner-radius); + --calcite-switch-handle-background-color: var(--calcite-block-section-switch-handle-background-color); + --calcite-switch-handle-border-color: var(--calcite-block-section-switch-handle-border-color); + --calcite-switch-track-background-color: var(--calcite-block-section-switch-track-background-color); + + &:focus, + &:hover { + --calcite-switch-handle-border-color: var(--calcite-block-section-switch-handle-border-color-hover); + } + + &[checked] { + --calcite-switch-border-color: var(--calcite-block-section-switch-border-color-checked); + --calcite-switch-handle-border-color: var(--calcite-block-section-switch-handle-border-color-checked); + --calcite-switch-track-background-color: var(--calcite-block-section-switch-track-background-color-checked); + } } @include base-component(); diff --git a/packages/calcite-components/src/components/block/block.e2e.ts b/packages/calcite-components/src/components/block/block.e2e.ts index d632af846e7..49e97a779ac 100644 --- a/packages/calcite-components/src/components/block/block.e2e.ts +++ b/packages/calcite-components/src/components/block/block.e2e.ts @@ -10,6 +10,7 @@ import { renders, slots, t9n, + themed, } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { openClose } from "../../tests/commonTests"; @@ -361,4 +362,188 @@ describe("calcite-block", () => { describe("translation support", () => { t9n("calcite-block"); }); + + describe("theme", () => { + describe("default", () => { + themed(html``, { + "--calcite-block-background-color": { + targetProp: "backgroundColor", + }, + "--calcite-block-border-color": { + targetProp: "borderColor", + }, + "--calcite-block-description-text-color": { + shadowSelector: `.${CSS.description}`, + targetProp: "color", + state: "hover", + }, + "--calcite-block-heading-text-color": [ + { + shadowSelector: `.${CSS.header}`, + targetProp: "color", + }, + { + shadowSelector: `.${CSS.heading}`, + targetProp: "color", + }, + ], + "--calcite-block-text-color": { + targetProp: "color", + }, + "--calcite-block-content-space": [ + { + shadowSelector: `.${CSS.content}`, + targetProp: "paddingBlock", + }, + { + shadowSelector: `.${CSS.content}`, + targetProp: "paddingInline", + }, + ], + }); + }); + + describe("collapsible", () => { + themed(html``, { + "--calcite-block-header-background-color": { + shadowSelector: `.${CSS.toggle}`, + targetProp: "backgroundColor", + }, + "--calcite-block-header-background-color-hover": { + shadowSelector: `.${CSS.toggle}`, + targetProp: "backgroundColor", + state: "hover", + }, + "--calcite-block-toggle-icon-color": { + shadowSelector: `.${CSS.toggleIcon}`, + targetProp: "--calcite-icon-color", + }, + "--calcite-block-toggle-icon-color-hover": { + shadowSelector: `.${CSS.toggleIcon}`, + targetProp: "--calcite-icon-color", + state: "hover", + }, + }); + }); + + describe("open", () => { + themed(html``, { + "--calcite-block-heading-text-color-open": { + shadowSelector: `.${CSS.heading}`, + targetProp: "color", + }, + }); + }); + + describe("loading", () => { + themed(html``, { + "--calcite-block-loader-color-start": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-start", + }, + "--calcite-block-loader-color-middle": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-middle", + }, + "--calcite-block-loader-color-end": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-end", + }, + "--calcite-block-scrim-background-color": { + shadowSelector: `calcite-scrim`, + targetProp: "--calcite-scrim-background-color", + }, + }); + }); + + describe("draggable", () => { + themed(html``, { + "--calcite-block-handle-background-color": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-background-color", + }, + "--calcite-block-handle-background-color-hover": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-background-color-hover", + }, + "--calcite-block-handle-background-color-focus": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-background-color-focus", + }, + "--calcite-block-handle-background-color-selected": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-background-color-selected", + }, + "--calcite-block-handle-icon-color": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-icon-color", + }, + "--calcite-block-handle-icon-color-hover": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-icon-color-hover", + }, + "--calcite-block-handle-icon-color-focus": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-icon-color-focus", + }, + "--calcite-block-handle-icon-color-selected": { + shadowSelector: "calcite-handle", + targetProp: "--calcite-handle-icon-color-selected", + }, + }); + }); + + describe("with action menu", () => { + themed( + html` +
+ +
+
`, + { + "--calcite-block-action-menu-border-color": { + shadowSelector: `calcite-action-menu`, + targetProp: "--calcite-action-menu-border-color", + }, + "--calcite-block-action-menu-text-color": { + shadowSelector: `calcite-action-menu`, + targetProp: "--calcite-action-menu-text-color", + }, + }, + ); + }); + + describe("status valid", () => { + themed(html``, { + "--calcite-block-status-icon-color-valid": { + shadowSelector: `.${CSS.statusIcon}`, + targetProp: "--calcite-icon-color", + }, + }); + }); + + describe("status invalid", () => { + themed(html``, { + "--calcite-block-status-icon-color-invalid": { + shadowSelector: `.${CSS.statusIcon}`, + targetProp: "--calcite-icon-color", + }, + }); + }); + + describe("deprecated", () => { + themed(html``, { + "--calcite-block-padding": [ + { + shadowSelector: `.${CSS.content}`, + targetProp: "paddingBlock", + }, + { + shadowSelector: `.${CSS.content}`, + targetProp: "paddingInline", + }, + ], + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/block/block.scss b/packages/calcite-components/src/components/block/block.scss index 24451975682..e6f7338a8be 100644 --- a/packages/calcite-components/src/components/block/block.scss +++ b/packages/calcite-components/src/components/block/block.scss @@ -3,21 +3,58 @@ * * These properties can be overridden using the component's tag as selector. * - * @prop --calcite-block-padding: Specifies the padding of the block `default` slot. + * @prop --calcite-block-action-menu-border-color: The border color of the sub-component. + * @prop --calcite-block-action-menu-text-color: The text color of the sub-component. + * @prop --calcite-block-background-color: Specifies the background color of the component. + * @prop --calcite-block-border-color: Specifies the border color of the component. + * @prop --calcite-block-content-space: Specifies the space of the component's `default` slot. + * @prop --calcite-block-description-text-color: Specifies the text color of the component's description. + * @prop --calcite-block-handle-background-color-focus: Specifies the background color of the sub-component when in focus state. + * @prop --calcite-block-handle-background-color-hover: Specifies the background color of the sub-component when in hover state. + * @prop --calcite-block-handle-background-color-selected: Specifies the background color of the sub-component when selected. + * @prop --calcite-block-handle-background-color: Specifies the background color of the sub-component. + * @prop --calcite-block-handle-icon-color-focus: Specifies the icon color of the sub-component when in focus state. + * @prop --calcite-block-handle-icon-color-hover: Specifies the icon color of the sub-component when in hover state. + * @prop --calcite-block-handle-icon-color-selected: Specifies the icon color of the sub-component when selected. + * @prop --calcite-block-handle-icon-color: Specifies the icon color of the sub-component. + * @prop --calcite-block-header-background-color-hover: Specifies the background color of the component's header when hovered. + * @prop --calcite-block-header-background-color: Specifies the background color of the component's header. + * @prop --calcite-block-heading-text-color-open: Specifies the text color of the component's heading when open. + * @prop --calcite-block-heading-text-color: Specifies the text color of the component's heading. + * @prop --calcite-block-loader-color-middle: Specifies the starting color of the loader + * @prop --calcite-block-loader-color-end: Specifies the ending color of the loader + * @prop --calcite-block-loader-color-start: Specifies the starting color of the loader + * @prop --calcite-block-padding: [Deprecated] use `--calcite-block-content-space` instead - Specifies the padding of the component's `default` slot. + * @prop --calcite-block-scrim-background-color: Specifies the background color of the component's scrim. + * @prop --calcite-block-text-color: Specifies the text color of the component. + * @prop --calcite-block-toggle-icon-color: Specifies the color of the component's toggle icon. + * @prop --calcite-block-toggle-icon-color-hover: Specifies the color of the component's toggle icon on hover. + * @prop --calcite-block-status-icon-color-valid: Specifies the color of the component's status icon when valid. + * @prop --calcite-block-status-icon-color-invalid: Specifies the color of the component's status icon when invalid. */ :host { - @extend %component-host; - @extend %component-spacing; - @apply transition-margin ease-cubic border-color-3 flex flex-shrink-0 flex-grow-0 - flex-col border-0 border-b border-solid p-0 duration-150; + --calcite-internal-block-padding-inline: var( + --calcite-block-padding, + var(--calcite-block-content-space, theme("spacing[2.5]")) + ); + --calcite-internal-block-padding-block: var( + --calcite-block-padding, + var(--calcite-block-content-space, theme("spacing.2")) + ); + + @include base-host(); + @apply border-0 border-b border-solid duration-150 ease-cubic + flex flex-col flex-grow-0 flex-shrink-0 p-0 transition-margin; flex-basis: auto; -} -@include disabled(); + background-color: var(--calcite-block-background-color, var(--calcite-color-foreground-1)); + border-color: var(--calcite-block-border-color, var(--calcite-color-border-3)); + color: var(--calcite-block-text-color, var(--calcite-color-text-2)); + font-size: var(--calcite-font-size--1); -@import "../../assets/styles/animation"; -@import "../../assets/styles/header"; + --calcite-internal-block-no-space: 0; +} .header { @apply justify-start; @@ -56,9 +93,21 @@ } .actions-end { + @apply flex items-stretch; grid-area: actions-end; } +.toggle-icon { + @apply duration-150 + ease-in-out + justify-self-end + my-3 + self-center + transition-color; + margin-inline-end: var(--calcite-spacing-md); + margin-inline-start: auto; +} + .toggle { @apply font-sans focus-base @@ -70,12 +119,19 @@ justify-between border-none p-0; - text-align: initial; - background-color: transparent; + background-color: var(--calcite-block-header-background-color, transparent); + + .toggle-icon { + --calcite-icon-color: var(--calcite-block-toggle-icon-color, var(--calcite-color-text-3)); + } &:hover { - @apply bg-foreground-2; + background-color: var(--calcite-block-header-background-color-hover, var(--calcite-color-foreground-2)); + + .toggle-icon { + --calcite-icon-color: var(--calcite-block-toggle-icon-color-hover, var(--calcite-color-text-1)); + } } &:focus { @apply focus-inset; @@ -95,9 +151,8 @@ calcite-handle { @apply m-0; } -.header .title .heading { +.heading { @apply text-n1 - text-color-2 word-break transition-color p-0 @@ -109,33 +164,24 @@ calcite-handle { .description { @apply text-n2-wrap - text-color-3 word-break mt-0.5 p-0; -} - -.icon { - @apply flex; -} -.status-icon.valid { - color: theme("colors.success"); + color: var(--calcite-block-description-text-color, var(--calcite-color-text-3)); } -.status-icon.invalid { - color: theme("colors.danger"); +.icon { + display: flex; } -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 50% { - transform: rotate(180deg); +.status-icon { + &.valid { + --calcite-icon-color: var(--calcite-block-status-icon-color-valid, var(--calcite-color-status-success)); } - 100% { - transform: rotate(360deg); + + &.invalid { + --calcite-icon-color: var(--calcite-block-status-icon-color-invalid, var(--calcite-color-status-danger)); } } @@ -145,29 +191,14 @@ calcite-handle { margin-inline-start: auto; } -.toggle-icon { - @apply text-color-3 - transition-color - self-center - justify-self-end - duration-150 - ease-in-out; - - margin-inline-end: var(--calcite-spacing-md); -} - -.toggle:hover .toggle-icon { - @apply text-color-1; -} - .container { @apply flex flex-col h-full relative; } .content { @apply animate-in flex-1 relative min-h-0; - padding-block: var(--calcite-block-padding, var(--calcite-spacing-sm)); - padding-inline: var(--calcite-block-padding, var(--calcite-spacing-md)); + padding-block: var(--calcite-internal-block-padding-block); + padding-inline: var(--calcite-internal-block-padding-inline); } .content-start { @@ -179,20 +210,45 @@ calcite-handle { grid-area: control; } +:host([open]) { + .heading { + color: var(--calcite-block-heading-text-color-open, var(--calcite-color-text-1)); + } + + @apply my-2; +} + calcite-action-menu { + --calcite-action-menu-border-color: var(--calcite-block-action-menu-border-color); + --calcite-action-menu-text-color: var(--calcite-block-action-menu-text-color); + grid-area: menu; } -.actions-end { - @apply flex items-stretch; +calcite-handle { + --calcite-handle-icon-color: var(--calcite-block-handle-icon-color); + --calcite-handle-background-color: var(--calcite-block-handle-background-color); + + --calcite-handle-icon-color-hover: var(--calcite-block-handle-icon-color-hover); + --calcite-handle-background-color-hover: var(--calcite-block-handle-background-color-hover); + + --calcite-handle-icon-color-focus: var(--calcite-block-handle-icon-color-focus); + --calcite-handle-background-color-focus: var(--calcite-block-handle-background-color-focus); + + --calcite-handle-icon-color-selected: var(--calcite-block-handle-icon-color-selected); + --calcite-handle-background-color-selected: var(--calcite-block-handle-background-color-selected); } -:host([open]) { - @apply my-2; +calcite-loader { + --calcite-loader-color-middle: var(--calcite-block-loader-color-middle); + --calcite-loader-color-start: var(--calcite-block-loader-color-start); + --calcite-loader-color-end: var(--calcite-block-loader-color-end); +} - .header .title .heading { - @apply text-color-1; - } +calcite-scrim { + --calcite-scrim-background-color: var(--calcite-block-scrim-background-color); } @include base-component(); +@include disabled(); +@include header($textColor: --calcite-block-heading-text-color, $spacing: --calcite-internal-block-no-space); diff --git a/packages/calcite-components/src/components/button/button.e2e.ts b/packages/calcite-components/src/components/button/button.e2e.ts index 04a4abf7cef..4ee5d10ee25 100644 --- a/packages/calcite-components/src/components/button/button.e2e.ts +++ b/packages/calcite-components/src/components/button/button.e2e.ts @@ -1,5 +1,5 @@ import { E2EElement, newE2EPage } from "@stencil/core/testing"; -import { accessible, disabled, HYDRATED_ATTR, labelable, defaults, hidden, t9n } from "../../tests/commonTests"; +import { accessible, disabled, HYDRATED_ATTR, labelable, defaults, hidden, t9n, themed } from "../../tests/commonTests"; import { GlobalTestProps } from "../../tests/utils"; import { html } from "../../../support/formatting"; import { CSS } from "./resources"; @@ -758,4 +758,95 @@ describe("calcite-button", () => { expect(elementHost).toEqualAttribute("width", "full"); expect(await elementAsButton.getComputedStyle()["width"]).toEqual(await elementHost.getComputedStyle()["width"]); }); + + describe("theme", () => { + describe("default", () => { + themed("calcite-button", { + "--calcite-button-background-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "backgroundColor", + }, + "--calcite-button-border-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderColor", + }, + "--calcite-button-corner-radius": [ + { + targetProp: "borderRadius", + }, + { + shadowSelector: `.${CSS.button}`, + targetProp: "borderRadius", + }, + ], + "--calcite-button-shadow": { + targetProp: "boxShadow", + }, + "--calcite-button-text-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "color", + }, + }); + }); + + describe("fine-grained round corners", () => { + themed("calcite-button", { + "--calcite-button-corner-radius-start-start": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderStartStartRadius", + }, + "--calcite-button-corner-radius-start-end": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderStartEndRadius", + }, + "--calcite-button-corner-radius-end-start": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderEndStartRadius", + }, + "--calcite-button-corner-radius-end-end": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderEndEndRadius", + }, + }); + }); + + describe("link", () => { + themed(html`button`, { + "--calcite-button-background-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "backgroundColor", + }, + "--calcite-button-border-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderColor", + }, + "--calcite-button-corner-radius": { + shadowSelector: `.${CSS.button}`, + targetProp: "borderRadius", + }, + "--calcite-button-text-color": { + shadowSelector: `.${CSS.button}`, + targetProp: "color", + }, + }); + }); + + describe("with icons", () => { + themed(html`button`, { + "--calcite-button-icon-color": { + shadowSelector: `.${CSS.icon}`, + targetProp: "color", + }, + }); + }); + + describe("loading", () => { + themed(html`button`, { + "--calcite-button-loader-color": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-start", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/button/button.scss b/packages/calcite-components/src/components/button/button.scss index 0aa653194a4..6bdbf40aa57 100644 --- a/packages/calcite-components/src/components/button/button.scss +++ b/packages/calcite-components/src/components/button/button.scss @@ -1,134 +1,337 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-button-background-color: defines the component's background color. + * @prop --calcite-button-border-color: defines the component's border color. + * @prop --calcite-button-corner-radius: defines the component's corner radius. + * @prop --calcite-button-corner-radius-start-start: defines the component's top-left corner radius. will fallback to --calcite-button-corner-radius. + * @prop --calcite-button-corner-radius-start-end: defines the component's top-right corner radius. Will fallback to --calcite-button-corner-radius. + * @prop --calcite-button-corner-radius-end-start: defines the component's bottom-left corner radius. Will fallback to --calcite-button-corner-radius. + * @prop --calcite-button-corner-radius-end-end: defines the component's bottom-right corner radius. Will fallback to --calcite-button-corner-radius. + * @prop --calcite-button-icon-color: defines the color of an icon in the component. + * @prop --calcite-button-loader-color: defines the component's loader color. + * @prop --calcite-button-shadow: defines the component's shadow. + * @prop --calcite-button-text-color: defines the component's text color. + */ + :host { @apply inline-block w-auto align-middle; -} - -// fab variants -:host([round]) { - border-radius: 50px; - & a, - & button { - border-radius: 50px; - } -} - -// focus styles -:host button, -:host a { - @apply focus-base; - &:focus { - @apply focus-outset; - } -} -// button base -:host button, -:host a { - --calcite-button-content-margin-internal: theme("margin.2"); - --calcite-button-padding-x-internal: 7px; - --calcite-button-padding-y-internal: 3px; - padding-block: var(--calcite-button-padding-y-internal); - padding-inline: var(--calcite-button-padding-x-internal); - @apply font-inherit - relative - box-border - flex - h-full - w-full - cursor-pointer - select-none - appearance-none - items-center - justify-center - rounded-none - border-none - text-center - font-normal - no-underline; - // include transition from focus + inline-size: var(--calcite-internal-button-size-x); + border-radius: var( + --calcite-button-corner-radius, + var(--calcite-internal-button-corner-radius, var(--calcite-corner-radius)) + ); + box-shadow: var(--calcite-button-shadow, var(--calcite-shadow-none)); +} + +.button { + @apply focus-base + font-inherit + relative + box-border + flex + cursor-pointer + select-none + appearance-none + items-center + border-none + text-center + font-normal + no-underline; + padding-block: var(--calcite-internal-button-space-y, 3px); + padding-inline: var(--calcite-internal-button-space-x, 7px); + inline-size: var(--calcite-container-size-content-fluid); + block-size: var(--calcite-container-size-content-fluid); + border-start-start-radius: var( + --calcite-button-corner-radius-start-start, + var(--calcite-button-corner-radius, var(--calcite-internal-button-corner-radius, var(--calcite-corner-radius))) + ); + border-start-end-radius: var( + --calcite-button-corner-radius-start-end, + var(--calcite-button-corner-radius, var(--calcite-internal-button-corner-radius, var(--calcite-corner-radius))) + ); + border-end-start-radius: var( + --calcite-button-corner-radius-end-start, + var(--calcite-button-corner-radius, var(--calcite-internal-button-corner-radius, var(--calcite-corner-radius))) + ); + border-end-end-radius: var( + --calcite-button-corner-radius-end-end, + var(--calcite-button-corner-radius, var(--calcite-internal-button-corner-radius, var(--calcite-corner-radius))) + ); + justify-content: var(--calcite-internal-button-content-align-x, center); + background-color: var( + --calcite-button-background-color, + var(--calcite-internal-button-background-color, var(--calcite-color-foreground-1)) + ); + color: var(--calcite-button-text-color, var(--calcite-internal-button-text-color, var(--calcite-color-text-1))); + box-shadow: inset 0 0 0 var(--calcite-internal-button-border-width) + var(--calcite-button-border-color, var(--calcite-internal-button-border-color)); + border-style: none; + border-width: var(--calcite-border-width-sm); + border-color: var( + --calcite-button-border-color, + var(--calcite-internal-button-border-color, var(--calcite-color-transparent)) + ); transition: color var(--calcite-animation-timing) ease-in-out, background-color var(--calcite-animation-timing) ease-in-out, box-shadow var(--calcite-animation-timing) ease-in-out, outline-color var(--calcite-internal-animation-timing-fast) ease-in-out; + + span { + @apply truncate; + } + &:hover { - @apply no-underline; + --calcite-internal-button-border-width: var(--calcite-border-width-sm); } - & span { - @apply truncate; + + &:active, + &:focus { + --calcite-internal-button-border-width: var(--calcite-border-width-md); } } +calcite-loader { + --calcite-loader-color-start: var( + --calcite-button-loader-color, + var(--calcite-internal-button-loader-color, var(--calcite-color-text-inverse)) + ); +} + +:host(:focus) .button, +.button:focus { + @apply focus-outset; +} + +:host(:hover) .button, +.button:hover { + @apply no-underline; +} + +// fab variants +:host([round]) { + --calcite-internal-button-corner-radius: 50px; +} + .content { - margin-inline: var(--calcite-button-content-margin-internal); + margin-inline: var(--calcite-internal-button-content-space, theme("margin.2")); +} + +.icon-start-empty .content { + margin-inline-start: unset; +} +.icon-end-empty .content { + margin-inline-end: unset; } -.icon-start-empty { - .content { - margin-inline-start: unset; +.icon { + --calcite-icon-color: var(--calcite-button-icon-color); + + @apply relative + m-0 + inline-flex + font-normal; + line-height: inherit; +} + +.calcite-button--loader { + @apply flex; + calcite-loader { + @apply m-0; + transition: + inline-size var(--calcite-internal-animation-timing-slow) ease-in-out, + opacity var(--calcite-internal-animation-timing-slow) ease-in-out, + transform var(--calcite-internal-animation-timing-slow) ease-in-out; + &.loading-in { + animation-name: loader-in; + animation-duration: var(--calcite-internal-animation-timing-slow); + } + &.loading-out { + animation-name: loader-out; + animation-duration: var(--calcite-internal-animation-timing-slow); + } } } -.icon-end-empty { - .content { - margin-inline-end: unset; + +// Scales +// generate button scales (scenario: text exists) +:host([scale="s"]) { + .button { + --calcite-internal-button-space-y: 3px; + + &.content--slotted { + @apply text-n2h; + } + // generate fab scales (scenario: 1 icon, ie., should be square) + &:not(.content--slotted) { + --calcite-internal-button-space-x: theme("padding[0.5]"); + --calcite-internal-button-space-y: 3px; + @apply text-0h w-6; + min-block-size: theme("height.6"); + } + } +} +:host([scale="s"][appearance="transparent"]) { + .button { + &.content--slotted { + --calcite-internal-button-space-x: theme("padding.2"); + } + } +} +// generate fab scales (scenario: 2 icons, ie., should not be square) +:host([scale="s"][icon-start][icon-end]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-x: 23px; + @apply text-0h h-6; + } + } +} +// accommodate for transparent buttons not having borders +:host([scale="s"][icon-start][icon-end][appearance="transparent"]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-x: theme("padding.6"); + } } } :host([scale="m"]) { - button, - a { - --calcite-button-content-margin-internal: theme("margin.3"); + .button { + --calcite-internal-button-space-y: 7px; + --calcite-internal-button-content-space: theme("margin.3"); + + &.content--slotted { + --calcite-internal-button-space-x: 11px; + @apply text-n1h; + } + &:not(.content--slotted) { + --calcite-internal-button-space-x: theme("padding[0.5]"); + --calcite-internal-button-space-y: 7px; + @apply text-0h w-8; + min-block-size: theme("height.8"); + } + } +} +// accommodate for transparent buttons not having borders +:host([scale="m"][appearance="transparent"]) { + .button { + &.content--slotted { + --calcite-internal-button-space-x: theme("padding.3"); + } + } +} +:host([scale="m"][icon-start][icon-end]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-x: theme("padding.8"); + @apply text-0h h-8; + } } } +// accommodate for transparent buttons not having borders +:host([scale="m"][icon-start][icon-end][appearance="transparent"]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-x: 33px; + } + } +} + :host([scale="l"]) { - button, - a { - --calcite-button-content-margin-internal: theme("margin.4"); + .button { + --calcite-internal-button-content-space: theme("margin.4"); + + &.content--slotted { + --calcite-internal-button-space-x: 15px; + @apply text-0h; + } + &:not(.content--slotted) { + --calcite-internal-button-space-x: theme("padding[0.5]"); + --calcite-internal-button-space-y: 9px; + @apply text-0h w-11; + min-block-size: theme("height.11"); + } + } + + .button-padding { + --calcite-internal-button-space-x: theme("padding.4"); + --calcite-internal-button-space-y: 11px; + } + //shrink the padding if an icon is present to preserve the height + .button-padding--shrunk { + --calcite-internal-button-space-y: 9px; + } +} +// accommodate for transparent buttons not having borders +:host([scale="l"][appearance="transparent"]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-y: theme("padding[2.5]"); + } + } +} +:host([scale="l"][icon-start][icon-end]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-x: 43px; + @apply text-0h h-11; + // add space between when only 2 icons + .icon--start + .icon--end { + margin-inline-start: theme("margin.4"); + } + } + } +} +// accommodate for transparent buttons not having borders +:host([scale="l"][icon-start][icon-end][appearance="transparent"]) { + .button { + &:not(.content--slotted) { + --calcite-internal-button-space-x: theme("padding.11"); + } } } // button width :host([width="auto"]) { - @apply w-auto; + --calcite-internal-button-size-x: auto; } - :host([width="half"]) { - @apply w-2/4; + --calcite-internal-button-size-x: 50%; } - :host([width="full"]) { - @apply w-full; + --calcite-internal-button-size-x: var(--calcite-container-size-content-fluid); } // alignment :host([alignment="center"]:not([width="auto"])) { - a, - button { - @apply justify-center; + .button { + --calcite-internal-button-content-align-x: center; } } :host([alignment="start"]:not([width="auto"])) { - a, - button { - @apply justify-start; + .button { + --calcite-internal-button-content-align-x: flex-start; } } :host([alignment="end"]:not([width="auto"])) { - a, - button { - @apply justify-end; + .button { + --calcite-internal-button-content-align-x: flex-end; } } :host([alignment*="space-between"]:not([width="auto"])) { - a, - button { - @apply justify-between; + .button { + --calcite-internal-button-content-align-x: space-between; } } :host([alignment="icon-start-space-between"]:not([width="auto"])) { .icon--start { margin-inline-end: auto; } - a, - button { + .button { text-align: unset; } } @@ -136,87 +339,28 @@ .icon--end { margin-inline-start: auto; } - a, - button { + .button { text-align: unset; } } - // only two icons :host([alignment="center"]) { - a:not(.content--slotted), - button:not(.content--slotted) { + .button:not(.content--slotted) { .icon--start + .icon--end { - margin-inline-start: var(--calcite-button-content-margin-internal); - } - } -} - -.icon { - @apply relative - m-0 - inline-flex - font-normal; - line-height: inherit; -} - -@include disabled(); - -@keyframes loader-in { - 0% { - inline-size: 0; - opacity: 0; - transform: scale(0.5); - } - 100% { - inline-size: 1em; - opacity: 1; - transform: scale(1); - } -} -@keyframes loader-out { - 0% { - inline-size: 1em; - opacity: 1; - transform: scale(1); - } - 100% { - inline-size: 0; - opacity: 0; - transform: scale(0.5); - } -} - -.calcite-button--loader { - @apply flex; - calcite-loader { - @apply m-0; - transition: - inline-size var(--calcite-internal-animation-timing-slow) ease-in-out, - opacity var(--calcite-internal-animation-timing-slow) ease-in-out, - transform var(--calcite-internal-animation-timing-slow) ease-in-out; - &.loading-in { - animation-name: loader-in; - animation-duration: var(--calcite-internal-animation-timing-slow); - } - &.loading-out { - animation-name: loader-out; - animation-duration: var(--calcite-internal-animation-timing-slow); + margin-inline-start: var(--calcite-internal-button-content-space, theme("margin.2")); } } } :host([loading]) { // center loading spinner when button has text - button.content--slotted, - a.content--slotted { + .button.content--slotted { .calcite-button--loader calcite-loader { - margin-inline-end: var(--calcite-button-content-margin-internal); + margin-inline-end: var(--calcite-internal-button-content-space, theme("margin.2")); } } // hide icons when loading with no text - button:not(.content--slotted), - a:not(.content--slotted) { + .button:not(.content--slotted) { .icon--start, .icon--end { @apply hidden; @@ -226,515 +370,398 @@ // button styles :host([appearance]) { - button, - a { - @apply border-color-transparent - border - border-solid; + .button { + border-style: solid; } } :host([kind="brand"]) { - button, - a { - @apply text-color-inverse bg-brand; + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-inverse); + --calcite-internal-button-background-color: var(--calcite-color-brand); + --calcite-internal-button-loader-color: var(--calcite-color-text-inverse); &:hover, &:focus { - @apply bg-brand-hover; + --calcite-internal-button-background-color: var(--calcite-color-brand-hover); } &:active { - @apply bg-brand-press; - } - calcite-loader { - @apply text-color-inverse; + --calcite-internal-button-background-color: var(--calcite-color-brand-press); } } } + :host([kind="danger"]) { - button, - a { - @apply text-color-inverse bg-danger; + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-inverse); + --calcite-internal-button-background-color: var(--calcite-color-status-danger); + --calcite-internal-button-loader-color: var(--calcite-color-text-inverse); + &:hover, &:focus { - @apply bg-danger-hover; + --calcite-internal-button-background-color: var(--calcite-color-status-danger-hover); } &:active { - @apply bg-danger-press; - } - calcite-loader { - @apply text-color-inverse; + --calcite-internal-button-background-color: var(--calcite-color-status-danger-press); } } } :host([kind="neutral"]) { - button, - a { - @apply text-color-1 bg-foreground-3; + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-1); + --calcite-internal-button-background-color: var(--calcite-color-foreground-3); + &:hover, &:focus { - @apply bg-foreground-2; + --calcite-internal-button-background-color: var(--calcite-color-foreground-2); } &:active { - @apply bg-foreground-1; - } - calcite-loader { - @apply text-color-1; + --calcite-internal-button-background-color-active: var(--calcite-color-foreground-1); } } + + calcite-loader { + --calcite-internal-button-loader-color: var(--calcite-color-text-1); + } } :host([kind="inverse"]) { - button, - a { - @apply text-color-inverse; - background-color: var(--calcite-color-inverse); + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-inverse); + --calcite-internal-button-background-color: var(--calcite-color-inverse); + &:hover, &:focus { - background-color: var(--calcite-color-inverse-hover); + --calcite-internal-button-background-color: var(--calcite-color-inverse-hover); } &:active { - background-color: var(--calcite-color-inverse-press); - } - calcite-loader { - @apply text-color-inverse; + --calcite-internal-button-background-color-active: var(--calcite-color-inverse-press); } } + + calcite-loader { + --calcite-internal-button-loader-color: var(--calcite-color-text-inverse); + } } // outline :host([appearance="outline-fill"]) { - button, - a { - @apply bg-foreground-1 border border-solid; - box-shadow: inset 0 0 0 1px transparent; + .button { + --calcite-internal-button-background-color: var(--calcite-color-foreground-1); + border-style: solid; } } :host([appearance="outline-fill"][kind="brand"]) { - button, - a { - @apply border-color-brand bg-foreground-1; - color: theme("colors.brand"); + .button { + --calcite-internal-button-border-color: var(--calcite-color-brand); + --calcite-internal-button-background-color: var(--calcite-color-foreground-1); + --calcite-internal-button-text-color: var(--calcite-color-brand); &:hover { - @apply border-color-brand-hover; - color: theme("colors.brand-hover"); - box-shadow: inset 0 0 0 1px var(--calcite-color-brand-hover); + --calcite-internal-button-border-color: var(--calcite-color-brand-hover); + --calcite-internal-button-text-color: var(--calcite-color-brand-hover); } &:focus { - @apply border-color-brand; - color: theme("colors.brand"); - box-shadow: inset 0 0 0 2px var(--calcite-color-brand); + --calcite-internal-button-border-color: var(--calcite-color-brand); + --calcite-internal-button-text-color: var(--calcite-color-brand); } &:active { - @apply border-color-brand-press; - color: theme("colors.brand-press"); - box-shadow: inset 0 0 0 2px var(--calcite-color-brand-press); + --calcite-internal-button-border-color: var(--calcite-color-brand-press); + --calcite-internal-button-text-color: var(--calcite-color-brand-press); } calcite-loader { - color: theme("colors.brand"); + --calcite-internal-button-loader-color: var(--calcite-color-brand); } } } :host([appearance="outline-fill"][kind="danger"]) { - button, - a { - @apply border-color-danger bg-foreground-1; - color: theme("colors.danger"); + .button { + --calcite-internal-button-border-color: var(--calcite-color-status-danger); + --calcite-internal-button-background-color: var(--calcite-color-foreground-1); + --calcite-internal-button-text-color: var(--calcite-color-status-danger); &:hover { - @apply border-color-danger-hover; - color: theme("colors.danger-hover"); - box-shadow: inset 0 0 0 1px var(--calcite-color-status-danger-hover); + --calcite-internal-button-border-color: var(--calcite-color-status-danger-hover); + --calcite-internal-button-text-color: var(--calcite-color-status-danger-hover); } &:focus { - @apply border-color-danger; - color: theme("colors.danger"); - box-shadow: inset 0 0 0 2px var(--calcite-color-status-danger); + --calcite-internal-button-border-color: var(--calcite-color-status-danger); + --calcite-internal-button-text-color: var(--calcite-color-status-danger); } &:active { - @apply border-color-danger-press; - color: theme("colors.danger-press"); - box-shadow: inset 0 0 0 2px var(--calcite-color-status-danger-press); + --calcite-internal-button-border-color: var(--calcite-color-status-danger-press); + --calcite-internal-button-text-color: var(--calcite-color-status-danger-press); } calcite-loader { - color: theme("colors.danger"); + --calcite-internal-button-loader-color: var(--calcite-color-status-danger); } } } :host([appearance="outline-fill"][kind="neutral"]) { - button, - a { - @apply text-color-1 bg-foreground-1; - border-color: theme("borderColor.color.1"); + .button { + --calcite-internal-button-border-color: var(--calcite-color-border-1); + --calcite-internal-button-background-color: var(--calcite-color-foreground-1); + --calcite-internal-button-text-color: var(--calcite-color-text-1); &:hover { - box-shadow: inset 0 0 0 1px var(--calcite-color-foreground-3); - } - &:focus { - box-shadow: inset 0 0 0 2px var(--calcite-color-foreground-3); + --calcite-internal-button-border-color: var(--calcite-color-border-3); } + &:focus, &:active { - box-shadow: inset 0 0 0 2px var(--calcite-color-foreground-3); + --calcite-internal-button-border-color: var(--calcite-color-border-3); } calcite-loader { - @apply text-color-1; + --calcite-internal-button-loader-color: var(--calcite-color-text-1); } } } :host([appearance="outline-fill"][kind="inverse"]) { - button, - a { - @apply text-color-1 bg-foreground-1; - border-color: var(--calcite-color-inverse); + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-1); + --calcite-internal-button-background-color: var(--calcite-color-foreground-1); + --calcite-internal-button-border-color: var(--calcite-color-inverse); &:hover { - border-color: var(--calcite-color-inverse-hover); - box-shadow: inset 0 0 0 1px var(--calcite-color-inverse-hover); + --calcite-internal-button-border-color: var(--calcite-color-inverse-hover); } &:focus { - border-color: var(--calcite-color-inverse); - box-shadow: inset 0 0 0 2px var(--calcite-color-inverse); + --calcite-internal-button-border-color: var(--calcite-color-inverse); } &:active { - border-color: var(--calcite-color-inverse-press); - box-shadow: inset 0 0 0 2px var(--calcite-color-inverse-press); + --calcite-internal-button-border-color: var(--calcite-color-inverse-press); } calcite-loader { - @apply text-color-1; + --calcite-internal-button-loader-color: var(--calcite-color-text-1); } } } + :host([appearance="outline"]) { - button, - a { - @apply border border-solid bg-transparent; - box-shadow: inset 0 0 0 1px transparent; + .button { + --calcite-internal-button-background-color: var(--calcite-color-transparent); + + &:hover, + &:focus, + &:active { + --calcite-internal-button-background-color: var(--calcite-color-transparent); + } } } + :host([appearance="outline"][kind="brand"]) { - button, - a { - @apply border-color-brand bg-transparent; - color: theme("colors.brand"); + .button { + --calcite-internal-button-text-color: var(--calcite-color-brand); + --calcite-internal-button-border-color: var(--calcite-color-brand); + &:hover { - @apply border-color-brand-hover; - color: theme("colors.brand-hover"); - box-shadow: inset 0 0 0 1px var(--calcite-color-brand-hover); + --calcite-internal-button-border-color: var(--calcite-color-brand-hover); + --calcite-internal-button-text-color: var(--calcite-color-brand-hover); } &:focus { - @apply border-color-brand; - color: theme("colors.brand"); - box-shadow: inset 0 0 0 2px var(--calcite-color-brand); + --calcite-internal-button-border-color: var(--calcite-color-brand); + --calcite-internal-button-text-color: var(--calcite-color-brand); } &:active { - @apply border-color-brand-press; - color: theme("colors.brand-press"); - box-shadow: inset 0 0 0 2px var(--calcite-color-brand-press); + --calcite-internal-button-border-color: var(--calcite-color-brand-press); + --calcite-internal-button-text-color: var(--calcite-color-brand-press); } calcite-loader { - color: theme("colors.brand"); + --calcite-internal-button-loader-color: var(--calcite-color-brand); } } } :host([appearance="outline"][kind="danger"]) { - button, - a { - @apply border-color-danger bg-transparent; - color: theme("colors.danger"); + .button { + --calcite-internal-button-text-color: var(--calcite-color-status-danger); + --calcite-internal-button-border-color: var(--calcite-color-status-danger); + &:hover { - @apply border-color-danger-hover; - color: theme("colors.danger-hover"); - box-shadow: inset 0 0 0 1px var(--calcite-color-status-danger-hover); + --calcite-internal-button-border-color: var(--calcite-color-status-danger-hover); + --calcite-internal-button-text-color: var(--calcite-color-status-danger-hover); } &:focus { - @apply border-color-danger; - color: theme("colors.danger"); - box-shadow: inset 0 0 0 2px var(--calcite-color-status-danger); + --calcite-internal-button-border-color: var(--calcite-color-status-danger); + --calcite-internal-button-text-color: var(--calcite-color-status-danger); } &:active { - @apply border-color-danger-press; - color: theme("colors.danger-press"); - box-shadow: inset 0 0 0 2px var(--calcite-color-status-danger-press); + --calcite-internal-button-border-color: var(--calcite-color-status-danger-press); + --calcite-internal-button-text-color: var(--calcite-color-status-danger-press); } calcite-loader { - color: theme("colors.danger"); + --calcite-internal-button-loader-color: var(--calcite-color-status-danger); } } } :host([appearance="outline"][kind="neutral"]) { - button, - a { - @apply text-color-1 bg-transparent; - border-color: theme("borderColor.color.1"); + .button { + --calcite-internal-button-border-color: var(--calcite-color-border-1); + --calcite-internal-button-text-color: var(--calcite-color-text-1); + &:hover { - box-shadow: inset 0 0 0 1px var(--calcite-color-foreground-3); - } - &:focus { - box-shadow: inset 0 0 0 2px var(--calcite-color-foreground-3); + --calcite-internal-button-background-color: var(--calcite-color-foreground-3); } + &:focus, &:active { - box-shadow: inset 0 0 0 2px var(--calcite-color-foreground-3); + --calcite-internal-button-border-color: var(--calcite-color-foreground-3); } calcite-loader { - @apply text-color-1; + --calcite-internal-button-loader-color: var(--calcite-color-text-1); } } } :host([appearance="outline"][kind="inverse"]) { - button, - a { - @apply text-color-1 bg-transparent; - border-color: var(--calcite-color-inverse); + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-1); + --calcite-internal-button-border-color: var(--calcite-color-inverse); + &:hover { - border-color: var(--calcite-color-inverse-hover); - box-shadow: inset 0 0 0 1px var(--calcite-color-inverse-hover); + --calcite-internal-button-border-color: var(--calcite-color-inverse-hover); } &:focus { - border-color: var(--calcite-color-inverse); - box-shadow: inset 0 0 0 2px var(--calcite-color-inverse); + --calcite-internal-button-border-color: var(--calcite-color-inverse); } &:active { - border-color: var(--calcite-color-inverse-press); - box-shadow: inset 0 0 0 2px var(--calcite-color-inverse-press); + --calcite-internal-button-border-color: var(--calcite-color-inverse-press); } calcite-loader { - @apply text-color-1; + --calcite-internal-button-loader-color: var(--calcite-color-text-1); } } } -:host([appearance="outline-fill"][split-child="primary"]) button, -:host([appearance="outline"][split-child="primary"]) button { - border-inline-end-width: 0; - border-inline-start-width: theme("borderWidth.DEFAULT"); +:host([appearance="outline-fill"][split-child="primary"]), +:host([appearance="outline"][split-child="primary"]) { + .button { + border-inline-end-width: 0; + border-inline-start-width: theme("borderWidth.DEFAULT"); + } } -:host([appearance="outline-fill"][split-child="secondary"]) button, -:host([appearance="outline"][split-child="secondary"]) button { - border-inline-start-width: 0; - border-inline-end-width: theme("borderWidth.DEFAULT"); +:host([appearance="outline-fill"][split-child="secondary"]), +:host([appearance="outline"][split-child="secondary"]) { + .button { + border-inline-start-width: 0; + border-inline-end-width: theme("borderWidth.DEFAULT"); + } } // transparent :host([appearance="transparent"]:not(.enable-editing-button)) { - button, - a { - @apply bg-transparent; + .button { + --calcite-internal-button-background-color: var(--calcite-color-transparent); &:hover, &:focus { - background-color: var(--calcite-color-transparent-hover); + --calcite-internal-button-background-color: var(--calcite-color-transparent-hover); } &:active { - background-color: var(--calcite-color-transparent-press); + --calcite-internal-button-background-color-active: var(--calcite-color-transparent-press); } } } :host([appearance="transparent"][kind="brand"]) { - button, - a { - color: theme("colors.brand"); + .button { + --calcite-internal-button-text-color: var(--calcite-color-brand); &:hover { - color: theme("colors.brand-hover"); + --calcite-internal-button-text-color: var(--calcite-color-brand-hover); } &:focus { - color: theme("colors.brand"); + --calcite-internal-button-text-color: var(--calcite-color-brand); } &:active { - color: theme("colors.brand-press"); + --calcite-internal-button-text-color: var(--calcite-color-brand-press); } calcite-loader { - color: theme("colors.brand"); + --calcite-internal-button-loader-color: var(--calcite-color-brand); } } } :host([appearance="transparent"][kind="danger"]) { - button, - a { - color: theme("colors.danger"); + .button { + --calcite-internal-button-text-color: var(--calcite-color-status-danger); &:hover { - color: theme("colors.danger-hover"); + --calcite-internal-button-text-color: var(--calcite-color-status-danger-hover); } &:focus { - color: theme("colors.danger"); + --calcite-internal-button-text-color: var(--calcite-color-status-danger); } &:active { - color: theme("colors.danger-press"); + --calcite-internal-button-text-color: var(--calcite-color-status-danger-press); } calcite-loader { - color: theme("colors.danger"); + --calcite-internal-button-loader-color: var(--calcite-color-status-danger); } } } :host([appearance="transparent"][kind="neutral"]:not(.cancel-editing-button)) { - button, - a, + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-1); + } calcite-loader { - @apply text-color-1; + --calcite-internal-button-loader-color: var(--calcite-color-text-1); } } :host([appearance="transparent"][kind="neutral"].cancel-editing-button) { - button { - @apply text-color-3 - border-t-color-input - border-b-color-input - border-t - border-b; + .button { + border-block-color: var(--calcite-button-border-color, var(--calcite-color-border-input)); border-block-style: solid; + border-block-width: var(--calcite-border-width-sm); + --calcite-internal-button-text-color: var(--calcite-color-text-3); &:not(.content--slotted) { - --calcite-button-padding-y-internal: 0; + --calcite-internal-button-space-y: 0; } &:hover { - @apply text-color-1; + --calcite-internal-button-text-color: var(--calcite-color-text-1); } } } :host([appearance="transparent"][kind="neutral"].enable-editing-button) { - button { - @apply bg-transparent; + .button { + --calcite-internal-button-background-color: var(--calcite-color-transparent); + } +} + +:host([appearance="transparent"][kind="inverse"]) { + .button { + --calcite-internal-button-text-color: var(--calcite-color-text-inverse); + } + calcite-loader { + --calcite-internal-button-loader-color: var(--calcite-color-text-inverse); } } :host(.confirm-changes-button), :host(.cancel-editing-button), :host(.enable-editing-button) { - button { + .button { &:focus { outline-offset: -2px; // ensure focus outlines work in Safari } } } -:host([appearance="transparent"][kind="inverse"]) { - button, - a, - calcite-loader { - @apply text-color-inverse; - } -} - -// generate button scales (scenario: text exists) -:host([scale="s"]) button.content--slotted, -:host([scale="s"]) a.content--slotted { - @apply text-n2h; -} - -// accommodate for transparent buttons not having borders -:host([scale="s"][appearance="transparent"]) button.content--slotted, -:host([scale="s"][appearance="transparent"]) a.content--slotted { - --calcite-button-padding-x-internal: theme("padding.2"); -} - -:host([scale="s"]) button, -:host([scale="s"]) a { - --calcite-button-padding-y-internal: 3px; -} - -:host([scale="m"]) button.content--slotted, -:host([scale="m"]) a.content--slotted { - --calcite-button-padding-x-internal: 11px; - @apply text-n1h; -} - -:host([scale="m"]) button, -:host([scale="m"]) a { - --calcite-button-padding-y-internal: 7px; -} -// accommodate for transparent buttons not having borders -:host([scale="m"][appearance="transparent"]) button.content--slotted, -:host([scale="m"][appearance="transparent"]) a.content--slotted { - --calcite-button-padding-x-internal: theme("padding.3"); -} - -:host([scale="l"]) button.content--slotted, -:host([scale="l"]) a.content--slotted { - --calcite-button-padding-x-internal: 15px; - @apply text-0h; -} +@include base-component(); +@include disabled(); -:host([scale="l"]) { - .button-padding { - --calcite-button-padding-x-internal: theme("padding.4"); - --calcite-button-padding-y-internal: 11px; +@keyframes loader-in { + 0% { + inline-size: 0; + opacity: 0; + transform: scale(0.5); } - //shrink the padding if an icon is present to preserve the height - .button-padding--shrunk { - --calcite-button-padding-y-internal: 9px; + 100% { + inline-size: 1em; + opacity: 1; + transform: scale(1); } } - -// generate fab scales (scenario: 1 icon, ie., should be square) -:host([scale="s"]) button:not(.content--slotted), -:host([scale="s"]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: theme("padding[0.5]"); - --calcite-button-padding-y-internal: 3px; - @apply text-0h w-6; - min-block-size: theme("height.6"); -} - -:host([scale="m"]) button:not(.content--slotted), -:host([scale="m"]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: theme("padding[0.5]"); - --calcite-button-padding-y-internal: 7px; - @apply text-0h w-8; - min-block-size: theme("height.8"); -} -:host([scale="l"]) button:not(.content--slotted), -:host([scale="l"]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: theme("padding[0.5]"); - --calcite-button-padding-y-internal: 9px; - @apply text-0h w-11; - min-block-size: theme("height.11"); -} - -:host(:is([scale="s"], [scale="m"], [scale="l"])[width="full"]) { - a, - button { - &:not(.content--slotted) { - inline-size: var(--calcite-container-size-content-fluid); - } +@keyframes loader-out { + 0% { + inline-size: 1em; + opacity: 1; + transform: scale(1); } -} - -// accommodate for transparent buttons not having borders -:host([scale="l"][appearance="transparent"]) button:not(.content--slotted), -:host([scale="l"][appearance="transparent"]) a:not(.content--slotted) { - --calcite-button-padding-y-internal: theme("padding[2.5]"); -} - -// generate fab scales (scenario: 2 icons, ie., should not be square) -:host([scale="s"][icon-start][icon-end]) button:not(.content--slotted), -:host([scale="s"][icon-start][icon-end]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: 23px; - @apply text-0h h-6; -} -// accommodate for transparent buttons not having borders -:host([scale="s"][icon-start][icon-end][appearance="transparent"]) button:not(.content--slotted), -:host([scale="s"][icon-start][icon-end][appearance="transparent"]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: theme("padding.6"); -} -:host([scale="m"][icon-start][icon-end]) button:not(.content--slotted), -:host([scale="m"][icon-start][icon-end]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: theme("padding.8"); - @apply text-0h h-8; -} -// accommodate for transparent buttons not having borders -:host([scale="m"][icon-start][icon-end][appearance="transparent"]) button:not(.content--slotted), -:host([scale="m"][icon-start][icon-end][appearance="transparent"]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: 33px; -} -:host([scale="l"][icon-start][icon-end]) button:not(.content--slotted), -:host([scale="l"][icon-start][icon-end]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: 43px; - @apply text-0h h-11; - // add space between when only 2 icons - .icon--start + .icon--end { - margin-inline-start: theme("margin.4"); + 100% { + inline-size: 0; + opacity: 0; + transform: scale(0.5); } } -// accommodate for transparent buttons not having borders -:host([scale="l"][icon-start][icon-end][appearance="transparent"]) button:not(.content--slotted), -:host([scale="l"][icon-start][icon-end][appearance="transparent"]) a:not(.content--slotted) { - --calcite-button-padding-x-internal: theme("padding.11"); -} - -@include base-component(); diff --git a/packages/calcite-components/src/components/button/button.tsx b/packages/calcite-components/src/components/button/button.tsx index 7c433f30177..be271f52e3f 100644 --- a/packages/calcite-components/src/components/button/button.tsx +++ b/packages/calcite-components/src/components/button/button.tsx @@ -288,6 +288,7 @@ export class Button aria-label={!this.loading ? getLabelText(this) : this.messages.loading} aria-live="polite" class={{ + [CSS.button]: true, [CSS.buttonPadding]: noStartEndIcons, [CSS.buttonPaddingShrunk]: !noStartEndIcons, [CSS.contentSlotted]: this.hasContent, diff --git a/packages/calcite-components/src/components/button/resources.ts b/packages/calcite-components/src/components/button/resources.ts index 6677324737a..140cc930e87 100644 --- a/packages/calcite-components/src/components/button/resources.ts +++ b/packages/calcite-components/src/components/button/resources.ts @@ -9,6 +9,7 @@ export const CSS = { loadingOut: "loading-out", iconStartEmpty: "icon-start-empty", iconEndEmpty: "icon-end-empty", + button: "button", buttonPadding: "button-padding", buttonPaddingShrunk: "button-padding--shrunk", }; diff --git a/packages/calcite-components/src/components/card-group/card-group.e2e.ts b/packages/calcite-components/src/components/card-group/card-group.e2e.ts index 75d21dd2bdc..ba4806b115f 100644 --- a/packages/calcite-components/src/components/card-group/card-group.e2e.ts +++ b/packages/calcite-components/src/components/card-group/card-group.e2e.ts @@ -1,8 +1,9 @@ import { newE2EPage } from "@stencil/core/testing"; import { html } from "../../../support/formatting"; -import { accessible, renders, hidden, disabled } from "../../tests/commonTests"; -import { CSS } from "../card/resources"; +import { accessible, renders, hidden, disabled, themed } from "../../tests/commonTests"; +import { CSS as CARD_CSS } from "../card/resources"; import { createSelectedItemsAsserter } from "../../tests/utils"; +import { CSS } from "./resources"; describe("calcite-card-group", () => { describe("renders", () => { @@ -70,8 +71,8 @@ describe("calcite-card-group", () => { const element = await page.find("calcite-card-group"); const card1 = await page.find("#card-1"); const card2 = await page.find("#card-2"); - const card1CheckAction = await page.find(`#card-1 >>> .${CSS.checkboxWrapper}`); - const card2CheckAction = await page.find(`#card-2 >>> .${CSS.checkboxWrapper}`); + const card1CheckAction = await page.find(`#card-1 >>> .${CARD_CSS.checkboxWrapper}`); + const card2CheckAction = await page.find(`#card-2 >>> .${CARD_CSS.checkboxWrapper}`); const cardGroupSelectSpy = await element.spyOnEvent("calciteCardGroupSelect"); const selectedItemAsserter = await createSelectedItemsAsserter( @@ -88,7 +89,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card2.id]); - card1CheckAction.click(); + await card1CheckAction.click(); await page.waitForChanges(); expect(await cardGroupSelectSpy).toHaveReceivedEventTimes(1); expect(await cardSelectSpy1).toHaveReceivedEventTimes(1); @@ -98,7 +99,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card1.id]); - card2CheckAction.click(); + await card2CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(2); expect(cardSelectSpy1).toHaveReceivedEventTimes(1); @@ -108,7 +109,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card2.id]); - card2CheckAction.click(); + await card2CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(3); expect(cardSelectSpy1).toHaveReceivedEventTimes(1); @@ -132,8 +133,8 @@ describe("calcite-card-group", () => { const element = await page.find("calcite-card-group"); const card1 = await page.find("#card-1"); const card2 = await page.find("#card-2"); - const card1CheckAction = await page.find(`#card-1 >>> .${CSS.checkboxWrapper}`); - const card2CheckAction = await page.find(`#card-2 >>> .${CSS.checkboxWrapper}`); + const card1CheckAction = await page.find(`#card-1 >>> .${CARD_CSS.checkboxWrapper}`); + const card2CheckAction = await page.find(`#card-2 >>> .${CARD_CSS.checkboxWrapper}`); const cardGroupSelectSpy = await element.spyOnEvent("calciteCardGroupSelect"); const selectedItemAsserter = await createSelectedItemsAsserter( @@ -146,7 +147,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card1.id]); - card1CheckAction.click(); + await card1CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(1); expect(await card1.getProperty("selected")).toBe(true); @@ -154,7 +155,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card1.id]); - card2CheckAction.click(); + await card2CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(2); expect(await card1.getProperty("selected")).toBe(false); @@ -162,7 +163,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card2.id]); - card2CheckAction.click(); + await card2CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(3); expect(await card1.getProperty("selected")).toBe(false); @@ -186,9 +187,9 @@ describe("calcite-card-group", () => { const card1 = await page.find("#card-1"); const card2 = await page.find("#card-2"); const card3 = await page.find("#card-3"); - const card1CheckAction = await page.find(`#card-1 >>> .${CSS.checkboxWrapper}`); - const card2CheckAction = await page.find(`#card-2 >>> .${CSS.checkboxWrapper}`); - const card3CheckAction = await page.find(`#card-3 >>> .${CSS.checkboxWrapper}`); + const card1CheckAction = await page.find(`#card-1 >>> .${CARD_CSS.checkboxWrapper}`); + const card2CheckAction = await page.find(`#card-2 >>> .${CARD_CSS.checkboxWrapper}`); + const card3CheckAction = await page.find(`#card-3 >>> .${CARD_CSS.checkboxWrapper}`); const cardGroupSelectSpy = await element.spyOnEvent("calciteCardGroupSelect"); const selectedItemAsserter = await createSelectedItemsAsserter( @@ -201,7 +202,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toEqual([]); await selectedItemAsserter([]); - card1CheckAction.click(); + await card1CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(1); expect(await card1.getProperty("selected")).toBe(true); @@ -210,7 +211,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card1.id]); - card2CheckAction.click(); + await card2CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(2); expect(await card1.getProperty("selected")).toBe(true); @@ -219,7 +220,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(2); await selectedItemAsserter([card1.id, card2.id]); - card3CheckAction.click(); + await card3CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(3); expect(await card1.getProperty("selected")).toBe(true); @@ -228,7 +229,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(3); await selectedItemAsserter([card1.id, card2.id, card3.id]); - card1CheckAction.click(); + await card1CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(4); expect(await card1.getProperty("selected")).toBe(false); @@ -237,7 +238,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(2); await selectedItemAsserter([card2.id, card3.id]); - card2CheckAction.click(); + await card2CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(5); expect(await card1.getProperty("selected")).toBe(false); @@ -246,7 +247,7 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(1); await selectedItemAsserter([card3.id]); - card3CheckAction.click(); + await card3CheckAction.click(); await page.waitForChanges(); expect(cardGroupSelectSpy).toHaveReceivedEventTimes(6); expect(await card1.getProperty("selected")).toBe(false); @@ -441,4 +442,15 @@ describe("calcite-card-group", () => { expect(await element.getProperty("selectedItems")).toHaveLength(2); await selectedItemAsserter([card4.id, card5.id]); }); + + describe("theme", () => { + describe("default", () => { + themed("calcite-card-group", { + "--calcite-card-group-gap": { + shadowSelector: `.${CSS.container}`, + targetProp: "gap", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/card-group/card-group.scss b/packages/calcite-components/src/components/card-group/card-group.scss index 24393cc1305..1c1bdfc2c58 100644 --- a/packages/calcite-components/src/components/card-group/card-group.scss +++ b/packages/calcite-components/src/components/card-group/card-group.scss @@ -7,14 +7,13 @@ */ :host { - --calcite-card-group-gap: var(--calcite-size-md); display: block; } .container { display: flex; flex-wrap: wrap; - gap: var(--calcite-card-group-gap); + gap: var(--calcite-card-group-gap, var(--calcite-size-md)); } @include disabled(); diff --git a/packages/calcite-components/src/components/card-group/card-group.tsx b/packages/calcite-components/src/components/card-group/card-group.tsx index 30c4d2ce6c2..08fd04a48db 100644 --- a/packages/calcite-components/src/components/card-group/card-group.tsx +++ b/packages/calcite-components/src/components/card-group/card-group.tsx @@ -26,6 +26,7 @@ import { setComponentLoaded, setUpLoadableComponent, } from "../../utils/loadable"; +import { CSS } from "./resources"; /** * @slot - A slot for adding one or more `calcite-card`s. @@ -248,7 +249,7 @@ export class CardGroup implements InteractiveComponent, LoadableComponent {
{ const loaderContainer = await page.find("calcite-card >>> .calcite-card-loader-container"); expect(loaderContainer.getAttribute("aria-live")).toBe("polite"); }); + + describe("theme", () => { + describe("default", () => { + themed( + html` + Heading + Description + `, + { + "--calcite-card-background-color": { + shadowSelector: `.${CSS.contentWrapper}`, + targetProp: "backgroundColor", + }, + "--calcite-card-corner-radius": { + shadowSelector: `.${CSS.contentWrapper}`, + targetProp: "borderRadius", + }, + "--calcite-card-border-color": { + shadowSelector: `.${CSS.contentWrapper}`, + targetProp: "borderColor", + }, + "--calcite-card-shadow": { + shadowSelector: `.${CSS.contentWrapper}`, + targetProp: "boxShadow", + }, + }, + ); + }); + + describe("selectable", () => { + themed( + html` + Heading + Description + `, + { + "--calcite-card-selection-icon-color": { + shadowSelector: `calcite-icon`, + targetProp: "--calcite-icon-color", + }, + "--calcite-card-selection-background-color": { + shadowSelector: `.${CSS.checkboxWrapper}`, + targetProp: "backgroundColor", + }, + "--calcite-card-selection-background-color-active": { + shadowSelector: `.${CSS.checkboxWrapper}`, + targetProp: "backgroundColor", + state: { press: { attribute: "class", value: CSS.checkboxWrapper } }, + }, + "--calcite-card-selection-background-color-hover": { + shadowSelector: `.${CSS.checkboxWrapper}`, + targetProp: "backgroundColor", + state: "hover", + }, + }, + ); + }); + + describe("selected", () => { + themed( + html` + Heading + Description + `, + { + "--calcite-card-accent-color-selected": { + shadowSelector: `.${CSS.contentWrapper}`, + targetProp: "boxShadow", + }, + "--calcite-card-border-color": { + shadowSelector: `.${CSS.contentWrapper}`, + targetProp: "borderColor", + }, + "--calcite-card-selection-background-color-selected": { + shadowSelector: `.${CSS.checkboxWrapper}`, + targetProp: "backgroundColor", + }, + "--calcite-card-selection-icon-color-selected": { + shadowSelector: `calcite-icon`, + targetProp: "--calcite-icon-color", + }, + "--calcite-card-selection-icon-color-hover": { + shadowSelector: `calcite-icon`, + targetProp: "--calcite-icon-color", + state: "hover", + }, + }, + ); + }); + + describe("loading", () => { + themed( + html` + Heading + Description + `, + { + "--calcite-card-loader-color-start": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-start", + }, + "--calcite-card-loader-color-middle": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-middle", + }, + "--calcite-card-loader-color-end": { + shadowSelector: `calcite-loader`, + targetProp: "--calcite-loader-color-end", + }, + }, + ); + }); + }); }); diff --git a/packages/calcite-components/src/components/card/card.scss b/packages/calcite-components/src/components/card/card.scss index 8b6b3fdfb9a..19b1a446279 100644 --- a/packages/calcite-components/src/components/card/card.scss +++ b/packages/calcite-components/src/components/card/card.scss @@ -3,35 +3,25 @@ * * These properties can be overridden using the component's tag as selector. * + * @prop --calcite-card-accent-color-selected: Specifies the accent color of the component when `selected`. * @prop --calcite-card-background-color: Specifies the background color of the component. * @prop --calcite-card-border-color: Specifies the border color of the component. - * @prop --calcite-card-shadow: Specifies the shadow of the component. * @prop --calcite-card-corner-radius: Specifies the corner radius of the component. - * @prop --calcite-card-accent-color-selected: Specifies the accent color of the component when `selected`. - * @prop --calcite-card-selection-background-color: Specifies the background color of the component's selection element. - * @prop --calcite-card-selection-background-color-hover: Specifies the background color of the component's selection element when hovered. + * @prop --calcite-card-loader-color-end: Specifies the end color of the loader + * @prop --calcite-card-loader-color-middle: Specifies the middle color of the loader + * @prop --calcite-card-loader-color-start: Specifies the start color of the loader * @prop --calcite-card-selection-background-color-active: Specifies the background color of the component's selection element when active. + * @prop --calcite-card-selection-background-color-hover: Specifies the background color of the component's selection element when hovered. * @prop --calcite-card-selection-background-color-selected: Specifies the icon color of the component's selection element when `selected`. - * @prop --calcite-card-selection-icon-color: Specifies the icon color of the component's selection element. + * @prop --calcite-card-selection-background-color: Specifies the background color of the component's selection element. * @prop --calcite-card-selection-icon-color-hover: Specifies the icon color of the component's selection element when hovered. * @prop --calcite-card-selection-icon-color-selected: Specifies the icon color of the component's selection element when `selected`. - * + * @prop --calcite-card-selection-icon-color: Specifies the icon color of the component's selection element. + * @prop --calcite-card-shadow: Specifies the shadow of the component. */ :host { @apply block max-w-full; - --calcite-card-corner-radius: var(--calcite-corner-radius-sharp); - --calcite-card-background-color: var(--calcite-color-foreground-1); - --calcite-card-border-color: var(--calcite-color-border-3); - --calcite-card-shadow: var(--calcite-shadow-none); - --calcite-card-accent-color-selected: var(--calcite-color-brand); - --calcite-card-selection-background-color: transparent; - --calcite-card-selection-background-color-hover: var(--calcite-color-transparent-hover); - --calcite-card-selection-background-color-active: var(--calcite-color-transparent-press); - --calcite-card-selection-background-color-selected: transparent; - --calcite-card-selection-icon-color: var(--calcite-color-text-3); - --calcite-card-selection-icon-color-hover: var(--calcite-color-text-2); - --calcite-card-selection-icon-color-selected: var(--calcite-color-brand); } .content-wrapper { @@ -41,10 +31,10 @@ flex-col justify-between overflow-hidden; - border: var(--calcite-border-width-sm) solid var(--calcite-card-border-color); - border-radius: var(--calcite-card-corner-radius); - background-color: var(--calcite-card-background-color); - box-shadow: var(--calcite-card-shadow); + border: var(--calcite-border-width-sm) solid var(--calcite-card-border-color, var(--calcite-color-border-3)); + border-radius: var(--calcite-card-corner-radius, var(--calcite-corner-radius-sharp)); + background-color: var(--calcite-card-background-color, var(--calcite-color-foreground-1)); + box-shadow: var(--calcite-card-shadow, var(--calcite-shadow-none)); pointer-events: none; } @@ -94,14 +84,6 @@ } } -.footer { - @apply mt-auto flex-row content-between - justify-between - px-3 - pt-1 - pb-3; -} - .card-content { @apply h-auto text-n2-wrap; } @@ -111,7 +93,7 @@ } :host([selected]) .content-wrapper { - box-shadow: inset 0 -4px 0 0 var(--calcite-card-accent-color-selected); + box-shadow: inset 0 -4px 0 0 var(--calcite-card-accent-color-selected, var(--calcite-color-brand)); } :host([selectable]) .header { @@ -119,10 +101,10 @@ } @include slotted("title", "*") { - @apply text-color-1 - text-n1-wrap - m-0 - font-medium; + @apply text-n1-wrap; + margin: 0; + font-weight: var(--calcite-font-weight-medium); + color: var(--calcite-color-text-1); } @include slotted("subtitle", "*") { @@ -169,17 +151,17 @@ .checkbox-wrapper { @apply m-2 p-2 focus-base cursor-pointer pointer-events-auto; - background-color: var(--calcite-card-selection-background-color); + background-color: var(--calcite-card-selection-background-color,); display: flex; align-items: center; justify-items: center; - --calcite-ui-icon-color: var(--calcite-card-selection-icon-color); + --calcite-icon-color: var(--calcite-card-selection-icon-color, var(--calcite-color-text-3)); &:hover { - background-color: var(--calcite-card-selection-background-color-hover); - --calcite-ui-icon-color: var(--calcite-card-selection-icon-color-hover); + background-color: var(--calcite-card-selection-background-color-hover, var(--calcite-color-transparent-hover)); + --calcite-icon-color: var(--calcite-card-selection-icon-color-hover, var(--calcite-color-text-2)); } &:active { - background-color: var(--calcite-card-selection-background-color-active); + background-color: var(--calcite-card-selection-background-color-active, var(--calcite-color-transparent-press)); } & calcite-icon { pointer-events: none; @@ -187,24 +169,26 @@ } :host([selected]) .checkbox-wrapper { - --calcite-ui-icon-color: var(--calcite-card-selection-icon-color-selected); - background-color: var(--calcite-card-selection-background-color-selected); + --calcite-icon-color: var(--calcite-card-selection-icon-color-selected, var(--calcite-color-brand)); + + background-color: var(--calcite-card-selection-background-color-selected, transparent); + &:hover { - background-color: var(--calcite-card-selection-background-color-hover); + background-color: var(--calcite-card-selection-background-color-hover, var(--calcite-color-transparent-hover)); } &:active { - background-color: var(--calcite-card-selection-background-color-active); + background-color: var(--calcite-card-selection-background-color-active, var(--calcite-color-transparent-press)); } } :host(:not([selectable])) .content-wrapper:not(.non-interactive):focus .checkbox-wrapper { - background-color: var(--calcite-card-selection-background-color-hover); - --calcite-ui-icon-color: var(--calcite-card-selection-icon-color-hover); + background-color: var(--calcite-card-selection-background-color-hover, var(--calcite-color-transparent-hover)); + --calcite-ui-icon-color: var(--calcite-card-selection-icon-color-hover, var(--calcite-color-text-2)); } :host([selected]:not([selectable])) .content-wrapper:not(.non-interactive):focus .checkbox-wrapper { - background-color: var(--calcite-card-selection-background-color-active); - --calcite-ui-icon-color: var(--calcite-card-selection-icon-color-selected); + background-color: var(--calcite-card-selection-background-color-active, var(--calcite-color-transparent-press)); + --calcite-ui-icon-color: var(--calcite-card-selection-icon-color-selected, var(--calcite-color-brand)); } .thumbnail-wrapper { @@ -231,5 +215,11 @@ slot[name="footer-end"]::slotted(*) { @apply flex gap-1; } +calcite-loader { + --calcite-loader-color-start: var(--calcite-card-loader-color-start); + --calcite-loader-color-middle: var(--calcite-card-loader-color-middle); + --calcite-loader-color-end: var(--calcite-card-loader-color-end); +} + @include base-component(); @include disabled(); diff --git a/packages/calcite-components/src/components/card/card.stories.ts b/packages/calcite-components/src/components/card/card.stories.ts index c1dfaff212d..1e1eebc6d49 100644 --- a/packages/calcite-components/src/components/card/card.stories.ts +++ b/packages/calcite-components/src/components/card/card.stories.ts @@ -148,7 +148,7 @@ export const thumbnailRounded = (): string => html`
@@ -193,7 +193,7 @@ export const headerDoesNotOverlapWithCheckboxDeprecated_TestOnly = (): string => export const deprecatedSlotsSelectable_TestOnly = (): string => html` -

Pokem ipsum dolor sit amet Skitty Hoothoot

+ Pokem ipsum dolor sit amet Skitty Hoothoot Pika-pi Soul Badge Zoroark Starly Spoink Diglett Rotom. Water Kyogre Hitmontop Rampardos @@ -235,3 +235,25 @@ export const darkModeRTL_TestOnly = (): string => html` `; darkModeRTL_TestOnly.parameters = { themes: modesDarkDefault }; + +export const selected_TestOnly = (): string => + html` + ArcGIS Online: Gallery and Organization pages + A great example of a study description that might wrap to a line or two, but isn't overly verbose. + `; + +export const theming_TestOnly = (): string => html` + + ArcGIS Online: Gallery and Organization pages + A great example of a study description that might wrap to a line or two, but isn't overly verbose. + +`; diff --git a/packages/calcite-components/src/components/carousel/carousel.scss b/packages/calcite-components/src/components/carousel/carousel.scss index 0b5efba059f..757657e14c8 100644 --- a/packages/calcite-components/src/components/carousel/carousel.scss +++ b/packages/calcite-components/src/components/carousel/carousel.scss @@ -1,68 +1,62 @@ /** - * Local props - * These properties are intended for internal component use only. It is not recommended that these properties be overwritten. - * These should be made public and documented post-release of token work. - * - * --calcite-internal-carousel-item-background-color-active: Specifies the background color of the component's slide item while active. - * --calcite-internal-carousel-item-background-color-hover: Specifies the background color of the component's slide item while hovered. - * --calcite-internal-carousel-item-background-color-selected: Specifies the background color of the component's slide item when selected. - * --calcite-internal-carousel-item-background-color: Specifies the background color of the component's slide item. - * --calcite-internal-carousel-item-icon-color-hover: Specifies the icon color of the component's slide item while hovered. - * --calcite-internal-carousel-item-icon-color-selected: Specifies the icon color of the component's slide item when selected. - * --calcite-internal-carousel-item-icon-color: Specifies the icon color of the component's slide item. - * --calcite-internal-carousel-control-color-hover: Specifies the icon color of the component's slide slide arrow and autoplay button while hovered. - * --calcite-internal-carousel-control-color: Specifies the icon color of the component's slide arrow and autoplay button. - * --calcite-internal-carousel-autoplay-progress-background-color: Specifies the background color of the component's progress when `autoplay`. - * --calcite-internal-carousel-autoplay-progress-fill-color: Specifies the fill color of the component's progress when `autoplay`. - * -*/ + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-carousel-item-background-color-active: Specifies the background color of the component's slide item while active. + * @prop --calcite-carousel-item-background-color-hover: Specifies the background color of the component's slide item while hovered. + * @prop --calcite-carousel-item-background-color-selected: Specifies the background color of the component's slide item when selected. + * @prop --calcite-carousel-item-background-color: Specifies the background color of the component's slide item. + * @prop --calcite-carousel-item-icon-color-hover: Specifies the icon color of the component's slide item while hovered. + * @prop --calcite-carousel-item-icon-color-selected: Specifies the icon color of the component's slide item when selected. + * @prop --calcite-carousel-item-icon-color: Specifies the icon color of the component's slide item. + * @prop --calcite-carousel-control-color-hover: Specifies the icon color of the component's slide slide arrow and autoplay button while hovered. + * @prop --calcite-carousel-control-color: Specifies the icon color of the component's slide arrow and autoplay button. + * @prop --calcite-carousel-autoplay-progress-background-color: Specifies the background color of the component's progress when `autoplay`. + * @prop --calcite-carousel-autoplay-progress-fill-color: Specifies the fill color of the component's progress when `autoplay`. + * + */ :host { @apply flex w-full; - --calcite-internal-internal-carousel-item-space: 1.5rem; - --calcite-internal-internal-carousel-item-space-wide: 3.5rem; - --calcite-internal-internal-carousel-item-background-color: var( - --calcite-internal-carousel-item-background-color, + --calcite-internal-carousel-item-space: 1.5rem; + --calcite-internal-carousel-item-space-wide: 3.5rem; + --calcite-internal-carousel-item-background-color: var( + --calcite-carousel-item-background-color, var(--calcite-color-foreground-1) ); - --calcite-internal-internal-carousel-item-background-color-hover: var( - --calcite-internal-carousel-item-background-color-hover, + --calcite-internal-carousel-item-background-color-hover: var( + --calcite-carousel-item-background-color-hover, var(--calcite-color-foreground-2) ); - --calcite-internal-internal-carousel-item-background-color-active: var( - --calcite-internal-carousel-item-background-color-active, + --calcite-internal-carousel-item-background-color-active: var( + --calcite-carousel-item-background-color-active, var(--calcite-color-foreground-2) ); - --calcite-internal-internal-carousel-item-background-color-selected: var( - --calcite-internal-carousel-item-background-color-selected, + --calcite-internal-carousel-item-background-color-selected: var( + --calcite-carousel-item-background-color-selected, var(--calcite-color-foreground-1) ); - --calcite-internal-internal-carousel-item-icon-color-hover: var( - --calcite-internal-carousel-item-icon-color-hover, + --calcite-internal-carousel-item-icon-color-hover: var( + --calcite-carousel-item-icon-color-hover, var(--calcite-action-color-transparent-hover) ); - --calcite-internal-internal-carousel-item-icon-color: var( - --calcite-internal-carousel-item-icon-color, - var(--calcite-color-border-3) - ); - --calcite-internal-internal-carousel-item-icon-color-selected: var( - --calcite-internal-carousel-item-icon-color-selected, + --calcite-internal-carousel-item-icon-color: var(--calcite-carousel-item-icon-color, var(--calcite-color-border-3)); + --calcite-internal-carousel-item-icon-color-selected: var( + --calcite-carousel-item-icon-color-selected, var(--calcite-color-brand) ); - --calcite-internal-internal-carousel-control-color-hover: var( - --calcite-internal-carousel-control-color-hover, - var(--calcite-internal-carousel-item-icon-color-hover) + --calcite-internal-carousel-control-color-hover: var( + --calcite-carousel-control-color-hover, + var(--calcite-carousel-item-icon-color-hover) ); - --calcite-internal-internal-carousel-control-color: var( - --calcite-internal-carousel-item-icon-color, - var(--calcite-color-border-input) - ); - --calcite-internal-internal-carousel-autoplay-progress-background-color: var( - --calcite-internal-carousel-autoplay-progress-background-color, + --calcite-internal-carousel-control-color: var(--calcite-carousel-item-icon-color, var(--calcite-color-border-input)); + --calcite-internal-carousel-autoplay-progress-background-color: var( + --calcite-carousel-autoplay-progress-background-color, var(--calcite-color-border-3) ); - --calcite-internal-internal-carousel-autoplay-progress-fill-color: var( - --calcite-internal-carousel-autoplay-progress-fill-color, + --calcite-internal-carousel-autoplay-progress-fill-color: var( + --calcite-carousel-autoplay-progress-fill-color, var(--calcite-color-brand) ); } @@ -81,9 +75,27 @@ } } +.container--edged { + .page-next, + .page-previous { + @apply h-12 w-12; + position: absolute; + inset-block-start: 50%; + transform: translateY(-50%); + } + + .page-next { + inset-inline-end: 0; + } + + .page-previous { + inset-inline-start: 0; + } +} + .container--edged:not(.container--overlaid) { - padding-inline: var(--calcite-internal-internal-carousel-item-space-wide); - inline-size: calc(100% - var(--calcite-internal-internal-carousel-item-space-wide) * 2); + padding-inline: var(--calcite-internal-carousel-item-space-wide); + inline-size: calc(100% - var(--calcite-internal-carousel-item-space-wide) * 2); } .item-container { @@ -127,52 +139,25 @@ calcite-carousel-item:not([selected]) { } .container--overlaid .pagination { + inset-block-end: 0; + inset-block-start: unset; + inset-inline: 0; position: absolute; } .pagination-item.page-next, .pagination-item.page-previous { - color: var(--calcite-internal-internal-carousel-control-color); + color: var(--calcite-internal-carousel-control-color); &:hover { - color: var(--calcite-internal-internal-carousel-control-color-hover); - } -} - -.container--edged { - .page-next, - .page-previous { - @apply h-12 w-12; - position: absolute; - inset-block-start: 50%; - transform: translateY(-50%); - } - - .page-next { - inset-inline-end: 0; + color: var(--calcite-internal-carousel-control-color-hover); } - - .page-previous { - inset-inline-start: 0; - } -} - -.container--overlaid .pagination { - inset-block-start: unset; - inset-block-end: 0; - inset-inline: 0; } .pagination-item.autoplay-control { position: relative; - color: var(--calcite-internal-internal-carousel-control-color); - --calcite-color-brand: var(--calcite-internal-internal-carousel-autoplay-progress-fill-color); - --calcite-color-border-3: var(--calcite-internal-internal-carousel-autoplay-progress-background-color); -} - -.autoplay-control:focus .autoplay-progress { - inset-block-end: 4px; - inset-inline: 2px; - inline-size: calc(100% - 4px); + color: var(--calcite-internal-carousel-control-color); + --calcite-color-brand: var(--calcite-internal-carousel-autoplay-progress-fill-color); + --calcite-color-border-3: var(--calcite-internal-carousel-autoplay-progress-background-color); } .autoplay-progress { @@ -182,6 +167,12 @@ calcite-carousel-item:not([selected]) { inline-size: 100%; } +.autoplay-control:focus .autoplay-progress { + inset-block-end: 4px; + inset-inline: 2px; + inline-size: calc(100% - 4px); +} + .pagination-item { @apply focus-base transition-default @@ -196,41 +187,41 @@ calcite-carousel-item:not([selected]) { display: flex; align-content: center; justify-content: center; - --calcite-color-foreground-1: var(--calcite-internal-internal-carousel-item-background-color); - color: var(--calcite-internal-internal-carousel-item-icon-color); + --calcite-color-foreground-1: var(--calcite-internal-carousel-item-background-color); + color: var(--calcite-internal-carousel-item-icon-color); &:hover { - background-color: var(--calcite-internal-internal-carousel-item-background-color-hover); - color: var(--calcite-internal-internal-carousel-item-icon-color-hover); + background-color: var(--calcite-internal-carousel-item-background-color-hover); + color: var(--calcite-internal-carousel-item-icon-color-hover); } &:focus { - background-color: var(--calcite-internal-internal-carousel-item-background-color-active); + background-color: var(--calcite-internal-carousel-item-background-color-active); @apply focus-inset; } &:active { - background-color: var(--calcite-internal-internal-carousel-item-background-color-active); - color: var(--calcite-internal-internal-carousel-item-icon-color-hover); + background-color: var(--calcite-internal-carousel-item-background-color-active); + color: var(--calcite-internal-carousel-item-icon-color-hover); } & calcite-icon { color: inherit; pointer-events: none; } &.pagination-item--selected { - --calcite-color-foreground-1: var(--calcite-internal-internal-carousel-item-background-color-selected); - --calcite-color-foreground-3: var(--calcite-internal-internal-carousel-item-background-color-selected); - color: var(--calcite-internal-internal-carousel-item-icon-color-selected); + --calcite-color-foreground-1: var(--calcite-internal-carousel-item-background-color-selected); + --calcite-color-foreground-3: var(--calcite-internal-carousel-item-background-color-selected); + color: var(--calcite-internal-carousel-item-icon-color-selected); } } .container--overlaid .pagination-item { - background-color: var(--calcite-internal-internal-carousel-item-background-color); + background-color: var(--calcite-internal-carousel-item-background-color); &:hover { - background-color: var(--calcite-internal-internal-carousel-item-background-color-hover); + background-color: var(--calcite-internal-carousel-item-background-color-hover); } &:focus { - background-color: var(--calcite-internal-internal-carousel-item-background-color-active); + background-color: var(--calcite-internal-carousel-item-background-color-active); } &:active { - background-color: var(--calcite-internal-internal-carousel-item-background-color-active); + background-color: var(--calcite-internal-carousel-item-background-color-active); } } diff --git a/packages/calcite-components/src/components/carousel/carousel.stories.ts b/packages/calcite-components/src/components/carousel/carousel.stories.ts index 86ba3a2b7df..9159384a92b 100644 --- a/packages/calcite-components/src/components/carousel/carousel.stories.ts +++ b/packages/calcite-components/src/components/carousel/carousel.stories.ts @@ -234,12 +234,12 @@ export const themed_simple = (): string => line-height: 32px; } calcite-carousel { - --calcite-internal-carousel-item-icon-color-hover: green; - --calcite-internal-carousel-item-icon-color-selected: blue; - --calcite-internal-carousel-item-icon-color-active: orange; - --calcite-internal-carousel-item-icon-color: red; - --calcite-internal-carousel-autoplay-progress-background-color: purple; - --calcite-internal-carousel-autoplay-progress-fill-color: pink; + --calcite-carousel-item-icon-color-hover: green; + --calcite-carousel-item-icon-color-selected: blue; + --calcite-carousel-item-icon-color-active: orange; + --calcite-carousel-item-icon-color: red; + --calcite-carousel-autoplay-progress-background-color: purple; + --calcite-carousel-autoplay-progress-fill-color: pink; } @@ -295,16 +295,16 @@ export const themed_carouselFullImageWithOverlay = (): string => line-height: 32px; } calcite-carousel { - --calcite-internal-carousel-item-background-color-active: orange; - --calcite-internal-carousel-item-background-color-hover: yellow; - --calcite-internal-carousel-item-background-color-selected: red; - --calcite-internal-carousel-item-background-color: rgba(20, 180, 200, 0.8); - --calcite-internal-carousel-item-icon-color-hover: white; - --calcite-internal-carousel-item-icon-color-selected: pink; - --calcite-internal-carousel-item-icon-color-active: white; - --calcite-internal-carousel-item-icon-color: lightgreen; - --calcite-internal-carousel-autoplay-progress-background-color: purple; - --calcite-internal-carousel-autoplay-progress-fill-color: pink; + --calcite-carousel-item-background-color-active: orange; + --calcite-carousel-item-background-color-hover: yellow; + --calcite-carousel-item-background-color-selected: red; + --calcite-carousel-item-background-color: rgba(20, 180, 200, 0.8); + --calcite-carousel-item-icon-color-hover: white; + --calcite-carousel-item-icon-color-selected: pink; + --calcite-carousel-item-icon-color-active: white; + --calcite-carousel-item-icon-color: lightgreen; + --calcite-carousel-autoplay-progress-background-color: purple; + --calcite-carousel-autoplay-progress-fill-color: pink; } diff --git a/packages/calcite-components/src/components/checkbox/checkbox.e2e.ts b/packages/calcite-components/src/components/checkbox/checkbox.e2e.ts index b39369c49b6..ffa89b3e43e 100644 --- a/packages/calcite-components/src/components/checkbox/checkbox.e2e.ts +++ b/packages/calcite-components/src/components/checkbox/checkbox.e2e.ts @@ -7,10 +7,12 @@ import { HYDRATED_ATTR, labelable, hidden, + themed, } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { Scale } from "../interfaces"; import { Direction } from "../../utils/dom"; +import { CSS } from "./resources"; describe("calcite-checkbox", () => { describe("honors hidden attribute", () => { @@ -211,4 +213,60 @@ describe("calcite-checkbox", () => { }); }); }); + + describe("theme", () => { + describe("default", () => { + themed("calcite-checkbox", { + "--calcite-checkbox-background-color": { + shadowSelector: `.${CSS.check}`, + targetProp: "backgroundColor", + }, + "--calcite-checkbox-icon-color": { + shadowSelector: `.${CSS.check}`, + targetProp: "color", + }, + "--calcite-checkbox-border-color": { + shadowSelector: `.${CSS.check}`, + targetProp: "boxShadow", + }, + "--calcite-checkbox-border-color-hover": { + shadowSelector: `.${CSS.check}`, + targetProp: "boxShadow", + state: "hover", + }, + "--calcite-checkbox-size": [ + { + shadowSelector: `.${CSS.toggle}`, + targetProp: "inlineSize", + }, + { + shadowSelector: `.${CSS.toggle}`, + targetProp: "blockSize", + }, + ], + }); + }); + + describe("checked", () => { + themed(html``, { + "--calcite-checkbox-background-color-checked": { + shadowSelector: `.${CSS.check}`, + targetProp: "backgroundColor", + }, + "--calcite-checkbox-border-color-checked": { + shadowSelector: `.${CSS.check}`, + targetProp: "boxShadow", + }, + }); + }); + + describe("invalid", () => { + themed(html``, { + "--calcite-checkbox-border-color-invalid": { + shadowSelector: `.${CSS.check}`, + targetProp: "boxShadow", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/checkbox/checkbox.scss b/packages/calcite-components/src/components/checkbox/checkbox.scss index d323f53f5b3..2da464780c3 100644 --- a/packages/calcite-components/src/components/checkbox/checkbox.scss +++ b/packages/calcite-components/src/components/checkbox/checkbox.scss @@ -3,68 +3,36 @@ * * These properties can be overridden using the component's tag as selector. * - * @prop --calcite-checkbox-size: Specifies the component's height and width. + * @prop --calcite-checkbox-background-color-checked: defines the background color of the component when it's in a ::checked state + * @prop --calcite-checkbox-background-color: defines the background color of the component + * @prop --calcite-checkbox-border-color-checked: defines the border color of the component in a ::checked state + * @prop --calcite-checkbox-border-color-hover: defines the border color of the component in a :hover state. + * @prop --calcite-checkbox-border-color-invalid: defines the border color of the component in an invalid state. + * @prop --calcite-checkbox-border-color: defines the border color of the component + * @prop --calcite-checkbox-icon-color: defines the icon color of the checkbox. + * @prop --calcite-checkbox-size: defines the checkbox's size vertically and horizontally. */ -:host([scale="s"]) { - --calcite-checkbox-size: theme("spacing.3"); -} -:host([scale="m"]) { - --calcite-checkbox-size: theme("fontSize.n1"); -} -:host([scale="l"]) { - --calcite-checkbox-size: theme("spacing.4"); -} - :host { @apply relative inline-flex cursor-pointer select-none; -webkit-tap-highlight-color: transparent; - - .check-svg, - .toggle { - inline-size: var(--calcite-checkbox-size); - block-size: var(--calcite-checkbox-size); - } - - .check-svg { - @apply bg-foreground-1 - pointer-events-none - box-border - block - overflow-hidden - fill-current - stroke-current - stroke-1 - transition-default; - box-shadow: inset 0 0 0 1px var(--calcite-color-border-input); - color: theme("backgroundColor.background"); - } -} - -:host([status="invalid"]:not([checked])) { - .check-svg { - box-shadow: inset 0 0 0 1px var(--calcite-color-status-danger); - } - .toggle:focus { - @apply focus-outset-danger; - } } -:host([checked]), -:host([indeterminate]) { - .check-svg { - @apply bg-brand; - box-shadow: inset 0 0 0 1px var(--calcite-color-brand); - } -} -:host([hovered]) .toggle, -:host .toggle:hover { - .check-svg { - box-shadow: inset 0 0 0 2px var(--calcite-color-brand); - } +.check-svg { + @apply pointer-events-none + box-border + block + overflow-hidden + fill-current + stroke-current + stroke-1 + transition-default; + background-color: var(--calcite-checkbox-background-color, var(--calcite-color-foreground-1)); + box-shadow: inset 0 0 0 1px var(--calcite-checkbox-border-color, var(--calcite-color-border-input)); + color: var(--calcite-checkbox-icon-color, var(--calcite-color-background)); } .toggle { @@ -100,6 +68,49 @@ } } +:host([scale="s"]) { + .check-svg, + .toggle { + inline-size: var(--calcite-checkbox-size, theme("spacing.3")); + block-size: var(--calcite-checkbox-size, theme("spacing.3")); + } +} +:host([scale="m"]) { + .check-svg, + .toggle { + inline-size: var(--calcite-checkbox-size, theme("fontSize.n1")); + block-size: var(--calcite-checkbox-size, theme("fontSize.n1")); + } +} +:host([scale="l"]) { + .check-svg, + .toggle { + inline-size: var(--calcite-checkbox-size, theme("spacing.4")); + block-size: var(--calcite-checkbox-size, theme("spacing.4")); + } +} + +:host([status="invalid"]:not([checked])) { + .check-svg { + box-shadow: inset 0 0 0 1px var(--calcite-checkbox-border-color-invalid, var(--calcite-color-status-danger)); + } + + .toggle:focus { + @apply focus-outset-danger; + } +} +:host([checked]), +:host([indeterminate]) { + .check-svg { + background-color: var(--calcite-checkbox-background-color-checked, var(--calcite-color-brand)); + box-shadow: inset 0 0 0 1px var(--calcite-checkbox-border-color-checked, var(--calcite-color-brand)); + } +} +:host([hovered]) .toggle, +:host .toggle:hover { + box-shadow: inset 0 0 0 2px var(--calcite-checkbox-border-color-hover, var(--calcite-color-brand)); +} + @include disabled(); @include hidden-form-input(); @include base-component(); diff --git a/packages/calcite-components/src/components/chip-group/chip-group.scss b/packages/calcite-components/src/components/chip-group/chip-group.scss index 978bb621adb..396966b4a63 100644 --- a/packages/calcite-components/src/components/chip-group/chip-group.scss +++ b/packages/calcite-components/src/components/chip-group/chip-group.scss @@ -6,7 +6,7 @@ display: flex; inline-size: 100%; flex-wrap: wrap; - gap: theme("spacing.2"); + gap: var(--calcite-spacing-sm); } ::slotted(calcite-chip) { @@ -14,11 +14,11 @@ } :host([scale="s"]) .container { - gap: theme("spacing.1"); + gap: var(--calcite-spacing-xs); } :host([scale="l"]) .container { - gap: theme("spacing.3"); + gap: var(--calcite-spacing-md); } @include disabled(); diff --git a/packages/calcite-components/src/components/chip/chip.e2e.ts b/packages/calcite-components/src/components/chip/chip.e2e.ts index b769e2c2382..67f84e40bc4 100644 --- a/packages/calcite-components/src/components/chip/chip.e2e.ts +++ b/packages/calcite-components/src/components/chip/chip.e2e.ts @@ -1,5 +1,7 @@ import { newE2EPage } from "@stencil/core/testing"; -import { accessible, disabled, focusable, hidden, renders, slots, t9n } from "../../tests/commonTests"; +import { accessible, disabled, focusable, hidden, renders, slots, t9n, themed } from "../../tests/commonTests"; +import { html } from "../../../support/formatting"; +import { newProgrammaticE2EPage } from "../../tests/utils"; import { CSS, SLOTS } from "./resources"; describe("calcite-chip", () => { @@ -238,4 +240,98 @@ describe("calcite-chip", () => { describe("translation support", () => { t9n("calcite-chip"); }); + + describe("theme", () => { + describe("default", () => { + themed("calcite-chip", { + "--calcite-chip-background-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "backgroundColor", + }, + "--calcite-chip-border-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "borderColor", + }, + "--calcite-chip-shadow": { + shadowSelector: `.${CSS.container}`, + targetProp: "boxShadow", + }, + "--calcite-chip-corner-radius": { + shadowSelector: `.${CSS.container}`, + targetProp: "borderRadius", + }, + "--calcite-chip-text-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "color", + }, + }); + }); + + describe("closable", () => { + themed(html``, { + "--calcite-chip-close-icon-color": { + shadowSelector: `.${CSS.close} calcite-icon`, + targetProp: "--calcite-icon-color", + }, + "--calcite-chip-close-background-color": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + }, + "--calcite-chip-close-background-color-hover": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + state: "hover", + }, + "--calcite-chip-close-background-color-active": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + state: { press: { attribute: "class", value: CSS.close } }, + }, + "--calcite-chip-close-background-color-focus": { + shadowSelector: `.${CSS.close}`, + targetProp: "backgroundColor", + state: "focus", + }, + "--calcite-chip-close-border-color-focus": { + shadowSelector: `.${CSS.close}`, + targetProp: "outlineColor", + }, + }); + }); + + describe("with icon", () => { + themed(html``, { + "--calcite-chip-icon-color": { + shadowSelector: `.${CSS.chipIcon}`, + targetProp: "--calcite-icon-color", + }, + }); + }); + + describe("interactive", () => { + themed( + async () => { + const page = await newProgrammaticE2EPage(); + await page.evaluate(() => { + const chip = document.createElement("calcite-chip"); + chip.selectionMode = "single"; + chip.icon = "banana"; + chip.selected = true; + chip.interactive = true; + chip.parentChipGroup = { selectedItems: [] } as any; + document.body.append(chip); + }); + await page.waitForChanges(); + + return { page, tag: "calcite-chip" }; + }, + { + "--calcite-chip-select-icon-color": { + shadowSelector: `.${CSS.selectIcon} calcite-icon`, + targetProp: "--calcite-icon-color", + }, + }, + ); + }); + }); }); diff --git a/packages/calcite-components/src/components/chip/chip.scss b/packages/calcite-components/src/components/chip/chip.scss index efeb5164428..8c8e68549e3 100644 --- a/packages/calcite-components/src/components/chip/chip.scss +++ b/packages/calcite-components/src/components/chip/chip.scss @@ -1,73 +1,86 @@ -:host([scale="s"]) { - @apply text-n2 h-6; - --calcite-chip-spacing-s-internal: theme("spacing[1]"); - --calcite-chip-spacing-l-internal: theme("spacing[2]"); - .close, - .select-icon--active { - @apply h-4 w-4; - } +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-chip-background-color: Specifies the background color of the component. + * @prop --calcite-chip-border-color: Specifies the border color of the component. + * @prop --calcite-chip-shadow: Specifies the shadow of the component. + * @prop --calcite-chip-corner-radius: Specifies the corner radius of the component. + * @prop --calcite-chip-icon-color: Specifies the color of the component's icon property. + * @prop --calcite-chip-text-color: Specifies the color of the component's `"default"` slot. + * @prop --calcite-chip-close-icon-color: Specifies the icon color of the component's `closable` element. + * @prop --calcite-chip-close-background-color: Specifies the background color of the component's `closable` element. + * @prop --calcite-chip-close-background-color-hover: Specifies the hover background color of the component's `closable` element when hovered. + * @prop --calcite-chip-close-background-color-active: Specifies the active background color of the component's `closable` element when active. + * @prop --calcite-chip-close-background-color-focus: Specifies the focus background color of the component's `closable` element when focused. + * @prop --calcite-chip-close-border-color-focus Specifies the focus outline color of the component's `closable` element. + * @prop --calcite-chip-select-icon-color: Specifies the color of the component's select icon + * + */ + +/** + * Local props + * These properties are intended for internal component use only. It is not recommended that these properties be overwritten. + * + * --calcite-internal-chip-spacing-s + * --calcite-internal-chip-spacing-l + * --calcite-internal-chip-icon-size + * --calcite-internal-chip-image-size + * --calcite-internal-chip-container-size +*/ - .image-container { - @apply h-5 w-5; - } +:host { + @apply inline-flex; +} - .container.is-circle { - @apply w-6 h-6; - } +:host([scale="s"]) { + @apply text-n2; + --calcite-internal-chip-spacing-s: var(--calcite-spacing-xxs); + --calcite-internal-chip-spacing-l: var(--calcite-spacing-sm); + --calcite-internal-chip-icon-size: var(--calcite-size-lg); + --calcite-internal-chip-image-size: var(--calcite-size-xl); + --calcite-internal-chip-container-size: var(--calcite-size-xxl); } :host([scale="m"]) { - @apply text-n1 h-8; - --calcite-chip-spacing-s-internal: theme("spacing[1.5]"); - --calcite-chip-spacing-l-internal: theme("spacing[2]"); - - .close, - .image-container, - .select-icon--active { - @apply h-6 w-6; - } - - .container.is-circle { - @apply w-8 h-8; - } + @apply text-n1; + --calcite-internal-chip-spacing-s: var(--calcite-spacing-xs); + --calcite-internal-chip-spacing-l: var(--calcite-spacing-sm); + --calcite-internal-chip-icon-size: var(--calcite-size-xxl); + --calcite-internal-chip-image-size: var(--calcite-size-xxl); + --calcite-internal-chip-container-size: var(--calcite-size-xxxl); } :host([scale="l"]) { - @apply text-0 h-11; - --calcite-chip-spacing-s-internal: theme("spacing[2]"); - --calcite-chip-spacing-l-internal: theme("spacing[3]"); - .image-container, - .close, - .select-icon--active { - @apply h-8 w-8; - } - - .container.is-circle { - @apply w-11 h-11; - } -} - -:host { - @apply inline-flex - cursor-default - rounded-full; + @apply text-0; + --calcite-internal-chip-spacing-s: var(--calcite-spacing-sm); + --calcite-internal-chip-spacing-l: var(--calcite-spacing-md); + --calcite-internal-chip-icon-size: var(--calcite-size-xxxl); + --calcite-internal-chip-image-size: var(--calcite-size-xxxl); + --calcite-internal-chip-container-size: 44px; } .container { @apply inline-flex - h-full - max-w-full items-center - rounded-full focus-base justify-center - border - border-solid - border-color-1 + cursor-default box-border font-medium; + max-inline-size: var(--calcite-container-size-content-fluid); + border: var(--calcite-border-width-sm) solid var(--calcite-chip-border-color, var(--calcite-color-border-3)); + color: var(--calcite-chip-text-color, var(--calcite-color-text-1)); + border-radius: var(--calcite-chip-corner-radius, 9999px); + background-color: var(--calcite-chip-background-color, var(--calcite-color-foreground-2)); + box-shadow: var(--calcite-chip-shadow, var(--calcite-shadow-none)); + block-size: var(--calcite-internal-chip-container-size); + &.is-circle { + inline-size: var(--calcite-internal-chip-container-size); + } &:not(.is-circle) { - padding-inline: var(--calcite-chip-spacing-s-internal); + padding-inline: var(--calcite-internal-chip-spacing-s); } &.selectable { @apply cursor-pointer; @@ -77,8 +90,86 @@ } } +:host([appearance="outline-fill"]) .container { + background-color: var(--calcite-chip-background-color, var(--calcite-color-foreground-1)); +} + +:host([appearance="outline"]) .container { + background-color: var(--calcite-chip-background-color, transparent); +} + +:host([kind="neutral"]) .container { + color: var(--calcite-chip-text-color, var(--calcite-color-text-1)); + .close calcite-icon { + --calcite-icon-color: var(--calcite-chip-close-icon-color, var(--calcite-color-text-3)); + } + .chip-icon { + --calcite-icon-color: var(--calcite-chip-icon-color, var(--calcite-color-text-1)); + } +} + +:host([kind="neutral"][appearance="solid"]) .container { + border-color: var(--calcite-chip-border-color, transparent); +} + +:host([kind="neutral"][appearance="outline-fill"]) .container, +:host([kind="neutral"][appearance="outline"]) .container { + border-color: var(--calcite-chip-border-color, var(--calcite-color-border-1)); +} + +:host([kind="inverse"]) .container .chip-icon { + --calcite-icon-color: var(--calcite-chip-icon-color, var(--calcite-color-text-inverse)); +} + +:host([kind="inverse"][appearance="solid"]) .container { + background-color: var(--calcite-chip-background-color, var(--calcite-color-inverse)); + border-color: var(--calcite-chip-border-color, transparent); + color: var(--calcite-chip-text-color, var(--calcite-color-text-inverse)); + .close calcite-icon { + --calcite-icon-color: var(--calcite-chip-close-icon-color, var(--calcite-color-text-inverse)); + } +} + +:host([kind="inverse"][appearance="outline-fill"]) .container, +:host([kind="inverse"][appearance="outline"]) .container { + border-color: var(--calcite-chip-border-color, var(--calcite-color-inverse)); + color: var(--calcite-chip-text-color, var(--calcite-color-text-1)); + .chip-icon { + --calcite-icon-color: var(--calcite-chip-icon-color, var(--calcite-color-inverse)); + } +} + +:host([kind="brand"]) .container .chip-icon { + --calcite-icon-color: var(--calcite-chip-icon-color, var(--calcite-color-text-inverse)); +} + +:host([kind="brand"][appearance="solid"]) .container { + background-color: var(--calcite-chip-background-color, var(--calcite-color-brand)); + border-color: var(--calcite-chip-border-color, transparent); + color: var(--calcite-chip-text-color, var(--calcite-color-text-inverse)); + .close calcite-icon { + --calcite-icon-color: var(--calcite-chip-close-icon-color, var(--calcite-color-text-inverse)); + } +} + +:host([kind="brand"][appearance="outline-fill"]) .container, +:host([kind="brand"][appearance="outline"]) .container { + border-color: var(--calcite-chip-border-color, var(--calcite-color-brand)); + color: var(--calcite-chip-text-color, var(--calcite-color-text-1)); + .chip-icon { + --calcite-icon-color: var(--calcite-chip-icon-color, var(--calcite-color-inverse)); + } +} + +:host([kind="brand"][appearance="solid"]) .container, +:host([kind="inverse"][appearance="solid"]) .container { + .close:focus { + outline-color: var(--calcite-chip-close-border-color-focus, var(--calcite-color-text-inverse)); + } +} + :host([scale="s"]) .container.image--slotted { - padding-inline-start: calc(theme("spacing[0.5]") / 2); + padding-inline-start: calc(var(--calcite-internal-chip-spacing-s) / 2); } :host([scale="s"]) .container.is-circle { @@ -87,7 +178,7 @@ .container.text--slotted .title { @apply truncate; - padding-inline: var(--calcite-chip-spacing-s-internal); + padding-inline: var(--calcite-internal-chip-spacing-s); } .container:not(.text--slotted) .title { @@ -99,49 +190,49 @@ } .container.closable { - padding-inline-end: calc(var(--calcite-chip-spacing-l-internal) / 2); + padding-inline-end: calc(var(--calcite-internal-chip-spacing-l) / 2); } .container:not(.is-circle) { &.image--slotted { - padding-inline-start: calc(var(--calcite-chip-spacing-l-internal) / 2); + padding-inline-start: calc(var(--calcite-internal-chip-spacing-l) / 2); } &.image--slotted .image-container { - margin-inline-end: var(--calcite-chip-spacing-s-internal); + margin-inline-end: var(--calcite-internal-chip-spacing-s); } &.image--slotted .image-container ~ .chip-icon { - margin-inline-start: var(--calcite-chip-spacing-s-internal); + margin-inline-start: var(--calcite-internal-chip-spacing-s); } &.selectable:not(.text--slotted) .chip-icon { - margin-inline-end: var(--calcite-chip-spacing-s-internal); + margin-inline-end: var(--calcite-internal-chip-spacing-s); } &:not(.selectable):not(.text--slotted) .chip-icon { - margin-inline-start: var(--calcite-chip-spacing-s-internal); + margin-inline-start: var(--calcite-internal-chip-spacing-s); } &:not(.text--slotted) .chip-icon { - margin-inline-end: var(--calcite-chip-spacing-s-internal); + margin-inline-end: var(--calcite-internal-chip-spacing-s); } &:not(.text-slotted).image--slotted .image-container { - margin-inline-end: var(--calcite-chip-spacing-s-internal); + margin-inline-end: var(--calcite-internal-chip-spacing-s); } &:not(.closable):not(.text--slotted).image--slotted.selectable .image-container { margin-inline-end: 0; ~ .chip-icon { - margin-inline-start: calc(var(--calcite-chip-spacing-s-internal) * 2); + margin-inline-start: calc(var(--calcite-internal-chip-spacing-s) * 2); } } } .chip-icon { @apply relative my-0 inline-flex duration-150 ease-in-out; - margin-inline: var(--calcite-chip-spacing-s-internal); + margin-inline: var(--calcite-internal-chip-spacing-s); } .image-container { @@ -149,36 +240,39 @@ align-items: center; justify-content: center; pointer-events: none; + block-size: var(--calcite-internal-chip-image-size); + inline-size: var(--calcite-internal-chip-image-size); } .close { @apply focus-base transition-default - text-color-1 - m-0 cursor-pointer items-center - border-none - bg-transparent; + border-none; -webkit-appearance: none; display: flex; - border-radius: 50%; + border-radius: var(--calcite-chip-corner-radius, 9999px); align-content: center; justify-content: center; - --calcite-chip-transparent-hover: var(--calcite-color-transparent-hover); - --calcite-chip-transparent-press: var(--calcite-color-transparent-press); + margin: 0; + block-size: var(--calcite-internal-chip-icon-size); + inline-size: var(--calcite-internal-chip-icon-size); + background-color: var(--calcite-chip-close-background-color, var(--calcite-color-transparent)); &:hover { - background-color: var(--calcite-chip-transparent-hover); + background-color: var(--calcite-chip-close-background-color-hover, var(--calcite-color-transparent-hover)); } &:focus { - background-color: var(--calcite-chip-transparent-hover); + background-color: var(--calcite-chip-close-background-color-focus, var(--calcite-color-transparent-hover)); @apply focus-inset; + outline-color: var(--calcite-chip-close-border-color-focus, var(--calcite-color-brand)); } &:active { - background-color: var(--calcite-chip-transparent-press); + background-color: var(--calcite-chip-close-background-color-active, var(--calcite-color-transparent-press)); } - & calcite-icon { - color: inherit; + + calcite-icon { + --calcite-icon-color: color: var(--calcite-chip-close-icon-color, var(--calcite-color-text-3)); } } @@ -195,13 +289,21 @@ transition: opacity 0.15s ease-in-out, inline-size 0.15s ease-in-out; - &.select-icon--active { + + &--active { + block-size: var(--calcite-internal-chip-icon-size); + inline-size: var(--calcite-internal-chip-icon-size); visibility: visible; opacity: 0.5; } + + calcite-icon { + --calcite-icon-color: var(--calcite-chip-select-icon-color); + } } + .container:not(.is-circle).image--slotted .select-icon.select-icon--active { - margin-inline-end: var(--calcite-chip-spacing-s-internal); + margin-inline-end: var(--calcite-internal-chip-spacing-s); } :host([selected]) .select-icon { @@ -216,89 +318,6 @@ slot[name="image"]::slotted(*) { @apply rounded-half flex h-full w-full overflow-hidden; } -:host([kind="neutral"]) { - background-color: var(--calcite-color-foreground-2); - color: var(--calcite-color-text-1); - .container { - border-color: transparent; - } - .close { - color: var(--calcite-color-text-3); - } - .chip-icon { - color: var(--calcite-ui-icon-color, var(--calcite-color-text-3)); - } -} - -:host([kind="inverse"]) { - background-color: var(--calcite-color-inverse); - @apply text-color-inverse; - .container { - border-color: transparent; - } - .close { - @apply text-color-inverse; - } - .chip-icon { - color: var(--calcite-ui-icon-color, var(--calcite-color-text-inverse)); - } -} - -:host([kind="brand"]) { - background-color: var(--calcite-color-brand); - color: var(--calcite-color-text-inverse); - .container { - border-color: transparent; - } - .close { - @apply text-color-inverse; - } - .chip-icon { - color: var(--calcite-ui-icon-color, var(--calcite-color-text-inverse)); - } -} - -:host([appearance="outline-fill"]), -:host([appearance="outline"]) { - @apply text-color-1 bg-foreground-1; - .close { - @apply text-color-3; - } - .chip-icon { - color: var(--calcite-ui-icon-color, var(--calcite-color-text-3)); - } -} - -:host([appearance="outline-fill"]) { - @apply bg-foreground-1; -} - -:host([appearance="outline"]) { - @apply bg-transparent; -} - -:host([kind="neutral"][appearance="outline-fill"]) .container, -:host([kind="neutral"][appearance="outline"]) .container { - border-color: var(--calcite-color-border-1); -} - -:host([kind="inverse"][appearance="outline-fill"]) .container, -:host([kind="inverse"][appearance="outline"]) .container { - border-color: var(--calcite-color-border-inverse); -} - -:host([kind="brand"][appearance="outline-fill"]) .container, -:host([kind="brand"][appearance="outline"]) .container { - border-color: var(--calcite-color-brand); -} - -:host([kind="brand"][appearance="solid"]), -:host([kind="inverse"][appearance="solid"]) { - button { - outline-color: var(--calcite-color-text-inverse); - } -} - :host([closed]) { display: none; } diff --git a/packages/calcite-components/src/components/chip/chip.stories.ts b/packages/calcite-components/src/components/chip/chip.stories.ts index 8b3286fda87..64c0d5ebeda 100644 --- a/packages/calcite-components/src/components/chip/chip.stories.ts +++ b/packages/calcite-components/src/components/chip/chip.stories.ts @@ -119,7 +119,7 @@ export const withAvatarAndIconAndClosable = (): string => { `; }; export const overriddenIconColor = (): string => - html`Banana`; + html`Banana`; export const darkModeRTL_TestOnly = (): string => html`
@@ -128,3 +128,19 @@ export const darkModeRTL_TestOnly = (): string => html` `; darkModeRTL_TestOnly.parameters = { themes: modesDarkDefault }; + +export const theming_TestOnly = (): string => html` + + Example Chip + +`; diff --git a/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.e2e.ts b/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.e2e.ts index 2466e3e2538..e792053eab3 100644 --- a/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.e2e.ts +++ b/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.e2e.ts @@ -1,7 +1,8 @@ import { E2EElement, E2EPage, newE2EPage } from "@stencil/core/testing"; -import { accessible, defaults, focusable, hidden, reflects, renders } from "../../tests/commonTests"; +import { accessible, defaults, focusable, hidden, reflects, renders, themed } from "../../tests/commonTests"; import { selectText } from "../../tests/utils"; import { canConvertToHexa, isValidHex, normalizeHex } from "../color-picker/utils"; +import { html } from "../../../support/formatting"; import { CSS } from "./resources"; describe("calcite-color-picker-hex-input", () => { @@ -572,4 +573,88 @@ describe("calcite-color-picker-hex-input", () => { }); }); }); + + describe("theme", () => { + describe("default", () => { + themed("calcite-color-picker-hex-input", { + "--calcite-color-picker-hex-input-affix-background-color": [ + { + targetProp: "--calcite-input-prefix-background-color", + shadowSelector: `.${CSS.hexInput}`, + }, + { + targetProp: "--calcite-input-suffix-background-color", + shadowSelector: `.${CSS.hexInput}`, + }, + ], + "--calcite-color-picker-hex-input-affix-text-color": [ + { + targetProp: "--calcite-input-prefix-text-color", + shadowSelector: `.${CSS.hexInput}`, + }, + { + targetProp: "--calcite-input-suffix-text-color", + shadowSelector: `.${CSS.hexInput}`, + }, + ], + "--calcite-color-picker-hex-input-background-color": { + targetProp: "--calcite-input-background-color", + shadowSelector: `.${CSS.hexInput}`, + }, + "--calcite-color-picker-hex-input-border-color": { + targetProp: "--calcite-input-border-color", + shadowSelector: `.${CSS.hexInput}`, + }, + "--calcite-color-picker-hex-input-corner-radius": { + targetProp: "--calcite-input-corner-radius", + shadowSelector: `.${CSS.hexInput}`, + }, + "--calcite-color-picker-hex-input-text-color": { + targetProp: "--calcite-input-text-color", + shadowSelector: `.${CSS.hexInput}`, + }, + }); + }); + + describe("opacity enabled", () => { + themed(html``, { + "--calcite-color-picker-hex-input-background-color": { + targetProp: "--calcite-input-background-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + "--calcite-color-picker-hex-input-border-color": { + targetProp: "--calcite-input-border-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + "--calcite-color-picker-hex-input-corner-radius": { + targetProp: "--calcite-input-corner-radius", + shadowSelector: `.${CSS.opacityInput}`, + }, + "--calcite-color-picker-hex-input-affix-background-color": [ + { + targetProp: "--calcite-input-prefix-background-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + { + targetProp: "--calcite-input-suffix-background-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + ], + "--calcite-color-picker-hex-input-affix-text-color": [ + { + targetProp: "--calcite-input-prefix-text-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + { + targetProp: "--calcite-input-suffix-text-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + ], + "--calcite-color-picker-hex-input-text-color": { + targetProp: "--calcite-input-text-color", + shadowSelector: `.${CSS.opacityInput}`, + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.scss b/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.scss index 26d02a4ad1b..ee39f43a868 100644 --- a/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.scss +++ b/packages/calcite-components/src/components/color-picker-hex-input/color-picker-hex-input.scss @@ -1,3 +1,16 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-color-picker-hex-input-affix-background-color: defines the background color of the prefix and suffix of the sub-component. + * @prop --calcite-color-picker-hex-input-affix-text-color: defines the text color of the prefix and suffix of the sub-component. + * @prop --calcite-color-picker-hex-input-background-color: defines the background color of the input sub-component. + * @prop --calcite-color-picker-hex-input-border-color: defines the border color of the input sub-component. + * @prop --calcite-color-picker-hex-input-corner-radius: defines the corner radius of the input sub-component. + * @prop --calcite-color-picker-hex-input-text-color: defines the text color of the input sub-component. +*/ + :host { @apply block; } @@ -32,4 +45,16 @@ } } +calcite-input-text, +calcite-input-number { + --calcite-input-suffix-background-color: var(--calcite-color-picker-hex-input-affix-background-color); + --calcite-input-suffix-text-color: var(--calcite-color-picker-hex-input-affix-text-color); + --calcite-input-prefix-background-color: var(--calcite-color-picker-hex-input-affix-background-color); + --calcite-input-prefix-text-color: var(--calcite-color-picker-hex-input-affix-text-color); + --calcite-input-text-color: var(--calcite-color-picker-hex-input-text-color); + --calcite-input-background-color: var(--calcite-color-picker-hex-input-background-color); + --calcite-input-border-color: var(--calcite-color-picker-hex-input-border-color); + --calcite-input-corner-radius: var(--calcite-color-picker-hex-input-corner-radius); +} + @include base-component(); diff --git a/packages/calcite-components/src/components/color-picker-swatch/color-picker-swatch.scss b/packages/calcite-components/src/components/color-picker-swatch/color-picker-swatch.scss index 531bcc3d898..daa78b3d322 100644 --- a/packages/calcite-components/src/components/color-picker-swatch/color-picker-swatch.scss +++ b/packages/calcite-components/src/components/color-picker-swatch/color-picker-swatch.scss @@ -1,21 +1,20 @@ -$size-s: 20px; -$size-m: 24px; -$size-l: 28px; - :host { @apply relative inline-flex; + + block-size: var(--calcite-internal-color-picker-swatch-size); + inline-size: var(--calcite-internal-color-picker-swatch-size); } :host([scale="s"]) { - @apply h-5 w-5; + --calcite-internal-color-picker-swatch-size: var(--calcite-size-xl); } :host([scale="m"]) { - @apply h-6 w-6; + --calcite-internal-color-picker-swatch-size: var(--calcite-size-xxl); } :host([scale="l"]) { - @apply h-8 w-8; + --calcite-internal-color-picker-swatch-size: var(--calcite-size-xxxl); } .swatch { @@ -39,7 +38,7 @@ $size-l: 28px; } .checker { - fill: #cacaca; + fill: #{$calcite-color-neutral-blk-050}; } @include base-component(); diff --git a/packages/calcite-components/src/components/color-picker/color-picker.e2e.ts b/packages/calcite-components/src/components/color-picker/color-picker.e2e.ts index 2c6536ade0f..700aea3b76f 100644 --- a/packages/calcite-components/src/components/color-picker/color-picker.e2e.ts +++ b/packages/calcite-components/src/components/color-picker/color-picker.e2e.ts @@ -1,5 +1,15 @@ import { E2EElement, E2EPage, EventSpy, newE2EPage } from "@stencil/core/testing"; -import { accessible, defaults, hidden, reflects, renders, focusable, disabled, t9n } from "../../tests/commonTests"; +import { + accessible, + defaults, + hidden, + reflects, + renders, + focusable, + disabled, + t9n, + themed, +} from "../../tests/commonTests"; import { GlobalTestProps, selectText, @@ -2345,4 +2355,168 @@ describe("calcite-color-picker", () => { }); }); }); + + describe("theme", () => { + describe("default", () => { + themed(`calcite-color-picker`, { + "--calcite-color-picker-background-color": { + shadowSelector: `.${CSS.container}`, + targetProp: "backgroundColor", + }, + "--calcite-color-picker-button-background-color": [ + { + shadowSelector: `.${CSS.deleteColor}`, + targetProp: "--calcite-button-background-color", + }, + { + shadowSelector: `.${CSS.saveColor}`, + targetProp: "--calcite-button-background-color", + }, + ], + "--calcite-color-picker-button-background-color-active": [ + { + shadowSelector: `.${CSS.deleteColor}`, + targetProp: "--calcite-button-background-color", + state: { press: { attribute: "class", value: CSS.deleteColor } }, + }, + { + shadowSelector: `.${CSS.saveColor}`, + targetProp: "--calcite-button-background-color", + state: { press: { attribute: "class", value: CSS.saveColor } }, + }, + ], + "--calcite-color-picker-button-background-color-focus": [ + { + shadowSelector: `.${CSS.deleteColor}`, + targetProp: "--calcite-button-background-color", + state: { focus: { attribute: "class", value: CSS.deleteColor } }, + }, + { + shadowSelector: `.${CSS.saveColor}`, + targetProp: "--calcite-button-background-color", + state: { focus: { attribute: "class", value: CSS.saveColor } }, + }, + ], + "--calcite-color-picker-button-background-color-hover": [ + { + shadowSelector: `.${CSS.deleteColor}`, + targetProp: "--calcite-button-background-color", + state: "hover", + }, + { + shadowSelector: `.${CSS.saveColor}`, + targetProp: "--calcite-button-background-color", + state: "hover", + }, + ], + "--calcite-color-picker-input-background-color": [ + { + shadowSelector: `.${CSS.channel}`, + targetProp: "--calcite-input-background-color", + }, + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-background-color", + }, + ], + "--calcite-color-picker-input-border-color": [ + { + shadowSelector: `.${CSS.channel}`, + targetProp: "--calcite-input-border-color", + }, + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-border-color", + }, + ], + "--calcite-color-picker-input-corner-radius": [ + { + shadowSelector: `.${CSS.channel}`, + targetProp: "--calcite-input-corner-radius", + }, + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-corner-radius", + }, + ], + "--calcite-color-picker-input-affix-background-color": [ + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-affix-background-color", + }, + { + shadowSelector: `.${CSS.channel}`, + targetProp: "--calcite-input-suffix-background-color", + }, + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-affix-background-color", + }, + ], + "--calcite-color-picker-input-affix-text-color": [ + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-affix-text-color", + }, + { + shadowSelector: `.${CSS.channel}`, + targetProp: "--calcite-input-suffix-text-color", + }, + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-affix-text-color", + }, + ], + "--calcite-color-picker-input-text-color": [ + { + shadowSelector: `.${CSS.channel}`, + targetProp: "--calcite-input-text-color", + }, + { + shadowSelector: `.${CSS.hexInput}`, + targetProp: "--calcite-color-picker-hex-input-text-color", + }, + ], + "--calcite-color-picker-tab-nav-indicator-color": { + shadowSelector: `.${CSS.colorModes}`, + targetProp: "--calcite-tab-nav-indicator-color", + }, + "--calcite-color-picker-tab-title-text-color": { + shadowSelector: `.${CSS.colorMode}`, + targetProp: "--calcite-tab-title-text-color", + }, + "--calcite-color-picker-tabs-border-color": { + shadowSelector: `.${CSS.colorModeContainer}`, + targetProp: "--calcite-tabs-border-color", + }, + "--calcite-color-picker-text-color": [ + { + shadowSelector: `.${CSS.deleteColor}`, + targetProp: "--calcite-button-text-color", + }, + { + shadowSelector: `.${CSS.saveColor}`, + targetProp: "--calcite-button-text-color", + }, + { + shadowSelector: `.${CSS.header}`, + targetProp: "color", + }, + ], + }); + }); + + describe("opacity enabled", () => { + themed(html``, { + "--calcite-color-picker-input-affix-background-color": { + shadowSelector: `.${CSS.channel}[data-channel-index="3"]`, + targetProp: "--calcite-input-suffix-background-color", + }, + "--calcite-color-picker-input-affix-text-color": { + shadowSelector: `.${CSS.channel}[data-channel-index="3"]`, + targetProp: "--calcite-input-suffix-text-color", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/color-picker/color-picker.scss b/packages/calcite-components/src/components/color-picker/color-picker.scss index 0477adc4350..a130a9b87a7 100644 --- a/packages/calcite-components/src/components/color-picker/color-picker.scss +++ b/packages/calcite-components/src/components/color-picker/color-picker.scss @@ -1,3 +1,25 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-color-picker-background-color: Specifies the background color of the component. + * @prop --calcite-color-picker-button-background-color-active: defines the background color of the button when in a active state in the component. + * @prop --calcite-color-picker-button-background-color-focus: defines the background color of the button when in a focus state in the component. + * @prop --calcite-color-picker-button-background-color-hover: defines the background color of the button when in a hover state in the component. + * @prop --calcite-color-picker-button-corner-radius: defines the corner radius of the button in the component. + * @prop --calcite-color-picker-input-affix-background-color: defines the background color of the prefix and suffix of the sub-component. + * @prop --calcite-color-picker-input-affix-text-color: defines the text color of the prefix and suffix of the sub-component. + * @prop --calcite-color-picker-input-background-color: defines the background color of the input in the component. + * @prop --calcite-color-picker-input-border-color: defines the border color of the input in the component. + * @prop --calcite-color-picker-input-corner-radius: defines the corner radius of the input in the component. + * @prop --calcite-color-picker-input-text-color: defines the text color of the input in the component. + * @prop --calcite-color-picker-tab-nav-indicator-color: Specifies the color of the active tab indicator. + * @prop --calcite-color-picker-tab-title-text-color: Specifies the text color of the sub-component. + * @prop --calcite-color-picker-tabs-border-color: The border color of the sub-component. + * @prop --calcite-color-picker-text-color: Specifies the background color of the component. + */ + :host { @apply text-n2h inline-block font-normal; } @@ -5,7 +27,7 @@ @include disabled(); :host([scale="s"]) { - --calcite-color-picker-spacing: 8px; + --calcite-internal-color-picker-space: 8px; .container { inline-size: 160px; @@ -18,7 +40,7 @@ } :host([scale="m"]) { - --calcite-color-picker-spacing: 12px; + --calcite-internal-color-picker-space: 12px; .container { inline-size: 272px; @@ -26,7 +48,7 @@ } :host([scale="l"]) { - --calcite-color-picker-spacing: 16px; + --calcite-internal-color-picker-space: 16px; @apply text-n1h; @@ -36,7 +58,7 @@ .section { &:first-of-type { - padding-block-start: var(--calcite-color-picker-spacing); + padding-block-start: var(--calcite-internal-color-picker-space); } } @@ -65,9 +87,9 @@ } .container { - @apply bg-foreground-1; - display: inline-block; + background-color: var(--calcite-color-picker-background-color, var(--calcite-color-foreground-1)); border: 1px solid var(--calcite-color-border-1); + display: inline-block; } .control-and-scope { @@ -100,23 +122,23 @@ } .section { - padding-block: 0 var(--calcite-color-picker-spacing); - padding-inline: var(--calcite-color-picker-spacing); + padding-block: 0 var(--calcite-internal-color-picker-space); + padding-inline: var(--calcite-internal-color-picker-space); &:first-of-type { - padding-block-start: var(--calcite-color-picker-spacing); + padding-block-start: var(--calcite-internal-color-picker-space); } } .sliders { @apply flex flex-col justify-between; - margin-inline-start: var(--calcite-color-picker-spacing); + margin-inline-start: var(--calcite-internal-color-picker-space); gap: var(--calcite-spacing-xxs); } .preview-and-sliders { @apply flex items-center; - padding: var(--calcite-color-picker-spacing); + padding: var(--calcite-internal-color-picker-space); } .color-hex-options, @@ -125,14 +147,15 @@ } .header { - @apply text-color-1 - flex + @apply flex items-center justify-between; + + color: var(--calcite-color-picker-text-color, var(--calcite-color-text-1)); } .color-mode-container { - padding-block-start: var(--calcite-color-picker-spacing); + padding-block-start: var(--calcite-internal-color-picker-space); } .channels { @@ -171,7 +194,7 @@ .saved-colors { @apply grid gap-2; - padding-block-start: var(--calcite-color-picker-spacing); + padding-block-start: var(--calcite-internal-color-picker-space); grid-template-columns: repeat(auto-fill, 24px); } @@ -195,4 +218,53 @@ } } +calcite-button { + --calcite-button-corner-radius: var(--calcite-color-picker-button-corner-radius); + --calcite-button-text-color: var(--calcite-color-picker-text-color); + --calcite-button-background-color: var(--calcite-color-picker-button-background-color); + --calcite-button-icon-color: var(--calcite-color-picker-text-color); + + &:hover { + --calcite-button-background-color: var(--calcite-color-picker-button-background-color-hover); + } + &:focus { + --calcite-button-background-color: var(--calcite-color-picker-button-background-color-focus); + } + &:active { + --calcite-button-background-color: var(--calcite-color-picker-button-background-color-active); + } +} + +calcite-color-picker-hex-input { + --calcite-color-picker-hex-input-affix-background-color: var(--calcite-color-picker-input-affix-background-color); + --calcite-color-picker-hex-input-affix-text-color: var(--calcite-color-picker-input-affix-text-color); + --calcite-color-picker-hex-input-background-color: var(--calcite-color-picker-input-background-color); + --calcite-color-picker-hex-input-border-color: var(--calcite-color-picker-input-border-color); + --calcite-color-picker-hex-input-corner-radius: var(--calcite-color-picker-input-corner-radius); + --calcite-color-picker-hex-input-text-color: var(--calcite-color-picker-input-text-color); +} + +calcite-input-number { + --calcite-input-background-color: var(--calcite-color-picker-input-background-color); + --calcite-input-border-color: var(--calcite-color-picker-input-border-color); + --calcite-input-text-color: var(--calcite-color-picker-input-text-color); + --calcite-input-suffix-background-color: var(--calcite-color-picker-input-affix-background-color); + --calcite-input-suffix-text-color: var(--calcite-color-picker-input-affix-background-color); + --calcite-input-corner-radius: var(--calcite-color-picker-input-corner-radius); +} + +calcite-tabs { + --calcite-tabs-background-color: var(--calcite-color-picker-tabs-background-color); + --calcite-tabs-border-color: var(--calcite-color-picker-tabs-border-color); +} + +calcite-tab-nav { + --calcite-tab-nav-indicator-color: var(--calcite-color-picker-tab-nav-indicator-color); +} + +calcite-tab-title { + --calcite-tab-title-background-color: var(--calcite-color-picker-tab-title-background-color); + --calcite-tab-title-text-color: var(--calcite-color-picker-tab-title-text-color); +} + @include base-component(); diff --git a/packages/calcite-components/src/components/color-picker/color-picker.tsx b/packages/calcite-components/src/components/color-picker/color-picker.tsx index cc6f8d9b68d..f934eed5d3f 100644 --- a/packages/calcite-components/src/components/color-picker/color-picker.tsx +++ b/packages/calcite-components/src/components/color-picker/color-picker.tsx @@ -888,7 +888,10 @@ export class ColorPicker - + {this.renderChannelsTabTitle("rgb")} {this.renderChannelsTabTitle("hsv")} diff --git a/packages/calcite-components/src/components/color-picker/resources.ts b/packages/calcite-components/src/components/color-picker/resources.ts index a8e090c2b86..150285c3803 100644 --- a/packages/calcite-components/src/components/color-picker/resources.ts +++ b/packages/calcite-components/src/components/color-picker/resources.ts @@ -7,6 +7,7 @@ export const CSS = { colorFieldScope: "scope--color-field", colorMode: "color-mode", colorModeContainer: "color-mode-container", + colorModes: "color-modes", container: "container", control: "control", controlAndScope: "control-and-scope", @@ -14,6 +15,7 @@ export const CSS = { deleteColor: "delete-color", header: "header", hexAndChannelsGroup: "hex-and-channels-group", + hexInput: "hex-input", hexOptions: "color-hex-options", hueScope: "scope--hue", hueSlider: "hue-slider", diff --git a/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.e2e.ts b/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.e2e.ts new file mode 100644 index 00000000000..412fdca4ca7 --- /dev/null +++ b/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.e2e.ts @@ -0,0 +1,19 @@ +import { themed } from "../../tests/commonTests"; +import { CSS } from "./resources"; + +describe("calcite-combobox-item-group", () => { + describe("theme", () => { + describe("default", () => { + themed("calcite-combobox-item-group", { + "--calcite-combobox-item-group-border-color": { + shadowSelector: `.${CSS.title}`, + targetProp: "borderColor", + }, + "--calcite-combobox-item-group-text-color": { + shadowSelector: `.${CSS.title}`, + targetProp: "color", + }, + }); + }); + }); +}); diff --git a/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.scss b/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.scss index e6caa423287..181a4d71d0b 100644 --- a/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.scss +++ b/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.scss @@ -1,22 +1,36 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-combobox-item-group-border-color: defines the border color of a combobox item. + * @prop --calcite-combobox-item-group-text-color: defines the text color of a combobox item. + */ + +/* + * Internal + * + * --calcite-internal-combobox-item-group-space-large: defines the block spacing of the combobox-item. Set via the [scale] prop on a combobox-item. + * --calcite-internal-combobox-item-group-space-small: defines the inline spacing of the combobox-item. Set via the [scale] prop on a combobox-item. + * --calcite-internal-combobox-item-group-depth: defines the depth of the combobox-item in a combobox dropdown list. This is used as a multiplier to determine the inline-start padding of a combobox item. + */ + .scale--s { @apply text-n2h; - --calcite-combobox-item-spacing-unit-l: theme("spacing.2"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.1"); - --calcite-combobox-item-spacing-indent: theme("spacing.2"); + --calcite-internal-combobox-item-group-space-large: theme("spacing.2"); + --calcite-internal-combobox-item-group-space-small: theme("spacing.1"); } .scale--m { @apply text-n1h; - --calcite-combobox-item-spacing-unit-l: theme("spacing.3"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.2"); - --calcite-combobox-item-spacing-indent: theme("spacing.3"); + --calcite-internal-combobox-item-group-space-large: theme("spacing.3"); + --calcite-internal-combobox-item-group-space-small: theme("spacing.2"); } .scale--l { @apply text-0h; - --calcite-combobox-item-spacing-unit-l: theme("spacing.4"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.3"); - --calcite-combobox-item-spacing-indent: theme("spacing.4"); + --calcite-internal-combobox-item-group-space-large: theme("spacing.4"); + --calcite-internal-combobox-item-group-space-small: theme("spacing.3"); } :host, @@ -30,28 +44,28 @@ } .label { - @apply text-color-3 box-border flex w-full min-w-0 max-w-full; + @apply box-border flex w-full min-w-0 max-w-full; } .title { - --calcite-combobox-item-indent-value: calc( - var(--calcite-combobox-item-spacing-indent) * var(--calcite-combobox-item-spacing-indent-multiplier) + --calcite-internal-combobox-item-group-space-x: calc( + var(--calcite-internal-combobox-item-group-space-large) * var(--calcite-internal-combobox-item-group-depth) ); border: 0 solid; - @apply border-b-color-3 - text-color-2 - word-break + @apply word-break block flex-1 - border-b font-bold; - padding-block: var(--calcite-combobox-item-spacing-unit-l); - padding-inline: var(--calcite-combobox-item-spacing-unit-s); - margin-inline-start: var(--calcite-combobox-item-indent-value); + border-block-end-width: var(--calcite-border-width-sm); + border-block-end-color: var(--calcite-combobox-item-group-border-color, var(--calcite-color-border-3)); + color: var(--calcite-combobox-item-group-text-color, var(--calcite-color-text-2)); + padding-block: var(--calcite-internal-combobox-item-group-space-large); + padding-inline: var(--calcite-internal-combobox-item-group-space-small); + margin-inline-start: var(--calcite-internal-combobox-item-group-space-x); } ::slotted(calcite-combobox-item-group:not([after-empty-group])) { - padding-block-start: var(--calcite-combobox-item-spacing-unit-l); + padding-block-start: var(--calcite-internal-combobox-item-group-space-large); } @include base-component(); diff --git a/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.tsx b/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.tsx index a3d245d6e96..2ee0acc11a9 100644 --- a/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.tsx +++ b/packages/calcite-components/src/components/combobox-item-group/combobox-item-group.tsx @@ -80,7 +80,7 @@ export class ComboboxItemGroup { class={{ [CSS.label]: true }} id={this.guid} role="presentation" - style={{ "--calcite-combobox-item-spacing-indent-multiplier": `${depth}` }} + style={{ "--calcite-internal-combobox-item-group-depth": `${depth}` }} > {this.label} diff --git a/packages/calcite-components/src/components/combobox-item/combobox-item.e2e.ts b/packages/calcite-components/src/components/combobox-item/combobox-item.e2e.ts index 6402ca27746..756b9ff6d39 100644 --- a/packages/calcite-components/src/components/combobox-item/combobox-item.e2e.ts +++ b/packages/calcite-components/src/components/combobox-item/combobox-item.e2e.ts @@ -1,4 +1,5 @@ -import { disabled, hidden, renders, slots } from "../../tests/commonTests"; +import { disabled, hidden, renders, slots, themed } from "../../tests/commonTests"; +import { CSS } from "./resources"; describe("calcite-combobox-item", () => { describe("renders", () => { @@ -16,4 +17,57 @@ describe("calcite-combobox-item", () => { describe("disabled", () => { disabled("calcite-combobox-item", { focusTarget: "none" }); }); + + describe("theme", () => { + describe("default", () => { + themed("calcite-combobox-item", { + "--calcite-combobox-item-background-color": { + shadowSelector: `.${CSS.label}`, + targetProp: "backgroundColor", + }, + "--calcite-combobox-item-indicator-color": { + shadowSelector: `.${CSS.icon}`, + targetProp: "color", + }, + "--calcite-combobox-item-shadow": { + shadowSelector: `.${CSS.label}`, + targetProp: "boxShadow", + }, + "--calcite-combobox-item-text-color": { + shadowSelector: `.${CSS.label}`, + targetProp: "color", + }, + }); + }); + + describe("custom icon", () => { + themed("test", { + "--calcite-combobox-item-icon-color": { + shadowSelector: `.${CSS.custom}`, + targetProp: "color", + }, + }); + }); + + describe("selected", () => { + themed("test", { + "--calcite-combobox-item-background-color-active": { + shadowSelector: `.${CSS.label}`, + targetProp: "color", + }, + "--calcite-combobox-item-text-color-active": { + shadowSelector: `.${CSS.label}`, + targetProp: "color", + }, + "--calcite-combobox-item-icon-color-active": { + shadowSelector: `.${CSS.icon}`, + targetProp: "color", + }, + "--calcite-combobox-item-indicator-color-active": { + shadowSelector: `.${CSS.iconActive}`, + targetProp: "color", + }, + }); + }); + }); }); diff --git a/packages/calcite-components/src/components/combobox-item/combobox-item.scss b/packages/calcite-components/src/components/combobox-item/combobox-item.scss index 9c10946cbdd..47eebbafed5 100644 --- a/packages/calcite-components/src/components/combobox-item/combobox-item.scss +++ b/packages/calcite-components/src/components/combobox-item/combobox-item.scss @@ -1,37 +1,59 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-combobox-item-background-color-active: defines the background color when the component is active or hovered. + * @prop --calcite-combobox-item-background-color: defines the background color of the component + * @prop --calcite-combobox-item-icon-color-active: defines the color of a custom icon when the component is active. + * @prop --calcite-combobox-item-icon-color: defines the color of a custom icon in the component. + * @prop --calcite-combobox-item-indicator-color-active: defines the color of an indicator icon when the component is active. + * @prop --calcite-combobox-item-indicator-color: defines the indicator icon color. + * @prop --calcite-combobox-item-shadow: defines the shadow of the component. + * @prop --calcite-combobox-item-text-color-active: defines the text color when the component is selected, active, or hovered. + * @prop --calcite-combobox-item-text-color: defines the text color of the component. + */ + +/* + * Internal + --calcite-internal-combobox-item-space-large + --calcite-internal-combobox-item-space-small + --calcite-internal-combobox-item-depth + --calcite-internal-combobox-item-selector-icon-size + --calcite-internal-combobox-item-space-x: defines the calculated indented space of a grouped combobox-item. Calculated from `--calcite-internal-combobox-item-space-large` and `--calcite-internal-combobox-item-depth` + */ + @include base-component(); .scale--s { @apply text-n2h; - --calcite-combobox-item-spacing-unit-l: theme("spacing.2"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.1"); - --calcite-combobox-item-spacing-indent: theme("spacing.2"); - --calcite-combobox-item-selector-icon-size: theme("spacing.4"); + --calcite-internal-combobox-item-space-large: theme("spacing.2"); + --calcite-internal-combobox-item-space-small: theme("spacing.1"); + --calcite-internal-combobox-item-selector-icon-size: theme("spacing.4"); } .scale--m { @apply text-n1h; - --calcite-combobox-item-spacing-unit-l: theme("spacing.3"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.2"); - --calcite-combobox-item-spacing-indent: theme("spacing.3"); - --calcite-combobox-item-selector-icon-size: theme("spacing.4"); + --calcite-internal-combobox-item-space-large: theme("spacing.3"); + --calcite-internal-combobox-item-space-small: theme("spacing.2"); + --calcite-internal-combobox-item-selector-icon-size: theme("spacing.4"); } .scale--l { @apply text-0h; - --calcite-combobox-item-spacing-unit-l: theme("spacing.4"); - --calcite-combobox-item-spacing-unit-s: theme("spacing[2.5]"); - --calcite-combobox-item-spacing-indent: theme("spacing.4"); - --calcite-combobox-item-selector-icon-size: theme("spacing.6"); + --calcite-internal-combobox-item-space-large: theme("spacing.4"); + --calcite-internal-combobox-item-space-small: theme("spacing[2.5]"); + --calcite-internal-combobox-item-selector-icon-size: theme("spacing.6"); } .container { - --calcite-combobox-item-indent-value: calc( - var(--calcite-combobox-item-spacing-indent) * var(--calcite-combobox-item-spacing-indent-multiplier) + --calcite-internal-combobox-item-space-x: calc( + var(--calcite-internal-combobox-item-space-large) * var(--calcite-internal-combobox-item-depth) ); } :host(:focus) { - @apply shadow-none; + box-shadow: var(--calcite-shadow-none); } @include disabled(); @@ -47,21 +69,23 @@ ul:focus { } .label { - @apply text-color-3 - focus-base - relative - box-border - flex - w-full - min-w-full - cursor-pointer - items-center - no-underline - duration-150 - ease-in-out; + @apply focus-base + relative + box-border + flex + cursor-pointer + items-center + no-underline + duration-150 + ease-in-out; @include word-break(); - padding-block: var(--calcite-combobox-item-spacing-unit-s); - padding-inline: var(--calcite-combobox-item-spacing-unit-l); + background-color: var(--calcite-combobox-item-background-color, var(--calcite-color-transparent)); + color: var(--calcite-combobox-item-text-color, var(--calcite-color-text-3)); + padding-block: var(--calcite-internal-combobox-item-space-small); + padding-inline: var(--calcite-internal-combobox-item-space-large); + inline-size: var(--calcite-container-size-content-fluid); + min-inline-size: var(--calcite-container-size-content-fluid); + box-shadow: var(--calcite-combobox-item-shadow, var(--calcite-shadow-none)); } :host([disabled]) .label { @@ -70,7 +94,8 @@ ul:focus { // selected state .label--selected { - @apply text-color-1 font-medium; + @apply font-medium; + color: var(--calcite-combobox-item-text-color-active, var(--calcite-color-text-1)); } .label--active { @@ -79,42 +104,41 @@ ul:focus { .label:hover, .label:active { - @apply text-color-1 - bg-foreground-2 - no-underline - shadow-none; + @apply no-underline; + background-color: var(--calcite-combobox-item-background-color-active, var(--calcite-color-foreground-2)); + color: var(--calcite-combobox-item-text-color-active, var(--calcite-color-text-1)); } .title { padding-block: 0; - padding-inline: var(--calcite-combobox-item-spacing-unit-l); + padding-inline: var(--calcite-internal-combobox-item-space-large); } .icon { @apply inline-flex - opacity-0 - duration-150 - ease-in-out; - color: theme("borderColor.color.1"); + duration-150 + ease-in-out; + opacity: 0; + color: var(--calcite-combobox-item-indicator-color, var(--calcite-color-border-1)); } .icon--indent { - padding-inline-start: var(--calcite-combobox-item-indent-value); + padding-inline-start: var(--calcite-internal-combobox-item-space-x); } .icon--custom { margin-block-start: -1px; - padding-inline-start: var(--calcite-combobox-item-spacing-unit-l); - @apply text-color-3; + padding-inline-start: var(--calcite-internal-combobox-item-space-large); + color: var(--calcite-combobox-item-icon-color, var(--calcite-color-text-3)); } .icon--active { - @apply text-color-1; + color: var(--calcite-combobox-item-indicator-color-active, var(--calcite-color-text-1)); } .icon--dot { @apply flex justify-center; - min-inline-size: var(--calcite-combobox-item-selector-icon-size); + min-inline-size: var(--calcite-internal-combobox-item-selector-icon-size); } .icon--dot::before { @@ -123,16 +147,16 @@ ul:focus { } .label--active .icon { - @apply opacity-100; + opacity: var(--calcite-opacity-full); } .label--selected .icon { - @apply opacity-100; - color: theme("backgroundColor.brand"); + opacity: var(--calcite-opacity-full); + color: var(--calcite-combobox-item-icon-color-active, var(--calcite-color-brand)); } :host(:hover[disabled]) .icon { - @apply opacity-100; + opacity: var(--calcite-opacity-full); } .filter-match { diff --git a/packages/calcite-components/src/components/combobox-item/combobox-item.tsx b/packages/calcite-components/src/components/combobox-item/combobox-item.tsx index f65d4d4fb19..8b8b49fbacc 100644 --- a/packages/calcite-components/src/components/combobox-item/combobox-item.tsx +++ b/packages/calcite-components/src/components/combobox-item/combobox-item.tsx @@ -257,7 +257,7 @@ export class ComboboxItem implements ConditionalSlotComponent, InteractiveCompon
  • {this.renderSelectIndicator(showDot, iconPath)} diff --git a/packages/calcite-components/src/components/combobox/combobox.e2e.ts b/packages/calcite-components/src/components/combobox/combobox.e2e.ts index 6b195d744a7..e222ed96333 100644 --- a/packages/calcite-components/src/components/combobox/combobox.e2e.ts +++ b/packages/calcite-components/src/components/combobox/combobox.e2e.ts @@ -11,6 +11,7 @@ import { reflects, renders, t9n, + themed, } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; import { CSS as ComboboxItemCSS } from "../combobox-item/resources"; @@ -2286,6 +2287,73 @@ describe("calcite-combobox", () => { expect(chips.length).toBe(2); }); + describe("theme", () => { + describe("default", () => { + themed( + html` + + + + `, + { + "--calcite-combobox-border-color": { + shadowSelector: `.${CSS.wrapper}`, + targetProp: "borderColor", + }, + "--calcite-combobox-background-color": { + shadowSelector: `.${CSS.wrapper}`, + targetProp: "backgroundColor", + }, + "--calcite-combobox-text-color": { + shadowSelector: `.${CSS.wrapper}`, + targetProp: "color", + }, + }, + ); + }); + + describe("active chip", () => { + themed( + async () => { + const page = await newE2EPage(); + await page.setContent(`html + + + + `); + const combobox = await page.find("calcite-combobox"); + + await combobox.click(); + await combobox.press("ArrowLeft"); + await page.waitForChanges(); + + return { page, tag: "calcite-combobox" }; + }, + { + "--calcite-combobox-chip-background-color-active": { + shadowSelector: `.${CSS.chipActive}`, + targetProp: "--calcite-chip-background-color", + }, + }, + ); + }); + + describe("deprecated", () => { + themed("calcite-combobox", { + "--calcite-combobox-input-height": [ + { + shadowSelector: `.${CSS.input}`, + targetProp: "blockSize", + }, + { + shadowSelector: `.${CSS.input}`, + targetProp: "lineHeight", + }, + ], + }); + }); + }); + it("prevents opening a readonly combobox", async () => { const page = await newE2EPage(); await page.setContent(html` diff --git a/packages/calcite-components/src/components/combobox/combobox.scss b/packages/calcite-components/src/components/combobox/combobox.scss index cec2a8608b2..e470f68154d 100644 --- a/packages/calcite-components/src/components/combobox/combobox.scss +++ b/packages/calcite-components/src/components/combobox/combobox.scss @@ -3,7 +3,19 @@ * * These properties can be overridden using the component's tag as selector. * - * @prop --calcite-combobox-input-height: Specifies the height of the component's input. + * @prop --calcite-combobox-background-color: defines the background color of the component + * @prop --calcite-combobox-border-color: defines the border color of the component + * @prop --calcite-combobox-chip-background-color-active: defines the background color of a chip sub-component when active + * @prop --calcite-combobox-input-height: [Deprecated] Specifies the height of the component's input. + * @prop --calcite-combobox-text-color: defines the text color of the component + */ + +/* + * Internal + --calcite-internal-combobox-space-large + --calcite-internal-combobox-space-small + --calcite-internal-combobox-height + --calcite-internal-combobox-space-y */ :host { @@ -15,56 +27,49 @@ :host([scale="s"]) { @apply text-n2; - --calcite-combobox-item-spacing-unit-l: theme("spacing.2"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.1"); - --calcite-combobox-input-height: theme("spacing.4"); - --calcite-internal-combobox-input-margin-block: calc(theme("spacing.1") - theme("borderWidth.DEFAULT")); - - .x-button { - margin-inline: theme("spacing.2"); - } + --calcite-internal-combobox-space-large: theme("spacing.2"); + --calcite-internal-combobox-space-small: theme("spacing.1"); + --calcite-internal-combobox-height: var(--calcite-combobox-input-height, theme("spacing.4")); + --calcite-internal-combobox-space-y: calc(theme("spacing.1") - theme("borderWidth.DEFAULT")); } :host([scale="m"]) { @apply text-n1; - --calcite-combobox-item-spacing-unit-l: theme("spacing.3"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.2"); - --calcite-combobox-input-height: theme("spacing.4"); - --calcite-internal-combobox-input-margin-block: calc(theme("spacing.2") - theme("borderWidth.DEFAULT")); - - .x-button { - margin-inline-end: theme("spacing.3"); - } + --calcite-internal-combobox-space-large: theme("spacing.3"); + --calcite-internal-combobox-space-small: theme("spacing.2"); + --calcite-internal-combobox-height: var(--calcite-combobox-input-height, theme("spacing.4")); + --calcite-internal-combobox-space-y: calc(theme("spacing.2") - theme("borderWidth.DEFAULT")); } :host([scale="l"]) { @apply text-0; - --calcite-combobox-item-spacing-unit-l: theme("spacing.4"); - --calcite-combobox-item-spacing-unit-s: theme("spacing.3"); - --calcite-combobox-input-height: theme("spacing.6"); - --calcite-internal-combobox-input-margin-block: calc(theme("spacing[2.5]") - theme("borderWidth.DEFAULT")); - - .x-button { - margin-inline-end: theme("spacing.4"); - } + --calcite-internal-combobox-space-large: theme("spacing.4"); + --calcite-internal-combobox-space-small: theme("spacing.3"); + --calcite-internal-combobox-height: var(--calcite-combobox-input-height, theme("spacing.6")); + --calcite-internal-combobox-space-y: calc(theme("spacing[2.5]") - theme("borderWidth.DEFAULT")); } .wrapper { - @apply bg-foreground-1 - text-color-1 - focus-base + @apply focus-base flex - border-color-input border border-solid; - padding-block: calc(var(--calcite-combobox-item-spacing-unit-s) / 4); - padding-inline: var(--calcite-combobox-item-spacing-unit-l); + border-color: var(--calcite-combobox-border-color, var(--calcite-color-border-input)); + background-color: var(--calcite-combobox-background-color, var(--calcite-color-foreground-1)); + color: var(--calcite-combobox-text-color, var(--calcite-color-text-1)); + padding-block: calc(var(--calcite-internal-combobox-space-small) / 4); + padding-inline: var(--calcite-internal-combobox-space-large); +} - &:hover { - .icon { - color: var(--calcite-color-text-1); - } - } +.label { + @apply pointer-events-none + max-w-full + flex-auto + truncate + p-0 + font-normal; + block-size: var(--calcite-internal-combobox-height); + line-height: var(--calcite-internal-combobox-height); } :host(:focus-within) .wrapper, @@ -83,16 +88,20 @@ } :host([status="invalid"]) .wrapper { - @apply border-color-danger; + border-color: var(--calcite-combobox-border-color, var(--calcite-color-status-danger)); } :host([status="invalid"]:focus-within) .wrapper { @apply focus-inset-danger; } +.x-button { + margin-inline-end: var(--calcite-internal-combobox-space-large); +} + .wrapper--single { padding-block: 0; - padding-inline: var(--calcite-combobox-item-spacing-unit-l); + padding-inline: var(--calcite-internal-combobox-space-large); @apply cursor-pointer flex-nowrap; } @@ -105,8 +114,7 @@ truncate p-0; - gap: var(--calcite-combobox-item-spacing-unit-s); - margin-inline-end: var(--calcite-combobox-item-spacing-unit-s); + gap: var(--calcite-internal-combobox-space-small); &.selection-display-fit, &.selection-display-single { @@ -116,19 +124,19 @@ .input { @apply appearance-none - bg-transparent border-none flex-grow font-inherit - text-color-1 text-ellipsis overflow-hidden p-0; + background-color: var(--calcite-color-transparent); + color: var(--calcite-combobox-text-color, var(--calcite-color-text-1)); font-size: inherit; - block-size: var(--calcite-combobox-input-height); - line-height: var(--calcite-combobox-input-height); + block-size: var(--calcite-internal-combobox-height); + line-height: var(--calcite-internal-combobox-height); inline-size: 100%; - margin-block-end: var(--calcite-combobox-item-spacing-unit-s); + margin-block-end: var(--calcite-internal-combobox-space-small); min-inline-size: 4.8125rem; &:focus { @apply outline-none; @@ -141,7 +149,7 @@ .input--single { @apply p-0; - margin-block: var(--calcite-internal-combobox-input-margin-block); + margin-block: var(--calcite-internal-combobox-space-y); } .wrapper--active .input-single { @@ -157,7 +165,7 @@ .input--icon { padding-block: 0; - padding-inline: var(--calcite-combobox-item-spacing-unit-l); + padding-inline: var(--calcite-internal-combobox-space-large); } .input-wrap { @@ -168,19 +176,8 @@ @apply flex-1 overflow-hidden; } -.label { - @apply pointer-events-none - max-w-full - flex-auto - truncate - p-0 - font-normal; - block-size: var(--calcite-combobox-input-height); - line-height: var(--calcite-combobox-input-height); -} - .label--icon { - padding-inline: var(--calcite-combobox-item-spacing-unit-l); + padding-inline: var(--calcite-internal-combobox-space-large); } .icon-end, @@ -197,8 +194,7 @@ } .floating-ui-container { - --calcite-floating-ui-z-index: theme("zIndex.dropdown"); - @include floatingUIContainer(); + @include floatingUIContainer("var(--calcite-z-index-dropdown)"); @include floatingUIWrapper(); } @@ -220,9 +216,9 @@ } .list-container { - @apply bg-foreground-1 - max-h-menu + @apply max-h-menu overflow-y-auto; + background-color: var(--calcite-combobox-background-color, var(--calcite-color-foreground-1)); inline-size: var(--calcite-dropdown-width); } @@ -239,12 +235,15 @@ calcite-chip { } .chip { - margin-block: calc(var(--calcite-combobox-item-spacing-unit-s) / 4); + margin-block: calc(var(--calcite-internal-combobox-space-small) / 4); max-inline-size: 100%; } .chip--active { - @apply bg-foreground-3; + --calcite-chip-background-color: var( + --calcite-combobox-chip-background-color-active, + var(--calcite-color-foreground-3) + ); } .chip--invisible { @@ -260,5 +259,5 @@ calcite-chip { @include base-component(); ::slotted(calcite-combobox-item-group:not(:first-child)) { - padding-block-start: var(--calcite-combobox-item-spacing-unit-l); + padding-block-start: var(--calcite-internal-combobox-space-large); } diff --git a/packages/calcite-components/src/components/combobox/combobox.tsx b/packages/calcite-components/src/components/combobox/combobox.tsx index a8768d9fa4d..082d38bfede 100644 --- a/packages/calcite-components/src/components/combobox/combobox.tsx +++ b/packages/calcite-components/src/components/combobox/combobox.tsx @@ -1401,7 +1401,7 @@ export class Combobox return this.selectedItems.map((item, i) => { const chipClasses = { chip: true, - "chip--active": activeChipIndex === i, + [CSS.chipActive]: activeChipIndex === i, }; const ancestors = [...getItemAncestors(item)].reverse(); const pathLabel = [...ancestors, item].map((el) => el.textLabel); @@ -1727,7 +1727,7 @@ export class Combobox
    { describe("renders", () => { @@ -28,6 +29,93 @@ describe("calcite-date-picker", () => { }); }); + describe("theme", () => { + const tokens = { + "--calcite-date-picker-border-color": { + targetProp: "borderColor", + }, + "--calcite-date-picker-corner-radius": [ + { + targetProp: "borderRadius", + }, + { + shadowSelector: "calcite-date-picker-month-header", + targetProp: "--calcite-date-picker-month-header-corner-radius", + }, + ] as TestSelectToken[], + "--calcite-date-picker-day-background-color-hover": { + targetProp: "--calcite-date-picker-month-day-background-color-hover", + shadowSelector: "calcite-date-picker-month", + }, + "--calcite-date-picker-day-background-color-selected": { + shadowSelector: "calcite-date-picker-month", + targetProp: "--calcite-date-picker-month-day-background-color-selected", + }, + "--calcite-date-picker-day-background-color": { + targetProp: "--calcite-date-picker-month-day-background-color", + shadowSelector: "calcite-date-picker-month", + }, + + "--calcite-date-picker-day-corner-radius": { + shadowSelector: "calcite-date-picker-month", + targetProp: "--calcite-date-picker-month-day-corner-radius", + }, + "--calcite-date-picker-day-range-background-color-hover": { + targetProp: "--calcite-date-picker-month-day-range-background-color-hovered", + shadowSelector: "calcite-date-picker-month", + }, + "--calcite-date-picker-day-range-background-color-selected": { + targetProp: "--calcite-date-picker-month-day-range-background-color-selected", + shadowSelector: "calcite-date-picker-month", + }, + "--calcite-date-picker-day-text-color-hover": { + targetProp: "--calcite-date-picker-month-day-text-color-hover", + shadowSelector: "calcite-date-picker-month", + }, + "--calcite-date-picker-day-text-color": { + shadowSelector: "calcite-date-picker-month", + targetProp: "--calcite-date-picker-month-day-text-color", + }, + "--calcite-date-picker-day-text-selected": { + shadowSelector: "calcite-date-picker-month", + targetProp: "--calcite-date-picker-month-day-text-selected", + }, + "--calcite-date-picker-header-background-color": { + shadowSelector: "calcite-date-picker-month-header", + targetProp: "--calcite-date-picker-month-header-background-color", + }, + "--calcite-date-picker-header-button-background-color-active": { + targetProp: "--calcite-date-picker-month-header-button-background-color-active", + shadowSelector: "calcite-date-picker-month-header", + }, + "--calcite-date-picker-header-button-background-color-hover": { + targetProp: "--calcite-date-picker-month-header-button-background-color-hover", + shadowSelector: "calcite-date-picker-month-header", + }, + "--calcite-date-picker-header-button-background-color": { + targetProp: "--calcite-date-picker-month-header-button-background-color", + shadowSelector: "calcite-date-picker-month-header", + }, + "--calcite-date-picker-header-button-text-color-hover": { + targetProp: "--calcite-date-picker-month-header-button-text-color-hover", + shadowSelector: "calcite-date-picker-month-header", + }, + "--calcite-date-picker-header-button-text-color": { + targetProp: "--calcite-date-picker-month-header-button-text-color", + shadowSelector: "calcite-date-picker-month-header", + }, + "--calcite-date-picker-header-text-color": { + targetProp: "--calcite-date-picker-month-header-text-color", + shadowSelector: "calcite-date-picker-month-header", + }, + "--calcite-date-picker-week-header-text-color": { + targetProp: "--calcite-date-picker-month-week-header-text-color", + shadowSelector: "calcite-date-picker-month", + }, + } as const; + themed(html``, tokens); + }); + const animationDurationInMs = 200; it("fires a calciteDatePickerChange event when changing year in header", async () => { diff --git a/packages/calcite-components/src/components/date-picker/date-picker.scss b/packages/calcite-components/src/components/date-picker/date-picker.scss index c94b0112c41..dbea9524063 100644 --- a/packages/calcite-components/src/components/date-picker/date-picker.scss +++ b/packages/calcite-components/src/components/date-picker/date-picker.scss @@ -1,13 +1,40 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-date-picker-border-color: Specifies the border color of the component. + * @prop --calcite-date-picker-corner-radius: Specifies the border radius of the component. + * @prop --calcite-date-picker-day-background-color-hover: Specifies the background color of the day when hovered. + * @prop --calcite-date-picker-day-background-color-selected: Specifies the background color of the day when selected. + * @prop --calcite-date-picker-day-background-color: Specifies the background color of the day. + * @prop --calcite-date-picker-day-corner-radius: Specifies the corner radius of day. + * @prop --calcite-date-picker-day-range-background-color-hover: Specifies the background color of day range when hovered. + * @prop --calcite-date-picker-day-range-background-color-selected: Specifies the background color of day range when selected. + * @prop --calcite-date-picker-day-text-color-hover: Specifies the text color of day when hovered. + * @prop --calcite-date-picker-day-text-color: Specifies the text color of day. + * @prop --calcite-date-picker-day-text-selected: Specifies the text color of day when selected. + * @prop --calcite-date-picker-week-header-text-color: Specifies the text color of week headers. + * @prop --calcite-date-picker-header-background-color: Specifies the background color of month header. + * @prop --calcite-date-picker-header-button-background-color-active: Specifies the background color of navigation button of month header when active. + * @prop --calcite-date-picker-header-button-background-color-hover: Specifies the background color of navigation button of month header when hovered. + * @prop --calcite-date-picker-header-button-background-color: Specifies the background color of navigation button of month header. + * @prop --calcite-date-picker-header-button-text-color-hover: Specifies the text color of navigation button of month header when hovered. + * @prop --calcite-date-picker-header-button-text-color: Specifies the text color of navigation button of month header. + * @prop --calcite-date-picker-header-text-color: Specifies the text color of month header. + * + */ + :host { @extend %component-host; @apply align-top - border - border-color-1 border-solid inline-block overflow-visible - rounded-none w-auto; + border-radius: var(--calcite-date-picker-corner-radius, var(--calcite-corner-radius)); + border-color: var(--calcite-date-picker-border-color, var(--calcite-color-border-1)); + border-width: var(--calcite-border-width-sm); } :host([scale="s"]) { @@ -28,4 +55,36 @@ max-inline-size: 600px; } +calcite-date-picker-month { + --calcite-date-picker-month-week-header-text-color: var(--calcite-date-picker-week-header-text-color); + --calcite-date-picker-month-day-text-color: var(--calcite-date-picker-day-text-color); + --calcite-date-picker-month-day-text-color-hover: var(--calcite-date-picker-day-text-color-hover); + --calcite-date-picker-month-day-text-selected: var(--calcite-date-picker-day-text-selected); + --calcite-date-picker-month-day-background-color: var(--calcite-date-picker-day-background-color); + --calcite-date-picker-month-day-background-color-hover: var(--calcite-date-picker-day-background-color-hover); + --calcite-date-picker-month-day-background-color-selected: var(--calcite-date-picker-day-background-color-selected); + --calcite-date-picker-month-day-corner-radius: var(--calcite-date-picker-day-corner-radius); + --calcite-date-picker-month-day-range-background-color-selected: var( + --calcite-date-picker-day-range-background-color-selected + ); + --calcite-date-picker-month-day-range-background-color-hovered: var( + --calcite-date-picker-day-range-background-color-hover + ); +} + +calcite-date-picker-month-header { + --calcite-date-picker-month-header-background-color: var(--calcite-date-picker-header-background-color); + --calcite-date-picker-month-header-button-background-color-active: var( + --calcite-date-picker-header-button-background-color-active + ); + --calcite-date-picker-month-header-button-background-color-hover: var( + --calcite-date-picker-header-button-background-color-hover + ); + --calcite-date-picker-month-header-button-background-color: var(--calcite-date-picker-header-button-background-color); + --calcite-date-picker-month-header-button-text-color-hover: var(--calcite-date-picker-header-button-text-color-hover); + --calcite-date-picker-month-header-button-text-color: var(--calcite-date-picker-header-button-text-color); + --calcite-date-picker-month-header-text-color: var(--calcite-date-picker-header-text-color); + --calcite-date-picker-month-header-corner-radius: var(--calcite-date-picker-corner-radius); +} + @include base-component(); diff --git a/packages/calcite-components/src/components/date-picker/date-picker.stories.ts b/packages/calcite-components/src/components/date-picker/date-picker.stories.ts index 0f034e41de1..78a88716258 100644 --- a/packages/calcite-components/src/components/date-picker/date-picker.stories.ts +++ b/packages/calcite-components/src/components/date-picker/date-picker.stories.ts @@ -186,3 +186,21 @@ export const greaterThanMaxWidthAllScales_TestOnly = (): string => html` `; + +export const theming_TestOnly = (): string => + html` + `; diff --git a/packages/calcite-components/src/components/dropdown-group/dropdown-group.e2e.ts b/packages/calcite-components/src/components/dropdown-group/dropdown-group.e2e.ts index 3d2c6d9086b..45ed327507d 100644 --- a/packages/calcite-components/src/components/dropdown-group/dropdown-group.e2e.ts +++ b/packages/calcite-components/src/components/dropdown-group/dropdown-group.e2e.ts @@ -1,6 +1,7 @@ import { newE2EPage } from "@stencil/core/testing"; -import { defaults, hidden, reflects, renders } from "../../tests/commonTests"; +import { defaults, hidden, reflects, renders, themed } from "../../tests/commonTests"; import { html } from "../../../support/formatting"; +import { CSS } from "./resources"; describe("calcite-dropdown-group", () => { describe("defaults", () => { @@ -64,4 +65,41 @@ describe("calcite-dropdown-group", () => { expect(items.length).toBe(3); items.forEach(async (item) => expect(await item.getProperty("selectionMode")).toBe("none")); }); + + describe("theme", () => { + describe("default", () => { + themed(html` `, { + "--calcite-dropdown-group-border-color": [ + { + shadowSelector: `.${CSS.title}`, + targetProp: "borderColor", + }, + ], + "--calcite-dropdown-group-text-color": { + shadowSelector: `.${CSS.title}`, + targetProp: "color", + }, + }); + }); + + describe("separator", () => { + themed( + html` + + + + + `, + { + "--calcite-dropdown-group-border-color": [ + { + selector: "calcite-dropdown-group[group-title^='second']", + shadowSelector: `.${CSS.separator}`, + targetProp: "backgroundColor", + }, + ], + }, + ); + }); + }); }); diff --git a/packages/calcite-components/src/components/dropdown-group/dropdown-group.scss b/packages/calcite-components/src/components/dropdown-group/dropdown-group.scss index 653ec780df9..55ff9340c15 100644 --- a/packages/calcite-components/src/components/dropdown-group/dropdown-group.scss +++ b/packages/calcite-components/src/components/dropdown-group/dropdown-group.scss @@ -1,3 +1,13 @@ +/** + * CSS Custom Properties + * + * These properties can be overridden using the component's tag as selector. + * + * @prop --calcite-dropdown-group-border-color: specifies the border color of the component. + * @prop --calcite-dropdown-group-text-color: specifies the text color of the component. + * + */ + :host { // we make the host relative, so items can consistently compute their offsetTop based on the group @apply block relative; @@ -8,21 +18,22 @@ } .dropdown-title { - @apply border-color-3 - text-color-2 - -mb-px + @apply -mb-px block cursor-default break-words - border-0 - border-b border-solid font-bold; + border-width: var(--calcite-border-width-none); + border-block-end-width: var(--calcite-border-width-sm); + border-color: var(--calcite-dropdown-group-border-color, var(--calcite-color-border-3)); + color: var(--calcite-dropdown-group-text-color, var(--calcite-color-text-2)); } .dropdown-separator { - @apply block h-px; - background-color: theme("borderColor.color.3"); + @apply block; + block-size: var(--calcite-size-px); + background-color: var(--calcite-dropdown-group-border-color, var(--calcite-color-border-3)); } :host([scale="s"]) { diff --git a/packages/calcite-components/src/components/dropdown-group/dropdown-group.tsx b/packages/calcite-components/src/components/dropdown-group/dropdown-group.tsx index 57fa3a977b8..b794b9e27d5 100644 --- a/packages/calcite-components/src/components/dropdown-group/dropdown-group.tsx +++ b/packages/calcite-components/src/components/dropdown-group/dropdown-group.tsx @@ -12,7 +12,7 @@ import { } from "@stencil/core"; import { Scale, SelectionMode } from "../interfaces"; import { createObserver } from "../../utils/observers"; -import { CSS } from "../dropdown-item/resources"; +import { CSS } from "./resources"; import { RequestedItem } from "./interfaces"; /** @@ -91,13 +91,13 @@ export class DropdownGroup { render(): VNode { const groupTitle = this.groupTitle ? ( -