diff --git a/.changeset/empty-meals-lick.md b/.changeset/empty-meals-lick.md new file mode 100644 index 0000000000..c215cceb6e --- /dev/null +++ b/.changeset/empty-meals-lick.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': minor +--- + +Add an ActionMenu form input diff --git a/.changeset/hip-pens-attend.md b/.changeset/hip-pens-attend.md new file mode 100644 index 0000000000..6d10f7a46e --- /dev/null +++ b/.changeset/hip-pens-attend.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': patch +--- + +Removes redundant `aria-disabled` from list item within `ActionMenu`. diff --git a/.changeset/new-dolphins-love.md b/.changeset/new-dolphins-love.md new file mode 100644 index 0000000000..64479e4022 --- /dev/null +++ b/.changeset/new-dolphins-love.md @@ -0,0 +1,7 @@ +--- +"@openproject/primer-view-components": patch +--- + +Adapts Blankslate to render proportionally in narrow areas + + diff --git a/.changeset/orange-seahorses-fix.md b/.changeset/orange-seahorses-fix.md new file mode 100644 index 0000000000..f059e9e2e8 --- /dev/null +++ b/.changeset/orange-seahorses-fix.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': minor +--- + +Add a ClipboardCopyButton component diff --git a/.changeset/popular-timers-shop.md b/.changeset/popular-timers-shop.md new file mode 100644 index 0000000000..f1b850622d --- /dev/null +++ b/.changeset/popular-timers-shop.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': minor +--- + +Remove touch target gaps between ActionBar items diff --git a/.changeset/rude-chefs-leave.md b/.changeset/rude-chefs-leave.md new file mode 100644 index 0000000000..0f96b3ab11 --- /dev/null +++ b/.changeset/rude-chefs-leave.md @@ -0,0 +1,5 @@ +--- +"@openproject/primer-view-components": minor +--- + +Removing the button wrapper `Button--withTooltip` when using a tooltip with a button. diff --git a/.changeset/seven-adults-push.md b/.changeset/seven-adults-push.md new file mode 100644 index 0000000000..afbc76e388 --- /dev/null +++ b/.changeset/seven-adults-push.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': patch +--- + +Fix an issue where ActionMenu wouldn't scroll its contents diff --git a/.changeset/shiny-buses-matter.md b/.changeset/shiny-buses-matter.md new file mode 100644 index 0000000000..dc2b81cd4e --- /dev/null +++ b/.changeset/shiny-buses-matter.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': minor +--- + +Allow several font sizes for Subhead headings diff --git a/.changeset/short-buses-think.md b/.changeset/short-buses-think.md new file mode 100644 index 0000000000..3faace2827 --- /dev/null +++ b/.changeset/short-buses-think.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': minor +--- + +Add Rails 7.1 support diff --git a/.changeset/soft-singers-travel.md b/.changeset/soft-singers-travel.md new file mode 100644 index 0000000000..52c19e98a2 --- /dev/null +++ b/.changeset/soft-singers-travel.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': minor +--- + +Add missing 64px Avatar size diff --git a/.changeset/thin-ants-exercise.md b/.changeset/thin-ants-exercise.md new file mode 100644 index 0000000000..cd4021ec77 --- /dev/null +++ b/.changeset/thin-ants-exercise.md @@ -0,0 +1,6 @@ +--- +'@openproject/primer-view-components': minor +--- + +Updates Primer::Alpha::TextField to support success inline validation messages and allows validation messages to contain html fragments. + diff --git a/.changeset/thirty-news-live.md b/.changeset/thirty-news-live.md new file mode 100644 index 0000000000..b16b7cf9b9 --- /dev/null +++ b/.changeset/thirty-news-live.md @@ -0,0 +1,5 @@ +--- +'@openproject/primer-view-components': patch +--- + +Re-introduce require 'primer/form_helper' for setups that rely on Rails eager load paths diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0e93c0d1f2..a6bffaa716 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,13 +10,13 @@ updates: - "skip changeset" - "actions" schedule: - interval: "monthly" + interval: "weekly" # NPM - package-ecosystem: "npm" directory: "/" schedule: - interval: "monthly" + interval: "weekly" labels: - "dependencies" - "skip changeset" @@ -24,7 +24,7 @@ updates: - package-ecosystem: "npm" directory: "/demo" schedule: - interval: "monthly" + interval: "weekly" labels: - "dependencies" - "skip changeset" @@ -34,7 +34,7 @@ updates: - package-ecosystem: "bundler" directory: "/" schedule: - interval: "monthly" + interval: "weekly" labels: - "dependencies" - "skip changeset" @@ -42,7 +42,7 @@ updates: - package-ecosystem: "bundler" directory: "/demo" schedule: - interval: "monthly" + interval: "weekly" labels: - "dependencies" - "skip changeset" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 8ca5510222..07a56b1a25 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -21,7 +21,7 @@ jobs: with: languages: javascript - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e5e278b5f5..4c85830614 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -12,16 +12,17 @@ jobs: - uses: actions/checkout@v4 - name: Get specific changed files id: changed-files - uses: tj-actions/changed-files@v39.2.3 + uses: tj-actions/changed-files@v40.1.1 with: files: | - **/*.md - files_ignore: | - .changeset/*.md - CHANGELOG.md + docs/**/*.md + .github/**/*.md + README.md + CONTRIBUTING.md + CODE_OF_CONDUCT.md - uses: xt0rted/markdownlint-problem-matcher@v2 if: steps.changed-files.outputs.any_changed == 'true' - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 if: steps.changed-files.outputs.any_changed == 'true' with: node-version: 16 @@ -38,7 +39,7 @@ jobs: - uses: actions/checkout@v4 - name: Get specific changed files id: changed-files - uses: tj-actions/changed-files@v39.2.3 + uses: tj-actions/changed-files@v40.1.1 with: files: | app/**/*.rb @@ -61,7 +62,7 @@ jobs: - uses: actions/checkout@v4 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v39.2.3 + uses: tj-actions/changed-files@v40.1.1 with: files: | app/components/**/*.erb @@ -81,11 +82,11 @@ jobs: - uses: actions/checkout@v4 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v39.2.3 + uses: tj-actions/changed-files@v40.1.1 with: files: | app/components/**/*.ts - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 if: steps.changed-files.outputs.any_changed == 'true' with: node-version: 16 @@ -102,12 +103,12 @@ jobs: - uses: actions/checkout@v4 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v39.2.3 + uses: tj-actions/changed-files@v40.1.1 with: files: | app/components/**/*.pcss lib/postcss_mixins/*.pcss - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 if: steps.changed-files.outputs.any_changed == 'true' with: node-version: 16 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index db8c5bdcbf..0b9681a15d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,7 +12,7 @@ jobs: with: ruby-version: '3.2' bundler-cache: true - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' @@ -26,7 +26,7 @@ jobs: chmod 0600 $HOME/.gem/credentials env: RUBYGEMS_TOKEN: ${{ secrets.RUBYGEMS_TOKEN_SHARED }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 - name: Create .npmrc diff --git a/.github/workflows/release-checklist.yml b/.github/workflows/release-checklist.yml index 3cb959b076..bcc74506f1 100644 --- a/.github/workflows/release-checklist.yml +++ b/.github/workflows/release-checklist.yml @@ -18,7 +18,7 @@ jobs: - name: Get or Create Comment if: success() && steps.findPr.outputs.number - uses: actions/github-script@v6 + uses: actions/github-script@v7 env: PR_NUMBER: ${{ steps.findPr.outputs.pr }} with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bfc9d553ae..f36de70971 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' diff --git a/.github/workflows/static-files.yml b/.github/workflows/static-files.yml index a7f6817976..109a142be8 100644 --- a/.github/workflows/static-files.yml +++ b/.github/workflows/static-files.yml @@ -18,7 +18,7 @@ jobs: with: ruby-version: '3.2' bundler-cache: true - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7051bc60c3..1bdf446994 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,7 +27,7 @@ jobs: with: ruby-version: '3.2' bundler-cache: true - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' @@ -51,6 +51,8 @@ jobs: ruby_version: "2.7" - rails_version: "7.0.3" ruby_version: "3.0" + - rails_version: "7.1.1" + ruby_version: "3.2" - rails_version: "main" ruby_version: "3.1" - rails_version: "main" @@ -62,7 +64,7 @@ jobs: ruby-version: ${{ matrix.ruby_version }} bundler-cache: true cache-version: ${{ matrix.rails_version }}-${{ matrix.ruby_version }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' @@ -93,6 +95,8 @@ jobs: ruby_version: "2.7" - rails_version: "7.0.3" ruby_version: "3.0" + - rails_version: "7.1.1" + ruby_version: "3.2" - rails_version: "main" ruby_version: "3.1" - rails_version: "main" @@ -104,7 +108,7 @@ jobs: ruby-version: ${{ matrix.ruby_version }} bundler-cache: true cache-version: ${{ matrix.rails_version }}-${{ matrix.ruby_version }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' @@ -135,6 +139,8 @@ jobs: ruby_version: "2.7" - rails_version: "7.0.3" ruby_version: "3.0" + - rails_version: "7.1.1" + ruby_version: "3.2" - rails_version: "main" ruby_version: "3.1" - rails_version: "main" @@ -168,7 +174,7 @@ jobs: with: ruby-version: '3.2' bundler-cache: true - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' @@ -193,7 +199,7 @@ jobs: with: ruby-version: '3.2' bundler-cache: true - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' @@ -251,7 +257,7 @@ jobs: ruby-version: '3.2' bundler-cache: true - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 16 cache: 'npm' diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index 20c492bb5e..6539d37227 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -48,7 +48,7 @@ jobs: name: semver label runs-on: ubuntu-latest steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 id: version-result with: github-token: "${{ secrets.GITHUB_TOKEN }}" @@ -60,7 +60,7 @@ jobs: if (match && match[0]) { return match[0][1] } - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 env: RELEASE: ${{ steps.version-result.outputs.result }} with: diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/action_list/item_trailing_action/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/action_list/item_trailing_action/focused.png index 8dd4408b74..00167b1efc 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/action_list/item_trailing_action/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/action_list/item_trailing_action/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/octicon_symbols/default/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/octicon_symbols/default/default.png new file mode 100644 index 0000000000..f95b4e79a4 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/octicon_symbols/default/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/octicon_symbols/default/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/octicon_symbols/default/focused.png new file mode 100644 index 0000000000..c79939a545 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/octicon_symbols/default/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/default.png index 0360879858..3fc59a67e4 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/focused.png index 062579464a..e68a3634a2 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_leading_button/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/default.png index 72f212db4f..1bfad7f3fd 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/focused.png index 95e2270733..1b9072dde1 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/text_field/input_group_trailing_button/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/avatar/size_64/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/avatar/size_64/default.png new file mode 100644 index 0000000000..697f910cd8 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/avatar/size_64/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/avatar/size_64/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/avatar/size_64/focused.png new file mode 100644 index 0000000000..697f910cd8 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/avatar/size_64/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/default.png index e404a06eb1..618d0c8101 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/focused.png index e404a06eb1..618d0c8101 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/default/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/default.png index cd18bb3399..68f0e80815 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/focused.png index cd18bb3399..68f0e80815 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/description/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/default.png index 17e1db7977..18ba3ef52b 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/focused.png index 4d88b8436a..5501e2837d 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/full/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/default.png index 5cf2138867..a1af8ec967 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/focused.png index 5cf2138867..a1af8ec967 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/loading/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/default.png index 89b4e0bdbb..612e92687a 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/focused.png index 89b4e0bdbb..612e92687a 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/option_border/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/default.png index 024487975f..b1e3347b0a 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/focused.png index 5d091030dd..8a909fee7e 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/primary_action/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/default.png index ea81591872..068a3bd8d0 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/focused.png index a3882a87a4..00f10085c9 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/secondary_action/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/default.png index 380722447e..e1d98f4478 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/focused.png index 380722447e..e1d98f4478 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_icon/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/default.png index b103f18e8f..48e0422759 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/focused.png index b103f18e8f..48e0422759 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/blankslate/with_image/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/button_group/with_clipboard_copy_button/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/button_group/with_clipboard_copy_button/default.png new file mode 100644 index 0000000000..1621db22a7 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/button_group/with_clipboard_copy_button/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/button_group/with_clipboard_copy_button/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/button_group/with_clipboard_copy_button/focused.png new file mode 100644 index 0000000000..7bd0abbbc6 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/button_group/with_clipboard_copy_button/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/default/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/default/default.png new file mode 100644 index 0000000000..b3490f30bb Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/default/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/default/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/default/focused.png new file mode 100644 index 0000000000..e0872a31e7 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/default/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/with_tooltip/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/with_tooltip/default.png new file mode 100644 index 0000000000..b3490f30bb Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/with_tooltip/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/with_tooltip/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/with_tooltip/focused.png new file mode 100644 index 0000000000..c94db05fb4 Binary files /dev/null and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/clipboard_copy_button/with_tooltip/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/nav_list/trailing_action/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/nav_list/trailing_action/focused.png index 93dd31134b..14f475772d 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/nav_list/trailing_action/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/beta/nav_list/trailing_action/focused.png differ diff --git a/.rubocop.yml b/.rubocop.yml index 8d899ec677..c3371ed86d 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,7 +1,7 @@ inherit_gem: rubocop-github: - - config/default_edge.yml - - config/rails_edge.yml + - config/default.yml + - config/rails.yml require: - rubocop-rails-accessibility - rubocop/cop/primer diff --git a/.stylelintrc.json b/.stylelintrc.json index 31ccd97d6d..dd51e45993 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,5 +1,5 @@ { - "extends": ["stylelint-config-standard", "stylelint-config-prettier"], + "extends": ["stylelint-config-standard"], "plugins": ["@primer/stylelint-config/plugins/no-deprecated-colors"], "ignoreFiles": ["app/**/*.css", "**/*.js", "**/*.ts"], "rules": { diff --git a/Gemfile b/Gemfile index 5d6f453516..9883e0e6e0 100644 --- a/Gemfile +++ b/Gemfile @@ -3,13 +3,13 @@ source "https://rubygems.org" gemspec -rails_version = (ENV["RAILS_VERSION"] || "7.0.3").to_s +rails_version = (ENV["RAILS_VERSION"] || "7.1.1").to_s # remove when https://github.com/rails/rails/pull/47142 is merged gem "rack", "~> 2.2" gem "rack-cors" -gem "rake", "~> 13.0" +gem "rake", "~> 13.1" # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' @@ -41,8 +41,8 @@ gem "bootsnap", ">= 1.4.2", require: false gem "lookbook", "~> 2.1.1" unless rails_version.to_f < 7 gem "view_component", path: ENV["VIEW_COMPONENT_PATH"] if ENV["VIEW_COMPONENT_PATH"] -gem "sourcemap", "~> 0.1" gem "kramdown", "~> 2.4" +gem "sourcemap", "~> 0.1" group :test do gem "webmock" @@ -57,18 +57,18 @@ end group :development do gem "allocation_stats", "~> 0.1" gem "allocation_tracer", "~> 0.6.3" - gem "benchmark-ips", "~> 2.8.4" + gem "benchmark-ips", "~> 2.12.0" gem "capybara", "~> 3.39.2" gem "cuprite", "~> 0.14.3" gem "erb_lint", "~> 0.4.0" - gem "erblint-github", "~> 0.4.1" + gem "erblint-github", "~> 0.5.1" gem "listen", "~> 3.0" gem "matrix", "~> 0.4.2" gem "mocha" gem "pry" - gem "rubocop", "= 1.13.0" - gem "rubocop-github", "~> 0.16.0" - gem "rubocop-performance", "~> 1.7" + gem "rubocop" + gem "rubocop-github", "~> 0.20.0" + gem "rubocop-performance" gem "rubocop-rails" gem "rubocop-rails-accessibility", "~> 0.2.0" gem "simplecov", "~> 0.22.0" diff --git a/Gemfile.lock b/Gemfile.lock index d8a78ee1c9..95e2c73712 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,47 +4,56 @@ PATH openproject-primer_view_components (0.16.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) - openproject-octicons (>= 19.7.0) + openproject-octicons (>= 19.8.0) view_component (>= 3.1, < 4.0) GEM remote: https://rubygems.org/ specs: - actionpack (7.0.3) - actionview (= 7.0.3) - activesupport (= 7.0.3) - rack (~> 2.0, >= 2.2.0) + actionpack (7.1.1) + actionview (= 7.1.1) + activesupport (= 7.1.1) + nokogiri (>= 1.8.5) + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.3) - activesupport (= 7.0.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actionview (7.1.1) + activesupport (= 7.1.1) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activemodel (7.0.3) - activesupport (= 7.0.3) - activesupport (7.0.3) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activemodel (7.1.1) + activesupport (= 7.1.1) + activesupport (7.1.1) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) - addressable (2.8.1) + addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) allocation_stats (0.1.5) allocation_tracer (0.6.3) ansi (1.5.0) ast (2.4.2) - benchmark-ips (2.8.4) - better_html (2.0.1) + base64 (0.1.1) + benchmark-ips (2.12.0) + better_html (2.0.2) actionview (>= 6.0) activesupport (>= 6.0) ast (~> 2.0) erubi (~> 1.4) parser (>= 2.4) smart_properties - bootsnap (1.16.0) + bigdecimal (3.1.4) + bootsnap (1.17.0) msgpack (~> 1.2) builder (3.2.4) capybara (3.39.2) @@ -58,6 +67,7 @@ GEM xpath (~> 3.2) coderay (1.1.3) concurrent-ruby (1.2.2) + connection_pool (2.4.1) crack (0.4.5) rexml crass (1.0.6) @@ -67,6 +77,8 @@ GEM capybara (~> 3.0) ferrum (~> 0.13.0) docile (1.4.0) + drb (2.1.1) + ruby2_keywords erb_lint (0.4.0) activesupport better_html (>= 2.0.1) @@ -74,27 +86,33 @@ GEM rainbow rubocop smart_properties - erblint-github (0.4.1) + erblint-github (0.5.1) erubi (1.12.0) ferrum (0.13) addressable (~> 2.5) concurrent-ruby (~> 1.1) webrick (~> 1.7) websocket-driver (>= 0.6, < 0.8) - ffi (1.15.5) + ffi (1.16.3) hashdiff (1.0.1) htmlbeautifier (1.4.2) htmlentities (4.3.4) - i18n (1.12.0) + i18n (1.14.1) concurrent-ruby (~> 1.0) + io-console (0.6.0) + irb (1.8.3) + rdoc + reline (>= 0.3.8) + json (2.6.3) kramdown (2.4.0) rexml + language_server-protocol (3.17.0.3) listen (3.8.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - loofah (2.19.1) + loofah (2.21.4) crass (~> 1.0.2) - nokogiri (>= 1.5.9) + nokogiri (>= 1.12.0) lookbook (2.1.1) activemodel css_parser @@ -110,82 +128,100 @@ GEM marcel (1.0.2) matrix (0.4.2) method_source (1.0.0) - mini_mime (1.1.2) - mini_portile2 (2.8.1) + mini_mime (1.1.5) + mini_portile2 (2.8.5) minitest (5.20.0) mocha (2.1.0) ruby2_keywords (>= 0.0.5) - msgpack (1.7.0) + msgpack (1.7.2) + mutex_m (0.1.2) nio4r (2.5.9) - nokogiri (1.14.0) - mini_portile2 (~> 2.8.0) + nokogiri (1.15.4) + mini_portile2 (~> 2.8.2) racc (~> 1.4) - nokogiri (1.14.0-x86_64-linux) + nokogiri (1.15.4-x86_64-linux) racc (~> 1.4) - openproject-octicons (19.7.0) - parallel (1.22.1) - parser (3.2.0.0) + openproject-octicons (19.8.0) + parallel (1.23.0) + parser (3.2.2.4) ast (~> 2.4.1) + racc pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (5.0.1) + psych (5.1.1.1) + stringio + public_suffix (5.0.3) puma (6.4.0) nio4r (~> 2.0) - racc (1.6.2) + racc (1.7.2) rack (2.2.8) rack-cors (2.0.1) rack (>= 2.0.0) - rack-proxy (0.7.6) + rack-proxy (0.7.7) rack - rack-test (2.0.2) + rack-session (1.0.1) + rack (< 3) + rack-test (2.1.0) rack (>= 1.3) - rails-dom-testing (2.0.3) - activesupport (>= 4.2.0) + rackup (1.0.0) + rack (< 3) + webrick + rails-dom-testing (2.2.0) + activesupport (>= 5.0.0) + minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.5.0) - loofah (~> 2.19, >= 2.19.1) - railties (7.0.3) - actionpack (= 7.0.3) - activesupport (= 7.0.3) - method_source + rails-html-sanitizer (1.6.0) + loofah (~> 2.21) + nokogiri (~> 1.14) + railties (7.1.1) + actionpack (= 7.1.1) + activesupport (= 7.1.1) + irb + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.0.6) + rake (13.1.0) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) + rdoc (6.5.0) + psych (>= 4.0.0) redcarpet (3.6.0) - regexp_parser (2.6.2) - rexml (3.2.5) - rouge (4.1.3) - rubocop (1.13.0) + regexp_parser (2.8.2) + reline (0.3.9) + io-console (~> 0.5) + rexml (3.2.6) + rouge (4.2.0) + rubocop (1.57.2) + json (~> 2.3) + language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.0.0.0) + parser (>= 3.2.2.4) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.2.0, < 2.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.1, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.24.1) - parser (>= 3.1.1.0) - rubocop-github (0.16.2) - rubocop (<= 1.13.0) - rubocop-performance (<= 1.11.0) - rubocop-rails (<= 2.7.1) - rubocop-performance (1.11.0) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.30.0) + parser (>= 3.2.1.0) + rubocop-github (0.20.0) + rubocop (>= 1.37) + rubocop-performance (>= 1.15) + rubocop-rails (>= 2.17) + rubocop-performance (1.19.1) rubocop (>= 1.7.0, < 2.0) rubocop-ast (>= 0.4.0) - rubocop-rails (2.7.1) + rubocop-rails (2.22.1) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 0.87.0) + rubocop (>= 1.33.0, < 2.0) rubocop-rails-accessibility (0.2.0) rubocop (>= 1.0.0) - ruby-progressbar (1.11.0) + ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) semantic_range (3.0.0) simplecov (0.22.0) @@ -207,52 +243,52 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) + stringio (3.0.8) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.3.0) - timecop (0.9.6) + timecop (0.9.8) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (2.4.2) - view_component (3.1.0) + unicode-display_width (2.5.0) + view_component (3.7.0) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) method_source (~> 1.0) - webmock (3.18.1) + webmock (3.19.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (5.4.3) + webpacker (5.4.4) activesupport (>= 5.2) rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) - webrick (1.7.0) - websocket-driver (0.7.5) + webrick (1.8.1) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - yard (0.9.28) - webrick (~> 1.7.0) - zeitwerk (2.6.6) + yard (0.9.34) + zeitwerk (2.6.12) PLATFORMS ruby x86_64-linux DEPENDENCIES - actionview (= 7.0.3) - activemodel (= 7.0.3) - activesupport (= 7.0.3) + actionview (= 7.1.1) + activemodel (= 7.1.1) + activesupport (= 7.1.1) allocation_stats (~> 0.1) allocation_tracer (~> 0.6.3) - benchmark-ips (~> 2.8.4) + benchmark-ips (~> 2.12.0) bootsnap (>= 1.4.2) capybara (~> 3.39.2) cuprite (~> 0.14.3) erb_lint (~> 0.4.0) - erblint-github (~> 0.4.1) + erblint-github (~> 0.5.1) kramdown (~> 2.4) listen (~> 3.0) lookbook (~> 2.1.1) @@ -264,11 +300,11 @@ DEPENDENCIES puma (~> 6.4.0) rack (~> 2.2) rack-cors - railties (= 7.0.3) - rake (~> 13.0) - rubocop (= 1.13.0) - rubocop-github (~> 0.16.0) - rubocop-performance (~> 1.7) + railties (= 7.1.1) + rake (~> 13.1) + rubocop + rubocop-github (~> 0.20.0) + rubocop-performance rubocop-rails rubocop-rails-accessibility (~> 0.2.0) simplecov (~> 0.22.0) diff --git a/app/components/primer/alpha/action_bar.pcss b/app/components/primer/alpha/action_bar.pcss index 0680c23bda..86f11275ff 100644 --- a/app/components/primer/alpha/action_bar.pcss +++ b/app/components/primer/alpha/action_bar.pcss @@ -2,7 +2,7 @@ .ActionBar { position: relative; display: flex !important; - min-width: calc(var(--control-medium-size) * 3); + min-width: calc(var(--control-medium-size) * 3); align-items: center; flex-grow: 1; flex-shrink: 1; @@ -51,19 +51,3 @@ .ActionBar--large .ActionBar-divider { margin: 0 var(--controlStack-large-gap-condensed); } - -/* Increase spacing so touch targets don't overlap */ - -@media (pointer: coarse) { - .ActionBar .ActionBar-item-container { - gap: calc(var(--control-minTarget-coarse) - var(--control-medium-size)); /* 12px */ - } - - .ActionBar--small .ActionBar-item-container { - gap: calc(var(--control-minTarget-coarse) - var(--control-small-size)); /* 16px */ - } - - .ActionBar--large .ActionBar-item-container { - gap: calc(var(--control-minTarget-coarse) - var(--control-large-size)); /* 4px */ - } -} diff --git a/app/components/primer/alpha/action_list.rb b/app/components/primer/alpha/action_list.rb index 2023116b21..613edbf76f 100644 --- a/app/components/primer/alpha/action_list.rb +++ b/app/components/primer/alpha/action_list.rb @@ -178,7 +178,6 @@ def before_render # @param component_klass [Class] The class to use instead of the default <%= link_to_component(Primer::Alpha::ActionList::Item) %> # @param system_arguments [Hash] These arguments are forwarded to <%= link_to_component(Primer::Alpha::ActionList::Item) %>, or whatever class is passed as the `component_klass` argument. def build_item(component_klass: ActionList::Item, **system_arguments) - # rubocop:disable Style/IfUnlessModifier if single_select? && system_arguments[:active] && items.count(&:active?).positive? raise ArgumentError, "only a single item may be active when select_variant is set to :single" end diff --git a/app/components/primer/alpha/action_list/item.rb b/app/components/primer/alpha/action_list/item.rb index c8e41dd9eb..66da459c7e 100644 --- a/app/components/primer/alpha/action_list/item.rb +++ b/app/components/primer/alpha/action_list/item.rb @@ -234,7 +234,6 @@ def initialize( end end - # rubocop:disable Style/IfUnlessModifier if @content_arguments[:tag] != :button && @form_wrapper.form_required? raise ArgumentError, "items that submit forms must use a \"button\" tag instead of \"#{@content_arguments[:tag]}\"" end @@ -242,7 +241,6 @@ def initialize( if @content_arguments[:tag] != :button && @list.acts_as_form_input? raise ArgumentError, "items within lists/menus that act as form inputs must use \"button\" tags instead of \"#{@content_arguments[:tag]}\"" end - # rubocop:enable Style/IfUnlessModifier if @disabled @content_arguments[:aria] ||= merge_aria( diff --git a/app/components/primer/alpha/action_menu.html.erb b/app/components/primer/alpha/action_menu.html.erb index 053278b263..9b3aa97fc9 100644 --- a/app/components/primer/alpha/action_menu.html.erb +++ b/app/components/primer/alpha/action_menu.html.erb @@ -1,25 +1,27 @@ <%= render Primer::BaseComponent.new(**@system_arguments) do %> <%= render(@overlay) do |overlay| %> - <% if @src.present? %> - " data-target="action-menu.includeFragment"> - <%= render(Primer::Alpha::ActionMenu::List.new(id: "#{@menu_id}-list", menu_id: @menu_id)) do |list| %> - <% list.with_item( - aria: { disabled: true }, - content_arguments: { - display: :flex, - align_items: :center, - justify_content: :center, - text_align: :center, - autofocus: true - } - ) do %> - <%= render Primer::Beta::Spinner.new(aria: { label: "Loading content..." }) %> + <% overlay.with_body(padding: :none) do %> + <% if @src.present? %> + " data-target="action-menu.includeFragment"> + <%= render(Primer::Alpha::ActionMenu::List.new(id: "#{@menu_id}-list", menu_id: @menu_id)) do |list| %> + <% list.with_item( + aria: { disabled: true }, + content_arguments: { + display: :flex, + align_items: :center, + justify_content: :center, + text_align: :center, + autofocus: true + } + ) do %> + <%= render Primer::Beta::Spinner.new(aria: { label: "Loading content..." }) %> + <% end %> <% end %> - <% end %> - - <% else %> - <%= render(@list) %> + + <% else %> + <%= render(@list) %> + <% end %> <% end %> <% end %> diff --git a/app/components/primer/alpha/action_menu/list.rb b/app/components/primer/alpha/action_menu/list.rb index 3fcef80ea2..8181671d68 100644 --- a/app/components/primer/alpha/action_menu/list.rb +++ b/app/components/primer/alpha/action_menu/list.rb @@ -78,20 +78,16 @@ def evaluate_block(*args, &block) def organize_arguments(data: {}, **system_arguments) content_arguments = system_arguments.delete(:content_arguments) || {} - # rubocop:disable Style/IfUnlessModifier if system_arguments[:tag] && ITEM_TAG_OPTIONS.include?(system_arguments[:tag]) content_arguments[:tag] = system_arguments[:tag] end - # rubocop:enable Style/IfUnlessModifier # disallow setting item's tag system_arguments.delete(:tag) - # rubocop:disable Style/IfUnlessModifier if content_arguments[:tag] == :a content_arguments[:href] ||= system_arguments.delete(:href) end - # rubocop:enable Style/IfUnlessModifier content_arguments[:tabindex] = -1 system_arguments[:autofocus] = "" if system_arguments[:autofocus] @@ -106,11 +102,6 @@ def organize_arguments(data: {}, **system_arguments) content_arguments, { aria: { disabled: true } } ) - - system_arguments[:aria] = merge_aria( - system_arguments, - { aria: { disabled: true } } - ) end { data: data, **system_arguments, content_arguments: content_arguments } diff --git a/app/components/primer/alpha/dialog/header.rb b/app/components/primer/alpha/dialog/header.rb index 3a3ad0c67a..293ea9e260 100644 --- a/app/components/primer/alpha/dialog/header.rb +++ b/app/components/primer/alpha/dialog/header.rb @@ -18,7 +18,7 @@ class Header < Primer::Component # @param id [String] The HTML element's ID value. # @param title [String] Describes the content of the dialog. - # @param subtitle [String] Provides dditional context for the dialog, also setting the `aria-describedby` attribute. + # @param subtitle [String] Provides additional context for the dialog, also setting the `aria-describedby` attribute. # @param show_divider [Boolean] Show a divider between the header and body. # @param visually_hide_title [Boolean] Visually hide the `title` while maintaining a label for assistive technologies. # @param variant [Symbol] <%= one_of(Primer::Alpha::Dialog::Header::VARIANT_OPTIONS) %> diff --git a/app/components/primer/alpha/nav_list.rb b/app/components/primer/alpha/nav_list.rb index e6abbda448..232ae52e35 100644 --- a/app/components/primer/alpha/nav_list.rb +++ b/app/components/primer/alpha/nav_list.rb @@ -2,6 +2,7 @@ module Primer module Alpha + # :nodoc: class NavList < Beta::NavList status :deprecated end diff --git a/app/components/primer/alpha/nav_list/divider.rb b/app/components/primer/alpha/nav_list/divider.rb index 18c3801463..ca8303424e 100644 --- a/app/components/primer/alpha/nav_list/divider.rb +++ b/app/components/primer/alpha/nav_list/divider.rb @@ -3,6 +3,7 @@ module Primer module Alpha class NavList + # :nodoc: class Divider < Beta::NavList::Divider status :deprecated end diff --git a/app/components/primer/alpha/nav_list/group.rb b/app/components/primer/alpha/nav_list/group.rb index 19b5703012..81bc10964d 100644 --- a/app/components/primer/alpha/nav_list/group.rb +++ b/app/components/primer/alpha/nav_list/group.rb @@ -3,6 +3,7 @@ module Primer module Alpha class NavList + # :nodoc: class Group < Beta::NavList::Group status :deprecated end diff --git a/app/components/primer/alpha/nav_list/heading.rb b/app/components/primer/alpha/nav_list/heading.rb index 0f0f278c76..8ee8e3cce0 100644 --- a/app/components/primer/alpha/nav_list/heading.rb +++ b/app/components/primer/alpha/nav_list/heading.rb @@ -3,6 +3,7 @@ module Primer module Alpha class NavList + # :nodoc: class Heading < Beta::NavList::Heading status :deprecated end diff --git a/app/components/primer/alpha/nav_list/item.rb b/app/components/primer/alpha/nav_list/item.rb index 258142e2b5..57e68deb81 100644 --- a/app/components/primer/alpha/nav_list/item.rb +++ b/app/components/primer/alpha/nav_list/item.rb @@ -3,6 +3,7 @@ module Primer module Alpha class NavList + # :nodoc: class Item < Beta::NavList::Item status :deprecated end diff --git a/app/components/primer/alpha/octicon_symbols.html.erb b/app/components/primer/alpha/octicon_symbols.html.erb index 5e0c9f7cc2..59c3c8898c 100644 --- a/app/components/primer/alpha/octicon_symbols.html.erb +++ b/app/components/primer/alpha/octicon_symbols.html.erb @@ -1,3 +1,3 @@ -
+ <%= render Primer::BaseComponent.new(**@system_arguments) do %> + <%= visual %> - <%= heading %> - <%= description %> + <%= heading %> + <%= description %> - <% if primary_action.present? %> -
- <%= primary_action %> -
+ <% if primary_action.present? %> +
+ <%= primary_action %> +
+ <% end %> + <% if secondary_action.present? %> +
+ <%= secondary_action %> +
+ <% end %> <% end %> - <% if secondary_action.present? %> -
- <%= secondary_action %> -
- <% end %> - <% end %> +
<% end %> diff --git a/app/components/primer/beta/blankslate.pcss b/app/components/primer/beta/blankslate.pcss index e3d51ff69f..949d4d43dd 100644 --- a/app/components/primer/beta/blankslate.pcss +++ b/app/components/primer/beta/blankslate.pcss @@ -1,12 +1,20 @@ /* blankslate */ +.blankslate-container { + container-type: inline-size; +} + .blankslate { + --blankslate-outer-padding-block: var(--base-size-32); + --blankslate-outer-padding-inline: var(--base-size-32); + position: relative; - padding: var(--base-size-32); + padding: var(--blankslate-outer-padding-block) var(--blankslate-outer-padding-inline); text-align: center; & p { color: var(--fgColor-muted); + font-size: var(--text-body-size-large); } & code { @@ -35,6 +43,8 @@ } .blankslate-heading { + font-size: var(--text-title-size-medium); + font-weight: var(--text-title-weight-medium); margin-bottom: var(--base-size-4); } @@ -55,7 +65,8 @@ } .blankslate-spacious { - padding: var(--base-size-80) var(--base-size-40); + --blankslate-outer-padding-block: var(--base-size-80); + --blankslate-outer-padding-inline: var(--base-size-40); } .blankslate-narrow { @@ -88,3 +99,42 @@ .blankslate-clean-background { border: 0; } + +/* At the time these styles were written, + `34rem` was our "small" breakpoint width */ +@container (max-width: 34rem) { + .blankslate { + --blankslate-outer-padding-block: var(--base-size-20); + --blankslate-outer-padding-inline: var(--base-size-20); + } + + .blankslate-spacious { + --blankslate-outer-padding-block: var(--base-size-44); + --blankslate-outer-padding-inline: var(--base-size-28); + } + + .blankslate-icon { + margin-bottom: var(--stack-gap-condensed); + } + + .blankslate-heading { + font-size: var(--text-title-size-small); + } + + .blankslate p { + font-size: var(--text-body-size-medium); + } + + .blankslate-action { + margin-top: var(--stack-gap-condensed); + + &:first-of-type { + margin-top: var(--stack-gap-normal); + } + + &:last-of-type { + margin-bottom: calc(var(--stack-gap-condensed) / 2); + } + } +} + \ No newline at end of file diff --git a/app/components/primer/beta/button.html.erb b/app/components/primer/beta/button.html.erb index 6748eed022..180d9e55e9 100644 --- a/app/components/primer/beta/button.html.erb +++ b/app/components/primer/beta/button.html.erb @@ -1,23 +1,21 @@ -<%= render Primer::ConditionalWrapper.new(condition: tooltip.present?, tag: :div, display: (:block if @block), classes: "Button-withTooltip") do -%> - <%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%> - - <% if leading_visual %> - - <%= leading_visual %> - - <% end %> - <%= trimmed_content %> - <% if trailing_visual %> - - <%= trailing_visual %> - - <% end %> - - <% if trailing_action %> - - <%= trailing_action %> +<%= render @base_button_class.new(**@system_arguments) do -%> + + <% if leading_visual %> + + <%= leading_visual %> + + <% end %> + <%= trimmed_content %> + <% if trailing_visual %> + + <%= trailing_visual %> <% end %> - <% end -%> - <%= tooltip %> + + <% if trailing_action %> + + <%= trailing_action %> + + <% end %> <% end -%> +<%= tooltip %> diff --git a/app/components/primer/beta/button.pcss b/app/components/primer/beta/button.pcss index 2cb0f7dbe6..c1ff8549a8 100644 --- a/app/components/primer/beta/button.pcss +++ b/app/components/primer/beta/button.pcss @@ -58,11 +58,6 @@ } } -.Button-withTooltip { - position: relative; - display: inline-block; -} - a.Button, summary.Button { &:hover { diff --git a/app/components/primer/beta/button.rb b/app/components/primer/beta/button.rb index 95c980309c..e9aaaa7304 100644 --- a/app/components/primer/beta/button.rb +++ b/app/components/primer/beta/button.rb @@ -93,6 +93,7 @@ class Button < Primer::Component Primer::Alpha::Tooltip.new(**system_arguments) } + # @param base_button_class [Class] The button class to render. # @param scheme [Symbol] <%= one_of(Primer::Beta::Button::SCHEME_OPTIONS) %> # @param size [Symbol] <%= one_of(Primer::Beta::Button::SIZE_OPTIONS) %> # @param block [Boolean] Whether button is full-width with `display: block`. @@ -102,6 +103,7 @@ class Button < Primer::Component # @param disabled [Boolean] Whether or not the button is disabled. If true, this option forces `tag:` to `:button`. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize( + base_button_class: Primer::Beta::BaseButton, scheme: DEFAULT_SCHEME, size: DEFAULT_SIZE, block: false, @@ -109,6 +111,7 @@ def initialize( disabled: false, **system_arguments ) + @base_button_class = base_button_class @scheme = scheme @block = block diff --git a/app/components/primer/beta/button_group.html.erb b/app/components/primer/beta/button_group.html.erb index 892d7846ef..d7ed726b43 100644 --- a/app/components/primer/beta/button_group.html.erb +++ b/app/components/primer/beta/button_group.html.erb @@ -1,5 +1,7 @@ <%= render Primer::BaseComponent.new(**@system_arguments) do %> <% buttons.each do |button| %> - <%= button %> +
+ <%= button %> +
<% end %> <% end %> diff --git a/app/components/primer/beta/button_group.pcss b/app/components/primer/beta/button_group.pcss index b21228b070..07d2287ee0 100644 --- a/app/components/primer/beta/button_group.pcss +++ b/app/components/primer/beta/button_group.pcss @@ -13,14 +13,12 @@ } } - & > :first-child, - & > :first-child.Button-withTooltip .Button { + & > :first-child .Button { border-top-left-radius: var(--borderRadius-medium); border-bottom-left-radius: var(--borderRadius-medium); } - & > :last-child, - & > :last-child.Button-withTooltip .Button { + & > :last-child .Button { border-top-right-radius: var(--borderRadius-medium); border-bottom-right-radius: var(--borderRadius-medium); } diff --git a/app/components/primer/beta/button_group.rb b/app/components/primer/beta/button_group.rb index e9d230b6d5..256319237f 100644 --- a/app/components/primer/beta/button_group.rb +++ b/app/components/primer/beta/button_group.rb @@ -6,18 +6,47 @@ module Beta class ButtonGroup < Primer::Component status :beta - # Required list of buttons to be rendered. - # - # @param kwargs [Hash] The same arguments as <%= link_to_component(Primer::Beta::Button) %> - renders_many :buttons, lambda { |**kwargs| - kwargs[:size] = @size - kwargs[:scheme] = @scheme - - if kwargs[:icon] - Primer::Beta::IconButton.new(**kwargs) - else - Primer::Beta::Button.new(**kwargs) - end + # @!parse + # # Adds a button. + # # + # # @param icon [Symbol] If included, adds a <%= link_to_component(Primer::Beta::IconButton) %> with the given <%= link_to_octicons %>. Otherwise, a <%= link_to_component(Primer::Beta::Button) %> is added instead. + # # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::Button) %> or <%= link_to_component(Primer::Beta::IconButton) %>, depending on the value of the `icon:` argument. + # def with_button(icon: nil, **system_arguments) + # end + + # @!parse + # # Adds a <%= link_to_component(Primer::Beta::ClipboardCopyButton) %>. + # # + # # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::ClipboardCopyButton) %>. + # def with_clipboard_copy_button(**system_arguments) + # end + + # List of buttons to be rendered. Add buttons via the `#with_button` and `#with_clipboard_copy_button` methods (see below). + renders_many :buttons, types: { + button: { + renders: lambda { |icon: nil, **kwargs| + kwargs[:size] = @size + kwargs[:scheme] = @scheme + + if icon + Primer::Beta::IconButton.new(icon: icon, **kwargs) + else + Primer::Beta::Button.new(**kwargs) + end + }, + + as: :button + }, + + clipboard_copy_button: { + renders: lambda { |**kwargs| + kwargs[:size] = @size + kwargs[:scheme] = @scheme + Primer::Beta::ClipboardCopyButton.new(**kwargs) + }, + + as: :clipboard_copy_button + } } # @param scheme [Symbol] DEPRECATED. <%= one_of(Primer::Beta::Button::SCHEME_OPTIONS) %> diff --git a/app/components/primer/beta/clipboard_copy.rb b/app/components/primer/beta/clipboard_copy.rb index 10d690d990..2d5dd4136a 100644 --- a/app/components/primer/beta/clipboard_copy.rb +++ b/app/components/primer/beta/clipboard_copy.rb @@ -4,6 +4,10 @@ module Primer module Beta # Use `ClipboardCopy` to copy element text content or input values to the clipboard. # + # This component by itself is not styled as a button, and can therefore only be used in limited circumstances. + # If you're looking for a button, consider using <%= link_to_component(Primer::Beta::ClipboardCopyButton) %> + # instead. + # # @accessibility # Always set an accessible label to help the user interact with the component. class ClipboardCopy < Primer::Component diff --git a/app/components/primer/beta/clipboard_copy_button.rb b/app/components/primer/beta/clipboard_copy_button.rb new file mode 100644 index 0000000000..3a60e37f25 --- /dev/null +++ b/app/components/primer/beta/clipboard_copy_button.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Primer + module Beta + # `ClipboardCopyButton` uses the `ClipboardCopy` component to copy text to the clipboard, + # styled as a Primer button. It can be used wherever a button is desired, and works well + # with components like `ButtonGroup`. + class ClipboardCopyButton < Primer::Beta::Button + # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::Button) %> and <%= link_to_component(Primer::Beta::ClipboardCopy) %>. + def initialize(**system_arguments) + super(**system_arguments, base_button_class: ClipboardCopyBaseButton) + end + end + + # Internal + # + # :nodoc: + class ClipboardCopyBaseButton < Primer::Beta::BaseButton + def call + arguments = @system_arguments.except(:tag) + render(Primer::Beta::ClipboardCopy.new(**arguments)) + end + end + end +end diff --git a/app/components/primer/beta/counter.rb b/app/components/primer/beta/counter.rb index 42bac8a541..e6370c9c80 100644 --- a/app/components/primer/beta/counter.rb +++ b/app/components/primer/beta/counter.rb @@ -54,7 +54,7 @@ def initialize( @system_arguments[:classes], SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_OPTIONS, scheme, DEFAULT_SCHEME, deprecated_values: DEPRECATED_SCHEME_OPTIONS)] ) - @system_arguments[:hidden] = true if count == 0 && hide_if_zero # rubocop:disable Style/NumericPredicate + @system_arguments[:hidden] = true if count == 0 && hide_if_zero end def call diff --git a/app/components/primer/beta/flash.html.erb b/app/components/primer/beta/flash.html.erb index 2c28eb139b..10997d2ae9 100644 --- a/app/components/primer/beta/flash.html.erb +++ b/app/components/primer/beta/flash.html.erb @@ -1,7 +1,7 @@ <%= render Primer::BaseComponent.new(**@system_arguments) do %> <%= primer_octicon @icon if @icon %><%= content %> <% if @dismissible %> - <%= render Primer::Beta::IconButton.new(icon: :x, scheme: :invisible, wrapper_arguments: { classes: "flash-close" }, classes: "js-flash-close", "aria-label": "Dismiss alert") %> + <%= render Primer::Beta::IconButton.new(icon: :x, scheme: :invisible, classes: "flash-close js-flash-close", "aria-label": "Dismiss alert") %> <% end %> <%= action %> diff --git a/app/components/primer/beta/icon_button.html.erb b/app/components/primer/beta/icon_button.html.erb index 5257e7a593..25f7cdb92b 100644 --- a/app/components/primer/beta/icon_button.html.erb +++ b/app/components/primer/beta/icon_button.html.erb @@ -1,6 +1,4 @@ -<%= render Primer::ConditionalWrapper.new(condition: render_tooltip?, tag: :div, classes: "Button-withTooltip", **@wrapper_arguments) do %> - <%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%> - <%= render Primer::Beta::Octicon.new(icon: @icon, classes: "Button-visual") %> - <% end -%> - <%= render @tooltip if render_tooltip? %> -<% end %> +<%= render Primer::Beta::BaseButton.new(**@system_arguments) do -%> + <%= render Primer::Beta::Octicon.new(icon: @icon, classes: "Button-visual") %> +<% end -%> +<%= render @tooltip if render_tooltip? %> diff --git a/app/components/primer/beta/icon_button.rb b/app/components/primer/beta/icon_button.rb index c2217c5fa9..dcbc3caf04 100644 --- a/app/components/primer/beta/icon_button.rb +++ b/app/components/primer/beta/icon_button.rb @@ -27,7 +27,6 @@ class IconButton < Primer::Component # @param icon [String] Name of <%= link_to_octicons %> to use. # @param tag [Symbol] <%= one_of(Primer::Beta::BaseButton::TAG_OPTIONS) %> - # @param wrapper_arguments [Hash] Optional keyword arguments to be passed to the wrapper `
` tag. # @param scheme [Symbol] <%= one_of(Primer::Beta::IconButton::SCHEME_OPTIONS) %> # @param size [Symbol] <%= one_of(Primer::Beta::Button::SIZE_OPTIONS) %> # @param disabled [Boolean] Whether or not the button is disabled. If true, this option forces `tag:` to `:button`. @@ -37,10 +36,9 @@ class IconButton < Primer::Component # @param show_tooltip [Boolean] Whether or not to show a tooltip when this button is hovered. Tooltips should only be hidden if the aria label is redundant, i.e. if the icon has a widely understood definition. # @param tooltip_direction [Symbol] (Primer::Alpha::Tooltip::DIRECTION_DEFAULT) <%= one_of(Primer::Alpha::Tooltip::DIRECTION_OPTIONS) %> # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - def initialize(icon:, scheme: DEFAULT_SCHEME, wrapper_arguments: {}, show_tooltip: true, tooltip_direction: Primer::Alpha::Tooltip::DIRECTION_DEFAULT, size: Primer::Beta::Button::DEFAULT_SIZE, disabled: false, **system_arguments) + def initialize(icon:, scheme: DEFAULT_SCHEME, show_tooltip: true, tooltip_direction: Primer::Alpha::Tooltip::DIRECTION_DEFAULT, size: Primer::Beta::Button::DEFAULT_SIZE, disabled: false, **system_arguments) @icon = icon - @wrapper_arguments = wrapper_arguments @show_tooltip = show_tooltip @system_arguments = system_arguments @system_arguments[:id] ||= self.class.generate_id diff --git a/app/components/primer/beta/subhead.pcss b/app/components/primer/beta/subhead.pcss index 0046645a7b..d8d0bf8aac 100644 --- a/app/components/primer/beta/subhead.pcss +++ b/app/components/primer/beta/subhead.pcss @@ -16,12 +16,19 @@ /*

sized heading with normal font weight */ .Subhead-heading { - font-size: 24px; font-weight: var(--base-text-weight-normal); flex: 1 1 auto; order: 0; } +.Subhead-heading--large { + font-size: var(--base-size-24); +} + +.Subhead-heading--medium { + font-size: var(--text-title-size-medium); +} + /* Make the text bold and red for dangerous content */ .Subhead-heading--danger { font-weight: var(--base-text-weight-semibold); diff --git a/app/components/primer/beta/subhead.rb b/app/components/primer/beta/subhead.rb index b72c76a47f..3f3a0ef4b0 100644 --- a/app/components/primer/beta/subhead.rb +++ b/app/components/primer/beta/subhead.rb @@ -17,16 +17,24 @@ class Subhead < Primer::Component DEFAULT_HEADING_TAG = :div HEADING_TAG_OPTIONS = [DEFAULT_HEADING_TAG, :h1, :h2, :h3, :h4, :h5, :h6].freeze + DEFAULT_HEADING_SIZE = :large + HEADING_SIZE_MAP = { + DEFAULT_HEADING_SIZE => "Subhead-heading--large", + :medium => "Subhead-heading--medium" + }.freeze + HEADING_SIZE_OPTIONS = HEADING_SIZE_MAP.keys.freeze + # The heading # # @param tag [Symbol] <%= one_of(Primer::Beta::Subhead::HEADING_TAG_OPTIONS)%> # @param danger [Boolean] Whether to style the heading as dangerous. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> - renders_one :heading, lambda { |tag: DEFAULT_HEADING_TAG, danger: false, **system_arguments| + renders_one :heading, lambda { |tag: DEFAULT_HEADING_TAG, danger: false, size: DEFAULT_HEADING_SIZE, **system_arguments| system_arguments[:tag] = fetch_or_fallback(HEADING_TAG_OPTIONS, tag, DEFAULT_HEADING_TAG) system_arguments[:classes] = class_names( system_arguments[:classes], "Subhead-heading", + HEADING_SIZE_MAP[fetch_or_fallback(HEADING_SIZE_OPTIONS, size, DEFAULT_HEADING_SIZE)], "Subhead-heading--danger": danger ) diff --git a/app/forms/action_menu_form.rb b/app/forms/action_menu_form.rb new file mode 100644 index 0000000000..52e17d5967 --- /dev/null +++ b/app/forms/action_menu_form.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +# :nodoc: +class ActionMenuForm < ApplicationForm + form do |action_menu_form| + action_menu_form.action_menu(name: "city", label: "Favorite city", caption: "Select your favorite!") do |city_list| + city_list.with_item(label: "Lopez Island", data: { value: "lopez_island" }) do |item| + item.with_leading_visual_icon(icon: :log) + end + city_list.with_item(label: "Bellevue", data: { value: "bellevue" }) do |item| + item.with_leading_visual_icon(icon: :paste) + end + city_list.with_item(label: "Seattle", data: { value: "seattle" }) do |item| + item.with_leading_visual_icon(icon: :"device-camera") + end + end + + action_menu_form.submit(name: :submit, label: "Submit") + end +end diff --git a/app/forms/immediate_validation_form.rb b/app/forms/immediate_validation_form.rb index 83bcb89714..6c9582c3d0 100644 --- a/app/forms/immediate_validation_form.rb +++ b/app/forms/immediate_validation_form.rb @@ -21,8 +21,8 @@ class ImmediateValidationForm < ApplicationForm validation_form.text_field( name: :random_error, - label: "Random error", - caption: "Server checks will randomly respond with errors", + label: "Random error or success", + caption: "Server checks will randomly respond with errors or success", auto_check_src: @view_context.example_check_random_path ) end diff --git a/app/lib/primer/fetch_or_fallback_helper.rb b/app/lib/primer/fetch_or_fallback_helper.rb index 92898c271c..04e9476da2 100644 --- a/app/lib/primer/fetch_or_fallback_helper.rb +++ b/app/lib/primer/fetch_or_fallback_helper.rb @@ -48,7 +48,6 @@ def fetch_or_fallback(allowed_values, given_value, fallback = nil, deprecated_va end end - # rubocop:disable Style/OptionalBooleanParameter def fetch_or_fallback_boolean(given_value, fallback = false) if [true, false].include?(given_value) given_value diff --git a/app/lib/primer/octicon/cache.rb b/app/lib/primer/octicon/cache.rb index f895f71802..230063907d 100644 --- a/app/lib/primer/octicon/cache.rb +++ b/app/lib/primer/octicon/cache.rb @@ -4,7 +4,7 @@ module Primer module Octicon # :nodoc: class Cache - LOOKUP = {} # rubocop:disable Style/MutableConstant + LOOKUP = {} # Preload the top 20 used icons. PRELOADED_ICONS = [:alert, :check, :"chevron-down", :paste, :clock, :"dot-fill", :info, :"kebab-horizontal", :link, :lock, :mail, :pencil, :plus, :question, :repo, :search, :"shield-lock", :star, :trash, :x].freeze diff --git a/component_status_migrator.thor b/component_status_migrator.thor index 9addba7751..53d672266b 100644 --- a/component_status_migrator.thor +++ b/component_status_migrator.thor @@ -33,7 +33,7 @@ class ComponentVersion end def component_belongs_in_module? - ![:deprecated, :stable].include?(status) # rubocop:disable Rails/NegateInclude + ![:deprecated, :stable].include?(status) end def controller_path diff --git a/demo/Gemfile b/demo/Gemfile index 84232ee43e..a48d68609b 100644 --- a/demo/Gemfile +++ b/demo/Gemfile @@ -2,9 +2,9 @@ source "https://rubygems.org" -rails_version = (ENV["RAILS_VERSION"] || "7.0.3").to_s +rails_version = (ENV["RAILS_VERSION"] || "7.1.1").to_s -gem "rake", "~> 13.0" +gem "rake", "~> 13.1" gem "rack-cors" gem "sprockets" gem "sprockets-rails" diff --git a/demo/Gemfile.lock b/demo/Gemfile.lock index ea20b676c9..66f13f5dec 100644 --- a/demo/Gemfile.lock +++ b/demo/Gemfile.lock @@ -4,57 +4,70 @@ PATH openproject-primer_view_components (0.16.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) - openproject-octicons (>= 19.7.0) + openproject-octicons (>= 19.8.0) view_component (>= 3.1, < 4.0) GEM remote: https://rubygems.org/ specs: - actioncable (7.0.3) - actionpack (= 7.0.3) - activesupport (= 7.0.3) + actioncable (7.1.1) + actionpack (= 7.1.1) + activesupport (= 7.1.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionpack (7.0.3) - actionview (= 7.0.3) - activesupport (= 7.0.3) - rack (~> 2.0, >= 2.2.0) + zeitwerk (~> 2.6) + actionpack (7.1.1) + actionview (= 7.1.1) + activesupport (= 7.1.1) + nokogiri (>= 1.8.5) + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.3) - activesupport (= 7.0.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actionview (7.1.1) + activesupport (= 7.1.1) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.3) - activesupport (= 7.0.3) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.1.1) + activesupport (= 7.1.1) globalid (>= 0.3.6) - activemodel (7.0.3) - activesupport (= 7.0.3) - activesupport (7.0.3) + activemodel (7.1.1) + activesupport (= 7.1.1) + activesupport (7.1.1) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) azure_mgmt_container_service (0.22.0) ms_rest_azure (~> 0.12.0) - bootsnap (1.16.0) + base64 (0.1.1) + bigdecimal (3.1.4) + bootsnap (1.17.0) msgpack (~> 1.2) builder (3.2.4) byebug (11.1.3) coderay (1.1.3) colorize (0.8.1) concurrent-ruby (1.2.2) + connection_pool (2.4.1) crass (1.0.6) css_parser (1.16.0) addressable docker-remote (0.8.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) + drb (2.1.1) + ruby2_keywords dry-inflector (0.3.0) ejson (1.4.1) erubi (1.12.0) @@ -120,10 +133,15 @@ GEM http-form_data (2.3.0) i18n (1.14.1) concurrent-ruby (~> 1.0) - importmap-rails (1.2.1) + importmap-rails (1.2.3) actionpack (>= 6.0.0) + activesupport (>= 6.0.0) railties (>= 6.0.0) - jsonpath (1.1.4) + io-console (0.6.0) + irb (1.8.3) + rdoc + reline (>= 0.3.8) + jsonpath (1.1.5) multi_json jwt (2.7.1) kind-rb (0.1.0-arm64-darwin) @@ -211,9 +229,10 @@ GEM faraday (>= 0.9, < 2.0.0) faraday-cookie_jar (~> 0.0.6) ms_rest (~> 0.7.6) - msgpack (1.6.0) + msgpack (1.7.2) multi_json (1.15.0) multipart-post (2.3.0) + mutex_m (0.1.2) netrc (0.11.0) nio4r (2.5.9) nokogiri (1.15.4-arm64-darwin) @@ -223,23 +242,30 @@ GEM nokogiri (1.15.4-x86_64-linux) racc (~> 1.4) oj (3.16.1) - openproject-octicons (19.7.0) + openproject-octicons (19.8.0) os (1.1.4) - pry (0.14.1) + pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) pry-byebug (3.10.1) byebug (~> 11.0) pry (>= 0.13, < 0.15) + psych (5.1.1.1) + stringio public_suffix (5.0.3) puma (6.4.0) nio4r (~> 2.0) racc (1.7.1) - rack (2.2.8) + rack (3.0.8) rack-cors (2.0.1) rack (>= 2.0.0) + rack-session (2.0.0) + rack (>= 3.0.0) rack-test (2.1.0) rack (>= 1.3) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -247,19 +273,24 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.3) - actionpack (= 7.0.3) - activesupport (= 7.0.3) - method_source + railties (7.1.1) + actionpack (= 7.1.1) + activesupport (= 7.1.1) + irb + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) - rake (13.0.6) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) + rake (13.1.0) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) + rdoc (6.5.0) + psych (>= 4.0.0) recursive-open-struct (1.1.3) redcarpet (3.6.0) + reline (0.3.9) + io-console (~> 0.5) rest-client (2.1.0) http-accept (>= 1.7.0, < 2.0) http-cookie (>= 1.0.2, < 2.0) @@ -272,7 +303,7 @@ GEM faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - spring (4.1.1) + spring (4.1.2) spring-watcher-listen (2.1.0) listen (>= 2.7, < 4.0) spring (>= 4) @@ -286,6 +317,7 @@ GEM statsd-instrument (3.5.12) stimulus-rails (1.3.0) railties (>= 6.0.0) + stringio (3.0.8) thor (1.3.0) timeliness (0.3.10) turbo-rails (1.5.0) @@ -297,10 +329,11 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) - view_component (3.6.0) + view_component (3.7.0) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) method_source (~> 1.0) + webrick (1.8.1) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) @@ -317,10 +350,10 @@ PLATFORMS x86_64-linux DEPENDENCIES - actioncable (= 7.0.3) - actionview (= 7.0.3) - activemodel (= 7.0.3) - activesupport (= 7.0.3) + actioncable (= 7.1.1) + actionview (= 7.1.1) + activemodel (= 7.1.1) + activesupport (= 7.1.1) bootsnap (>= 1.4.2) foreman hotwire-livereload (~> 1.3) @@ -335,8 +368,8 @@ DEPENDENCIES pry-byebug puma (~> 6.4.0) rack-cors - railties (= 7.0.3) - rake (~> 13.0) + railties (= 7.1.1) + rake (~> 13.1) spring (~> 4.1) spring-watcher-listen (~> 2.1) sprockets diff --git a/demo/app/controllers/application_controller.rb b/demo/app/controllers/application_controller.rb index 7944f9f993..c9a15fa9ef 100644 --- a/demo/app/controllers/application_controller.rb +++ b/demo/app/controllers/application_controller.rb @@ -1,4 +1,6 @@ # frozen_string_literal: true +# :nodoc: class ApplicationController < ActionController::Base + protect_from_forgery end diff --git a/demo/app/controllers/auto_check_controller.rb b/demo/app/controllers/auto_check_controller.rb index 8473fbc266..b1794a5e8c 100644 --- a/demo/app/controllers/auto_check_controller.rb +++ b/demo/app/controllers/auto_check_controller.rb @@ -6,16 +6,32 @@ class AutoCheckController < ApplicationController skip_before_action :verify_authenticity_token def error - render status: :unprocessable_entity, plain: "Error! Error!" + render partial: "auto_check/error_message", + locals: { input_value: params[:value] }, + status: :unprocessable_entity, + formats: :html end def ok head :ok end + def accepted + render partial: "auto_check/warning_message", + locals: { input_value: params[:value] }, + status: :accepted, + formats: :html + end + def random - if rand > 0.5 + roll = rand + if roll < 0.33 head :ok + elsif roll < 0.66 + render partial: "auto_check/success_message", + locals: { input_value: params[:value] }, + status: :ok, + formats: :html else render status: :unprocessable_entity, plain: "Random error!" end diff --git a/demo/app/views/action_menu/deferred.html.erb b/demo/app/views/action_menu/deferred.html.erb index 7e4793c923..59e1129010 100644 --- a/demo/app/views/action_menu/deferred.html.erb +++ b/demo/app/views/action_menu/deferred.html.erb @@ -11,7 +11,6 @@ ) %> <% end %> - <%= render(Primer::Alpha::Dialog.new(id: "my-dialog", title: "Confirm deletion")) do |d| %> <%= render(Primer::Alpha::Dialog::Body.new()) do %> Are you sure you want to delete this? diff --git a/demo/app/views/action_menu/form_action.html.erb b/demo/app/views/action_menu/form_action.html.erb index 4004815c8b..9aac103c6b 100644 --- a/demo/app/views/action_menu/form_action.html.erb +++ b/demo/app/views/action_menu/form_action.html.erb @@ -1,2 +1,2 @@ -You selected <%= @value.inspect %>
+You selected <%= @value.inspect %>
Other params sent to server: <%= @other_params.inspect %> diff --git a/demo/app/views/auto_check/_error_message.html.erb b/demo/app/views/auto_check/_error_message.html.erb new file mode 100644 index 0000000000..1b00d16763 --- /dev/null +++ b/demo/app/views/auto_check/_error_message.html.erb @@ -0,0 +1 @@ +The name <%= input_value %> is already taken. diff --git a/demo/app/views/auto_check/_success_message.html.erb b/demo/app/views/auto_check/_success_message.html.erb new file mode 100644 index 0000000000..e17a782b98 --- /dev/null +++ b/demo/app/views/auto_check/_success_message.html.erb @@ -0,0 +1 @@ +The name <%= input_value %> is available. diff --git a/demo/app/views/auto_check/_warning_message.html.erb b/demo/app/views/auto_check/_warning_message.html.erb new file mode 100644 index 0000000000..849b4001d8 --- /dev/null +++ b/demo/app/views/auto_check/_warning_message.html.erb @@ -0,0 +1,4 @@ +The name <%= input_value %> is available. +
+ The name can only contain ASCII letters, digits, and the characters ., - and _. +
diff --git a/demo/app/views/auto_complete_test/index.html.erb b/demo/app/views/auto_complete_test/index.html.erb index 47f495278a..e73b152eb5 100644 --- a/demo/app/views/auto_complete_test/index.html.erb +++ b/demo/app/views/auto_complete_test/index.html.erb @@ -1,3 +1,4 @@ +<%# erblint:counter DeprecatedComponentsCounter 2 %> <% @fruit_list.each do |fruit| %> <% if params['version'] == "alpha" %> <%= render(Primer::Alpha::AutoComplete::Item.new(value: fruit)) { fruit } %> diff --git a/demo/app/views/layouts/component_preview.html.erb b/demo/app/views/layouts/component_preview.html.erb index 1848dbf824..4af00a0445 100644 --- a/demo/app/views/layouts/component_preview.html.erb +++ b/demo/app/views/layouts/component_preview.html.erb @@ -18,7 +18,7 @@
- <% if params.dig(:lookbook, :display, :theme) == "all" || params.dig(:theme) == "all" %> + <% if params.dig(:lookbook, :display, :theme) == "all" || params.dig(:theme) == "all" %>
<% color_themes.each do |theme| %>
> diff --git a/demo/app/views/layouts/mailer.html.erb b/demo/app/views/layouts/mailer.html.erb index cbd34d2e9d..3aac9002ed 100644 --- a/demo/app/views/layouts/mailer.html.erb +++ b/demo/app/views/layouts/mailer.html.erb @@ -1,7 +1,7 @@ - + diff --git a/demo/app/views/lookbook/previews/inputs/_medium_octicon.html.erb b/demo/app/views/lookbook/previews/inputs/_medium_octicon.html.erb new file mode 100644 index 0000000000..18c4110cd7 --- /dev/null +++ b/demo/app/views/lookbook/previews/inputs/_medium_octicon.html.erb @@ -0,0 +1,5 @@ +<% octicons = Octicons::OCTICON_SYMBOLS.keys.select do |key| %> + <% Octicons::OCTICON_SYMBOLS[key]["heights"].include?("24") %> +<% end %> + +<%= select_tag(name, options_for_select([:none, *octicons], value), **input_options, "x-model": "value") %> diff --git a/demo/config/application.rb b/demo/config/application.rb index b25c16a831..19deb4a955 100644 --- a/demo/config/application.rb +++ b/demo/config/application.rb @@ -19,7 +19,9 @@ module Demo # :nocov: class Application < Rails::Application - if Rails.version.to_i >= 7 + if Rails.version.to_i >= 7.1 + config.load_defaults 7.1 + elsif Rails.version.to_i >= 7 config.load_defaults 7.0 elsif Rails.version.to_i >= 6 config.load_defaults 6.0 diff --git a/demo/config/initializers/custom_inputs.rb b/demo/config/initializers/custom_inputs.rb index f20724c7c3..1639dd35f1 100644 --- a/demo/config/initializers/custom_inputs.rb +++ b/demo/config/initializers/custom_inputs.rb @@ -4,6 +4,7 @@ require "lookbook" Lookbook.define_param_input(:octicon, "lookbook/previews/inputs/octicon") + Lookbook.define_param_input(:medium_octicon, "lookbook/previews/inputs/medium_octicon") rescue LoadError # Happens during docs:build, which runs in the context of the # PVC gem's bundle (i.e. not the demo app's bundle). Lookbook diff --git a/demo/config/routes.rb b/demo/config/routes.rb index 67a30be698..ef55085212 100644 --- a/demo/config/routes.rb +++ b/demo/config/routes.rb @@ -21,6 +21,7 @@ resources :nav_list_items, only: [:index] resources :multi, only: [:create] + post "/example_check/accepted", to: "auto_check#accepted", as: :example_check_accepted post "/example_check/ok", to: "auto_check#ok", as: :example_check_ok post "/example_check/error", to: "auto_check#error", as: :example_check_error post "/example_check/random", to: "auto_check#random", as: :example_check_random diff --git a/demo/package-lock.json b/demo/package-lock.json index 51bf1a3b5e..d627f64a7a 100644 --- a/demo/package-lock.json +++ b/demo/package-lock.json @@ -9,9 +9,9 @@ "version": "0.1.0", "dependencies": { "@primer/css": "^21.0.9", - "@primer/primitives": "^7.15.0", - "@rails/actioncable": "^7.1.1", - "@rails/ujs": "^7.1.1", + "@primer/primitives": "^7.15.2", + "@rails/actioncable": "^7.1.2", + "@rails/ujs": "^7.1.2", "turbolinks": "^5.2.0", "webpack-dev-server": "^4.15.1" } @@ -163,9 +163,9 @@ } }, "node_modules/@primer/primitives": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.15.0.tgz", - "integrity": "sha512-ut010QMQT2YcQcn6gLHBC97YVN0ToR+7phxl+351hC94a7EgVR9GtwLOqopqU7el2w6iOrUndHBxDuUg1TBWhg==" + "version": "7.15.2", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.15.2.tgz", + "integrity": "sha512-084G46rIxTQSoWJBZT3WN3Pwuf9iFHIu7gbflKNHroXsVsxB7LzcRwPihjfSgaQijAmS5US/2fnSIQ2eT4lIgg==" }, "node_modules/@primer/view-components": { "version": "0.5.1", @@ -186,14 +186,14 @@ } }, "node_modules/@rails/actioncable": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.1.tgz", - "integrity": "sha512-ZRJ9rdwFQQjRbtgJnweY0/4UQyxN6ojEGRdib0JkjnuIciv+4ok/aAeZmBJqNreTMaBqS0eHyA9hCArwN58opg==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.2.tgz", + "integrity": "sha512-KGziTZfbmGm8/fHOpj515xupbYU+49hsp4etfdpoDJ/CEY2bRZR0cyFcJkpK6n0t/sxOHNWY6bo9vSgXZvT7Mg==" }, "node_modules/@rails/ujs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-7.1.1.tgz", - "integrity": "sha512-ywGwWNiqXN3Bb1BifVQTrkWEWcAGLHW3D0JNQMQeu57LsoluRzvnenNLPsmdoDPkrmSIASDXNsJiCIpUzFj8CA==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-7.1.2.tgz", + "integrity": "sha512-c5x02djEKEVVE4qfN4XgElJS4biM0xxtIVpcJ0ZHLK116U19rowTtmD0AJ/RCb3Xaewa4GPIWLlwgeC0dCQqzw==" }, "node_modules/@types/body-parser": { "version": "1.19.2", @@ -3200,9 +3200,9 @@ } }, "@primer/primitives": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.15.0.tgz", - "integrity": "sha512-ut010QMQT2YcQcn6gLHBC97YVN0ToR+7phxl+351hC94a7EgVR9GtwLOqopqU7el2w6iOrUndHBxDuUg1TBWhg==" + "version": "7.15.2", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.15.2.tgz", + "integrity": "sha512-084G46rIxTQSoWJBZT3WN3Pwuf9iFHIu7gbflKNHroXsVsxB7LzcRwPihjfSgaQijAmS5US/2fnSIQ2eT4lIgg==" }, "@primer/view-components": { "version": "0.5.1", @@ -3223,14 +3223,14 @@ } }, "@rails/actioncable": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.1.tgz", - "integrity": "sha512-ZRJ9rdwFQQjRbtgJnweY0/4UQyxN6ojEGRdib0JkjnuIciv+4ok/aAeZmBJqNreTMaBqS0eHyA9hCArwN58opg==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.2.tgz", + "integrity": "sha512-KGziTZfbmGm8/fHOpj515xupbYU+49hsp4etfdpoDJ/CEY2bRZR0cyFcJkpK6n0t/sxOHNWY6bo9vSgXZvT7Mg==" }, "@rails/ujs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-7.1.1.tgz", - "integrity": "sha512-ywGwWNiqXN3Bb1BifVQTrkWEWcAGLHW3D0JNQMQeu57LsoluRzvnenNLPsmdoDPkrmSIASDXNsJiCIpUzFj8CA==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@rails/ujs/-/ujs-7.1.2.tgz", + "integrity": "sha512-c5x02djEKEVVE4qfN4XgElJS4biM0xxtIVpcJ0ZHLK116U19rowTtmD0AJ/RCb3Xaewa4GPIWLlwgeC0dCQqzw==" }, "@types/body-parser": { "version": "1.19.2", diff --git a/demo/package.json b/demo/package.json index c3e8431781..cfe4f75871 100644 --- a/demo/package.json +++ b/demo/package.json @@ -4,9 +4,9 @@ "version": "0.1.0", "dependencies": { "@primer/css": "^21.0.9", - "@primer/primitives": "^7.15.0", - "@rails/actioncable": "^7.1.1", - "@rails/ujs": "^7.1.1", + "@primer/primitives": "^7.15.2", + "@rails/actioncable": "^7.1.2", + "@rails/ujs": "^7.1.2", "turbolinks": "^5.2.0", "webpack-dev-server": "^4.15.1" } diff --git a/lib/primer/classify.rb b/lib/primer/classify.rb index e35c17ac6e..bb8f4a1a1a 100644 --- a/lib/primer/classify.rb +++ b/lib/primer/classify.rb @@ -75,7 +75,6 @@ def call(args = {}) # are about 30% faster than Hash#dig. It also ensures validate is # only called when necessary, i.e. when the class can't be found # in the lookup table. - # rubocop:disable Style/RescueModifier found = (LOOKUP[key][item][brk] rescue nil) || validate(key, item, brk) # rubocop:enable Style/RescueModifier result << found if found @@ -93,7 +92,6 @@ def call(args = {}) end.join(" ") # This is much faster than Rails' presence method. - # rubocop:disable Rails/Blank { class: !classes || classes.empty? ? nil : classes, style: !style || style.empty? ? nil : style diff --git a/lib/primer/forms/action_menu.html.erb b/lib/primer/forms/action_menu.html.erb new file mode 100644 index 0000000000..9a3e530595 --- /dev/null +++ b/lib/primer/forms/action_menu.html.erb @@ -0,0 +1,6 @@ +<%= render(FormControl.new(input: @input)) do %> + <%= render(Primer::Alpha::ActionMenu.new(**@input.input_arguments)) do |menu| %> + <% menu.with_show_button { "Select..." } %> + <% @input.block.call(menu) if @input.block %> + <% end %> +<% end %> diff --git a/lib/primer/forms/action_menu.rb b/lib/primer/forms/action_menu.rb new file mode 100644 index 0000000000..a166143bbf --- /dev/null +++ b/lib/primer/forms/action_menu.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Primer + module Forms + # :nodoc: + class ActionMenu < BaseComponent + delegate :builder, :form, to: :@input + + def initialize(input:) + @input = input + + @input.input_arguments[:form_arguments] = { + name: @input.name, + builder: builder + } + + @input.input_arguments[:select_variant] ||= :single + + unless @input.input_arguments.include?(:dynamic_label) + @input.input_arguments[:dynamic_label] = true + end + end + end + end +end diff --git a/lib/primer/forms/acts_as_component.rb b/lib/primer/forms/acts_as_component.rb index 51aa369852..57fd6bcd96 100644 --- a/lib/primer/forms/acts_as_component.rb +++ b/lib/primer/forms/acts_as_component.rb @@ -36,7 +36,6 @@ def perform_render(&_block) def before_render; end # :nocov: - # rubocop:disable Naming/AccessorMethodName def set_original_view_context(view_context) @view_context = view_context end @@ -98,8 +97,6 @@ def compile_templates_in(template_glob) end def define_template_method(template_path, method_name) - # rubocop:disable Style/DocumentDynamicEvalDefinition - # rubocop:disable Style/EvalWithLocation class_eval <<-RUBY, template_path, 0 private def #{method_name} capture { #{compile_template(template_path)} } diff --git a/lib/primer/forms/base.rb b/lib/primer/forms/base.rb index 0409cd676f..d010c45f20 100644 --- a/lib/primer/forms/base.rb +++ b/lib/primer/forms/base.rb @@ -120,7 +120,6 @@ def render? private def form_object - # rubocop:disable Naming/MemoizedInstanceVariableName @__pf_form_object ||= Primer::Forms::Dsl::FormObject.new(builder: @builder, form: self).tap do |obj| # compile before adding inputs so caption templates are identified self.class.compile! diff --git a/lib/primer/forms/base_component.rb b/lib/primer/forms/base_component.rb index 43966330d2..428f4f72d4 100644 --- a/lib/primer/forms/base_component.rb +++ b/lib/primer/forms/base_component.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "primer/class_name_helper" - module Primer module Forms # :nodoc: diff --git a/lib/primer/forms/dsl/action_menu_input.rb b/lib/primer/forms/dsl/action_menu_input.rb new file mode 100644 index 0000000000..23e43f22e1 --- /dev/null +++ b/lib/primer/forms/dsl/action_menu_input.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Primer + module Forms + module Dsl + # :nodoc: + class ActionMenuInput < Input + attr_reader :name, :label, :block + + def initialize(name:, label:, **system_arguments, &block) + @name = name + @label = label + @block = block + + super(**system_arguments) + end + + def to_component + ActionMenu.new(input: self) + end + + # :nocov: + def type + :action_menu + end + # :nocov: + + # :nocov: + def focusable? + true + end + # :nocov: + end + end + end +end diff --git a/lib/primer/forms/dsl/input.rb b/lib/primer/forms/dsl/input.rb index c81d55cfa3..292d5a6f55 100644 --- a/lib/primer/forms/dsl/input.rb +++ b/lib/primer/forms/dsl/input.rb @@ -93,7 +93,6 @@ def initialize(builder:, form:, **system_arguments) # methods. These methods will use the passed name if provided instead # of generating a scoped one. # - # rubocop:disable Style/IfUnlessModifier unless @input_arguments.delete(:scope_name_to_model) { true } @input_arguments[:name] = name end @@ -297,6 +296,14 @@ def validation_message_arguments {} end + def validation_success_icon_target + "" + end + + def validation_error_icon_target + "" + end + private def input_data diff --git a/lib/primer/forms/dsl/input_methods.rb b/lib/primer/forms/dsl/input_methods.rb index 76ffb6ca87..d60ae4229f 100644 --- a/lib/primer/forms/dsl/input_methods.rb +++ b/lib/primer/forms/dsl/input_methods.rb @@ -90,6 +90,15 @@ def select_list(**options, &block) add_input SelectInput.new(builder: builder, form: form, **options, &block) end + # Adds an <%= link_to_component(Primer::Alpha::ActionMenu) %> to this form. + # + # @param options [Hash] The options accepted by the <%= link_to_component(Primer::Alpha::ActionMenu) %> component. + # @param block [Proc] The block passed to `#render` when the <%= link_to_component(Primer::Alpha::ActionMenu) %> is rendered. This block is passed an instance of <%= link_to_component(Primer::Alpha::ActionMenu) %>, which can be used to add items, dividers, etc. + def action_menu(**options, &block) + options = decorate_options(**options) + add_input ActionMenuInput.new(builder: builder, form: form, **options, &block) + end + # END select input methods # START button input methods diff --git a/lib/primer/forms/dsl/text_field_input.rb b/lib/primer/forms/dsl/text_field_input.rb index 4ebad39fd2..3b03eb4ca3 100644 --- a/lib/primer/forms/dsl/text_field_input.rb +++ b/lib/primer/forms/dsl/text_field_input.rb @@ -69,6 +69,14 @@ def validation_arguments end end + def validation_success_icon_target + "primer-text-field.validationSuccessIcon" + end + + def validation_error_icon_target + "primer-text-field.validationErrorIcon" + end + def validation_message_arguments if auto_check_src.present? super.merge( diff --git a/lib/primer/forms/primer_base_component_wrapper.rb b/lib/primer/forms/primer_base_component_wrapper.rb index ac41a3ddd9..1c1e411bc9 100644 --- a/lib/primer/forms/primer_base_component_wrapper.rb +++ b/lib/primer/forms/primer_base_component_wrapper.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "primer/class_name_helper" - module Primer module Forms # Wraps Primer::BaseComponent. diff --git a/lib/primer/forms/primer_text_field.ts b/lib/primer/forms/primer_text_field.ts index 34208b47b3..6a34dd3c30 100644 --- a/lib/primer/forms/primer_text_field.ts +++ b/lib/primer/forms/primer_text_field.ts @@ -8,6 +8,8 @@ class PrimerTextFieldElement extends HTMLElement { @target inputElement: HTMLInputElement @target validationElement: HTMLElement @target validationMessageElement: HTMLElement + @target validationSuccessIcon: HTMLElement + @target validationErrorIcon: HTMLElement #abortController: AbortController | null @@ -17,10 +19,15 @@ class PrimerTextFieldElement extends HTMLElement { this.inputElement.addEventListener( 'auto-check-success', - () => { - this.clearError() + async (event: any) => { + const message = await event.detail.response.text() + if (message && message.length > 0) { + this.setSuccess(message) + } else { + this.clearError() + } }, - {signal} + {signal}, ) this.inputElement.addEventListener( @@ -29,7 +36,7 @@ class PrimerTextFieldElement extends HTMLElement { const errorMessage = await event.detail.response.text() this.setError(errorMessage) }, - {signal} + {signal}, ) } @@ -45,12 +52,37 @@ class PrimerTextFieldElement extends HTMLElement { clearError(): void { this.inputElement.removeAttribute('invalid') this.validationElement.hidden = true - this.validationMessageElement.textContent = '' + this.validationMessageElement.replaceChildren() + } + + setValidationMessage(message: string): void { + const template = document.createElement('template') + // eslint-disable-next-line github/no-inner-html + template.innerHTML = message + const fragment = document.importNode(template.content, true) + this.validationMessageElement.replaceChildren(fragment) + } + + toggleValidationStyling(isError: boolean): void { + if (isError) { + this.validationElement.classList.remove('FormControl-inlineValidation--success') + } else { + this.validationElement.classList.add('FormControl-inlineValidation--success') + } + this.validationSuccessIcon.hidden = isError + this.validationErrorIcon.hidden = !isError + this.inputElement.setAttribute('invalid', isError ? 'true' : 'false') + } + + setSuccess(message: string): void { + this.toggleValidationStyling(false) + this.setValidationMessage(message) + this.validationElement.hidden = false } setError(message: string): void { - this.validationMessageElement.textContent = message + this.toggleValidationStyling(true) + this.setValidationMessage(message) this.validationElement.hidden = false - this.inputElement.setAttribute('invalid', 'true') } } diff --git a/lib/primer/forms/validation_message.html.erb b/lib/primer/forms/validation_message.html.erb index a96038f334..e3ee20a22a 100644 --- a/lib/primer/forms/validation_message.html.erb +++ b/lib/primer/forms/validation_message.html.erb @@ -1,4 +1,5 @@ <%= content_tag(:div, **@input.validation_arguments) do %> - <%= render(Primer::Beta::Octicon.new(icon: :"alert-fill", size: :xsmall, aria: { hidden: true })) %> + + <%= render(Primer::Beta::Octicon.new(icon: :"alert-fill", size: :xsmall, aria: { hidden: true })) %> <%= content_tag(:span, @input.invalid? ? @input.validation_messages.first : "", **@input.validation_message_arguments) %> <% end %> diff --git a/lib/primer/static/generate_info_arch.rb b/lib/primer/static/generate_info_arch.rb index ef1d295a6a..228db36305 100644 --- a/lib/primer/static/generate_info_arch.rb +++ b/lib/primer/static/generate_info_arch.rb @@ -33,7 +33,6 @@ def call { "name" => slot_method.name, - # rubocop:disable Style/IfUnlessModifier "description" => if slot_method.base_docstring.to_s.present? render_erb_ignoring_markdown_code_fences(slot_method.base_docstring) @@ -90,7 +89,7 @@ def call } end - statuses = Primer::Status::Dsl::STATUSES.keys.map(&:to_s).map(&:capitalize) + statuses = Primer::Status::Dsl::STATUSES.keys.map { |k| k.to_s.capitalize } Primer::Component.descendants.each do |component| fq_class = component.name.to_s.split("::") diff --git a/lib/primer/static/generate_previews.rb b/lib/primer/static/generate_previews.rb index 3a27f76b43..65d73fcb84 100644 --- a/lib/primer/static/generate_previews.rb +++ b/lib/primer/static/generate_previews.rb @@ -16,11 +16,9 @@ def call component = preview.components.first&.component_class - # rubocop:disable Style/IfUnlessModifier unless component raise "Could not determine which component `#{preview.preview_class}` is designed to preview. Please add a `@component` annotation." end - # rubocop:enable Style/IfUnlessModifier _, _, class_name = Primer::Yard::DocsHelper.status_module_and_short_name(component) diff --git a/lib/primer/view_components/engine.rb b/lib/primer/view_components/engine.rb index 3b55debc06..72c626f822 100644 --- a/lib/primer/view_components/engine.rb +++ b/lib/primer/view_components/engine.rb @@ -44,7 +44,11 @@ class Engine < ::Rails::Engine initializer "primer.forms.helpers" do ActiveSupport.on_load :action_controller_base do - require "primer/form_helper" + begin + require "primer/form_helper" + rescue LoadError + end + helper Primer::FormHelper # make primer_form_with available to view components also diff --git a/lib/primer/view_components/linters/base_linter.rb b/lib/primer/view_components/linters/base_linter.rb index e25eb5f3c1..135889ede4 100644 --- a/lib/primer/view_components/linters/base_linter.rb +++ b/lib/primer/view_components/linters/base_linter.rb @@ -24,6 +24,7 @@ class BaseLinter < Linter CLASSES = [].freeze REQUIRED_ARGUMENTS = [].freeze + # :nodoc: class ConfigSchema < LinterConfig property :override_ignores_if_correctable, accepts: [true, false], default: false, reader: :override_ignores_if_correctable? end @@ -154,13 +155,13 @@ def counter_correct?(processed_source) # Unless explicitly set, we don't want to mark correctable offenses if the counter is correct. if !@config.override_ignores_if_correctable? && expected_count == @total_offenses clear_offenses - return + return false end if @offenses_not_corrected.zero? # have to adjust to get `\n` so we delete the whole line add_offense(processed_source.to_source_range(comment_node.loc.adjust(end_pos: 1)), "Unused erblint:count comment for #{rule_name}", "") if comment_node - return + return false end first_offense = @offenses[0] diff --git a/lib/primer/view_components/linters/deprecated_components_counter.rb b/lib/primer/view_components/linters/deprecated_components_counter.rb index 4a409966e8..fdb9f911e6 100644 --- a/lib/primer/view_components/linters/deprecated_components_counter.rb +++ b/lib/primer/view_components/linters/deprecated_components_counter.rb @@ -63,7 +63,7 @@ def counter_correct?(processed_source) if offenses_count.zero? # have to adjust to get `\n` so we delete the whole line add_offense_with_severity(processed_source.to_source_range(comment_node.loc.adjust(end_pos: 1)), "Unused erblint:counter comment for #{rule_name}", "") if comment_node - return + return false end first_offense = @offenses[0] diff --git a/lib/primer/view_components/linters/disallow_action_list.rb b/lib/primer/view_components/linters/disallow_action_list.rb index 9e6a97980c..dc3706c586 100644 --- a/lib/primer/view_components/linters/disallow_action_list.rb +++ b/lib/primer/view_components/linters/disallow_action_list.rb @@ -10,6 +10,7 @@ class DisallowActionList < Linter include ERBLint::LinterRegistry include TagTreeHelpers + # :nodoc: class ConfigSchema < LinterConfig property :ignore_files, accepts: array_of?(String), default: -> { [] } end diff --git a/lib/primer/view_components/linters/severity_schema.rb b/lib/primer/view_components/linters/severity_schema.rb index ab72679a06..8d0a130188 100644 --- a/lib/primer/view_components/linters/severity_schema.rb +++ b/lib/primer/view_components/linters/severity_schema.rb @@ -4,6 +4,7 @@ module ERBLint module Linters + # :nodoc: class SeveritySchema < LinterConfig # SEVERITY_NAMES :info, :refactor, :convention, :warning, :error, :fatal # see https://github.com/Shopify/erb-lint/blob/main/lib/erb_lint/utils/severity_levels.rb diff --git a/lib/primer/view_components/version.rb b/lib/primer/view_components/version.rb index 023499198b..2dbad67f45 100644 --- a/lib/primer/view_components/version.rb +++ b/lib/primer/view_components/version.rb @@ -13,6 +13,5 @@ module VERSION end end -# rubocop:disable Rails/Output puts Primer::ViewComponents::VERSION::STRING if __FILE__ == $PROGRAM_NAME # rubocop:enable Rails/Output diff --git a/lib/primer/yard/lookbook_pages_backend.rb b/lib/primer/yard/lookbook_pages_backend.rb index cbc494c4f1..89b86b68f2 100644 --- a/lib/primer/yard/lookbook_pages_backend.rb +++ b/lib/primer/yard/lookbook_pages_backend.rb @@ -42,14 +42,12 @@ def generate ), __dir__ ) - # rubocop:disable Lint/UselessAssignment documented_methods = docs.non_slot_methods.select do |mtd| [component.name, "Primer::Forms::Dsl::InputMethods"].include?(mtd.parent.title) end preview_methods = PREVIEW_MAP[component] preview_erbs = preview_methods.map do |preview_method| - # rubocop:disable Style/IfUnlessModifier if Primer::FormsPreview.instance_methods.exclude?(preview_method) raise "Preview '#{preview_method}' does not exist in Primer::FormsPreview" end diff --git a/lib/rubocop/cop/primer/base_cop.rb b/lib/rubocop/cop/primer/base_cop.rb index ec624ad851..05ed86320c 100644 --- a/lib/rubocop/cop/primer/base_cop.rb +++ b/lib/rubocop/cop/primer/base_cop.rb @@ -12,7 +12,7 @@ class BaseCop < RuboCop::Cop::Cop # We only verify SystemArguments if it's a `.new` call on a component or # a ViewHeleper call. def valid_node?(node) - return if node.nil? + return false if node.nil? view_helpers.include?(node.method_name) || (node.method_name == :new && !node.receiver.nil? && ::Primer::ViewComponents::STATUSES.key?(node.receiver.const_name)) end diff --git a/lib/rubocop/cop/primer/deprecated_arguments.rb b/lib/rubocop/cop/primer/deprecated_arguments.rb index 3f9fc4ea7e..92caf85ee9 100644 --- a/lib/rubocop/cop/primer/deprecated_arguments.rb +++ b/lib/rubocop/cop/primer/deprecated_arguments.rb @@ -298,7 +298,6 @@ def autocorrect(node) def extract_kv_from(pair) key = pair.key.value - # rubocop:disable Lint/BooleanSymbol value = case pair.value.type when :sym, :str pair.value.value.to_sym @@ -307,7 +306,6 @@ def extract_kv_from(pair) else return [] end - # rubocop:enable Lint/BooleanSymbol [key, value] end diff --git a/lib/rubocop/cop/primer/deprecated_components.rb b/lib/rubocop/cop/primer/deprecated_components.rb index b96ef84745..ad4658ef3a 100644 --- a/lib/rubocop/cop/primer/deprecated_components.rb +++ b/lib/rubocop/cop/primer/deprecated_components.rb @@ -3,7 +3,7 @@ require "rubocop" require "json" require "parser/current" -require_relative "./../../../primer/view_components/linters/helpers/deprecated_components_helpers" +require_relative "../../../primer/view_components/linters/helpers/deprecated_components_helpers" module RuboCop module Cop diff --git a/lib/rubocop/cop/primer/deprecated_label_schemes.rb b/lib/rubocop/cop/primer/deprecated_label_schemes.rb index a967d12ab8..7899007aa3 100644 --- a/lib/rubocop/cop/primer/deprecated_label_schemes.rb +++ b/lib/rubocop/cop/primer/deprecated_label_schemes.rb @@ -58,7 +58,7 @@ def autocorrect(node) private def label_node?(node) - return if node.nil? + return false if node.nil? node.method_name == :new && !node.receiver.nil? && node.receiver.const_name == "Primer::Beta::Label" end diff --git a/lib/rubocop/cop/primer/deprecated_label_variants.rb b/lib/rubocop/cop/primer/deprecated_label_variants.rb index 52ddd2be25..c063c3d370 100644 --- a/lib/rubocop/cop/primer/deprecated_label_variants.rb +++ b/lib/rubocop/cop/primer/deprecated_label_variants.rb @@ -61,7 +61,7 @@ def autocorrect(node) private def label_node?(node) - return if node.nil? + return false if node.nil? node.method_name == :new && !node.receiver.nil? && node.receiver.const_name == "Primer::Beta::Label" end diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index 9bcf7be987..3b18bd919b 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -45,15 +45,15 @@ namespace :docs do task build_yard_registry: :init_pvc do require "primer/yard" - ::YARD::Rake::YardocTask.new do |task| + YARD::Rake::YardocTask.new do |task| task.options << "--no-output" end # Custom tags for yard - ::YARD::Tags::Library.define_tag("Accessibility", :accessibility) - ::YARD::Tags::Library.define_tag("Deprecation", :deprecation) - ::YARD::Tags::Library.define_tag("Parameter", :param, :with_types_name_and_default) - ::YARD::Tags::Library.define_tag("Form Usage", :form_usage) + YARD::Tags::Library.define_tag("Accessibility", :accessibility) + YARD::Tags::Library.define_tag("Deprecation", :deprecation) + YARD::Tags::Library.define_tag("Parameter", :param, :with_types_name_and_default) + YARD::Tags::Library.define_tag("Form Usage", :form_usage) puts "Building YARD documentation." Rake::Task["yard"].execute diff --git a/lib/tasks/utilities.rake b/lib/tasks/utilities.rake index cc7d743e81..2436e413a0 100644 --- a/lib/tasks/utilities.rake +++ b/lib/tasks/utilities.rake @@ -9,7 +9,6 @@ namespace :utilities do require "primer/classify/utilities" # Keys that are looked for to be included in the utilities.yml file - # rubocop:disable Lint/ConstantDefinitionInBlock SUPPORTED_KEYS = [ /^anim\b/, /^color-bg\b/, @@ -72,7 +71,7 @@ namespace :utilities do end # Change the rest from hyphens to underscores - classname.sub!(/-/, "_") + classname.sub!("-", "_") # convert padding/margin negative values ie n7 to -7 classname.sub!(/^n/, "-") if classname.match?(/^n[0-9]/) diff --git a/package-lock.json b/package-lock.json index 9bc3e933d6..ea5eed7326 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,24 +18,24 @@ "@github/include-fragment-element": "^6.1.1", "@github/relative-time-element": "^4.0.0", "@github/tab-container-element": "^3.1.2", - "@oddbird/popover-polyfill": "^0.3.0", + "@oddbird/popover-polyfill": "^0.3.2", "@primer/behaviors": "^1.3.4" }, "devDependencies": { "@changesets/changelog-github": "^0.4.6", "@changesets/cli": "^2.24.1", - "@github/axe-github": "^0.5.0", + "@github/axe-github": "^0.6.1", "@github/browserslist-config": "^1.0.0", "@github/markdownlint-github": "^0.2.2", - "@github/prettier-config": "0.0.4", + "@github/prettier-config": "0.0.6", "@playwright/test": "^1.35.1", - "@primer/css": "21.0.2", + "@primer/css": "21.0.9", "@primer/primitives": "^7.14.0", "@primer/stylelint-config": "^12.7.2", - "@rollup/plugin-node-resolve": "^13.3.0", + "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^8.3.3", - "@typescript-eslint/eslint-plugin": "^5.31.0", - "@typescript-eslint/parser": "^5.31.0", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "@typescript-eslint/parser": "^6.0.0", "axe-core": "^4.7.1", "chokidar-cli": "^3.0.0", "cssnano": "^6.0.1", @@ -49,17 +49,16 @@ "postcss": "^8.4.16", "postcss-cli": "^10.1.0", "postcss-custom-properties-fallback": "^1.0.2", - "postcss-import": "^14.1.0", + "postcss-import": "^15.1.0", "postcss-mixins": "^9.0.3", - "postcss-preset-env": "^7.8.0", - "prettier": "2.7.1", - "rollup": "^2.77.1", + "postcss-preset-env": "^9.3.0", + "prettier": "3.1.0", + "rollup": "^2.79.1", "rollup-plugin-terser": "^7.0.2", - "stylelint": "^14.13.0", - "stylelint-config-prettier": "^9.0.3", - "stylelint-config-standard": "^28.0.0", + "stylelint": "^15.11.0", + "stylelint-config-standard": "^34.0.0", "tslib": "^2.4.0", - "typescript": "^4.7.4" + "typescript": "^5.2.2" } }, "node_modules/@babel/code-frame": { @@ -224,6 +223,21 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@changesets/apply-release-plan/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -992,6 +1006,21 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@changesets/write/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -1001,284 +1030,901 @@ "node": ">= 4.0.0" } }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz", + "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==", "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "node_modules/@csstools/color-helpers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-3.0.2.tgz", + "integrity": "sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q==", "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "node": "^14 || ^16 || >=18" } }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "node_modules/@csstools/css-calc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.4.tgz", + "integrity": "sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "node_modules/@csstools/css-color-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz", + "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "@csstools/color-helpers": "^3.0.2", + "@csstools/css-calc": "^1.1.4" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", + "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", + "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "node": "^14 || ^16 || >=18" } }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "node_modules/@csstools/postcss-cascade-layers": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.1.tgz", + "integrity": "sha512-UYFuFL9GgVnftg9v7tBvVEBRLaBeAD66euD+yYy5fYCUld9ZIWTJNCE30hm6STMEdt6FL5xzeVw1lAZ1tpvUEg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "node_modules/@csstools/postcss-color-function": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz", + "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "node_modules/@csstools/postcss-color-mix-function": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz", + "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-stepped-value-functions": { + "node_modules/@csstools/postcss-exponential-functions": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz", + "integrity": "sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz", + "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz", + "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz", + "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz", + "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz", + "integrity": "sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz", + "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz", + "integrity": "sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.0.tgz", + "integrity": "sha512-cIrZ8f7bGGvr+W53nEuMspcwaeaI2YTmz6LZ4yiAO5z14/PQgOOv+Pn+qjvPOPoadeY2BmpaoTzZKvdAQuM17w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.0.tgz", + "integrity": "sha512-e89S2LWjnxf0SB2wNUAbqDyFb/Fow/tlOe1XqOLbNx4rf3LrQokM9qldVx7sarnddml3ORE5LDUmlKpPOOeJTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz", + "integrity": "sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz", + "integrity": "sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-tokenizer": "^2.2.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz", + "integrity": "sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz", + "integrity": "sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz", + "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz", + "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz", + "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" + }, + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz", + "integrity": "sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz", + "integrity": "sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { + "@csstools/color-helpers": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || >=16" + "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz", + "integrity": "sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, "peerDependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.13" } }, "node_modules/@eslint-community/eslint-utils": { @@ -1346,17 +1992,17 @@ } }, "node_modules/@github/auto-complete-element": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.5.1.tgz", - "integrity": "sha512-7/g6Nz6Zz4/k0m/L0n+OEO29WZcXgXwLJn7Ql02UbIMR2ClFEZIwIvvzb+3fEECOyLpFrZC/JH7Svz9RYPc+wA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.6.0.tgz", + "integrity": "sha512-u8fG8nCosSFv2wlKMsGga+FaFu/jkexZVFIDxLiCyLVTB8zRRu/RJyufzNnmbOZHYBezCMNBgJ0quuEBoyRh9Q==", "dependencies": { "@github/combobox-nav": "^2.1.7" } }, "node_modules/@github/axe-github": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@github/axe-github/-/axe-github-0.5.0.tgz", - "integrity": "sha512-i1QpK8hs2asSFCLn0LL6VEYIGJ+qnvho8YyqM9eQcI7K5tcser8ugLZkLTgktteWNZqE9g9OSlC0VFPEWo+RsQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@github/axe-github/-/axe-github-0.6.1.tgz", + "integrity": "sha512-NH+69lWLZljzb5/GrHDW3IF809ss5dbqj/wcUe5SN++73IVIMfDsbwjblqoRoq7/755lhEgd7TYU1dRET7jBIA==", "dev": true }, "node_modules/@github/browserslist-config": { @@ -1410,9 +2056,9 @@ "integrity": "sha512-iEeR2OdVCPkdIPUszL8gJnKNu4MR8ANh7y0u/LPyaatYezgaWxUZEzhFntloqQq+HE6MZkFy+cl+xzCNuljOdw==" }, "node_modules/@github/prettier-config": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@github/prettier-config/-/prettier-config-0.0.4.tgz", - "integrity": "sha512-ZOJ+U771Mw68qp2GPbcqPt2Xg0LEl0YwiIFHXwVLAFm2TgDnsgcCHhXO8PIxOWPqSFO4S7xIMD9CBobfaWGASA==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@github/prettier-config/-/prettier-config-0.0.6.tgz", + "integrity": "sha512-Sdb089z+QbGnFF2NivbDeaJ62ooPlD31wE6Fkb/ESjAOXSjNJo+gjqzYYhlM7G3ERJmKFZRUJYMlsqB7Tym8lQ==", "dev": true }, "node_modules/@github/relative-time-element": { @@ -1704,98 +2350,256 @@ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oddbird/popover-polyfill": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.3.2.tgz", + "integrity": "sha512-H0Q8JcFkXrOt2FrP0cUz2qomU5O+Dfc51UYLk5GtDWmVhdmvtV2FhgaCUh3TA6U5dogMZOFAf3QbwiGXhe9LXQ==" + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@playwright/test": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz", + "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==", + "dev": true, + "dependencies": { + "playwright": "1.39.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@primer/behaviors": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.3.6.tgz", + "integrity": "sha512-gzryOl22EOzJSPT8pYbHZYHgcKEOw9KxG0L5XRL+cMaS767YGqZGoeF/YEaeJ3dEWMzqz93FPGSem3eo5PmPBA==" + }, + "node_modules/@primer/css": { + "version": "21.0.9", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.0.9.tgz", + "integrity": "sha512-kk0TfLqtGwGYJ/qXGLMXDIL4d3qWPjlEB12Hvk08krulbsQRWEsnXjejBIvJG69GyOOuYxXNoHvP2NGenxQ8Jw==", + "dev": true, + "dependencies": { + "@primer/primitives": "^7.12.0", + "@primer/view-components": "^0.5.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@primer/primitives": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.14.0.tgz", + "integrity": "sha512-M5to3Csxr+t1EXfRjQOe5MuMjCTiziMC+O3gCp+K8apbL07ZvqcIDHdYvcNvFCP4NX1Uj6caPE8VdguqBTSgSg==", + "dev": true + }, + "node_modules/@primer/stylelint-config": { + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/@primer/stylelint-config/-/stylelint-config-12.7.2.tgz", + "integrity": "sha512-oaCCGv2w1GSxNBm9clGDVyr5OPVH4SKzVEKkQTyUbwoeTFbaWbPCWnA6rMZETg4/lDIRoht5oeKXVq3hje6K6A==", + "dev": true, + "dependencies": { + "anymatch": "^3.1.1", + "globby": "^11.0.1", + "postcss-scss": "^4.0.2", + "postcss-value-parser": "^4.0.2", + "string.prototype.matchall": "^4.0.2", + "stylelint": "^14.8.0", + "stylelint-config-standard": "25.0.0", + "stylelint-no-unsupported-browser-features": "^5.0.1", + "stylelint-order": "^5.0.0", + "stylelint-scss": "^4.0.0", + "tap-map": "^1.0.0" + } + }, + "node_modules/@primer/stylelint-config/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@primer/stylelint-config/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/@primer/stylelint-config/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@primer/stylelint-config/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/@oddbird/popover-polyfill": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.3.0.tgz", - "integrity": "sha512-XtA1cI3fyiPuur7dSpVIZzYJhrNq7YywOf41eG0gHkzteE69ez3gKtfIGu44VmZb73nfv2QsTprJqrRjN+K8nA==" + "node_modules/@primer/stylelint-config/node_modules/known-css-properties": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "dev": true }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "node_modules/@primer/stylelint-config/node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@playwright/test": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.35.1.tgz", - "integrity": "sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==", + "node_modules/@primer/stylelint-config/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "@types/node": "*", - "playwright-core": "1.35.1" - }, - "bin": { - "playwright": "cli.js" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=10" } }, - "node_modules/@primer/behaviors": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@primer/behaviors/-/behaviors-1.3.6.tgz", - "integrity": "sha512-gzryOl22EOzJSPT8pYbHZYHgcKEOw9KxG0L5XRL+cMaS767YGqZGoeF/YEaeJ3dEWMzqz93FPGSem3eo5PmPBA==" - }, - "node_modules/@primer/css": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.0.2.tgz", - "integrity": "sha512-rIwqua1LgjMTMFx9whghPEHF1B4RdVA6meMu5ByeqLYWmWrCStwk2jZvk9yNSn2MnkJ7zuuo3jTlIX1SVmjF7Q==", + "node_modules/@primer/stylelint-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "@primer/primitives": "^7.11.10", - "@primer/view-components": "^0.1.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" } }, - "node_modules/@primer/primitives": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.14.0.tgz", - "integrity": "sha512-M5to3Csxr+t1EXfRjQOe5MuMjCTiziMC+O3gCp+K8apbL07ZvqcIDHdYvcNvFCP4NX1Uj6caPE8VdguqBTSgSg==", - "dev": true - }, - "node_modules/@primer/stylelint-config": { - "version": "12.7.2", - "resolved": "https://registry.npmjs.org/@primer/stylelint-config/-/stylelint-config-12.7.2.tgz", - "integrity": "sha512-oaCCGv2w1GSxNBm9clGDVyr5OPVH4SKzVEKkQTyUbwoeTFbaWbPCWnA6rMZETg4/lDIRoht5oeKXVq3hje6K6A==", + "node_modules/@primer/stylelint-config/node_modules/stylelint": { + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", "dev": true, "dependencies": { - "anymatch": "^3.1.1", - "globby": "^11.0.1", - "postcss-scss": "^4.0.2", - "postcss-value-parser": "^4.0.2", - "string.prototype.matchall": "^4.0.2", - "stylelint": "^14.8.0", - "stylelint-config-standard": "25.0.0", - "stylelint-no-unsupported-browser-features": "^5.0.1", - "stylelint-order": "^5.0.0", - "stylelint-scss": "^4.0.0", - "tap-map": "^1.0.0" + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.1", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.26.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.19", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.3.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" } }, "node_modules/@primer/stylelint-config/node_modules/stylelint-config-recommended": { @@ -1819,10 +2623,61 @@ "stylelint": "^14.4.0" } }, + "node_modules/@primer/stylelint-config/node_modules/stylelint-order": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", + "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "dev": true, + "dependencies": { + "postcss": "^8.3.11", + "postcss-sorting": "^7.0.1" + }, + "peerDependencies": { + "stylelint": "^14.0.0" + } + }, + "node_modules/@primer/stylelint-config/node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@primer/stylelint-config/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@primer/stylelint-config/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/@primer/view-components": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.1.9.tgz", - "integrity": "sha512-LtqJBkTMS+odYXqKhOZxBvyAAlXTA+C6o3eXDQN8Nwmja48SKAlFrwb+HpXLvgpbbDg1eY2LKmypokv44dl0Uw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.5.1.tgz", + "integrity": "sha512-TI51R4rVobwK6sWRhu7HRHC6yxud2I9P1sYN6o/fHhIq7QU31mJyv1PtD8nfhmOqN/SsRC6q3pnCbh5Qt1wD/g==", "dev": true, "dependencies": { "@github/auto-check-element": "^5.2.0", @@ -1832,39 +2687,77 @@ "@github/details-menu-element": "^1.0.12", "@github/image-crop-element": "^5.0.0", "@github/include-fragment-element": "^6.1.1", - "@github/mini-throttle": "^2.1.0", "@github/relative-time-element": "^4.0.0", "@github/tab-container-element": "^3.1.2", - "@oddbird/popover-polyfill": "^0.1.1", + "@oddbird/popover-polyfill": "^0.2.1", "@primer/behaviors": "^1.3.4" } }, "node_modules/@primer/view-components/node_modules/@oddbird/popover-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.1.1.tgz", - "integrity": "sha512-X9gxiwKtN1ZumOoe9KRLpe37nshLtwHm/IJflIxgjanXz/FqKb0DQ7BlWu+iqUn/O0/jWYgkKnTLtsC9JlgwQg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.2.3.tgz", + "integrity": "sha512-XDK+V/gUeE4NEsWp79eVzhlK3wuVcRDJuaas63qo0IJLJpyOLHqycJLFYvuq8kebgT1nl87P3sbSb5ZN6Vyf5g==", "dev": true }, "node_modules/@rollup/plugin-node-resolve": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", - "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", - "resolve": "^1.19.0" + "resolve": "^1.22.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", + "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.42.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/@rollup/plugin-typescript": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz", @@ -1930,9 +2823,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/json5": { @@ -1966,19 +2859,16 @@ "dev": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "node_modules/@types/semver": { "version": "7.5.0", @@ -1987,32 +2877,33 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", - "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", + "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/type-utils": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2021,25 +2912,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", - "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", + "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2048,16 +2940,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", - "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2065,25 +2957,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", - "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2092,12 +2984,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", - "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2105,21 +2997,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", - "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2132,42 +3024,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", - "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", - "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.11.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2383,9 +3274,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ { @@ -2395,12 +3286,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -2428,9 +3323,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", "dev": true, "engines": { "node": ">=4" @@ -2537,9 +3432,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -2556,10 +3451,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -2671,9 +3566,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001506", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz", - "integrity": "sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==", + "version": "1.0.30001559", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", + "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", "dev": true, "funding": [ { @@ -2888,19 +3783,29 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-spawn": { @@ -2918,18 +3823,25 @@ } }, "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz", + "integrity": "sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.4" @@ -2948,42 +3860,58 @@ } }, "node_modules/css-functions-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", - "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", "dev": true, "engines": { - "node": ">=12.22" + "node": ">=12 || >=16" } }, "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz", + "integrity": "sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.4" } }, "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz", + "integrity": "sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g==", "dev": true, - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.4" @@ -3078,9 +4006,9 @@ } }, "node_modules/cssdb": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.6.0.tgz", - "integrity": "sha512-Nna7rph8V0jC6+JBY4Vk4ndErUmfJfV6NJCaZdurL0omggabiy+QB2HCQtu5c/ACLZ0I7REv7A4QyPIoYzZx0w==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.0.tgz", + "integrity": "sha512-WPMT9seTQq6fPAa1yN4zjgZZeoTriSN2LqW9C+otjar12DQIWA4LuSfFrvFJiKp4oD0xIk1vumDLw8K9ur4NBw==", "dev": true, "funding": [ { @@ -3623,9 +4551,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.437", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.437.tgz", - "integrity": "sha512-ZFekRuBOHUXp21wrR5lshT6pZa/KmjkhKBAtmZz4NN5sCWlHOk3kdhiwFINrDBsRLX6FjyBAb1TRN+KBeNlyzQ==", + "version": "1.4.572", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz", + "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==", "dev": true }, "node_modules/emoji-regex": { @@ -3892,286 +4820,97 @@ }, "node_modules/eslint-plugin-custom-elements": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-custom-elements/-/eslint-plugin-custom-elements-0.0.6.tgz", - "integrity": "sha512-JwPHRSOUe7y8dpC5hg90ySHejsfnQ3yqprv0902VMZ3j8FRZDudj+yzxqqkRDhZTNFUxP3r+0TWuveZhLgJONg==", - "dev": true, - "peerDependencies": { - "eslint": ">=4.19.0" - } - }, - "node_modules/eslint-plugin-escompat": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", - "integrity": "sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.0" - }, - "peerDependencies": { - "eslint": ">=5.14.1" - } - }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, - "engines": { - "node": ">=6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-filenames": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz", - "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==", - "dev": true, - "dependencies": { - "lodash.camelcase": "4.3.0", - "lodash.kebabcase": "4.1.1", - "lodash.snakecase": "4.1.1", - "lodash.upperfirst": "4.3.1" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/eslint-plugin-github": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.10.1.tgz", - "integrity": "sha512-1AqQBockOM+m0ZUpwfjWtX0lWdX5cRi/hwJnSNvXoOmz/Hh+ULH6QFz6ENWueTWjoWpgPv0af3bj+snps6o4og==", - "dev": true, - "dependencies": { - "@github/browserslist-config": "^1.0.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "aria-query": "^5.3.0", - "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-escompat": "^3.3.3", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-no-only-tests": "^3.0.0", - "eslint-plugin-prettier": "^5.0.0", - "eslint-rule-documentation": ">=1.0.0", - "jsx-ast-utils": "^3.3.2", - "prettier": "^3.0.0", - "svg-element-attributes": "^1.3.1" - }, - "bin": { - "eslint-ignore-errors": "bin/eslint-ignore-errors.js" - }, - "peerDependencies": { - "eslint": "^8.0.1" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "resolved": "https://registry.npmjs.org/eslint-plugin-custom-elements/-/eslint-plugin-custom-elements-0.0.6.tgz", + "integrity": "sha512-JwPHRSOUe7y8dpC5hg90ySHejsfnQ3yqprv0902VMZ3j8FRZDudj+yzxqqkRDhZTNFUxP3r+0TWuveZhLgJONg==", + "dev": true, + "peerDependencies": { + "eslint": ">=4.19.0" } }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "node_modules/eslint-plugin-escompat": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", + "integrity": "sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg==", "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "dependencies": { + "browserslist": "^4.21.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "eslint": ">=5.14.1" } }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=6.5.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/mysticatea" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "semver": "^7.5.4" - }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=0.8.0" + } + }, + "node_modules/eslint-plugin-filenames": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz", + "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==", + "dev": true, + "dependencies": { + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.upperfirst": "4.3.1" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "*" } }, - "node_modules/eslint-plugin-github/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "node_modules/eslint-plugin-github": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.10.1.tgz", + "integrity": "sha512-1AqQBockOM+m0ZUpwfjWtX0lWdX5cRi/hwJnSNvXoOmz/Hh+ULH6QFz6ENWueTWjoWpgPv0af3bj+snps6o4og==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "eslint-visitor-keys": "^3.4.1" + "@github/browserslist-config": "^1.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "aria-query": "^5.3.0", + "eslint-config-prettier": ">=8.0.0", + "eslint-plugin-escompat": "^3.3.3", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-i18n-text": "^1.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-no-only-tests": "^3.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-rule-documentation": ">=1.0.0", + "jsx-ast-utils": "^3.3.2", + "prettier": "^3.0.0", + "svg-element-attributes": "^1.3.1" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "bin": { + "eslint-ignore-errors": "bin/eslint-ignore-errors.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "eslint": "^8.0.1" } }, "node_modules/eslint-plugin-github/node_modules/eslint-plugin-prettier": { @@ -4203,21 +4942,6 @@ } } }, - "node_modules/eslint-plugin-github/node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/eslint-plugin-i18n-text": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz", @@ -4364,19 +5088,6 @@ "node": ">=4.0.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", @@ -4498,15 +5209,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", @@ -4683,12 +5385,13 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -4696,9 +5399,9 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/for-each": { @@ -4711,16 +5414,16 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fs-extra": { @@ -4743,6 +5446,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -5703,6 +6420,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5758,6 +6481,15 @@ "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -5777,9 +6509,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", - "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "node_modules/language-subtag-registry": { @@ -6514,12 +7246,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/node-fetch": { "version": "2.6.11", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", @@ -6541,9 +7267,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-package-data": { @@ -7006,25 +7732,27 @@ } }, "node_modules/playwright": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.1.tgz", - "integrity": "sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", "dev": true, - "hasInstallScript": true, "dependencies": { - "playwright-core": "1.35.1" + "playwright-core": "1.39.0" }, "bin": { "playwright": "cli.js" }, "engines": { "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.35.1.tgz", - "integrity": "sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -7062,22 +7790,22 @@ } }, "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz", + "integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-calc": { @@ -7251,34 +7979,41 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz", + "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz", + "integrity": "sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", @@ -7289,22 +8024,28 @@ } }, "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz", + "integrity": "sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-colormin": { @@ -7342,41 +8083,59 @@ } }, "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", + "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-value-parser": "^4.2.0" + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.4" } }, "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz", + "integrity": "sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-custom-properties-fallback": { @@ -7393,41 +8152,56 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz", + "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.4" + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.4" } }, "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz", + "integrity": "sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-discard-comments": { @@ -7479,65 +8253,76 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz", + "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.4" } }, "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz", + "integrity": "sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.4" } }, "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz", + "integrity": "sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.4" @@ -7553,44 +8338,56 @@ } }, "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz", + "integrity": "sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz", + "integrity": "sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", @@ -7598,21 +8395,12 @@ "resolve": "^1.1.7" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "postcss": "^8.0.0" } }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, "node_modules/postcss-js": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", @@ -7633,23 +8421,31 @@ } }, "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz", + "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-load-config": { @@ -7691,27 +8487,28 @@ } }, "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.0.tgz", + "integrity": "sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw==", "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "postcss-value-parser": "^4.2.0" }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, "engines": { - "node": ">=10.0.0" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.4" } }, "node_modules/postcss-media-query-parser": { @@ -7841,23 +8638,29 @@ } }, "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.1.tgz", + "integrity": "sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-normalize-charset": { @@ -7994,9 +8797,9 @@ } }, "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz", + "integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==", "dev": true, "funding": [ { @@ -8009,7 +8812,7 @@ } ], "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.2" @@ -8032,22 +8835,28 @@ } }, "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz", + "integrity": "sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-page-break": { @@ -8060,108 +8869,137 @@ } }, "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.0.tgz", + "integrity": "sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz", + "integrity": "sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/postcss-cascade-layers": "^4.0.1", + "@csstools/postcss-color-function": "^3.0.7", + "@csstools/postcss-color-mix-function": "^2.0.7", + "@csstools/postcss-exponential-functions": "^1.0.1", + "@csstools/postcss-font-format-keywords": "^3.0.0", + "@csstools/postcss-gamut-mapping": "^1.0.0", + "@csstools/postcss-gradients-interpolation-method": "^4.0.7", + "@csstools/postcss-hwb-function": "^3.0.6", + "@csstools/postcss-ic-unit": "^3.0.2", + "@csstools/postcss-initial": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^4.0.3", + "@csstools/postcss-logical-float-and-clear": "^2.0.0", + "@csstools/postcss-logical-overflow": "^1.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^1.0.0", + "@csstools/postcss-logical-resize": "^2.0.0", + "@csstools/postcss-logical-viewport-units": "^2.0.3", + "@csstools/postcss-media-minmax": "^1.1.0", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3", + "@csstools/postcss-nested-calc": "^3.0.0", + "@csstools/postcss-normalize-display-values": "^3.0.1", + "@csstools/postcss-oklab-function": "^3.0.7", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", + "@csstools/postcss-relative-color-syntax": "^2.0.7", + "@csstools/postcss-scope-pseudo-class": "^3.0.0", + "@csstools/postcss-stepped-value-functions": "^3.0.2", + "@csstools/postcss-text-decoration-shorthand": "^3.0.3", + "@csstools/postcss-trigonometric-functions": "^3.0.2", + "@csstools/postcss-unset-value": "^3.0.0", + "autoprefixer": "^10.4.16", + "browserslist": "^4.22.1", + "css-blank-pseudo": "^6.0.0", + "css-has-pseudo": "^6.0.0", + "css-prefers-color-scheme": "^9.0.0", + "cssdb": "^7.9.0", + "postcss-attribute-case-insensitive": "^6.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", + "postcss-color-functional-notation": "^6.0.2", + "postcss-color-hex-alpha": "^9.0.2", + "postcss-color-rebeccapurple": "^9.0.1", + "postcss-custom-media": "^10.0.2", + "postcss-custom-properties": "^13.3.2", + "postcss-custom-selectors": "^7.1.6", + "postcss-dir-pseudo-class": "^8.0.0", + "postcss-double-position-gradients": "^5.0.2", + "postcss-focus-visible": "^9.0.0", + "postcss-focus-within": "^8.0.0", "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", + "postcss-gap-properties": "^5.0.0", + "postcss-image-set-function": "^6.0.1", + "postcss-lab-function": "^6.0.7", + "postcss-logical": "^7.0.0", + "postcss-nesting": "^12.0.1", + "postcss-opacity-percentage": "^2.0.0", + "postcss-overflow-shorthand": "^5.0.0", "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-place": "^9.0.0", + "postcss-pseudo-class-any-link": "^9.0.0", "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", + "postcss-selector-not": "^7.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz", + "integrity": "sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" + "postcss-selector-parser": "^6.0.13" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-reduce-initial": { @@ -8269,22 +9107,22 @@ } }, "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz", + "integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, "node_modules/postcss-selector-parser": { @@ -8422,15 +9260,15 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -9599,96 +10437,88 @@ } }, "node_modules/stylelint": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", - "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "dependencies": { - "@csstools/selector-specificity": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^7.1.0", - "css-functions-list": "^3.1.0", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.1", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^7.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.1", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.26.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", + "meow": "^10.1.5", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.19", - "postcss-media-query-parser": "^0.2.3", + "postcss": "^8.4.28", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.3.0", + "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", "table": "^6.8.1", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.2" + "write-file-atomic": "^5.0.1" }, "bin": { - "stylelint": "bin/stylelint.js" + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/stylelint" } }, - "node_modules/stylelint-config-prettier": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz", - "integrity": "sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==", + "node_modules/stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", "dev": true, - "bin": { - "stylelint-config-prettier": "bin/check.js", - "stylelint-config-prettier-check": "bin/check.js" - }, "engines": { - "node": ">= 12" + "node": "^14.13.1 || >=16.0.0" }, "peerDependencies": { - "stylelint": ">= 11.x < 15" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", - "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", - "dev": true, - "peerDependencies": { - "stylelint": "^14.10.0" + "stylelint": "^15.10.0" } }, "node_modules/stylelint-config-standard": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-28.0.0.tgz", - "integrity": "sha512-q/StuowDdDmFCravzGHAwgS9pjX0bdOQUEBBDIkIWsQuYGgYz/xsO8CM6eepmIQ1fc5bKdDVimlJZ6MoOUcJ5Q==", + "version": "34.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", + "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", "dev": true, "dependencies": { - "stylelint-config-recommended": "^9.0.0" + "stylelint-config-recommended": "^13.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" }, "peerDependencies": { - "stylelint": "^14.11.0" + "stylelint": "^15.10.0" } }, "node_modules/stylelint-no-unsupported-browser-features": { @@ -9708,19 +10538,6 @@ "stylelint": ">=13.0.0" } }, - "node_modules/stylelint-order": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", - "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", - "dev": true, - "dependencies": { - "postcss": "^8.3.11", - "postcss-sorting": "^7.0.1" - }, - "peerDependencies": { - "stylelint": "^14.0.0" - } - }, "node_modules/stylelint-scss": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", @@ -9742,6 +10559,60 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, + "node_modules/stylelint/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", + "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "dev": true, + "dependencies": { + "flat-cache": "^3.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/stylelint/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -9754,27 +10625,39 @@ "node": ">=10" } }, + "node_modules/stylelint/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stylelint/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9795,6 +10678,69 @@ "node": ">=10" } }, + "node_modules/stylelint/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -9804,10 +10750,37 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stylelint/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { "node": ">=10" @@ -9816,6 +10789,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylelint/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/sugarss": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", @@ -9845,16 +10827,16 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.18" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -10130,27 +11112,6 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/tty-table": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.1.tgz", @@ -10278,16 +11239,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uc.micro": { @@ -10330,9 +11291,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -10375,9 +11336,9 @@ "dev": true }, "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, "node_modules/validate-npm-package-license": { @@ -10598,16 +11559,28 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/xtend": { @@ -10984,6 +11957,12 @@ "graceful-fs": "^4.1.6" } }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -11651,6 +12630,12 @@ "graceful-fs": "^4.1.6" } }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -11659,139 +12644,336 @@ } } }, + "@csstools/cascade-layer-name-parser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz", + "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==", + "dev": true, + "requires": {} + }, + "@csstools/color-helpers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-3.0.2.tgz", + "integrity": "sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q==", + "dev": true + }, + "@csstools/css-calc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.4.tgz", + "integrity": "sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==", + "dev": true, + "requires": {} + }, + "@csstools/css-color-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz", + "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==", + "dev": true, + "requires": { + "@csstools/color-helpers": "^3.0.2", + "@csstools/css-calc": "^1.1.4" + } + }, + "@csstools/css-parser-algorithms": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", + "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", + "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "dev": true + }, + "@csstools/media-query-list-parser": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "dev": true, + "requires": {} + }, "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.1.tgz", + "integrity": "sha512-UYFuFL9GgVnftg9v7tBvVEBRLaBeAD66euD+yYy5fYCUld9ZIWTJNCE30hm6STMEdt6FL5xzeVw1lAZ1tpvUEg==", "dev": true, "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" } }, "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz", + "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, - "@csstools/postcss-font-format-keywords": { + "@csstools/postcss-color-mix-function": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz", + "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==", + "dev": true, + "requires": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" + } + }, + "@csstools/postcss-exponential-functions": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", + "dev": true, + "requires": { + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "@csstools/postcss-font-format-keywords": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz", + "integrity": "sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, + "@csstools/postcss-gamut-mapping": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz", + "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==", + "dev": true, + "requires": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "@csstools/postcss-gradients-interpolation-method": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz", + "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==", + "dev": true, + "requires": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" + } + }, "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz", + "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz", + "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, + "@csstools/postcss-initial": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz", + "integrity": "sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==", + "dev": true, + "requires": {} + }, "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz", + "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==", "dev": true, "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" } }, - "@csstools/postcss-nested-calc": { + "@csstools/postcss-logical-float-and-clear": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz", + "integrity": "sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg==", + "dev": true, + "requires": {} + }, + "@csstools/postcss-logical-overflow": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.0.tgz", + "integrity": "sha512-cIrZ8f7bGGvr+W53nEuMspcwaeaI2YTmz6LZ4yiAO5z14/PQgOOv+Pn+qjvPOPoadeY2BmpaoTzZKvdAQuM17w==", + "dev": true, + "requires": {} + }, + "@csstools/postcss-logical-overscroll-behavior": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.0.tgz", + "integrity": "sha512-e89S2LWjnxf0SB2wNUAbqDyFb/Fow/tlOe1XqOLbNx4rf3LrQokM9qldVx7sarnddml3ORE5LDUmlKpPOOeJTA==", + "dev": true, + "requires": {} + }, + "@csstools/postcss-logical-resize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz", + "integrity": "sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-logical-viewport-units": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz", + "integrity": "sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==", + "dev": true, + "requires": { + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "@csstools/postcss-media-minmax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", + "dev": true, + "requires": { + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" + } + }, + "@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", + "dev": true, + "requires": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" + } + }, + "@csstools/postcss-nested-calc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz", + "integrity": "sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz", + "integrity": "sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz", + "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz", + "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, + "@csstools/postcss-relative-color-syntax": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz", + "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==", + "dev": true, + "requires": { + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" + } + }, + "@csstools/postcss-scope-pseudo-class": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz", + "integrity": "sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.13" + } + }, "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz", + "integrity": "sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==", "dev": true, "requires": { + "@csstools/color-helpers": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz", + "integrity": "sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA==", "dev": true, "requires": {} }, "@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", "dev": true, "requires": {} }, @@ -11842,17 +13024,17 @@ } }, "@github/auto-complete-element": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.5.1.tgz", - "integrity": "sha512-7/g6Nz6Zz4/k0m/L0n+OEO29WZcXgXwLJn7Ql02UbIMR2ClFEZIwIvvzb+3fEECOyLpFrZC/JH7Svz9RYPc+wA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@github/auto-complete-element/-/auto-complete-element-3.6.0.tgz", + "integrity": "sha512-u8fG8nCosSFv2wlKMsGga+FaFu/jkexZVFIDxLiCyLVTB8zRRu/RJyufzNnmbOZHYBezCMNBgJ0quuEBoyRh9Q==", "requires": { "@github/combobox-nav": "^2.1.7" } }, "@github/axe-github": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@github/axe-github/-/axe-github-0.5.0.tgz", - "integrity": "sha512-i1QpK8hs2asSFCLn0LL6VEYIGJ+qnvho8YyqM9eQcI7K5tcser8ugLZkLTgktteWNZqE9g9OSlC0VFPEWo+RsQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@github/axe-github/-/axe-github-0.6.1.tgz", + "integrity": "sha512-NH+69lWLZljzb5/GrHDW3IF809ss5dbqj/wcUe5SN++73IVIMfDsbwjblqoRoq7/755lhEgd7TYU1dRET7jBIA==", "dev": true }, "@github/browserslist-config": { @@ -11906,9 +13088,9 @@ "integrity": "sha512-iEeR2OdVCPkdIPUszL8gJnKNu4MR8ANh7y0u/LPyaatYezgaWxUZEzhFntloqQq+HE6MZkFy+cl+xzCNuljOdw==" }, "@github/prettier-config": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@github/prettier-config/-/prettier-config-0.0.4.tgz", - "integrity": "sha512-ZOJ+U771Mw68qp2GPbcqPt2Xg0LEl0YwiIFHXwVLAFm2TgDnsgcCHhXO8PIxOWPqSFO4S7xIMD9CBobfaWGASA==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@github/prettier-config/-/prettier-config-0.0.6.tgz", + "integrity": "sha512-Sdb089z+QbGnFF2NivbDeaJ62ooPlD31wE6Fkb/ESjAOXSjNJo+gjqzYYhlM7G3ERJmKFZRUJYMlsqB7Tym8lQ==", "dev": true }, "@github/relative-time-element": { @@ -12159,9 +13341,9 @@ } }, "@oddbird/popover-polyfill": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.3.0.tgz", - "integrity": "sha512-XtA1cI3fyiPuur7dSpVIZzYJhrNq7YywOf41eG0gHkzteE69ez3gKtfIGu44VmZb73nfv2QsTprJqrRjN+K8nA==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.3.2.tgz", + "integrity": "sha512-H0Q8JcFkXrOt2FrP0cUz2qomU5O+Dfc51UYLk5GtDWmVhdmvtV2FhgaCUh3TA6U5dogMZOFAf3QbwiGXhe9LXQ==" }, "@pkgr/utils": { "version": "2.4.2", @@ -12178,14 +13360,12 @@ } }, "@playwright/test": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.35.1.tgz", - "integrity": "sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz", + "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==", "dev": true, "requires": { - "@types/node": "*", - "fsevents": "2.3.2", - "playwright-core": "1.35.1" + "playwright": "1.39.0" } }, "@primer/behaviors": { @@ -12194,13 +13374,13 @@ "integrity": "sha512-gzryOl22EOzJSPT8pYbHZYHgcKEOw9KxG0L5XRL+cMaS767YGqZGoeF/YEaeJ3dEWMzqz93FPGSem3eo5PmPBA==" }, "@primer/css": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.0.2.tgz", - "integrity": "sha512-rIwqua1LgjMTMFx9whghPEHF1B4RdVA6meMu5ByeqLYWmWrCStwk2jZvk9yNSn2MnkJ7zuuo3jTlIX1SVmjF7Q==", + "version": "21.0.9", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.0.9.tgz", + "integrity": "sha512-kk0TfLqtGwGYJ/qXGLMXDIL4d3qWPjlEB12Hvk08krulbsQRWEsnXjejBIvJG69GyOOuYxXNoHvP2NGenxQ8Jw==", "dev": true, "requires": { - "@primer/primitives": "^7.11.10", - "@primer/view-components": "^0.1.0" + "@primer/primitives": "^7.12.0", + "@primer/view-components": "^0.5.1" } }, "@primer/primitives": { @@ -12228,6 +13408,131 @@ "tap-map": "^1.0.0" }, "dependencies": { + "@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "requires": {} + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "known-css-properties": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "stylelint": { + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.1", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.26.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.19", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.3.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + } + }, "stylelint-config-recommended": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", @@ -12243,13 +13548,49 @@ "requires": { "stylelint-config-recommended": "^7.0.0" } + }, + "stylelint-order": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", + "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "dev": true, + "requires": { + "postcss": "^8.3.11", + "postcss-sorting": "^7.0.1" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, "@primer/view-components": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.1.9.tgz", - "integrity": "sha512-LtqJBkTMS+odYXqKhOZxBvyAAlXTA+C6o3eXDQN8Nwmja48SKAlFrwb+HpXLvgpbbDg1eY2LKmypokv44dl0Uw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.5.1.tgz", + "integrity": "sha512-TI51R4rVobwK6sWRhu7HRHC6yxud2I9P1sYN6o/fHhIq7QU31mJyv1PtD8nfhmOqN/SsRC6q3pnCbh5Qt1wD/g==", "dev": true, "requires": { "@github/auto-check-element": "^5.2.0", @@ -12259,33 +13600,57 @@ "@github/details-menu-element": "^1.0.12", "@github/image-crop-element": "^5.0.0", "@github/include-fragment-element": "^6.1.1", - "@github/mini-throttle": "^2.1.0", "@github/relative-time-element": "^4.0.0", "@github/tab-container-element": "^3.1.2", - "@oddbird/popover-polyfill": "^0.1.1", + "@oddbird/popover-polyfill": "^0.2.1", "@primer/behaviors": "^1.3.4" }, "dependencies": { "@oddbird/popover-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.1.1.tgz", - "integrity": "sha512-X9gxiwKtN1ZumOoe9KRLpe37nshLtwHm/IJflIxgjanXz/FqKb0DQ7BlWu+iqUn/O0/jWYgkKnTLtsC9JlgwQg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.2.3.tgz", + "integrity": "sha512-XDK+V/gUeE4NEsWp79eVzhlK3wuVcRDJuaas63qo0IJLJpyOLHqycJLFYvuq8kebgT1nl87P3sbSb5ZN6Vyf5g==", "dev": true } } }, "@rollup/plugin-node-resolve": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", - "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", - "resolve": "^1.19.0" + "resolve": "^1.22.1" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", + "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } } }, "@rollup/plugin-typescript": { @@ -12331,9 +13696,9 @@ } }, "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/json5": { @@ -12367,19 +13732,16 @@ "dev": true }, "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "@types/semver": { "version": "7.5.0", @@ -12388,102 +13750,103 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", - "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", + "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/type-utils": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/parser": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", - "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", + "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", - "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" } }, "@typescript-eslint/type-utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", - "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.60.0", - "@typescript-eslint/utils": "5.60.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", - "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", - "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/visitor-keys": "5.60.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/utils": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", - "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.0", - "@typescript-eslint/types": "5.60.0", - "@typescript-eslint/typescript-estree": "5.60.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "5.60.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", - "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.60.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.11.0", + "eslint-visitor-keys": "^3.4.1" } }, "acorn": { @@ -12635,14 +13998,14 @@ "dev": true }, "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -12655,9 +14018,9 @@ "dev": true }, "axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", "dev": true }, "axobject-query": { @@ -12746,15 +14109,15 @@ "dev": true }, "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" } }, "buffer-from": { @@ -12830,9 +14193,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001506", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz", - "integrity": "sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==", + "version": "1.0.30001559", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", + "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", "dev": true }, "chalk": { @@ -12982,16 +14345,15 @@ "dev": true }, "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" } }, "cross-spawn": { @@ -13006,12 +14368,12 @@ } }, "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz", + "integrity": "sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.13" } }, "css-declaration-sorter": { @@ -13022,24 +14384,26 @@ "requires": {} }, "css-functions-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", - "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", "dev": true }, "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz", + "integrity": "sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" } }, "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz", + "integrity": "sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g==", "dev": true, "requires": {} }, @@ -13119,9 +14483,9 @@ "dev": true }, "cssdb": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.6.0.tgz", - "integrity": "sha512-Nna7rph8V0jC6+JBY4Vk4ndErUmfJfV6NJCaZdurL0omggabiy+QB2HCQtu5c/ACLZ0I7REv7A4QyPIoYzZx0w==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.9.0.tgz", + "integrity": "sha512-WPMT9seTQq6fPAa1yN4zjgZZeoTriSN2LqW9C+otjar12DQIWA4LuSfFrvFJiKp4oD0xIk1vumDLw8K9ur4NBw==", "dev": true }, "cssesc": { @@ -13511,9 +14875,9 @@ } }, "electron-to-chromium": { - "version": "1.4.437", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.437.tgz", - "integrity": "sha512-ZFekRuBOHUXp21wrR5lshT6pZa/KmjkhKBAtmZz4NN5sCWlHOk3kdhiwFINrDBsRLX6FjyBAb1TRN+KBeNlyzQ==", + "version": "1.4.572", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz", + "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==", "dev": true }, "emoji-regex": { @@ -13825,106 +15189,6 @@ "svg-element-attributes": "^1.3.1" }, "dependencies": { - "@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "semver": "^7.5.4" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.8.0", - "eslint-visitor-keys": "^3.4.1" - } - }, "eslint-plugin-prettier": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", @@ -13934,12 +15198,6 @@ "prettier-linter-helpers": "^1.0.0", "synckit": "^0.8.5" } - }, - "prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true } } }, @@ -14052,16 +15310,6 @@ "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==", "dev": true }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, "eslint-visitor-keys": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", @@ -14119,12 +15367,6 @@ } } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, "estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", @@ -14268,19 +15510,20 @@ "dev": true }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "for-each": { @@ -14293,9 +15536,9 @@ } }, "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true }, "fs-extra": { @@ -14315,6 +15558,13 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -14976,6 +16226,12 @@ "argparse": "^2.0.1" } }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -15023,6 +16279,15 @@ "object.assign": "^4.1.3" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -15036,9 +16301,9 @@ "dev": true }, "known-css-properties": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", - "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "language-subtag-registry": { @@ -15616,12 +16881,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node-fetch": { "version": "2.6.11", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", @@ -15632,9 +16891,9 @@ } }, "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "normalize-package-data": { @@ -15965,18 +17224,19 @@ } }, "playwright": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.1.tgz", - "integrity": "sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", "dev": true, "requires": { - "playwright-core": "1.35.1" + "fsevents": "2.3.2", + "playwright-core": "1.39.0" } }, "playwright-core": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.35.1.tgz", - "integrity": "sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", "dev": true }, "postcss": { @@ -15999,9 +17259,9 @@ } }, "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz", + "integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.10" @@ -16125,27 +17385,28 @@ } }, "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz", + "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==", "dev": true, "requires": { + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz", + "integrity": "sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz", + "integrity": "sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -16174,20 +17435,26 @@ } }, "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", + "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" } }, "postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz", + "integrity": "sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==", "dev": true, "requires": { + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "postcss-value-parser": "^4.2.0" } }, @@ -16202,21 +17469,24 @@ } }, "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz", + "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.4" + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "postcss-selector-parser": "^6.0.13" } }, "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz", + "integrity": "sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.13" } }, "postcss-discard-comments": { @@ -16248,40 +17518,31 @@ "requires": {} }, "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz", + "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==", "dev": true, "requires": { + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz", + "integrity": "sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.13" } }, "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz", + "integrity": "sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.13" } }, "postcss-font-variant": { @@ -16292,25 +17553,25 @@ "requires": {} }, "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz", + "integrity": "sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA==", "dev": true, "requires": {} }, "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz", + "integrity": "sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "requires": { "postcss-value-parser": "^4.0.0", @@ -16318,13 +17579,6 @@ "resolve": "^1.1.7" } }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "requires": {} - }, "postcss-js": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", @@ -16335,13 +17589,15 @@ } }, "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz", + "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "postcss-load-config": { @@ -16363,18 +17619,13 @@ } }, "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.0.tgz", + "integrity": "sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw==", "dev": true, - "requires": {} + "requires": { + "postcss-value-parser": "^4.2.0" + } }, "postcss-media-query-parser": { "version": "0.2.3", @@ -16457,13 +17708,13 @@ } }, "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.1.tgz", + "integrity": "sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==", "dev": true, "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" } }, "postcss-normalize-charset": { @@ -16547,9 +17798,9 @@ } }, "postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz", + "integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==", "dev": true, "requires": {} }, @@ -16564,9 +17815,9 @@ } }, "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz", + "integrity": "sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -16580,78 +17831,89 @@ "requires": {} }, "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.0.tgz", + "integrity": "sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "requires": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.3.0.tgz", + "integrity": "sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==", + "dev": true, + "requires": { + "@csstools/postcss-cascade-layers": "^4.0.1", + "@csstools/postcss-color-function": "^3.0.7", + "@csstools/postcss-color-mix-function": "^2.0.7", + "@csstools/postcss-exponential-functions": "^1.0.1", + "@csstools/postcss-font-format-keywords": "^3.0.0", + "@csstools/postcss-gamut-mapping": "^1.0.0", + "@csstools/postcss-gradients-interpolation-method": "^4.0.7", + "@csstools/postcss-hwb-function": "^3.0.6", + "@csstools/postcss-ic-unit": "^3.0.2", + "@csstools/postcss-initial": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^4.0.3", + "@csstools/postcss-logical-float-and-clear": "^2.0.0", + "@csstools/postcss-logical-overflow": "^1.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^1.0.0", + "@csstools/postcss-logical-resize": "^2.0.0", + "@csstools/postcss-logical-viewport-units": "^2.0.3", + "@csstools/postcss-media-minmax": "^1.1.0", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3", + "@csstools/postcss-nested-calc": "^3.0.0", + "@csstools/postcss-normalize-display-values": "^3.0.1", + "@csstools/postcss-oklab-function": "^3.0.7", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", + "@csstools/postcss-relative-color-syntax": "^2.0.7", + "@csstools/postcss-scope-pseudo-class": "^3.0.0", + "@csstools/postcss-stepped-value-functions": "^3.0.2", + "@csstools/postcss-text-decoration-shorthand": "^3.0.3", + "@csstools/postcss-trigonometric-functions": "^3.0.2", + "@csstools/postcss-unset-value": "^3.0.0", + "autoprefixer": "^10.4.16", + "browserslist": "^4.22.1", + "css-blank-pseudo": "^6.0.0", + "css-has-pseudo": "^6.0.0", + "css-prefers-color-scheme": "^9.0.0", + "cssdb": "^7.9.0", + "postcss-attribute-case-insensitive": "^6.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", + "postcss-color-functional-notation": "^6.0.2", + "postcss-color-hex-alpha": "^9.0.2", + "postcss-color-rebeccapurple": "^9.0.1", + "postcss-custom-media": "^10.0.2", + "postcss-custom-properties": "^13.3.2", + "postcss-custom-selectors": "^7.1.6", + "postcss-dir-pseudo-class": "^8.0.0", + "postcss-double-position-gradients": "^5.0.2", + "postcss-focus-visible": "^9.0.0", + "postcss-focus-within": "^8.0.0", "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", + "postcss-gap-properties": "^5.0.0", + "postcss-image-set-function": "^6.0.1", + "postcss-lab-function": "^6.0.7", + "postcss-logical": "^7.0.0", + "postcss-nesting": "^12.0.1", + "postcss-opacity-percentage": "^2.0.0", + "postcss-overflow-shorthand": "^5.0.0", "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-place": "^9.0.0", + "postcss-pseudo-class-any-link": "^9.0.0", "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", + "postcss-selector-not": "^7.0.1", "postcss-value-parser": "^4.2.0" } }, "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz", + "integrity": "sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.13" } }, "postcss-reduce-initial": { @@ -16711,9 +17973,9 @@ "requires": {} }, "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz", + "integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.10" @@ -16798,9 +18060,9 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", "dev": true }, "prettier-linter-helpers": { @@ -17690,49 +18952,51 @@ } }, "stylelint": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", - "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "requires": { - "@csstools/selector-specificity": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^7.1.0", - "css-functions-list": "^3.1.0", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.1", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^7.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.1", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.26.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", + "meow": "^10.1.5", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.19", - "postcss-media-query-parser": "^0.2.3", + "postcss": "^8.4.28", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.3.0", + "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", "table": "^6.8.1", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.2" + "write-file-atomic": "^5.0.1" }, "dependencies": { "balanced-match": { @@ -17741,6 +19005,39 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "requires": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + } + }, + "decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true + }, + "file-entry-cache": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", + "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "dev": true, + "requires": { + "flat-cache": "^3.2.0" + } + }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -17750,24 +19047,30 @@ "lru-cache": "^6.0.0" } }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" } }, "normalize-package-data": { @@ -17782,41 +19085,94 @@ "validate-npm-package-license": "^3.0.1" } }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + } + }, + "read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + } + }, + "redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "requires": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "requires": { + "min-indent": "^1.0.1" + } + }, + "trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true + }, "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } }, - "stylelint-config-prettier": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.5.tgz", - "integrity": "sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==", - "dev": true, - "requires": {} - }, "stylelint-config-recommended": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", - "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", "dev": true, "requires": {} }, "stylelint-config-standard": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-28.0.0.tgz", - "integrity": "sha512-q/StuowDdDmFCravzGHAwgS9pjX0bdOQUEBBDIkIWsQuYGgYz/xsO8CM6eepmIQ1fc5bKdDVimlJZ6MoOUcJ5Q==", + "version": "34.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", + "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", "dev": true, "requires": { - "stylelint-config-recommended": "^9.0.0" + "stylelint-config-recommended": "^13.0.0" } }, "stylelint-no-unsupported-browser-features": { @@ -17830,16 +19186,6 @@ "postcss": "^8.4.16" } }, - "stylelint-order": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", - "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", - "dev": true, - "requires": { - "postcss": "^8.3.11", - "postcss-sorting": "^7.0.1" - } - }, "stylelint-scss": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", @@ -17869,9 +19215,9 @@ } }, "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -18089,23 +19435,6 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "tty-table": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.1.tgz", @@ -18199,9 +19528,9 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true }, "uc.micro": { @@ -18235,9 +19564,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -18260,9 +19589,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, "validate-npm-package-license": { @@ -18446,13 +19775,21 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "xtend": { diff --git a/package.json b/package.json index ebea845921..38f8a9bad6 100644 --- a/package.json +++ b/package.json @@ -51,24 +51,24 @@ "@github/include-fragment-element": "^6.1.1", "@github/relative-time-element": "^4.0.0", "@github/tab-container-element": "^3.1.2", - "@oddbird/popover-polyfill": "^0.3.0", + "@oddbird/popover-polyfill": "^0.3.2", "@primer/behaviors": "^1.3.4" }, "devDependencies": { "@changesets/changelog-github": "^0.4.6", "@changesets/cli": "^2.24.1", - "@github/axe-github": "^0.5.0", + "@github/axe-github": "^0.6.1", "@github/browserslist-config": "^1.0.0", "@github/markdownlint-github": "^0.2.2", - "@github/prettier-config": "0.0.4", + "@github/prettier-config": "0.0.6", "@playwright/test": "^1.35.1", - "@primer/css": "21.0.2", + "@primer/css": "21.0.9", "@primer/primitives": "^7.14.0", "@primer/stylelint-config": "^12.7.2", - "@rollup/plugin-node-resolve": "^13.3.0", + "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^8.3.3", - "@typescript-eslint/eslint-plugin": "^5.31.0", - "@typescript-eslint/parser": "^5.31.0", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "@typescript-eslint/parser": "^6.0.0", "axe-core": "^4.7.1", "chokidar-cli": "^3.0.0", "cssnano": "^6.0.1", @@ -82,17 +82,16 @@ "postcss": "^8.4.16", "postcss-cli": "^10.1.0", "postcss-custom-properties-fallback": "^1.0.2", - "postcss-import": "^14.1.0", + "postcss-import": "^15.1.0", "postcss-mixins": "^9.0.3", - "postcss-preset-env": "^7.8.0", - "prettier": "2.7.1", - "rollup": "^2.77.1", + "postcss-preset-env": "^9.3.0", + "prettier": "3.1.0", + "rollup": "^2.79.1", "rollup-plugin-terser": "^7.0.2", - "stylelint": "^14.13.0", - "stylelint-config-prettier": "^9.0.3", - "stylelint-config-standard": "^28.0.0", + "stylelint": "^15.11.0", + "stylelint-config-standard": "^34.0.0", "tslib": "^2.4.0", - "typescript": "^4.7.4" + "typescript": "^5.2.2" }, "prettier": "@github/prettier-config", "browserslist": "extends @github/browserslist-config" diff --git a/postcss.config.js b/postcss.config.js index 4107514bd5..7d69a728f8 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -41,15 +41,7 @@ module.exports = { features: { 'nesting-rules': {noIsPseudoSelector: true}, 'focus-visible-pseudo-class': false, - 'logical-properties-and-values': false, - 'custom-media-queries': { - importFrom: [ - path.join( - __dirname, - './node_modules/@primer/primitives/tokens-next-private/css/functional/size/viewport.css' - ) - ] - } + 'logical-properties-and-values': false } }), process.env.CI === 'true' ? require('cssnano') : null diff --git a/previews/primer/alpha/octicon_symbols_preview.rb b/previews/primer/alpha/octicon_symbols_preview.rb new file mode 100644 index 0000000000..99b2e340f3 --- /dev/null +++ b/previews/primer/alpha/octicon_symbols_preview.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module Primer + module Alpha + # @label OcticonSymbols + class OcticonSymbolsPreview < ViewComponent::Preview + # @label Playground + # + # @param octicon [Symbol] medium_octicon + def playground(octicon: :container) + render_with_template(locals: { octicon: octicon }) + end + + # @label Default + # + # @snapshot + def default + end + end + end +end diff --git a/previews/primer/alpha/octicon_symbols_preview/default.html.erb b/previews/primer/alpha/octicon_symbols_preview/default.html.erb new file mode 100644 index 0000000000..96c7432559 --- /dev/null +++ b/previews/primer/alpha/octicon_symbols_preview/default.html.erb @@ -0,0 +1,6 @@ +<%= render(Primer::Alpha::OcticonSymbols.new(icons: [{ symbol: :container, size: :medium }])) %> + + + + + diff --git a/previews/primer/alpha/octicon_symbols_preview/playground.html.erb b/previews/primer/alpha/octicon_symbols_preview/playground.html.erb new file mode 100644 index 0000000000..96a8365646 --- /dev/null +++ b/previews/primer/alpha/octicon_symbols_preview/playground.html.erb @@ -0,0 +1,13 @@ +

+ Below is an SVG image containing the chosen octicon surrounded by a green circle. The octicon has been emitted + onto the page as an SVG <symbol> element and included into the SVG you see below with the <use> element. + See the MDN docs for + more information. +

+ +<%= render(Primer::Alpha::OcticonSymbols.new(icons: [{ symbol: octicon, size: :medium }])) %> + + + + + diff --git a/previews/primer/alpha/text_field_preview.rb b/previews/primer/alpha/text_field_preview.rb index 6640542a55..55eb132855 100644 --- a/previews/primer/alpha/text_field_preview.rb +++ b/previews/primer/alpha/text_field_preview.rb @@ -179,6 +179,11 @@ def with_auto_check_ok render(Primer::Alpha::TextField.new(auto_check_src: UrlHelpers.example_check_ok_path, name: "my-text-field", label: "My text field")) end + # @label Auto check request accepted + def with_auto_check_accepted + render(Primer::Alpha::TextField.new(auto_check_src: UrlHelpers.example_check_accepted_path, name: "my-text-field", label: "My text field")) + end + # @label Auto check request error def with_auto_check_error render(Primer::Alpha::TextField.new(auto_check_src: UrlHelpers.example_check_error_path, name: "my-text-field", label: "My text field")) diff --git a/previews/primer/beta/avatar_preview.rb b/previews/primer/beta/avatar_preview.rb index 4cc3552e4d..ad8f25d8d3 100644 --- a/previews/primer/beta/avatar_preview.rb +++ b/previews/primer/beta/avatar_preview.rb @@ -64,6 +64,12 @@ def size_48 render(Primer::Beta::Avatar.new(size: 48, src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser")) end + # @label 64px + # @snapshot + def size_64 + render(Primer::Beta::Avatar.new(size: 64, src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser")) + end + # @label 80px # @snapshot def size_80 diff --git a/previews/primer/beta/button_group_preview.rb b/previews/primer/beta/button_group_preview.rb index 13f9b92c29..5afd04b339 100644 --- a/previews/primer/beta/button_group_preview.rb +++ b/previews/primer/beta/button_group_preview.rb @@ -69,6 +69,17 @@ def all_tags end end end + + # @label With clipboard copy button + # @snapshot + def with_clipboard_copy_button(size: :medium, scheme: :default) + render(Primer::Beta::ButtonGroup.new(size: size, scheme: scheme)) do |component| + component.with_button { "Button 1" } + component.with_clipboard_copy_button(id: "button-2", value: "Copyable value", aria: { label: "Copy some text" }) do |button| + button.with_tooltip(text: "Copy some text") + end + end + end end end end diff --git a/previews/primer/beta/clipboard_copy_button_preview.rb b/previews/primer/beta/clipboard_copy_button_preview.rb new file mode 100644 index 0000000000..c048060175 --- /dev/null +++ b/previews/primer/beta/clipboard_copy_button_preview.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Primer + module Beta + # @label ClipboardCopyButton + class ClipboardCopyButtonPreview < ViewComponent::Preview + # @label Playground + # + # @param text [String] + def playground(text: "Text to copy") + render(Primer::Beta::ClipboardCopyButton.new(id: "clipboard-button", aria: { label: "Copy" }, value: text)) + end + + # @label Playground + # @snapshot + def default + render(Primer::Beta::ClipboardCopyButton.new(id: "clipboard-button", aria: { label: "Copy" }, value: "Text to copy")) + end + + # @label With tooltip + # @snapshot + def with_tooltip + render(Primer::Beta::ClipboardCopyButton.new(id: "clipboard-button", aria: { label: "Copy" }, value: "Text to copy")) do |button| + button.with_tooltip(text: "Copy some text") + end + end + end + end +end diff --git a/previews/primer/beta/subhead_preview.rb b/previews/primer/beta/subhead_preview.rb index 50ebddc19b..00e6b7ae7d 100644 --- a/previews/primer/beta/subhead_preview.rb +++ b/previews/primer/beta/subhead_preview.rb @@ -9,10 +9,11 @@ class SubheadPreview < ViewComponent::Preview # @param spacious [Boolean] # @param hide_border [Boolean] # @param heading_danger [Boolean] + # @param heading_size [Symbol] select [medium, large] # @param heading_tag [Symbol] select [div, h1, h2, h3, h4, h5, h6] - def playground(spacious: false, hide_border: false, heading_tag: :div, heading_danger: false) + def playground(spacious: false, hide_border: false, heading_tag: :div, heading_size: Primer::Beta::Subhead::DEFAULT_HEADING_SIZE, heading_danger: false) render(Primer::Beta::Subhead.new(spacious: spacious, hide_border: hide_border)) do |component| - component.with_heading(tag: heading_tag, danger: heading_danger) do + component.with_heading(tag: heading_tag, size: heading_size, danger: heading_danger) do "My Heading" end component.with_description do @@ -26,11 +27,12 @@ def playground(spacious: false, hide_border: false, heading_tag: :div, heading_d # @param spacious [Boolean] # @param hide_border [Boolean] # @param heading_danger [Boolean] + # @param heading_size [Symbol] select [medium, large] # @param heading_tag [Symbol] select [div, h1, h2, h3, h4, h5, h6] # @snapshot - def default(spacious: false, hide_border: false, heading_tag: :div, heading_danger: false) + def default(spacious: false, hide_border: false, heading_tag: :div, heading_size: Primer::Beta::Subhead::DEFAULT_HEADING_SIZE, heading_danger: false) render(Primer::Beta::Subhead.new(spacious: spacious, hide_border: hide_border)) do |component| - component.with_heading(tag: heading_tag, danger: heading_danger) do + component.with_heading(tag: heading_tag, size: heading_size, danger: heading_danger) do "My Heading" end component.with_description do @@ -98,6 +100,32 @@ def spacing_dangerous end # # @!endgroup + + # @!group Header size + # + # @label Large + def large_header + render(Primer::Beta::Subhead.new) do |component| + component.with_heading(size: :large) do + "Large Header" + end + component.with_description do + "Description" + end + end + end + + # @label Medium + def medium_header + render(Primer::Beta::Subhead.new) do |component| + component.with_heading(size: :medium) do + "Medium Header" + end + component.with_description do + "Description" + end + end + end end end end diff --git a/previews/primer/forms_preview.rb b/previews/primer/forms_preview.rb index b6b29feeb0..ef78ea50fc 100644 --- a/previews/primer/forms_preview.rb +++ b/previews/primer/forms_preview.rb @@ -25,6 +25,10 @@ def array_check_box_group_form; end def select_form; end + def action_menu_form(route_format: :html) + render_with_template(locals: { route_format: route_format }) + end + def radio_button_with_nested_form; end def check_box_with_nested_form; end diff --git a/previews/primer/forms_preview/action_menu_form.html.erb b/previews/primer/forms_preview/action_menu_form.html.erb new file mode 100644 index 0000000000..4b4439a164 --- /dev/null +++ b/previews/primer/forms_preview/action_menu_form.html.erb @@ -0,0 +1,3 @@ +<%= primer_form_with(url: action_menu_form_action_path(format: route_format)) do |f| %> + <%= render(ActionMenuForm.new(f)) %> +<% end %> diff --git a/primer_view_components.gemspec b/primer_view_components.gemspec index b03556d336..d96d1c8af4 100644 --- a/primer_view_components.gemspec +++ b/primer_view_components.gemspec @@ -27,6 +27,6 @@ Gem::Specification.new do |spec| spec.add_runtime_dependency "actionview", ">= 5.0.0" spec.add_runtime_dependency "activesupport", ">= 5.0.0" - spec.add_runtime_dependency "openproject-octicons", ">= 19.7.0" + spec.add_runtime_dependency "openproject-octicons", ">= 19.8.0" spec.add_runtime_dependency "view_component", [">= 3.1", "< 4.0"] end diff --git a/script/erblint b/script/erblint new file mode 100755 index 0000000000..f7e7581247 --- /dev/null +++ b/script/erblint @@ -0,0 +1,8 @@ +#! /bin/bash + +bundle exec erblint \ + app/**/*.html.erb \ + lib/**/*.html.erb \ + demo/app/**/*.html.erb \ + test/**/*.html.erb \ + ${@} diff --git a/static/arguments.json b/static/arguments.json index bf609f2466..27bbfbd969 100644 --- a/static/arguments.json +++ b/static/arguments.json @@ -923,7 +923,7 @@ "name": "subtitle", "type": "String", "default": "`nil`", - "description": "Provides dditional context for the dialog, also setting the `aria-describedby` attribute." + "description": "Provides additional context for the dialog, also setting the `aria-describedby` attribute." }, { "name": "show_divider", @@ -3034,7 +3034,7 @@ "name": "size", "type": "Integer", "default": "`20`", - "description": "One of `16`, `20`, `24`, `32`, `40`, `48`, or `80`." + "description": "One of `16`, `20`, `24`, `32`, `40`, `48`, `64`, or `80`." }, { "name": "shape", @@ -3108,7 +3108,7 @@ "name": "tag", "type": "Symbol", "default": "`:button`", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", @@ -3249,6 +3249,12 @@ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/button.rb", "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/button/default/", "parameters": [ + { + "name": "base_button_class", + "type": "Class", + "default": "`Primer::Beta::BaseButton`", + "description": "The button class to render." + }, { "name": "scheme", "type": "Symbol", @@ -3277,7 +3283,7 @@ "name": "tag", "type": "Symbol", "default": "`:button`", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", @@ -3361,6 +3367,68 @@ } ] }, + { + "component": "ClipboardCopyBaseButton", + "status": "beta", + "a11y_reviewed": false, + "short_name": "ClipboardCopyBaseButton", + "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/clipboard_copy_base_button.rb", + "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/clipboard_copy_base_button/default/", + "parameters": [ + { + "name": "tag", + "type": "Symbol", + "default": "`:button`", + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." + }, + { + "name": "type", + "type": "Symbol", + "default": "`:button`", + "description": "One of `:button`, `:reset`, or `:submit`." + }, + { + "name": "block", + "type": "Boolean", + "default": "`false`", + "description": "Whether button is full-width with `display: block`." + }, + { + "name": "disabled", + "type": "Boolean", + "default": "`false`", + "description": "Whether or not the button is disabled. If true, this option forces `tag:` to `:button`." + }, + { + "name": "inactive", + "type": "Boolean", + "default": "`false`", + "description": "Whether the button looks visually disabled, but can still accept all the same interactions as an enabled button." + }, + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "[System arguments](/system-arguments)" + } + ] + }, + { + "component": "ClipboardCopyButton", + "status": "beta", + "a11y_reviewed": false, + "short_name": "ClipboardCopyButton", + "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/clipboard_copy_button.rb", + "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/clipboard_copy_button/default/", + "parameters": [ + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "The arguments accepted by [Button](/components/beta/button) and [ClipboardCopy](/components/beta/clipboardcopy)." + } + ] + }, { "component": "CloseButton", "status": "beta", @@ -3561,13 +3629,7 @@ "name": "tag", "type": "Symbol", "default": "N/A", - "description": "One of `:a`, `:button`, or `:summary`." - }, - { - "name": "wrapper_arguments", - "type": "Hash", - "default": "`{}`", - "description": "Optional keyword arguments to be passed to the wrapper `
` tag." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "scheme", @@ -4399,7 +4461,7 @@ "name": "tag", "type": "Symbol", "default": "`:button`", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", @@ -4490,7 +4552,7 @@ "name": "tag", "type": "Symbol", "default": "N/A", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", diff --git a/static/audited_at.json b/static/audited_at.json index 178098564c..d17712742b 100644 --- a/static/audited_at.json +++ b/static/audited_at.json @@ -73,6 +73,8 @@ "Primer::Beta::Button": "", "Primer::Beta::ButtonGroup": "", "Primer::Beta::ClipboardCopy": "", + "Primer::Beta::ClipboardCopyBaseButton": "", + "Primer::Beta::ClipboardCopyButton": "", "Primer::Beta::CloseButton": "", "Primer::Beta::Counter": "", "Primer::Beta::Details": "", diff --git a/static/classes.json b/static/classes.json index 705b588f85..021db4fa5a 100644 --- a/static/classes.json +++ b/static/classes.json @@ -230,9 +230,6 @@ "Button-visual": [ "Primer::Beta::Button" ], - "Button-withTooltip": [ - "Primer::Beta::Button" - ], "ButtonGroup": [ "Primer::Beta::ButtonGroup" ], @@ -269,6 +266,9 @@ "FormControl-inlineValidation": [ "Primer::Alpha::TextField" ], + "FormControl-inlineValidation--success": [ + "Primer::Alpha::TextField" + ], "FormControl-inlineValidation--visual": [ "Primer::Alpha::TextField" ], @@ -576,6 +576,12 @@ "Subhead-heading--danger": [ "Primer::Beta::Subhead" ], + "Subhead-heading--large": [ + "Primer::Beta::Subhead" + ], + "Subhead-heading--medium": [ + "Primer::Beta::Subhead" + ], "TimelineItem": [ "Primer::Beta::TimelineItem" ], diff --git a/static/constants.json b/static/constants.json index c1e4f7303a..e5a7131aff 100644 --- a/static/constants.json +++ b/static/constants.json @@ -709,6 +709,7 @@ 32, 40, 48, + 64, 80 ], "SMALL_THRESHOLD": 24 @@ -736,7 +737,8 @@ "TAG_OPTIONS": [ "button", "a", - "summary" + "summary", + "clipboard-copy" ], "TYPE_OPTIONS": [ "button", @@ -836,6 +838,10 @@ }, "Primer::Beta::ClipboardCopy": { }, + "Primer::Beta::ClipboardCopyBaseButton": { + }, + "Primer::Beta::ClipboardCopyButton": { + }, "Primer::Beta::CloseButton": { "DEFAULT_TYPE": "button", "TYPE_OPTIONS": [ @@ -1238,7 +1244,16 @@ ] }, "Primer::Beta::Subhead": { + "DEFAULT_HEADING_SIZE": "large", "DEFAULT_HEADING_TAG": "div", + "HEADING_SIZE_MAP": { + "large": "Subhead-heading--large", + "medium": "Subhead-heading--medium" + }, + "HEADING_SIZE_OPTIONS": [ + "large", + "medium" + ], "HEADING_TAG_OPTIONS": [ "div", "h1", diff --git a/static/info_arch.json b/static/info_arch.json index c4e8df62d6..0d4680c823 100644 --- a/static/info_arch.json +++ b/static/info_arch.json @@ -3165,7 +3165,7 @@ "name": "subtitle", "type": "String", "default": "`nil`", - "description": "Provides dditional context for the dialog, also setting the `aria-describedby` attribute." + "description": "Provides additional context for the dialog, also setting the `aria-describedby` attribute." }, { "name": "show_divider", @@ -4932,7 +4932,7 @@ }, { "fully_qualified_name": "Primer::Alpha::NavList", - "description": "", + "description": ":nodoc:", "accessibility_docs": null, "is_form_component": false, "is_published": true, @@ -4982,7 +4982,7 @@ "subcomponents": [ { "fully_qualified_name": "Primer::Alpha::NavList::Item", - "description": "", + "description": ":nodoc:", "accessibility_docs": null, "is_form_component": false, "is_published": true, @@ -5102,7 +5102,7 @@ }, { "fully_qualified_name": "Primer::Alpha::NavList::Heading", - "description": "", + "description": ":nodoc:", "accessibility_docs": null, "is_form_component": false, "is_published": true, @@ -5154,7 +5154,7 @@ }, { "fully_qualified_name": "Primer::Alpha::NavList::Divider", - "description": "", + "description": ":nodoc:", "accessibility_docs": null, "is_form_component": false, "is_published": true, @@ -5194,7 +5194,7 @@ }, { "fully_qualified_name": "Primer::Alpha::NavList::Group", - "description": "", + "description": ":nodoc:", "accessibility_docs": null, "is_form_component": false, "is_published": true, @@ -5438,7 +5438,32 @@ ], "previews": [ - + { + "preview_path": "primer/alpha/octicon_symbols/playground", + "name": "playground", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/alpha/octicon_symbols/default", + "name": "default", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + } ], "subcomponents": [ @@ -7972,6 +7997,19 @@ ] } }, + { + "preview_path": "primer/alpha/text_field/with_auto_check_accepted", + "name": "with_auto_check_accepted", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, { "preview_path": "primer/alpha/text_field/with_auto_check_error", "name": "with_auto_check_error", @@ -9233,7 +9271,7 @@ "name": "size", "type": "Integer", "default": "`20`", - "description": "One of `16`, `20`, `24`, `32`, `40`, `48`, or `80`." + "description": "One of `16`, `20`, `24`, `32`, `40`, `48`, `64`, or `80`." }, { "name": "shape", @@ -9378,6 +9416,19 @@ ] } }, + { + "preview_path": "primer/beta/avatar/size_64", + "name": "size_64", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, { "preview_path": "primer/beta/avatar/size_80", "name": "size_80", @@ -9625,7 +9676,7 @@ "name": "tag", "type": "Symbol", "default": "`:button`", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", @@ -10400,6 +10451,12 @@ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/button.rb", "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/button/default/", "parameters": [ + { + "name": "base_button_class", + "type": "Class", + "default": "`Primer::Beta::BaseButton`", + "description": "The button class to render." + }, { "name": "scheme", "type": "Symbol", @@ -10428,7 +10485,7 @@ "name": "tag", "type": "Symbol", "default": "`:button`", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", @@ -10771,19 +10828,43 @@ "slots": [ { "name": "buttons", - "description": "Required list of buttons to be rendered.", + "description": "List of buttons to be rendered. Add buttons via the `#with_button` and `#with_clipboard_copy_button` methods (see below).", + "parameters": [ + + ] + } + ], + "methods": [ + { + "name": "with_button", + "description": "Adds a button.", "parameters": [ { - "name": "kwargs", + "name": "icon", + "type": "Symbol", + "default": "`nil`", + "description": "If included, adds a {{#link_to_component}}Primer::Beta::IconButton{{/link_to_component}} with the given {{link_to_octicons}}. Otherwise, a {{#link_to_component}}Primer::Beta::Button{{/link_to_component}} is added instead." + }, + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "The arguments accepted by {{#link_to_component}}Primer::Beta::Button{{/link_to_component}} or {{#link_to_component}}Primer::Beta::IconButton{{/link_to_component}}, depending on the value of the `icon:` argument." + } + ] + }, + { + "name": "with_clipboard_copy_button", + "description": "Adds a {{#link_to_component}}Primer::Beta::ClipboardCopyButton{{/link_to_component}}.", + "parameters": [ + { + "name": "system_arguments", "type": "Hash", "default": "N/A", - "description": "The same arguments as {{#link_to_component}}Primer::Beta::Button{{/link_to_component}}" + "description": "The arguments accepted by {{#link_to_component}}Primer::Beta::ClipboardCopyButton{{/link_to_component}}." } ] } - ], - "methods": [ - ], "previews": [ { @@ -10850,6 +10931,19 @@ "color-contrast" ] } + }, + { + "preview_path": "primer/beta/button_group/with_clipboard_copy_button", + "name": "with_clipboard_copy_button", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } } ], "subcomponents": [ @@ -10858,7 +10952,7 @@ }, { "fully_qualified_name": "Primer::Beta::ClipboardCopy", - "description": "Use `ClipboardCopy` to copy element text content or input values to the clipboard.", + "description": "Use `ClipboardCopy` to copy element text content or input values to the clipboard.\n\nThis component by itself is not styled as a button, and can therefore only be used in limited circumstances.\nIf you're looking for a button, consider using {{#link_to_component}}Primer::Beta::ClipboardCopyButton{{/link_to_component}}\ninstead.", "accessibility_docs": "Always set an accessible label to help the user interact with the component.", "is_form_component": false, "is_published": true, @@ -10959,6 +11053,195 @@ ] }, + { + "fully_qualified_name": "Primer::Beta::ClipboardCopyBaseButton", + "description": "Internal\n\n:nodoc:", + "accessibility_docs": null, + "is_form_component": false, + "is_published": true, + "requires_js": false, + "component": "ClipboardCopyBaseButton", + "status": "beta", + "a11y_reviewed": false, + "short_name": "ClipboardCopyBaseButton", + "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/clipboard_copy_base_button.rb", + "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/clipboard_copy_base_button/default/", + "parameters": [ + { + "name": "tag", + "type": "Symbol", + "default": "`:button`", + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." + }, + { + "name": "type", + "type": "Symbol", + "default": "`:button`", + "description": "One of `:button`, `:reset`, or `:submit`." + }, + { + "name": "block", + "type": "Boolean", + "default": "`false`", + "description": "Whether button is full-width with `display: block`." + }, + { + "name": "disabled", + "type": "Boolean", + "default": "`false`", + "description": "Whether or not the button is disabled. If true, this option forces `tag:` to `:button`." + }, + { + "name": "inactive", + "type": "Boolean", + "default": "`false`", + "description": "Whether the button looks visually disabled, but can still accept all the same interactions as an enabled button." + }, + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "{{link_to_system_arguments_docs}}" + } + ], + "slots": [ + + ], + "methods": [ + + ], + "previews": [ + + ], + "subcomponents": [ + + ] + }, + { + "fully_qualified_name": "Primer::Beta::ClipboardCopyButton", + "description": "`ClipboardCopyButton` uses the `ClipboardCopy` component to copy text to the clipboard,\nstyled as a Primer button. It can be used wherever a button is desired, and works well\nwith components like `ButtonGroup`.", + "accessibility_docs": null, + "is_form_component": false, + "is_published": true, + "requires_js": false, + "component": "ClipboardCopyButton", + "status": "beta", + "a11y_reviewed": false, + "short_name": "ClipboardCopyButton", + "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/clipboard_copy_button.rb", + "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/clipboard_copy_button/default/", + "parameters": [ + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "The arguments accepted by {{#link_to_component}}Primer::Beta::Button{{/link_to_component}} and {{#link_to_component}}Primer::Beta::ClipboardCopy{{/link_to_component}}." + } + ], + "slots": [ + { + "name": "leading_visual", + "description": "Leading visuals appear to the left of the button text.\n\nUse:\n\n- `leading_visual_icon` for a {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}}.\n\n- `leading_visual_svg` to render a SVG.", + "parameters": [ + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "Same arguments as {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}}." + } + ] + }, + { + "name": "trailing_visual", + "description": "Trailing visuals appear to the right of the button text.\n\nUse:\n\n- `trailing_visual_counter` for a {{#link_to_component}}Primer::Beta::Counter{{/link_to_component}}.", + "parameters": [ + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "Same arguments as {{#link_to_component}}Primer::Beta::Counter{{/link_to_component}}." + } + ] + }, + { + "name": "trailing_action", + "description": "Trailing action appears to the right of the trailing visual.\n\nUse:\n\n- `trailing_action_icon` for a {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}}.", + "parameters": [ + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "Same arguments as {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}}." + } + ] + }, + { + "name": "tooltip", + "description": "`Tooltip` that appears on mouse hover or keyboard focus over the button. Use tooltips sparingly and as a last resort.\n**Important:** This tooltip defaults to `type: :description`. In a few scenarios, `type: :label` may be more appropriate.\nConsult the {{#link_to_component}}Primer::Alpha::Tooltip{{/link_to_component}} documentation for more information.", + "parameters": [ + { + "name": "type", + "type": "Symbol", + "default": "`:description`", + "description": "One of `:description` or `:label`." + }, + { + "name": "system_arguments", + "type": "Hash", + "default": "N/A", + "description": "Same arguments as {{#link_to_component}}Primer::Alpha::Tooltip{{/link_to_component}}." + } + ] + } + ], + "methods": [ + + ], + "previews": [ + { + "preview_path": "primer/beta/clipboard_copy_button/playground", + "name": "playground", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/beta/clipboard_copy_button/default", + "name": "default", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/beta/clipboard_copy_button/with_tooltip", + "name": "with_tooltip", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + } + ], + "subcomponents": [ + + ] + }, { "fully_qualified_name": "Primer::Beta::CloseButton", "description": "Use `CloseButton` to render an `×` without default button styles.\n\n[0]: https://primer.style/view-components/system-arguments#html-attributes", @@ -11675,13 +11958,7 @@ "name": "tag", "type": "Symbol", "default": "N/A", - "description": "One of `:a`, `:button`, or `:summary`." - }, - { - "name": "wrapper_arguments", - "type": "Hash", - "default": "`{}`", - "description": "Optional keyword arguments to be passed to the wrapper `
` tag." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "scheme", @@ -13925,6 +14202,32 @@ "color-contrast" ] } + }, + { + "preview_path": "primer/beta/subhead/large_header", + "name": "large_header", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/beta/subhead/medium_header", + "name": "medium_header", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } } ], "subcomponents": [ @@ -14541,7 +14844,7 @@ "name": "tag", "type": "Symbol", "default": "`:button`", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", @@ -14740,7 +15043,7 @@ "name": "tag", "type": "Symbol", "default": "N/A", - "description": "One of `:a`, `:button`, or `:summary`." + "description": "One of `:a`, `:button`, `:clipboard-copy`, or `:summary`." }, { "name": "type", diff --git a/static/previews.json b/static/previews.json index 90693f5c52..2f8a7734a9 100644 --- a/static/previews.json +++ b/static/previews.json @@ -1176,6 +1176,19 @@ ] } }, + { + "preview_path": "primer/beta/avatar/size_64", + "name": "size_64", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, { "preview_path": "primer/beta/avatar/size_80", "name": "size_80", @@ -2243,6 +2256,19 @@ "color-contrast" ] } + }, + { + "preview_path": "primer/beta/button_group/with_clipboard_copy_button", + "name": "with_clipboard_copy_button", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } } ] }, @@ -2603,6 +2629,53 @@ } ] }, + { + "name": "clipboard_copy_button", + "component": "ClipboardCopyButton", + "status": "beta", + "lookup_path": "primer/beta/clipboard_copy_button", + "examples": [ + { + "preview_path": "primer/beta/clipboard_copy_button/playground", + "name": "playground", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/beta/clipboard_copy_button/default", + "name": "default", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/beta/clipboard_copy_button/with_tooltip", + "name": "with_tooltip", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + } + ] + }, { "name": "close_button", "component": "CloseButton", @@ -4599,6 +4672,40 @@ } ] }, + { + "name": "octicon_symbols", + "component": "OcticonSymbols", + "status": "alpha", + "lookup_path": "primer/alpha/octicon_symbols", + "examples": [ + { + "preview_path": "primer/alpha/octicon_symbols/playground", + "name": "playground", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/alpha/octicon_symbols/default", + "name": "default", + "snapshot": "true", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + } + ] + }, { "name": "overlay", "component": "Overlay", @@ -5862,6 +5969,32 @@ "color-contrast" ] } + }, + { + "preview_path": "primer/beta/subhead/large_header", + "name": "large_header", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, + { + "preview_path": "primer/beta/subhead/medium_header", + "name": "medium_header", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } } ] }, @@ -6345,6 +6478,19 @@ ] } }, + { + "preview_path": "primer/alpha/text_field/with_auto_check_accepted", + "name": "with_auto_check_accepted", + "snapshot": "false", + "skip_rules": { + "wont_fix": [ + "region" + ], + "will_fix": [ + "color-contrast" + ] + } + }, { "preview_path": "primer/alpha/text_field/with_auto_check_error", "name": "with_auto_check_error", diff --git a/static/statuses.json b/static/statuses.json index 8c1c6f6855..4e932921c9 100644 --- a/static/statuses.json +++ b/static/statuses.json @@ -73,6 +73,8 @@ "Primer::Beta::Button": "beta", "Primer::Beta::ButtonGroup": "beta", "Primer::Beta::ClipboardCopy": "beta", + "Primer::Beta::ClipboardCopyBaseButton": "beta", + "Primer::Beta::ClipboardCopyButton": "beta", "Primer::Beta::CloseButton": "beta", "Primer::Beta::Counter": "beta", "Primer::Beta::Details": "beta", diff --git a/test/components/alpha/action_bar_test.rb b/test/components/alpha/action_bar_test.rb index cb409b315e..dc86bdde25 100644 --- a/test/components/alpha/action_bar_test.rb +++ b/test/components/alpha/action_bar_test.rb @@ -7,6 +7,43 @@ module Alpha class ActionBarTest < Minitest::Test include Primer::ComponentTestHelpers + def test_renders + render_inline(Primer::Alpha::ActionBar.new) do |component| + component.with_item_icon_button(icon: :pencil, label: "Button 1") + component.with_item_icon_button(icon: :pencil, label: "Button 2") + component.with_item_icon_button(icon: :pencil, label: "Button 3") + component.with_item_icon_button(icon: :pencil, label: "Button 4") + end + + assert_selector("action-bar") do + assert_selector("tool-tip", text: "Button 1") + assert_selector("tool-tip", text: "Button 2") + assert_selector("tool-tip", text: "Button 3") + assert_selector("tool-tip", text: "Button 4") + assert_selector("[data-target=\"action-bar.moreMenu\"]", visible: :hidden) + end + end + + def test_size_small + render_inline(Primer::Alpha::ActionBar.new(size: :small)) do |component| + component.with_item_icon_button(icon: :pencil, label: "Button 1") + component.with_item_icon_button(icon: :pencil, label: "Button 2") + component.with_item_divider + component.with_item_icon_button(icon: :pencil, label: "Button 3") + component.with_item_icon_button(icon: :pencil, label: "Button 4") + end + + assert_selector("[data-targets=\"action-bar.items\"] .Button--small", count: 4) + end + + def test_item_merges_item_arguments + render_inline(Primer::Alpha::ActionBar.new(size: :small)) do |component| + component.with_item_icon_button(icon: :pencil, label: "Button 1", item_arguments: { classes: "foo", tag: :span }) + end + + assert_selector("span.foo.ActionBar-item") + end + def test_renders_action_menu_items_with_type_button render_preview(:default) diff --git a/test/components/alpha/action_menu_test.rb b/test/components/alpha/action_menu_test.rb index bc0b936033..7ba19e9971 100644 --- a/test/components/alpha/action_menu_test.rb +++ b/test/components/alpha/action_menu_test.rb @@ -114,7 +114,7 @@ def test_renders_include_fragment_with_preload def test_disabled render_preview(:with_disabled_items) - assert_selector("li[aria-disabled=true]") do + assert_selector("li[role=none]") do assert_selector("button.ActionListContent[aria-disabled=true]", text: "Does something") assert_selector("a.ActionListContent[aria-disabled=true]", text: "Site") end diff --git a/test/components/alpha/tab_nav_test.rb b/test/components/alpha/tab_nav_test.rb index 202f751565..78d864edf0 100644 --- a/test/components/alpha/tab_nav_test.rb +++ b/test/components/alpha/tab_nav_test.rb @@ -106,7 +106,6 @@ def test_renders_custom_body_class end def test_does_not_double_render_extra_content_in_production - # rubocop:disable Rails/Inquiry Rails.stub(:env, "production".inquiry) do # Since we've forced ourselves into the prod environment and there's no secret key base # configured for prod, we have to fake it by setting the appropriate environment variable. diff --git a/test/components/alpha/tab_panels_test.rb b/test/components/alpha/tab_panels_test.rb index c9a5152ea0..1c501a09dd 100644 --- a/test/components/alpha/tab_panels_test.rb +++ b/test/components/alpha/tab_panels_test.rb @@ -87,7 +87,6 @@ def test_renders_extra_content end def test_does_not_double_render_extra_content_in_production - # rubocop:disable Rails/Inquiry Rails.stub(:env, "production".inquiry) do # Since we've forced ourselves into the prod environment and there's no secret key base # configured for prod, we have to fake it by setting the appropriate environment variable. diff --git a/test/components/beta/button_group_test.rb b/test/components/beta/button_group_test.rb index c4a58e3af1..f51e1b9f58 100644 --- a/test/components/beta/button_group_test.rb +++ b/test/components/beta/button_group_test.rb @@ -2,75 +2,83 @@ require "components/test_helper" -class PrimerBetaButtonGroupTest < Minitest::Test - include Primer::ComponentTestHelpers +module Primer + module Beta + class ButtonGroupTest < Minitest::Test + include Primer::ComponentTestHelpers - def test_does_not_render_without_buttons - render_inline(Primer::Beta::ButtonGroup.new) + def test_does_not_render_without_buttons + render_inline(Primer::Beta::ButtonGroup.new) - refute_selector("div.ButtonGroup") - end + refute_selector("div.ButtonGroup") + end - def test_renders_button_items - render_inline(Primer::Beta::ButtonGroup.new(scheme: :default)) { |component| component.with_button { "Button" } } + def test_renders_button_items + render_inline(Primer::Beta::ButtonGroup.new(scheme: :default)) { |component| component.with_button { "Button" } } - assert_selector("div.ButtonGroup") do - assert_selector("button.Button--secondary.Button", text: "Button") - end - end + assert_selector("div.ButtonGroup") do + assert_selector("button.Button--secondary.Button", text: "Button") + end + end - def test_renders_button_with_props - render_inline(Primer::Beta::ButtonGroup.new(scheme: :default)) do |component| - component.with_button { "Button" } - component.with_button(classes: "custom-class") { "Custom class" } - end + def test_renders_clipboard_copy_button + render_preview(:with_clipboard_copy_button) - assert_selector("div.ButtonGroup") do - assert_selector("button.Button--secondary.Button", text: "Button") - assert_selector("button.custom-class", text: "Custom class") - end - end + assert_selector "clipboard-copy[type=button]" + end - def test_does_not_render_content - render_inline(Primer::Beta::ButtonGroup.new) { "content" } + def test_renders_button_with_props + render_inline(Primer::Beta::ButtonGroup.new(scheme: :default)) do |component| + component.with_button { "Button" } + component.with_button(classes: "custom-class") { "Custom class" } + end - refute_text("content") - end + assert_selector("div.ButtonGroup") do + assert_selector("button.Button--secondary.Button", text: "Button") + assert_selector("button.custom-class", text: "Custom class") + end + end - def test_all_buttons_with_same_size - render_inline(Primer::Beta::ButtonGroup.new(size: :small)) do |component| - component.with_button(size: :medium) { "Medium" } - component.with_button(size: :large) { "Large" } - end + def test_does_not_render_content + render_inline(Primer::Beta::ButtonGroup.new) { "content" } - assert_selector("div.ButtonGroup") do - assert_selector("button.Button--small.Button", text: "Medium") - assert_selector("button.Button--small.Button", text: "Large") - end - end + refute_text("content") + end - def test_all_buttons_with_same_scheme - render_inline(Primer::Beta::ButtonGroup.new(scheme: :primary)) do |component| - component.with_button(scheme: :primary) { "Primary" } - component.with_button(scheme: :danger) { "Danger" } - end + def test_all_buttons_with_same_size + render_inline(Primer::Beta::ButtonGroup.new(size: :small)) do |component| + component.with_button(size: :medium) { "Medium" } + component.with_button(size: :large) { "Large" } + end - assert_selector("div.ButtonGroup") do - assert_selector("button.Button--primary.Button", text: "Primary") - assert_selector("button.Button--primary.Button", text: "Danger") - end - end + assert_selector("div.ButtonGroup") do + assert_selector("button.Button--small.Button", text: "Medium") + assert_selector("button.Button--small.Button", text: "Large") + end + end - def test_button_with_icon_button - render_inline(Primer::Beta::ButtonGroup.new) do |component| - component.with_button { "Button" } - component.with_button(icon: :star, "aria-label": "Icon button") - end + def test_all_buttons_with_same_scheme + render_inline(Primer::Beta::ButtonGroup.new(scheme: :primary)) do |component| + component.with_button(scheme: :primary) { "Primary" } + component.with_button(scheme: :danger) { "Danger" } + end + + assert_selector("div.ButtonGroup") do + assert_selector("button.Button--primary.Button", text: "Primary") + assert_selector("button.Button--primary.Button", text: "Danger") + end + end + + def test_button_with_icon_button + render_inline(Primer::Beta::ButtonGroup.new) do |component| + component.with_button { "Button" } + component.with_button(icon: :star, "aria-label": "Icon button") + end - assert_selector("div.ButtonGroup") do - assert_selector("button.Button", text: "Button") - assert_selector("div.Button-withTooltip") do - assert_selector(".octicon.octicon-star") + assert_selector("div.ButtonGroup") do + assert_selector("button.Button", text: "Button") + assert_selector(".octicon.octicon-star") + end end end end diff --git a/test/components/beta/subhead_test.rb b/test/components/beta/subhead_test.rb index 08636ac1f3..cd2c89c54a 100644 --- a/test/components/beta/subhead_test.rb +++ b/test/components/beta/subhead_test.rb @@ -79,6 +79,22 @@ def test_renders_a_description assert_selector(".Subhead .Subhead-description", text: "My Description") end + def test_renders_medium_heading + render_inline(Primer::Beta::Subhead.new(heading: "Hello world")) do |component| + component.with_heading(size: :medium) { "Hello World" } + end + + assert_selector(".Subhead .Subhead-heading--medium", text: "Hello World") + end + + def test_renders_large_heading_by_default + render_inline(Primer::Beta::Subhead.new(heading: "Hello world")) do |component| + component.with_heading { "Hello World" } + end + + assert_selector(".Subhead .Subhead-heading--large", text: "Hello World") + end + def test_status assert_component_state(Primer::Beta::Subhead, :beta) end diff --git a/test/components/component_test.rb b/test/components/component_test.rb index 39b4075235..489762134c 100644 --- a/test/components/component_test.rb +++ b/test/components/component_test.rb @@ -75,6 +75,7 @@ class PrimerComponentTest < Minitest::Test [Primer::Beta::ButtonGroup, {}, proc { |component| component.with_button { "Button" } }], [Primer::Alpha::ButtonMarketing, {}], [Primer::Beta::ClipboardCopy, { "aria-label": "String that will be read to screenreaders", value: "String that will be copied" }], + [Primer::Beta::ClipboardCopyButton, { "aria-label": "String that will be read to screenreaders", value: "String that will be copied" }], [Primer::ConditionalWrapper, { condition: true, tag: :div }], [Primer::Beta::CloseButton, {}], [Primer::Beta::Counter, { count: 1 }], @@ -228,7 +229,6 @@ def test_deny_single_argument_does_not_raise_in_production with_raise_on_invalid_options(true) do assert_raises(ArgumentError) { Primer::DenyComponent.new(class: "foo") } - # rubocop:disable Rails/Inquiry Rails.stub(:env, "production".inquiry) do Primer::DenyComponent.new(class: "foo") end diff --git a/test/components/primer/alpha/action_bar_test.rb b/test/components/primer/alpha/action_bar_test.rb deleted file mode 100644 index c1a4487bfa..0000000000 --- a/test/components/primer/alpha/action_bar_test.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -require "components/test_helper" - -class PrimerAlphaActionBarTest < Minitest::Test - include Primer::ComponentTestHelpers - - def test_renders - render_inline(Primer::Alpha::ActionBar.new) do |component| - component.with_item_icon_button(icon: :pencil, label: "Button 1") - component.with_item_icon_button(icon: :pencil, label: "Button 2") - component.with_item_icon_button(icon: :pencil, label: "Button 3") - component.with_item_icon_button(icon: :pencil, label: "Button 4") - end - - assert_selector("action-bar") do - assert_selector("tool-tip", text: "Button 1") - assert_selector("tool-tip", text: "Button 2") - assert_selector("tool-tip", text: "Button 3") - assert_selector("tool-tip", text: "Button 4") - assert_selector("[data-target=\"action-bar.moreMenu\"]", visible: :hidden) - end - end - - def test_size_small - render_inline(Primer::Alpha::ActionBar.new(size: :small)) do |component| - component.with_item_icon_button(icon: :pencil, label: "Button 1") - component.with_item_icon_button(icon: :pencil, label: "Button 2") - component.with_item_divider - component.with_item_icon_button(icon: :pencil, label: "Button 3") - component.with_item_icon_button(icon: :pencil, label: "Button 4") - end - - assert_selector("[data-targets=\"action-bar.items\"] .Button--small", count: 4) - end - - def test_item_merges_item_arguments - render_inline(Primer::Alpha::ActionBar.new(size: :small)) do |component| - component.with_item_icon_button(icon: :pencil, label: "Button 1", item_arguments: { classes: "foo", tag: :span }) - end - - assert_selector("span.foo.ActionBar-item") - end -end diff --git a/test/components/primer/alpha/segmented_control_test.rb b/test/components/primer/alpha/segmented_control_test.rb index a2f80e0e9b..c872b4560e 100644 --- a/test/components/primer/alpha/segmented_control_test.rb +++ b/test/components/primer/alpha/segmented_control_test.rb @@ -48,12 +48,10 @@ def test_renders_icons_only render_preview(:icon_only_medium) assert_selector("segmented-control ul.SegmentedControl") do - assert_selector(".Button-withTooltip", count: 3) do - assert_selector("button.Button[id^=\"icon-button-\"]") do - assert_selector(".Button-visual") - end - assert_selector("tool-tip[for^=\"icon-button-\"]", visible: false) + assert_selector("button.Button[id^=\"icon-button-\"]") do + assert_selector(".Button-visual") end + assert_selector("tool-tip[for^=\"icon-button-\"]", visible: false) end end diff --git a/test/components/primer/beta/button_test.rb b/test/components/primer/beta/button_test.rb index 40307ed657..6e757654c8 100644 --- a/test/components/primer/beta/button_test.rb +++ b/test/components/primer/beta/button_test.rb @@ -45,7 +45,7 @@ def test_renders_button_with_tooltip "Button" end - assert_selector(".Button-withTooltip .Button", text: "Button") + assert_selector(".Button", text: "Button") assert_selector(".Button ~ tool-tip[for='button-id']", visible: false) end diff --git a/test/components/primer/beta/icon_button_test.rb b/test/components/primer/beta/icon_button_test.rb index 535e90e475..b309522616 100644 --- a/test/components/primer/beta/icon_button_test.rb +++ b/test/components/primer/beta/icon_button_test.rb @@ -31,16 +31,9 @@ def test_renders_description_tooltip assert_selector(".Button.Button--iconOnly[aria-describedby='#{tooltip_id}']") end - def test_adds_wrapper_arguments - render_inline(Primer::Beta::IconButton.new(icon: :star, "aria-label": "Star", wrapper_arguments: { id: "foo" })) - - assert_selector(".Button-withTooltip#foo") - end - def test_allows_hiding_tooltip render_inline(Primer::Beta::IconButton.new(icon: :star, "aria-label": "Star", show_tooltip: false)) - refute_selector(".Button-withTooltip") refute_selector("tool-tip") end @@ -51,6 +44,6 @@ def test_aria_label_is_set_when_tooltips_are_hidden def test_forces_button_tag_when_disabled render_inline(Primer::Beta::IconButton.new(icon: :star, "aria-label": "Star", disabled: true, tag: :a)) - assert_selector(".Button-withTooltip button[disabled]") + assert_selector("button[disabled]") end end diff --git a/test/components/primer/open_project/page_header_test.rb b/test/components/primer/open_project/page_header_test.rb index 996ee1fbfd..06cab5fb3a 100644 --- a/test/components/primer/open_project/page_header_test.rb +++ b/test/components/primer/open_project/page_header_test.rb @@ -58,8 +58,7 @@ def test_renders_back_button assert_text("Hello") assert_selector(".PageHeader-title") - assert_selector(".PageHeader-backButton") - assert_selector(".Button-withTooltip a[href='/link']") + assert_selector("a.PageHeader-backButton[href='/link']") end def test_renders_breadcrumbs diff --git a/test/css/component_selector_use_test.rb b/test/css/component_selector_use_test.rb index 4562ffc403..3de5ff65e2 100644 --- a/test/css/component_selector_use_test.rb +++ b/test/css/component_selector_use_test.rb @@ -2,10 +2,9 @@ require "system/test_case" -require_relative "./test_helper" +require_relative "test_helper" Dir["app/components/**/*.rb"].each { |file| require_relative "../../#{file}" } -# rubocop:disable Style/WordArray IGNORED_SELECTORS = { # these are all provided by primer/css :global => ["octicon", "btn-octicon", "btn", "btn-primary", "btn-danger", "btn-outline"], diff --git a/test/css/component_specific_selectors_test.rb b/test/css/component_specific_selectors_test.rb index 9600de9f1f..2c86ad2278 100644 --- a/test/css/component_specific_selectors_test.rb +++ b/test/css/component_specific_selectors_test.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./test_helper" +require_relative "test_helper" Dir["app/components/**/*.rb"].each { |file| require_relative "../../#{file}" } # Test Component Specific Selectors @@ -64,15 +64,13 @@ class ComponentSpecificSelectorsTest < Minitest::Test ".FormControl-check-group-wrap fieldset", ".FormControl-toggleSwitchInput", ".FormControl-spacingWrapper", - ".FormControl-horizontalGroup" + ".FormControl-horizontalGroup", + ".FormControl-inlineValidation--success", ], Primer::Alpha::ButtonMarketing => [ ".btn-mktg.disabled", ".btn-small-mktg" ], - Primer::Alpha::SegmentedControl => [ - ".Button-withTooltip" - ], Primer::Alpha::UnderlineNav => [ ".UnderlineNav .Counter--primary", ".UnderlineNav-item.selected", diff --git a/test/lib/constants_test.rb b/test/lib/constants_test.rb index 502c365c78..d6a43bc72a 100644 --- a/test/lib/constants_test.rb +++ b/test/lib/constants_test.rb @@ -9,7 +9,7 @@ def test_get_array constant: "TAG_OPTIONS" ) - assert_equal tag_options, %w[button a summary] + assert_equal tag_options, %w[button a summary clipboard-copy] end def test_get_symbolizes_array_elements @@ -19,7 +19,7 @@ def test_get_symbolizes_array_elements symbolize: true ) - assert_equal tag_options, %w[:button :a :summary] + assert_equal tag_options, %w[:button :a :summary :clipboard-copy] end def test_get_hash diff --git a/test/lib/primer/forms/integration_forms_test.rb b/test/lib/primer/forms/integration_forms_test.rb index 5ddc77fa2e..48c13a707b 100644 --- a/test/lib/primer/forms/integration_forms_test.rb +++ b/test/lib/primer/forms/integration_forms_test.rb @@ -36,8 +36,8 @@ def test_multi_submit click_on("Submit") result = JSON.parse(page.text) - assert result["country"], "CA" - assert result["region"], "SK" + assert_equal result["country"], "CA" + assert_equal result["region"], "SK" end def test_toggle_switch_form_errors @@ -62,6 +62,17 @@ def test_toggle_switch_form_errors refute_selector("#error-toggle", text: "Bad CSRF token") end + def test_action_menu_form_input + visit_preview(:action_menu_form, route_format: :json) + + click_on("Select...") + click_on("Lopez Island") + click_on("Submit") + + result = JSON.parse(page.text) + assert_equal result.dig("other_params", "city"), "lopez_island" + end + private def wait_for_toggle_switch_spinner diff --git a/test/lib/rubocop/deprecated_components_test.rb b/test/lib/rubocop/deprecated_components_test.rb index ea89cb308e..f9fbee205c 100644 --- a/test/lib/rubocop/deprecated_components_test.rb +++ b/test/lib/rubocop/deprecated_components_test.rb @@ -30,8 +30,8 @@ def test_raises_offense_if_calling_legacy_component RUBY assert_equal 2, cop.offenses.count - assert_equal "'Primer::Tooltip' has been deprecated. Please update your code to use 'Primer::Alpha::Tooltip'. Use Rubocop's auto-correct, or replace it yourself.", cop.offenses[0].message - assert_equal "'Primer::BlankslateComponent' has been deprecated. Please update your code to use 'Primer::Beta::Blankslate'. Use Rubocop's auto-correct, or replace it yourself.", cop.offenses[1].message + assert_equal "Primer/DeprecatedComponents: 'Primer::Tooltip' has been deprecated. Please update your code to use 'Primer::Alpha::Tooltip'. Use Rubocop's auto-correct, or replace it yourself.", cop.offenses[0].message + assert_equal "Primer/DeprecatedComponents: 'Primer::BlankslateComponent' has been deprecated. Please update your code to use 'Primer::Beta::Blankslate'. Use Rubocop's auto-correct, or replace it yourself.", cop.offenses[1].message end def test_raises_offense_if_calling_legacy_component_with_args @@ -63,6 +63,6 @@ def test_suggests_alternative_component_if_available RUBY assert_equal 1, cop.offenses.count - assert_equal "'Primer::Tooltip' has been deprecated. Please update your code to use 'Primer::Alpha::Tooltip'. Use Rubocop's auto-correct, or replace it yourself.", cop.offenses.first.message + assert_equal "Primer/DeprecatedComponents: 'Primer::Tooltip' has been deprecated. Please update your code to use 'Primer::Alpha::Tooltip'. Use Rubocop's auto-correct, or replace it yourself.", cop.offenses.first.message end end diff --git a/test/lib/rubocop/deprecated_label_schemes_test.rb b/test/lib/rubocop/deprecated_label_schemes_test.rb index c1a83521af..0e25a3a96d 100644 --- a/test/lib/rubocop/deprecated_label_schemes_test.rb +++ b/test/lib/rubocop/deprecated_label_schemes_test.rb @@ -24,7 +24,7 @@ def test_no_deprecated_arguments end def test_argument_not_a_symbol - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) Primer::Beta::Label.new(scheme: scheme) RUBY diff --git a/test/lib/rubocop/deprecated_label_variants_test.rb b/test/lib/rubocop/deprecated_label_variants_test.rb index 979b4a5262..3e9d9037a3 100644 --- a/test/lib/rubocop/deprecated_label_variants_test.rb +++ b/test/lib/rubocop/deprecated_label_variants_test.rb @@ -24,7 +24,7 @@ def test_no_deprecated_arguments end def test_argument_not_a_string_or_symbol - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) Primer::Beta::Label.new(variant: variant) RUBY diff --git a/test/lib/rubocop/primer_octicon_test.rb b/test/lib/rubocop/primer_octicon_test.rb index f723ee26e8..fbb660579f 100644 --- a/test/lib/rubocop/primer_octicon_test.rb +++ b/test/lib/rubocop/primer_octicon_test.rb @@ -32,7 +32,7 @@ def test_octicon end def test_octicon_with_title - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) octicon(:icon, title: "hello") RUBY @@ -40,7 +40,7 @@ def test_octicon_with_title end def test_octicon_with_title_interpolation - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) octicon(:icon, title: "hello <%= interpolation %>") RUBY @@ -48,7 +48,7 @@ def test_octicon_with_title_interpolation end def test_octicon_with_title_method - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) octicon(:icon, title: some_method) RUBY @@ -187,7 +187,7 @@ def test_converts_keeps_text_white end def test_octicon_with_class_that_cant_be_converted - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) octicon(:icon, class: "mr-1 text-fuzzy-waffle") RUBY @@ -195,7 +195,7 @@ def test_octicon_with_class_that_cant_be_converted end def test_autocorrects_unknown_color_to_class - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) octicon(:icon, class: "mr-1 color-unknown-color") RUBY @@ -203,7 +203,7 @@ def test_autocorrects_unknown_color_to_class end def test_corrects_without_color - investigate(cop, <<-'RUBY') + investigate(cop, <<-RUBY) octicon(:icon, class: "mr-1") RUBY diff --git a/test/lib/rubocop/system_arguments_instead_of_class_test.rb b/test/lib/rubocop/system_arguments_instead_of_class_test.rb index 9e18ee3249..b0a56be2ee 100644 --- a/test/lib/rubocop/system_arguments_instead_of_class_test.rb +++ b/test/lib/rubocop/system_arguments_instead_of_class_test.rb @@ -21,7 +21,7 @@ def test_primer_component RUBY assert_equal 1, cop.offenses.count - assert_equal "Avoid using CSS classes when you can use System Arguments: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message + assert_equal "Primer/SystemArgumentInsteadOfClass: Avoid using CSS classes when you can use System Arguments: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message end def test_non_primer_view_helper @@ -38,7 +38,7 @@ def test_primer_view_helper RUBY assert_equal 1, cop.offenses.count - assert_equal "Avoid using CSS classes when you can use System Arguments: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message + assert_equal "Primer/SystemArgumentInsteadOfClass: Avoid using CSS classes when you can use System Arguments: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message end def test_custom_class @@ -47,7 +47,7 @@ def test_custom_class RUBY assert_equal 1, cop.offenses.count - assert_equal "Avoid using CSS classes when you can use System Arguments: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message + assert_equal "Primer/SystemArgumentInsteadOfClass: Avoid using CSS classes when you can use System Arguments: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message end def test_no_classes diff --git a/test/lib/rubocop/test_selector_test.rb b/test/lib/rubocop/test_selector_test.rb index ec69ca0f10..c4d7a61703 100644 --- a/test/lib/rubocop/test_selector_test.rb +++ b/test/lib/rubocop/test_selector_test.rb @@ -21,7 +21,7 @@ def test_primer_component_with_symbol_key RUBY assert_equal 1, cop.offenses.count - assert_equal "Prefer the `test_selector` argument over manually generating a `data-test-selector` attribute: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message + assert_equal "Primer/TestSelector: Prefer the `test_selector` argument over manually generating a `data-test-selector` attribute: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message end def test_primer_component_with_string_key @@ -30,7 +30,7 @@ def test_primer_component_with_string_key RUBY assert_equal 1, cop.offenses.count - assert_equal "Prefer the `test_selector` argument over manually generating a `data-test-selector` attribute: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message + assert_equal "Primer/TestSelector: Prefer the `test_selector` argument over manually generating a `data-test-selector` attribute: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message end def test_non_primer_view_helper @@ -47,7 +47,7 @@ def test_primer_view_helper RUBY assert_equal 1, cop.offenses.count - assert_equal "Prefer the `test_selector` argument over manually generating a `data-test-selector` attribute: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message + assert_equal "Primer/TestSelector: Prefer the `test_selector` argument over manually generating a `data-test-selector` attribute: https://primer.style/view-components/system-arguments.\n", cop.offenses.first.message end def test_no_test_selector diff --git a/test/performance/bench_deny.rb b/test/performance/bench_deny.rb index 1d3128cc38..55b2248201 100644 --- a/test/performance/bench_deny.rb +++ b/test/performance/bench_deny.rb @@ -11,7 +11,6 @@ class BenchDeny < Minitest::Benchmark def bench_deny_single_argument non_prod_results = measure_ips { Primer::DenyComponent.new } - # rubocop:disable Rails/Inquiry prod_results = Rails.stub(:env, "production".inquiry) do measure_ips { Primer::DenyComponent.new } end diff --git a/test/system/alpha/action_menu_test.rb b/test/system/alpha/action_menu_test.rb index 557e192591..6d478bfa4e 100644 --- a/test/system/alpha/action_menu_test.rb +++ b/test/system/alpha/action_menu_test.rb @@ -4,6 +4,8 @@ module Alpha class IntegrationActionMenuTest < System::TestCase + include Primer::ClipboardTestHelpers + ###### HELPER METHODS ###### def click_on_invoker_button @@ -36,30 +38,6 @@ def focus_on_invoker_button JS end - def stub_clipboard! - page.evaluate_script(<<~JS) - (() => { - navigator.clipboard.writeText = async (text) => { - this.text = text; - return Promise.resolve(null); - }; - - navigator.clipboard.readText = async () => { - return Promise.resolve(this.text); - }; - })() - JS - - @clipboard_stubbed = true - end - - def read_clipboard - page.evaluate_async_script(<<~JS) - const [done] = arguments; - navigator.clipboard.readText().then(done).catch((e) => done(e)); - JS - end - def assert_no_alert(message = nil, &block) accept_alert(&block) assert false, message || "Unexpected alert dialog" @@ -67,22 +45,8 @@ def assert_no_alert(message = nil, &block) # expected behavior end - def capture_clipboard - stub_clipboard! unless clipboard_stubbed? - yield - read_clipboard - end - ########## TESTS ############ - def setup - @clipboard_stubbed = false - end - - def clipboard_stubbed? - @clipboard_stubbed - end - def test_dynamic_labels visit_preview(:single_select_with_internal_label) assert_selector("action-menu button[aria-controls]", text: "Menu: Quote reply") diff --git a/test/system/alpha/text_field_test.rb b/test/system/alpha/text_field_test.rb index 05301121bd..38dd1c771e 100644 --- a/test/system/alpha/text_field_test.rb +++ b/test/system/alpha/text_field_test.rb @@ -21,7 +21,35 @@ def test_auto_check_error find("input[type=text]").fill_in(with: "foobar") - assert_selector ".FormControl-inlineValidation", text: "Error! Error!" + assert_selector ".FormControl-inlineValidation", text: "The name foobar is already taken." + assert_selector ".FormControl-inlineValidation--visual .octicon-alert-fill" + refute_selector ".FormControl-inlineValidation--visual .octicon-check-circle-fill" + end + + def test_auto_check_accepted + visit_preview(:with_auto_check_accepted) + + assert_selector ".FormControl-inlineValidation", visible: :hidden, text: "" + + find("input[type=text]").fill_in(with: "foobar") + + assert_selector ".FormControl-inlineValidation.FormControl-inlineValidation--success" do |message| + assert_match "The name foobar is available.", message.text + end + refute_selector ".FormControl-inlineValidation--visual .octicon-alert-fill" + assert_selector ".FormControl-inlineValidation--visual .octicon-check-circle-fill" + end + + def test_auto_check_ok + visit_preview(:with_auto_check_ok) + + assert_selector ".FormControl-inlineValidation", visible: :hidden, text: "" + + find("input[type=text]").fill_in(with: "foobar") + + refute_selector ".FormControl-inlineValidation" + refute_selector ".FormControl-inlineValidation--visual .octicon-alert-fill" + refute_selector ".FormControl-inlineValidation--visual .octicon-check-circle-fill" end def test_custom_data_target diff --git a/test/system/beta/button_group_test.rb b/test/system/beta/button_group_test.rb new file mode 100644 index 0000000000..eed0c9cb52 --- /dev/null +++ b/test/system/beta/button_group_test.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require "system/test_case" + +module Beta + class IntegrationButtonGroupTest < System::TestCase + include Primer::ClipboardTestHelpers + + def test_clipboard_copy_button_copies_text + visit_preview(:with_clipboard_copy_button) + + clipboard_text = capture_clipboard do + find("#button-2").click + end + + assert_equal "Copyable value", clipboard_text + end + end +end diff --git a/test/system/beta/clipboard_copy_button_test.rb b/test/system/beta/clipboard_copy_button_test.rb new file mode 100644 index 0000000000..253aac402e --- /dev/null +++ b/test/system/beta/clipboard_copy_button_test.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require "system/test_case" + +module Beta + class IntegrationClipboardCopyButtonTest < System::TestCase + include Primer::ClipboardTestHelpers + + def test_copies_text + visit_preview(:playground) + + clipboard_text = capture_clipboard do + find("#clipboard-button").click + end + + assert_equal "Text to copy", clipboard_text + end + + def test_includes_tooltip + visit_preview(:with_tooltip) + + assert_selector ".Button + tool-tip", visible: :all + end + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 992379cb2c..20b4320b12 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -19,6 +19,7 @@ require "rails/test_help" require "view_component/test_helpers" require "test_helpers/component_test_helpers" +require "test_helpers/clipboard_test_helpers" require "action_controller/railtie" require "rails/test_unit/railtie" require "active_model/railtie" diff --git a/test/test_helpers/clipboard_test_helpers.rb b/test/test_helpers/clipboard_test_helpers.rb new file mode 100644 index 0000000000..f41be8533e --- /dev/null +++ b/test/test_helpers/clipboard_test_helpers.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module Primer + module ClipboardTestHelpers + module MethodOverrides + def setup + @clipboard_stubbed = false + super + end + end + + def self.included(base) + base.prepend(MethodOverrides) + end + + def clipboard_stubbed? + @clipboard_stubbed + end + + def stub_clipboard! + page.evaluate_script(<<~JS) + (() => { + navigator.clipboard.writeText = async (text) => { + this.text = text; + return Promise.resolve(null); + }; + + navigator.clipboard.readText = async () => { + return Promise.resolve(this.text); + }; + })() + JS + + @clipboard_stubbed = true + end + + def read_clipboard + page.evaluate_async_script(<<~JS) + const [done] = arguments; + navigator.clipboard.readText().then(done).catch((e) => done(e)); + JS + end + + def capture_clipboard + stub_clipboard! unless clipboard_stubbed? + yield + read_clipboard + end + end +end diff --git a/test/test_helpers/cuprite_setup.rb b/test/test_helpers/cuprite_setup.rb index e48e36267e..ff0168598c 100644 --- a/test/test_helpers/cuprite_setup.rb +++ b/test/test_helpers/cuprite_setup.rb @@ -8,13 +8,10 @@ Capybara.register_driver(:primer_cuprite) do |app| Capybara::Cuprite::Driver.new( app, - **{ - # Enable debugging capabilities - inspector: true, - # Allow running Chrome in a headful mode by setting HEADLESS env - # var to a falsey value - headless: !ENV["HEADLESS"].in?(%w[n 0 no false]) - } + inspector: true, + # Allow running Chrome in a headful mode by setting HEADLESS env + # var to a falsey value + headless: !ENV["HEADLESS"].in?(%w[n 0 no false]) ) end diff --git a/test/test_helpers/retry.rb b/test/test_helpers/retry.rb index 04292e689b..a3288347f6 100644 --- a/test/test_helpers/retry.rb +++ b/test/test_helpers/retry.rb @@ -29,7 +29,7 @@ def run_one_method(klass, method_name) def should_retry?(failures) return false if failures.empty? - errors = failures.map(&:error).map(&:class) + errors = failures.map { |failure| failure.error.class } (errors & Minitest::Retry::ERRORS).any? end end