diff --git a/.changeset/khaki-fireants-begin.md b/.changeset/khaki-fireants-begin.md new file mode 100644 index 0000000000..6b9b5257f0 --- /dev/null +++ b/.changeset/khaki-fireants-begin.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-catalog': patch +--- + +Internal refactor to use cursor based pagination diff --git a/.changeset/nice-waves-count.md b/.changeset/nice-waves-count.md new file mode 100644 index 0000000000..37d9a739b3 --- /dev/null +++ b/.changeset/nice-waves-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-notifications-backend': patch +--- + +Remove `@backstage/backend-common` dependency diff --git a/.github/workflows/api-breaking-changes.yml b/.github/workflows/api-breaking-changes.yml index 744c9e62c3..dbb5096839 100644 --- a/.github/workflows/api-breaking-changes.yml +++ b/.github/workflows/api-breaking-changes.yml @@ -33,7 +33,7 @@ jobs: registry-url: https://registry.npmjs.org/ - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: linux-v20 @@ -46,7 +46,7 @@ jobs: cat ${{ github.event_path }} > event.json - name: Upload Artifacts - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4 with: name: preview-spec path: | diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index 1a29795cce..8c46ed2984 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -34,7 +34,7 @@ jobs: ref: 'refs/pull/${{ github.event.pull_request.number }}/merge' - name: fetch base run: git fetch --depth 1 origin ${{ github.base_ref }} - - uses: backstage/actions/changeset-feedback@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + - uses: backstage/actions/changeset-feedback@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 name: Generate feedback with: diff-ref: 'origin/master' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 24e74ff0f6..e8bf57cc95 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -77,7 +77,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -225,7 +225,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -235,7 +235,7 @@ jobs: # Use the lower-level cache actions for the success cache, so that we can store the cache even on failed builds - name: restore backstage-cli cache - uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4 + uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4 with: path: .cache/backstage-cli key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} @@ -256,7 +256,7 @@ jobs: # Always save success cache even if there were failures, that way it can be used in re-triggered builds - name: save backstage-cli cache - uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4 + uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4 if: always() with: path: .cache/backstage-cli diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 5961a9155f..3e944a3795 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -14,7 +14,7 @@ jobs: with: egress-policy: audit - - uses: backstage/actions/cron@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + - uses: backstage/actions/cron@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index a7ac58b76a..a1764b976a 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -37,7 +37,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -62,7 +62,7 @@ jobs: uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 - name: Build and push - uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 + uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 with: context: './example-app' file: ./example-app/packages/backend/Dockerfile diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 1f18c6ed15..dc85f23e50 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -65,7 +65,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v20.x @@ -73,7 +73,7 @@ jobs: run: yarn build:api-docs - name: upload API reference - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4 with: name: stable-reference path: docs/reference/ @@ -105,7 +105,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v20.x @@ -113,7 +113,7 @@ jobs: run: yarn build:api-docs - name: upload API reference - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4 with: name: next-reference path: docs/reference/ @@ -130,7 +130,7 @@ jobs: working-directory: storybook - name: storybook upload - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4 with: name: storybook path: storybook/dist/ diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index c66206ca8d..d1d7d3fd7c 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -76,7 +76,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -94,7 +94,7 @@ jobs: run: yarn backstage-cli config:check --lax - name: backstage-cli cache - uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4 + uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4 with: path: .cache/backstage-cli key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }} diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index 18c39ebbd1..447b6e1e13 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -40,7 +40,7 @@ jobs: const prNumber = artifact.name.slice('pr_number-'.length) core.setOutput('pr-number', prNumber); - - uses: backstage/actions/re-review@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + - uses: backstage/actions/re-review@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 5b8673858b..186c011797 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -23,7 +23,7 @@ jobs: egress-policy: audit - name: PR sync - uses: backstage/actions/pr-sync@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/pr-sync@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index a40c5a0653..db060a70d4 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: sarif_file: results.sarif diff --git a/.github/workflows/sync_canon.yml b/.github/workflows/sync_canon.yml index 189e43215e..29a0ae2ce4 100644 --- a/.github/workflows/sync_canon.yml +++ b/.github/workflows/sync_canon.yml @@ -22,7 +22,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v20.x diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 6658f8b850..7516b3cfe0 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -25,7 +25,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index d4fe6e2fa0..436db10e9c 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -25,7 +25,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v20.x diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 9084593052..bbdde7e9d6 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -24,7 +24,7 @@ jobs: node-version: 20.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v20.x diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index 6300b1ca4d..ef7ad65b37 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -58,6 +58,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Upload Snyk report - uses: github/codeql-action/upload-sarif@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: sarif_file: snyk.sarif diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 1c326bc880..9803616b53 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -30,7 +30,7 @@ jobs: with: node-version: 20.x - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v20.x - name: run Lighthouse CI diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index cb40f28f54..6720e4d852 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -55,7 +55,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -66,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/autobuild@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -80,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index ef24955b0e..30887980a4 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -60,7 +60,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index 3817af2d8a..3ce85f371b 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -80,7 +80,7 @@ jobs: uses: browser-actions/setup-chrome@803ef6dfb4fdf22089c9563225d95e4a515820a0 # latest - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 5ddd88b92d..b919db658d 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -42,7 +42,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@c5c3b91fe86c59a87cf9782de1f89e48e19d4492 # v0.6.16 + uses: backstage/actions/yarn-install@b3c1841fd69e1658ac631afafd0fb140a2309024 # v0.6.17 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install @@ -54,7 +54,7 @@ jobs: - run: yarn --cwd packages/canon build-storybook - - uses: chromaui/action@0efa3230f403b7848d5d65c6ce140b617fb68380 # v11 + - uses: chromaui/action@64a9c0ca3bfb724389b0d536e544f56b7b5ff5b3 # v11 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks diff --git a/docs/features/search/getting-started.md b/docs/features/search/getting-started.md index a4b5348dbb..e543df5ab8 100644 --- a/docs/features/search/getting-started.md +++ b/docs/features/search/getting-started.md @@ -301,12 +301,16 @@ indexBuilder.addCollator({ }); ``` -Note: if you are using the in-memory Lunr search engine, you probably want to +:::note Note + +if you are using the in-memory Lunr search engine, you probably want to implement a non-distributed `SchedulerServiceTaskRunner` like the following to ensure consistency if you're running multiple search backend nodes (alternatively, you can configure the search plugin to use a non-distributed database such as [SQLite](../../tutorials/configuring-plugin-databases.md#postgresql-and-sqlite-3)): +::: + ```typescript import { SchedulerServiceTaskRunner, diff --git a/docs/releases/v1.34.md b/docs/releases/v1.34.0.md similarity index 100% rename from docs/releases/v1.34.md rename to docs/releases/v1.34.0.md diff --git a/microsite/blog/2024-12-18-backstage-wrapped-2024.mdx b/microsite/blog/2024-12-18-backstage-wrapped-2024.mdx new file mode 100644 index 0000000000..a136d644b5 --- /dev/null +++ b/microsite/blog/2024-12-18-backstage-wrapped-2024.mdx @@ -0,0 +1,177 @@ +--- +# prettier-ignore +title: "Backstage Wrapped 2024: The year's Top 5 milestones and highlights" +author: Patrik Oldsberg, Spotify & Ben Lambert, Spotify +--- + +![Bowie the Backstage Beaver in an astronaut outfit riding a firecracker surrounded by fireworks exploding with stats: 210+ open source plugins, 1.6k contributors, 60k total contributions](assets/2024-12-18/wrapped2024-top5.png) + +It was another banner year for everyone's favorite platform for improving developer experience — and we're closing 2024 out with a bang🧨🎆. To give you a snapshot of how the Backstage community is doing, we're counting down our Top 5 milestones for the year (plus a few other highlights sprinkled in). To start things off, let's see what you and your 1,616 fellow contributors were up to last year… + +{/* truncate */} + +--- + +## 5️⃣: 60k+ Contributions from a Global Community of Very Busy Beavers🦫 + + +_Behold! Every commit to the Backstage open source project this year — can you +see your name in there?_ + +As we shared last month when we kicked off [BackstageCon North America](https://youtu.be/OfavM6j4Z5o?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X&t=112), the Backstage community hit a new milestone this year — reaching 60,000 total contributions (discussions, issues, and pull requests) to the project since Spotify donated it to the [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/projects/backstage/) in 2020. Busy Backstage beavers, indeed. + +And the community was as active as ever in 2024 — if you hit play on the visualization above, you can see all 12.3k commits from the year being made. (Though, instead of busy beavers, it's more like a giant cluster of space spiders shooting galactic laser webs. Pew pew!) + +### The most commits of any CNCF project, by a lot + +![Taylor Dolezal presenting a chart showing the Top 10 CNCF Projects by Number of End User Commits on the Keynote stage at KubeCon Europe 2024](assets/2024-03-27/cncf-keynote-kubecon-2024.jpg) + +Speaking of commits, rewinding back to [KubeCon + CloudNativeCon Europe](https://backstage.io/blog/2024/03/27/backstagecon-kubecon-24/) in March gives us another way to visualize the mightiness of the Backstage community. + +From the keynote stage in Paris, Taylor Dolezal, the head of ecosystem at The Linux Foundation, [presented a chart](https://www.youtube.com/watch?v=MICHGBAe8gc&list=PLj6h78yzYM2N8nw1YcqqKveySH6_0VnI0&index=161) showing the "Top CNCF Projects by Number of End User Commits", using data from the previous four months. + +At the top of the chart, a conspicuous blue bar — more than twice the length as the next longest one — had Taylor noting that, among CNCF projects, Backstage was "rocketing into the forefront when it comes to end user contributions".🚀🚀🚀 + +### Our first Contribfest! + +![A room full of developers working together at the first Backstage Contribfest](assets/2024-12-18/wrapped2024-contribfest.jpg) + +What's better than ogling a nifty visualization or nerding out on a good bar graph? Feeling the buzz of those contributions in person. + +Just last month at KubeCon + CloudNativeCon North America, maintainers from Spotify and Red Hat cohosted the first-ever [Backstage Contribfest](https://backstage.io/blog/2024/12/09/kubecon-slc-24/#contribfest-its-all-about-community). We packed the room with engineers obsessed with developer experience and let them loose on a curated list of issues. The session was good, old-fashioned coding fun — devs sharing ideas and solving problems together — and we look forward to doing it again with all of you. + +If you missed it and want to get in on the action, just follow along with the [Contribfest slide deck](https://static.sched.com/hosted_files/kccncna2024/53/KubeCon-ContribFest-Backstage-NA-2024.pdf). Or meet us in 💂‍♂️London in April for [BackstageCon](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/co-located-events/backstagecon/) and [KubeCon + CloudNativeCon Europe 2025](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/)! + +--- + +## 4️⃣: 210+ Open Source Plugins (and Counting)🧩 + +![Bowie the Backstage Beaver surrounded by icons for plugins: Argo CD, Datadog, GitHub Actions, Grafana, Jira, and Kubernetes](assets/2024-12-18/wrapped2024-4-plugins.gif) +_Just a few of the plugins built by the Backstage community_ + +### Plugins, plugins, plugins + +Everybody's building them, everywhere you look. We see official plugins from popular third-party service providers ([DX](https://backstage.spotify.com/marketplace/dx/plugin/dx/), [PagerDuty](https://pagerduty.github.io/backstage-plugin-docs/index.html), [Rootly](https://backstage.spotify.com/marketplace/rootly/plugin/rootly/)), in-house plugins going open source (like these from [DAZN](https://github.com/backstage/community-plugins/blob/main/workspaces/github-pull-requests-board/plugins/github-pull-requests-board/README.md), [Keyloop](https://github.com/backstage/community-plugins/blob/main/workspaces/azure-devops/plugins/azure-devops/README.md), and [SeatGeek](https://github.com/seatgeek/backstage-plugins)), essential plugins built and maintained by ecosystem champions and supporters ([AWS](https://github.com/awslabs/backstage-plugins-for-aws), [GCP](https://github.com/googlecloudplatform/google-cloud-backstage-plugins), [Roadie](https://roadie.io), [Spotify](https://backstage.spotify.com)), as well as creative and [useful](https://github.com/procore-oss/backstage-plugin-announcements) plugins from contributors and enthusiasts from all corners of the Backstage community. + +### A yearlong plugin party + +In 2024, the plugin ecosystem continued to expand — with about a hundred new plugins being introduced over the year and many others getting big updates. + +SeatGeek started the plugin party in February❄️ at a Backstage Community Session where they [demoed](https://www.youtube.com/watch?v=CRw0m3J11Bc&t=526s) five of the seven plugins they've open sourced, including their [Awards Plugin](https://github.com/seatgeek/backstage-plugins/tree/main/plugins/awards) and [Entity Scaffolder Plugin](https://github.com/seatgeek/backstage-plugins/tree/main/plugins/entity-scaffolder-content). + +By spring🌷, new plugins for [Linkerd](https://github.com/backstage/community-plugins/tree/main/workspaces/linkerd) and [Black Duck](https://github.com/backstage/community-plugins/tree/main/workspaces/blackduck/plugins/blackduck) had sprung onto the scene. + +During the summer☀️, the official [PagerDuty](https://pagerduty.github.io/backstage-plugin-docs/index.html) plugin received updates that made it a breeze to configure existing PagerDuty services and also added support for multiple PagerDuty accounts in the same Backstage instance. + +By fall🍁, some of the most-used plugins — including plugins for [Argo CD](https://www.npmjs.com/package/@roadiehq/backstage-plugin-argo-cd), [Datadog](https://www.npmjs.com/package/@roadiehq/backstage-plugin-datadog), [GitHub Actions](https://github.com/backstage/community-plugins/tree/main/workspaces/github-actions/plugins/github-actions), [Grafana](https://github.com/backstage/community-plugins/blob/main/workspaces/grafana/plugins/grafana/docs/index.md), [Jira](https://github.com/AxisCommunications/backstage-plugins/tree/main/plugins/jira-dashboard), [Kubernetes](https://backstage.io/docs/features/kubernetes/), and [Tech Radar](https://github.com/backstage/community-plugins/tree/main/workspaces/tech-radar/plugins/tech-radar) — had already been updated to support the very latest versions of the Backstage framework's [New Frontend System](https://backstage.io/docs/releases/v1.30.0) and [New Backend System](https://github.com/backstage/backstage/issues/24493). (Thanks to the teams at Roadie and Spotify for helping to kickstart a new era of easy-to-install-and-configure plugins!) + +And last but not least, AWS just released the [AWS Config catalog plugin for Backstage](https://github.com/awslabs/backstage-plugins-for-aws/blob/main/plugins/core/catalog-config/README.md) — a great new plugin that makes it easy for their customers to ingest AWS resources into the Backstage Software Catalog. + +Have a plugin you'd like to show off and share with the community? Sign up to demo it at one of our monthly [Backstage Community Sessions](https://github.com/backstage/community/tree/main/backstage-community-sessions#readme)! + +### A shiny new plugins repo + +Alongside all this plugin-building action, there was also plenty of plugin-migrating action. In April, community plugins moved to a repo they could call their own — the [Backstage Community Plugins Repository](https://backstage.io/blog/2024/04/19/community-plugins/). + +With release tooling, workspace tooling, and migration guide all included, [the new repo](https://github.com/backstage/community-plugins) gives plugin owners a leg up on building and shipping plugins. Now you can release independently of the main monorepo, at your own release cadence. + +Special thanks go to Red Hat as maintainers of the [community plugins project area](https://github.com/backstage/backstage/blob/master/OWNERS.md#community-plugins) and to everyone who provided feedback on the migration plan. With the new community plugins repo now established, it will be fascinating to see what new, innovative plugins we'll be talking about this time next year. [Go start building](https://backstage.io/docs/plugins/)! + +--- + +## 3️⃣: 278 Companies Listed in ADOPTERS.md💚 + +![Bowie the Backstage Beaver wearing a I heart Backstage T-shirt and hugging the ADOPTERS.md file](assets/2024-12-18/wrapped2024-3-adopters.gif) +_We 💚 all our Backstage adopters_ + +### One thing in common + +At the top level of the `backstage/backstage` GitHub repo is a little file called [ADOPTERS.md](https://github.com/backstage/backstage/blob/master/ADOPTERS.md) that contains the names of hundreds of companies who have adopted Backstage and added themselves to the list. + +There are companies from all over the world on that list, of all shapes and sizes, including cloud natives and cloud newbies, brand new startups and fast-growing scale-ups, airlines, banks, and healthcare companies, along with online retailers, gaming studios, digital entertainment platforms, and hundred-year-old government consulting firms. + +But no matter how different their industries, their business models, their engineering cultures, or their tech stacks, when they join that list of public Backstage adopters, they all share one thing in common: their commitment to improving developer experience as the surest path to innovation. So while the file is just a simple table, it's also an invitation for other companies to join in that commitment. + +This year, the following companies added themselves to ADOPTERS.md, bringing the total to 278 public Backstage adopters — let's give a big welcome to: [Anuclei](https://anuclei.com), [Fortnox](https://www.fortnox.se), [Wefox](https://www.wefox.com), [Aurora Innovation](https://aurorainnovation.com), [ENSEK](https://ensek.com/), [OP Financial Group](https://www.op.fi/op-financial-group), [Scania](https://www.scania.com), [Senora.dev](https://senora.dev), [Covestro](https://www.covestro.com), [Grupo OLX](https://www.olx.com.br/), [DPG Media](https://www.dpgmediagroup.com), [Baloise](https://www.baloise.ch), [Cigna](https://www.cigna.com/), [Evernorth](https://www.evernorth.com/), [Infobip](https://www.infobip.com/), [CloudScript](https://www.cloudscript.com.br/), [Alauda](https://www.alauda.io/), [New10](https://www.new10.com/), [Tele2 Kazakhstan](https://tele2.kz/), [Altel Digital](https://digital.altel.kz/), and [Axelerant](https://www.axelerant.com/). + +### Plus, thousands more in the wild + +The companies on that list represent just a fraction of the active Backstage adopters out there — we know there are thousands more of you. How do we know? + +We've seen your [amazing talks](https://backstage.io/blog/2024/12/09/kubecon-slc-24/#toyota-and-akamai-in-the-house). We've read your [insightful blog posts](https://backstage.io/blog/2024/09/24/dynatrace-adopter-spotlight/). We've heard your [engaging adoption journeys](https://www.youtube.com/watch?v=nZuEMojNi9A&t=565s). We've enjoyed your [automation workshops](https://philips-labs.github.io/automation-workshop/). And we've celebrated your [well-deserved awards](https://backstage.io/blog/2024/12/09/kubecon-slc-24/#and-the-award-goes-to). + +There are so many different kinds of adopters out there, and so many different ways to share with the community — and we love to see it all. + +### Support the community! Add yourself to ADOPTERS.md + +If you work somewhere that's using Backstage, don't be shy. Jump into 2025 by [adding your company](https://github.com/backstage/backstage/blob/master/ADOPTERS.md) to the public adopters list. We love to see you there, and it's a simple but meaningful way to contribute back to the community.🙏 + +--- + +## 2️⃣: 2 Legit 2 Quit: The Official Backstage Certification Launches🎓 + +![Bowie the Backstage Beaver wearing glasses and holding a book pointing at the badge for Certified Backstage Associate](assets/2024-12-18/wrapped2024-2-cba.gif) +_Time to make it official_ + +With the Backstage community growing across so many companies, the need for Backstage experts grows, as well. Now there's an easy way to spot 'em. + +### Become a Certified Backstage Associate (CBA) + +Last month, the CNCF and Linux Foundation Education [announced](https://training.linuxfoundation.org/blog/just-launched-certified-backstage-associate-cba/) the launch of a new certification: [Certified Backstage Associate (CBA)](https://training.linuxfoundation.org/certification/certified-backstage-associate-cba/). So now you can make your expertise for "building on top of the most popular open source IDP" official: + +> Designed for IT engineers, developers, platform engineers, and other IT professionals, the CBA proves you have the mindset and skills to work in and build Backstage tools that improve performance and drive innovation benefiting your career, your team and your organization. + +It's a huge help for Backstage experts and practitioners, as well as all those Backstage adopters (and future adopters) who prioritize developer experience and productivity amid the increasing complexity of modern software development. + +As Pia Nilsson, head of platform developer experience at Spotify, says in the announcement, "With the CNCF's Certified Backstage Associate program, companies now have a way to identify and tap into that expertise, while helping to contribute back to the growing Backstage community." + +### Enroll today! + +The program to become a Certified Backstage Associate is live, so you can [enroll today](https://training.linuxfoundation.org/certification/certified-backstage-associate-cba/)! + +And if you want to see what domains the 90-minute, multiple-choice CBA exam covers — and hear more about how "earning a Backstage certification can be a career game-changer for developers and IT engineer's careers" — makes sure to read the full announcement on the [The Linux Foundation Education blog](https://training.linuxfoundation.org/blog/just-launched-certified-backstage-associate-cba/). + +--- + +## 1️⃣: Version 1.0 of the Future of Backstage🎉 + +![The top half of Bowie the Backstage Beaver sticking out of the top of a portal, the beaver's bottom half sticking out of the bottom of another portal, with Backend System 1.0! written in between the floating halves](assets/2024-12-18/wrapped2024-1-backend.gif) +_And the number one milestone of 2024 is…Backend System 1.0!_ + +As we saw in the video visualizing a year's worth of commits, there were a lot of changes to Backstage in 2024 — including improved documentation, the introduction of the Framework SIG ([join a Backstage special interest group](https://github.com/backstage/community/tree/main/sigs#sig)!), Yarn 4 as the default, our second security audit, a built-in event bus, major new features to the Scaffolder UI (form decorators and retries — shout-out to [Bogdan Nechyporenko](https://github.com/backstage/backstage/blob/master/OWNERS.md#scaffolder) from Bol.com!), big strides in the plugin-building experience in the [New Frontend System](https://youtu.be/BzPCJMQH8tg?list=PL8iP9yIjU0Q3UUDXdAoCaTC4Ci8asWg-X) — and much, much more. And that was just in the last six months. + +But the 1.0 release of the New Backend System was the biggie of the year. + +### The "New Backend System" becomes _the_ backend system + +After months of testing, feedback, and improvements with the community, the New Backend System landed as a [stable v.1.0 release](https://backstage.io/docs/releases/v1.31.0/) in September — marking the beginning of a new era for building for Backstage. + +The New Backend System (which shall henceforth be known as "_the_ backend system") brings a host of improvements to the way that backends and their features are constructed. Instead of the old convention-based structure that could lead to migration pains, features now fit together with dependency injection, like a jigsaw puzzle, while leveraging powerful core services and extending each other dynamically with additional behaviors. + +And this is just scratching the surface of it. To see what else is new in the backend system — check out [the docs](https://backstage.io/docs/backend-system/)! + +We are very excited about this important milestone after a long period of development and refinement together with our passionate community, and hope that you will find it as refreshing and simple yet powerful as it was envisioned to be. This also lays the foundation for us being able to continue iterating at a high pace without incurring undue end user breakages during upgrades. + +### How to migrate your backends and plugins + +We have documentation for both [migrating backends](https://backstage.io/docs/backend-system/building-backends/migrating) and [migrating plugins](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating). If you haven't migrated already, we encourage you to do so as soon as possible, so that all adopters and end users can begin to unlock the benefits of the new system! + +And keep the feedback coming, either on the community [Discord](https://discord.gg/backstage-687207715902193673) or through [issues](https://github.com/backstage/backstage/issues/new/choose) on GitHub. If you're looking for a way to help, take a look at these open issues in the [backstage](https://github.com/backstage/backstage/issues/26353) and [community plugins](https://github.com/backstage/community-plugins/issues/1176) repos about deprecating old backend capabilities of already migrated plugins. To the future we go! + +--- + +## We won! Hooray to the community! 🏆 + +![Bowie the Backstage Beaver standing bashfully on a podium with 2024 flashing behind in big letters](assets/2024-12-18/wrapped2024-infoworld.gif) + +To cap off the year, last week Backstage won the "[InfoWorld 2024 Technology of the Year Award for Software Development: Platforms](https://www.linkedin.com/posts/backstage-from-spotify_infoworlds-2024-technology-of-the-year-award-activity-7273338824561246208-KY-w/)"! + +Congrats to [all the project maintainers](https://github.com/backstage/backstage/blob/master/OWNERS.md), the CNCF, and everyone in the Backstage community — including all our contributors, adopters, partners, and end users. It's great to see developer experience recognized for the critical role it plays in innovation. + +Let's do it again next year! diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-1-backend.gif b/microsite/blog/assets/2024-12-18/wrapped2024-1-backend.gif new file mode 100644 index 0000000000..e95297287d Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-1-backend.gif differ diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-2-cba.gif b/microsite/blog/assets/2024-12-18/wrapped2024-2-cba.gif new file mode 100644 index 0000000000..fb1fc18e6e Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-2-cba.gif differ diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-3-adopters.gif b/microsite/blog/assets/2024-12-18/wrapped2024-3-adopters.gif new file mode 100644 index 0000000000..bbff387eaa Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-3-adopters.gif differ diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-4-plugins.gif b/microsite/blog/assets/2024-12-18/wrapped2024-4-plugins.gif new file mode 100644 index 0000000000..8297c79dba Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-4-plugins.gif differ diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-contribfest.jpg b/microsite/blog/assets/2024-12-18/wrapped2024-contribfest.jpg new file mode 100644 index 0000000000..cd0cafdab1 Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-contribfest.jpg differ diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-infoworld.gif b/microsite/blog/assets/2024-12-18/wrapped2024-infoworld.gif new file mode 100644 index 0000000000..5d1ac13529 Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-infoworld.gif differ diff --git a/microsite/blog/assets/2024-12-18/wrapped2024-top5.png b/microsite/blog/assets/2024-12-18/wrapped2024-top5.png new file mode 100644 index 0000000000..97194ebc2b Binary files /dev/null and b/microsite/blog/assets/2024-12-18/wrapped2024-top5.png differ diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 6197b0463e..c6543f53dd 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -8804,11 +8804,11 @@ __metadata: linkType: hard "nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" bin: nanoid: bin/nanoid.cjs - checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + checksum: dfe0adbc0c77e9655b550c333075f51bb28cfc7568afbf3237249904f9c86c9aaaed1f113f0fddddba75673ee31c758c30c43d4414f014a52a7a626efc5958c9 languageName: node linkType: hard @@ -9836,14 +9836,14 @@ __metadata: linkType: hard "prism-react-renderer@npm:^2.1.0, prism-react-renderer@npm:^2.3.0": - version: 2.4.0 - resolution: "prism-react-renderer@npm:2.4.0" + version: 2.4.1 + resolution: "prism-react-renderer@npm:2.4.1" dependencies: "@types/prismjs": ^1.26.0 clsx: ^2.0.0 peerDependencies: react: ">=16.0.0" - checksum: d15d944a8cbf05f7b04deecd2cf4ffb08229a6027918641b6f046cd8ab24b65ca4ebe4ac8e95a53a7d7cefb1bba8df3ce394fe4f1d75418e34fa92553dc63ef7 + checksum: ddd5490a1335629addde9535db7872f0aee8dbce048818dd6e4c3972c779780af13d669c12d3f2fbb54c5b22d1578e50945099ef1a24dd445f33774e87d85e6e languageName: node linkType: hard diff --git a/packages/canon/.storybook/main.ts b/packages/canon/.storybook/main.ts index 41df32404b..cf7921268e 100644 --- a/packages/canon/.storybook/main.ts +++ b/packages/canon/.storybook/main.ts @@ -1,7 +1,4 @@ import type { StorybookConfig } from '@storybook/react-webpack5'; -import { VanillaExtractPlugin } from '@vanilla-extract/webpack-plugin'; -import { merge } from 'webpack-merge'; - import { join, dirname } from 'path'; /** @@ -28,13 +25,8 @@ const config: StorybookConfig = { framework: { name: getAbsolutePath('@storybook/react-webpack5'), options: { - plugins: [new VanillaExtractPlugin()], + plugins: [], }, }, - webpackFinal: config => { - return merge(config, { - plugins: [new VanillaExtractPlugin()], - }); - }, }; export default config; diff --git a/packages/canon/src/components/Stack/sprinkles.css.ts b/packages/canon/docs/spaceProps.ts similarity index 54% rename from packages/canon/src/components/Stack/sprinkles.css.ts rename to packages/canon/docs/spaceProps.ts index 85c8f83a71..3eb6961bc1 100644 --- a/packages/canon/src/components/Stack/sprinkles.css.ts +++ b/packages/canon/docs/spaceProps.ts @@ -14,20 +14,28 @@ * limitations under the License. */ -import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; -import { breakpoints } from '../../layout/properties'; -import { colorProperties, spacingProperties } from '../../layout/sprinkles.css'; - -const stackProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - properties: { - alignItems: ['stretch', 'flex-start', 'center', 'flex-end'], +export const spacePropsList = [ + 'margin', + 'marginBottom', + 'marginLeft', + 'marginRight', + 'marginTop', + 'marginX', + 'marginY', + 'padding', + 'paddingBottom', + 'paddingLeft', + 'paddingRight', + 'paddingTop', + 'paddingX', + 'paddingY', +].reduce( + (acc: { [key: string]: { type: string[]; responsive: boolean } }, prop) => { + acc[prop] = { + type: ['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl'], + responsive: true, + }; + return acc; }, -}); - -export const stackSprinkles = createSprinkles( - spacingProperties, - colorProperties, - stackProperties, + {}, ); diff --git a/packages/canon/docs/utils/argTypes.ts b/packages/canon/docs/utils/argTypes.ts deleted file mode 100644 index e6a68008f8..0000000000 --- a/packages/canon/docs/utils/argTypes.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { boxProperties } from '../../src/components/Box/sprinkles.css'; -import { - colorProperties, - spacingProperties, -} from '../../src/layout/sprinkles.css'; - -export const listResponsiveValues = ( - value: keyof typeof boxProperties.styles, -) => { - const values = boxProperties.styles[value]; - - if (!values) { - console.warn(`Value "${value}" not found in boxProperties.styles`); - return []; - } - - if ('values' in values) { - return Object.keys(values.values); - } - - return []; -}; - -export const listColorValues = (value: keyof typeof colorProperties.styles) => { - const values = colorProperties.styles[value]; - - if ('values' in values) { - return Object.keys(values.values); - } - - return []; -}; - -export const argTypesSpacing = Object.keys(spacingProperties.styles).reduce< - Record ->((acc, n) => { - acc[n] = { - control: 'inline-radio', - options: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'], - }; - return acc; -}, {}); - -export const argTypesColor = Object.keys(colorProperties.styles).reduce< - Record ->((acc, n) => { - acc[n as keyof typeof colorProperties.styles] = { - control: 'select', - options: Object.keys( - colorProperties.styles[n as keyof typeof colorProperties.styles].values, - ), - }; - return acc; -}, {}); diff --git a/packages/canon/package.json b/packages/canon/package.json index f32e559263..d08f660e7d 100644 --- a/packages/canon/package.json +++ b/packages/canon/package.json @@ -56,17 +56,13 @@ "@testing-library/jest-dom": "^6.0.0", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", - "@vanilla-extract/rollup-plugin": "^1.3.10", - "@vanilla-extract/sprinkles": "^1.6.3", - "@vanilla-extract/webpack-plugin": "^2.3.14", "eslint-plugin-storybook": "^0.11.1", "globals": "^15.11.0", "mini-css-extract-plugin": "^2.9.2", "react": "^18.0.2", "react-dom": "^18.0.2", "react-router-dom": "^6.3.0", - "storybook": "^8.4.7", - "webpack-merge": "^6.0.1" + "storybook": "^8.4.7" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", diff --git a/packages/canon/report.api.md b/packages/canon/report.api.md index e50077c7df..e725d0ac8b 100644 --- a/packages/canon/report.api.md +++ b/packages/canon/report.api.md @@ -5,22 +5,13 @@ ```ts /// -import { Field as Field_2 } from '@base-ui-components/react/field'; import { ForwardRefExoticComponent } from 'react'; -import { Input as Input_2 } from '@base-ui-components/react/input'; import { default as React_2 } from 'react'; import * as React_3 from 'react'; import { RefAttributes } from 'react'; // @public (undocumented) -export type AlignItemsProps = - | 'stretch' - | 'flex-start' - | 'center' - | 'flex-end' - | Partial< - Record - >; +export type AlignItems = 'stretch' | 'start' | 'center' | 'end'; // @public (undocumented) export type AsProps = @@ -42,22 +33,18 @@ export type AsProps = | 'dt'; // @public (undocumented) -export type Background = - | 'background' - | 'elevation1' - | 'elevation2' - | 'transparent' - | Partial< - Record - >; +export type Border = 'none' | 'base' | 'error' | 'warning' | 'selected'; // @public (undocumented) -export type BorderRadiusProps = +export type BorderRadius = | 'none' - | 'small' - | 'medium' - | 'full' - | Partial>; + | '2xs' + | 'xs' + | 'sm' + | 'md' + | 'lg' + | 'xl' + | '2xl'; // @public (undocumented) export const Box: ForwardRefExoticComponent< @@ -65,51 +52,19 @@ export const Box: ForwardRefExoticComponent< >; // @public (undocumented) -export interface BoxProps extends SpaceProps, ColorProps { - // (undocumented) - alignItems?: AlignItemsProps; +export interface BoxProps extends UtilityProps { // (undocumented) as?: keyof JSX.IntrinsicElements; // (undocumented) - borderRadius?: BorderRadiusProps; - // (undocumented) children?: React.ReactNode; // (undocumented) className?: string; // (undocumented) - display?: DisplayProps; - // (undocumented) - flexDirection?: FlexDirectionProps; - // (undocumented) - flexWrap?: FlexWrapProps; - // (undocumented) - justifyContent?: JustifyContentProps; - // (undocumented) style?: React.CSSProperties; } // @public (undocumented) -export type Breakpoint = keyof typeof breakpoints; - -// @public (undocumented) -export const breakpoints: { - xs: {}; - sm: { - '@media': string; - }; - md: { - '@media': string; - }; - lg: { - '@media': string; - }; - xl: { - '@media': string; - }; - '2xl': { - '@media': string; - }; -}; +export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'; // @public (undocumented) export const Button: React_2.ForwardRefExoticComponent< @@ -166,22 +121,7 @@ export interface CheckboxProps { } // @public (undocumented) -export type Color = - | 'primary' - | 'secondary' - | 'error' - | Partial>; - -// @public (undocumented) -export interface ColorProps { - // (undocumented) - background?: Background; - // (undocumented) - color?: Color; -} - -// @public (undocumented) -export type Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12; +export type Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto'; // @public (undocumented) export const Container: React_2.ForwardRefExoticComponent< @@ -189,78 +129,35 @@ export const Container: React_2.ForwardRefExoticComponent< >; // @public (undocumented) -export interface ContainerProps - extends Omit< - SpaceProps, - | 'padding' - | 'paddingLeft' - | 'paddingRight' - | 'paddingX' - | 'margin' - | 'marginLeft' - | 'marginRight' - | 'marginX' - | 'gap' - > { +export interface ContainerProps { // (undocumented) children?: React.ReactNode; // (undocumented) className?: string; // (undocumented) + marginBottom?: SpaceProps['marginBottom']; + // (undocumented) + marginTop?: SpaceProps['marginTop']; + // (undocumented) + marginY?: SpaceProps['marginY']; + // (undocumented) + paddingBottom?: SpaceProps['paddingBottom']; + // (undocumented) + paddingTop?: SpaceProps['paddingTop']; + // (undocumented) + paddingY?: SpaceProps['paddingY']; + // (undocumented) style?: React.CSSProperties; } // @public (undocumented) -export type DisplayProps = - | 'flex' - | 'none' - | 'inline' - | 'block' - | Partial>; +export type Display = 'none' | 'flex' | 'block' | 'inline'; // @public (undocumented) -export const Field: { - Root: React_2.ForwardRefExoticComponent< - Omit, 'ref'> & - React_2.RefAttributes - >; - Label: React_2.ForwardRefExoticComponent< - Omit, 'ref'> & - React_2.RefAttributes - >; - Description: React_2.ForwardRefExoticComponent< - Omit< - Field_2.Description.Props & React_2.RefAttributes, - 'ref' - > & - React_2.RefAttributes - >; - Error: React_2.ForwardRefExoticComponent< - Omit, 'ref'> & - React_2.RefAttributes - >; - Validity: ({ - children, - ...props - }: React_2.ComponentPropsWithoutRef< - typeof Field_2.Validity - >) => React_2.JSX.Element; -}; +export type FlexDirection = 'row' | 'column'; // @public (undocumented) -export type FlexDirectionProps = - | 'row' - | 'column' - | Partial>; - -// @public (undocumented) -export type FlexWrapProps = - | 'wrap' - | 'nowrap' - | Partial>; - -// @public (undocumented) -export type Gap = Space | Partial>; +export type FlexWrap = 'wrap' | 'nowrap' | 'wrap-reverse'; // @public (undocumented) export const Grid: ForwardRefExoticComponent< @@ -278,25 +175,27 @@ export interface GridItemProps { // (undocumented) className?: string; // (undocumented) - colSpan?: Columns | 'full'; + colEnd?: UtilityProps['colEnd']; // (undocumented) - end?: Columns | 'auto'; + colSpan?: UtilityProps['colSpan']; // (undocumented) - rowSpan?: Columns | 'full'; + colStart?: UtilityProps['colStart']; // (undocumented) - start?: Columns | 'auto'; + rowSpan?: UtilityProps['rowSpan']; // (undocumented) style?: React.CSSProperties; } // @public (undocumented) -export interface GridProps extends SpaceProps, ColorProps { +export interface GridProps extends SpaceProps { // (undocumented) children?: React.ReactNode; // (undocumented) className?: string; // (undocumented) - columns?: Columns | Partial>; + columns?: UtilityProps['columns']; + // (undocumented) + gap?: UtilityProps['gap']; // (undocumented) style?: React.CSSProperties; } @@ -339,7 +238,7 @@ export const Inline: ForwardRefExoticComponent< >; // @public (undocumented) -export interface InlineProps extends SpaceProps, ColorProps { +export interface InlineProps extends SpaceProps { // (undocumented) align?: | 'left' @@ -359,124 +258,53 @@ export interface InlineProps extends SpaceProps, ColorProps { // (undocumented) className?: string; // (undocumented) + gap?: UtilityProps['gap']; + // (undocumented) style?: React.CSSProperties; } // @public (undocumented) -export const Input: React_2.ForwardRefExoticComponent< - Omit, 'ref'> & - React_2.RefAttributes ->; - -// @public (undocumented) -export type JustifyContentProps = +export type JustifyContent = | 'stretch' - | 'flex-start' + | 'start' | 'center' - | 'flex-end' - | 'space-around' - | 'space-between' - | Partial< - Record< - Breakpoint, - | 'stretch' - | 'flex-start' - | 'center' - | 'flex-end' - | 'space-around' - | 'space-between' - > - >; + | 'end' + | 'around' + | 'between'; // @public (undocumented) -export type Margin = Space | Partial>; - -// @public (undocumented) -export type MarginBottom = Space | Partial>; - -// @public (undocumented) -export type MarginLeft = Space | Partial>; - -// @public (undocumented) -export type MarginRight = Space | Partial>; - -// @public (undocumented) -export type MarginTop = Space | Partial>; - -// @public (undocumented) -export type MarginX = Space | Partial>; - -// @public (undocumented) -export type MarginY = Space | Partial>; - -// @public (undocumented) -export type Padding = Space | Partial>; - -// @public (undocumented) -export type PaddingBottom = Space | Partial>; - -// @public (undocumented) -export type PaddingLeft = Space | Partial>; - -// @public (undocumented) -export type PaddingRight = Space | Partial>; - -// @public (undocumented) -export type PaddingTop = Space | Partial>; - -// @public (undocumented) -export type PaddingX = Space | Partial>; - -// @public (undocumented) -export type PaddingY = Space | Partial>; - -// @public (undocumented) -export type Space = keyof typeof space; - -// @public (undocumented) -export const space: { - none: number; - '2xs': string; - xs: string; - sm: string; - md: string; - lg: string; - xl: string; - '2xl': string; -}; +export type Space = 'none' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'; // @public (undocumented) export interface SpaceProps { // (undocumented) - gap?: Gap; + margin?: Space | Partial>; // (undocumented) - margin?: Margin; + marginBottom?: Space | Partial>; // (undocumented) - marginBottom?: MarginBottom; + marginLeft?: Space | Partial>; // (undocumented) - marginLeft?: MarginLeft; + marginRight?: Space | Partial>; // (undocumented) - marginRight?: MarginRight; + marginTop?: Space | Partial>; // (undocumented) - marginTop?: MarginTop; + marginX?: Space | Partial>; // (undocumented) - marginX?: MarginX; + marginY?: Space | Partial>; // (undocumented) - marginY?: MarginY; + padding?: Space | Partial>; // (undocumented) - padding?: Padding; + paddingBottom?: Space | Partial>; // (undocumented) - paddingBottom?: PaddingBottom; + paddingLeft?: Space | Partial>; // (undocumented) - paddingLeft?: PaddingLeft; + paddingRight?: Space | Partial>; // (undocumented) - paddingRight?: PaddingRight; + paddingTop?: Space | Partial>; // (undocumented) - paddingTop?: PaddingTop; + paddingX?: Space | Partial>; // (undocumented) - paddingX?: PaddingX; - // (undocumented) - paddingY?: PaddingY; + paddingY?: Space | Partial>; } // @public (undocumented) @@ -485,7 +313,7 @@ export const Stack: ForwardRefExoticComponent< >; // @public (undocumented) -export interface StackProps extends SpaceProps, ColorProps { +export interface StackProps extends SpaceProps { // (undocumented) align?: | 'left' @@ -499,6 +327,8 @@ export interface StackProps extends SpaceProps, ColorProps { // (undocumented) className?: string; // (undocumented) + gap?: UtilityProps['gap']; + // (undocumented) style?: React.CSSProperties; } @@ -545,15 +375,32 @@ export const TableRow: React_3.ForwardRefExoticComponent< >; // @public (undocumented) -export type Theme = keyof typeof themes; - -// @public (undocumented) -export const themes: { - light: { - selector: string; - }; - dark: { - selector: string; - }; -}; +export interface UtilityProps extends SpaceProps { + // (undocumented) + alignItems?: AlignItems | Partial>; + // (undocumented) + border?: Border | Partial>; + // (undocumented) + borderRadius?: BorderRadius | Partial>; + // (undocumented) + colEnd?: Columns | 'auto' | Partial>; + // (undocumented) + colSpan?: Columns | 'full' | Partial>; + // (undocumented) + colStart?: Columns | 'auto' | Partial>; + // (undocumented) + columns?: Columns | Partial>; + // (undocumented) + display?: Display | Partial>; + // (undocumented) + flexDirection?: FlexDirection | Partial>; + // (undocumented) + flexWrap?: FlexWrap | Partial>; + // (undocumented) + gap?: Space | Partial>; + // (undocumented) + justifyContent?: JustifyContent | Partial>; + // (undocumented) + rowSpan?: Columns | 'full' | Partial>; +} ``` diff --git a/packages/canon/src/components/Box/Box.stories.tsx b/packages/canon/src/components/Box/Box.stories.tsx index 6f15d984e1..bd4e597fa0 100644 --- a/packages/canon/src/components/Box/Box.stories.tsx +++ b/packages/canon/src/components/Box/Box.stories.tsx @@ -17,22 +17,8 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { Box } from './Box'; -import { - listResponsiveValues, - argTypesSpacing, - argTypesColor, -} from '../../../docs/utils/argTypes'; -import { boxProperties } from './sprinkles.css'; - -const argTypesBox = Object.keys(boxProperties.styles).reduce< - Record ->((acc, n) => { - acc[n] = { - control: 'select', - options: listResponsiveValues(n as keyof typeof boxProperties.styles), - }; - return acc; -}, {}); +import { Stack } from '../Stack'; +import { Inline } from '../Inline'; const meta = { title: 'Components/Box', @@ -41,9 +27,6 @@ const meta = { layout: 'centered', }, argTypes: { - ...argTypesSpacing, - ...argTypesColor, - ...argTypesBox, as: { control: { type: 'select' }, options: ['div', 'span', 'article', 'section'], @@ -52,132 +35,364 @@ const meta = { control: false, }, }, - args: { - as: 'div', - background: 'elevation1', - borderRadius: 'small', - children: 'Basic Box', - display: 'block', - padding: 'sm', - }, } satisfies Meta; export default meta; type Story = StoryObj; export const Basic: Story = { - args: {}, + args: { + style: { + background: '#1f47ff', + color: 'white', + padding: '4px 8px', + borderRadius: '4px', + }, + children: 'Basic Box', + }, }; -export const Responsive: Story = { - render: () => ( - - Responsive Box - +export const Display: Story = { + args: { + style: { + ...Basic.args?.style, + }, + }, + render: args => ( + + + + Block + + + Flex + + + Inline + + + None + + + + Responsive + + ), }; -export const FlexContainer: Story = { - render: () => ( - - - Item 1 +export const FlexDirection: Story = { + args: { + style: { + ...Basic.args?.style, + }, + display: 'flex', + gap: 'xs', + }, + render: args => ( + + + Row + Row - - Item 2 + + Column + Column - - Item 3 + + Responsive + Flex Direction - + ), }; -export const Nested: Story = { - render: () => ( - - - Header +export const JustifyContent: Story = { + args: { + style: { + ...Basic.args?.style, + width: '200px', + }, + display: 'flex', + gap: 'xs', + }, + render: args => ( + + + Flex Start + + + Center + + + Flex End + + + Space + Around + + + Space + Between - - Sidebar + Responsive + Spacing + + + ), +}; + +export const AlignItems: Story = { + args: { + style: { + ...Basic.args?.style, + width: '200px', + height: '100px', + }, + display: 'flex', + gap: 'xs', + }, + render: args => ( + + + Flex Start + + + Center + + + Flex End + + + Responsive + Spacing + + + ), +}; + +const styleInsideBox = { + background: 'rgb(196, 202, 251)', + color: 'white', + borderRadius: '4px', +}; + +export const Padding: Story = { + args: { + style: { + background: '#1f47ff', + color: 'white', + borderRadius: '4px', + padding: '12px 12px', + }, + }, + render: args => ( + + + + Padding - - Main Content + + Padding X - - - Footer - - + + Padding Y + + + + + Padding Top + + + Padding Right + + + Padding Bottom + + + Padding Left + + + ), }; -export const Alignment: Story = { - render: () => ( - - - Centered Content - - +export const Margin: Story = { + args: { + style: { + background: '#1f47ff', + color: 'white', + borderRadius: '4px', + padding: '12px 12px', + }, + }, + render: args => ( + + + + + Margin + + + + + Margin X + + + + + Margin Y + + + + + + + Margin Top + + + + + Margin Right + + + + + Margin Bottom + + + + + Margin Left + + + + ), }; -// Example showing different spacing combinations -export const Spacing: Story = { - render: () => ( - - - Small Padding +export const FlexWrap: Story = { + args: { + style: { + ...Basic.args?.style, + width: '200px', + }, + display: 'flex', + gap: 'xs', + }, + render: args => ( + + + One + Two + Three + Four + Five + Six - - Medium Padding + + One + Two + Three + Four + Five + Six - - Large Padding + + One + Two + Three + Four + Five + Six - - Mixed Padding - - + ), }; -// Example showing different display values -export const DisplayVariants: Story = { - render: () => ( - - - Display Block +export const BorderRadius: Story = { + args: { + style: { + background: '#1f47ff', + color: 'white', + padding: '4px 8px', + width: '64px', + height: '64px', + }, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + render: args => ( + + + 2xs - - Display Flex + + xs - - Display Inline + + sm - + + md + + + xl + + + 2xl + + + ), +}; + +export const Border: Story = { + args: { + style: { + background: 'var(--canon-surface-1)', + color: 'var(--canon-text-primary)', + padding: '4px 8px', + width: '80px', + height: '32px', + }, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 'xs', + }, + render: args => ( + + + Base + + + Error + + + Warning + + + Selected + + + None + + ), }; diff --git a/packages/canon/src/components/Box/Box.tsx b/packages/canon/src/components/Box/Box.tsx index ecf138f1ce..020f2b6fbb 100644 --- a/packages/canon/src/components/Box/Box.tsx +++ b/packages/canon/src/components/Box/Box.tsx @@ -15,18 +15,18 @@ */ import { createElement, forwardRef } from 'react'; -import { boxSprinkles } from './sprinkles.css'; import { BoxProps } from './types'; +import { getClassNames } from '../../utils/getClassNames'; /** @public */ export const Box = forwardRef((props, ref) => { const { as = 'div', className, style, children, ...restProps } = props; - // Generate the list of class names - const sprinklesClassName = boxSprinkles(restProps); + // Generate utility class names + const utilityClassNames = getClassNames(restProps); // Combine the base class name, the sprinkles class name, and any additional class names - const classNames = ['box', sprinklesClassName, className] + const classNames = ['canon-box', utilityClassNames, className] .filter(Boolean) .join(' '); diff --git a/packages/canon/src/components/Box/Docs.mdx b/packages/canon/src/components/Box/Docs.mdx index af9cd9be76..ee30e17305 100644 --- a/packages/canon/src/components/Box/Docs.mdx +++ b/packages/canon/src/components/Box/Docs.mdx @@ -1,10 +1,8 @@ -import { Meta, Unstyled, Source } from '@storybook/blocks'; +import { Meta, Unstyled, Source, Canvas } from '@storybook/blocks'; import * as BoxStories from './Box.stories'; import { Title, Text } from '../../../docs/components'; -import { Padding } from './docs/padding'; -import { PropsTable, getProps } from '../../../docs/components'; -import { boxProperties } from './sprinkles.css'; -import { spacingProperties } from '../../layout/sprinkles.css'; +import { PropsTable } from '../../../docs/components'; +import { spacePropsList } from '../../../docs/spaceProps'; @@ -32,18 +30,49 @@ import { spacingProperties } from '../../layout/sprinkles.css'; @@ -54,9 +83,9 @@ import { spacingProperties } from '../../layout/sprinkles.css'; avoid collapsing margins but both are available. - + - + Examples Here are some examples of how you can use the Box component. diff --git a/packages/canon/src/components/Box/docs/padding.tsx b/packages/canon/src/components/Box/docs/padding.tsx deleted file mode 100644 index 86a7c801a2..0000000000 --- a/packages/canon/src/components/Box/docs/padding.tsx +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { Inline } from '../../Inline'; -import { Box } from '../Box'; - -const FakeBox = ({ children }: { children: string }) => ( - - {children} - -); - -export const Padding = () => { - return ( - - - - padding - - - paddingX - - - paddingY - - - - - paddingTop - - - paddingBottom - - - paddingLeft - - - paddingRight - - - - ); -}; diff --git a/packages/canon/src/components/Box/index.tsx b/packages/canon/src/components/Box/index.tsx index e4f1867edc..d47e653dfd 100644 --- a/packages/canon/src/components/Box/index.tsx +++ b/packages/canon/src/components/Box/index.tsx @@ -15,4 +15,3 @@ */ export { Box } from './Box'; export type * from './types'; -export { breakpoints, space, themes } from '../../layout/properties'; diff --git a/packages/canon/src/components/Box/sprinkles.css.ts b/packages/canon/src/components/Box/sprinkles.css.ts deleted file mode 100644 index df5664029b..0000000000 --- a/packages/canon/src/components/Box/sprinkles.css.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; -import { breakpoints } from '../../layout/properties'; -import { colorProperties, spacingProperties } from '../../layout/sprinkles.css'; - -export const boxProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - responsiveArray: ['xs', 'sm', 'md', 'lg', 'xl', '2xl'], - properties: { - flexDirection: ['row', 'column'], - justifyContent: [ - 'stretch', - 'flex-start', - 'center', - 'flex-end', - 'space-around', - 'space-between', - ], - alignItems: ['stretch', 'flex-start', 'center', 'flex-end'], - borderRadius: { - none: 0, - small: '4px', - medium: '8px', - full: '9999px', - }, - boxShadow: { - small: 'var(--canon-box-shadow-small)', - medium: 'var(--canon-box-shadow-medium)', - large: 'var(--canon-box-shadow-large)', - }, - border: { - none: 'none', - thin: '1px solid var(--canon-outline)', - error: '1px solid var(--canon-error)', - }, - display: ['none', 'flex', 'block', 'inline'], - flexWrap: ['wrap', 'nowrap'], - }, -}); - -export const boxSprinkles = createSprinkles( - spacingProperties, - boxProperties, - colorProperties, -); diff --git a/packages/canon/src/components/Box/styles.css b/packages/canon/src/components/Box/styles.css index 75fd0dd493..a90ce578cd 100644 --- a/packages/canon/src/components/Box/styles.css +++ b/packages/canon/src/components/Box/styles.css @@ -1,4 +1,4 @@ -.box { +.canon-box { font-family: 'var(--canon-font-regular)'; color: 'var(--canon-text-primary)'; } diff --git a/packages/canon/src/components/Box/types.ts b/packages/canon/src/components/Box/types.ts index 2ba5929fdd..a55c856caf 100644 --- a/packages/canon/src/components/Box/types.ts +++ b/packages/canon/src/components/Box/types.ts @@ -14,76 +14,12 @@ * limitations under the License. */ -import { Breakpoint, SpaceProps, ColorProps } from '../../layout/types'; +import type { UtilityProps } from '../../types'; /** @public */ -export type DisplayProps = - | 'flex' - | 'none' - | 'inline' - | 'block' - | Partial>; - -/** @public */ -export type FlexDirectionProps = - | 'row' - | 'column' - | Partial>; - -/** @public */ -export type FlexWrapProps = - | 'wrap' - | 'nowrap' - | Partial>; - -/** @public */ -export type JustifyContentProps = - | 'stretch' - | 'flex-start' - | 'center' - | 'flex-end' - | 'space-around' - | 'space-between' - | Partial< - Record< - Breakpoint, - | 'stretch' - | 'flex-start' - | 'center' - | 'flex-end' - | 'space-around' - | 'space-between' - > - >; - -/** @public */ -export type AlignItemsProps = - | 'stretch' - | 'flex-start' - | 'center' - | 'flex-end' - | Partial< - Record - >; - -/** @public */ -export type BorderRadiusProps = - | 'none' - | 'small' - | 'medium' - | 'full' - | Partial>; - -/** @public */ -export interface BoxProps extends SpaceProps, ColorProps { +export interface BoxProps extends UtilityProps { as?: keyof JSX.IntrinsicElements; children?: React.ReactNode; - display?: DisplayProps; - flexDirection?: FlexDirectionProps; - flexWrap?: FlexWrapProps; - justifyContent?: JustifyContentProps; - alignItems?: AlignItemsProps; - borderRadius?: BorderRadiusProps; className?: string; style?: React.CSSProperties; } diff --git a/packages/canon/src/components/Button/types.ts b/packages/canon/src/components/Button/types.ts index b9109a66f3..df5caa0f9f 100644 --- a/packages/canon/src/components/Button/types.ts +++ b/packages/canon/src/components/Button/types.ts @@ -14,8 +14,7 @@ * limitations under the License. */ import { IconNames } from '../Icon'; -import { Breakpoint } from '../../layout/types'; - +import type { Breakpoint } from '../../types'; /** * Properties for {@link Button} * diff --git a/packages/canon/src/components/Container/Container.stories.tsx b/packages/canon/src/components/Container/Container.stories.tsx index bedf96ec9e..66c86f638d 100644 --- a/packages/canon/src/components/Container/Container.stories.tsx +++ b/packages/canon/src/components/Container/Container.stories.tsx @@ -17,25 +17,12 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { Box } from '../Box/Box'; -import { argTypesSpacing } from '../../../docs/utils/argTypes'; import { Container } from './Container'; -const argTypesSpacingWithoutLeftAndRight = { ...argTypesSpacing }; -delete argTypesSpacingWithoutLeftAndRight.padding; -delete argTypesSpacingWithoutLeftAndRight.paddingLeft; -delete argTypesSpacingWithoutLeftAndRight.paddingRight; -delete argTypesSpacingWithoutLeftAndRight.paddingX; -delete argTypesSpacingWithoutLeftAndRight.margin; -delete argTypesSpacingWithoutLeftAndRight.marginLeft; -delete argTypesSpacingWithoutLeftAndRight.marginRight; -delete argTypesSpacingWithoutLeftAndRight.marginX; -delete argTypesSpacingWithoutLeftAndRight.gap; - const meta = { title: 'Components/Container', component: Container, argTypes: { - ...argTypesSpacingWithoutLeftAndRight, children: { control: false, }, @@ -53,7 +40,7 @@ type Story = StoryObj; const FakeBox = () => ( ); diff --git a/packages/canon/src/components/Container/Container.tsx b/packages/canon/src/components/Container/Container.tsx index b27775e116..bea7b4caf1 100644 --- a/packages/canon/src/components/Container/Container.tsx +++ b/packages/canon/src/components/Container/Container.tsx @@ -14,22 +14,24 @@ * limitations under the License. */ import React, { forwardRef } from 'react'; -import { containerSprinkles } from './sprinkles.css'; import { ContainerProps } from './types'; +import { getClassNames } from '../../utils/getClassNames'; /** @public */ export const Container = forwardRef( (props, ref) => { const { children, className, style, ...restProps } = props; - const containerClassName = containerSprinkles(restProps); + // Generate utility class names + const utilityClassNames = getClassNames(restProps); + + // Combine the base class name, the sprinkles class name, and any additional class names + const classNames = ['canon-container', utilityClassNames, className] + .filter(Boolean) + .join(' '); return ( -
+
{children}
); diff --git a/packages/canon/src/components/Container/Docs.mdx b/packages/canon/src/components/Container/Docs.mdx index ca81477d44..05a0600813 100644 --- a/packages/canon/src/components/Container/Docs.mdx +++ b/packages/canon/src/components/Container/Docs.mdx @@ -1,8 +1,7 @@ import { Meta, Unstyled, Source } from '@storybook/blocks'; import * as ContainerStories from './Container.stories'; import { Title, Text, PropsTable, getProps } from '../../../docs/components'; -import { spacingProperties } from '../../layout/sprinkles.css'; -import { containerProperties } from './sprinkles.css'; +import { spacePropsList } from '../../../docs/spaceProps'; @@ -28,18 +27,41 @@ import { containerProperties } from './sprinkles.css'; diff --git a/packages/canon/src/components/Container/sprinkles.css.ts b/packages/canon/src/components/Container/sprinkles.css.ts deleted file mode 100644 index 989e369433..0000000000 --- a/packages/canon/src/components/Container/sprinkles.css.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; -import { breakpoints, space } from '../../layout/properties'; -import { colorProperties, spacingProperties } from '../../layout/sprinkles.css'; - -export const containerProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - properties: { - paddingTop: space, - paddingBottom: space, - marginTop: space, - marginBottom: space, - }, - shorthands: { - paddingY: ['paddingTop', 'paddingBottom'], - marginY: ['marginTop', 'marginBottom'], - }, -}); - -export const containerSprinkles = createSprinkles( - spacingProperties, - colorProperties, - containerProperties, -); diff --git a/packages/canon/src/components/Container/styles.css b/packages/canon/src/components/Container/styles.css index 4da813623f..f3ebd64f52 100644 --- a/packages/canon/src/components/Container/styles.css +++ b/packages/canon/src/components/Container/styles.css @@ -1,4 +1,4 @@ -.container { +.canon-container { max-width: var(--canon-container-max-width); margin: 0 auto; padding: 0 var(--canon-container-padding); diff --git a/packages/canon/src/components/Container/types.ts b/packages/canon/src/components/Container/types.ts index b1f414cf30..f9a71ecfa1 100644 --- a/packages/canon/src/components/Container/types.ts +++ b/packages/canon/src/components/Container/types.ts @@ -13,23 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { SpaceProps } from '../../layout/types'; +import { SpaceProps } from '../../types'; /** @public */ -export interface ContainerProps - extends Omit< - SpaceProps, - | 'padding' - | 'paddingLeft' - | 'paddingRight' - | 'paddingX' - | 'margin' - | 'marginLeft' - | 'marginRight' - | 'marginX' - | 'gap' - > { +export interface ContainerProps { children?: React.ReactNode; className?: string; + marginY?: SpaceProps['marginY']; + marginBottom?: SpaceProps['marginBottom']; + marginTop?: SpaceProps['marginTop']; + paddingY?: SpaceProps['paddingY']; + paddingBottom?: SpaceProps['paddingBottom']; + paddingTop?: SpaceProps['paddingTop']; style?: React.CSSProperties; } diff --git a/packages/canon/src/components/Grid/Docs.mdx b/packages/canon/src/components/Grid/Docs.mdx index 14e3bfb922..c1a0237279 100644 --- a/packages/canon/src/components/Grid/Docs.mdx +++ b/packages/canon/src/components/Grid/Docs.mdx @@ -1,7 +1,7 @@ import { Canvas, Meta, Unstyled, Source } from '@storybook/blocks'; import * as GridStories from './Grid.stories'; -import { Title, Text, PropsTable, getProps } from '../../../docs/components'; -import { spacingProperties } from '../../layout/sprinkles.css'; +import { Title, Text, PropsTable } from '../../../docs/components'; +import { spacePropsList } from '../../../docs/spaceProps'; @@ -59,7 +59,7 @@ import { spacingProperties } from '../../layout/sprinkles.css'; The grid component also accepts all the spacing props from the Box component. - + Grid Item diff --git a/packages/canon/src/components/Grid/Grid.stories.tsx b/packages/canon/src/components/Grid/Grid.stories.tsx index bf1bcecfd7..8fa6caec23 100644 --- a/packages/canon/src/components/Grid/Grid.stories.tsx +++ b/packages/canon/src/components/Grid/Grid.stories.tsx @@ -19,15 +19,12 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Grid } from './Grid'; import type { GridItemProps } from './types'; import { Box } from '../Box/Box'; -import { argTypesSpacing, argTypesColor } from '../../../docs/utils/argTypes'; import { Stack } from '../Stack'; const meta = { title: 'Components/Grid', component: Grid, argTypes: { - ...argTypesSpacing, - ...argTypesColor, children: { control: false, }, @@ -45,7 +42,7 @@ type Story = StoryObj; const FakeBox = () => ( ); @@ -105,7 +102,7 @@ export const RowAndColumns: Story = { diff --git a/packages/canon/src/components/Grid/Grid.tsx b/packages/canon/src/components/Grid/Grid.tsx index 2b61d1d3d4..3799a70ae8 100644 --- a/packages/canon/src/components/Grid/Grid.tsx +++ b/packages/canon/src/components/Grid/Grid.tsx @@ -16,62 +16,47 @@ import { createElement, forwardRef } from 'react'; import { GridItemProps, GridProps } from './types'; -import { gridItemSprinkles, gridSprinkles } from './sprinkles.css'; +import { getClassNames } from '../../utils/getClassNames'; const GridBase = forwardRef((props, ref) => { const { children, - columns, gap = 'xs', + columns = 'auto', className, style, ...restProps } = props; - const sprinklesClassName = gridSprinkles({ - ...restProps, - gap, - gridTemplateColumns: columns ? columns : 'auto', - }); + const utilityClassNames = getClassNames({ gap, columns, ...restProps }); - const classNames = ['grid', sprinklesClassName, className] + const classNames = ['canon-grid', utilityClassNames, className] .filter(Boolean) .join(' '); - return createElement( - 'div', - { - ref, - className: classNames, - style, - }, + return createElement('div', { + ref, + className: classNames, + style, children, - ); + }); }); const GridItem = forwardRef((props, ref) => { - const { children, rowSpan, colSpan, start, end, className, style } = props; + const { children, className, style, ...restProps } = props; - const sprinklesClassName = gridItemSprinkles({ - rowSpan, - colSpan, - start, - end, - }); + const utilityClassNames = getClassNames(restProps); - const classNames = ['grid-item', sprinklesClassName, className] + const classNames = ['grid-item', utilityClassNames, className] .filter(Boolean) .join(' '); - return createElement( - 'div', - { - ref, - className: classNames, - style, - }, + return createElement('div', { + ref, + className: classNames, + style, children, - ); + }); }); /** @public */ diff --git a/packages/canon/src/components/Grid/index.ts b/packages/canon/src/components/Grid/index.ts index b07249241c..b2534c6b77 100644 --- a/packages/canon/src/components/Grid/index.ts +++ b/packages/canon/src/components/Grid/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ export { Grid } from './Grid'; -export type { GridProps, GridItemProps, Columns } from './types'; +export type { GridProps, GridItemProps } from './types'; diff --git a/packages/canon/src/components/Grid/sprinkles.css.ts b/packages/canon/src/components/Grid/sprinkles.css.ts deleted file mode 100644 index aff5a340ed..0000000000 --- a/packages/canon/src/components/Grid/sprinkles.css.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; -import { breakpoints } from '../../layout/properties'; -import { colorProperties, spacingProperties } from '../../layout/sprinkles.css'; - -const gridProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - properties: { - gridTemplateColumns: { - 1: 'repeat(1, minmax(0, 1fr))', - 2: 'repeat(2, minmax(0, 1fr))', - 3: 'repeat(3, minmax(0, 1fr))', - 4: 'repeat(4, minmax(0, 1fr))', - 5: 'repeat(5, minmax(0, 1fr))', - 6: 'repeat(6, minmax(0, 1fr))', - 7: 'repeat(7, minmax(0, 1fr))', - 8: 'repeat(8, minmax(0, 1fr))', - 9: 'repeat(9, minmax(0, 1fr))', - 10: 'repeat(10, minmax(0, 1fr))', - 11: 'repeat(11, minmax(0, 1fr))', - 12: 'repeat(12, minmax(0, 1fr))', - auto: 'repeat(auto-fit, minmax(0, 1fr))', - }, - }, - shorthands: { - columns: ['gridTemplateColumns'], - }, -}); - -export const gridSprinkles = createSprinkles( - spacingProperties, - colorProperties, - gridProperties, -); - -const gridItemProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - properties: { - gridColumn: { - 1: 'span 1 / span 1', - 2: 'span 2 / span 2', - 3: 'span 3 / span 3', - 4: 'span 4 / span 4', - 5: 'span 5 / span 5', - 6: 'span 6 / span 6', - 7: 'span 7 / span 7', - 8: 'span 8 / span 8', - 9: 'span 9 / span 9', - 10: 'span 10 / span 10', - 11: 'span 11 / span 11', - 12: 'span 12 / span 12', - full: '1 / -1', - }, - gridRow: { - 1: 'span 1 / span 1', - 2: 'span 2 / span 2', - 3: 'span 3 / span 3', - 4: 'span 4 / span 4', - 5: 'span 5 / span 5', - 6: 'span 6 / span 6', - 7: 'span 7 / span 7', - 8: 'span 8 / span 8', - 9: 'span 9 / span 9', - 10: 'span 10 / span 10', - 11: 'span 11 / span 11', - 12: 'span 12 / span 12', - full: '1 / -1', - }, - gridColumnStart: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - 13: '13', - auto: 'auto', - }, - gridColumnEnd: { - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - 13: '13', - auto: 'auto', - }, - }, - shorthands: { - colSpan: ['gridColumn'], - rowSpan: ['gridRow'], - start: ['gridColumnStart'], - end: ['gridColumnEnd'], - }, -}); - -export const gridItemSprinkles = createSprinkles( - colorProperties, - gridItemProperties, -); diff --git a/packages/canon/src/components/Grid/styles.css b/packages/canon/src/components/Grid/styles.css index 81f8d5471d..8314f896bc 100644 --- a/packages/canon/src/components/Grid/styles.css +++ b/packages/canon/src/components/Grid/styles.css @@ -1,3 +1,3 @@ -.grid { +.canon-grid { display: grid; } diff --git a/packages/canon/src/components/Grid/types.ts b/packages/canon/src/components/Grid/types.ts index 87edbd75bf..4e154f03b7 100644 --- a/packages/canon/src/components/Grid/types.ts +++ b/packages/canon/src/components/Grid/types.ts @@ -13,27 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Breakpoint, ColorProps } from '../../layout/types'; -import { SpaceProps } from '../../layout/types'; + +import type { UtilityProps, SpaceProps } from '../../types'; /** @public */ -export type Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12; - -/** @public */ -export interface GridProps extends SpaceProps, ColorProps { +export interface GridProps extends SpaceProps { children?: React.ReactNode; - columns?: Columns | Partial>; className?: string; + columns?: UtilityProps['columns']; + gap?: UtilityProps['gap']; style?: React.CSSProperties; } /** @public */ export interface GridItemProps { children: React.ReactNode; - rowSpan?: Columns | 'full'; - colSpan?: Columns | 'full'; - start?: Columns | 'auto'; - end?: Columns | 'auto'; className?: string; + colSpan?: UtilityProps['colSpan']; + colEnd?: UtilityProps['colEnd']; + colStart?: UtilityProps['colStart']; + rowSpan?: UtilityProps['rowSpan']; style?: React.CSSProperties; } diff --git a/packages/canon/src/components/Heading/types.ts b/packages/canon/src/components/Heading/types.ts index fb37cf6414..7a9a44560c 100644 --- a/packages/canon/src/components/Heading/types.ts +++ b/packages/canon/src/components/Heading/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Breakpoint } from '../../layout/types'; +import { Breakpoint } from '../../types'; /** @public */ export interface HeadingProps { diff --git a/packages/canon/src/components/Inline/Docs.mdx b/packages/canon/src/components/Inline/Docs.mdx index 8ff19747f0..7671122966 100644 --- a/packages/canon/src/components/Inline/Docs.mdx +++ b/packages/canon/src/components/Inline/Docs.mdx @@ -1,8 +1,7 @@ import { Meta, Unstyled, Source } from '@storybook/blocks'; import * as InlineStories from './Inline.stories'; import { Title, Text, PropsTable, getProps } from '../../../docs/components'; -import { spacingProperties } from '../../layout/sprinkles.css'; -import { inlineProperties } from './sprinkles.css'; +import { spacePropsList } from '../../../docs/spaceProps'; @@ -34,11 +33,11 @@ import { inlineProperties } from './sprinkles.css'; - + Examples diff --git a/packages/canon/src/components/Inline/Inline.stories.tsx b/packages/canon/src/components/Inline/Inline.stories.tsx index 613fd68c68..b6653a3067 100644 --- a/packages/canon/src/components/Inline/Inline.stories.tsx +++ b/packages/canon/src/components/Inline/Inline.stories.tsx @@ -18,14 +18,11 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { Inline } from './Inline'; import { Box } from '../Box/Box'; -import { argTypesSpacing, argTypesColor } from '../../../docs/utils/argTypes'; const meta = { title: 'Components/Inline', component: Inline, argTypes: { - ...argTypesSpacing, - ...argTypesColor, align: { control: 'inline-radio', options: ['left', 'center', 'right'], @@ -49,6 +46,41 @@ const meta = { export default meta; type Story = StoryObj; +const fakeBlockList = [ + { width: 45, height: 60 }, + { width: 150, height: 75 }, + { width: 80, height: 50 }, + { width: 120, height: 70 }, + { width: 95, height: 65 }, + { width: 110, height: 55 }, + { width: 130, height: 60 }, + { width: 100, height: 80 }, + { width: 140, height: 45 }, + { width: 85, height: 70 }, + { width: 125, height: 50 }, + { width: 105, height: 75 }, + { width: 115, height: 65 }, + { width: 135, height: 55 }, + { width: 90, height: 60 }, + { width: 145, height: 80 }, + { width: 75, height: 45 }, + { width: 155, height: 70 }, + { width: 60, height: 50 }, + { width: 160, height: 75 }, + { width: 70, height: 65 }, + { width: 150, height: 55 }, + { width: 95, height: 60 }, + { width: 120, height: 80 }, + { width: 85, height: 45 }, + { width: 130, height: 70 }, + { width: 100, height: 50 }, + { width: 140, height: 75 }, + { width: 110, height: 65 }, + { width: 125, height: 55 }, + { width: 105, height: 60 }, + { width: 145, height: 80 }, +]; + const FakeBox = ({ width = 120, height = 80, @@ -57,7 +89,7 @@ const FakeBox = ({ height?: number; }) => ( ); @@ -66,12 +98,8 @@ export const Default: Story = { args: { children: ( <> - {Array.from({ length: 32 }).map((_, index) => ( - + {fakeBlockList.map((block, index) => ( + ))} ), diff --git a/packages/canon/src/components/Inline/Inline.tsx b/packages/canon/src/components/Inline/Inline.tsx index b583b2ae08..b3aaeaf082 100644 --- a/packages/canon/src/components/Inline/Inline.tsx +++ b/packages/canon/src/components/Inline/Inline.tsx @@ -15,21 +15,43 @@ */ import { createElement, forwardRef } from 'react'; -import { inlineSprinkles } from './sprinkles.css'; import type { InlineProps } from './types'; +import { getClassNames } from '../../utils/getClassNames'; +import { JustifyContent, Breakpoint, AlignItems } from '../../types'; -const alignYToFlexAlign = (alignY: InlineProps['alignY']) => { - if (alignY === 'top') return 'flex-start'; - if (alignY === 'center') return 'center'; - if (alignY === 'bottom') return 'flex-end'; - return undefined; +// Function to map align values +const mapAlignValue = (value?: InlineProps['align']) => { + if (typeof value === 'string') { + let returnedValue: JustifyContent = 'stretch'; + if (value === 'left') returnedValue = 'start'; + if (value === 'center') returnedValue = 'center'; + if (value === 'right') returnedValue = 'end'; + return returnedValue; + } else if (typeof value === 'object') { + const returnedValue: Partial> = {}; + for (const [key, val] of Object.entries(value)) { + returnedValue[key as Breakpoint] = mapAlignValue(val) as JustifyContent; + } + return returnedValue; + } + return 'stretch'; }; -const alignToFlexAlignY = (align: InlineProps['align']) => { - if (align === 'left') return 'flex-start'; - if (align === 'center') return 'center'; - if (align === 'right') return 'flex-end'; - return undefined; +const mapAlignYValue = (value?: InlineProps['alignY']) => { + if (typeof value === 'string') { + let returnedValue: AlignItems = 'stretch'; + if (value === 'top') returnedValue = 'start'; + if (value === 'center') returnedValue = 'center'; + if (value === 'bottom') returnedValue = 'end'; + return returnedValue; + } else if (typeof value === 'object') { + const returnedValue: Partial> = {}; + for (const [key, val] of Object.entries(value)) { + returnedValue[key as Breakpoint] = mapAlignYValue(val) as AlignItems; + } + return returnedValue; + } + return 'stretch'; }; /** @public */ @@ -45,16 +67,16 @@ export const Inline = forwardRef((props, ref) => { ...restProps } = props; - // Generate the list of class names - const sprinklesClassName = inlineSprinkles({ - ...restProps, + // Generate utility class names + const utilityClassNames = getClassNames({ gap, - alignItems: alignYToFlexAlign(alignY), - justifyContent: alignToFlexAlignY(align), + alignItems: mapAlignYValue(alignY), + justifyContent: mapAlignValue(align), + ...restProps, }); // Combine the base class name, the sprinkles class name, and any additional class names - const classNames = ['inline', sprinklesClassName, className] + const classNames = ['canon-inline', utilityClassNames, className] .filter(Boolean) .join(' '); diff --git a/packages/canon/src/components/Inline/styles.css b/packages/canon/src/components/Inline/styles.css index fb9b1c3825..bafd29bf53 100644 --- a/packages/canon/src/components/Inline/styles.css +++ b/packages/canon/src/components/Inline/styles.css @@ -1,4 +1,4 @@ -.inline { +.canon-inline { display: flex; flex-wrap: wrap; } diff --git a/packages/canon/src/components/Inline/types.ts b/packages/canon/src/components/Inline/types.ts index 3d981d0d31..c86f500018 100644 --- a/packages/canon/src/components/Inline/types.ts +++ b/packages/canon/src/components/Inline/types.ts @@ -14,13 +14,18 @@ * limitations under the License. */ -import { AsProps, Breakpoint, ColorProps } from '../../layout/types'; -import { SpaceProps } from '../../layout/types'; +import type { + SpaceProps, + UtilityProps, + AsProps, + Breakpoint, +} from '../../types'; /** @public */ -export interface InlineProps extends SpaceProps, ColorProps { +export interface InlineProps extends SpaceProps { children: React.ReactNode; as?: AsProps; + gap?: UtilityProps['gap']; align?: | 'left' | 'center' diff --git a/packages/canon/src/components/Stack/Docs.mdx b/packages/canon/src/components/Stack/Docs.mdx index f1776e0262..921618f49f 100644 --- a/packages/canon/src/components/Stack/Docs.mdx +++ b/packages/canon/src/components/Stack/Docs.mdx @@ -1,7 +1,7 @@ import { Meta, Unstyled, Source } from '@storybook/blocks'; import * as StackStories from './Stack.stories'; import { Title, Text, PropsTable, getProps } from '../../../docs/components'; -import { spacingProperties } from '../../layout/sprinkles.css'; +import { spacePropsList } from '../../../docs/spaceProps'; @@ -33,7 +33,7 @@ import { spacingProperties } from '../../layout/sprinkles.css'; - + Common questions diff --git a/packages/canon/src/components/Stack/Stack.stories.tsx b/packages/canon/src/components/Stack/Stack.stories.tsx index 331c2ee1e1..7e77bc861d 100644 --- a/packages/canon/src/components/Stack/Stack.stories.tsx +++ b/packages/canon/src/components/Stack/Stack.stories.tsx @@ -18,14 +18,11 @@ import React from 'react'; import type { Meta, StoryObj } from '@storybook/react'; import { Stack } from './Stack'; import { Box } from '../Box/Box'; -import { argTypesSpacing, argTypesColor } from '../../../docs/utils/argTypes'; const meta = { title: 'Components/Stack', component: Stack, argTypes: { - ...argTypesSpacing, - ...argTypesColor, align: { control: 'inline-radio', options: ['left', 'center', 'right'], @@ -53,7 +50,7 @@ const FakeBox = () => ( Fake Box diff --git a/packages/canon/src/components/Stack/Stack.tsx b/packages/canon/src/components/Stack/Stack.tsx index e0c36f2043..522782daac 100644 --- a/packages/canon/src/components/Stack/Stack.tsx +++ b/packages/canon/src/components/Stack/Stack.tsx @@ -16,13 +16,25 @@ import { createElement, forwardRef } from 'react'; import { StackProps } from './types'; -import { stackSprinkles } from './sprinkles.css'; +import { getClassNames } from '../../utils/getClassNames'; +import type { AlignItems, Breakpoint } from '../../types'; -const alignToFlexAlign = (align: StackProps['align']) => { - if (align === 'left') return 'stretch'; - if (align === 'center') return 'center'; - if (align === 'right') return 'flex-end'; - return undefined; +// Function to map align values +const mapAlignValue = (value?: StackProps['align']) => { + if (typeof value === 'string') { + let returnedValue: AlignItems = 'stretch'; + if (value === 'left') returnedValue = 'stretch'; + if (value === 'center') returnedValue = 'center'; + if (value === 'right') returnedValue = 'end'; + return returnedValue; + } else if (typeof value === 'object') { + const returnedValue: Partial> = {}; + for (const [key, val] of Object.entries(value)) { + returnedValue[key as Breakpoint] = mapAlignValue(val) as AlignItems; + } + return returnedValue; + } + return 'stretch'; }; /** @public */ @@ -37,18 +49,15 @@ export const Stack = forwardRef((props, ref) => { ...restProps } = props; - // Transform the align prop - const flexAlign = alignToFlexAlign(align); - - // Generate the list of class names - const sprinklesClassName = stackSprinkles({ - ...restProps, + // Generate utility class names + const utilityClassNames = getClassNames({ gap, - alignItems: flexAlign, + alignItems: mapAlignValue(align), + ...restProps, }); // Combine the base class name, the sprinkles class name, and any additional class names - const classNames = ['stack', sprinklesClassName, className] + const classNames = ['canon-stack', utilityClassNames, className] .filter(Boolean) .join(' '); diff --git a/packages/canon/src/components/Stack/styles.css b/packages/canon/src/components/Stack/styles.css index 784fd3b1ab..fa5c3f7e5d 100644 --- a/packages/canon/src/components/Stack/styles.css +++ b/packages/canon/src/components/Stack/styles.css @@ -1,4 +1,4 @@ -.stack { +.canon-stack { display: flex; flex-direction: column; } diff --git a/packages/canon/src/components/Stack/types.ts b/packages/canon/src/components/Stack/types.ts index 529e92d1bd..bccdc59a57 100644 --- a/packages/canon/src/components/Stack/types.ts +++ b/packages/canon/src/components/Stack/types.ts @@ -13,13 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { AsProps, Breakpoint, ColorProps } from '../../layout/types'; -import { SpaceProps } from '../../layout/types'; + +import type { + SpaceProps, + UtilityProps, + AsProps, + Breakpoint, +} from '../../types'; /** @public */ -export interface StackProps extends SpaceProps, ColorProps { +export interface StackProps extends SpaceProps { children: React.ReactNode; as?: AsProps; + gap?: UtilityProps['gap']; align?: | 'left' | 'center' diff --git a/packages/canon/src/components/Text/types.ts b/packages/canon/src/components/Text/types.ts index b054fdf2cf..d3232e1d67 100644 --- a/packages/canon/src/components/Text/types.ts +++ b/packages/canon/src/components/Text/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Breakpoint } from '../../layout/types'; +import type { Breakpoint } from '../../types'; /** @public */ export interface TextProps { diff --git a/packages/canon/src/contexts/canon.tsx b/packages/canon/src/contexts/canon.tsx index 2116d60168..a8c21e8fa9 100644 --- a/packages/canon/src/contexts/canon.tsx +++ b/packages/canon/src/contexts/canon.tsx @@ -18,21 +18,14 @@ import React, { createContext, useContext, ReactNode } from 'react'; import { IconMap, IconNames } from '../components/Icon/types'; import { defaultIcons } from '../components/Icon/icons'; import { useMediaQuery } from '../hooks/useMediaQuery'; -import { Breakpoints } from '../types'; - -const defaultBreakpoints: Breakpoints = { - xs: '0px', - sm: '640px', - md: '768px', - lg: '1024px', - xl: '1280px', - '2xl': '1536px', -}; +import type { Breakpoint } from '../types'; interface CanonContextProps { icons: IconMap; - breakpoint: keyof Breakpoints; - getResponsiveValue: (value: string | Partial) => string; + breakpoint: Breakpoint; + getResponsiveValue: ( + value: string | Partial>, + ) => string; } const CanonContext = createContext({ @@ -44,21 +37,20 @@ const CanonContext = createContext({ interface CanonProviderProps { children?: ReactNode; overrides?: Partial>; - breakpoints?: Partial; } /** @public */ export const CanonProvider = (props: CanonProviderProps) => { - const { children, overrides, breakpoints = defaultBreakpoints } = props; + const { children, overrides } = props; // Merge provided overrides with default icons const combinedIcons = { ...defaultIcons, ...overrides }; - const isBreakpointSm = useMediaQuery(`(min-width: ${breakpoints.sm})`); - const isBreakpointMd = useMediaQuery(`(min-width: ${breakpoints.md})`); - const isBreakpointLg = useMediaQuery(`(min-width: ${breakpoints.lg})`); - const isBreakpointXl = useMediaQuery(`(min-width: ${breakpoints.xl})`); - const isBreakpoint2xl = useMediaQuery(`(min-width: ${breakpoints['2xl']})`); + const isBreakpointSm = useMediaQuery(`(min-width: 640px)`); + const isBreakpointMd = useMediaQuery(`(min-width: 768px)`); + const isBreakpointLg = useMediaQuery(`(min-width: 1024px)`); + const isBreakpointXl = useMediaQuery(`(min-width: 1280px)`); + const isBreakpoint2xl = useMediaQuery(`(min-width: 1536px)`); // Determine the current breakpoint const breakpoint = (() => { @@ -70,9 +62,11 @@ export const CanonProvider = (props: CanonProviderProps) => { return 'xs'; })(); - const getResponsiveValue = (value: string | Partial) => { + const getResponsiveValue = ( + value: string | Partial>, + ) => { if (typeof value === 'object') { - const breakpointsOrder: (keyof Breakpoints)[] = [ + const breakpointsOrder: Breakpoint[] = [ 'xs', 'sm', 'md', diff --git a/packages/canon/src/css/base.css b/packages/canon/src/css/base.css new file mode 100644 index 0000000000..f2bf6b3363 --- /dev/null +++ b/packages/canon/src/css/base.css @@ -0,0 +1,26 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer base { + @import './normalize.css'; + + *, + html, + body { + font-family: var(--canon-font-regular); + font-weight: var(--canon-font-weight-regular); + } +} diff --git a/packages/canon/src/css/core.css b/packages/canon/src/css/core.css index 2a3f2de61c..9f8dcfff19 100644 --- a/packages/canon/src/css/core.css +++ b/packages/canon/src/css/core.css @@ -15,14 +15,8 @@ */ /* Normalize */ -@import './normalize.css'; - -*, -html, -body { - font-family: var(--canon-font-regular); - font-weight: var(--canon-font-weight-regular); -} +@import './base.css'; +@import './utilities.css'; /* Light theme tokens */ :root { @@ -33,10 +27,11 @@ body { --canon-surface-2: #f4f4f4; --canon-surface-3: #f1f1f1; - /* Outlines */ - --canon-outline: rgba(0, 0, 0, 0.1); - --canon-outline-hover: rgba(0, 0, 0, 0.2); - --canon-outline-focus: #000; + /* Borders */ + --canon-border-base: rgba(0, 0, 0, 0.1); + --canon-border-warning: #e36d05; + --canon-border-error: #e22b2b; + --canon-border-selected: #1db954; /* States - Add more states */ --canon-error: #f50000; @@ -47,9 +42,9 @@ body { --canon-text-secondary: #646464; /* Box shadows */ - --canon-box-shadow-small: 0 0 0 1px rgba(0, 0, 0, 0.05); - --canon-box-shadow-medium: 0 0 0 1px rgba(0, 0, 0, 0.1); - --canon-box-shadow-large: 0 0 0 1px rgba(0, 0, 0, 0.2); + /* --canon-box-shadow-small: 0 0 0 1px rgba(0, 0, 0, 0.05); */ + /* --canon-box-shadow-medium: 0 0 0 1px rgba(0, 0, 0, 0.1); */ + /* --canon-box-shadow-large: 0 0 0 1px rgba(0, 0, 0, 0.2); */ /* Font families */ --canon-font-regular: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, @@ -108,10 +103,11 @@ body { --canon-surface-1: #121212; --canon-surface-2: #1a1a1a; - /* Outlines */ - --canon-outline: rgba(255, 255, 255, 0.2); - --canon-outline-hover: rgba(255, 255, 255, 0.4); - --canon-outline-focus: #fff; + /* Borders */ + --canon-border-base: rgba(255, 255, 255, 0.2); + --canon-border-warning: #f50000; + --canon-border-error: #f87503; + --canon-border-selected: #25d262; /* States - Add more states */ --canon-error: #f50000; diff --git a/packages/canon/src/components/Inline/sprinkles.css.ts b/packages/canon/src/css/utilities.css similarity index 51% rename from packages/canon/src/components/Inline/sprinkles.css.ts rename to packages/canon/src/css/utilities.css index ccd4126608..ad4a8d03b4 100644 --- a/packages/canon/src/components/Inline/sprinkles.css.ts +++ b/packages/canon/src/css/utilities.css @@ -14,21 +14,20 @@ * limitations under the License. */ -import { defineProperties, createSprinkles } from '@vanilla-extract/sprinkles'; -import { breakpoints } from '../../layout/properties'; -import { colorProperties, spacingProperties } from '../../layout/sprinkles.css'; +/* Default utilities */ +@import './utilities/xs.css'; -export const inlineProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - properties: { - alignItems: ['flex-start', 'center', 'flex-end'], - justifyContent: ['flex-start', 'center', 'flex-end'], - }, -}); +/* Min 640px */ +@import './utilities/sm.css'; -export const inlineSprinkles = createSprinkles( - spacingProperties, - colorProperties, - inlineProperties, -); +/* Min 768px */ +@import './utilities/md.css'; + +/* Min 1024px */ +@import './utilities/lg.css'; + +/* Min 1280px */ +@import './utilities/xl.css'; + +/* Min 1536px */ +@import './utilities/2xl.css'; diff --git a/packages/canon/src/css/utilities/2xl.css b/packages/canon/src/css/utilities/2xl.css new file mode 100644 index 0000000000..8938d0dbc5 --- /dev/null +++ b/packages/canon/src/css/utilities/2xl.css @@ -0,0 +1,884 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer utilities { + @media (min-width: 1536px) { + .cu-2xl-block { + display: block; + } + + .cu-2xl-border-base { + border-color: var(--canon-border-base); + border-width: 1px; + border-style: solid; + } + + .cu-2xl-border-error { + border-color: var(--canon-border-error); + border-width: 1px; + border-style: solid; + } + + .cu-2xl-border-none { + border-color: transparent; + border-width: 0; + } + + .cu-2xl-border-selected { + border-color: var(--canon-border-selected); + border-width: 1px; + border-style: solid; + } + + .cu-2xl-border-warning { + border-color: var(--canon-border-warning); + border-width: 1px; + border-style: solid; + } + + .cu-2xl-col-end-1 { + grid-column-end: 1; + } + + .cu-2xl-col-end-10 { + grid-column-end: 10; + } + + .cu-2xl-col-end-11 { + grid-column-end: 11; + } + + .cu-2xl-col-end-12 { + grid-column-end: 12; + } + + .cu-2xl-col-end-13 { + grid-column-end: 13; + } + + .cu-2xl-col-end-2 { + grid-column-end: 2; + } + + .cu-2xl-col-end-3 { + grid-column-end: 3; + } + + .cu-2xl-col-end-4 { + grid-column-end: 4; + } + + .cu-2xl-col-end-5 { + grid-column-end: 5; + } + + .cu-2xl-col-end-6 { + grid-column-end: 6; + } + + .cu-2xl-col-end-7 { + grid-column-end: 7; + } + + .cu-2xl-col-end-8 { + grid-column-end: 8; + } + + .cu-2xl-col-end-9 { + grid-column-end: 9; + } + + .cu-2xl-col-end-auto { + grid-column-end: auto; + } + + .cu-2xl-col-span-1 { + grid-column: span 1 / span 1; + } + + .cu-2xl-col-span-10 { + grid-column: span 10 / span 10; + } + + .cu-2xl-col-span-11 { + grid-column: span 11 / span 11; + } + + .cu-2xl-col-span-12 { + grid-column: span 12 / span 12; + } + + .cu-2xl-col-span-2 { + grid-column: span 2 / span 2; + } + + .cu-2xl-col-span-3 { + grid-column: span 3 / span 3; + } + + .cu-2xl-col-span-4 { + grid-column: span 4 / span 4; + } + + .cu-2xl-col-span-5 { + grid-column: span 5 / span 5; + } + + .cu-2xl-col-span-6 { + grid-column: span 6 / span 6; + } + + .cu-2xl-col-span-7 { + grid-column: span 7 / span 7; + } + + .cu-2xl-col-span-8 { + grid-column: span 8 / span 8; + } + + .cu-2xl-col-span-9 { + grid-column: span 9 / span 9; + } + + .cu-2xl-col-span-auto { + grid-column: span auto / span auto; + } + + .cu-2xl-col-start-1 { + grid-column-start: 1; + } + + .cu-2xl-col-start-10 { + grid-column-start: 10; + } + + .cu-2xl-col-start-11 { + grid-column-start: 11; + } + + .cu-2xl-col-start-12 { + grid-column-start: 12; + } + + .cu-2xl-col-start-13 { + grid-column-start: 13; + } + + .cu-2xl-col-start-2 { + grid-column-start: 2; + } + + .cu-2xl-col-start-3 { + grid-column-start: 3; + } + + .cu-2xl-col-start-4 { + grid-column-start: 4; + } + + .cu-2xl-col-start-5 { + grid-column-start: 5; + } + + .cu-2xl-col-start-6 { + grid-column-start: 6; + } + + .cu-2xl-col-start-7 { + grid-column-start: 7; + } + + .cu-2xl-col-start-8 { + grid-column-start: 8; + } + + .cu-2xl-col-start-9 { + grid-column-start: 9; + } + + .cu-2xl-col-start-auto { + grid-column-start: auto; + } + + .cu-2xl-flex { + display: flex; + } + + .cu-2xl-flex-col { + flex-direction: column; + } + + .cu-2xl-flex-nowrap { + flex-wrap: nowrap; + } + + .cu-2xl-flex-row { + flex-direction: row; + } + + .cu-2xl-flex-wrap { + flex-wrap: wrap; + } + + .cu-2xl-flex-wrap-reverse { + flex-wrap: wrap-reverse; + } + + .cu-2xl-gap-2xl { + gap: var(--canon-spacing-2xl); + } + + .cu-2xl-gap-lg { + gap: var(--canon-spacing-lg); + } + + .cu-2xl-gap-md { + gap: var(--canon-spacing-md); + } + + .cu-2xl-gap-none { + gap: 0; + } + + .cu-2xl-gap-sm { + gap: var(--canon-spacing-sm); + } + + .cu-2xl-gap-xl { + gap: var(--canon-spacing-xl); + } + + .cu-2xl-gap-xs { + gap: var(--canon-spacing-xs); + } + + .cu-2xl-grid { + display: grid; + } + + .cu-2xl-grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-11 { + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-9 { + grid-template-columns: repeat(9, minmax(0, 1fr)); + } + + .cu-2xl-grid-cols-auto { + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); + } + + .cu-2xl-hidden { + display: none; + } + + .cu-2xl-inline { + display: inline; + } + + .cu-2xl-inline-block { + display: inline-block; + } + + .cu-2xl-items-center { + align-items: center; + } + + .cu-2xl-items-end { + align-items: flex-end; + } + + .cu-2xl-items-start { + align-items: flex-start; + } + + .cu-2xl-items-stretch { + align-items: stretch; + } + + .cu-2xl-justify-around { + justify-content: space-around; + } + + .cu-2xl-justify-between { + justify-content: space-between; + } + + .cu-2xl-justify-center { + justify-content: center; + } + + .cu-2xl-justify-end { + justify-content: flex-end; + } + + .cu-2xl-justify-start { + justify-content: flex-start; + } + + .cu-2xl-justify-stretch { + justify-content: stretch; + } + + .cu-2xl-m-2xl { + margin: var(--canon-spacing-2xl); + } + + .cu-2xl-m-lg { + margin: var(--canon-spacing-lg); + } + + .cu-2xl-m-md { + margin: var(--canon-spacing-md); + } + + .cu-2xl-m-none { + margin: 0; + } + + .cu-2xl-m-sm { + margin: var(--canon-spacing-sm); + } + + .cu-2xl-m-xl { + margin: var(--canon-spacing-xl); + } + + .cu-2xl-m-xs { + margin: var(--canon-spacing-xs); + } + + .cu-2xl-mb-2xl { + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-2xl-mb-lg { + margin-bottom: var(--canon-spacing-lg); + } + + .cu-2xl-mb-md { + margin-bottom: var(--canon-spacing-md); + } + + .cu-2xl-mb-none { + margin-bottom: 0; + } + + .cu-2xl-mb-sm { + margin-bottom: var(--canon-spacing-sm); + } + + .cu-2xl-mb-xl { + margin-bottom: var(--canon-spacing-xl); + } + + .cu-2xl-mb-xs { + margin-bottom: var(--canon-spacing-xs); + } + + .cu-2xl-ml-2xl { + margin-left: var(--canon-spacing-2xl); + } + + .cu-2xl-ml-lg { + margin-left: var(--canon-spacing-lg); + } + + .cu-2xl-ml-md { + margin-left: var(--canon-spacing-md); + } + + .cu-2xl-ml-none { + margin-left: 0; + } + + .cu-2xl-ml-sm { + margin-left: var(--canon-spacing-sm); + } + + .cu-2xl-ml-xl { + margin-left: var(--canon-spacing-xl); + } + + .cu-2xl-ml-xs { + margin-left: var(--canon-spacing-xs); + } + + .cu-2xl-mr-2xl { + margin-right: var(--canon-spacing-2xl); + } + + .cu-2xl-mr-lg { + margin-right: var(--canon-spacing-lg); + } + + .cu-2xl-mr-md { + margin-right: var(--canon-spacing-md); + } + + .cu-2xl-mr-none { + margin-right: 0; + } + + .cu-2xl-mr-sm { + margin-right: var(--canon-spacing-sm); + } + + .cu-2xl-mr-xl { + margin-right: var(--canon-spacing-xl); + } + + .cu-2xl-mr-xs { + margin-right: var(--canon-spacing-xs); + } + + .cu-2xl-mt-2xl { + margin-top: var(--canon-spacing-2xl); + } + + .cu-2xl-mt-lg { + margin-top: var(--canon-spacing-lg); + } + + .cu-2xl-mt-md { + margin-top: var(--canon-spacing-md); + } + + .cu-2xl-mt-none { + margin-top: 0; + } + + .cu-2xl-mt-sm { + margin-top: var(--canon-spacing-sm); + } + + .cu-2xl-mt-xl { + margin-top: var(--canon-spacing-xl); + } + + .cu-2xl-mt-xs { + margin-top: var(--canon-spacing-xs); + } + + .cu-2xl-mx-2xl { + margin-left: var(--canon-spacing-2xl); + margin-right: var(--canon-spacing-2xl); + } + + .cu-2xl-mx-lg { + margin-left: var(--canon-spacing-lg); + margin-right: var(--canon-spacing-lg); + } + + .cu-2xl-mx-md { + margin-left: var(--canon-spacing-md); + margin-right: var(--canon-spacing-md); + } + + .cu-2xl-mx-none { + margin-left: 0; + margin-right: 0; + } + + .cu-2xl-mx-sm { + margin-left: var(--canon-spacing-sm); + margin-right: var(--canon-spacing-sm); + } + + .cu-2xl-mx-xl { + margin-left: var(--canon-spacing-xl); + margin-right: var(--canon-spacing-xl); + } + + .cu-2xl-mx-xs { + margin-left: var(--canon-spacing-xs); + margin-right: var(--canon-spacing-xs); + } + + .cu-2xl-my-2xl { + margin-top: var(--canon-spacing-2xl); + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-2xl-my-lg { + margin-top: var(--canon-spacing-lg); + margin-bottom: var(--canon-spacing-lg); + } + + .cu-2xl-my-md { + margin-top: var(--canon-spacing-md); + margin-bottom: var(--canon-spacing-md); + } + + .cu-2xl-my-none { + margin-top: 0; + margin-bottom: 0; + } + + .cu-2xl-my-sm { + margin-top: var(--canon-spacing-sm); + margin-bottom: var(--canon-spacing-sm); + } + + .cu-2xl-my-xl { + margin-top: var(--canon-spacing-xl); + margin-bottom: var(--canon-spacing-xl); + } + + .cu-2xl-my-xs { + margin-top: var(--canon-spacing-xs); + margin-bottom: var(--canon-spacing-xs); + } + + .cu-2xl-p-2xl { + padding: var(--canon-spacing-2xl); + } + + .cu-2xl-p-lg { + padding: var(--canon-spacing-lg); + } + + .cu-2xl-p-md { + padding: var(--canon-spacing-md); + } + + .cu-2xl-p-none { + padding: 0; + } + + .cu-2xl-p-sm { + padding: var(--canon-spacing-sm); + } + + .cu-2xl-p-xl { + padding: var(--canon-spacing-xl); + } + + .cu-2xl-p-xs { + padding: var(--canon-spacing-xs); + } + + .cu-2xl-pb-2xl { + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-2xl-pb-lg { + padding-bottom: var(--canon-spacing-lg); + } + + .cu-2xl-pb-md { + padding-bottom: var(--canon-spacing-md); + } + + .cu-2xl-pb-none { + padding-bottom: 0; + } + + .cu-2xl-pb-sm { + padding-bottom: var(--canon-spacing-sm); + } + + .cu-2xl-pb-xl { + padding-bottom: var(--canon-spacing-xl); + } + + .cu-2xl-pb-xs { + padding-bottom: var(--canon-spacing-xs); + } + + .cu-2xl-pl-2xl { + padding-left: var(--canon-spacing-2xl); + } + + .cu-2xl-pl-lg { + padding-left: var(--canon-spacing-lg); + } + + .cu-2xl-pl-md { + padding-left: var(--canon-spacing-md); + } + + .cu-2xl-pl-none { + padding-left: 0; + } + + .cu-2xl-pl-sm { + padding-left: var(--canon-spacing-sm); + } + + .cu-2xl-pl-xl { + padding-left: var(--canon-spacing-xl); + } + + .cu-2xl-pl-xs { + padding-left: var(--canon-spacing-xs); + } + + .cu-2xl-pr-2xl { + padding-right: var(--canon-spacing-2xl); + } + + .cu-2xl-pr-lg { + padding-right: var(--canon-spacing-lg); + } + + .cu-2xl-pr-md { + padding-right: var(--canon-spacing-md); + } + + .cu-2xl-pr-none { + padding-right: 0; + } + + .cu-2xl-pr-sm { + padding-right: var(--canon-spacing-sm); + } + + .cu-2xl-pr-xl { + padding-right: var(--canon-spacing-xl); + } + + .cu-2xl-pr-xs { + padding-right: var(--canon-spacing-xs); + } + + .cu-2xl-pt-2xl { + padding-top: var(--canon-spacing-2xl); + } + + .cu-2xl-pt-lg { + padding-top: var(--canon-spacing-lg); + } + + .cu-2xl-pt-md { + padding-top: var(--canon-spacing-md); + } + + .cu-2xl-pt-none { + padding-top: 0; + } + + .cu-2xl-pt-sm { + padding-top: var(--canon-spacing-sm); + } + + .cu-2xl-pt-xl { + padding-top: var(--canon-spacing-xl); + } + + .cu-2xl-pt-xs { + padding-top: var(--canon-spacing-xs); + } + + .cu-2xl-px-2xl { + padding-left: var(--canon-spacing-2xl); + padding-right: var(--canon-spacing-2xl); + } + + .cu-2xl-px-lg { + padding-left: var(--canon-spacing-lg); + padding-right: var(--canon-spacing-lg); + } + + .cu-2xl-px-md { + padding-left: var(--canon-spacing-md); + padding-right: var(--canon-spacing-md); + } + + .cu-2xl-px-none { + padding-left: 0; + padding-right: 0; + } + + .cu-2xl-px-sm { + padding-left: var(--canon-spacing-sm); + padding-right: var(--canon-spacing-sm); + } + + .cu-2xl-px-xl { + padding-left: var(--canon-spacing-xl); + padding-right: var(--canon-spacing-xl); + } + + .cu-2xl-px-xs { + padding-left: var(--canon-spacing-xs); + padding-right: var(--canon-spacing-xs); + } + + .cu-2xl-py-2xl { + padding-top: var(--canon-spacing-2xl); + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-2xl-py-lg { + padding-top: var(--canon-spacing-lg); + padding-bottom: var(--canon-spacing-lg); + } + + .cu-2xl-py-md { + padding-top: var(--canon-spacing-md); + padding-bottom: var(--canon-spacing-md); + } + + .cu-2xl-py-none { + padding-top: 0; + padding-bottom: 0; + } + + .cu-2xl-py-sm { + padding-top: var(--canon-spacing-sm); + padding-bottom: var(--canon-spacing-sm); + } + + .cu-2xl-py-xl { + padding-top: var(--canon-spacing-xl); + padding-bottom: var(--canon-spacing-xl); + } + + .cu-2xl-py-xs { + padding-top: var(--canon-spacing-xs); + padding-bottom: var(--canon-spacing-xs); + } + + .cu-2xl-rounded-2xl { + border-radius: var(--canon-border-radius-2xl); + } + + .cu-2xl-rounded-2xs { + border-radius: var(--canon-border-radius-2xs); + } + + .cu-2xl-rounded-lg { + border-radius: var(--canon-border-radius-lg); + } + + .cu-2xl-rounded-md { + border-radius: var(--canon-border-radius-md); + } + + .cu-2xl-rounded-none { + border-radius: 0; + } + + .cu-2xl-rounded-sm { + border-radius: var(--canon-border-radius-sm); + } + + .cu-2xl-rounded-xl { + border-radius: var(--canon-border-radius-xl); + } + + .cu-2xl-rounded-xs { + border-radius: var(--canon-border-radius-xs); + } + + .cu-2xl-row-span-1 { + grid-row: span 1 / span 1; + } + + .cu-2xl-row-span-10 { + grid-row: span 10 / span 10; + } + + .cu-2xl-row-span-11 { + grid-row: span 11 / span 11; + } + + .cu-2xl-row-span-12 { + grid-row: span 12 / span 12; + } + + .cu-2xl-row-span-2 { + grid-row: span 2 / span 2; + } + + .cu-2xl-row-span-3 { + grid-row: span 3 / span 3; + } + + .cu-2xl-row-span-4 { + grid-row: span 4 / span 4; + } + + .cu-2xl-row-span-5 { + grid-row: span 5 / span 5; + } + + .cu-2xl-row-span-6 { + grid-row: span 6 / span 6; + } + + .cu-2xl-row-span-7 { + grid-row: span 7 / span 7; + } + + .cu-2xl-row-span-8 { + grid-row: span 8 / span 8; + } + + .cu-2xl-row-span-9 { + grid-row: span 9 / span 9; + } + + .cu-2xl-row-span-auto { + grid-row: span auto / span auto; + } + + .cu-2xl-wrap-reverse { + flex-wrap: wrap-reverse; + } + } +} diff --git a/packages/canon/src/css/utilities/lg.css b/packages/canon/src/css/utilities/lg.css new file mode 100644 index 0000000000..3053a0dde3 --- /dev/null +++ b/packages/canon/src/css/utilities/lg.css @@ -0,0 +1,884 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer utilities { + @media (min-width: 1024px) { + .cu-lg-block { + display: block; + } + + .cu-lg-border-base { + border-color: var(--canon-border-base); + border-width: 1px; + border-style: solid; + } + + .cu-lg-border-error { + border-color: var(--canon-border-error); + border-width: 1px; + border-style: solid; + } + + .cu-lg-border-none { + border-color: transparent; + border-width: 0; + } + + .cu-lg-border-selected { + border-color: var(--canon-border-selected); + border-width: 1px; + border-style: solid; + } + + .cu-lg-border-warning { + border-color: var(--canon-border-warning); + border-width: 1px; + border-style: solid; + } + + .cu-lg-col-end-1 { + grid-column-end: 1; + } + + .cu-lg-col-end-10 { + grid-column-end: 10; + } + + .cu-lg-col-end-11 { + grid-column-end: 11; + } + + .cu-lg-col-end-12 { + grid-column-end: 12; + } + + .cu-lg-col-end-13 { + grid-column-end: 13; + } + + .cu-lg-col-end-2 { + grid-column-end: 2; + } + + .cu-lg-col-end-3 { + grid-column-end: 3; + } + + .cu-lg-col-end-4 { + grid-column-end: 4; + } + + .cu-lg-col-end-5 { + grid-column-end: 5; + } + + .cu-lg-col-end-6 { + grid-column-end: 6; + } + + .cu-lg-col-end-7 { + grid-column-end: 7; + } + + .cu-lg-col-end-8 { + grid-column-end: 8; + } + + .cu-lg-col-end-9 { + grid-column-end: 9; + } + + .cu-lg-col-end-auto { + grid-column-end: auto; + } + + .cu-lg-col-span-1 { + grid-column: span 1 / span 1; + } + + .cu-lg-col-span-10 { + grid-column: span 10 / span 10; + } + + .cu-lg-col-span-11 { + grid-column: span 11 / span 11; + } + + .cu-lg-col-span-12 { + grid-column: span 12 / span 12; + } + + .cu-lg-col-span-2 { + grid-column: span 2 / span 2; + } + + .cu-lg-col-span-3 { + grid-column: span 3 / span 3; + } + + .cu-lg-col-span-4 { + grid-column: span 4 / span 4; + } + + .cu-lg-col-span-5 { + grid-column: span 5 / span 5; + } + + .cu-lg-col-span-6 { + grid-column: span 6 / span 6; + } + + .cu-lg-col-span-7 { + grid-column: span 7 / span 7; + } + + .cu-lg-col-span-8 { + grid-column: span 8 / span 8; + } + + .cu-lg-col-span-9 { + grid-column: span 9 / span 9; + } + + .cu-lg-col-span-auto { + grid-column: span auto / span auto; + } + + .cu-lg-col-start-1 { + grid-column-start: 1; + } + + .cu-lg-col-start-10 { + grid-column-start: 10; + } + + .cu-lg-col-start-11 { + grid-column-start: 11; + } + + .cu-lg-col-start-12 { + grid-column-start: 12; + } + + .cu-lg-col-start-13 { + grid-column-start: 13; + } + + .cu-lg-col-start-2 { + grid-column-start: 2; + } + + .cu-lg-col-start-3 { + grid-column-start: 3; + } + + .cu-lg-col-start-4 { + grid-column-start: 4; + } + + .cu-lg-col-start-5 { + grid-column-start: 5; + } + + .cu-lg-col-start-6 { + grid-column-start: 6; + } + + .cu-lg-col-start-7 { + grid-column-start: 7; + } + + .cu-lg-col-start-8 { + grid-column-start: 8; + } + + .cu-lg-col-start-9 { + grid-column-start: 9; + } + + .cu-lg-col-start-auto { + grid-column-start: auto; + } + + .cu-lg-flex { + display: flex; + } + + .cu-lg-flex-col { + flex-direction: column; + } + + .cu-lg-flex-nowrap { + flex-wrap: nowrap; + } + + .cu-lg-flex-row { + flex-direction: row; + } + + .cu-lg-flex-wrap { + flex-wrap: wrap; + } + + .cu-lg-flex-wrap-reverse { + flex-wrap: wrap-reverse; + } + + .cu-lg-gap-2xl { + gap: var(--canon-spacing-2xl); + } + + .cu-lg-gap-lg { + gap: var(--canon-spacing-lg); + } + + .cu-lg-gap-md { + gap: var(--canon-spacing-md); + } + + .cu-lg-gap-none { + gap: 0; + } + + .cu-lg-gap-sm { + gap: var(--canon-spacing-sm); + } + + .cu-lg-gap-xl { + gap: var(--canon-spacing-xl); + } + + .cu-lg-gap-xs { + gap: var(--canon-spacing-xs); + } + + .cu-lg-grid { + display: grid; + } + + .cu-lg-grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-11 { + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-9 { + grid-template-columns: repeat(9, minmax(0, 1fr)); + } + + .cu-lg-grid-cols-auto { + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); + } + + .cu-lg-hidden { + display: none; + } + + .cu-lg-inline { + display: inline; + } + + .cu-lg-inline-block { + display: inline-block; + } + + .cu-lg-items-center { + align-items: center; + } + + .cu-lg-items-end { + align-items: flex-end; + } + + .cu-lg-items-start { + align-items: flex-start; + } + + .cu-lg-items-stretch { + align-items: stretch; + } + + .cu-lg-justify-around { + justify-content: space-around; + } + + .cu-lg-justify-between { + justify-content: space-between; + } + + .cu-lg-justify-center { + justify-content: center; + } + + .cu-lg-justify-end { + justify-content: flex-end; + } + + .cu-lg-justify-start { + justify-content: flex-start; + } + + .cu-lg-justify-stretch { + justify-content: stretch; + } + + .cu-lg-m-2xl { + margin: var(--canon-spacing-2xl); + } + + .cu-lg-m-lg { + margin: var(--canon-spacing-lg); + } + + .cu-lg-m-md { + margin: var(--canon-spacing-md); + } + + .cu-lg-m-none { + margin: 0; + } + + .cu-lg-m-sm { + margin: var(--canon-spacing-sm); + } + + .cu-lg-m-xl { + margin: var(--canon-spacing-xl); + } + + .cu-lg-m-xs { + margin: var(--canon-spacing-xs); + } + + .cu-lg-mb-2xl { + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-lg-mb-lg { + margin-bottom: var(--canon-spacing-lg); + } + + .cu-lg-mb-md { + margin-bottom: var(--canon-spacing-md); + } + + .cu-lg-mb-none { + margin-bottom: 0; + } + + .cu-lg-mb-sm { + margin-bottom: var(--canon-spacing-sm); + } + + .cu-lg-mb-xl { + margin-bottom: var(--canon-spacing-xl); + } + + .cu-lg-mb-xs { + margin-bottom: var(--canon-spacing-xs); + } + + .cu-lg-ml-2xl { + margin-left: var(--canon-spacing-2xl); + } + + .cu-lg-ml-lg { + margin-left: var(--canon-spacing-lg); + } + + .cu-lg-ml-md { + margin-left: var(--canon-spacing-md); + } + + .cu-lg-ml-none { + margin-left: 0; + } + + .cu-lg-ml-sm { + margin-left: var(--canon-spacing-sm); + } + + .cu-lg-ml-xl { + margin-left: var(--canon-spacing-xl); + } + + .cu-lg-ml-xs { + margin-left: var(--canon-spacing-xs); + } + + .cu-lg-mr-2xl { + margin-right: var(--canon-spacing-2xl); + } + + .cu-lg-mr-lg { + margin-right: var(--canon-spacing-lg); + } + + .cu-lg-mr-md { + margin-right: var(--canon-spacing-md); + } + + .cu-lg-mr-none { + margin-right: 0; + } + + .cu-lg-mr-sm { + margin-right: var(--canon-spacing-sm); + } + + .cu-lg-mr-xl { + margin-right: var(--canon-spacing-xl); + } + + .cu-lg-mr-xs { + margin-right: var(--canon-spacing-xs); + } + + .cu-lg-mt-2xl { + margin-top: var(--canon-spacing-2xl); + } + + .cu-lg-mt-lg { + margin-top: var(--canon-spacing-lg); + } + + .cu-lg-mt-md { + margin-top: var(--canon-spacing-md); + } + + .cu-lg-mt-none { + margin-top: 0; + } + + .cu-lg-mt-sm { + margin-top: var(--canon-spacing-sm); + } + + .cu-lg-mt-xl { + margin-top: var(--canon-spacing-xl); + } + + .cu-lg-mt-xs { + margin-top: var(--canon-spacing-xs); + } + + .cu-lg-mx-2xl { + margin-left: var(--canon-spacing-2xl); + margin-right: var(--canon-spacing-2xl); + } + + .cu-lg-mx-lg { + margin-left: var(--canon-spacing-lg); + margin-right: var(--canon-spacing-lg); + } + + .cu-lg-mx-md { + margin-left: var(--canon-spacing-md); + margin-right: var(--canon-spacing-md); + } + + .cu-lg-mx-none { + margin-left: 0; + margin-right: 0; + } + + .cu-lg-mx-sm { + margin-left: var(--canon-spacing-sm); + margin-right: var(--canon-spacing-sm); + } + + .cu-lg-mx-xl { + margin-left: var(--canon-spacing-xl); + margin-right: var(--canon-spacing-xl); + } + + .cu-lg-mx-xs { + margin-left: var(--canon-spacing-xs); + margin-right: var(--canon-spacing-xs); + } + + .cu-lg-my-2xl { + margin-top: var(--canon-spacing-2xl); + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-lg-my-lg { + margin-top: var(--canon-spacing-lg); + margin-bottom: var(--canon-spacing-lg); + } + + .cu-lg-my-md { + margin-top: var(--canon-spacing-md); + margin-bottom: var(--canon-spacing-md); + } + + .cu-lg-my-none { + margin-top: 0; + margin-bottom: 0; + } + + .cu-lg-my-sm { + margin-top: var(--canon-spacing-sm); + margin-bottom: var(--canon-spacing-sm); + } + + .cu-lg-my-xl { + margin-top: var(--canon-spacing-xl); + margin-bottom: var(--canon-spacing-xl); + } + + .cu-lg-my-xs { + margin-top: var(--canon-spacing-xs); + margin-bottom: var(--canon-spacing-xs); + } + + .cu-lg-p-2xl { + padding: var(--canon-spacing-2xl); + } + + .cu-lg-p-lg { + padding: var(--canon-spacing-lg); + } + + .cu-lg-p-md { + padding: var(--canon-spacing-md); + } + + .cu-lg-p-none { + padding: 0; + } + + .cu-lg-p-sm { + padding: var(--canon-spacing-sm); + } + + .cu-lg-p-xl { + padding: var(--canon-spacing-xl); + } + + .cu-lg-p-xs { + padding: var(--canon-spacing-xs); + } + + .cu-lg-pb-2xl { + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-lg-pb-lg { + padding-bottom: var(--canon-spacing-lg); + } + + .cu-lg-pb-md { + padding-bottom: var(--canon-spacing-md); + } + + .cu-lg-pb-none { + padding-bottom: 0; + } + + .cu-lg-pb-sm { + padding-bottom: var(--canon-spacing-sm); + } + + .cu-lg-pb-xl { + padding-bottom: var(--canon-spacing-xl); + } + + .cu-lg-pb-xs { + padding-bottom: var(--canon-spacing-xs); + } + + .cu-lg-pl-2xl { + padding-left: var(--canon-spacing-2xl); + } + + .cu-lg-pl-lg { + padding-left: var(--canon-spacing-lg); + } + + .cu-lg-pl-md { + padding-left: var(--canon-spacing-md); + } + + .cu-lg-pl-none { + padding-left: 0; + } + + .cu-lg-pl-sm { + padding-left: var(--canon-spacing-sm); + } + + .cu-lg-pl-xl { + padding-left: var(--canon-spacing-xl); + } + + .cu-lg-pl-xs { + padding-left: var(--canon-spacing-xs); + } + + .cu-lg-pr-2xl { + padding-right: var(--canon-spacing-2xl); + } + + .cu-lg-pr-lg { + padding-right: var(--canon-spacing-lg); + } + + .cu-lg-pr-md { + padding-right: var(--canon-spacing-md); + } + + .cu-lg-pr-none { + padding-right: 0; + } + + .cu-lg-pr-sm { + padding-right: var(--canon-spacing-sm); + } + + .cu-lg-pr-xl { + padding-right: var(--canon-spacing-xl); + } + + .cu-lg-pr-xs { + padding-right: var(--canon-spacing-xs); + } + + .cu-lg-pt-2xl { + padding-top: var(--canon-spacing-2xl); + } + + .cu-lg-pt-lg { + padding-top: var(--canon-spacing-lg); + } + + .cu-lg-pt-md { + padding-top: var(--canon-spacing-md); + } + + .cu-lg-pt-none { + padding-top: 0; + } + + .cu-lg-pt-sm { + padding-top: var(--canon-spacing-sm); + } + + .cu-lg-pt-xl { + padding-top: var(--canon-spacing-xl); + } + + .cu-lg-pt-xs { + padding-top: var(--canon-spacing-xs); + } + + .cu-lg-px-2xl { + padding-left: var(--canon-spacing-2xl); + padding-right: var(--canon-spacing-2xl); + } + + .cu-lg-px-lg { + padding-left: var(--canon-spacing-lg); + padding-right: var(--canon-spacing-lg); + } + + .cu-lg-px-md { + padding-left: var(--canon-spacing-md); + padding-right: var(--canon-spacing-md); + } + + .cu-lg-px-none { + padding-left: 0; + padding-right: 0; + } + + .cu-lg-px-sm { + padding-left: var(--canon-spacing-sm); + padding-right: var(--canon-spacing-sm); + } + + .cu-lg-px-xl { + padding-left: var(--canon-spacing-xl); + padding-right: var(--canon-spacing-xl); + } + + .cu-lg-px-xs { + padding-left: var(--canon-spacing-xs); + padding-right: var(--canon-spacing-xs); + } + + .cu-lg-py-2xl { + padding-top: var(--canon-spacing-2xl); + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-lg-py-lg { + padding-top: var(--canon-spacing-lg); + padding-bottom: var(--canon-spacing-lg); + } + + .cu-lg-py-md { + padding-top: var(--canon-spacing-md); + padding-bottom: var(--canon-spacing-md); + } + + .cu-lg-py-none { + padding-top: 0; + padding-bottom: 0; + } + + .cu-lg-py-sm { + padding-top: var(--canon-spacing-sm); + padding-bottom: var(--canon-spacing-sm); + } + + .cu-lg-py-xl { + padding-top: var(--canon-spacing-xl); + padding-bottom: var(--canon-spacing-xl); + } + + .cu-lg-py-xs { + padding-top: var(--canon-spacing-xs); + padding-bottom: var(--canon-spacing-xs); + } + + .cu-lg-rounded-2xl { + border-radius: var(--canon-border-radius-2xl); + } + + .cu-lg-rounded-2xs { + border-radius: var(--canon-border-radius-2xs); + } + + .cu-lg-rounded-lg { + border-radius: var(--canon-border-radius-lg); + } + + .cu-lg-rounded-md { + border-radius: var(--canon-border-radius-md); + } + + .cu-lg-rounded-none { + border-radius: 0; + } + + .cu-lg-rounded-sm { + border-radius: var(--canon-border-radius-sm); + } + + .cu-lg-rounded-xl { + border-radius: var(--canon-border-radius-xl); + } + + .cu-lg-rounded-xs { + border-radius: var(--canon-border-radius-xs); + } + + .cu-lg-row-span-1 { + grid-row: span 1 / span 1; + } + + .cu-lg-row-span-10 { + grid-row: span 10 / span 10; + } + + .cu-lg-row-span-11 { + grid-row: span 11 / span 11; + } + + .cu-lg-row-span-12 { + grid-row: span 12 / span 12; + } + + .cu-lg-row-span-2 { + grid-row: span 2 / span 2; + } + + .cu-lg-row-span-3 { + grid-row: span 3 / span 3; + } + + .cu-lg-row-span-4 { + grid-row: span 4 / span 4; + } + + .cu-lg-row-span-5 { + grid-row: span 5 / span 5; + } + + .cu-lg-row-span-6 { + grid-row: span 6 / span 6; + } + + .cu-lg-row-span-7 { + grid-row: span 7 / span 7; + } + + .cu-lg-row-span-8 { + grid-row: span 8 / span 8; + } + + .cu-lg-row-span-9 { + grid-row: span 9 / span 9; + } + + .cu-lg-row-span-auto { + grid-row: span auto / span auto; + } + + .cu-lg-wrap-reverse { + flex-wrap: wrap-reverse; + } + } +} diff --git a/packages/canon/src/css/utilities/md.css b/packages/canon/src/css/utilities/md.css new file mode 100644 index 0000000000..62491f047a --- /dev/null +++ b/packages/canon/src/css/utilities/md.css @@ -0,0 +1,884 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer utilities { + @media (min-width: 768px) { + .cu-md-block { + display: block; + } + + .cu-md-border-base { + border-color: var(--canon-border-base); + border-width: 1px; + border-style: solid; + } + + .cu-md-border-error { + border-color: var(--canon-border-error); + border-width: 1px; + border-style: solid; + } + + .cu-md-border-none { + border-color: transparent; + border-width: 0; + } + + .cu-md-border-selected { + border-color: var(--canon-border-selected); + border-width: 1px; + border-style: solid; + } + + .cu-md-border-warning { + border-color: var(--canon-border-warning); + border-width: 1px; + border-style: solid; + } + + .cu-md-col-end-1 { + grid-column-end: 1; + } + + .cu-md-col-end-10 { + grid-column-end: 10; + } + + .cu-md-col-end-11 { + grid-column-end: 11; + } + + .cu-md-col-end-12 { + grid-column-end: 12; + } + + .cu-md-col-end-13 { + grid-column-end: 13; + } + + .cu-md-col-end-2 { + grid-column-end: 2; + } + + .cu-md-col-end-3 { + grid-column-end: 3; + } + + .cu-md-col-end-4 { + grid-column-end: 4; + } + + .cu-md-col-end-5 { + grid-column-end: 5; + } + + .cu-md-col-end-6 { + grid-column-end: 6; + } + + .cu-md-col-end-7 { + grid-column-end: 7; + } + + .cu-md-col-end-8 { + grid-column-end: 8; + } + + .cu-md-col-end-9 { + grid-column-end: 9; + } + + .cu-md-col-end-auto { + grid-column-end: auto; + } + + .cu-md-col-span-1 { + grid-column: span 1 / span 1; + } + + .cu-md-col-span-10 { + grid-column: span 10 / span 10; + } + + .cu-md-col-span-11 { + grid-column: span 11 / span 11; + } + + .cu-md-col-span-12 { + grid-column: span 12 / span 12; + } + + .cu-md-col-span-2 { + grid-column: span 2 / span 2; + } + + .cu-md-col-span-3 { + grid-column: span 3 / span 3; + } + + .cu-md-col-span-4 { + grid-column: span 4 / span 4; + } + + .cu-md-col-span-5 { + grid-column: span 5 / span 5; + } + + .cu-md-col-span-6 { + grid-column: span 6 / span 6; + } + + .cu-md-col-span-7 { + grid-column: span 7 / span 7; + } + + .cu-md-col-span-8 { + grid-column: span 8 / span 8; + } + + .cu-md-col-span-9 { + grid-column: span 9 / span 9; + } + + .cu-md-col-span-auto { + grid-column: span auto / span auto; + } + + .cu-md-col-start-1 { + grid-column-start: 1; + } + + .cu-md-col-start-10 { + grid-column-start: 10; + } + + .cu-md-col-start-11 { + grid-column-start: 11; + } + + .cu-md-col-start-12 { + grid-column-start: 12; + } + + .cu-md-col-start-13 { + grid-column-start: 13; + } + + .cu-md-col-start-2 { + grid-column-start: 2; + } + + .cu-md-col-start-3 { + grid-column-start: 3; + } + + .cu-md-col-start-4 { + grid-column-start: 4; + } + + .cu-md-col-start-5 { + grid-column-start: 5; + } + + .cu-md-col-start-6 { + grid-column-start: 6; + } + + .cu-md-col-start-7 { + grid-column-start: 7; + } + + .cu-md-col-start-8 { + grid-column-start: 8; + } + + .cu-md-col-start-9 { + grid-column-start: 9; + } + + .cu-md-col-start-auto { + grid-column-start: auto; + } + + .cu-md-flex { + display: flex; + } + + .cu-md-flex-col { + flex-direction: column; + } + + .cu-md-flex-nowrap { + flex-wrap: nowrap; + } + + .cu-md-flex-row { + flex-direction: row; + } + + .cu-md-flex-wrap { + flex-wrap: wrap; + } + + .cu-md-flex-wrap-reverse { + flex-wrap: wrap-reverse; + } + + .cu-md-gap-2xl { + gap: var(--canon-spacing-2xl); + } + + .cu-md-gap-lg { + gap: var(--canon-spacing-lg); + } + + .cu-md-gap-md { + gap: var(--canon-spacing-md); + } + + .cu-md-gap-none { + gap: 0; + } + + .cu-md-gap-sm { + gap: var(--canon-spacing-sm); + } + + .cu-md-gap-xl { + gap: var(--canon-spacing-xl); + } + + .cu-md-gap-xs { + gap: var(--canon-spacing-xs); + } + + .cu-md-grid { + display: grid; + } + + .cu-md-grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .cu-md-grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + + .cu-md-grid-cols-11 { + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .cu-md-grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .cu-md-grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .cu-md-grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .cu-md-grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .cu-md-grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + + .cu-md-grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .cu-md-grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + + .cu-md-grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + + .cu-md-grid-cols-9 { + grid-template-columns: repeat(9, minmax(0, 1fr)); + } + + .cu-md-grid-cols-auto { + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); + } + + .cu-md-hidden { + display: none; + } + + .cu-md-inline { + display: inline; + } + + .cu-md-inline-block { + display: inline-block; + } + + .cu-md-items-center { + align-items: center; + } + + .cu-md-items-end { + align-items: flex-end; + } + + .cu-md-items-start { + align-items: flex-start; + } + + .cu-md-items-stretch { + align-items: stretch; + } + + .cu-md-justify-around { + justify-content: space-around; + } + + .cu-md-justify-between { + justify-content: space-between; + } + + .cu-md-justify-center { + justify-content: center; + } + + .cu-md-justify-end { + justify-content: flex-end; + } + + .cu-md-justify-start { + justify-content: flex-start; + } + + .cu-md-justify-stretch { + justify-content: stretch; + } + + .cu-md-m-2xl { + margin: var(--canon-spacing-2xl); + } + + .cu-md-m-lg { + margin: var(--canon-spacing-lg); + } + + .cu-md-m-md { + margin: var(--canon-spacing-md); + } + + .cu-md-m-none { + margin: 0; + } + + .cu-md-m-sm { + margin: var(--canon-spacing-sm); + } + + .cu-md-m-xl { + margin: var(--canon-spacing-xl); + } + + .cu-md-m-xs { + margin: var(--canon-spacing-xs); + } + + .cu-md-mb-2xl { + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-md-mb-lg { + margin-bottom: var(--canon-spacing-lg); + } + + .cu-md-mb-md { + margin-bottom: var(--canon-spacing-md); + } + + .cu-md-mb-none { + margin-bottom: 0; + } + + .cu-md-mb-sm { + margin-bottom: var(--canon-spacing-sm); + } + + .cu-md-mb-xl { + margin-bottom: var(--canon-spacing-xl); + } + + .cu-md-mb-xs { + margin-bottom: var(--canon-spacing-xs); + } + + .cu-md-ml-2xl { + margin-left: var(--canon-spacing-2xl); + } + + .cu-md-ml-lg { + margin-left: var(--canon-spacing-lg); + } + + .cu-md-ml-md { + margin-left: var(--canon-spacing-md); + } + + .cu-md-ml-none { + margin-left: 0; + } + + .cu-md-ml-sm { + margin-left: var(--canon-spacing-sm); + } + + .cu-md-ml-xl { + margin-left: var(--canon-spacing-xl); + } + + .cu-md-ml-xs { + margin-left: var(--canon-spacing-xs); + } + + .cu-md-mr-2xl { + margin-right: var(--canon-spacing-2xl); + } + + .cu-md-mr-lg { + margin-right: var(--canon-spacing-lg); + } + + .cu-md-mr-md { + margin-right: var(--canon-spacing-md); + } + + .cu-md-mr-none { + margin-right: 0; + } + + .cu-md-mr-sm { + margin-right: var(--canon-spacing-sm); + } + + .cu-md-mr-xl { + margin-right: var(--canon-spacing-xl); + } + + .cu-md-mr-xs { + margin-right: var(--canon-spacing-xs); + } + + .cu-md-mt-2xl { + margin-top: var(--canon-spacing-2xl); + } + + .cu-md-mt-lg { + margin-top: var(--canon-spacing-lg); + } + + .cu-md-mt-md { + margin-top: var(--canon-spacing-md); + } + + .cu-md-mt-none { + margin-top: 0; + } + + .cu-md-mt-sm { + margin-top: var(--canon-spacing-sm); + } + + .cu-md-mt-xl { + margin-top: var(--canon-spacing-xl); + } + + .cu-md-mt-xs { + margin-top: var(--canon-spacing-xs); + } + + .cu-md-mx-2xl { + margin-left: var(--canon-spacing-2xl); + margin-right: var(--canon-spacing-2xl); + } + + .cu-md-mx-lg { + margin-left: var(--canon-spacing-lg); + margin-right: var(--canon-spacing-lg); + } + + .cu-md-mx-md { + margin-left: var(--canon-spacing-md); + margin-right: var(--canon-spacing-md); + } + + .cu-md-mx-none { + margin-left: 0; + margin-right: 0; + } + + .cu-md-mx-sm { + margin-left: var(--canon-spacing-sm); + margin-right: var(--canon-spacing-sm); + } + + .cu-md-mx-xl { + margin-left: var(--canon-spacing-xl); + margin-right: var(--canon-spacing-xl); + } + + .cu-md-mx-xs { + margin-left: var(--canon-spacing-xs); + margin-right: var(--canon-spacing-xs); + } + + .cu-md-my-2xl { + margin-top: var(--canon-spacing-2xl); + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-md-my-lg { + margin-top: var(--canon-spacing-lg); + margin-bottom: var(--canon-spacing-lg); + } + + .cu-md-my-md { + margin-top: var(--canon-spacing-md); + margin-bottom: var(--canon-spacing-md); + } + + .cu-md-my-none { + margin-top: 0; + margin-bottom: 0; + } + + .cu-md-my-sm { + margin-top: var(--canon-spacing-sm); + margin-bottom: var(--canon-spacing-sm); + } + + .cu-md-my-xl { + margin-top: var(--canon-spacing-xl); + margin-bottom: var(--canon-spacing-xl); + } + + .cu-md-my-xs { + margin-top: var(--canon-spacing-xs); + margin-bottom: var(--canon-spacing-xs); + } + + .cu-md-p-2xl { + padding: var(--canon-spacing-2xl); + } + + .cu-md-p-lg { + padding: var(--canon-spacing-lg); + } + + .cu-md-p-md { + padding: var(--canon-spacing-md); + } + + .cu-md-p-none { + padding: 0; + } + + .cu-md-p-sm { + padding: var(--canon-spacing-sm); + } + + .cu-md-p-xl { + padding: var(--canon-spacing-xl); + } + + .cu-md-p-xs { + padding: var(--canon-spacing-xs); + } + + .cu-md-pb-2xl { + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-md-pb-lg { + padding-bottom: var(--canon-spacing-lg); + } + + .cu-md-pb-md { + padding-bottom: var(--canon-spacing-md); + } + + .cu-md-pb-none { + padding-bottom: 0; + } + + .cu-md-pb-sm { + padding-bottom: var(--canon-spacing-sm); + } + + .cu-md-pb-xl { + padding-bottom: var(--canon-spacing-xl); + } + + .cu-md-pb-xs { + padding-bottom: var(--canon-spacing-xs); + } + + .cu-md-pl-2xl { + padding-left: var(--canon-spacing-2xl); + } + + .cu-md-pl-lg { + padding-left: var(--canon-spacing-lg); + } + + .cu-md-pl-md { + padding-left: var(--canon-spacing-md); + } + + .cu-md-pl-none { + padding-left: 0; + } + + .cu-md-pl-sm { + padding-left: var(--canon-spacing-sm); + } + + .cu-md-pl-xl { + padding-left: var(--canon-spacing-xl); + } + + .cu-md-pl-xs { + padding-left: var(--canon-spacing-xs); + } + + .cu-md-pr-2xl { + padding-right: var(--canon-spacing-2xl); + } + + .cu-md-pr-lg { + padding-right: var(--canon-spacing-lg); + } + + .cu-md-pr-md { + padding-right: var(--canon-spacing-md); + } + + .cu-md-pr-none { + padding-right: 0; + } + + .cu-md-pr-sm { + padding-right: var(--canon-spacing-sm); + } + + .cu-md-pr-xl { + padding-right: var(--canon-spacing-xl); + } + + .cu-md-pr-xs { + padding-right: var(--canon-spacing-xs); + } + + .cu-md-pt-2xl { + padding-top: var(--canon-spacing-2xl); + } + + .cu-md-pt-lg { + padding-top: var(--canon-spacing-lg); + } + + .cu-md-pt-md { + padding-top: var(--canon-spacing-md); + } + + .cu-md-pt-none { + padding-top: 0; + } + + .cu-md-pt-sm { + padding-top: var(--canon-spacing-sm); + } + + .cu-md-pt-xl { + padding-top: var(--canon-spacing-xl); + } + + .cu-md-pt-xs { + padding-top: var(--canon-spacing-xs); + } + + .cu-md-px-2xl { + padding-left: var(--canon-spacing-2xl); + padding-right: var(--canon-spacing-2xl); + } + + .cu-md-px-lg { + padding-left: var(--canon-spacing-lg); + padding-right: var(--canon-spacing-lg); + } + + .cu-md-px-md { + padding-left: var(--canon-spacing-md); + padding-right: var(--canon-spacing-md); + } + + .cu-md-px-none { + padding-left: 0; + padding-right: 0; + } + + .cu-md-px-sm { + padding-left: var(--canon-spacing-sm); + padding-right: var(--canon-spacing-sm); + } + + .cu-md-px-xl { + padding-left: var(--canon-spacing-xl); + padding-right: var(--canon-spacing-xl); + } + + .cu-md-px-xs { + padding-left: var(--canon-spacing-xs); + padding-right: var(--canon-spacing-xs); + } + + .cu-md-py-2xl { + padding-top: var(--canon-spacing-2xl); + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-md-py-lg { + padding-top: var(--canon-spacing-lg); + padding-bottom: var(--canon-spacing-lg); + } + + .cu-md-py-md { + padding-top: var(--canon-spacing-md); + padding-bottom: var(--canon-spacing-md); + } + + .cu-md-py-none { + padding-top: 0; + padding-bottom: 0; + } + + .cu-md-py-sm { + padding-top: var(--canon-spacing-sm); + padding-bottom: var(--canon-spacing-sm); + } + + .cu-md-py-xl { + padding-top: var(--canon-spacing-xl); + padding-bottom: var(--canon-spacing-xl); + } + + .cu-md-py-xs { + padding-top: var(--canon-spacing-xs); + padding-bottom: var(--canon-spacing-xs); + } + + .cu-md-rounded-2xl { + border-radius: var(--canon-border-radius-2xl); + } + + .cu-md-rounded-2xs { + border-radius: var(--canon-border-radius-2xs); + } + + .cu-md-rounded-lg { + border-radius: var(--canon-border-radius-lg); + } + + .cu-md-rounded-md { + border-radius: var(--canon-border-radius-md); + } + + .cu-md-rounded-none { + border-radius: 0; + } + + .cu-md-rounded-sm { + border-radius: var(--canon-border-radius-sm); + } + + .cu-md-rounded-xl { + border-radius: var(--canon-border-radius-xl); + } + + .cu-md-rounded-xs { + border-radius: var(--canon-border-radius-xs); + } + + .cu-md-row-span-1 { + grid-row: span 1 / span 1; + } + + .cu-md-row-span-10 { + grid-row: span 10 / span 10; + } + + .cu-md-row-span-11 { + grid-row: span 11 / span 11; + } + + .cu-md-row-span-12 { + grid-row: span 12 / span 12; + } + + .cu-md-row-span-2 { + grid-row: span 2 / span 2; + } + + .cu-md-row-span-3 { + grid-row: span 3 / span 3; + } + + .cu-md-row-span-4 { + grid-row: span 4 / span 4; + } + + .cu-md-row-span-5 { + grid-row: span 5 / span 5; + } + + .cu-md-row-span-6 { + grid-row: span 6 / span 6; + } + + .cu-md-row-span-7 { + grid-row: span 7 / span 7; + } + + .cu-md-row-span-8 { + grid-row: span 8 / span 8; + } + + .cu-md-row-span-9 { + grid-row: span 9 / span 9; + } + + .cu-md-row-span-auto { + grid-row: span auto / span auto; + } + + .cu-md-wrap-reverse { + flex-wrap: wrap-reverse; + } + } +} diff --git a/packages/canon/src/css/utilities/sm.css b/packages/canon/src/css/utilities/sm.css new file mode 100644 index 0000000000..60ddf67de5 --- /dev/null +++ b/packages/canon/src/css/utilities/sm.css @@ -0,0 +1,884 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer utilities { + @media (min-width: 640px) { + .cu-sm-block { + display: block; + } + + .cu-sm-border-base { + border-color: var(--canon-border-base); + border-width: 1px; + border-style: solid; + } + + .cu-sm-border-error { + border-color: var(--canon-border-error); + border-width: 1px; + border-style: solid; + } + + .cu-sm-border-none { + border-color: transparent; + border-width: 0; + } + + .cu-sm-border-selected { + border-color: var(--canon-border-selected); + border-width: 1px; + border-style: solid; + } + + .cu-sm-border-warning { + border-color: var(--canon-border-warning); + border-width: 1px; + border-style: solid; + } + + .cu-sm-col-end-1 { + grid-column-end: 1; + } + + .cu-sm-col-end-10 { + grid-column-end: 10; + } + + .cu-sm-col-end-11 { + grid-column-end: 11; + } + + .cu-sm-col-end-12 { + grid-column-end: 12; + } + + .cu-sm-col-end-13 { + grid-column-end: 13; + } + + .cu-sm-col-end-2 { + grid-column-end: 2; + } + + .cu-sm-col-end-3 { + grid-column-end: 3; + } + + .cu-sm-col-end-4 { + grid-column-end: 4; + } + + .cu-sm-col-end-5 { + grid-column-end: 5; + } + + .cu-sm-col-end-6 { + grid-column-end: 6; + } + + .cu-sm-col-end-7 { + grid-column-end: 7; + } + + .cu-sm-col-end-8 { + grid-column-end: 8; + } + + .cu-sm-col-end-9 { + grid-column-end: 9; + } + + .cu-sm-col-end-auto { + grid-column-end: auto; + } + + .cu-sm-col-span-1 { + grid-column: span 1 / span 1; + } + + .cu-sm-col-span-10 { + grid-column: span 10 / span 10; + } + + .cu-sm-col-span-11 { + grid-column: span 11 / span 11; + } + + .cu-sm-col-span-12 { + grid-column: span 12 / span 12; + } + + .cu-sm-col-span-2 { + grid-column: span 2 / span 2; + } + + .cu-sm-col-span-3 { + grid-column: span 3 / span 3; + } + + .cu-sm-col-span-4 { + grid-column: span 4 / span 4; + } + + .cu-sm-col-span-5 { + grid-column: span 5 / span 5; + } + + .cu-sm-col-span-6 { + grid-column: span 6 / span 6; + } + + .cu-sm-col-span-7 { + grid-column: span 7 / span 7; + } + + .cu-sm-col-span-8 { + grid-column: span 8 / span 8; + } + + .cu-sm-col-span-9 { + grid-column: span 9 / span 9; + } + + .cu-sm-col-span-auto { + grid-column: span auto / span auto; + } + + .cu-sm-col-start-1 { + grid-column-start: 1; + } + + .cu-sm-col-start-10 { + grid-column-start: 10; + } + + .cu-sm-col-start-11 { + grid-column-start: 11; + } + + .cu-sm-col-start-12 { + grid-column-start: 12; + } + + .cu-sm-col-start-13 { + grid-column-start: 13; + } + + .cu-sm-col-start-2 { + grid-column-start: 2; + } + + .cu-sm-col-start-3 { + grid-column-start: 3; + } + + .cu-sm-col-start-4 { + grid-column-start: 4; + } + + .cu-sm-col-start-5 { + grid-column-start: 5; + } + + .cu-sm-col-start-6 { + grid-column-start: 6; + } + + .cu-sm-col-start-7 { + grid-column-start: 7; + } + + .cu-sm-col-start-8 { + grid-column-start: 8; + } + + .cu-sm-col-start-9 { + grid-column-start: 9; + } + + .cu-sm-col-start-auto { + grid-column-start: auto; + } + + .cu-sm-flex { + display: flex; + } + + .cu-sm-flex-col { + flex-direction: column; + } + + .cu-sm-flex-nowrap { + flex-wrap: nowrap; + } + + .cu-sm-flex-row { + flex-direction: row; + } + + .cu-sm-flex-wrap { + flex-wrap: wrap; + } + + .cu-sm-flex-wrap-reverse { + flex-wrap: wrap-reverse; + } + + .cu-sm-gap-2xl { + gap: var(--canon-spacing-2xl); + } + + .cu-sm-gap-lg { + gap: var(--canon-spacing-lg); + } + + .cu-sm-gap-md { + gap: var(--canon-spacing-md); + } + + .cu-sm-gap-none { + gap: 0; + } + + .cu-sm-gap-sm { + gap: var(--canon-spacing-sm); + } + + .cu-sm-gap-xl { + gap: var(--canon-spacing-xl); + } + + .cu-sm-gap-xs { + gap: var(--canon-spacing-xs); + } + + .cu-sm-grid { + display: grid; + } + + .cu-sm-grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-11 { + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-9 { + grid-template-columns: repeat(9, minmax(0, 1fr)); + } + + .cu-sm-grid-cols-auto { + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); + } + + .cu-sm-hidden { + display: none; + } + + .cu-sm-inline { + display: inline; + } + + .cu-sm-inline-block { + display: inline-block; + } + + .cu-sm-items-center { + align-items: center; + } + + .cu-sm-items-end { + align-items: flex-end; + } + + .cu-sm-items-start { + align-items: flex-start; + } + + .cu-sm-items-stretch { + align-items: stretch; + } + + .cu-sm-justify-around { + justify-content: space-around; + } + + .cu-sm-justify-between { + justify-content: space-between; + } + + .cu-sm-justify-center { + justify-content: center; + } + + .cu-sm-justify-end { + justify-content: flex-end; + } + + .cu-sm-justify-start { + justify-content: flex-start; + } + + .cu-sm-justify-stretch { + justify-content: stretch; + } + + .cu-sm-m-2xl { + margin: var(--canon-spacing-2xl); + } + + .cu-sm-m-lg { + margin: var(--canon-spacing-lg); + } + + .cu-sm-m-md { + margin: var(--canon-spacing-md); + } + + .cu-sm-m-none { + margin: 0; + } + + .cu-sm-m-sm { + margin: var(--canon-spacing-sm); + } + + .cu-sm-m-xl { + margin: var(--canon-spacing-xl); + } + + .cu-sm-m-xs { + margin: var(--canon-spacing-xs); + } + + .cu-sm-mb-2xl { + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-sm-mb-lg { + margin-bottom: var(--canon-spacing-lg); + } + + .cu-sm-mb-md { + margin-bottom: var(--canon-spacing-md); + } + + .cu-sm-mb-none { + margin-bottom: 0; + } + + .cu-sm-mb-sm { + margin-bottom: var(--canon-spacing-sm); + } + + .cu-sm-mb-xl { + margin-bottom: var(--canon-spacing-xl); + } + + .cu-sm-mb-xs { + margin-bottom: var(--canon-spacing-xs); + } + + .cu-sm-ml-2xl { + margin-left: var(--canon-spacing-2xl); + } + + .cu-sm-ml-lg { + margin-left: var(--canon-spacing-lg); + } + + .cu-sm-ml-md { + margin-left: var(--canon-spacing-md); + } + + .cu-sm-ml-none { + margin-left: 0; + } + + .cu-sm-ml-sm { + margin-left: var(--canon-spacing-sm); + } + + .cu-sm-ml-xl { + margin-left: var(--canon-spacing-xl); + } + + .cu-sm-ml-xs { + margin-left: var(--canon-spacing-xs); + } + + .cu-sm-mr-2xl { + margin-right: var(--canon-spacing-2xl); + } + + .cu-sm-mr-lg { + margin-right: var(--canon-spacing-lg); + } + + .cu-sm-mr-md { + margin-right: var(--canon-spacing-md); + } + + .cu-sm-mr-none { + margin-right: 0; + } + + .cu-sm-mr-sm { + margin-right: var(--canon-spacing-sm); + } + + .cu-sm-mr-xl { + margin-right: var(--canon-spacing-xl); + } + + .cu-sm-mr-xs { + margin-right: var(--canon-spacing-xs); + } + + .cu-sm-mt-2xl { + margin-top: var(--canon-spacing-2xl); + } + + .cu-sm-mt-lg { + margin-top: var(--canon-spacing-lg); + } + + .cu-sm-mt-md { + margin-top: var(--canon-spacing-md); + } + + .cu-sm-mt-none { + margin-top: 0; + } + + .cu-sm-mt-sm { + margin-top: var(--canon-spacing-sm); + } + + .cu-sm-mt-xl { + margin-top: var(--canon-spacing-xl); + } + + .cu-sm-mt-xs { + margin-top: var(--canon-spacing-xs); + } + + .cu-sm-mx-2xl { + margin-left: var(--canon-spacing-2xl); + margin-right: var(--canon-spacing-2xl); + } + + .cu-sm-mx-lg { + margin-left: var(--canon-spacing-lg); + margin-right: var(--canon-spacing-lg); + } + + .cu-sm-mx-md { + margin-left: var(--canon-spacing-md); + margin-right: var(--canon-spacing-md); + } + + .cu-sm-mx-none { + margin-left: 0; + margin-right: 0; + } + + .cu-sm-mx-sm { + margin-left: var(--canon-spacing-sm); + margin-right: var(--canon-spacing-sm); + } + + .cu-sm-mx-xl { + margin-left: var(--canon-spacing-xl); + margin-right: var(--canon-spacing-xl); + } + + .cu-sm-mx-xs { + margin-left: var(--canon-spacing-xs); + margin-right: var(--canon-spacing-xs); + } + + .cu-sm-my-2xl { + margin-top: var(--canon-spacing-2xl); + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-sm-my-lg { + margin-top: var(--canon-spacing-lg); + margin-bottom: var(--canon-spacing-lg); + } + + .cu-sm-my-md { + margin-top: var(--canon-spacing-md); + margin-bottom: var(--canon-spacing-md); + } + + .cu-sm-my-none { + margin-top: 0; + margin-bottom: 0; + } + + .cu-sm-my-sm { + margin-top: var(--canon-spacing-sm); + margin-bottom: var(--canon-spacing-sm); + } + + .cu-sm-my-xl { + margin-top: var(--canon-spacing-xl); + margin-bottom: var(--canon-spacing-xl); + } + + .cu-sm-my-xs { + margin-top: var(--canon-spacing-xs); + margin-bottom: var(--canon-spacing-xs); + } + + .cu-sm-p-2xl { + padding: var(--canon-spacing-2xl); + } + + .cu-sm-p-lg { + padding: var(--canon-spacing-lg); + } + + .cu-sm-p-md { + padding: var(--canon-spacing-md); + } + + .cu-sm-p-none { + padding: 0; + } + + .cu-sm-p-sm { + padding: var(--canon-spacing-sm); + } + + .cu-sm-p-xl { + padding: var(--canon-spacing-xl); + } + + .cu-sm-p-xs { + padding: var(--canon-spacing-xs); + } + + .cu-sm-pb-2xl { + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-sm-pb-lg { + padding-bottom: var(--canon-spacing-lg); + } + + .cu-sm-pb-md { + padding-bottom: var(--canon-spacing-md); + } + + .cu-sm-pb-none { + padding-bottom: 0; + } + + .cu-sm-pb-sm { + padding-bottom: var(--canon-spacing-sm); + } + + .cu-sm-pb-xl { + padding-bottom: var(--canon-spacing-xl); + } + + .cu-sm-pb-xs { + padding-bottom: var(--canon-spacing-xs); + } + + .cu-sm-pl-2xl { + padding-left: var(--canon-spacing-2xl); + } + + .cu-sm-pl-lg { + padding-left: var(--canon-spacing-lg); + } + + .cu-sm-pl-md { + padding-left: var(--canon-spacing-md); + } + + .cu-sm-pl-none { + padding-left: 0; + } + + .cu-sm-pl-sm { + padding-left: var(--canon-spacing-sm); + } + + .cu-sm-pl-xl { + padding-left: var(--canon-spacing-xl); + } + + .cu-sm-pl-xs { + padding-left: var(--canon-spacing-xs); + } + + .cu-sm-pr-2xl { + padding-right: var(--canon-spacing-2xl); + } + + .cu-sm-pr-lg { + padding-right: var(--canon-spacing-lg); + } + + .cu-sm-pr-md { + padding-right: var(--canon-spacing-md); + } + + .cu-sm-pr-none { + padding-right: 0; + } + + .cu-sm-pr-sm { + padding-right: var(--canon-spacing-sm); + } + + .cu-sm-pr-xl { + padding-right: var(--canon-spacing-xl); + } + + .cu-sm-pr-xs { + padding-right: var(--canon-spacing-xs); + } + + .cu-sm-pt-2xl { + padding-top: var(--canon-spacing-2xl); + } + + .cu-sm-pt-lg { + padding-top: var(--canon-spacing-lg); + } + + .cu-sm-pt-md { + padding-top: var(--canon-spacing-md); + } + + .cu-sm-pt-none { + padding-top: 0; + } + + .cu-sm-pt-sm { + padding-top: var(--canon-spacing-sm); + } + + .cu-sm-pt-xl { + padding-top: var(--canon-spacing-xl); + } + + .cu-sm-pt-xs { + padding-top: var(--canon-spacing-xs); + } + + .cu-sm-px-2xl { + padding-left: var(--canon-spacing-2xl); + padding-right: var(--canon-spacing-2xl); + } + + .cu-sm-px-lg { + padding-left: var(--canon-spacing-lg); + padding-right: var(--canon-spacing-lg); + } + + .cu-sm-px-md { + padding-left: var(--canon-spacing-md); + padding-right: var(--canon-spacing-md); + } + + .cu-sm-px-none { + padding-left: 0; + padding-right: 0; + } + + .cu-sm-px-sm { + padding-left: var(--canon-spacing-sm); + padding-right: var(--canon-spacing-sm); + } + + .cu-sm-px-xl { + padding-left: var(--canon-spacing-xl); + padding-right: var(--canon-spacing-xl); + } + + .cu-sm-px-xs { + padding-left: var(--canon-spacing-xs); + padding-right: var(--canon-spacing-xs); + } + + .cu-sm-py-2xl { + padding-top: var(--canon-spacing-2xl); + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-sm-py-lg { + padding-top: var(--canon-spacing-lg); + padding-bottom: var(--canon-spacing-lg); + } + + .cu-sm-py-md { + padding-top: var(--canon-spacing-md); + padding-bottom: var(--canon-spacing-md); + } + + .cu-sm-py-none { + padding-top: 0; + padding-bottom: 0; + } + + .cu-sm-py-sm { + padding-top: var(--canon-spacing-sm); + padding-bottom: var(--canon-spacing-sm); + } + + .cu-sm-py-xl { + padding-top: var(--canon-spacing-xl); + padding-bottom: var(--canon-spacing-xl); + } + + .cu-sm-py-xs { + padding-top: var(--canon-spacing-xs); + padding-bottom: var(--canon-spacing-xs); + } + + .cu-sm-rounded-2xl { + border-radius: var(--canon-border-radius-2xl); + } + + .cu-sm-rounded-2xs { + border-radius: var(--canon-border-radius-2xs); + } + + .cu-sm-rounded-lg { + border-radius: var(--canon-border-radius-lg); + } + + .cu-sm-rounded-md { + border-radius: var(--canon-border-radius-md); + } + + .cu-sm-rounded-none { + border-radius: 0; + } + + .cu-sm-rounded-sm { + border-radius: var(--canon-border-radius-sm); + } + + .cu-sm-rounded-xl { + border-radius: var(--canon-border-radius-xl); + } + + .cu-sm-rounded-xs { + border-radius: var(--canon-border-radius-xs); + } + + .cu-sm-row-span-1 { + grid-row: span 1 / span 1; + } + + .cu-sm-row-span-10 { + grid-row: span 10 / span 10; + } + + .cu-sm-row-span-11 { + grid-row: span 11 / span 11; + } + + .cu-sm-row-span-12 { + grid-row: span 12 / span 12; + } + + .cu-sm-row-span-2 { + grid-row: span 2 / span 2; + } + + .cu-sm-row-span-3 { + grid-row: span 3 / span 3; + } + + .cu-sm-row-span-4 { + grid-row: span 4 / span 4; + } + + .cu-sm-row-span-5 { + grid-row: span 5 / span 5; + } + + .cu-sm-row-span-6 { + grid-row: span 6 / span 6; + } + + .cu-sm-row-span-7 { + grid-row: span 7 / span 7; + } + + .cu-sm-row-span-8 { + grid-row: span 8 / span 8; + } + + .cu-sm-row-span-9 { + grid-row: span 9 / span 9; + } + + .cu-sm-row-span-auto { + grid-row: span auto / span auto; + } + + .cu-sm-wrap-reverse { + flex-wrap: wrap-reverse; + } + } +} diff --git a/packages/canon/src/css/utilities/xl.css b/packages/canon/src/css/utilities/xl.css new file mode 100644 index 0000000000..0a999756ae --- /dev/null +++ b/packages/canon/src/css/utilities/xl.css @@ -0,0 +1,884 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer utilities { + @media (min-width: 1280px) { + .cu-xl-block { + display: block; + } + + .cu-xl-border-base { + border-color: var(--canon-border-base); + border-width: 1px; + border-style: solid; + } + + .cu-xl-border-error { + border-color: var(--canon-border-error); + border-width: 1px; + border-style: solid; + } + + .cu-xl-border-none { + border-color: transparent; + border-width: 0; + } + + .cu-xl-border-selected { + border-color: var(--canon-border-selected); + border-width: 1px; + border-style: solid; + } + + .cu-xl-border-warning { + border-color: var(--canon-border-warning); + border-width: 1px; + border-style: solid; + } + + .cu-xl-col-end-1 { + grid-column-end: 1; + } + + .cu-xl-col-end-10 { + grid-column-end: 10; + } + + .cu-xl-col-end-11 { + grid-column-end: 11; + } + + .cu-xl-col-end-12 { + grid-column-end: 12; + } + + .cu-xl-col-end-13 { + grid-column-end: 13; + } + + .cu-xl-col-end-2 { + grid-column-end: 2; + } + + .cu-xl-col-end-3 { + grid-column-end: 3; + } + + .cu-xl-col-end-4 { + grid-column-end: 4; + } + + .cu-xl-col-end-5 { + grid-column-end: 5; + } + + .cu-xl-col-end-6 { + grid-column-end: 6; + } + + .cu-xl-col-end-7 { + grid-column-end: 7; + } + + .cu-xl-col-end-8 { + grid-column-end: 8; + } + + .cu-xl-col-end-9 { + grid-column-end: 9; + } + + .cu-xl-col-end-auto { + grid-column-end: auto; + } + + .cu-xl-col-span-1 { + grid-column: span 1 / span 1; + } + + .cu-xl-col-span-10 { + grid-column: span 10 / span 10; + } + + .cu-xl-col-span-11 { + grid-column: span 11 / span 11; + } + + .cu-xl-col-span-12 { + grid-column: span 12 / span 12; + } + + .cu-xl-col-span-2 { + grid-column: span 2 / span 2; + } + + .cu-xl-col-span-3 { + grid-column: span 3 / span 3; + } + + .cu-xl-col-span-4 { + grid-column: span 4 / span 4; + } + + .cu-xl-col-span-5 { + grid-column: span 5 / span 5; + } + + .cu-xl-col-span-6 { + grid-column: span 6 / span 6; + } + + .cu-xl-col-span-7 { + grid-column: span 7 / span 7; + } + + .cu-xl-col-span-8 { + grid-column: span 8 / span 8; + } + + .cu-xl-col-span-9 { + grid-column: span 9 / span 9; + } + + .cu-xl-col-span-auto { + grid-column: span auto / span auto; + } + + .cu-xl-col-start-1 { + grid-column-start: 1; + } + + .cu-xl-col-start-10 { + grid-column-start: 10; + } + + .cu-xl-col-start-11 { + grid-column-start: 11; + } + + .cu-xl-col-start-12 { + grid-column-start: 12; + } + + .cu-xl-col-start-13 { + grid-column-start: 13; + } + + .cu-xl-col-start-2 { + grid-column-start: 2; + } + + .cu-xl-col-start-3 { + grid-column-start: 3; + } + + .cu-xl-col-start-4 { + grid-column-start: 4; + } + + .cu-xl-col-start-5 { + grid-column-start: 5; + } + + .cu-xl-col-start-6 { + grid-column-start: 6; + } + + .cu-xl-col-start-7 { + grid-column-start: 7; + } + + .cu-xl-col-start-8 { + grid-column-start: 8; + } + + .cu-xl-col-start-9 { + grid-column-start: 9; + } + + .cu-xl-col-start-auto { + grid-column-start: auto; + } + + .cu-xl-flex { + display: flex; + } + + .cu-xl-flex-col { + flex-direction: column; + } + + .cu-xl-flex-nowrap { + flex-wrap: nowrap; + } + + .cu-xl-flex-row { + flex-direction: row; + } + + .cu-xl-flex-wrap { + flex-wrap: wrap; + } + + .cu-xl-flex-wrap-reverse { + flex-wrap: wrap-reverse; + } + + .cu-xl-gap-2xl { + gap: var(--canon-spacing-2xl); + } + + .cu-xl-gap-lg { + gap: var(--canon-spacing-lg); + } + + .cu-xl-gap-md { + gap: var(--canon-spacing-md); + } + + .cu-xl-gap-none { + gap: 0; + } + + .cu-xl-gap-sm { + gap: var(--canon-spacing-sm); + } + + .cu-xl-gap-xl { + gap: var(--canon-spacing-xl); + } + + .cu-xl-gap-xs { + gap: var(--canon-spacing-xs); + } + + .cu-xl-grid { + display: grid; + } + + .cu-xl-grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-11 { + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-9 { + grid-template-columns: repeat(9, minmax(0, 1fr)); + } + + .cu-xl-grid-cols-auto { + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); + } + + .cu-xl-hidden { + display: none; + } + + .cu-xl-inline { + display: inline; + } + + .cu-xl-inline-block { + display: inline-block; + } + + .cu-xl-items-center { + align-items: center; + } + + .cu-xl-items-end { + align-items: flex-end; + } + + .cu-xl-items-start { + align-items: flex-start; + } + + .cu-xl-items-stretch { + align-items: stretch; + } + + .cu-xl-justify-around { + justify-content: space-around; + } + + .cu-xl-justify-between { + justify-content: space-between; + } + + .cu-xl-justify-center { + justify-content: center; + } + + .cu-xl-justify-end { + justify-content: flex-end; + } + + .cu-xl-justify-start { + justify-content: flex-start; + } + + .cu-xl-justify-stretch { + justify-content: stretch; + } + + .cu-xl-m-2xl { + margin: var(--canon-spacing-2xl); + } + + .cu-xl-m-lg { + margin: var(--canon-spacing-lg); + } + + .cu-xl-m-md { + margin: var(--canon-spacing-md); + } + + .cu-xl-m-none { + margin: 0; + } + + .cu-xl-m-sm { + margin: var(--canon-spacing-sm); + } + + .cu-xl-m-xl { + margin: var(--canon-spacing-xl); + } + + .cu-xl-m-xs { + margin: var(--canon-spacing-xs); + } + + .cu-xl-mb-2xl { + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-xl-mb-lg { + margin-bottom: var(--canon-spacing-lg); + } + + .cu-xl-mb-md { + margin-bottom: var(--canon-spacing-md); + } + + .cu-xl-mb-none { + margin-bottom: 0; + } + + .cu-xl-mb-sm { + margin-bottom: var(--canon-spacing-sm); + } + + .cu-xl-mb-xl { + margin-bottom: var(--canon-spacing-xl); + } + + .cu-xl-mb-xs { + margin-bottom: var(--canon-spacing-xs); + } + + .cu-xl-ml-2xl { + margin-left: var(--canon-spacing-2xl); + } + + .cu-xl-ml-lg { + margin-left: var(--canon-spacing-lg); + } + + .cu-xl-ml-md { + margin-left: var(--canon-spacing-md); + } + + .cu-xl-ml-none { + margin-left: 0; + } + + .cu-xl-ml-sm { + margin-left: var(--canon-spacing-sm); + } + + .cu-xl-ml-xl { + margin-left: var(--canon-spacing-xl); + } + + .cu-xl-ml-xs { + margin-left: var(--canon-spacing-xs); + } + + .cu-xl-mr-2xl { + margin-right: var(--canon-spacing-2xl); + } + + .cu-xl-mr-lg { + margin-right: var(--canon-spacing-lg); + } + + .cu-xl-mr-md { + margin-right: var(--canon-spacing-md); + } + + .cu-xl-mr-none { + margin-right: 0; + } + + .cu-xl-mr-sm { + margin-right: var(--canon-spacing-sm); + } + + .cu-xl-mr-xl { + margin-right: var(--canon-spacing-xl); + } + + .cu-xl-mr-xs { + margin-right: var(--canon-spacing-xs); + } + + .cu-xl-mt-2xl { + margin-top: var(--canon-spacing-2xl); + } + + .cu-xl-mt-lg { + margin-top: var(--canon-spacing-lg); + } + + .cu-xl-mt-md { + margin-top: var(--canon-spacing-md); + } + + .cu-xl-mt-none { + margin-top: 0; + } + + .cu-xl-mt-sm { + margin-top: var(--canon-spacing-sm); + } + + .cu-xl-mt-xl { + margin-top: var(--canon-spacing-xl); + } + + .cu-xl-mt-xs { + margin-top: var(--canon-spacing-xs); + } + + .cu-xl-mx-2xl { + margin-left: var(--canon-spacing-2xl); + margin-right: var(--canon-spacing-2xl); + } + + .cu-xl-mx-lg { + margin-left: var(--canon-spacing-lg); + margin-right: var(--canon-spacing-lg); + } + + .cu-xl-mx-md { + margin-left: var(--canon-spacing-md); + margin-right: var(--canon-spacing-md); + } + + .cu-xl-mx-none { + margin-left: 0; + margin-right: 0; + } + + .cu-xl-mx-sm { + margin-left: var(--canon-spacing-sm); + margin-right: var(--canon-spacing-sm); + } + + .cu-xl-mx-xl { + margin-left: var(--canon-spacing-xl); + margin-right: var(--canon-spacing-xl); + } + + .cu-xl-mx-xs { + margin-left: var(--canon-spacing-xs); + margin-right: var(--canon-spacing-xs); + } + + .cu-xl-my-2xl { + margin-top: var(--canon-spacing-2xl); + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-xl-my-lg { + margin-top: var(--canon-spacing-lg); + margin-bottom: var(--canon-spacing-lg); + } + + .cu-xl-my-md { + margin-top: var(--canon-spacing-md); + margin-bottom: var(--canon-spacing-md); + } + + .cu-xl-my-none { + margin-top: 0; + margin-bottom: 0; + } + + .cu-xl-my-sm { + margin-top: var(--canon-spacing-sm); + margin-bottom: var(--canon-spacing-sm); + } + + .cu-xl-my-xl { + margin-top: var(--canon-spacing-xl); + margin-bottom: var(--canon-spacing-xl); + } + + .cu-xl-my-xs { + margin-top: var(--canon-spacing-xs); + margin-bottom: var(--canon-spacing-xs); + } + + .cu-xl-p-2xl { + padding: var(--canon-spacing-2xl); + } + + .cu-xl-p-lg { + padding: var(--canon-spacing-lg); + } + + .cu-xl-p-md { + padding: var(--canon-spacing-md); + } + + .cu-xl-p-none { + padding: 0; + } + + .cu-xl-p-sm { + padding: var(--canon-spacing-sm); + } + + .cu-xl-p-xl { + padding: var(--canon-spacing-xl); + } + + .cu-xl-p-xs { + padding: var(--canon-spacing-xs); + } + + .cu-xl-pb-2xl { + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-xl-pb-lg { + padding-bottom: var(--canon-spacing-lg); + } + + .cu-xl-pb-md { + padding-bottom: var(--canon-spacing-md); + } + + .cu-xl-pb-none { + padding-bottom: 0; + } + + .cu-xl-pb-sm { + padding-bottom: var(--canon-spacing-sm); + } + + .cu-xl-pb-xl { + padding-bottom: var(--canon-spacing-xl); + } + + .cu-xl-pb-xs { + padding-bottom: var(--canon-spacing-xs); + } + + .cu-xl-pl-2xl { + padding-left: var(--canon-spacing-2xl); + } + + .cu-xl-pl-lg { + padding-left: var(--canon-spacing-lg); + } + + .cu-xl-pl-md { + padding-left: var(--canon-spacing-md); + } + + .cu-xl-pl-none { + padding-left: 0; + } + + .cu-xl-pl-sm { + padding-left: var(--canon-spacing-sm); + } + + .cu-xl-pl-xl { + padding-left: var(--canon-spacing-xl); + } + + .cu-xl-pl-xs { + padding-left: var(--canon-spacing-xs); + } + + .cu-xl-pr-2xl { + padding-right: var(--canon-spacing-2xl); + } + + .cu-xl-pr-lg { + padding-right: var(--canon-spacing-lg); + } + + .cu-xl-pr-md { + padding-right: var(--canon-spacing-md); + } + + .cu-xl-pr-none { + padding-right: 0; + } + + .cu-xl-pr-sm { + padding-right: var(--canon-spacing-sm); + } + + .cu-xl-pr-xl { + padding-right: var(--canon-spacing-xl); + } + + .cu-xl-pr-xs { + padding-right: var(--canon-spacing-xs); + } + + .cu-xl-pt-2xl { + padding-top: var(--canon-spacing-2xl); + } + + .cu-xl-pt-lg { + padding-top: var(--canon-spacing-lg); + } + + .cu-xl-pt-md { + padding-top: var(--canon-spacing-md); + } + + .cu-xl-pt-none { + padding-top: 0; + } + + .cu-xl-pt-sm { + padding-top: var(--canon-spacing-sm); + } + + .cu-xl-pt-xl { + padding-top: var(--canon-spacing-xl); + } + + .cu-xl-pt-xs { + padding-top: var(--canon-spacing-xs); + } + + .cu-xl-px-2xl { + padding-left: var(--canon-spacing-2xl); + padding-right: var(--canon-spacing-2xl); + } + + .cu-xl-px-lg { + padding-left: var(--canon-spacing-lg); + padding-right: var(--canon-spacing-lg); + } + + .cu-xl-px-md { + padding-left: var(--canon-spacing-md); + padding-right: var(--canon-spacing-md); + } + + .cu-xl-px-none { + padding-left: 0; + padding-right: 0; + } + + .cu-xl-px-sm { + padding-left: var(--canon-spacing-sm); + padding-right: var(--canon-spacing-sm); + } + + .cu-xl-px-xl { + padding-left: var(--canon-spacing-xl); + padding-right: var(--canon-spacing-xl); + } + + .cu-xl-px-xs { + padding-left: var(--canon-spacing-xs); + padding-right: var(--canon-spacing-xs); + } + + .cu-xl-py-2xl { + padding-top: var(--canon-spacing-2xl); + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-xl-py-lg { + padding-top: var(--canon-spacing-lg); + padding-bottom: var(--canon-spacing-lg); + } + + .cu-xl-py-md { + padding-top: var(--canon-spacing-md); + padding-bottom: var(--canon-spacing-md); + } + + .cu-xl-py-none { + padding-top: 0; + padding-bottom: 0; + } + + .cu-xl-py-sm { + padding-top: var(--canon-spacing-sm); + padding-bottom: var(--canon-spacing-sm); + } + + .cu-xl-py-xl { + padding-top: var(--canon-spacing-xl); + padding-bottom: var(--canon-spacing-xl); + } + + .cu-xl-py-xs { + padding-top: var(--canon-spacing-xs); + padding-bottom: var(--canon-spacing-xs); + } + + .cu-xl-rounded-2xl { + border-radius: var(--canon-border-radius-2xl); + } + + .cu-xl-rounded-2xs { + border-radius: var(--canon-border-radius-2xs); + } + + .cu-xl-rounded-lg { + border-radius: var(--canon-border-radius-lg); + } + + .cu-xl-rounded-md { + border-radius: var(--canon-border-radius-md); + } + + .cu-xl-rounded-none { + border-radius: 0; + } + + .cu-xl-rounded-sm { + border-radius: var(--canon-border-radius-sm); + } + + .cu-xl-rounded-xl { + border-radius: var(--canon-border-radius-xl); + } + + .cu-xl-rounded-xs { + border-radius: var(--canon-border-radius-xs); + } + + .cu-xl-row-span-1 { + grid-row: span 1 / span 1; + } + + .cu-xl-row-span-10 { + grid-row: span 10 / span 10; + } + + .cu-xl-row-span-11 { + grid-row: span 11 / span 11; + } + + .cu-xl-row-span-12 { + grid-row: span 12 / span 12; + } + + .cu-xl-row-span-2 { + grid-row: span 2 / span 2; + } + + .cu-xl-row-span-3 { + grid-row: span 3 / span 3; + } + + .cu-xl-row-span-4 { + grid-row: span 4 / span 4; + } + + .cu-xl-row-span-5 { + grid-row: span 5 / span 5; + } + + .cu-xl-row-span-6 { + grid-row: span 6 / span 6; + } + + .cu-xl-row-span-7 { + grid-row: span 7 / span 7; + } + + .cu-xl-row-span-8 { + grid-row: span 8 / span 8; + } + + .cu-xl-row-span-9 { + grid-row: span 9 / span 9; + } + + .cu-xl-row-span-auto { + grid-row: span auto / span auto; + } + + .cu-xl-wrap-reverse { + flex-wrap: wrap-reverse; + } + } +} diff --git a/packages/canon/src/css/utilities/xs.css b/packages/canon/src/css/utilities/xs.css new file mode 100644 index 0000000000..28ec25c817 --- /dev/null +++ b/packages/canon/src/css/utilities/xs.css @@ -0,0 +1,882 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@layer utilities { + .cu-block { + display: block; + } + + .cu-border-base { + border-color: var(--canon-border-base); + border-width: 1px; + border-style: solid; + } + + .cu-border-error { + border-color: var(--canon-border-error); + border-width: 1px; + border-style: solid; + } + + .cu-border-none { + border-color: transparent; + border-width: 0; + } + + .cu-border-selected { + border-color: var(--canon-border-selected); + border-width: 1px; + border-style: solid; + } + + .cu-border-warning { + border-color: var(--canon-border-warning); + border-width: 1px; + border-style: solid; + } + + .cu-col-end-1 { + grid-column-end: 1; + } + + .cu-col-end-10 { + grid-column-end: 10; + } + + .cu-col-end-11 { + grid-column-end: 11; + } + + .cu-col-end-12 { + grid-column-end: 12; + } + + .cu-col-end-13 { + grid-column-end: 13; + } + + .cu-col-end-2 { + grid-column-end: 2; + } + + .cu-col-end-3 { + grid-column-end: 3; + } + + .cu-col-end-4 { + grid-column-end: 4; + } + + .cu-col-end-5 { + grid-column-end: 5; + } + + .cu-col-end-6 { + grid-column-end: 6; + } + + .cu-col-end-7 { + grid-column-end: 7; + } + + .cu-col-end-8 { + grid-column-end: 8; + } + + .cu-col-end-9 { + grid-column-end: 9; + } + + .cu-col-end-auto { + grid-column-end: auto; + } + + .cu-col-span-1 { + grid-column: span 1 / span 1; + } + + .cu-col-span-10 { + grid-column: span 10 / span 10; + } + + .cu-col-span-11 { + grid-column: span 11 / span 11; + } + + .cu-col-span-12 { + grid-column: span 12 / span 12; + } + + .cu-col-span-2 { + grid-column: span 2 / span 2; + } + + .cu-col-span-3 { + grid-column: span 3 / span 3; + } + + .cu-col-span-4 { + grid-column: span 4 / span 4; + } + + .cu-col-span-5 { + grid-column: span 5 / span 5; + } + + .cu-col-span-6 { + grid-column: span 6 / span 6; + } + + .cu-col-span-7 { + grid-column: span 7 / span 7; + } + + .cu-col-span-8 { + grid-column: span 8 / span 8; + } + + .cu-col-span-9 { + grid-column: span 9 / span 9; + } + + .cu-col-span-auto { + grid-column: span auto / span auto; + } + + .cu-col-start-1 { + grid-column-start: 1; + } + + .cu-col-start-10 { + grid-column-start: 10; + } + + .cu-col-start-11 { + grid-column-start: 11; + } + + .cu-col-start-12 { + grid-column-start: 12; + } + + .cu-col-start-13 { + grid-column-start: 13; + } + + .cu-col-start-2 { + grid-column-start: 2; + } + + .cu-col-start-3 { + grid-column-start: 3; + } + + .cu-col-start-4 { + grid-column-start: 4; + } + + .cu-col-start-5 { + grid-column-start: 5; + } + + .cu-col-start-6 { + grid-column-start: 6; + } + + .cu-col-start-7 { + grid-column-start: 7; + } + + .cu-col-start-8 { + grid-column-start: 8; + } + + .cu-col-start-9 { + grid-column-start: 9; + } + + .cu-col-start-auto { + grid-column-start: auto; + } + + .cu-flex { + display: flex; + } + + .cu-flex-col { + flex-direction: column; + } + + .cu-flex-nowrap { + flex-wrap: nowrap; + } + + .cu-flex-row { + flex-direction: row; + } + + .cu-flex-wrap { + flex-wrap: wrap; + } + + .cu-flex-wrap-reverse { + flex-wrap: wrap-reverse; + } + + .cu-gap-2xl { + gap: var(--canon-spacing-2xl); + } + + .cu-gap-lg { + gap: var(--canon-spacing-lg); + } + + .cu-gap-md { + gap: var(--canon-spacing-md); + } + + .cu-gap-none { + gap: 0; + } + + .cu-gap-sm { + gap: var(--canon-spacing-sm); + } + + .cu-gap-xl { + gap: var(--canon-spacing-xl); + } + + .cu-gap-xs { + gap: var(--canon-spacing-xs); + } + + .cu-grid { + display: grid; + } + + .cu-grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .cu-grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); + } + + .cu-grid-cols-11 { + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .cu-grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .cu-grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .cu-grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .cu-grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .cu-grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + + .cu-grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + + .cu-grid-cols-7 { + grid-template-columns: repeat(7, minmax(0, 1fr)); + } + + .cu-grid-cols-8 { + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + + .cu-grid-cols-9 { + grid-template-columns: repeat(9, minmax(0, 1fr)); + } + + .cu-grid-cols-auto { + grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); + } + + .cu-hidden { + display: none; + } + + .cu-inline { + display: inline; + } + + .cu-inline-block { + display: inline-block; + } + + .cu-items-center { + align-items: center; + } + + .cu-items-end { + align-items: flex-end; + } + + .cu-items-start { + align-items: flex-start; + } + + .cu-items-stretch { + align-items: stretch; + } + + .cu-justify-around { + justify-content: space-around; + } + + .cu-justify-between { + justify-content: space-between; + } + + .cu-justify-center { + justify-content: center; + } + + .cu-justify-end { + justify-content: flex-end; + } + + .cu-justify-start { + justify-content: flex-start; + } + + .cu-justify-stretch { + justify-content: stretch; + } + + .cu-m-2xl { + margin: var(--canon-spacing-2xl); + } + + .cu-m-lg { + margin: var(--canon-spacing-lg); + } + + .cu-m-md { + margin: var(--canon-spacing-md); + } + + .cu-m-none { + margin: 0; + } + + .cu-m-sm { + margin: var(--canon-spacing-sm); + } + + .cu-m-xl { + margin: var(--canon-spacing-xl); + } + + .cu-m-xs { + margin: var(--canon-spacing-xs); + } + + .cu-mb-2xl { + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-mb-lg { + margin-bottom: var(--canon-spacing-lg); + } + + .cu-mb-md { + margin-bottom: var(--canon-spacing-md); + } + + .cu-mb-none { + margin-bottom: 0; + } + + .cu-mb-sm { + margin-bottom: var(--canon-spacing-sm); + } + + .cu-mb-xl { + margin-bottom: var(--canon-spacing-xl); + } + + .cu-mb-xs { + margin-bottom: var(--canon-spacing-xs); + } + + .cu-ml-2xl { + margin-left: var(--canon-spacing-2xl); + } + + .cu-ml-lg { + margin-left: var(--canon-spacing-lg); + } + + .cu-ml-md { + margin-left: var(--canon-spacing-md); + } + + .cu-ml-none { + margin-left: 0; + } + + .cu-ml-sm { + margin-left: var(--canon-spacing-sm); + } + + .cu-ml-xl { + margin-left: var(--canon-spacing-xl); + } + + .cu-ml-xs { + margin-left: var(--canon-spacing-xs); + } + + .cu-mr-2xl { + margin-right: var(--canon-spacing-2xl); + } + + .cu-mr-lg { + margin-right: var(--canon-spacing-lg); + } + + .cu-mr-md { + margin-right: var(--canon-spacing-md); + } + + .cu-mr-none { + margin-right: 0; + } + + .cu-mr-sm { + margin-right: var(--canon-spacing-sm); + } + + .cu-mr-xl { + margin-right: var(--canon-spacing-xl); + } + + .cu-mr-xs { + margin-right: var(--canon-spacing-xs); + } + + .cu-mt-2xl { + margin-top: var(--canon-spacing-2xl); + } + + .cu-mt-lg { + margin-top: var(--canon-spacing-lg); + } + + .cu-mt-md { + margin-top: var(--canon-spacing-md); + } + + .cu-mt-none { + margin-top: 0; + } + + .cu-mt-sm { + margin-top: var(--canon-spacing-sm); + } + + .cu-mt-xl { + margin-top: var(--canon-spacing-xl); + } + + .cu-mt-xs { + margin-top: var(--canon-spacing-xs); + } + + .cu-mx-2xl { + margin-left: var(--canon-spacing-2xl); + margin-right: var(--canon-spacing-2xl); + } + + .cu-mx-lg { + margin-left: var(--canon-spacing-lg); + margin-right: var(--canon-spacing-lg); + } + + .cu-mx-md { + margin-left: var(--canon-spacing-md); + margin-right: var(--canon-spacing-md); + } + + .cu-mx-none { + margin-left: 0; + margin-right: 0; + } + + .cu-mx-sm { + margin-left: var(--canon-spacing-sm); + margin-right: var(--canon-spacing-sm); + } + + .cu-mx-xl { + margin-left: var(--canon-spacing-xl); + margin-right: var(--canon-spacing-xl); + } + + .cu-mx-xs { + margin-left: var(--canon-spacing-xs); + margin-right: var(--canon-spacing-xs); + } + + .cu-my-2xl { + margin-top: var(--canon-spacing-2xl); + margin-bottom: var(--canon-spacing-2xl); + } + + .cu-my-lg { + margin-top: var(--canon-spacing-lg); + margin-bottom: var(--canon-spacing-lg); + } + + .cu-my-md { + margin-top: var(--canon-spacing-md); + margin-bottom: var(--canon-spacing-md); + } + + .cu-my-none { + margin-top: 0; + margin-bottom: 0; + } + + .cu-my-sm { + margin-top: var(--canon-spacing-sm); + margin-bottom: var(--canon-spacing-sm); + } + + .cu-my-xl { + margin-top: var(--canon-spacing-xl); + margin-bottom: var(--canon-spacing-xl); + } + + .cu-my-xs { + margin-top: var(--canon-spacing-xs); + margin-bottom: var(--canon-spacing-xs); + } + + .cu-p-2xl { + padding: var(--canon-spacing-2xl); + } + + .cu-p-lg { + padding: var(--canon-spacing-lg); + } + + .cu-p-md { + padding: var(--canon-spacing-md); + } + + .cu-p-none { + padding: 0; + } + + .cu-p-sm { + padding: var(--canon-spacing-sm); + } + + .cu-p-xl { + padding: var(--canon-spacing-xl); + } + + .cu-p-xs { + padding: var(--canon-spacing-xs); + } + + .cu-pb-2xl { + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-pb-lg { + padding-bottom: var(--canon-spacing-lg); + } + + .cu-pb-md { + padding-bottom: var(--canon-spacing-md); + } + + .cu-pb-none { + padding-bottom: 0; + } + + .cu-pb-sm { + padding-bottom: var(--canon-spacing-sm); + } + + .cu-pb-xl { + padding-bottom: var(--canon-spacing-xl); + } + + .cu-pb-xs { + padding-bottom: var(--canon-spacing-xs); + } + + .cu-pl-2xl { + padding-left: var(--canon-spacing-2xl); + } + + .cu-pl-lg { + padding-left: var(--canon-spacing-lg); + } + + .cu-pl-md { + padding-left: var(--canon-spacing-md); + } + + .cu-pl-none { + padding-left: 0; + } + + .cu-pl-sm { + padding-left: var(--canon-spacing-sm); + } + + .cu-pl-xl { + padding-left: var(--canon-spacing-xl); + } + + .cu-pl-xs { + padding-left: var(--canon-spacing-xs); + } + + .cu-pr-2xl { + padding-right: var(--canon-spacing-2xl); + } + + .cu-pr-lg { + padding-right: var(--canon-spacing-lg); + } + + .cu-pr-md { + padding-right: var(--canon-spacing-md); + } + + .cu-pr-none { + padding-right: 0; + } + + .cu-pr-sm { + padding-right: var(--canon-spacing-sm); + } + + .cu-pr-xl { + padding-right: var(--canon-spacing-xl); + } + + .cu-pr-xs { + padding-right: var(--canon-spacing-xs); + } + + .cu-pt-2xl { + padding-top: var(--canon-spacing-2xl); + } + + .cu-pt-lg { + padding-top: var(--canon-spacing-lg); + } + + .cu-pt-md { + padding-top: var(--canon-spacing-md); + } + + .cu-pt-none { + padding-top: 0; + } + + .cu-pt-sm { + padding-top: var(--canon-spacing-sm); + } + + .cu-pt-xl { + padding-top: var(--canon-spacing-xl); + } + + .cu-pt-xs { + padding-top: var(--canon-spacing-xs); + } + + .cu-px-2xl { + padding-left: var(--canon-spacing-2xl); + padding-right: var(--canon-spacing-2xl); + } + + .cu-px-lg { + padding-left: var(--canon-spacing-lg); + padding-right: var(--canon-spacing-lg); + } + + .cu-px-md { + padding-left: var(--canon-spacing-md); + padding-right: var(--canon-spacing-md); + } + + .cu-px-none { + padding-left: 0; + padding-right: 0; + } + + .cu-px-sm { + padding-left: var(--canon-spacing-sm); + padding-right: var(--canon-spacing-sm); + } + + .cu-px-xl { + padding-left: var(--canon-spacing-xl); + padding-right: var(--canon-spacing-xl); + } + + .cu-px-xs { + padding-left: var(--canon-spacing-xs); + padding-right: var(--canon-spacing-xs); + } + + .cu-py-2xl { + padding-top: var(--canon-spacing-2xl); + padding-bottom: var(--canon-spacing-2xl); + } + + .cu-py-lg { + padding-top: var(--canon-spacing-lg); + padding-bottom: var(--canon-spacing-lg); + } + + .cu-py-md { + padding-top: var(--canon-spacing-md); + padding-bottom: var(--canon-spacing-md); + } + + .cu-py-none { + padding-top: 0; + padding-bottom: 0; + } + + .cu-py-sm { + padding-top: var(--canon-spacing-sm); + padding-bottom: var(--canon-spacing-sm); + } + + .cu-py-xl { + padding-top: var(--canon-spacing-xl); + padding-bottom: var(--canon-spacing-xl); + } + + .cu-py-xs { + padding-top: var(--canon-spacing-xs); + padding-bottom: var(--canon-spacing-xs); + } + + .cu-rounded-2xl { + border-radius: var(--canon-border-radius-2xl); + } + + .cu-rounded-2xs { + border-radius: var(--canon-border-radius-2xs); + } + + .cu-rounded-lg { + border-radius: var(--canon-border-radius-lg); + } + + .cu-rounded-md { + border-radius: var(--canon-border-radius-md); + } + + .cu-rounded-none { + border-radius: 0; + } + + .cu-rounded-sm { + border-radius: var(--canon-border-radius-sm); + } + + .cu-rounded-xl { + border-radius: var(--canon-border-radius-xl); + } + + .cu-rounded-xs { + border-radius: var(--canon-border-radius-xs); + } + + .cu-row-span-1 { + grid-row: span 1 / span 1; + } + + .cu-row-span-10 { + grid-row: span 10 / span 10; + } + + .cu-row-span-11 { + grid-row: span 11 / span 11; + } + + .cu-row-span-12 { + grid-row: span 12 / span 12; + } + + .cu-row-span-2 { + grid-row: span 2 / span 2; + } + + .cu-row-span-3 { + grid-row: span 3 / span 3; + } + + .cu-row-span-4 { + grid-row: span 4 / span 4; + } + + .cu-row-span-5 { + grid-row: span 5 / span 5; + } + + .cu-row-span-6 { + grid-row: span 6 / span 6; + } + + .cu-row-span-7 { + grid-row: span 7 / span 7; + } + + .cu-row-span-8 { + grid-row: span 8 / span 8; + } + + .cu-row-span-9 { + grid-row: span 9 / span 9; + } + + .cu-row-span-auto { + grid-row: span auto / span auto; + } + + .cu-wrap-reverse { + flex-wrap: wrap-reverse; + } +} diff --git a/packages/canon/src/index.ts b/packages/canon/src/index.ts index e06207bd06..23432295e2 100644 --- a/packages/canon/src/index.ts +++ b/packages/canon/src/index.ts @@ -20,9 +20,6 @@ * @packageDocumentation */ -// Layout types -export * from './layout/types'; - // Layout components export * from './components/Box'; export * from './components/Grid'; @@ -35,5 +32,6 @@ export * from './components/Button'; export * from './components/Icon'; export * from './components/Checkbox'; export * from './components/Table'; -export * from './components/Field'; -export * from './components/Input'; + +// Types +export * from './types'; diff --git a/packages/canon/src/layout/properties.ts b/packages/canon/src/layout/properties.ts deleted file mode 100644 index d41bbddbeb..0000000000 --- a/packages/canon/src/layout/properties.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** @public */ -export const breakpoints = { - xs: {}, - sm: { '@media': 'screen and (min-width: 640px)' }, - md: { '@media': 'screen and (min-width: 768px)' }, - lg: { '@media': 'screen and (min-width: 1024px)' }, - xl: { '@media': 'screen and (min-width: 1280px)' }, - '2xl': { '@media': 'screen and (min-width: 1536px)' }, -}; - -/** @public */ -export const themes = { - light: { selector: '[data-theme="light"] &' }, - dark: { selector: '[data-theme="dark"] &' }, -}; - -/** @public */ -export const space = { - none: 0, - '2xs': 'var(--canon-spacing-2xs)', - xs: 'var(--canon-spacing-xs)', - sm: 'var(--canon-spacing-sm)', - md: 'var(--canon-spacing-md)', - lg: 'var(--canon-spacing-lg)', - xl: 'var(--canon-spacing-xl)', - '2xl': 'var(--canon-spacing-2xl)', -}; diff --git a/packages/canon/src/layout/sprinkles.css.ts b/packages/canon/src/layout/sprinkles.css.ts deleted file mode 100644 index 7e85487fe3..0000000000 --- a/packages/canon/src/layout/sprinkles.css.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { defineProperties } from '@vanilla-extract/sprinkles'; -import { breakpoints, space } from './properties'; - -export const spacingProperties = defineProperties({ - conditions: breakpoints, - defaultCondition: 'xs', - responsiveArray: ['xs', 'sm', 'md', 'lg', 'xl', '2xl'], - properties: { - paddingTop: space, - paddingBottom: space, - paddingLeft: space, - paddingRight: space, - marginTop: space, - marginBottom: space, - marginLeft: space, - marginRight: space, - gap: space, - }, - shorthands: { - padding: ['paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight'], - paddingX: ['paddingLeft', 'paddingRight'], - paddingY: ['paddingTop', 'paddingBottom'], - margin: ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'], - marginX: ['marginLeft', 'marginRight'], - marginY: ['marginTop', 'marginBottom'], - }, -}); - -export const colorProperties = defineProperties({ - conditions: { - light: { selector: '[data-theme="light"] &' }, - dark: { selector: '[data-theme="dark"] &' }, - }, - defaultCondition: ['light', 'dark'], - properties: { - color: { - primary: 'var(--canon-text-primary)', - secondary: 'var(--canon-text-secondary)', - error: 'var(--canon-error)', - }, - background: { - background: 'var(--canon-background)', - elevation1: 'var(--canon-surface-1)', - elevation2: 'var(--canon-surface-2)', - transparent: 'transparent', - }, - }, -}); diff --git a/packages/canon/src/layout/types.ts b/packages/canon/src/layout/types.ts deleted file mode 100644 index c051dacb44..0000000000 --- a/packages/canon/src/layout/types.ts +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2024 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { breakpoints, space, themes } from './properties'; - -/** @public */ -export type Breakpoint = keyof typeof breakpoints; - -/** @public */ -export type Space = keyof typeof space; - -/** @public */ -export type Theme = keyof typeof themes; - -/** @public */ -export type Gap = Space | Partial>; - -/** @public */ -export type PaddingLeft = Space | Partial>; - -/** @public */ -export type PaddingRight = Space | Partial>; - -/** @public */ -export type PaddingTop = Space | Partial>; - -/** @public */ -export type PaddingBottom = Space | Partial>; - -/** @public */ -export type Padding = Space | Partial>; - -/** @public */ -export type PaddingX = Space | Partial>; - -/** @public */ -export type PaddingY = Space | Partial>; - -/** @public */ -export type MarginLeft = Space | Partial>; - -/** @public */ -export type MarginRight = Space | Partial>; - -/** @public */ -export type MarginTop = Space | Partial>; - -/** @public */ -export type MarginBottom = Space | Partial>; - -/** @public */ -export type Margin = Space | Partial>; - -/** @public */ -export type MarginX = Space | Partial>; - -/** @public */ -export type MarginY = Space | Partial>; - -/** @public */ -export interface SpaceProps { - gap?: Gap; - padding?: Padding; - paddingLeft?: PaddingLeft; - paddingRight?: PaddingRight; - paddingTop?: PaddingTop; - paddingBottom?: PaddingBottom; - paddingX?: PaddingX; - paddingY?: PaddingY; - margin?: Margin; - marginLeft?: MarginLeft; - marginRight?: MarginRight; - marginTop?: MarginTop; - marginBottom?: MarginBottom; - marginX?: MarginX; - marginY?: MarginY; -} - -/** @public */ -export type Background = - | 'background' - | 'elevation1' - | 'elevation2' - | 'transparent' - | Partial< - Record - >; - -/** @public */ -export type Color = - | 'primary' - | 'secondary' - | 'error' - | Partial>; - -/** @public */ -export type AsProps = - | 'div' - | 'span' - | 'p' - | 'article' - | 'section' - | 'main' - | 'nav' - | 'aside' - | 'ul' - | 'ol' - | 'li' - | 'details' - | 'summary' - | 'dd' - | 'dl' - | 'dt'; - -/** @public */ -export interface ColorProps { - color?: Color; - background?: Background; -} diff --git a/packages/canon/src/types.ts b/packages/canon/src/types.ts index 236d633f84..1211b1be4d 100644 --- a/packages/canon/src/types.ts +++ b/packages/canon/src/types.ts @@ -13,11 +13,101 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export interface Breakpoints { - xs: string; - sm: string; - md: string; - lg: string; - xl: string; - '2xl': string; + +/** @public */ +export type AsProps = + | 'div' + | 'span' + | 'p' + | 'article' + | 'section' + | 'main' + | 'nav' + | 'aside' + | 'ul' + | 'ol' + | 'li' + | 'details' + | 'summary' + | 'dd' + | 'dl' + | 'dt'; + +/** @public */ +export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'; + +/** @public */ +export type Space = 'none' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'; + +/** @public */ +export type Display = 'none' | 'flex' | 'block' | 'inline'; + +/** @public */ +export type FlexDirection = 'row' | 'column'; + +/** @public */ +export type FlexWrap = 'wrap' | 'nowrap' | 'wrap-reverse'; + +/** @public */ +export type JustifyContent = + | 'stretch' + | 'start' + | 'center' + | 'end' + | 'around' + | 'between'; + +/** @public */ +export type AlignItems = 'stretch' | 'start' | 'center' | 'end'; + +/** @public */ +export type BorderRadius = + | 'none' + | '2xs' + | 'xs' + | 'sm' + | 'md' + | 'lg' + | 'xl' + | '2xl'; + +/** @public */ +export type Border = 'none' | 'base' | 'error' | 'warning' | 'selected'; + +/** @public */ +export type Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto'; + +/** @public */ +export interface SpaceProps { + margin?: Space | Partial>; + marginBottom?: Space | Partial>; + marginLeft?: Space | Partial>; + marginRight?: Space | Partial>; + marginTop?: Space | Partial>; + marginX?: Space | Partial>; + marginY?: Space | Partial>; + padding?: Space | Partial>; + paddingBottom?: Space | Partial>; + paddingLeft?: Space | Partial>; + paddingRight?: Space | Partial>; + paddingTop?: Space | Partial>; + paddingX?: Space | Partial>; + paddingY?: Space | Partial>; +} + +/** @public */ +export interface UtilityProps extends SpaceProps { + alignItems?: AlignItems | Partial>; + border?: Border | Partial>; + borderRadius?: BorderRadius | Partial>; + colEnd?: Columns | 'auto' | Partial>; + colSpan?: Columns | 'full' | Partial>; + colStart?: Columns | 'auto' | Partial>; + columns?: Columns | Partial>; + display?: Display | Partial>; + flexDirection?: FlexDirection | Partial>; + flexWrap?: FlexWrap | Partial>; + gap?: Space | Partial>; + justifyContent?: JustifyContent | Partial>; + rowSpan?: Columns | 'full' | Partial>; } diff --git a/packages/canon/src/utils/getClassNames.ts b/packages/canon/src/utils/getClassNames.ts new file mode 100644 index 0000000000..684e633027 --- /dev/null +++ b/packages/canon/src/utils/getClassNames.ts @@ -0,0 +1,206 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { Breakpoint, UtilityProps } from '../types'; + +const spaceMap = (type: string) => ({ + none: `${type}-none`, + '2xs': `${type}-2xs`, + xs: `${type}-xs`, + sm: `${type}-sm`, + md: `${type}-md`, + lg: `${type}-lg`, + xl: `${type}-xl`, + '2xl': `${type}-2xl`, +}); + +const valueMap: Record> = { + alignItems: { + stretch: 'items-stretch', + start: 'items-start', + center: 'items-center', + end: 'items-end', + }, + border: { + none: 'border-none', + base: 'border-base', + error: 'border-error', + warning: 'border-warning', + selected: 'border-selected', + }, + borderRadius: { + none: 'rounded-none', + '2xs': 'rounded-2xs', + xs: 'rounded-xs', + sm: 'rounded-sm', + md: 'rounded-md', + lg: 'rounded-lg', + xl: 'rounded-xl', + '2xl': 'rounded-2xl', + }, + colEnd: { + 1: 'col-end-1', + 2: 'col-end-2', + 3: 'col-end-3', + 4: 'col-end-4', + 5: 'col-end-5', + 6: 'col-end-6', + 7: 'col-end-7', + 8: 'col-end-8', + 9: 'col-end-9', + 10: 'col-end-10', + 11: 'col-end-11', + 12: 'col-end-12', + auto: 'col-end-auto', + }, + colSpan: { + 1: 'col-span-1', + 2: 'col-span-2', + 3: 'col-span-3', + 4: 'col-span-4', + 5: 'col-span-5', + 6: 'col-span-6', + 7: 'col-span-7', + 8: 'col-span-8', + 9: 'col-span-9', + 10: 'col-span-10', + 11: 'col-span-11', + 12: 'col-span-12', + auto: 'col-span-auto', + }, + colStart: { + 1: 'col-start-1', + 2: 'col-start-2', + 3: 'col-start-3', + 4: 'col-start-4', + 5: 'col-start-5', + 6: 'col-start-6', + 7: 'col-start-7', + 8: 'col-start-8', + 9: 'col-start-9', + 10: 'col-start-10', + 11: 'col-start-11', + 12: 'col-start-12', + auto: 'col-start-auto', + }, + columns: { + 1: 'grid-cols-1', + 2: 'grid-cols-2', + 3: 'grid-cols-3', + 4: 'grid-cols-4', + 5: 'grid-cols-5', + 6: 'grid-cols-6', + 7: 'grid-cols-7', + 8: 'grid-cols-8', + 9: 'grid-cols-9', + 10: 'grid-cols-10', + 11: 'grid-cols-11', + 12: 'grid-cols-12', + auto: 'grid-cols-auto', + }, + display: { + none: 'hidden', + flex: 'flex', + block: 'block', + inline: 'inline', + }, + flexDirection: { + row: 'flex-row', + column: 'flex-col', + }, + flexWrap: { + wrap: 'flex-wrap', + nowrap: 'flex-nowrap', + 'wrap-reverse': 'flex-wrap-reverse', + }, + gap: spaceMap('gap'), + justifyContent: { + stretch: 'justify-stretch', + start: 'justify-start', + center: 'justify-center', + end: 'justify-end', + around: 'justify-around', + between: 'justify-between', + }, + margin: spaceMap('m'), + marginBottom: spaceMap('mb'), + marginLeft: spaceMap('ml'), + marginRight: spaceMap('mr'), + marginTop: spaceMap('mt'), + marginX: spaceMap('mx'), + marginY: spaceMap('my'), + padding: spaceMap('p'), + paddingBottom: spaceMap('pb'), + paddingLeft: spaceMap('pl'), + paddingRight: spaceMap('pr'), + paddingTop: spaceMap('pt'), + paddingX: spaceMap('px'), + paddingY: spaceMap('py'), + rowSpan: { + 1: 'row-span-1', + 2: 'row-span-2', + 3: 'row-span-3', + 4: 'row-span-4', + 5: 'row-span-5', + 6: 'row-span-6', + 7: 'row-span-7', + 8: 'row-span-8', + 9: 'row-span-9', + 10: 'row-span-10', + 11: 'row-span-11', + 12: 'row-span-12', + full: 'row-span-full', + }, +}; + +const generateClassNames = (propName: string, propValue: any) => { + const classNames: string[] = []; + + // If the property name is not in the valueMap, return an empty array + if (!valueMap.hasOwnProperty(propName)) { + return classNames; + } + + if (typeof propValue === 'string' || typeof propValue === 'number') { + // If the property value is a string, map it to the valueMap + const value = valueMap[propName]?.[propValue] || propValue; + classNames.push(`cu-${value}`); + } else if (typeof propValue === 'object') { + // If the property value is an object, map each key-value pair + Object.entries(propValue as Record).forEach( + ([breakpoint, value]) => { + const mappedValue = valueMap[propName]?.[value] || value; + + if (breakpoint === 'xs') { + classNames.push(`cu-${mappedValue}`); + } else { + classNames.push(`cu-${breakpoint}-${mappedValue}`); + } + }, + ); + } + return classNames; +}; + +export const getClassNames = (props: UtilityProps) => { + const classNames: string[] = []; + + Object.entries(props).forEach(([propName, propValue]) => { + classNames.push(...generateClassNames(propName, propValue)); + }); + + return classNames.filter(Boolean).join(' '); +}; diff --git a/plugins/catalog-backend/src/processors/PlaceholderProcessor.test.ts b/plugins/catalog-backend/src/processors/PlaceholderProcessor.test.ts index c2c49ea1cb..9d47877972 100644 --- a/plugins/catalog-backend/src/processors/PlaceholderProcessor.test.ts +++ b/plugins/catalog-backend/src/processors/PlaceholderProcessor.test.ts @@ -28,16 +28,12 @@ import { textPlaceholderResolver, yamlPlaceholderResolver, } from './PlaceholderProcessor'; -import { UrlReaderService } from '@backstage/backend-plugin-api'; +import { mockServices } from '@backstage/backend-test-utils'; const integrations = ScmIntegrations.fromConfig(new ConfigReader({})); describe('PlaceholderProcessor', () => { - const reader: jest.Mocked = { - readTree: jest.fn(), - search: jest.fn(), - readUrl: jest.fn(), - }; + const reader = mockServices.urlReader.mock(); beforeEach(() => { jest.resetAllMocks(); diff --git a/plugins/catalog-backend/src/processors/UrlReaderProcessor.test.ts b/plugins/catalog-backend/src/processors/UrlReaderProcessor.test.ts index 545888e7cb..4a8f982027 100644 --- a/plugins/catalog-backend/src/processors/UrlReaderProcessor.test.ts +++ b/plugins/catalog-backend/src/processors/UrlReaderProcessor.test.ts @@ -31,7 +31,6 @@ import { import { defaultEntityDataParser } from '../util/parse'; import { UrlReaderProcessor } from './UrlReaderProcessor'; import { UrlReaders } from '@backstage/backend-defaults/urlReader'; -import { UrlReaderService } from '@backstage/backend-plugin-api'; describe('UrlReaderProcessor', () => { const mockApiOrigin = 'http://localhost'; @@ -193,11 +192,9 @@ describe('UrlReaderProcessor', () => { it('uses search when there are globs', async () => { const logger = mockServices.logger.mock(); - const reader: jest.Mocked = { - readUrl: jest.fn(), - readTree: jest.fn(), - search: jest.fn().mockImplementation(async () => []), - }; + const reader = mockServices.urlReader.mock({ + search: jest.fn().mockResolvedValue([]), + }); const processor = new UrlReaderProcessor({ reader, logger }); diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 2d158f7f16..234a636a62 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -42,7 +42,6 @@ import { wrapServer } from '@backstage/backend-openapi-utils'; import { Server } from 'http'; import { mockCredentials, mockServices } from '@backstage/backend-test-utils'; import { LocationAnalyzer } from '@backstage/plugin-catalog-node'; -import { PermissionsService } from '@backstage/backend-plugin-api'; describe('createRouter readonly disabled', () => { let entitiesCatalog: jest.Mocked; @@ -51,7 +50,7 @@ describe('createRouter readonly disabled', () => { let app: express.Express | Server; let refreshService: RefreshService; let locationAnalyzer: jest.Mocked; - let permissionsService: jest.Mocked; + const permissionsService = mockServices.permissions.mock(); beforeEach(async () => { entitiesCatalog = { @@ -69,15 +68,9 @@ describe('createRouter readonly disabled', () => { deleteLocation: jest.fn(), getLocationByEntity: jest.fn(), }; - locationAnalyzer = { analyzeLocation: jest.fn(), }; - permissionsService = { - authorize: jest.fn(), - authorizeConditional: jest.fn(), - }; - refreshService = { refresh: jest.fn() }; orchestrator = { process: jest.fn() }; const router = await createRouter({ @@ -91,13 +84,13 @@ describe('createRouter readonly disabled', () => { auth: mockServices.auth(), httpAuth: mockServices.httpAuth(), locationAnalyzer, - permissionsService: permissionsService, + permissionsService, }); app = await wrapServer(express().use(router)); }); beforeEach(() => { - jest.resetAllMocks(); + jest.clearAllMocks(); }); describe('POST /refresh', () => { @@ -158,7 +151,7 @@ describe('createRouter readonly disabled', () => { auth: mockServices.auth(), httpAuth: mockServices.httpAuth(), locationAnalyzer, - permissionsService: permissionsService, + permissionsService, disableRelationsCompatibility: true, // added }); app = await wrapServer(express().use(router)); @@ -218,7 +211,7 @@ describe('createRouter readonly disabled', () => { auth: mockServices.auth(), httpAuth: mockServices.httpAuth(), locationAnalyzer, - permissionsService: permissionsService, + permissionsService, disableRelationsCompatibility: true, // added }); app = await wrapServer(express().use(router)); @@ -939,7 +932,7 @@ describe('createRouter readonly and raw json enabled', () => { let entitiesCatalog: jest.Mocked; let app: express.Express; let locationService: jest.Mocked; - let permissionsService: jest.Mocked; + const permissionsService = mockServices.permissions.mock(); beforeAll(async () => { entitiesCatalog = { @@ -970,13 +963,13 @@ describe('createRouter readonly and raw json enabled', () => { permissionIntegrationRouter: express.Router(), auth: mockServices.auth(), httpAuth: mockServices.httpAuth(), - permissionsService: permissionsService, + permissionsService, }); app = express().use(router); }); beforeEach(() => { - jest.resetAllMocks(); + jest.clearAllMocks(); }); describe('GET /entities', () => { @@ -1141,7 +1134,7 @@ describe('NextRouter permissioning', () => { let locationService: jest.Mocked; let app: express.Express; let refreshService: RefreshService; - let permissionsService: jest.Mocked; + const permissionsService = mockServices.permissions.mock(); const fakeRule = createPermissionRule({ name: 'FAKE_RULE', @@ -1188,13 +1181,13 @@ describe('NextRouter permissioning', () => { }), auth: mockServices.auth(), httpAuth: mockServices.httpAuth(), - permissionsService: permissionsService, + permissionsService, }); app = express().use(router); }); afterEach(() => { - jest.resetAllMocks(); + jest.clearAllMocks(); }); it('accepts and evaluates conditions at the apply-conditions endpoint', async () => { diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts index e7b1d027a0..41803dcd9d 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts @@ -23,10 +23,7 @@ import { registerMswTestHooks, } from '@backstage/backend-test-utils'; import { NotFoundError } from '@backstage/errors'; -import { - AuthorizeResult, - PermissionEvaluator, -} from '@backstage/plugin-permission-common'; +import { AuthorizeResult } from '@backstage/plugin-permission-common'; import { ANNOTATION_KUBERNETES_AUTH_PROVIDER, KubernetesRequestAuth, @@ -55,10 +52,7 @@ import { } from './KubernetesProxy'; import type { Request } from 'express'; -import { - BackstageCredentials, - DiscoveryService, -} from '@backstage/backend-plugin-api'; +import { BackstageCredentials } from '@backstage/backend-plugin-api'; const mockCertDir = createMockDirectory({ content: { @@ -79,15 +73,8 @@ describe('KubernetesProxy', () => { >(), }; - const permissionApi: jest.Mocked = { - authorize: jest.fn(), - authorizeConditional: jest.fn(), - }; - - const mockDisocveryApi: jest.Mocked = { - getBaseUrl: jest.fn(), - getExternalBaseUrl: jest.fn(), - }; + const permissionApi = mockServices.permissions.mock(); + const mockDisocveryApi = mockServices.discovery.mock(); registerMswTestHooks(worker); diff --git a/plugins/notifications-backend/dev/index.ts b/plugins/notifications-backend/dev/index.ts index cee630d1ad..f1fe453457 100644 --- a/plugins/notifications-backend/dev/index.ts +++ b/plugins/notifications-backend/dev/index.ts @@ -20,13 +20,13 @@ import { createBackendPlugin, } from '@backstage/backend-plugin-api'; import { notificationService } from '@backstage/plugin-notifications-node'; -import { errorHandler } from '@backstage/backend-common'; import { notificationSeverities, NotificationSeverity, } from '@backstage/plugin-notifications-common'; import express, { Response } from 'express'; import Router from 'express-promise-router'; +import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter'; const randomSeverity = (): NotificationSeverity => { return notificationSeverities[ @@ -77,8 +77,12 @@ const notificationsDebug = createBackendPlugin({ deps: { notifications: notificationService, httpRouter: coreServices.httpRouter, + config: coreServices.rootConfig, + logger: coreServices.logger, }, - async init({ notifications, httpRouter }) { + async init({ notifications, httpRouter, config, logger }) { + const middleware = MiddlewareFactory.create({ config, logger }); + const router = Router(); router.use(express.json()); router.post('/', async (_, res: Response) => { @@ -96,7 +100,7 @@ const notificationsDebug = createBackendPlugin({ }); res.status(200).send({ status: 'ok' }); }); - router.use(errorHandler()); + router.use(middleware.error()); httpRouter.use(router); httpRouter.addAuthPolicy({ diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json index 4dd2c1a655..4330d4c903 100644 --- a/plugins/notifications-backend/package.json +++ b/plugins/notifications-backend/package.json @@ -38,7 +38,6 @@ "test": "backstage-cli package test" }, "dependencies": { - "@backstage/backend-common": "^0.25.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", diff --git a/plugins/notifications-backend/src/service/router.test.ts b/plugins/notifications-backend/src/service/router.test.ts index 5126181c4f..e557e5818d 100644 --- a/plugins/notifications-backend/src/service/router.test.ts +++ b/plugins/notifications-backend/src/service/router.test.ts @@ -14,16 +14,12 @@ * limitations under the License. */ -import { - DatabaseManager, - PluginDatabaseManager, -} from '@backstage/backend-common'; import express from 'express'; import request from 'supertest'; import { createRouter } from './router'; -import { ConfigReader } from '@backstage/config'; import { SignalsService } from '@backstage/plugin-signals-node'; import { + TestDatabases, mockCredentials, mockErrorHandler, mockServices, @@ -31,20 +27,9 @@ import { import { NotificationSendOptions } from '@backstage/plugin-notifications-node'; import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; -function createDatabase(): PluginDatabaseManager { - return DatabaseManager.fromConfig( - new ConfigReader({ - backend: { - database: { - client: 'better-sqlite3', - connection: ':memory:', - }, - }, - }), - ).forPlugin('notifications'); -} - describe('createRouter', () => { + const databases = TestDatabases.create(); + let app: express.Express; const signalService: jest.Mocked = { @@ -62,9 +47,10 @@ describe('createRouter', () => { const catalog = catalogServiceMock(); beforeAll(async () => { + const knex = await databases.init('SQLITE_3'); const router = await createRouter({ logger: mockServices.logger.mock(), - database: createDatabase(), + database: { getClient: async () => knex }, signals: signalService, userInfo, config, diff --git a/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.test.ts b/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.test.ts index 32a6f8b701..d4c77c617d 100644 --- a/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.test.ts +++ b/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.test.ts @@ -14,17 +14,13 @@ * limitations under the License. */ -import { registerMswTestHooks } from '@backstage/backend-test-utils'; +import { mockServices } from '@backstage/backend-test-utils'; import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; +import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; import { TestPipeline } from '@backstage/plugin-search-backend-node'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; import { Readable } from 'stream'; import { DefaultCatalogCollatorFactory } from './DefaultCatalogCollatorFactory'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; - -const server = setupServer(); const expectedEntities: Entity[] = [ { @@ -57,44 +53,21 @@ const expectedEntities: Entity[] = [ ]; describe('DefaultCatalogCollatorFactory', () => { - const config = new ConfigReader({}); - const mockDiscoveryApi: jest.Mocked = { - getBaseUrl: jest.fn().mockResolvedValue('http://localhost:7007'), - getExternalBaseUrl: jest.fn(), - }; - - const options = { - discovery: mockDiscoveryApi, - }; - - registerMswTestHooks(server); - - beforeEach(() => { - server.use( - rest.get('http://localhost:7007/entities', (req, res, ctx) => { - if (req.url.searchParams.has('filter')) { - const filter = req.url.searchParams.get('filter'); - if (filter === 'kind=Foo,kind=Bar') { - // When filtering on the 'Foo,Bar' kinds we simply return no items, to simulate a filter - return res(ctx.json([])); - } - throw new Error('Unexpected filter parameter'); - } - - // Imitate offset/limit pagination. - const offset = parseInt(req.url.searchParams.get('offset') || '0', 10); - const limit = parseInt(req.url.searchParams.get('limit') || '500', 10); - return res(ctx.json(expectedEntities.slice(offset, limit + offset))); - }), - ); + const config = mockServices.rootConfig(); + const discovery = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://localhost:7007', }); + const catalog = catalogServiceMock({ entities: expectedEntities }); describe('getCollator', () => { let factory: DefaultCatalogCollatorFactory; let collator: Readable; beforeEach(async () => { - factory = DefaultCatalogCollatorFactory.fromConfig(config, options); + factory = DefaultCatalogCollatorFactory.fromConfig(config, { + discovery, + catalogClient: catalog, + }); collator = await factory.getCollator(); }); @@ -105,7 +78,6 @@ describe('DefaultCatalogCollatorFactory', () => { it('fetches from the configured catalog service', async () => { const pipeline = TestPipeline.fromCollator(collator); const { documents } = await pipeline.execute(); - expect(mockDiscoveryApi.getBaseUrl).toHaveBeenCalledWith('catalog'); expect(documents).toHaveLength(expectedEntities.length); }); @@ -145,7 +117,8 @@ describe('DefaultCatalogCollatorFactory', () => { it('maps a returned entity to an expected CatalogEntityDocument with custom transformer', async () => { const customFactory = DefaultCatalogCollatorFactory.fromConfig(config, { - ...options, + discovery, + catalogClient: catalog, entityTransformer: entity => ({ title: `custom-title-${ entity.metadata.title ?? entity.metadata.name @@ -201,7 +174,8 @@ describe('DefaultCatalogCollatorFactory', () => { it('maps a returned entity with a custom locationTemplate', async () => { // Provide an alternate location template. factory = DefaultCatalogCollatorFactory.fromConfig(new ConfigReader({}), { - discovery: mockDiscoveryApi, + discovery: discovery, + catalogClient: catalog, locationTemplate: '/software/:name', }); collator = await factory.getCollator(); @@ -216,7 +190,8 @@ describe('DefaultCatalogCollatorFactory', () => { it('allows filtering of the retrieved catalog entities', async () => { // Provide a custom filter. factory = DefaultCatalogCollatorFactory.fromConfig(new ConfigReader({}), { - discovery: mockDiscoveryApi, + discovery: discovery, + catalogClient: catalog, filter: { kind: ['Foo', 'Bar'], }, @@ -232,7 +207,8 @@ describe('DefaultCatalogCollatorFactory', () => { it('paginates through catalog entities using batchSize', async () => { factory = DefaultCatalogCollatorFactory.fromConfig(config, { - ...options, + discovery, + catalogClient: catalog, batchSize: 1, }); collator = await factory.getCollator(); diff --git a/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.ts b/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.ts index 11d72c156b..ff3e81843b 100644 --- a/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.ts +++ b/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.ts @@ -18,6 +18,7 @@ import { TokenManager, createLegacyAuthAdapters, } from '@backstage/backend-common'; +import { AuthService, DiscoveryService } from '@backstage/backend-plugin-api'; import { CatalogApi, CatalogClient, @@ -33,7 +34,6 @@ import { Readable } from 'stream'; import { CatalogCollatorEntityTransformer } from './CatalogCollatorEntityTransformer'; import { readCollatorConfigOptions } from './config'; import { defaultCatalogCollatorEntityTransformer } from './defaultCatalogCollatorEntityTransformer'; -import { AuthService, DiscoveryService } from '@backstage/backend-plugin-api'; /** * @public @@ -55,6 +55,7 @@ export type DefaultCatalogCollatorFactoryOptions = { * @deprecated Use the config key `search.collators.catalog.batchSize` instead. */ batchSize?: number; + // TODO(freben): Change to required CatalogService instead when fully migrated to the new backend system. catalogClient?: CatalogApi; /** * Allows you to customize how entities are shaped into documents. @@ -137,32 +138,25 @@ export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { private async *execute(): AsyncGenerator { let entitiesRetrieved = 0; - let moreEntitiesToGet = true; + let cursor: string | undefined = undefined; - // Offset/limit pagination is used on the Catalog Client in order to - // limit (and allow some control over) memory used by the search backend - // at index-time. - while (moreEntitiesToGet) { + do { const { token } = await this.auth.getPluginRequestToken({ onBehalfOf: await this.auth.getOwnServiceCredentials(), targetPluginId: 'catalog', }); - const entities = ( - await this.catalogClient.getEntities( - { - filter: this.filter, - limit: this.batchSize, - offset: entitiesRetrieved, - }, - { token }, - ) - ).items; + const response = await this.catalogClient.queryEntities( + { + filter: this.filter, + limit: this.batchSize, + ...(cursor ? { cursor } : {}), + }, + { token }, + ); + cursor = response.pageInfo.nextCursor; + entitiesRetrieved += response.items.length; - // Control looping through entity batches. - moreEntitiesToGet = entities.length === this.batchSize; - entitiesRetrieved += entities.length; - - for (const entity of entities) { + for (const entity of response.items) { yield { ...this.entityTransformer(entity), authorization: { @@ -175,7 +169,7 @@ export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { }), }; } - } + } while (cursor); } private applyArgsToFormat( diff --git a/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.test.ts b/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.test.ts index 92f75df91f..b8d915636a 100644 --- a/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.test.ts +++ b/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.test.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ConfigReader } from '@backstage/config'; + import { TestPipeline } from '@backstage/plugin-search-backend-node'; import { mockServices, @@ -23,7 +23,6 @@ import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { Readable } from 'stream'; import { ToolDocumentCollatorFactory } from './ToolDocumentCollatorFactory'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; const logger = mockServices.logger.mock(); @@ -54,11 +53,10 @@ const mockTools = { }; describe('ToolDocumentCollatorFactory', () => { - const config = new ConfigReader({}); - const mockDiscoveryApi: jest.Mocked = { - getBaseUrl: jest.fn().mockResolvedValue('http://test-backend/api/explore'), - getExternalBaseUrl: jest.fn(), - }; + const config = mockServices.rootConfig(); + const mockDiscoveryApi = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://test-backend/api/explore', + }); const options = { discovery: mockDiscoveryApi, diff --git a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts index 4adb42cf1e..2b8ec17b0d 100644 --- a/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts +++ b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { TestPipeline } from '@backstage/plugin-search-backend-node'; @@ -25,7 +26,6 @@ import { setupServer } from 'msw/node'; import { Readable } from 'stream'; import { DefaultTechDocsCollatorFactory } from './DefaultTechDocsCollatorFactory'; import { TechDocsCollatorEntityTransformer } from './TechDocsCollatorEntityTransformer'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; import { MkSearchIndexDoc, TechDocsCollatorDocumentTransformer, @@ -81,11 +81,10 @@ const expectedEntities: Entity[] = [ ]; describe('DefaultTechDocsCollatorFactory', () => { - const config = new ConfigReader({}); - const mockDiscoveryApi: jest.Mocked = { - getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), - getExternalBaseUrl: jest.fn(), - }; + const config = mockServices.rootConfig.mock(); + const mockDiscoveryApi = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://test-backend', + }); const options = { logger, discovery: mockDiscoveryApi, diff --git a/plugins/signals-backend/src/service/router.test.ts b/plugins/signals-backend/src/service/router.test.ts index 8584a06dea..acc49739b8 100644 --- a/plugins/signals-backend/src/service/router.test.ts +++ b/plugins/signals-backend/src/service/router.test.ts @@ -18,27 +18,14 @@ import express from 'express'; import request from 'supertest'; import { createRouter } from './router'; -import { EventsService } from '@backstage/plugin-events-node'; -import { - DiscoveryService, - UserInfoService, -} from '@backstage/backend-plugin-api'; import { ConfigReader } from '@backstage/config'; import { mockErrorHandler, mockServices } from '@backstage/backend-test-utils'; -const eventsServiceMock: jest.Mocked = { - subscribe: jest.fn(), - publish: jest.fn(), -}; - -const discovery: jest.Mocked = { - getBaseUrl: jest.fn().mockResolvedValue('/api/signals'), - getExternalBaseUrl: jest.fn(), -}; - -const userInfo: jest.Mocked = { - getUserInfo: jest.fn(), -}; +const eventsServiceMock = mockServices.events.mock(); +const discovery = mockServices.discovery.mock({ + getBaseUrl: async () => '/api/signals', +}); +const userInfo = mockServices.userInfo.mock(); describe('createRouter', () => { let app: express.Express; diff --git a/plugins/techdocs-backend/src/cache/TechDocsCache.test.ts b/plugins/techdocs-backend/src/cache/TechDocsCache.test.ts index 1cdd0174b5..6bc849e30d 100644 --- a/plugins/techdocs-backend/src/cache/TechDocsCache.test.ts +++ b/plugins/techdocs-backend/src/cache/TechDocsCache.test.ts @@ -17,7 +17,6 @@ import { ConfigReader } from '@backstage/config'; import { CacheInvalidationError, TechDocsCache } from './TechDocsCache'; import { mockServices } from '@backstage/backend-test-utils'; -import { CacheService } from '@backstage/backend-plugin-api'; const cached = (str: string): string => { return Buffer.from(str).toString('base64'); @@ -25,17 +24,12 @@ const cached = (str: string): string => { describe('TechDocsCache', () => { let CacheUnderTest: TechDocsCache; - let MockClient: jest.Mocked; + const cache = mockServices.cache.mock(); beforeEach(() => { - MockClient = { - get: jest.fn(), - set: jest.fn(), - delete: jest.fn(), - withOptions: jest.fn(), - }; + jest.clearAllMocks(); CacheUnderTest = TechDocsCache.fromConfig(new ConfigReader({}), { - cache: MockClient, + cache: cache, logger: mockServices.logger.mock(), }); }); @@ -43,16 +37,16 @@ describe('TechDocsCache', () => { describe('get', () => { it('returns undefined if no response', async () => { const expectedPath = 'some/index.html'; - MockClient.get.mockResolvedValueOnce(undefined); + cache.get.mockResolvedValueOnce(undefined); const actual = await CacheUnderTest.get(expectedPath); - expect(MockClient.get).toHaveBeenCalledWith(expectedPath); + expect(cache.get).toHaveBeenCalledWith(expectedPath); expect(actual).toBe(undefined); }); it('returns undefined if cache get throws', async () => { const expectedPath = 'some/index.html'; - MockClient.get.mockRejectedValueOnce(new Error()); + cache.get.mockRejectedValueOnce(new Error()); const actual = await CacheUnderTest.get(expectedPath); expect(actual).toBe(undefined); @@ -60,7 +54,7 @@ describe('TechDocsCache', () => { it('returns undefined if no response after 1s by default', async () => { const expectedPath = 'some/index.html'; - MockClient.get.mockImplementationOnce(() => { + cache.get.mockImplementationOnce(() => { return new Promise(resolve => { setTimeout(() => resolve(cached('value')), 1500); }); @@ -71,7 +65,7 @@ describe('TechDocsCache', () => { it('returns undefined if no response after configured readTimeout', async () => { const expectedPath = 'some/index.html'; - MockClient.get.mockImplementationOnce(() => { + cache.get.mockImplementationOnce(() => { return new Promise(resolve => { setTimeout(() => resolve(cached('value')), 20); }); @@ -82,7 +76,7 @@ describe('TechDocsCache', () => { techdocs: { cache: { readTimeout: 10 } }, }), { - cache: MockClient, + cache: cache, logger: mockServices.logger.mock(), }, ); @@ -93,7 +87,7 @@ describe('TechDocsCache', () => { it('returns data if cache get returns it', async () => { const expectedPath = 'some/index.html'; - MockClient.get.mockResolvedValueOnce(cached('expected value')); + cache.get.mockResolvedValueOnce(cached('expected value')); const actual = await CacheUnderTest.get(expectedPath); expect(actual?.toString()).toBe('expected value'); @@ -103,17 +97,14 @@ describe('TechDocsCache', () => { describe('set', () => { it('sets a base64-encoded string', async () => { const expectedPath = 'some/index.html'; - MockClient.set.mockResolvedValueOnce(undefined); + cache.set.mockResolvedValueOnce(undefined); await CacheUnderTest.set(expectedPath, Buffer.from('some data')); - expect(MockClient.set).toHaveBeenCalledWith( - expectedPath, - cached('some data'), - ); + expect(cache.set).toHaveBeenCalledWith(expectedPath, cached('some data')); }); it('does not throw if client throws', () => { - MockClient.set.mockRejectedValueOnce(new Error()); + cache.set.mockRejectedValueOnce(new Error()); expect(() => CacheUnderTest.set('i.html', Buffer.from(''))).not.toThrow(); }); }); @@ -121,26 +112,26 @@ describe('TechDocsCache', () => { describe('invalidate', () => { it('calls delete on client', async () => { const expectedPath = 'some/index.html'; - MockClient.delete.mockResolvedValueOnce(undefined); + cache.delete.mockResolvedValueOnce(undefined); await CacheUnderTest.invalidate(expectedPath); - expect(MockClient.delete).toHaveBeenCalledWith(expectedPath); + expect(cache.delete).toHaveBeenCalledWith(expectedPath); }); }); describe('invalidateMultiple', () => { it('calls delete once per given path', async () => { const expectedPaths = ['one/index.html', 'two/index.html']; - MockClient.delete.mockResolvedValue(undefined); + cache.delete.mockResolvedValue(undefined); await CacheUnderTest.invalidateMultiple(expectedPaths); - expect(MockClient.delete).toHaveBeenNthCalledWith(1, expectedPaths[0]); - expect(MockClient.delete).toHaveBeenNthCalledWith(2, expectedPaths[1]); + expect(cache.delete).toHaveBeenNthCalledWith(1, expectedPaths[0]); + expect(cache.delete).toHaveBeenNthCalledWith(2, expectedPaths[1]); }); it('returns an array of as many paths provided', async () => { const expectedPaths = ['one/index.html', 'two/index.html']; - MockClient.delete.mockResolvedValue(undefined); + cache.delete.mockResolvedValue(undefined); const actual = await CacheUnderTest.invalidateMultiple(expectedPaths); expect(actual.length).toBe(2); @@ -148,19 +139,19 @@ describe('TechDocsCache', () => { it('calls delete on all paths even if the first rejects', async () => { const expectedPaths = ['one/index.html', 'two/index.html']; - MockClient.delete.mockRejectedValueOnce(new Error()); - MockClient.delete.mockResolvedValueOnce(undefined); + cache.delete.mockRejectedValueOnce(new Error()); + cache.delete.mockResolvedValueOnce(undefined); await expect( CacheUnderTest.invalidateMultiple(expectedPaths), ).rejects.toThrow(CacheInvalidationError); - expect(MockClient.delete).toHaveBeenCalledTimes(2); + expect(cache.delete).toHaveBeenCalledTimes(2); }); it('rejects with invalidations error response', async () => { const expectedPaths = ['one/index.html', 'two/index.html']; - MockClient.delete.mockResolvedValueOnce(undefined); - MockClient.delete.mockRejectedValueOnce(new Error()); + cache.delete.mockResolvedValueOnce(undefined); + cache.delete.mockRejectedValueOnce(new Error()); await expect( CacheUnderTest.invalidateMultiple.bind(CacheUnderTest, expectedPaths), diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts index c825f0dbb7..8ff949cff8 100644 --- a/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollator.test.ts @@ -25,7 +25,6 @@ import { setupServer } from 'msw/node'; import { http, HttpResponse } from 'msw'; import { ConfigReader } from '@backstage/config'; import { TECHDOCS_ANNOTATION } from '@backstage/plugin-techdocs-common'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; const logger = loggerToWinstonLogger(mockServices.logger.mock()); @@ -80,15 +79,14 @@ describe('TechDocs Collator', () => { registerMswTestHooks(worker); describe('DefaultTechDocsCollator with legacyPathCasing configuration', () => { - let mockDiscoveryApi: jest.Mocked; + const mockDiscoveryApi = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://test-backend', + }); let mockTokenManager: jest.Mocked; let collator: DefaultTechDocsCollator; beforeEach(() => { - mockDiscoveryApi = { - getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), - getExternalBaseUrl: jest.fn(), - }; + jest.clearAllMocks(); mockTokenManager = { getToken: jest.fn().mockResolvedValue({ token: '' }), authenticate: jest.fn(), @@ -144,15 +142,13 @@ describe('TechDocs Collator', () => { }); describe('DefaultTechDocsCollator', () => { - let mockDiscoveryApi: jest.Mocked; + const mockDiscoveryApi = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://test-backend', + }); let mockTokenManager: jest.Mocked; let collator: DefaultTechDocsCollator; beforeEach(() => { - mockDiscoveryApi = { - getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), - getExternalBaseUrl: jest.fn(), - }; mockTokenManager = { getToken: jest.fn().mockResolvedValue({ token: '' }), authenticate: jest.fn(), diff --git a/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts b/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts index bef5a9c433..5248ca6dad 100644 --- a/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts +++ b/plugins/techdocs-backend/src/service/DocsSynchronizer.test.ts @@ -31,7 +31,6 @@ import { mockServices, registerMswTestHooks, } from '@backstage/backend-test-utils'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; import { http, HttpResponse } from 'msw'; import { setupServer } from 'msw/node'; @@ -59,10 +58,7 @@ describe('DocsSynchronizer', () => { hasDocsBeenGenerated: jest.fn(), publish: jest.fn(), }; - const discovery: jest.Mocked = { - getBaseUrl: jest.fn(), - getExternalBaseUrl: jest.fn(), - }; + const discovery = mockServices.discovery.mock(); const cache: jest.Mocked = { get: jest.fn(), set: jest.fn(), diff --git a/plugins/techdocs-backend/src/service/router.test.ts b/plugins/techdocs-backend/src/service/router.test.ts index 631efe06ea..c74167552d 100644 --- a/plugins/techdocs-backend/src/service/router.test.ts +++ b/plugins/techdocs-backend/src/service/router.test.ts @@ -32,7 +32,6 @@ import { CachedEntityLoader } from './CachedEntityLoader'; import { createEventStream, createRouter, RouterOptions } from './router'; import { TechDocsCache } from '../cache'; import { mockErrorHandler, mockServices } from '@backstage/backend-test-utils'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; jest.mock('@backstage/catalog-client'); jest.mock('@backstage/config'); @@ -111,10 +110,7 @@ describe('createRouter', () => { hasDocsBeenGenerated: jest.fn(), publish: jest.fn(), }; - const discovery: jest.Mocked = { - getBaseUrl: jest.fn(), - getExternalBaseUrl: jest.fn(), - }; + const discovery = mockServices.discovery.mock(); const cache: jest.Mocked = { getClient: jest.fn(), }; diff --git a/plugins/techdocs-node/src/stages/prepare/dir.test.ts b/plugins/techdocs-node/src/stages/prepare/dir.test.ts index 2dadfa6ece..7b61db222d 100644 --- a/plugins/techdocs-node/src/stages/prepare/dir.test.ts +++ b/plugins/techdocs-node/src/stages/prepare/dir.test.ts @@ -13,11 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { TECHDOCS_ANNOTATION } from '@backstage/plugin-techdocs-common'; -import { ConfigReader } from '@backstage/config'; import { DirectoryPreparer } from './dir'; import { mockServices } from '@backstage/backend-test-utils'; -import { UrlReaderService } from '@backstage/backend-plugin-api'; function normalizePath(path: string) { return path @@ -45,12 +44,8 @@ const createMockEntity = (annotations: {}) => { }; }; -const mockConfig = new ConfigReader({}); -const mockUrlReader: jest.Mocked = { - readUrl: jest.fn(), - readTree: jest.fn(), - search: jest.fn(), -}; +const mockConfig = mockServices.rootConfig(); +const mockUrlReader = mockServices.urlReader.mock(); describe('directory preparer', () => { it('should merge managed-by-location and techdocs-ref when techdocs-ref is relative', async () => { diff --git a/plugins/techdocs-node/src/stages/publish/local.test.ts b/plugins/techdocs-node/src/stages/publish/local.test.ts index a6dc9c09c4..be6f3b2fa8 100644 --- a/plugins/techdocs-node/src/stages/publish/local.test.ts +++ b/plugins/techdocs-node/src/stages/publish/local.test.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { overridePackagePathResolution } from '@backstage/backend-plugin-api/testUtils'; import { ConfigReader } from '@backstage/config'; import express from 'express'; @@ -24,7 +25,6 @@ import { createMockDirectory, mockServices, } from '@backstage/backend-test-utils'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; const createMockEntity = (annotations = {}, lowerCase = false) => { return { @@ -39,10 +39,9 @@ const createMockEntity = (annotations = {}, lowerCase = false) => { }; }; -const testDiscovery: jest.Mocked = { - getBaseUrl: jest.fn().mockResolvedValue('http://localhost:7007/api/techdocs'), - getExternalBaseUrl: jest.fn(), -}; +const testDiscovery = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://localhost:7007/api/techdocs', +}); const mockPublishDir = createMockDirectory(); diff --git a/plugins/techdocs-node/src/stages/publish/publish.test.ts b/plugins/techdocs-node/src/stages/publish/publish.test.ts index 408a171fe0..9885337db8 100644 --- a/plugins/techdocs-node/src/stages/publish/publish.test.ts +++ b/plugins/techdocs-node/src/stages/publish/publish.test.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { ConfigReader } from '@backstage/config'; import { Publisher } from './publish'; import { LocalPublish } from './local'; @@ -22,13 +23,11 @@ import { AzureBlobStoragePublish } from './azureBlobStorage'; import { OpenStackSwiftPublish } from './openStackSwift'; import { mockServices } from '@backstage/backend-test-utils'; import { PublisherBase } from './types'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; const logger = mockServices.logger.mock(); -const discovery: jest.Mocked = { - getBaseUrl: jest.fn().mockResolvedValueOnce('http://localhost:7007'), - getExternalBaseUrl: jest.fn(), -}; +const discovery = mockServices.discovery.mock({ + getBaseUrl: async () => 'http://localhost:7007', +}); jest.mock('@azure/identity', () => ({ __esModule: true, diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 80d4a3e7fd..be21a0fead 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -581,27 +581,29 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.18.0": - version: 0.18.0 - resolution: "@eslint/config-array@npm:0.18.0" +"@eslint/config-array@npm:^0.19.0": + version: 0.19.1 + resolution: "@eslint/config-array@npm:0.19.1" dependencies: - "@eslint/object-schema": ^2.1.4 + "@eslint/object-schema": ^2.1.5 debug: ^4.3.1 minimatch: ^3.1.2 - checksum: 5ff748e1788745bfb3160c3b3151d62a7c054e336e9fe8069e86cfa6106f3abbd59b24f1253122268295f98c66803e9a7b23d7f947a8c00f62d2060cc44bc7fc + checksum: 421aad712a5ef1a3d118b5e0857f79c080f9dd619a76ce19d20105d381521583786f7abb1195744af9e62a5124e6657066eb6780e920f4001846bd91c1a665f0 languageName: node linkType: hard -"@eslint/core@npm:^0.7.0": - version: 0.7.0 - resolution: "@eslint/core@npm:0.7.0" - checksum: 91d4aa2805f356fb0bba693411deab91590472666e22c9c03304ba03b288b74403a5e120db16d0926ea94281e15563a8d4d519cd1e565d514e2d5015a84b8575 +"@eslint/core@npm:^0.9.0": + version: 0.9.1 + resolution: "@eslint/core@npm:0.9.1" + dependencies: + "@types/json-schema": ^7.0.15 + checksum: 33c8159842cc3a646caa267c008cb567ca60e0220bcdcf6e426128409953b8f6a9b142246db616c71d06331edf769c192d7e2792b3f19c2a6b8179e491512d89 languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.1.0": - version: 3.1.0 - resolution: "@eslint/eslintrc@npm:3.1.0" +"@eslint/eslintrc@npm:^3.2.0": + version: 3.2.0 + resolution: "@eslint/eslintrc@npm:3.2.0" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -612,30 +614,30 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: b0a9bbd98c8b9e0f4d975b042ff9b874dde722b20834ea2ff46551c3de740d4f10f56c449b790ef34d7f82147cbddfc22b004a43cc885dbc2664bb134766b5e4 + checksum: c898e4d12f4c9a79a61ee3c91e38eea5627a04e021cb749191e8537445858bfe32f810eca0cb2dc9902b8ad8b65ca07ef7221dc4bad52afe60cbbf50ec56c236 languageName: node linkType: hard -"@eslint/js@npm:9.14.0": - version: 9.14.0 - resolution: "@eslint/js@npm:9.14.0" - checksum: 727767d3c80bf88e08565af10cc3732ca0d272c729bbd39043722a203eea289ec6149ab42d977d2d28a81d99329dceeed091b70db37b868e6659913a0840e17b +"@eslint/js@npm:9.17.0": + version: 9.17.0 + resolution: "@eslint/js@npm:9.17.0" + checksum: b68a14ff518ffa12e3b85fa9c72b818faeff092285acfbf02da2d0fb12a681b76651638881e98845f2df2ed346ed0d33faeb1d9caac163daf232c223b7efe89c languageName: node linkType: hard -"@eslint/object-schema@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/object-schema@npm:2.1.4" - checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271 +"@eslint/object-schema@npm:^2.1.5": + version: 2.1.5 + resolution: "@eslint/object-schema@npm:2.1.5" + checksum: 5facffc832bae93c510f4d38f0f1cbfebd3d7ec772ece6b801bd09bf2dce52e781f4dea500aa133d02257e04ed6a3958fa18cbaed1f9623974a804ee60a8ca54 languageName: node linkType: hard -"@eslint/plugin-kit@npm:^0.2.0": - version: 0.2.3 - resolution: "@eslint/plugin-kit@npm:0.2.3" +"@eslint/plugin-kit@npm:^0.2.3": + version: 0.2.4 + resolution: "@eslint/plugin-kit@npm:0.2.4" dependencies: levn: ^0.4.1 - checksum: b93b9c3f5b1722d09cc4e609abd4510130f659f70f6417b68ac7c4ad9fbf9e3d4f0ef5b6f2bad106eb8c1c1b2146bd0391e0a1c00ddeae46c917f175b8c0da4b + checksum: 5693465dca5fc6f27b090f987b51bc738f48c6a6b5678dcc1791522921834206388b462578edd362d458e8de6dcd21cce1a2e8cff47d1512411ba0389112c231 languageName: node linkType: hard @@ -670,10 +672,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/retry@npm:^0.4.0": - version: 0.4.0 - resolution: "@humanwhocodes/retry@npm:0.4.0" - checksum: a1ea6ba7deff692f08770bea159eb53f280d6b56e6a340c238679752c3d2956797e31431a19a0e1cd303cfb130200024d3dc6bec36c7d98edd4789006d19dfd1 +"@humanwhocodes/retry@npm:^0.4.1": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: f11167c28e8266faba470fd273cbaafe2827523492bc18c5623015adb7ed66f46b2e542e3d756fed9ca614300249267814220c2f5f03a59e07fdfa64fc14ad52 languageName: node linkType: hard @@ -2304,14 +2306,14 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": - version: 7.0.5 - resolution: "cross-spawn@npm:7.0.5" +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 55c50004cb6bbea3649784caac6e7b8ddd03fa8c1e14dbd5a1f15896708378006eb7526a52a0f48770c768c9b8aed48a5888eb8e785ff59ff7749e74f66cd96b + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b languageName: node linkType: hard @@ -2687,15 +2689,15 @@ __metadata: linkType: hard "eslint-plugin-storybook@npm:^0.11.0": - version: 0.11.0 - resolution: "eslint-plugin-storybook@npm:0.11.0" + version: 0.11.1 + resolution: "eslint-plugin-storybook@npm:0.11.1" dependencies: "@storybook/csf": ^0.1.11 "@typescript-eslint/utils": ^8.8.1 ts-dedent: ^2.2.0 peerDependencies: eslint: ">=6" - checksum: 52baa35ed4f49bc46bd323784ac2a48a615f0fd929b66dfec11bb2cbceded1a9978b68cbb1165aa36f078190651f93243f871ead368bb2f1ee131c7d00e265e9 + checksum: 8b8eb30b598f3c44c2bbf921e318215338f1159c1fba2d2f6cd5bc0b2ec14515655cf1760b5e11355baddabc2ac8446d4dc18ee6df6d2252555b126ff649a421 languageName: node linkType: hard @@ -2734,24 +2736,24 @@ __metadata: linkType: hard "eslint@npm:^9.11.1": - version: 9.14.0 - resolution: "eslint@npm:9.14.0" + version: 9.17.0 + resolution: "eslint@npm:9.17.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.12.1 - "@eslint/config-array": ^0.18.0 - "@eslint/core": ^0.7.0 - "@eslint/eslintrc": ^3.1.0 - "@eslint/js": 9.14.0 - "@eslint/plugin-kit": ^0.2.0 + "@eslint/config-array": ^0.19.0 + "@eslint/core": ^0.9.0 + "@eslint/eslintrc": ^3.2.0 + "@eslint/js": 9.17.0 + "@eslint/plugin-kit": ^0.2.3 "@humanfs/node": ^0.16.6 "@humanwhocodes/module-importer": ^1.0.1 - "@humanwhocodes/retry": ^0.4.0 + "@humanwhocodes/retry": ^0.4.1 "@types/estree": ^1.0.6 "@types/json-schema": ^7.0.15 ajv: ^6.12.4 chalk: ^4.0.0 - cross-spawn: ^7.0.2 + cross-spawn: ^7.0.6 debug: ^4.3.2 escape-string-regexp: ^4.0.0 eslint-scope: ^8.2.0 @@ -2771,7 +2773,6 @@ __metadata: minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.3 - text-table: ^0.2.0 peerDependencies: jiti: "*" peerDependenciesMeta: @@ -2779,7 +2780,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 1b54112da245f4175fbcf31ea5f71da38dda1bb8f5d645f3b2420035a4310949fda57af14ca7f7992e36374da8c06b94bf20ec8bda64a09409d818aefd0bf09c + checksum: 0caae58c53bf4dc9b4893d75e62339e4c40fe5589652a3cb63f30a15bad1f34f8f784ca4fca471bbffedabee516a9f9620ebc33818b55e1b715e8f000865c851 languageName: node linkType: hard @@ -4622,13 +4623,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - "tiny-invariant@npm:^1.3.1, tiny-invariant@npm:^1.3.3": version: 1.3.3 resolution: "tiny-invariant@npm:1.3.3" diff --git a/yarn.lock b/yarn.lock index 6f107b08a6..03a24c3a27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1872,7 +1872,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9, @babel/core@npm:^7.19.6, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.7, @babel/core@npm:^7.26.0": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9, @babel/core@npm:^7.19.6, @babel/core@npm:^7.24.7, @babel/core@npm:^7.26.0": version: 7.26.0 resolution: "@babel/core@npm:7.26.0" dependencies: @@ -2434,7 +2434,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.23.3, @babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.25.9 resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" dependencies: @@ -3823,9 +3823,6 @@ __metadata: "@testing-library/jest-dom": ^6.0.0 "@types/react": ^18.0.0 "@types/react-dom": ^18.0.0 - "@vanilla-extract/rollup-plugin": ^1.3.10 - "@vanilla-extract/sprinkles": ^1.6.3 - "@vanilla-extract/webpack-plugin": ^2.3.14 clsx: ^2.1.1 eslint-plugin-storybook: ^0.11.1 globals: ^15.11.0 @@ -3834,7 +3831,6 @@ __metadata: react-dom: ^18.0.2 react-router-dom: ^6.3.0 storybook: ^8.4.7 - webpack-merge: ^6.0.1 peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -6717,7 +6713,6 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-notifications-backend@workspace:plugins/notifications-backend" dependencies: - "@backstage/backend-common": ^0.25.0 "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" @@ -8556,11 +8551,11 @@ __metadata: languageName: node linkType: hard -"@changesets/apply-release-plan@npm:^7.0.6": - version: 7.0.6 - resolution: "@changesets/apply-release-plan@npm:7.0.6" +"@changesets/apply-release-plan@npm:^7.0.7": + version: 7.0.7 + resolution: "@changesets/apply-release-plan@npm:7.0.7" dependencies: - "@changesets/config": ^3.0.4 + "@changesets/config": ^3.0.5 "@changesets/get-version-range-type": ^0.4.0 "@changesets/git": ^3.0.2 "@changesets/should-skip-package": ^0.1.1 @@ -8573,7 +8568,7 @@ __metadata: prettier: ^2.7.1 resolve-from: ^5.0.0 semver: ^7.5.3 - checksum: d84049b0874fe86db35a18b3959eee5ccb0e1be095a4d4718495e47e1123580c219bbaf4522190394ce3c40380c03b4e83d00e15070f0df77887b15c69fab14c + checksum: 775e8f86ab8b82ebdb44471dfbdf14e669144e63b6c972bc8502d608247ef909baca63973f71b8d15acd4fff8740a61802256bc261de12b956e4c2b8fd34d929 languageName: node linkType: hard @@ -8601,16 +8596,16 @@ __metadata: linkType: hard "@changesets/cli@npm:^2.14.0": - version: 2.27.10 - resolution: "@changesets/cli@npm:2.27.10" + version: 2.27.11 + resolution: "@changesets/cli@npm:2.27.11" dependencies: - "@changesets/apply-release-plan": ^7.0.6 + "@changesets/apply-release-plan": ^7.0.7 "@changesets/assemble-release-plan": ^6.0.5 "@changesets/changelog-git": ^0.2.0 - "@changesets/config": ^3.0.4 + "@changesets/config": ^3.0.5 "@changesets/errors": ^0.2.0 "@changesets/get-dependents-graph": ^2.1.2 - "@changesets/get-release-plan": ^4.0.5 + "@changesets/get-release-plan": ^4.0.6 "@changesets/git": ^3.0.2 "@changesets/logger": ^0.1.1 "@changesets/pre": ^2.0.1 @@ -8621,7 +8616,7 @@ __metadata: "@manypkg/get-packages": ^1.1.3 ansi-colors: ^4.1.3 ci-info: ^3.7.0 - enquirer: ^2.3.0 + enquirer: ^2.4.1 external-editor: ^3.1.0 fs-extra: ^7.0.1 mri: ^1.2.0 @@ -8634,13 +8629,13 @@ __metadata: term-size: ^2.1.0 bin: changeset: bin.js - checksum: 9927bd57299d8b26c49ed48b2380cd19eb7b8a4fafd6babd5ec0d92d3b68cc7a54305201ce63142723de48bc5a9e75f611dd747d5a7c6ac80a934a3c4a83399b + checksum: 0c9d1f03ad113494ad3091caa7eca1ee167761af8257911f74c64bff670fb8a542fe9f84921b1e7e29c584b2f5883b8a6287c4f42afe59007369f4fd1cc94cec languageName: node linkType: hard -"@changesets/config@npm:^3.0.4": - version: 3.0.4 - resolution: "@changesets/config@npm:3.0.4" +"@changesets/config@npm:^3.0.5": + version: 3.0.5 + resolution: "@changesets/config@npm:3.0.5" dependencies: "@changesets/errors": ^0.2.0 "@changesets/get-dependents-graph": ^2.1.2 @@ -8649,7 +8644,7 @@ __metadata: "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 micromatch: ^4.0.8 - checksum: 43763d930e7fc4f24f9bb7b974708cc72f13d1a3dca10ace21d63135b7ff47dbfa3461cc9842171ae0564e37b17da2cc2e6e3f69a3f180a28efce2389eceb7de + checksum: 75cdb5c4965656935277c69591336dd3aa825eef91d971c1d3e37777d181b6e3c1f1d78bf7ec826bbae9d70841af28c4a9cb1ea477808b3d9101413bd9f04fcf languageName: node linkType: hard @@ -8674,17 +8669,17 @@ __metadata: languageName: node linkType: hard -"@changesets/get-release-plan@npm:^4.0.5": - version: 4.0.5 - resolution: "@changesets/get-release-plan@npm:4.0.5" +"@changesets/get-release-plan@npm:^4.0.6": + version: 4.0.6 + resolution: "@changesets/get-release-plan@npm:4.0.6" dependencies: "@changesets/assemble-release-plan": ^6.0.5 - "@changesets/config": ^3.0.4 + "@changesets/config": ^3.0.5 "@changesets/pre": ^2.0.1 "@changesets/read": ^0.6.2 "@changesets/types": ^6.0.0 "@manypkg/get-packages": ^1.1.3 - checksum: 3e06ea36b814e9a36aaac3ab46102c01802d2cd262e9ec2705a63c461f43af44be48bd55bb6d86e6753b51aaac81d7c6e2a13bc2e8a86d60fe6bce481dbd2e27 + checksum: 1aabe351e39ce0b0a057f96eb3ac4183907ad0458cffe1a7e0b5651ae1ef3aefb22cc6021df5114d646a2b5dc2a665bc670f9b705a85dca0bd31f7792b22403c languageName: node linkType: hard @@ -8835,8 +8830,8 @@ __metadata: linkType: hard "@codemirror/language@npm:^6.0.0": - version: 6.10.6 - resolution: "@codemirror/language@npm:6.10.6" + version: 6.10.7 + resolution: "@codemirror/language@npm:6.10.7" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.23.0 @@ -8844,7 +8839,7 @@ __metadata: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 style-mod: ^4.0.0 - checksum: 0bd5e4da0c714b4d2aad2e2ad19bb803d9992e5f0d56da3fb2534e63b03b8a562bd8b9ac4439509c687b589e3eaa5a33339eda13d91e54a5d5a99e032d1be981 + checksum: c9b71e2df8559bc677edae293a825a0dd196c98d49a6e20a98cc6bea51a01c67d268b07b5a761d7ac15b1d65415e17af1f644d5629ab4207268804e71cd48d7c languageName: node linkType: hard @@ -8901,13 +8896,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.23.0": - version: 6.35.3 - resolution: "@codemirror/view@npm:6.35.3" + version: 6.36.0 + resolution: "@codemirror/view@npm:6.36.0" dependencies: "@codemirror/state": ^6.5.0 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 - checksum: 09c2685c9345b23ea69d28f323f29d6e73a269e9ffa29ffbf6443c139b2c97fd1a87eced1c59553a3416a08aed3246e30dd5eb70d516159ac352ae422ff4394d + checksum: 646ac34bbb2a29a6018e611de898e17ae8634bb63509463751114699316e561e803ede6ae70a930e5b9d4953f333b52b7853480c8776c77e685a012b00bd06fe languageName: node linkType: hard @@ -9010,7 +9005,7 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.11.0, @emotion/cache@npm:^11.13.5": +"@emotion/cache@npm:^11.13.5": version: 11.13.5 resolution: "@emotion/cache@npm:11.13.5" dependencies: @@ -9030,7 +9025,7 @@ __metadata: languageName: node linkType: hard -"@emotion/hash@npm:^0.9.0, @emotion/hash@npm:^0.9.1, @emotion/hash@npm:^0.9.2": +"@emotion/hash@npm:^0.9.1, @emotion/hash@npm:^0.9.2": version: 0.9.2 resolution: "@emotion/hash@npm:0.9.2" checksum: 379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 @@ -9181,13 +9176,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/aix-ppc64@npm:0.23.1" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/aix-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/aix-ppc64@npm:0.24.0" @@ -9202,13 +9190,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/android-arm64@npm:0.23.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm64@npm:0.24.0" @@ -9223,13 +9204,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/android-arm@npm:0.23.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm@npm:0.24.0" @@ -9244,13 +9218,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/android-x64@npm:0.23.1" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-x64@npm:0.24.0" @@ -9265,13 +9232,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/darwin-arm64@npm:0.23.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-arm64@npm:0.24.0" @@ -9286,13 +9246,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/darwin-x64@npm:0.23.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-x64@npm:0.24.0" @@ -9307,13 +9260,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/freebsd-arm64@npm:0.23.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-arm64@npm:0.24.0" @@ -9328,13 +9274,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/freebsd-x64@npm:0.23.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-x64@npm:0.24.0" @@ -9349,13 +9288,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-arm64@npm:0.23.1" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm64@npm:0.24.0" @@ -9370,13 +9302,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-arm@npm:0.23.1" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm@npm:0.24.0" @@ -9391,13 +9316,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-ia32@npm:0.23.1" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ia32@npm:0.24.0" @@ -9412,13 +9330,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-loong64@npm:0.23.1" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-loong64@npm:0.24.0" @@ -9433,13 +9344,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-mips64el@npm:0.23.1" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-mips64el@npm:0.24.0" @@ -9454,13 +9358,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-ppc64@npm:0.23.1" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ppc64@npm:0.24.0" @@ -9475,13 +9372,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-riscv64@npm:0.23.1" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-riscv64@npm:0.24.0" @@ -9496,13 +9386,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-s390x@npm:0.23.1" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-s390x@npm:0.24.0" @@ -9517,13 +9400,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-x64@npm:0.23.1" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-x64@npm:0.24.0" @@ -9538,13 +9414,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/netbsd-x64@npm:0.23.1" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/netbsd-x64@npm:0.24.0" @@ -9552,13 +9421,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/openbsd-arm64@npm:0.23.1" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/openbsd-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/openbsd-arm64@npm:0.24.0" @@ -9573,13 +9435,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/openbsd-x64@npm:0.23.1" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/openbsd-x64@npm:0.24.0" @@ -9594,13 +9449,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/sunos-x64@npm:0.23.1" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/sunos-x64@npm:0.24.0" @@ -9615,13 +9463,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/win32-arm64@npm:0.23.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-arm64@npm:0.24.0" @@ -9636,13 +9477,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/win32-ia32@npm:0.23.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-ia32@npm:0.24.0" @@ -9657,13 +9491,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/win32-x64@npm:0.23.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-x64@npm:0.24.0" @@ -9891,14 +9718,14 @@ __metadata: linkType: hard "@google-cloud/cloud-sql-connector@npm:^1.4.0": - version: 1.4.0 - resolution: "@google-cloud/cloud-sql-connector@npm:1.4.0" + version: 1.5.0 + resolution: "@google-cloud/cloud-sql-connector@npm:1.5.0" dependencies: "@googleapis/sqladmin": ^24.0.0 gaxios: ^6.1.1 google-auth-library: ^9.2.0 - p-throttle: ^5.1.0 - checksum: c4ac2cc8cc24cc5966f146fe5686493fdb0bb4fc43a27ec086bd116f5ce475ca88f5e5e5fb79d17e6c31fb1a752d2f7e94433db17eea787696556c45415a31a1 + p-throttle: ^7.0.0 + checksum: c228f726af580c3592bfdb04dc47657b5a823c44b7411b7eb73c5c05c06ae9780e7fd0abcfe5881ff7524b24dd41a9946947bc4072fba18bab1227e4694fc871 languageName: node linkType: hard @@ -10954,7 +10781,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -11043,16 +10870,17 @@ __metadata: linkType: hard "@keyv/redis@npm:^4.0.1": - version: 4.0.2 - resolution: "@keyv/redis@npm:4.0.2" + version: 4.1.0 + resolution: "@keyv/redis@npm:4.1.0" dependencies: - keyv: "*" + cluster-key-slot: ^1.1.2 + keyv: ^5.2.1 redis: ^4.7.0 - checksum: 356dcf125072b35be45649fcf5af5e5400b0227b25013d2f7494176a920654a1de63cb95e2a4a661b7db4c1cef8b7553d6e33603ace03d5fbe0a7e22955c9f2b + checksum: 71508c7a51f1c6eddd2a103e1f8271de8ab7fbd3c10a0163dabeebd4621632a9b04c158529d08518350e21def55ff931cf96cc20efd0855c75a18e2a10c52b7f languageName: node linkType: hard -"@keyv/serialize@npm:*": +"@keyv/serialize@npm:*, @keyv/serialize@npm:^1.0.1": version: 1.0.1 resolution: "@keyv/serialize@npm:1.0.1" dependencies: @@ -11549,39 +11377,39 @@ __metadata: languageName: node linkType: hard -"@module-federation/bridge-react-webpack-plugin@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/bridge-react-webpack-plugin@npm:0.8.1" +"@module-federation/bridge-react-webpack-plugin@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/bridge-react-webpack-plugin@npm:0.8.5" dependencies: - "@module-federation/sdk": 0.8.1 + "@module-federation/sdk": 0.8.5 "@types/semver": 7.5.8 semver: 7.6.3 - checksum: d8c68cd1ddd387e9ef6fba688aec68ef0fe59ec5138f3fc897d033227c0ddd04c4307b52c352a42e85c4b9ad5bc759cd811280960166f752f217df7aeb27a55b + checksum: 013cb97ae9ab445e7fc828512106c090d63d973828e9ad3c37e38b92c42190a64cf5181df734095ccf163b2ff921cf3cd56108fa7a3a6f49a8b2162bb5041454 languageName: node linkType: hard -"@module-federation/data-prefetch@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/data-prefetch@npm:0.8.1" +"@module-federation/data-prefetch@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/data-prefetch@npm:0.8.5" dependencies: - "@module-federation/runtime": 0.8.1 - "@module-federation/sdk": 0.8.1 + "@module-federation/runtime": 0.8.5 + "@module-federation/sdk": 0.8.5 fs-extra: 9.1.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 25a67256c1900d3989c2f393aca50a0f38faeb9aa1023327ce0716585fb4e19593efb147f20eac883d4eeae619400a95ec41e64f8b10a780b2e3a6e22495440c + checksum: 0714fded76e33603999f500edb729691ad5d04415b48ff80f0ca824fa215cc1620bf93db6be063256b2d8b0d774dbcc95c4067c11231e68faa50dec4f50acaa7 languageName: node linkType: hard -"@module-federation/dts-plugin@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/dts-plugin@npm:0.8.1" +"@module-federation/dts-plugin@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/dts-plugin@npm:0.8.5" dependencies: - "@module-federation/error-codes": 0.8.1 - "@module-federation/managers": 0.8.1 - "@module-federation/sdk": 0.8.1 - "@module-federation/third-party-dts-extractor": 0.8.1 + "@module-federation/error-codes": 0.8.5 + "@module-federation/managers": 0.8.5 + "@module-federation/sdk": 0.8.5 + "@module-federation/third-party-dts-extractor": 0.8.5 adm-zip: ^0.5.10 ansi-colors: ^4.1.3 axios: ^1.7.4 @@ -11600,22 +11428,22 @@ __metadata: peerDependenciesMeta: vue-tsc: optional: true - checksum: 7f3f6b000f2427b3ba06c14a3cf7332bec1a4f843d46d11fd267d041f0916ebe4458187284d640524187bae3c871714df29c817d136a45f0a59ae915cc8d77f2 + checksum: 93e73cd84a33f4026bf9fcfc9311ace6886b2f4a87f0aaa2d62a85d6e7d48486de4a6b3595250589300deb582d08f9e237ff5a3bbf98fbca471b8e396a953030 languageName: node linkType: hard "@module-federation/enhanced@npm:^0.8.0": - version: 0.8.1 - resolution: "@module-federation/enhanced@npm:0.8.1" + version: 0.8.5 + resolution: "@module-federation/enhanced@npm:0.8.5" dependencies: - "@module-federation/bridge-react-webpack-plugin": 0.8.1 - "@module-federation/data-prefetch": 0.8.1 - "@module-federation/dts-plugin": 0.8.1 - "@module-federation/managers": 0.8.1 - "@module-federation/manifest": 0.8.1 - "@module-federation/rspack": 0.8.1 - "@module-federation/runtime-tools": 0.8.1 - "@module-federation/sdk": 0.8.1 + "@module-federation/bridge-react-webpack-plugin": 0.8.5 + "@module-federation/data-prefetch": 0.8.5 + "@module-federation/dts-plugin": 0.8.5 + "@module-federation/managers": 0.8.5 + "@module-federation/manifest": 0.8.5 + "@module-federation/rspack": 0.8.5 + "@module-federation/runtime-tools": 0.8.5 + "@module-federation/sdk": 0.8.5 btoa: ^1.2.1 upath: 2.0.1 peerDependencies: @@ -11629,51 +11457,51 @@ __metadata: optional: true webpack: optional: true - checksum: a4902eff5e6379c70638efd1cd80daa156dee8e3eded0bdf431535dd89abc1fbf14c0bd858905595ea9963639f2b72a404f4c8ddc2c8b45d7bc760fc3b2a361b + checksum: 5f69db44f86c7a16f5fd1c3820d09f48859c77253361c05d0e91e96c2df1a6e36287e79776f1e3dd05f3eeb23b487bd41f3be4ed9927250eb0b7a2e3bc60713d languageName: node linkType: hard -"@module-federation/error-codes@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/error-codes@npm:0.8.1" - checksum: 36d899d2d3e00904c8aa74f1611edfceb88937ee56cc5cf2302f30e010752c68c0486cf5251ee83c1f3c2471bcea1e1ea0e8047173e92e4f10bad83125b1721d +"@module-federation/error-codes@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/error-codes@npm:0.8.5" + checksum: 1c7ff728adbdefdfb65030b460675be882e59d71abc11df2dcf42e0f56316549a03295b80fbc28a3e1c1aa042616c3937900b17e5b064cb07be8c86df85a40f6 languageName: node linkType: hard -"@module-federation/managers@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/managers@npm:0.8.1" +"@module-federation/managers@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/managers@npm:0.8.5" dependencies: - "@module-federation/sdk": 0.8.1 + "@module-federation/sdk": 0.8.5 find-pkg: 2.0.0 fs-extra: 9.1.0 - checksum: 9f608960e5353934d85c99d68e41a156d79ca592ec52bb81ce869084cb7428d821165b17600ffd440b4640205d11fdd463165df35d6b9163250b64815c20e48b + checksum: 5c181b890620a218d3f3c08b7aa1357a5b4184e57dfa686117045d6715e0f37d437ee96db1411cd5d74d79dfe9c879c5ecb924a7b935fd06ac4dab846bd65a85 languageName: node linkType: hard -"@module-federation/manifest@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/manifest@npm:0.8.1" +"@module-federation/manifest@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/manifest@npm:0.8.5" dependencies: - "@module-federation/dts-plugin": 0.8.1 - "@module-federation/managers": 0.8.1 - "@module-federation/sdk": 0.8.1 + "@module-federation/dts-plugin": 0.8.5 + "@module-federation/managers": 0.8.5 + "@module-federation/sdk": 0.8.5 chalk: 3.0.0 find-pkg: 2.0.0 - checksum: 570eeb5fb36ecaac45ff150475cf09b69cf7fd2f7544527510732be65238957ef8f71faeebbeaf4d5fdfc2df2b3c88617982dcdbc93110a6766424306b8744cc + checksum: 5bae6a4e485bcbd5bc4a29a0e6b918745180384b38b4a26b1ef453fb3b722e607955b43045746a4c1ee69202a3498b820132ec4e36c685f379dbe72fbadbb2ce languageName: node linkType: hard -"@module-federation/rspack@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/rspack@npm:0.8.1" +"@module-federation/rspack@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/rspack@npm:0.8.5" dependencies: - "@module-federation/bridge-react-webpack-plugin": 0.8.1 - "@module-federation/dts-plugin": 0.8.1 - "@module-federation/managers": 0.8.1 - "@module-federation/manifest": 0.8.1 - "@module-federation/runtime-tools": 0.8.1 - "@module-federation/sdk": 0.8.1 + "@module-federation/bridge-react-webpack-plugin": 0.8.5 + "@module-federation/dts-plugin": 0.8.5 + "@module-federation/managers": 0.8.5 + "@module-federation/manifest": 0.8.5 + "@module-federation/runtime-tools": 0.8.5 + "@module-federation/sdk": 0.8.5 peerDependencies: "@rspack/core": ">=0.7" typescript: ^4.9.0 || ^5.0.0 @@ -11683,7 +11511,7 @@ __metadata: optional: true vue-tsc: optional: true - checksum: a03ef54111d16fcf388acac7e1a8b4c6f2cb0af7a907d6e8d14aca2e321864997fa343902170f455e456aea978e6330a9050f070ff0a3503047c0bbed4ef08bb + checksum: bc22b333d83f589aad96b91387478fb259888763efe69f2c7d0bb4d45ad529986bc445aed99b600373d8fd9ebd199a04c6e1aa6b839c48a385d785d0bedd5cc5 languageName: node linkType: hard @@ -11697,13 +11525,13 @@ __metadata: languageName: node linkType: hard -"@module-federation/runtime-tools@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/runtime-tools@npm:0.8.1" +"@module-federation/runtime-tools@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/runtime-tools@npm:0.8.5" dependencies: - "@module-federation/runtime": 0.8.1 - "@module-federation/webpack-bundler-runtime": 0.8.1 - checksum: b10eca911e0a8611a7337f653c0efbd308805b561c22b27a3695092f674a95b349bbf7048659f53bddc558de82b3ffd3bda1757934edfcc298c60a779bfea319 + "@module-federation/runtime": 0.8.5 + "@module-federation/webpack-bundler-runtime": 0.8.5 + checksum: fd1c4fb22e9e9115174f8715f2fcf1b68009e88f4e0597132ef22ebb4882dc1e8518fd4f14eaf02a748671c1277f7eb4f1fecfb24be21d935b1c8537eb5c8e42 languageName: node linkType: hard @@ -11716,13 +11544,13 @@ __metadata: languageName: node linkType: hard -"@module-federation/runtime@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/runtime@npm:0.8.1" +"@module-federation/runtime@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/runtime@npm:0.8.5" dependencies: - "@module-federation/error-codes": 0.8.1 - "@module-federation/sdk": 0.8.1 - checksum: 31b4b23237ea105f85d316036819df1cab8d79e845e70b7a0365640f5cfb02850876c3b9fe1eb680aea8ae56454e58e6dfaa49a58c473d82c929307d6000c1f6 + "@module-federation/error-codes": 0.8.5 + "@module-federation/sdk": 0.8.5 + checksum: dbba03c4e28d67eff2780329854a6519cec5b01bda2451aff737eb3149602fbcbe70e89f1c94d27014fd2baea72f53d0e21415ddad00ff31f1015170cdacadee languageName: node linkType: hard @@ -11733,23 +11561,23 @@ __metadata: languageName: node linkType: hard -"@module-federation/sdk@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/sdk@npm:0.8.1" +"@module-federation/sdk@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/sdk@npm:0.8.5" dependencies: isomorphic-rslog: 0.0.6 - checksum: 41858b512cba814ea4a483a03043c3fda7c50796be5ef9b360b73fc1a2903f1edc58194663efbbcb36cb8035d088db8fe94369f08735761c88fa342bf4d569d8 + checksum: aad2745d1260566c9f3d41e686a29472c11f9bf064f588d74e4bd1715fa0a78b36c3b167f46b2f5ecb33c48bca813e5b64f152ac1b4e6b7d3810f0ce1a799f44 languageName: node linkType: hard -"@module-federation/third-party-dts-extractor@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/third-party-dts-extractor@npm:0.8.1" +"@module-federation/third-party-dts-extractor@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/third-party-dts-extractor@npm:0.8.5" dependencies: find-pkg: 2.0.0 fs-extra: 9.1.0 resolve: 1.22.8 - checksum: fcf0eb87296f8a393db77adb74423af174bc5f0018201471af129d831e4c1c6cf9ab9ea4ae66b91785964a4b421fcfc2dc2079aeb687ad2c6ce891022c8d3adf + checksum: c967d0a892b9b28a64860e4446001a8310cbad26215ec5c45eea1e3871aca31667aadb60508fcddaf91e4262cf2f202033cfd4546a60171334b74994ed94a990 languageName: node linkType: hard @@ -11763,13 +11591,13 @@ __metadata: languageName: node linkType: hard -"@module-federation/webpack-bundler-runtime@npm:0.8.1": - version: 0.8.1 - resolution: "@module-federation/webpack-bundler-runtime@npm:0.8.1" +"@module-federation/webpack-bundler-runtime@npm:0.8.5": + version: 0.8.5 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.8.5" dependencies: - "@module-federation/runtime": 0.8.1 - "@module-federation/sdk": 0.8.1 - checksum: 512ce759214bb82abaf51a2bcdb1eb6db524a819890822689f3be31d189b169827894195f6a5ad53e5afaacb1f08772123f37bce0b7b1dcc72545344e2c4fa31 + "@module-federation/runtime": 0.8.5 + "@module-federation/sdk": 0.8.5 + checksum: e2f1dcdd4558991f62d62756f3525fb3c1f3d545efcbbcfe000e85fcc69b193e2ac7be8348f274ef1bdb284689940e2aa24e2f0ba501927fdbf19111f95190cd languageName: node linkType: hard @@ -11891,28 +11719,28 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.16.9": - version: 5.16.9 - resolution: "@mui/core-downloads-tracker@npm:5.16.9" - checksum: 25e7cf746627e12671e2bae4ea8f81967fbb7e05188c268052104d05f249eea1baa3f3d97f66d1242112afa944a7b025a331527392797d620acbcc1dde23a3df +"@mui/core-downloads-tracker@npm:^5.16.12": + version: 5.16.12 + resolution: "@mui/core-downloads-tracker@npm:5.16.12" + checksum: ade13080e61da63394556e8e3da5c8d20147b1b51f73487f8972bbf25812efa90e1a757d83145e55b215f7e1c08a2e4b65a081e0f25ce2992e076f35aa17ba94 languageName: node linkType: hard "@mui/material@npm:^5.12.2": - version: 5.16.9 - resolution: "@mui/material@npm:5.16.9" + version: 5.16.12 + resolution: "@mui/material@npm:5.16.12" dependencies: "@babel/runtime": ^7.23.9 - "@mui/core-downloads-tracker": ^5.16.9 - "@mui/system": ^5.16.8 + "@mui/core-downloads-tracker": ^5.16.12 + "@mui/system": ^5.16.12 "@mui/types": ^7.2.15 - "@mui/utils": ^5.16.8 + "@mui/utils": ^5.16.12 "@popperjs/core": ^2.11.8 "@types/react-transition-group": ^4.4.10 clsx: ^2.1.0 csstype: ^3.1.3 prop-types: ^15.8.1 - react-is: ^18.3.1 + react-is: ^19.0.0 react-transition-group: ^4.4.5 peerDependencies: "@emotion/react": ^11.5.0 @@ -11927,16 +11755,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: e3692ba08add0a4b959d7e5f754cf5bf934d30798a9256d1eb5bbf37021f81cf6cc0b86a3cb065815af7f2112c6a359e463a6641618d07559f93516e1374669e + checksum: a29677300bb38fddf2e4455cf497233676a6a4ee982b1d4ff4c5b520ce608da526ba934d6670747e207bea354725e68854a4e5671c0980f70dba0f9cf20178c8 languageName: node linkType: hard -"@mui/private-theming@npm:^5.16.8": - version: 5.16.8 - resolution: "@mui/private-theming@npm:5.16.8" +"@mui/private-theming@npm:^5.16.12": + version: 5.16.12 + resolution: "@mui/private-theming@npm:5.16.12" dependencies: "@babel/runtime": ^7.23.9 - "@mui/utils": ^5.16.8 + "@mui/utils": ^5.16.12 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -11944,16 +11772,16 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 576cf19188c236482a8a698978d3061c7e8d76ba9d891d323ce96d92d6b80d88e1aa2a67fe4698d76b8a43221ef0f8ed21be74971fc684ce1279dc73fd34316b + checksum: a51ddd672545be389528d501fe591c3fd03d1317373760eb942e6bd489e56a9bd0da7add01c9420a1007b113902caef2fadf7c9cb4f9b17ea9b2e0007979cb71 languageName: node linkType: hard -"@mui/styled-engine@npm:^5.16.8": - version: 5.16.8 - resolution: "@mui/styled-engine@npm:5.16.8" +"@mui/styled-engine@npm:^5.16.12": + version: 5.16.12 + resolution: "@mui/styled-engine@npm:5.16.12" dependencies: "@babel/runtime": ^7.23.9 - "@emotion/cache": ^11.11.0 + "@emotion/cache": ^11.13.5 csstype: ^3.1.3 prop-types: ^15.8.1 peerDependencies: @@ -11965,19 +11793,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 8eab246e985bbe2707af4620a3193166bacefb029df65ac846cfc0ac5d7996fcb72c50327241f60913538f58a2ad9aa6de3ef12b72eb7750c71f8d3c284a420b + checksum: fa762742ef0a41077dfa0c12c5e3441e32d357192f32fc16b29ee7897ce92a4665cd644b09655dea02fe402da4fc83649901bd34822af784ed359bcc6572ee39 languageName: node linkType: hard "@mui/styles@npm:^5.14.18": - version: 5.16.10 - resolution: "@mui/styles@npm:5.16.10" + version: 5.16.12 + resolution: "@mui/styles@npm:5.16.12" dependencies: "@babel/runtime": ^7.23.9 "@emotion/hash": ^0.9.1 - "@mui/private-theming": ^5.16.8 + "@mui/private-theming": ^5.16.12 "@mui/types": ^7.2.15 - "@mui/utils": ^5.16.8 + "@mui/utils": ^5.16.12 clsx: ^2.1.0 csstype: ^3.1.3 hoist-non-react-statics: ^3.3.2 @@ -11996,19 +11824,19 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 7e85e030993f9e2d93f2f32c4c6f65febd882c8f8d324a1d9476845c8bf8e26fce588fb1336caeb7eea19453454eead92ee8493caa36fed5ce51089899c8ca1b + checksum: 5e33fbafe7ef24e1a19e52ec9b336235d3ef1b77b94711eb53cf9380e143d6f6b9115d83751fceb92c5fa20fe76bd9d6d813831183355aea82f441641e369841 languageName: node linkType: hard -"@mui/system@npm:^5.16.8": - version: 5.16.8 - resolution: "@mui/system@npm:5.16.8" +"@mui/system@npm:^5.16.12": + version: 5.16.12 + resolution: "@mui/system@npm:5.16.12" dependencies: "@babel/runtime": ^7.23.9 - "@mui/private-theming": ^5.16.8 - "@mui/styled-engine": ^5.16.8 + "@mui/private-theming": ^5.16.12 + "@mui/styled-engine": ^5.16.12 "@mui/types": ^7.2.15 - "@mui/utils": ^5.16.8 + "@mui/utils": ^5.16.12 clsx: ^2.1.0 csstype: ^3.1.3 prop-types: ^15.8.1 @@ -12024,7 +11852,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: 8082b176009fa907cdb0391db59db6cd3589659ad92497caec998c01e1683978ab2eda4ece4d12e523d233b062aa5946d4a438d9a22bf172f0568be1db773e9c + checksum: 261fbf349e6ef1462f46d92221697efe0aefcde33975eeb214dd2fa97b77ca76236cae0c221bc9e30e84775b8d3ebd9a4dd779666e833f671cf7b3a11a50a39d languageName: node linkType: hard @@ -12040,23 +11868,23 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^5.14.15, @mui/utils@npm:^5.16.8": - version: 5.16.8 - resolution: "@mui/utils@npm:5.16.8" +"@mui/utils@npm:^5.14.15, @mui/utils@npm:^5.16.12": + version: 5.16.12 + resolution: "@mui/utils@npm:5.16.12" dependencies: "@babel/runtime": ^7.23.9 "@mui/types": ^7.2.15 "@types/prop-types": ^15.7.12 clsx: ^2.1.1 prop-types: ^15.8.1 - react-is: ^18.3.1 + react-is: ^19.0.0 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: ed714c6aa583bdf17af9f523c9b9ba3789a47677aa6408bc2afd842fa9eaa6d111361c1309435d481ea03b8c695e22ead98c43dc13239c63a3da481c95e5ad72 + checksum: 0f6df27d39d9c7c5dcd041fc8a2e40bd222180aaa140c7c4f7f7a79e79edbd2f15ffcd407ab27ec58142a2cb9858f078cf20f0ccb0d854ec7a426475bf0dabce languageName: node linkType: hard @@ -15335,11 +15163,11 @@ __metadata: linkType: hard "@remixicon/react@npm:^4.5.0": - version: 4.5.0 - resolution: "@remixicon/react@npm:4.5.0" + version: 4.6.0 + resolution: "@remixicon/react@npm:4.6.0" peerDependencies: react: ">=18.2.0" - checksum: e37b61090954954601d35367a740b7be30c105a49f67eaa5a697db16d4668d71d9fd94b339da6d449a254736d5af3b567d3694021b79d3c82fe28afb818830bc + checksum: 81127617eff78fb97aff01dc392ebbafb69fbfe835270b4db8ee68844d02d8c47a42d312d72104708f7266d8ad005405ea1245a536e35b66305d00d56f20b9eb languageName: node linkType: hard @@ -15458,8 +15286,8 @@ __metadata: linkType: hard "@rollup/plugin-node-resolve@npm:^15.0.0": - version: 15.3.0 - resolution: "@rollup/plugin-node-resolve@npm:15.3.0" + version: 15.3.1 + resolution: "@rollup/plugin-node-resolve@npm:15.3.1" dependencies: "@rollup/pluginutils": ^5.0.1 "@types/resolve": 1.20.2 @@ -15471,7 +15299,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 90e4e94b173e7edd57e374ac0cc0a69cc6f1b4507e83731132ac6fa1747d96a5648a48441e4452728429b6db5e67561439b7b2f4d2c6a941a33d38be56d871b4 + checksum: 2973db4da0e7ed97c35a8dd8878ed6b6781bcb03d72039f064d878f711b0290446348c5268aa1359d064787adc0d5cc35f662d35ea5a4fa9b0b3f9f17c678f41 languageName: node linkType: hard @@ -15643,82 +15471,82 @@ __metadata: languageName: node linkType: hard -"@rspack/binding-darwin-arm64@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-darwin-arm64@npm:1.1.5" +"@rspack/binding-darwin-arm64@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-darwin-arm64@npm:1.1.8" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-darwin-x64@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-darwin-x64@npm:1.1.5" +"@rspack/binding-darwin-x64@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-darwin-x64@npm:1.1.8" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rspack/binding-linux-arm64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-arm64-gnu@npm:1.1.5" +"@rspack/binding-linux-arm64-gnu@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.1.8" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-arm64-musl@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-arm64-musl@npm:1.1.5" +"@rspack/binding-linux-arm64-musl@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.1.8" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rspack/binding-linux-x64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-x64-gnu@npm:1.1.5" +"@rspack/binding-linux-x64-gnu@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.1.8" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-x64-musl@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-x64-musl@npm:1.1.5" +"@rspack/binding-linux-x64-musl@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-linux-x64-musl@npm:1.1.8" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rspack/binding-win32-arm64-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-win32-arm64-msvc@npm:1.1.5" +"@rspack/binding-win32-arm64-msvc@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.1.8" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-win32-ia32-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-win32-ia32-msvc@npm:1.1.5" +"@rspack/binding-win32-ia32-msvc@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.1.8" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rspack/binding-win32-x64-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-win32-x64-msvc@npm:1.1.5" +"@rspack/binding-win32-x64-msvc@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.1.8" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rspack/binding@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding@npm:1.1.5" +"@rspack/binding@npm:1.1.8": + version: 1.1.8 + resolution: "@rspack/binding@npm:1.1.8" dependencies: - "@rspack/binding-darwin-arm64": 1.1.5 - "@rspack/binding-darwin-x64": 1.1.5 - "@rspack/binding-linux-arm64-gnu": 1.1.5 - "@rspack/binding-linux-arm64-musl": 1.1.5 - "@rspack/binding-linux-x64-gnu": 1.1.5 - "@rspack/binding-linux-x64-musl": 1.1.5 - "@rspack/binding-win32-arm64-msvc": 1.1.5 - "@rspack/binding-win32-ia32-msvc": 1.1.5 - "@rspack/binding-win32-x64-msvc": 1.1.5 + "@rspack/binding-darwin-arm64": 1.1.8 + "@rspack/binding-darwin-x64": 1.1.8 + "@rspack/binding-linux-arm64-gnu": 1.1.8 + "@rspack/binding-linux-arm64-musl": 1.1.8 + "@rspack/binding-linux-x64-gnu": 1.1.8 + "@rspack/binding-linux-x64-musl": 1.1.8 + "@rspack/binding-win32-arm64-msvc": 1.1.8 + "@rspack/binding-win32-ia32-msvc": 1.1.8 + "@rspack/binding-win32-x64-msvc": 1.1.8 dependenciesMeta: "@rspack/binding-darwin-arm64": optional: true @@ -15738,16 +15566,16 @@ __metadata: optional: true "@rspack/binding-win32-x64-msvc": optional: true - checksum: 6fe7d4cd04613c8c25d1e5eabf97abd82c721ec68f787150eab3026ef01830043e9c062851a286618106cadca759fc55929ec39b85b12e21025cffd39655dfc6 + checksum: 5cd8334d20bd02ccc269a72e960ff01722eb6cc38e0b5b000c9a5d97e6ea7fcf599d8367a08fa7bfc1ddb2745630b0459ef53bc450b66f930e25df2d9b90d5b2 languageName: node linkType: hard "@rspack/core@npm:^1.0.10": - version: 1.1.5 - resolution: "@rspack/core@npm:1.1.5" + version: 1.1.8 + resolution: "@rspack/core@npm:1.1.8" dependencies: "@module-federation/runtime-tools": 0.5.1 - "@rspack/binding": 1.1.5 + "@rspack/binding": 1.1.8 "@rspack/lite-tapable": 1.0.1 caniuse-lite: ^1.0.30001616 peerDependencies: @@ -15755,7 +15583,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 795da019b01555f7f3035ee1c80f39d808ddd1a6043aa2ab8caa3c42e3f73f966fb581bcb9c959852fd31d52ea8f89e2a135c8fa29c31cb7effa7d237a854520 + checksum: be6a4fcb887bc5fb3b9723d9600d295ea322cd8201c1ddd105a8574b4633fe5c504fb7d7841173a5bebddd2e88f87a09944e1b515c62fd9ec8496bcad4d23e1c languageName: node linkType: hard @@ -16102,13 +15930,13 @@ __metadata: languageName: node linkType: hard -"@smithy/abort-controller@npm:^3.1.2, @smithy/abort-controller@npm:^3.1.8": - version: 3.1.8 - resolution: "@smithy/abort-controller@npm:3.1.8" +"@smithy/abort-controller@npm:^3.1.2, @smithy/abort-controller@npm:^3.1.9": + version: 3.1.9 + resolution: "@smithy/abort-controller@npm:3.1.9" dependencies: - "@smithy/types": ^3.7.1 + "@smithy/types": ^3.7.2 tslib: ^2.6.2 - checksum: edfe448be34e33120dfb11a564e87362288ed76d69eaae3449d5f1ee806def1fc844c35421caf2cf579e3bc45df97340e74e36927ec439c8c8aca5c5edf8fb85 + checksum: 0d15ce236a14cc5193b76e6990a224957926404dd683c23000b9370a230d9331b36a4cb805521b0d713aec80b2ea78b22e0c44b03d52aa77c8d998915aafd2ac languageName: node linkType: hard @@ -16393,15 +16221,15 @@ __metadata: linkType: hard "@smithy/node-http-handler@npm:^3.0.0, @smithy/node-http-handler@npm:^3.2.0": - version: 3.3.1 - resolution: "@smithy/node-http-handler@npm:3.3.1" + version: 3.3.2 + resolution: "@smithy/node-http-handler@npm:3.3.2" dependencies: - "@smithy/abort-controller": ^3.1.8 - "@smithy/protocol-http": ^4.1.7 - "@smithy/querystring-builder": ^3.0.10 - "@smithy/types": ^3.7.1 + "@smithy/abort-controller": ^3.1.9 + "@smithy/protocol-http": ^4.1.8 + "@smithy/querystring-builder": ^3.0.11 + "@smithy/types": ^3.7.2 tslib: ^2.6.2 - checksum: 483766a6f7d9625b254a1e88f54c0bd89e83bb0c3a3518d3b298dcd9bbc2160bca2e867a859654c483aed78e8578e0c3c65ae4e0c4aa6e5e50bc04cdb7af1b37 + checksum: f4d70ca9ba6d62ae9c3257c069a42ff9c0d3bce28625e7ebab34bc3196eb5a2a1cb2c20d3409b8d1a9c24f0a5d0b3d0809904ceea8d87c4fb991474fd0d9fd31 languageName: node linkType: hard @@ -16415,24 +16243,24 @@ __metadata: languageName: node linkType: hard -"@smithy/protocol-http@npm:^4.1.1, @smithy/protocol-http@npm:^4.1.7": - version: 4.1.7 - resolution: "@smithy/protocol-http@npm:4.1.7" +"@smithy/protocol-http@npm:^4.1.1, @smithy/protocol-http@npm:^4.1.8": + version: 4.1.8 + resolution: "@smithy/protocol-http@npm:4.1.8" dependencies: - "@smithy/types": ^3.7.1 + "@smithy/types": ^3.7.2 tslib: ^2.6.2 - checksum: 3d78a52558edb712e7b399535fcb9de5960610dc4b81ce15f1b52c7ac3ea96f47c53132974ce9e1108378dc1c5ee90333828dfa1a071dff7b49cf7b687537452 + checksum: 43cdc163137f09dc5f2419ab75c9f31ca7c1da9210023c027be5fa29455543bdc10ab886449dc1399d7ea21ab4b83ba828714f31d06c1638999fa17d5bba0626 languageName: node linkType: hard -"@smithy/querystring-builder@npm:^3.0.10, @smithy/querystring-builder@npm:^3.0.4": - version: 3.0.10 - resolution: "@smithy/querystring-builder@npm:3.0.10" +"@smithy/querystring-builder@npm:^3.0.11, @smithy/querystring-builder@npm:^3.0.4": + version: 3.0.11 + resolution: "@smithy/querystring-builder@npm:3.0.11" dependencies: - "@smithy/types": ^3.7.1 + "@smithy/types": ^3.7.2 "@smithy/util-uri-escape": ^3.0.0 tslib: ^2.6.2 - checksum: a789b6f43392247880d71a4d88a89309d2da0c66e2c0f1708c9befd19db66151b8653e6ba3a13cb9aae2a9ed3889245ad394ecdb1076c25b447296b0a4d83877 + checksum: 168f3104b2db0b704f211e18a318dffdbaaa9675b62ca44c892267c7825295e10041c1c82086cdcd1a7a05f1db95c0a1c74540d8b6d9c9504b13bb89387186fd languageName: node linkType: hard @@ -16504,12 +16332,12 @@ __metadata: languageName: node linkType: hard -"@smithy/types@npm:^3.4.0, @smithy/types@npm:^3.7.1": - version: 3.7.1 - resolution: "@smithy/types@npm:3.7.1" +"@smithy/types@npm:^3.4.0, @smithy/types@npm:^3.7.2": + version: 3.7.2 + resolution: "@smithy/types@npm:3.7.2" dependencies: tslib: ^2.6.2 - checksum: 8db4393211db97aec515cc06748fa23acfc0c26a19c5ed6d009add623e1b1b7a470603a71f55b9de31a15696a2918e4a0913cb3531bfc7951b80bc7872f594f0 + checksum: f3ae277d2f81eeb67c12e651b2e999225cda115dff8fab257a77fbe3739d32c515dbd19218590dd2c33d203259b00c80c9fc6027f8484c50725390a8fc0f1e3e languageName: node linkType: hard @@ -18474,22 +18302,22 @@ __metadata: linkType: hard "@testing-library/react@npm:^16.0.0": - version: 16.0.1 - resolution: "@testing-library/react@npm:16.0.1" + version: 16.1.0 + resolution: "@testing-library/react@npm:16.1.0" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: "@testing-library/dom": ^10.0.0 - "@types/react": ^18.0.0 - "@types/react-dom": ^18.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true "@types/react-dom": optional: true - checksum: 1837db473ea018cf2b5d0cbfffb7a30d0d759e5a7f23aad431441c77bcc3d2533250cd003a61878fd908267df47404cedcb5914f12d79e413002c659652b37fd + checksum: 5dc8e7abda23d108c29f43cdacd43fad750e981ee87ee8902fb349a2683f2f774ef1136f2d3ef3d9efb87e8b04426c43d7b46e95511cd7c9d37b10c3bdd3e9e2 languageName: node linkType: hard @@ -20718,9 +20546,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.23.6": - version: 4.23.6 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.23.6" +"@uiw/codemirror-extensions-basic-setup@npm:4.23.7": + version: 4.23.7 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.23.7" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -20737,19 +20565,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: dc5a845d80c0659883f5299150034145d9b0d1879a926d5f6a9c21d839351715ea9b5dba0272cfb869e9139d40d49e86c5df12e504874cebc8cf6e9824ec4b98 + checksum: 656c5f78db4c6216a9a7eeb65455f52b002b7a5426bb1b05f11b896d5dba9887c7b9ee5aee9fe369d6c7b3c69128ee842cb5c8fe029cd07c2e48ec9358039a30 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.23.6 - resolution: "@uiw/react-codemirror@npm:4.23.6" + version: 4.23.7 + resolution: "@uiw/react-codemirror@npm:4.23.7" dependencies: "@babel/runtime": ^7.18.6 "@codemirror/commands": ^6.1.0 "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.23.6 + "@uiw/codemirror-extensions-basic-setup": 4.23.7 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -20759,7 +20587,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 83ff09c6e5df919b3fef181798b138803a987efab4bebdaad09daae1701167cb4a734fa0b18adcc043d5a2fbd3a997bbda461d1a60972bfccdbbca21803e33fe + checksum: 5f6318b290f479c4718129578bdccbbdf64e3b588fdd79e3d80224779219eae7e249d40e4f88c864ed6ae40ea93036042313e983a022349563698593a2bf2e6c languageName: node linkType: hard @@ -20983,96 +20811,6 @@ __metadata: languageName: node linkType: hard -"@vanilla-extract/babel-plugin-debug-ids@npm:^1.1.0": - version: 1.1.0 - resolution: "@vanilla-extract/babel-plugin-debug-ids@npm:1.1.0" - dependencies: - "@babel/core": ^7.23.9 - checksum: b2feec9016ba2dd6740c2ce002d814123f38bf8fc01a6d771eff74ed8108abefdc9d6507e2045587d2a73d8a538ece867e4bfef8c5ccc2b13095a2c825160e7a - languageName: node - linkType: hard - -"@vanilla-extract/css@npm:^1.16.1": - version: 1.16.1 - resolution: "@vanilla-extract/css@npm:1.16.1" - dependencies: - "@emotion/hash": ^0.9.0 - "@vanilla-extract/private": ^1.0.6 - css-what: ^6.1.0 - cssesc: ^3.0.0 - csstype: ^3.0.7 - dedent: ^1.5.3 - deep-object-diff: ^1.1.9 - deepmerge: ^4.2.2 - lru-cache: ^10.4.3 - media-query-parser: ^2.0.2 - modern-ahocorasick: ^1.0.0 - picocolors: ^1.0.0 - checksum: ff58f32778cbc15458aff951ad771ba46f772d78633ff99f849f590b83a22ce67e017af28351c68c32edcdaae4454146dd90f369842a627ee79dc9c3ab434e1e - languageName: node - linkType: hard - -"@vanilla-extract/integration@npm:^7.1.11": - version: 7.1.11 - resolution: "@vanilla-extract/integration@npm:7.1.11" - dependencies: - "@babel/core": ^7.23.9 - "@babel/plugin-syntax-typescript": ^7.23.3 - "@vanilla-extract/babel-plugin-debug-ids": ^1.1.0 - "@vanilla-extract/css": ^1.16.1 - dedent: ^1.5.3 - esbuild: "npm:esbuild@>=0.17.6 <0.24.0" - eval: 0.1.8 - find-up: ^5.0.0 - javascript-stringify: ^2.0.1 - mlly: ^1.4.2 - vite: ^5.0.11 - vite-node: ^1.2.0 - checksum: 23196f388045c0cdaa35bf26cf484ca4423e336026770b743017056aed7704c74c2134b425571eee9c6859ed1a1553a435e4d0c502ff5a78f8dc2c02db00707a - languageName: node - linkType: hard - -"@vanilla-extract/private@npm:^1.0.6": - version: 1.0.6 - resolution: "@vanilla-extract/private@npm:1.0.6" - checksum: 2265b02af29d8cd40f6ddeeed197fb2df1a7695f5a9821d5e3597677179be8b83bcd8fe4df4a6178544f89123d745a3c6a13599d4fe4e5873b065a8ad329f690 - languageName: node - linkType: hard - -"@vanilla-extract/rollup-plugin@npm:^1.3.10": - version: 1.3.11 - resolution: "@vanilla-extract/rollup-plugin@npm:1.3.11" - dependencies: - "@vanilla-extract/integration": ^7.1.11 - peerDependencies: - rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 - checksum: 2e38981d156f8db962dedfc64131adbe8bd5ec9236686dccec92f3418d43d658f2f3a5797456f67eeb43ce75dcc84f9593e4f073e0e42c6df31d4e3ba6a59785 - languageName: node - linkType: hard - -"@vanilla-extract/sprinkles@npm:^1.6.3": - version: 1.6.3 - resolution: "@vanilla-extract/sprinkles@npm:1.6.3" - peerDependencies: - "@vanilla-extract/css": ^1.0.0 - checksum: 7eb4fe0f1a6048bf5ffb5ffab964c2d127ff95244da79dca2e448af380b591c7af3b4f63ab243584baa8a42c7694d8fe9eeb366587a2da381a481fe1a9e02af8 - languageName: node - linkType: hard - -"@vanilla-extract/webpack-plugin@npm:^2.3.14": - version: 2.3.15 - resolution: "@vanilla-extract/webpack-plugin@npm:2.3.15" - dependencies: - "@vanilla-extract/integration": ^7.1.11 - debug: ^4.3.1 - loader-utils: ^2.0.0 - picocolors: ^1.0.0 - peerDependencies: - webpack: ^4.30.0 || ^5.20.2 - checksum: 105540377d0eb19f8dafcd2cc2cf893471494d4b82012574d4b70c32351ef78b6107ffaecf188a7a6edc10e70bd2963c4fd13ff16954f8063bb785aab98070dd - languageName: node - linkType: hard - "@vitejs/plugin-react@npm:^4.3.1": version: 4.3.4 resolution: "@vitejs/plugin-react@npm:4.3.4" @@ -23431,13 +23169,13 @@ __metadata: linkType: hard "better-sqlite3@npm:^11.0.0": - version: 11.6.0 - resolution: "better-sqlite3@npm:11.6.0" + version: 11.7.0 + resolution: "better-sqlite3@npm:11.7.0" dependencies: bindings: ^1.5.0 node-gyp: latest prebuild-install: ^7.1.1 - checksum: 4570559e8b62da295060b086cfe7902648670863790993be1a43e73867f3d9767598aa52fb8332cf3eb16aa30f3037c3705ce5a195db59c076006067e43eea98 + checksum: 7977bdb0452e096471a5e66ab20b490ddb84d7036856e85896afd9e723415518bbde3e0394c3d00928f04b791d69066a4aaf389b5414fc6abf24815b7ae368fa languageName: node linkType: hard @@ -23952,13 +23690,6 @@ __metadata: languageName: node linkType: hard -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a - languageName: node - linkType: hard - "cacache@npm:^15.0.3, cacache@npm:^15.0.5, cacache@npm:^15.2.0": version: 15.3.0 resolution: "cacache@npm:15.3.0" @@ -24711,7 +24442,7 @@ __metadata: languageName: node linkType: hard -"cluster-key-slot@npm:1.1.2, cluster-key-slot@npm:^1.1.0": +"cluster-key-slot@npm:1.1.2, cluster-key-slot@npm:^1.1.0, cluster-key-slot@npm:^1.1.2": version: 1.1.2 resolution: "cluster-key-slot@npm:1.1.2" checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 @@ -25175,13 +24906,6 @@ __metadata: languageName: node linkType: hard -"confbox@npm:^0.1.8": - version: 0.1.8 - resolution: "confbox@npm:0.1.8" - checksum: 5c7718ab22cf9e35a31c21ef124156076ae8c9dc65e6463d54961caf5a1d529284485a0fdf83fd23b27329f3b75b0c8c07d2e36c699f5151a2efe903343f976a - languageName: node - linkType: hard - "configstore@npm:^5.0.1": version: 5.0.1 resolution: "configstore@npm:5.0.1" @@ -25592,21 +25316,21 @@ __metadata: linkType: hard "cron@npm:^3.0.0": - version: 3.2.1 - resolution: "cron@npm:3.2.1" + version: 3.3.1 + resolution: "cron@npm:3.3.1" dependencies: "@types/luxon": ~3.4.0 luxon: ~3.5.0 - checksum: 349419d702385e9a6ad08d2b571d544df97009be37cde6a4c4e5b31118ca806d9501d784d74e84236a49233c7469e322c3d2c14867009a7a3b2e644b7ade0a0e + checksum: 069e521afd492a7d19234fc3478be32075a1c89fca729f2a3d2f9b7158880c0951e7e1515c8398c36f5ea04155d18186220c980e75623848e80bcee63218f5bc languageName: node linkType: hard "cronstrue@npm:^2.2.0, cronstrue@npm:^2.32.0": - version: 2.51.0 - resolution: "cronstrue@npm:2.51.0" + version: 2.52.0 + resolution: "cronstrue@npm:2.52.0" bin: cronstrue: bin/cli.js - checksum: 7487eeb7bdb9bc8882ede5d3f1cadf73dec44f1da8d29b8ebb0312f85413cd300842ce0c6c49beb66e549917d48f699dfd8b9585d00050c5571c3f8cbf091ac6 + checksum: bfe4d8a58d74ba4a987ea6fe65917529451c648e2abe072d22a6ad4c750f4a7ae9d01321c999594b59cb138990ca43537505e759c23811bbffa606956fff5c55 languageName: node linkType: hard @@ -25969,7 +25693,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.7, csstype@npm:^3.1.2, csstype@npm:^3.1.3": +"csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": version: 3.0.9 resolution: "csstype@npm:3.0.9" checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 @@ -26335,7 +26059,7 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^1.0.0, dedent@npm:^1.5.3": +"dedent@npm:^1.0.0": version: 1.5.3 resolution: "dedent@npm:1.5.3" peerDependencies: @@ -26375,13 +26099,6 @@ __metadata: languageName: node linkType: hard -"deep-object-diff@npm:^1.1.9": - version: 1.1.9 - resolution: "deep-object-diff@npm:1.1.9" - checksum: ecd42455e4773f653595d28070295e7aaa8402db5f8ab21d0bec115a7cb4de5e207a5665514767da5f025c96597f1d3a0a4888aeb4dd49e03c996871a3aa05ef - languageName: node - linkType: hard - "deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1, deepmerge@npm:~4.3.0": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -27275,7 +26992,7 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.0, enquirer@npm:^2.3.6": +"enquirer@npm:^2.3.6, enquirer@npm:^2.4.1": version: 2.4.1 resolution: "enquirer@npm:2.4.1" dependencies: @@ -27755,89 +27472,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:esbuild@>=0.17.6 <0.24.0": - version: 0.23.1 - resolution: "esbuild@npm:0.23.1" - dependencies: - "@esbuild/aix-ppc64": 0.23.1 - "@esbuild/android-arm": 0.23.1 - "@esbuild/android-arm64": 0.23.1 - "@esbuild/android-x64": 0.23.1 - "@esbuild/darwin-arm64": 0.23.1 - "@esbuild/darwin-x64": 0.23.1 - "@esbuild/freebsd-arm64": 0.23.1 - "@esbuild/freebsd-x64": 0.23.1 - "@esbuild/linux-arm": 0.23.1 - "@esbuild/linux-arm64": 0.23.1 - "@esbuild/linux-ia32": 0.23.1 - "@esbuild/linux-loong64": 0.23.1 - "@esbuild/linux-mips64el": 0.23.1 - "@esbuild/linux-ppc64": 0.23.1 - "@esbuild/linux-riscv64": 0.23.1 - "@esbuild/linux-s390x": 0.23.1 - "@esbuild/linux-x64": 0.23.1 - "@esbuild/netbsd-x64": 0.23.1 - "@esbuild/openbsd-arm64": 0.23.1 - "@esbuild/openbsd-x64": 0.23.1 - "@esbuild/sunos-x64": 0.23.1 - "@esbuild/win32-arm64": 0.23.1 - "@esbuild/win32-ia32": 0.23.1 - "@esbuild/win32-x64": 0.23.1 - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 0413c3b9257327fb598427688b7186ea335bf1693746fe5713cc93c95854d6388b8ed4ad643fddf5b5ace093f7dcd9038dd58e087bf2da1f04dfb4c5571660af - languageName: node - linkType: hard - "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -28370,16 +28004,6 @@ __metadata: languageName: node linkType: hard -"eval@npm:0.1.8": - version: 0.1.8 - resolution: "eval@npm:0.1.8" - dependencies: - "@types/node": "*" - require-like: ">= 0.1.1" - checksum: d005567f394cfbe60948e34982e4637d2665030f9aa7dcac581ea6f9ec6eceb87133ed3dc0ae21764aa362485c242a731dbb6371f1f1a86807c58676431e9d1a - languageName: node - linkType: hard - "event-emitter@npm:^0.3.5": version: 0.3.5 resolution: "event-emitter@npm:0.3.5" @@ -29457,15 +29081,6 @@ __metadata: languageName: node linkType: hard -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" - bin: - flat: cli.js - checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d - languageName: node - linkType: hard - "flatstr@npm:^1.0.12": version: 1.0.12 resolution: "flatstr@npm:1.0.12" @@ -30680,9 +30295,9 @@ __metadata: linkType: hard "graphql@npm:^16.0.0, graphql@npm:^16.8.1": - version: 16.9.0 - resolution: "graphql@npm:16.9.0" - checksum: 8cb3d54100e9227310383ce7f791ca48d12f15ed9f2021f23f8735f1121aafe4e5e611a853081dd935ce221724ea1ae4638faef5d2921fb1ad7c26b5f46611e9 + version: 16.10.0 + resolution: "graphql@npm:16.10.0" + checksum: 969c2d1061d69ad6fe08a7fe642428212b0b8485a2f9b5d8650203eb6c3221479e81ec6a757708f849d84b85afcb3ebc5a8ff2f71778bb66c5e4850f051c170e languageName: node linkType: hard @@ -32618,12 +32233,12 @@ __metadata: linkType: hard "isolated-vm@npm:^5.0.1": - version: 5.0.2 - resolution: "isolated-vm@npm:5.0.2" + version: 5.0.3 + resolution: "isolated-vm@npm:5.0.3" dependencies: node-gyp: latest prebuild-install: ^7.1.2 - checksum: 065f19ecb2e43393e6833321105bfa5911d82d0165e25beeb779bb6a262e1401dd387c900bcc3ad706eb7e73f5c5d57ca16ef7e2ee710e62e86b2a5ef39ce76b + checksum: 71ec0c45fe00ed5e48b598281682e46bea7b478177d303326a0ba0602a3186059164d89935820b6648d3ea68aa73d23cd47378752189a7a6877bdfcec140985a languageName: node linkType: hard @@ -32827,13 +32442,6 @@ __metadata: languageName: node linkType: hard -"javascript-stringify@npm:^2.0.1": - version: 2.1.0 - resolution: "javascript-stringify@npm:2.1.0" - checksum: 009981ec84299da88795fc764221ed213e3d52251cc93a396430a7a02ae09f1163a9be36a36808689681a8e6113cf00fe97ec2eea2552df48111f79be59e9358 - languageName: node - linkType: hard - "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -34125,11 +33733,11 @@ __metadata: linkType: hard "keyv@npm:*, keyv@npm:^5.2.1": - version: 5.2.1 - resolution: "keyv@npm:5.2.1" + version: 5.2.2 + resolution: "keyv@npm:5.2.2" dependencies: - "@keyv/serialize": "*" - checksum: 92f02ce8a61d3f832c72bc305a0a3408ab3ba322702175c8f23ddb7b317cdef6525fa084135ca4218f40afe17397f2b5b0f38fb1f0758fb47e8cd5d2699963d2 + "@keyv/serialize": ^1.0.1 + checksum: d5476d8dd674c55c1754bcd05da118dc71eb4609f38677d891da799600fdc532f2015b1ffd3d8e03c0891b3ca88e4b50a34e1eac7787844f6af9cfb2f72c946c languageName: node linkType: hard @@ -34212,8 +33820,8 @@ __metadata: linkType: hard "knip@npm:^5.0.0": - version: 5.39.4 - resolution: "knip@npm:5.39.4" + version: 5.41.1 + resolution: "knip@npm:5.41.1" dependencies: "@nodelib/fs.walk": 1.2.8 "@snyk/github-codeowners": 1.1.0 @@ -34237,7 +33845,7 @@ __metadata: bin: knip: bin/knip.js knip-bun: bin/knip-bun.js - checksum: 0a67865d11e015e324097616caec95f2bec15081daf1a969efcabd0f183020a6c6460326d2ea8cfc1c60b3ecf285710420c328c3ff4093018aec1d077b5815d7 + checksum: d8b1d072493e624abc3ed08d855940a4877c86c7c0b9211e69d930e597c683badd035c1bfb1dc3f9c53c4223507fa0556b413cef63c2e732190275c553587cad languageName: node linkType: hard @@ -35013,7 +34621,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": +"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a @@ -35524,15 +35132,6 @@ __metadata: languageName: node linkType: hard -"media-query-parser@npm:^2.0.2": - version: 2.0.2 - resolution: "media-query-parser@npm:2.0.2" - dependencies: - "@babel/runtime": ^7.12.5 - checksum: 8ef956d9e63fe6f4041988beda69843b3a6bb48228ea2923a066f6e7c8f7c5dba75fae357318c48a97ed5beae840b8425cb7e727fc1bb77acc65f2005f8945ab - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -36479,18 +36078,6 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.4.2, mlly@npm:^1.7.2": - version: 1.7.3 - resolution: "mlly@npm:1.7.3" - dependencies: - acorn: ^8.14.0 - pathe: ^1.1.2 - pkg-types: ^1.2.1 - ufo: ^1.5.4 - checksum: 60d309c7ce2ac162224a087fcd683a891260511f57011b2f436b54dfef146b8aae7473013958a58d5b6039f2a8692c32a2599c8390c5b307d1119ad0d917b414 - languageName: node - linkType: hard - "mock-socket@npm:^9.3.0": version: 9.3.1 resolution: "mock-socket@npm:9.3.1" @@ -36599,13 +36186,6 @@ __metadata: languageName: node linkType: hard -"modern-ahocorasick@npm:^1.0.0": - version: 1.1.0 - resolution: "modern-ahocorasick@npm:1.1.0" - checksum: 78b99840c9af086c1e36a594ee85bebd8c19d48e2ef31a67d1bad0e673ac12fc931e5961abb5b16daaf820af4923e700f76b1793b7413e18782230162866a0af - languageName: node - linkType: hard - "module-details-from-path@npm:^1.0.3": version: 1.0.3 resolution: "module-details-from-path@npm:1.0.3" @@ -36703,8 +36283,8 @@ __metadata: linkType: hard "msw@npm:^2.0.0, msw@npm:^2.0.8": - version: 2.6.9 - resolution: "msw@npm:2.6.9" + version: 2.7.0 + resolution: "msw@npm:2.7.0" dependencies: "@bundled-es-modules/cookie": ^2.0.1 "@bundled-es-modules/statuses": ^1.0.1 @@ -36715,12 +36295,12 @@ __metadata: "@open-draft/until": ^2.1.0 "@types/cookie": ^0.6.0 "@types/statuses": ^2.0.4 - chalk: ^4.1.2 graphql: ^16.8.1 headers-polyfill: ^4.0.2 is-node-process: ^1.2.0 outvariant: ^1.4.3 path-to-regexp: ^6.3.0 + picocolors: ^1.1.1 strict-event-emitter: ^0.5.1 type-fest: ^4.26.1 yargs: ^17.7.2 @@ -36731,7 +36311,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 959d42bbc164fd6a2458398c0aa91d3ff605ec7492884ec6b39c2e72dd4064dc0d7d1083656cc676048d57d8d69348c8cb97952459b8157021269404ceee542b + checksum: d8851ced7a7b6a8ca11d2cd1cb7a21082ed2543ebe93afa047b0ed5a9fb4708bcf230fe888f3b88b8c73f4432d3dc858ac4943f2d1e09fc3380c1f28ccbb53e5 languageName: node linkType: hard @@ -38250,10 +37830,10 @@ __metadata: languageName: node linkType: hard -"p-throttle@npm:^5.1.0": - version: 5.1.0 - resolution: "p-throttle@npm:5.1.0" - checksum: c412429cbb759a0772a083200a556e5866d4a7cb5383a9cc85880f47f07f4b1787fc33d2c824ab659fff0fc4a34a56e1d0712e88808f0c0ae0ffbe93b54f46c1 +"p-throttle@npm:^7.0.0": + version: 7.0.0 + resolution: "p-throttle@npm:7.0.0" + checksum: ede8b1444bcb9200ebb95415c5eb2fba301ab12de4a9cffe3b8f383ca640e6d52aed417ee0df6705217a8e5aa8faadc5169fc56be7e99d32d34b9a74727d1d4d languageName: node linkType: hard @@ -38791,13 +38371,6 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.1, pathe@npm:^1.1.2": - version: 1.1.2 - resolution: "pathe@npm:1.1.2" - checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 - languageName: node - linkType: hard - "pathval@npm:^2.0.0": version: 2.0.0 resolution: "pathval@npm:2.0.0" @@ -39132,17 +38705,6 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^1.2.1": - version: 1.2.1 - resolution: "pkg-types@npm:1.2.1" - dependencies: - confbox: ^0.1.8 - mlly: ^1.7.2 - pathe: ^1.1.2 - checksum: d2e3ad7aef36cc92b17403e61c04db521bf0beb175ccb4d432c284239f00ec32ff37feb072a260613e9ff727911cff1127a083fd52f91b9bec6b62970f385702 - languageName: node - linkType: hard - "pkg-up@npm:^3.1.0": version: 3.1.0 resolution: "pkg-up@npm:3.1.0" @@ -40815,13 +40377,20 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0, react-is@npm:^18.2.0, react-is@npm:^18.3.1": +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 languageName: node linkType: hard +"react-is@npm:^19.0.0": + version: 19.0.0 + resolution: "react-is@npm:19.0.0" + checksum: fbb3060bcb6b3e8e525b17f0872d1cf62a40b73fa7c5de02419069e2edd3e01cf1e8e86c8888f0733cff006175ee76ae927b40b6f0c4332bdda21020505ac90b + languageName: node + linkType: hard + "react-json-view@npm:^1.21.3": version: 1.21.3 resolution: "react-json-view@npm:1.21.3" @@ -41204,25 +40773,25 @@ __metadata: linkType: hard "react-virtualized-auto-sizer@npm:^1.0.11": - version: 1.0.24 - resolution: "react-virtualized-auto-sizer@npm:1.0.24" + version: 1.0.25 + resolution: "react-virtualized-auto-sizer@npm:1.0.25" peerDependencies: - react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 - react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 - checksum: e7d98563735dabbd1c58727c9d3e9f08f6a60a9964d25507cf4ef08f8964b6e421491c892ee0a99e47630118fdca42f1c60cef15ebda3659face58025dba3e98 + react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 1d325db5bf78fd4a6a8df90fccc9a50b29c648d899d2ce779159903c7eaba2a98254e6436ca6d366b89c44c8b2de7042425dd36d17874d2b51a2455557423c3a languageName: node linkType: hard "react-window@npm:^1.8.10, react-window@npm:^1.8.6": - version: 1.8.10 - resolution: "react-window@npm:1.8.10" + version: 1.8.11 + resolution: "react-window@npm:1.8.11" dependencies: "@babel/runtime": ^7.0.0 memoize-one: ">=3.1.1 <6" peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: e8830f32e3ad4bf91af9cdc5cead84148c7694ce6abd9fdb447fb609da6cd4bbd0bbc75ff985f78828f4bbbd3ba4cbc98235cc9c056b5e5787578518f7fafbb9 + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 04f0835869fbc1dc69637416e91bd7dfd462dcb9bf33ed2db4b4a515116c7a1c1ded3ca5e6df8d9a9ea3ec4f34e8e05f642d50f969bb495a9e11906d6a8cc418 languageName: node linkType: hard @@ -41773,13 +41342,6 @@ __metadata: languageName: node linkType: hard -"require-like@npm:>= 0.1.1": - version: 0.1.2 - resolution: "require-like@npm:0.1.2" - checksum: edb8331f05fd807381a75b76f6cca9f0ce8acaa2e910b7e116541799aa970bfbc64fde5fd6adb3a6917dba346f8386ebbddb81614c24e8dad1b4290c7af9535e - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -42531,15 +42093,15 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0": - version: 4.2.0 - resolution: "schema-utils@npm:4.2.0" +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0": + version: 4.3.0 + resolution: "schema-utils@npm:4.3.0" dependencies: "@types/json-schema": ^7.0.9 ajv: ^8.9.0 ajv-formats: ^2.1.1 ajv-keywords: ^5.1.0 - checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde + checksum: 3dbd9056727c871818eaf3cabeeb5c9e173ae2b17bbf2a9c7a2e49c220fa1a580e44df651c876aea3b4926cecf080730a39e28202cb63f2b68d99872b49cd37a languageName: node linkType: hard @@ -42697,7 +42259,7 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.1": +"serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: @@ -44598,14 +44160,14 @@ __metadata: linkType: hard "terser-webpack-plugin@npm:*, terser-webpack-plugin@npm:^5.1.3, terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10": - version: 5.3.10 - resolution: "terser-webpack-plugin@npm:5.3.10" + version: 5.3.11 + resolution: "terser-webpack-plugin@npm:5.3.11" dependencies: - "@jridgewell/trace-mapping": ^0.3.20 + "@jridgewell/trace-mapping": ^0.3.25 jest-worker: ^27.4.5 - schema-utils: ^3.1.1 - serialize-javascript: ^6.0.1 - terser: ^5.26.0 + schema-utils: ^4.3.0 + serialize-javascript: ^6.0.2 + terser: ^5.31.1 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -44615,13 +44177,13 @@ __metadata: optional: true uglify-js: optional: true - checksum: bd6e7596cf815f3353e2a53e79cbdec959a1b0276f5e5d4e63e9d7c3c5bb5306df567729da287d1c7b39d79093e56863c569c42c6c24cc34c76aa313bd2cbcea + checksum: c84c005d4041ad2e2eed0c9059b52a50ffd27f1e2afca7d34864a2b4b2bb1295405bc7578eeb25bae732e358339954d8cb6fbf6d83df52e8aa9333e8bf409ebe languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.26.0": - version: 5.26.0 - resolution: "terser@npm:5.26.0" +"terser@npm:^5.10.0, terser@npm:^5.31.1": + version: 5.37.0 + resolution: "terser@npm:5.37.0" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -44629,7 +44191,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 02a9bb896f04df828025af8f0eced36c315d25d310b6c2418e7dad2bed19ddeb34a9cea9b34e7c24789830fa51e1b6a9be26679980987a9c817a7e6d9cd4154b + checksum: 70c06a8ce1288ff4370a7e481beb6fc8b22fc4995371479f49df1552aa9cf8e794ace66e1da6e87057eda1745644311213f5043bda9a06cf55421eff68b3ac06 languageName: node linkType: hard @@ -45620,13 +45182,6 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.5.4": - version: 1.5.4 - resolution: "ufo@npm:1.5.4" - checksum: f244703b7d4f9f0df4f9af23921241ab73410b591f4e5b39c23e3147f3159b139a4b1fb5903189c306129f7a16b55995dac0008e0fbae88a37c3e58cbc34d833 - languageName: node - linkType: hard - "uglify-js@npm:^3.1.4": version: 3.17.0 resolution: "uglify-js@npm:3.17.0" @@ -46526,21 +46081,6 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:^1.2.0": - version: 1.6.0 - resolution: "vite-node@npm:1.6.0" - dependencies: - cac: ^6.7.14 - debug: ^4.3.4 - pathe: ^1.1.1 - picocolors: ^1.0.0 - vite: ^5.0.0 - bin: - vite-node: vite-node.mjs - checksum: ce111c5c7a4cf65b722baa15cbc065b7bfdbf1b65576dd6372995f6a72b2b93773ec5df59f6c5f08cfe1284806597b44b832efcea50d5971102428159ff4379f - languageName: node - linkType: hard - "vite-plugin-html@npm:^3.2.2": version: 3.2.2 resolution: "vite-plugin-html@npm:3.2.2" @@ -46575,7 +46115,7 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.0.0, vite@npm:^5.0.11": +"vite@npm:^5.0.0": version: 5.4.11 resolution: "vite@npm:5.4.11" dependencies: @@ -46905,17 +46445,6 @@ __metadata: languageName: node linkType: hard -"webpack-merge@npm:^6.0.1": - version: 6.0.1 - resolution: "webpack-merge@npm:6.0.1" - dependencies: - clone-deep: ^4.0.1 - flat: ^5.0.2 - wildcard: ^2.0.1 - checksum: e8a604c686b944605a1c57cc7b75e886ab902dc5ffdd15259a092c5c2dd5f58868fe39f995ea4bad4f189e38843b061c4ae1eb22822d7169813f4adab571dc3d - languageName: node - linkType: hard - "webpack-sources@npm:^1.4.3": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" @@ -47186,13 +46715,6 @@ __metadata: languageName: node linkType: hard -"wildcard@npm:^2.0.1": - version: 2.0.1 - resolution: "wildcard@npm:2.0.1" - checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c - languageName: node - linkType: hard - "winston-transport@npm:^4.5.0, winston-transport@npm:^4.7.0": version: 4.8.0 resolution: "winston-transport@npm:4.8.0"