diff --git a/.changeset/olive-wasps-call.md b/.changeset/olive-wasps-call.md new file mode 100644 index 0000000000..5aecd69cca --- /dev/null +++ b/.changeset/olive-wasps-call.md @@ -0,0 +1,5 @@ +--- +"@openproject/primer-view-components": patch +--- + +Update Ruby dependencies to address upstream security notices diff --git a/.changeset/warm-wombats-notice.md b/.changeset/warm-wombats-notice.md new file mode 100644 index 0000000000..d344df05a1 --- /dev/null +++ b/.changeset/warm-wombats-notice.md @@ -0,0 +1,5 @@ +--- +"@openproject/primer-view-components": patch +--- + +Revert tab container upgrade diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8e37454bec..4597745f2c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v4 - name: Get specific changed files id: changed-files - uses: tj-actions/changed-files@v44.3.0 + uses: tj-actions/changed-files@v44.4.0 with: files: | docs/**/*.md @@ -39,7 +39,7 @@ jobs: - uses: actions/checkout@v4 - name: Get specific changed files id: changed-files - uses: tj-actions/changed-files@v44.3.0 + uses: tj-actions/changed-files@v44.4.0 with: files: | app/**/*.rb @@ -62,7 +62,7 @@ jobs: - uses: actions/checkout@v4 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v44.3.0 + uses: tj-actions/changed-files@v44.4.0 with: files: | app/components/**/*.erb @@ -82,7 +82,7 @@ jobs: - uses: actions/checkout@v4 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v44.3.0 + uses: tj-actions/changed-files@v44.4.0 with: files: | app/components/**/*.ts @@ -103,7 +103,7 @@ jobs: - uses: actions/checkout@v4 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v44.3.0 + uses: tj-actions/changed-files@v44.4.0 with: files: | app/components/**/*.pcss diff --git a/.github/workflows/release-canary.yml b/.github/workflows/release-canary.yml index 0fd3276855..648c561a68 100644 --- a/.github/workflows/release-canary.yml +++ b/.github/workflows/release-canary.yml @@ -10,7 +10,7 @@ jobs: release-canary: name: npm if: ${{ github.repository == 'opf/primer_view_components' }} - uses: primer/.github/.github/workflows/release_canary.yml@v1.0.0 + uses: primer/.github/.github/workflows/release_canary.yml@v2.0.1 with: install: npm i secrets: diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml index 98df442f7a..d6498e5294 100644 --- a/.github/workflows/release-candidate.yml +++ b/.github/workflows/release-candidate.yml @@ -9,7 +9,7 @@ jobs: release-candidate: name: npm if: ${{ github.repository == 'opf/primer_view_components' }} - uses: primer/.github/.github/workflows/release_candidate.yml@v1.0.0 + uses: primer/.github/.github/workflows/release_candidate.yml@v2.0.1 secrets: gh_token: ${{ secrets.GITHUB_TOKEN }} npm_token: ${{ secrets.NPM_AUTH_TOKEN_SHARED }} diff --git a/.github/workflows/release_tracking.yml b/.github/workflows/release_tracking.yml new file mode 100644 index 0000000000..7b509d8fa9 --- /dev/null +++ b/.github/workflows/release_tracking.yml @@ -0,0 +1,19 @@ +name: Release Event Tracking +# Measure a datadog event every time a release occurs + +on: + pull_request: + types: + - closed + - opened + - reopened + + release: + types: [published] + +jobs: + release-tracking: + name: Release Tracking + uses: primer/.github/.github/workflows/release_tracking.yml@create_release_tracking_workflow + secrets: + datadog_api_key: ${{ secrets.DATADOG_API_KEY }} diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/default.png index 670dfed3c1..c5cc37dd9a 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/focused.png index 8ef3e9cb03..45cb73a576 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/default/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/default.png index 2ae61cfd8b..e5de502c89 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/focused.png index 5f237d9b4b..28a536f730 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_actions/focused.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/default.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/default.png index e786b7dec9..87d5acb961 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/default.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/default.png differ diff --git a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/focused.png b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/focused.png index 9b4a20ca44..188ee20cde 100644 Binary files a/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/focused.png and b/.playwright/screenshots/snapshots.test.ts-snapshots/primer/alpha/underline_panels/with_icons_and_counters/focused.png differ diff --git a/Gemfile b/Gemfile index bdf3a56e18..75a26d61f7 100644 --- a/Gemfile +++ b/Gemfile @@ -35,7 +35,7 @@ gem "webpacker", "~> 5.0" # Reduces boot times through caching; required in config/boot.rb gem "bootsnap", ">= 1.4.2", require: false -gem "lookbook", "~> 2.2.2" unless rails_version.to_f < 7 +gem "lookbook", "~> 2.3.0" unless rails_version.to_f < 7 gem "view_component", path: ENV["VIEW_COMPONENT_PATH"] if ENV["VIEW_COMPONENT_PATH"] gem "kramdown", "~> 2.4" @@ -48,7 +48,6 @@ end # development dependencies group :development do gem "allocation_stats", "~> 0.1" - gem "allocation_tracer", "~> 0.6.3" gem "benchmark-ips", "~> 2.13.0" gem "capybara", "~> 3.39.2" gem "cuprite", "~> 0.15" diff --git a/Gemfile.lock b/Gemfile.lock index b818bcd00a..8911fccdbe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,19 +40,18 @@ GEM addressable (2.8.6) 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) base64 (0.2.0) benchmark-ips (2.13.0) - better_html (2.0.2) + better_html (2.1.1) actionview (>= 6.0) activesupport (>= 6.0) ast (~> 2.0) erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.7) + bigdecimal (3.1.8) bootsnap (1.18.3) msgpack (~> 1.2) builder (3.2.4) @@ -72,7 +71,7 @@ GEM bigdecimal rexml crass (1.0.6) - css_parser (1.16.0) + css_parser (1.17.1) addressable cuprite (0.15) capybara (~> 3.0) @@ -100,11 +99,11 @@ GEM hashdiff (1.1.0) htmlbeautifier (1.4.3) htmlentities (4.3.4) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) io-console (0.7.2) - irb (1.12.0) - rdoc + irb (1.13.1) + rdoc (>= 4.0.0) reline (>= 0.4.2) json (2.7.2) kramdown (2.4.0) @@ -116,7 +115,7 @@ GEM loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) - lookbook (2.2.2) + lookbook (2.3.0) activemodel css_parser htmlbeautifier (~> 1.3) @@ -132,21 +131,21 @@ GEM matrix (0.4.2) method_source (1.1.0) mini_mime (1.1.5) - mini_portile2 (2.8.5) + mini_portile2 (2.8.6) minitest (5.22.3) mocha (2.2.0) ruby2_keywords (>= 0.0.5) msgpack (1.7.2) mutex_m (0.2.0) - nio4r (2.7.0) - nokogiri (1.16.3) + nio4r (2.7.3) + nokogiri (1.16.5) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nokogiri (1.16.3-x86_64-linux) + nokogiri (1.16.5-x86_64-linux) racc (~> 1.4) openproject-octicons (19.9.0) parallel (1.24.0) - parser (3.3.0.5) + parser (3.3.1.0) ast (~> 2.4.1) racc pry (0.14.2) @@ -154,11 +153,11 @@ GEM method_source (~> 1.0) psych (5.1.2) stringio - public_suffix (5.0.4) + public_suffix (5.0.5) puma (6.4.2) nio4r (~> 2.0) racc (1.7.3) - rack (3.0.10) + rack (3.0.11) rack-cors (2.0.2) rack (>= 2.0.0) rack-proxy (0.7.7) @@ -193,12 +192,12 @@ GEM rdoc (6.6.3.1) psych (>= 4.0.0) redcarpet (3.6.0) - regexp_parser (2.9.0) - reline (0.5.0) + regexp_parser (2.9.1) + reline (0.5.6) io-console (~> 0.5) rexml (3.2.6) - rouge (4.2.0) - rubocop (1.63.2) + rouge (4.2.1) + rubocop (1.63.5) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -209,8 +208,8 @@ GEM rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.2) - parser (>= 3.3.0.4) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) rubocop-github (0.20.0) rubocop (>= 1.37) rubocop-performance (>= 1.15) @@ -228,7 +227,7 @@ GEM ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) - selenium-webdriver (4.19.0) + selenium-webdriver (4.20.1) base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) @@ -293,7 +292,6 @@ DEPENDENCIES activemodel (= 7.1.1) activesupport (= 7.1.1) allocation_stats (~> 0.1) - allocation_tracer (~> 0.6.3) benchmark-ips (~> 2.13.0) bootsnap (>= 1.4.2) capybara (~> 3.39.2) @@ -303,7 +301,7 @@ DEPENDENCIES erblint-github (~> 0.5.1) kramdown (~> 2.4) listen (~> 3.9) - lookbook (~> 2.2.2) + lookbook (~> 2.3.0) matrix (~> 0.4.2) mocha openproject-primer_view_components! diff --git a/app/components/primer/alpha/banner.rb b/app/components/primer/alpha/banner.rb index 93644a56eb..da849bf3fc 100644 --- a/app/components/primer/alpha/banner.rb +++ b/app/components/primer/alpha/banner.rb @@ -5,25 +5,25 @@ module Alpha # Use `Banner` to highlight important information. # # @accessibility - # Given that Banner is made visually prominent to sighted users through the use of icons and color, consider providing a heading and designating the Banner as a region landmark to improve navigability and discoverability of the Banner of assistive technology users. At this time, the PVC Banner does not render a heading nor render as a region landmark by default. This may be introduced in the future [as a breaking API change](https://github.com/primer/view_components/issues/2619). For now, consider providing an appropriate heading inside of the Banner and rendering the Banner as a `
` tag with `aria-labelledby="switch-this-with-banner-heading-id"` to implicitly designate the Banner as a region landmark. + # ### Improve discoverability with a heading and landmark + # Banners are made visually prominent with icons and colors to immediately draw attention. # - # A Banner can be used in one of two ways – to highlight information on a page, or to communicate an urgent message/feedback for a user action. For the latter scenario, it may be necessary to use a live region or focus management technique to ensure that the Banner is discoverable and accessible for all users. Otherwise, the Banner can easily be missed, including by those using magnification software or screen reader users who may not realize that a Banner has appeared. The appropriate technique to use is highly context-dependent. Visit the [Banner's Accessibility section](https://primer.style/components/banner#accessibility) or defer to the accessibility team to determine if your scenario requires either techniques. + # To ensure the Banner is also easily discoverable for assistive technology users, consider: + # 1. Providing a heading inside of the Banner that describes the purpose of the Banner. + # 2. Designating the Banner as a `region` landmark. This can be achieved by rendering the Banner as a `section` with an `aria-labelledby` pointing to the heading. # - # ### Announcing a Banner - # When a Banner is used to communicate non-critical feedback, or is used in critical scenarios where moving focus is considered too disruptive, use a live region announcement to announce the content of the Banner to screen reader users. + # ### Communicating feedback + # When a Banner is used to communicate feedback, a live region or focus management technique should be in place to ensure that assistive technology users are aware of the feedback, especially when the Banner is shown client-side. Visit the [Banner's Accessibility section](https://primer.style/components/banner#accessibility), or defer to the accessibility team. # - # Live regions can be finicky and don't work well when injected dynamically. Setting a live region attribute on the Banner itself is discouraged as it will not announce as expected for most screen readers. + # #### Approach 1: Announcing a Banner + # A live region announcement can be used to communicate non-critical feedback, such as a success message. # - # To ensure a Banner is announced reliably, make sure that there's a live region container that is already on the page. When the Banner is shown, populate the live region container with the content of the Banner. This can be done in one of two ways. The first is to rely on a global live region container that is guaranteed to be on the page. When the Banner appears, populate this global live region container with the Banner content. The second technique is to hide or show the Banner within a live region wrapper that is guaranteed to always be on the page. + # To successfully trigger a live region announcement for a Banner that is un-`hidden` or dynamically injected onto the page, **do not** set the live region attribute/role on the Banner itself. Instead, it's important to rely on a live region that is already guaranteed to be on the page. Learn more about specific techniques at: [Staff only: Challenges with live regions](https://github.com/github/accessibility/blob/main/docs/coaching-recommendations/toast-flash-banner/accessible-banner-prototype.md#challenges-with-dynamically-inserted-live-region). # - # For more information about either technique, visit [Staff only: Challenges with live regions](https://github.com/github/accessibility/blob/main/docs/coaching-recommendations/toast-flash-banner/accessible-banner-prototype.md#challenges-with-dynamically-inserted-live-region). This guidance is subject to change. + # #### Approach 2: Focusing a Banner + # Focusing the Banner can be appropriate for critical feedback scenarios, such as a [form validation error summary](https://primer.style/ui-patterns/forms/overview#interactive-summary-of-errors) where the Banner contains actions to help unblock the user. # - # ### Focusing a Banner - # Focusing a Banner when it appears helps to maximize discoverability of the message, especially in critical scenarios. - # - # To properly focus a banner, add a `tabindex="-1"` to the Banner container, and focus that container (one way is using the [`focus()` API](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus)). - # - # For more information about the focus management technique, visit the [Staff only: Accessible Banner Prototype docs](https://github.com/github/accessibility/blob/main/docs/coaching-recommendations/toast-flash-banner/accessible-banner-prototype.md#consideration). This guidance is subject to change. + # To properly focus a Banner, add a `tabindex="-1"` place focus with JavaScript (using the [`focus()` API](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus)). class Banner < Primer::Component status :alpha diff --git a/app/components/primer/alpha/tab_nav.pcss b/app/components/primer/alpha/tab_nav.pcss index 463fea8cce..a646e66889 100644 --- a/app/components/primer/alpha/tab_nav.pcss +++ b/app/components/primer/alpha/tab_nav.pcss @@ -13,11 +13,6 @@ overflow: auto; } -.tabnav::part(tablist-wrapper) { - margin-bottom: var(--stack-gap-normal); - border-bottom: var(--borderWidth-thin) solid var(--borderColor-default); -} - .tabnav-tab { display: inline-block; flex-shrink: 0; @@ -71,11 +66,6 @@ } } -tab-container .tabnav-tab { - margin-bottom: -1px; -} - - /* Tabnav extras ** ** Tabnav extras are non-tab elements that sit in the tabnav. Usually they're diff --git a/app/components/primer/alpha/tab_panels.html.erb b/app/components/primer/alpha/tab_panels.html.erb index 6fcea7255f..eb54e588ab 100644 --- a/app/components/primer/alpha/tab_panels.html.erb +++ b/app/components/primer/alpha/tab_panels.html.erb @@ -1,9 +1,13 @@ -<%= render Primer::BaseComponent.new(**@system_arguments) do %> - <%= extra if @align == :left %> - <% tabs.each do |tab| %> - <%= tab %> +<%= tab_container_wrapper(with_panel: true, **@wrapper_arguments) do %> + <%= render Primer::BaseComponent.new(**@system_arguments) do %> + <%= extra if @align == :left %> + <%= render Primer::BaseComponent.new(**@body_arguments) do %> + <% tabs.each do |tab| %> + <%= tab %> + <% end %> + <% end %> + <%= extra if @align == :right %> <% end %> - <%= extra if @align == :right %> <% tabs.each do |tab| %> <%= tab.panel %> <% end %> diff --git a/app/components/primer/alpha/tab_panels.rb b/app/components/primer/alpha/tab_panels.rb index d25a424d14..fceb9f8284 100644 --- a/app/components/primer/alpha/tab_panels.rb +++ b/app/components/primer/alpha/tab_panels.rb @@ -26,7 +26,7 @@ class TabPanels < Primer::Component Primer::Alpha::Navigation::Tab.new( selected: selected, with_panel: true, - list: false, + list: true, panel_id: "panel-#{id}", **system_arguments ) @@ -43,14 +43,23 @@ class TabPanels < Primer::Component # @param label [String] Sets an `aria-label` that helps assistive technology users understand the purpose of the tabs. # @param align [Symbol] <%= one_of(Primer::TabNavHelper::EXTRA_ALIGN_OPTIONS) %> - Defaults to <%= Primer::TabNavHelper::EXTRA_ALIGN_DEFAULT %> + # @param body_arguments [Hash] <%= link_to_system_arguments_docs %> for the body wrapper. + # @param wrapper_arguments [Hash] <%= link_to_system_arguments_docs %> for the `TabContainer` wrapper. # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize(label:, body_arguments: {}, wrapper_arguments: {}, **system_arguments) @align = EXTRA_ALIGN_DEFAULT + @wrapper_arguments = wrapper_arguments - @system_arguments = { **deny_tag_argument(**system_arguments), **deny_tag_argument(**wrapper_arguments) } - @system_arguments[:tag] = :"tab-container" + @system_arguments = deny_tag_argument(**system_arguments) + @system_arguments[:tag] = :div @system_arguments[:classes] = tab_nav_classes(@system_arguments[:classes]) - @system_arguments[:"aria-label"] = label + + @body_arguments = deny_tag_argument(**body_arguments) + @body_arguments[:tag] = :ul + @body_arguments[:classes] = tab_nav_body_classes(@body_arguments[:classes]) + + @body_arguments[:role] = :tablist + @body_arguments[:"aria-label"] = label end def before_render diff --git a/app/components/primer/alpha/underline_nav.pcss b/app/components/primer/alpha/underline_nav.pcss index 799b59ec75..2e70e1e794 100644 --- a/app/components/primer/alpha/underline_nav.pcss +++ b/app/components/primer/alpha/underline_nav.pcss @@ -21,13 +21,7 @@ } } -.UnderlineNav::part(tablist-wrapper) { - width: 100%; - box-shadow: inset 0 -1px 0 var(--borderColor-muted); - padding: var(--control-medium-gap) 0; -} - -.UnderlineNav-body,.UnderlineNav::part(tablist) { +.UnderlineNav-body { display: flex; align-items: center; gap: var(--control-medium-gap); diff --git a/app/components/primer/alpha/underline_panels.html.erb b/app/components/primer/alpha/underline_panels.html.erb index f8465ea449..b681d0c4c7 100644 --- a/app/components/primer/alpha/underline_panels.html.erb +++ b/app/components/primer/alpha/underline_panels.html.erb @@ -1,16 +1,18 @@ -<%= render Primer::BaseComponent.new(**@wrapper_arguments) do %> +<%= tab_container_wrapper(with_panel: true, **@wrapper_arguments) do %> <%= render Primer::BaseComponent.new(**@system_arguments) do %> <% if @align == :right %> <%= actions %> <% end %> - <% tabs.each do |tab| %> - <%= tab %> + <%= render body do %> + <% tabs.each do |tab| %> + <%= tab %> + <% end %> <% end %> <% if @align == :left %> <%= actions %> <% end %> - <% tabs.each do |tab| %> - <%= tab.panel %> - <% end %> + <% end %> + <% tabs.each do |tab| %> + <%= tab.panel %> <% end %> <% end %> diff --git a/app/components/primer/alpha/underline_panels.pcss b/app/components/primer/alpha/underline_panels.pcss deleted file mode 100644 index b7497bf6b8..0000000000 --- a/app/components/primer/alpha/underline_panels.pcss +++ /dev/null @@ -1,4 +0,0 @@ -tab-container.UnderlineNav { - box-shadow: none; - flex-direction: column; -} diff --git a/app/components/primer/alpha/underline_panels.rb b/app/components/primer/alpha/underline_panels.rb index b60b384fed..3c9361aab7 100644 --- a/app/components/primer/alpha/underline_panels.rb +++ b/app/components/primer/alpha/underline_panels.rb @@ -18,7 +18,7 @@ class UnderlinePanels < Primer::Component Primer::Alpha::Navigation::Tab.new( selected: selected, with_panel: true, - list: false, + list: true, icon_classes: "UnderlineNav-octicon", panel_id: "panel-#{id}", **system_arguments @@ -43,16 +43,24 @@ class UnderlinePanels < Primer::Component # @param system_arguments [Hash] <%= link_to_system_arguments_docs %> def initialize(label:, align: ALIGN_DEFAULT, body_arguments: {}, wrapper_arguments: {}, **system_arguments) @align = fetch_or_fallback(ALIGN_OPTIONS, align, ALIGN_DEFAULT) - @wrapper_arguments = deny_tag_argument(**wrapper_arguments) - @wrapper_arguments[:tag] = :div + @wrapper_arguments = wrapper_arguments @system_arguments = deny_tag_argument(**system_arguments) - @system_arguments[:tag] = :"tab-container" + @system_arguments[:tag] = :div @system_arguments[:classes] = underline_nav_classes(@system_arguments[:classes], @align) - @system_arguments[:"aria-label"] = label @body_arguments = deny_tag_argument(**body_arguments) - @body_arguments[:tag] = :div + @body_arguments[:tag] = :ul + @body_arguments[:classes] = underline_nav_body_classes(@body_arguments[:classes]) + + @body_arguments[:role] = :tablist + @body_arguments[:"aria-label"] = label + end + + private + + def body + Primer::BaseComponent.new(**@body_arguments) end end end diff --git a/app/components/primer/primer.pcss b/app/components/primer/primer.pcss index 9375333502..26331e104a 100644 --- a/app/components/primer/primer.pcss +++ b/app/components/primer/primer.pcss @@ -12,7 +12,6 @@ @import "./alpha/button_marketing.pcss"; @import "./alpha/toggle_switch.pcss"; @import "./alpha/underline_nav.pcss"; -@import "./alpha/underline_panels.pcss"; @import "./alpha/segmented_control.pcss"; @import "./alpha/menu.pcss"; diff --git a/demo/Gemfile b/demo/Gemfile index ba322273f7..4ca0e1cc61 100644 --- a/demo/Gemfile +++ b/demo/Gemfile @@ -38,13 +38,13 @@ gem "bootsnap", ">= 1.4.2", require: false gem "openproject-primer_view_components", path: "../" gem "view_component", '>= 3.11.0' -gem "lookbook", "~> 2.2.2" unless rails_version.to_f < 7 +gem "lookbook", "~> 2.3.0" unless rails_version.to_f < 7 group :development do # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem "spring", "~> 4.2" gem "spring-watcher-listen", "~> 2.1" - gem "hotwire-livereload", "~> 1.3" + gem "hotwire-livereload", "~> 1.4" # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails] gem "importmap-rails" diff --git a/demo/Gemfile.lock b/demo/Gemfile.lock index 99327cefac..e1984c53d8 100644 --- a/demo/Gemfile.lock +++ b/demo/Gemfile.lock @@ -51,7 +51,7 @@ GEM azure_mgmt_container_service (0.22.0) ms_rest_azure (~> 0.12.0) base64 (0.2.0) - bigdecimal (3.1.7) + bigdecimal (3.1.8) bootsnap (1.18.3) msgpack (~> 1.2) builder (3.2.4) @@ -61,11 +61,10 @@ GEM concurrent-ruby (1.2.3) connection_pool (2.4.1) crass (1.0.6) - css_parser (1.16.0) + css_parser (1.17.1) addressable docker-remote (0.8.0) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) + domain_name (0.6.20240107) drb (2.2.1) dry-inflector (0.3.0) ejson (1.4.1) @@ -97,15 +96,18 @@ GEM faraday-rack (1.0.0) faraday-retry (1.0.3) ffi (1.16.3) - ffi-compiler (1.0.1) - ffi (>= 1.0.0) + ffi-compiler (1.3.2) + ffi (>= 1.15.5) rake foreman (0.88.1) gli (2.21.1) globalid (1.2.1) activesupport (>= 6.1) - googleauth (1.8.1) - faraday (>= 0.17.3, < 3.a) + google-cloud-env (2.1.1) + faraday (>= 1.0, < 3.a) + googleauth (1.11.0) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.1) jwt (>= 1.4, < 3.0) multi_json (~> 1.11) os (>= 0.9, < 2.0) @@ -115,34 +117,36 @@ GEM helm-rb (0.2.1-arm64-darwin) helm-rb (0.2.1-x86_64-darwin) helm-rb (0.2.1-x86_64-linux) - hotwire-livereload (1.3.2) + hotwire-livereload (1.4.0) actioncable (>= 6.0.0) listen (>= 3.0.0) railties (>= 6.0.0) htmlbeautifier (1.4.3) htmlentities (4.3.4) - http (5.1.1) + http (5.2.0) addressable (~> 2.8) + base64 (~> 0.1) http-cookie (~> 1.0) http-form_data (~> 2.2) - llhttp-ffi (~> 0.4.0) + llhttp-ffi (~> 0.5.0) http-accept (1.7.0) http-cookie (1.0.5) domain_name (~> 0.5) http-form_data (2.3.0) - i18n (1.14.4) + i18n (1.14.5) concurrent-ruby (~> 1.0) importmap-rails (2.0.1) actionpack (>= 6.0.0) activesupport (>= 6.0.0) railties (>= 6.0.0) io-console (0.7.2) - irb (1.12.0) - rdoc + irb (1.13.1) + rdoc (>= 4.0.0) reline (>= 0.4.2) jsonpath (1.1.5) multi_json - jwt (2.7.1) + jwt (2.8.1) + base64 kind-rb (0.1.0-arm64-darwin) kind-rb (0.1.0-x86_64-darwin) kind-rb (0.1.0-x86_64-linux) @@ -195,13 +199,13 @@ GEM listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - llhttp-ffi (0.4.0) + llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) - lookbook (2.2.2) + lookbook (2.3.0) activemodel css_parser htmlbeautifier (~> 1.3) @@ -215,9 +219,9 @@ GEM zeitwerk (~> 2.5) marcel (1.0.4) method_source (1.1.0) - mime-types (3.5.1) + mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2023.1003) + mime-types-data (3.2024.0507) minitest (5.22.3) ms_rest (0.7.6) concurrent-ruby (~> 1.0) @@ -230,18 +234,19 @@ GEM ms_rest (~> 0.7.6) msgpack (1.7.2) multi_json (1.15.0) - multipart-post (2.3.0) + multipart-post (2.4.1) mutex_m (0.2.0) netrc (0.11.0) - nio4r (2.7.1) - nokogiri (1.16.3-arm64-darwin) + nio4r (2.7.3) + nokogiri (1.16.5-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.3-x86_64-darwin) + nokogiri (1.16.5-x86_64-darwin) racc (~> 1.4) - nokogiri (1.16.3-x86_64-linux) + nokogiri (1.16.5-x86_64-linux) racc (~> 1.4) - oj (3.16.1) openproject-octicons (19.9.0) + oj (3.16.3) + bigdecimal (>= 3.0) os (1.1.4) pry (0.14.2) coderay (~> 1.1) @@ -251,11 +256,11 @@ GEM pry (>= 0.13, < 0.15) psych (5.1.2) stringio - public_suffix (5.0.4) + public_suffix (5.0.5) puma (6.4.2) nio4r (~> 2.0) racc (1.7.3) - rack (3.0.10) + rack (3.0.11) rack-cors (2.0.2) rack (>= 2.0.0) rack-session (2.0.0) @@ -288,7 +293,7 @@ GEM psych (>= 4.0.0) recursive-open-struct (1.1.3) redcarpet (3.6.0) - reline (0.5.0) + reline (0.5.6) io-console (~> 0.5) rest-client (2.1.0) http-accept (>= 1.7.0, < 2.0) @@ -297,12 +302,12 @@ GEM netrc (~> 0.8) rouge (3.30.0) ruby2_keywords (0.0.5) - signet (0.18.0) + signet (0.19.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - spring (4.2.0) + spring (4.2.1) spring-watcher-listen (2.1.0) listen (>= 2.7, < 4.0) spring (>= 4) @@ -313,7 +318,7 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - statsd-instrument (3.5.12) + statsd-instrument (3.7.0) stimulus-rails (1.3.3) railties (>= 6.0.0) stringio (3.1.0) @@ -325,9 +330,6 @@ GEM railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) view_component (3.12.1) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) @@ -355,14 +357,14 @@ DEPENDENCIES activesupport (= 7.1.1) bootsnap (>= 1.4.2) foreman - hotwire-livereload (~> 1.3) + hotwire-livereload (~> 1.4) importmap-rails kind-rb (~> 0.1) kuby-azure (~> 0.4.0) kuby-core (~> 0.20) kuby-kind (~> 0.2) listen - lookbook (~> 2.2.2) + lookbook (~> 2.3.0) openproject-primer_view_components! pry-byebug puma (~> 6.4.2) diff --git a/demo/package-lock.json b/demo/package-lock.json index c63d005e29..30b9607bb4 100644 --- a/demo/package-lock.json +++ b/demo/package-lock.json @@ -8,8 +8,8 @@ "name": "demo", "version": "0.1.0", "dependencies": { - "@primer/css": "^21.2.2", - "@primer/primitives": "^8.0.0", + "@primer/css": "^21.3.1", + "@primer/primitives": "^8.1.0", "@rails/actioncable": "^7.1.3", "@rails/ujs": "^7.1.3", "turbolinks": "^5.2.0", @@ -68,9 +68,9 @@ "integrity": "sha512-KtOPaB+FiKJ6jcKm9UKyaM5fPURHGf+xcp+b4Mzoi81hOc6M1sIGpMZMAVbNzfa2lW5+RPGKq888Px0j76OZ/A==" }, "node_modules/@github/relative-time-element": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.3.1.tgz", - "integrity": "sha512-zL79nlhZVCg7x2Pf/HT5MB0mowmErE71VXpF10/3Wy8dQwkninNO1M9aOizh2wKC5LkSpDXqNYjDZwbH0/bcSg==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.4.0.tgz", + "integrity": "sha512-CrI6oAecoahG7PF5dsgjdvlF5kCtusVMjg810EULD81TvnDsP+k/FRi/ClFubWLgBo4EGpr2EfvmumtqQFo7ow==" }, "node_modules/@github/tab-container-element": { "version": "3.4.0", @@ -99,9 +99,9 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@oddbird/popover-polyfill": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.0.tgz", - "integrity": "sha512-jrqoTI8lk5UziDsDPJ2Y+nmXYCcRhmr6uMARr3v/W6AMxRgsnRLWJyWKYr6FjaGMgbyxXG+OkCUPQY4Xl3toGg==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.3.tgz", + "integrity": "sha512-kBS0ZAwH8kZqFl0mV89KPK4cLYl2ZoKSfYngK4dz1eLAhKzTK0yu4LrvLdMeM7JhjWK6GxBtiY+cl1s6vR2pUg==" }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", @@ -118,12 +118,12 @@ "integrity": "sha512-ApPbNhiWPHscs0+rLV76sCY75IEpPvDEZq9+iQXQqU6Tv5SLdax3PmzJlUHftlQ7O/eJnLO1dTEMEwj2Yn1BLA==" }, "node_modules/@primer/css": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.2.2.tgz", - "integrity": "sha512-Mcpt9CyajnPW8TJmZYIUhnctdLk7rfsoyvh8w4qDydu2C7HHOHa0wKQjf0zofQ+AyJOIW1Gfa9xvBfwAeNkgoQ==", + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.3.1.tgz", + "integrity": "sha512-vQoTeu7yfL/1Njg372lN6xqIsiPl0QgoIrkDjJ+TpDkeIznXFc+jLdu+5VUVi+bzyKHwv/gd42hhlLA2K5oD6w==", "dependencies": { "@primer/primitives": "^7.15.12", - "@primer/view-components": "^0.19.0" + "@primer/view-components": "^0.22.0" }, "engines": { "node": ">=16.0.0" @@ -135,17 +135,17 @@ "integrity": "sha512-SiPzEb+up1nDpV2NGwNiY8m6sGnF3OUqRb0has5s6T40vq6Li/g3cYVgl+oolEa4DUoNygEPs09jwJt24f/3zg==" }, "node_modules/@primer/primitives": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-8.0.0.tgz", - "integrity": "sha512-QnFgNRjc9381o5oatqcgLVQ7uPmMUZHiQixs/FiKkNONlXJGQAyhLlsfK+RgNqONzlSp9Y/0WiokLgLgw1sAQg==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-8.1.0.tgz", + "integrity": "sha512-WixqDhIJHmQJD82JMmSwM9/LGkrA3HxNUgkkm4xubUY68il2ny7xYw5Jk8W2MwjTOyHHQ3hg9JaNV+BqVJ7N5A==" }, "node_modules/@primer/view-components": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.19.0.tgz", - "integrity": "sha512-+sXwYeV2B7pNooa8v3WfHG7+2xzLexlG7r0H75Lr0VXdMi9ID7RmLpS42Fw04vmcc+a8YtoaKdV1wxyYFOX/3Q==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.22.0.tgz", + "integrity": "sha512-38S4GgybG9iviiULHLbWxLn4G8DDOE4E9XgQARmanGyju+GBZjcOS5AKglVT+JziQPq6o3dgcwWFl+FxKZDCnA==", "dependencies": { "@github/auto-check-element": "^5.2.0", - "@github/auto-complete-element": "^3.6.0", + "@github/auto-complete-element": "^3.6.2", "@github/catalyst": "^1.6.0", "@github/clipboard-copy-element": "^1.3.0", "@github/details-menu-element": "^1.0.12", @@ -2841,9 +2841,9 @@ "integrity": "sha512-KtOPaB+FiKJ6jcKm9UKyaM5fPURHGf+xcp+b4Mzoi81hOc6M1sIGpMZMAVbNzfa2lW5+RPGKq888Px0j76OZ/A==" }, "@github/relative-time-element": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.3.1.tgz", - "integrity": "sha512-zL79nlhZVCg7x2Pf/HT5MB0mowmErE71VXpF10/3Wy8dQwkninNO1M9aOizh2wKC5LkSpDXqNYjDZwbH0/bcSg==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.4.0.tgz", + "integrity": "sha512-CrI6oAecoahG7PF5dsgjdvlF5kCtusVMjg810EULD81TvnDsP+k/FRi/ClFubWLgBo4EGpr2EfvmumtqQFo7ow==" }, "@github/tab-container-element": { "version": "3.4.0", @@ -2869,9 +2869,9 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@oddbird/popover-polyfill": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.0.tgz", - "integrity": "sha512-jrqoTI8lk5UziDsDPJ2Y+nmXYCcRhmr6uMARr3v/W6AMxRgsnRLWJyWKYr6FjaGMgbyxXG+OkCUPQY4Xl3toGg==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.3.tgz", + "integrity": "sha512-kBS0ZAwH8kZqFl0mV89KPK4cLYl2ZoKSfYngK4dz1eLAhKzTK0yu4LrvLdMeM7JhjWK6GxBtiY+cl1s6vR2pUg==" }, "@pkgjs/parseargs": { "version": "0.11.0", @@ -2885,12 +2885,12 @@ "integrity": "sha512-ApPbNhiWPHscs0+rLV76sCY75IEpPvDEZq9+iQXQqU6Tv5SLdax3PmzJlUHftlQ7O/eJnLO1dTEMEwj2Yn1BLA==" }, "@primer/css": { - "version": "21.2.2", - "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.2.2.tgz", - "integrity": "sha512-Mcpt9CyajnPW8TJmZYIUhnctdLk7rfsoyvh8w4qDydu2C7HHOHa0wKQjf0zofQ+AyJOIW1Gfa9xvBfwAeNkgoQ==", + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/@primer/css/-/css-21.3.1.tgz", + "integrity": "sha512-vQoTeu7yfL/1Njg372lN6xqIsiPl0QgoIrkDjJ+TpDkeIznXFc+jLdu+5VUVi+bzyKHwv/gd42hhlLA2K5oD6w==", "requires": { "@primer/primitives": "^7.15.12", - "@primer/view-components": "^0.19.0" + "@primer/view-components": "^0.22.0" }, "dependencies": { "@primer/primitives": { @@ -2901,17 +2901,17 @@ } }, "@primer/primitives": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-8.0.0.tgz", - "integrity": "sha512-QnFgNRjc9381o5oatqcgLVQ7uPmMUZHiQixs/FiKkNONlXJGQAyhLlsfK+RgNqONzlSp9Y/0WiokLgLgw1sAQg==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-8.1.0.tgz", + "integrity": "sha512-WixqDhIJHmQJD82JMmSwM9/LGkrA3HxNUgkkm4xubUY68il2ny7xYw5Jk8W2MwjTOyHHQ3hg9JaNV+BqVJ7N5A==" }, "@primer/view-components": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.19.0.tgz", - "integrity": "sha512-+sXwYeV2B7pNooa8v3WfHG7+2xzLexlG7r0H75Lr0VXdMi9ID7RmLpS42Fw04vmcc+a8YtoaKdV1wxyYFOX/3Q==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@primer/view-components/-/view-components-0.22.0.tgz", + "integrity": "sha512-38S4GgybG9iviiULHLbWxLn4G8DDOE4E9XgQARmanGyju+GBZjcOS5AKglVT+JziQPq6o3dgcwWFl+FxKZDCnA==", "requires": { "@github/auto-check-element": "^5.2.0", - "@github/auto-complete-element": "^3.6.0", + "@github/auto-complete-element": "^3.6.2", "@github/catalyst": "^1.6.0", "@github/clipboard-copy-element": "^1.3.0", "@github/details-menu-element": "^1.0.12", diff --git a/demo/package.json b/demo/package.json index b19f65b934..8ea3371dfd 100644 --- a/demo/package.json +++ b/demo/package.json @@ -3,8 +3,8 @@ "private": true, "version": "0.1.0", "dependencies": { - "@primer/css": "^21.2.2", - "@primer/primitives": "^8.0.0", + "@primer/css": "^21.3.1", + "@primer/primitives": "^8.1.0", "@rails/actioncable": "^7.1.3", "@rails/ujs": "^7.1.3", "turbolinks": "^5.2.0", diff --git a/package-lock.json b/package-lock.json index 4008ce5e83..66a31db060 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@github/image-crop-element": "^5.0.0", "@github/include-fragment-element": "^6.1.1", "@github/relative-time-element": "^4.0.0", - "@github/tab-container-element": "^4.5.0", + "@github/tab-container-element": "^3.1.2", "@oddbird/popover-polyfill": "^0.4.0", "@primer/behaviors": "^1.3.4" }, @@ -30,7 +30,7 @@ "@github/prettier-config": "0.0.6", "@playwright/test": "^1.35.1", "@primer/css": "21.2.2", - "@primer/primitives": "^7.16.0", + "@primer/primitives": "^8.1.0", "@primer/stylelint-config": "^12.7.2", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^8.3.3", @@ -1038,9 +1038,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz", - "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true, "funding": [ { @@ -1056,8 +1056,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/color-helpers": { @@ -1080,9 +1080,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz", - "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", + "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", "dev": true, "funding": [ { @@ -1098,14 +1098,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-color-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.0.tgz", - "integrity": "sha512-0/v6OPpcg+b8TJT2N1Rcp0oH5xEvVOU5K2qDkaR3IMHNXuJ7XfVCQLINt3Cuj8mr54DbilEoZ9uvAmHBoZ//Fw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", + "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", "dev": true, "funding": [ { @@ -1119,20 +1119,20 @@ ], "dependencies": { "@csstools/color-helpers": "^4.2.0", - "@csstools/css-calc": "^1.2.0" + "@csstools/css-calc": "^1.2.2" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", - "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true, "funding": [ { @@ -1148,13 +1148,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", - "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true, "funding": [ { @@ -1171,9 +1171,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", - "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true, "funding": [ { @@ -1189,14 +1189,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/postcss-cascade-layers": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz", - "integrity": "sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.5.tgz", + "integrity": "sha512-nAI2ToT2G/E4XEwJitVjCr2V2SluE9Eaiski+xfRbKSGxFmDUtua7SCG1AtMbjteIVqGDRw7uBd7qXqCZq2b1Q==", "dev": true, "funding": [ { @@ -1209,7 +1209,7 @@ } ], "dependencies": { - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -1220,9 +1220,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.14.tgz", - "integrity": "sha512-joGAf5bT3Jg1CpybupMJ4DwNg/VNjmLWZoWMDmX0MTy/ftHA1Qr4+CslqTT4AA1n6Dx4Wa+DSMGPrDLHtRP0jg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", + "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", "dev": true, "funding": [ { @@ -1235,9 +1235,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1249,9 +1249,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.14.tgz", - "integrity": "sha512-ZLbgtdhyuOoWoRo/W8jFv68q+IMgTJHOAI+WunRbrRPqI+vJ0K2rud/lS9Se5urzM/imVKs/kz0Uobm5Yj4HUg==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", + "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", "dev": true, "funding": [ { @@ -1264,9 +1264,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1278,9 +1278,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz", - "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", + "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", "dev": true, "funding": [ { @@ -1293,9 +1293,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1331,9 +1331,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.7.tgz", - "integrity": "sha512-vrsHsl5TN6NB5CT0rPG6JE9V2GLFftcmPtF/k4cWT4gyVMCsDyS9wEVl82sgvh/JQ32TaUo6bh8Ndl+XRJqGQw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", + "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", "dev": true, "funding": [ { @@ -1346,9 +1346,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1358,9 +1358,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.15.tgz", - "integrity": "sha512-0xQ5r4WU/6W2lDmnOTx9liC1Cq6RSnrkEzqX7d0cRA3fz5hjC276pA0nLMoAiY3vtAp0u71nTk/3TRdnCx/OUw==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", + "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", "dev": true, "funding": [ { @@ -1373,9 +1373,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1387,9 +1387,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.13.tgz", - "integrity": "sha512-f44tgkFSxJBGm8UjlkAfBP7xE2x2XFFdvNdedHl8jpx2pQcW8a50OT3yeMnM3NB9Y2Ynd7Wn8iXARiV/IHoKvw==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", + "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", "dev": true, "funding": [ { @@ -1402,9 +1402,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1465,9 +1465,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz", - "integrity": "sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.7.tgz", + "integrity": "sha512-snT/fL6V0I/4AiObPtk2mzJ/eSvpqnf3Kyx9Mc0rI6VskjRkkrEME+kH3aMKBKwjstBrgrYUMoI+vXw2HRi9CQ==", "dev": true, "funding": [ { @@ -1480,7 +1480,7 @@ } ], "dependencies": { - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -1491,9 +1491,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.3.tgz", - "integrity": "sha512-izW8hvhOqJlarLcGXO5PSylW9pQS3fytmhRdx2/e1oZFi15vs7ZShOHcREHJ3FfGdYqDA10cP9uhH0A3hmm1Rw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", + "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", "dev": true, "funding": [ { @@ -1506,8 +1506,8 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1610,9 +1610,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz", - "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", + "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", "dev": true, "funding": [ { @@ -1625,7 +1625,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -1636,9 +1636,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz", - "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", + "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", "dev": true, "funding": [ { @@ -1651,10 +1651,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1664,9 +1664,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz", - "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", + "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", "dev": true, "funding": [ { @@ -1679,9 +1679,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1742,9 +1742,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.14.tgz", - "integrity": "sha512-92xdpcfc2wB3z4+GftPA0PXMuGI/tRLw9Tc0+HzpaAHHxyLK6aCJtoQIcw0Ox/PthXtqXZn/3wWT/Idfe8I7Wg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", + "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", "dev": true, "funding": [ { @@ -1757,9 +1757,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1796,9 +1796,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.14.tgz", - "integrity": "sha512-NlxgLjAjVCTUVGiWk8WNj3dKvux9eC6O5aLM3BmdA8UXEwBHYI9r4IqlanxG9PlcXnzhTUX6eZsqgmxwt4FPow==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", + "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", "dev": true, "funding": [ { @@ -1811,9 +1811,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -1850,9 +1850,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz", - "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", + "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", "dev": true, "funding": [ { @@ -1865,9 +1865,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1903,9 +1903,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz", - "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", + "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", "dev": true, "funding": [ { @@ -1918,9 +1918,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1974,9 +1974,9 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", - "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.0.tgz", + "integrity": "sha512-tGDFEHZ4XJeIt5NF7/nAfLGqPckmDZSnYne5gl67p4agQolE5s4rofdQ3e+VkeukfR91lVtSQ/Jt9DqM1ICiIQ==", "dev": true, "funding": [ { @@ -2167,9 +2167,9 @@ "integrity": "sha512-CrI6oAecoahG7PF5dsgjdvlF5kCtusVMjg810EULD81TvnDsP+k/FRi/ClFubWLgBo4EGpr2EfvmumtqQFo7ow==" }, "node_modules/@github/tab-container-element": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-4.5.0.tgz", - "integrity": "sha512-8pzFJVg7AyPFqOjKFoiHwVQbo4MdTPpUfQwW91Hgj+OOvySZVmw4PU8ejU4qTHbb2oA2ajYMRuXuAvhfMgnS1Q==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.3.0.tgz", + "integrity": "sha512-vHlN/GXgaJFJhh4oUYRh1pc4RAqduKlQOrEjVgSxR4JhLXsQcZ/hKWfCsRZAuZbSPzUGEYvggdieamS4FRSe4g==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -2548,9 +2548,9 @@ } }, "node_modules/@oddbird/popover-polyfill": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.1.tgz", - "integrity": "sha512-1MBMy92urkxoIy3qQecs6DzSgtVg9WElUhPXZ7GejqH8AmoakP6uMZGO1vyf0Cf9dBujqb0C+cXyZTTBLHWs0A==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.3.tgz", + "integrity": "sha512-kBS0ZAwH8kZqFl0mV89KPK4cLYl2ZoKSfYngK4dz1eLAhKzTK0yu4LrvLdMeM7JhjWK6GxBtiY+cl1s6vR2pUg==" }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", @@ -2607,10 +2607,16 @@ "node": ">=16.0.0" } }, + "node_modules/@primer/css/node_modules/@primer/primitives": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.17.1.tgz", + "integrity": "sha512-SiPzEb+up1nDpV2NGwNiY8m6sGnF3OUqRb0has5s6T40vq6Li/g3cYVgl+oolEa4DUoNygEPs09jwJt24f/3zg==", + "dev": true + }, "node_modules/@primer/primitives": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.17.0.tgz", - "integrity": "sha512-IlfBmMElmUbnQ4LIXSD2QLkty7akaNNQim9ofOjlE+LiVCwvxOuMEyZXVi9bm3hWLDszKyJ5mDLHKRuiY1/P+w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-8.1.0.tgz", + "integrity": "sha512-WixqDhIJHmQJD82JMmSwM9/LGkrA3HxNUgkkm4xubUY68il2ny7xYw5Jk8W2MwjTOyHHQ3hg9JaNV+BqVJ7N5A==", "dev": true }, "node_modules/@primer/stylelint-config": { @@ -3056,12 +3062,6 @@ "@primer/behaviors": "^1.3.4" } }, - "node_modules/@primer/view-components/node_modules/@github/tab-container-element": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.4.0.tgz", - "integrity": "sha512-Yx70pO8A0p7Stnm9knKkUNX8i4bjuwDYZarRkM8JH0Z+ffhpe++oNAPbzGI9GEcGugRHvKuSC6p4YOdoHtTniQ==", - "dev": true - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", @@ -4443,18 +4443,18 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "engines": { "node": ">=12 || >=16" } }, "node_modules/css-has-pseudo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz", - "integrity": "sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.4.tgz", + "integrity": "sha512-u9vuyeksska4OMRC061xTQb2RJZv7T1JJjnZbaQpNhZRPF1UqGpBqHnlcwRS/1vv+QOpD4NVsaFT4U1zmkciuA==", "dev": true, "funding": [ { @@ -4467,7 +4467,7 @@ } ], "dependencies": { - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0" }, @@ -8580,9 +8580,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.9.tgz", - "integrity": "sha512-8i/ofOArZ4fljp+3g+HI6Pok01Kb8YaSqInrJt2vMimEKrI0ZDNRLpH+wLhXBNu/Bi8zeWDvxhvCqsGSpu8E6Q==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", + "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", "dev": true, "funding": [ { @@ -8595,9 +8595,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -8695,9 +8695,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz", - "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "funding": [ { @@ -8710,10 +8710,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -8723,9 +8723,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.7", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.7.tgz", - "integrity": "sha512-0N9F/GUCr/D0IazjzHahyYW2bQVDT6qDtEudiGHAhMd3XqhfM3VmfYVlkc/40DOhsPtngSNb54/Ctu8msvFOvQ==", + "version": "13.3.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", + "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", "dev": true, "funding": [ { @@ -8738,9 +8738,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -8752,9 +8752,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz", - "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==", + "version": "7.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", + "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", "dev": true, "funding": [ { @@ -8767,9 +8767,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -9023,9 +9023,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.14.tgz", - "integrity": "sha512-ddQS9FRWT8sfl4wfW0ae8fpP2JdLIuhC9pYpHq1077avjrLzg73T9IEVu5QmFa72nJhYFlO9CbqjcoSdEzfY9A==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", + "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", "dev": true, "funding": [ { @@ -9038,9 +9038,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -9244,9 +9244,9 @@ } }, "node_modules/postcss-nesting": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.2.tgz", - "integrity": "sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==", + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.3.tgz", + "integrity": "sha512-8XVmgNNYlmIg1qxSP7O5n76nm0I71noCzlSCl7oqaL2opJ5nSB7r8/726yObKrUTRt6ipjiqHB1wYrMVTM66Sg==", "dev": true, "funding": [ { @@ -9260,7 +9260,7 @@ ], "dependencies": { "@csstools/selector-resolve-nested": "^1.1.0", - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -9501,9 +9501,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.8.tgz", - "integrity": "sha512-AjQ5ZgrVJVL8Ja7UxIlbyHUN5knkdk6L0JxxV7KDZU4S5WfJjRNgvWlU7Xq7CMyRZSjHZBmLDOsBKIL9WStPyw==", + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.12.tgz", + "integrity": "sha512-aSeT8hNFKAgywopQE9MINFR5rZjRoA1MKv/Z09aLNlF3ki7Es3oeoFDx52po1QbBVvFuU9wSH/IosqqAa3oJow==", "dev": true, "funding": [ { @@ -9516,49 +9516,49 @@ } ], "dependencies": { - "@csstools/postcss-cascade-layers": "^4.0.4", - "@csstools/postcss-color-function": "^3.0.14", - "@csstools/postcss-color-mix-function": "^2.0.14", - "@csstools/postcss-exponential-functions": "^1.0.5", + "@csstools/postcss-cascade-layers": "^4.0.5", + "@csstools/postcss-color-function": "^3.0.16", + "@csstools/postcss-color-mix-function": "^2.0.16", + "@csstools/postcss-exponential-functions": "^1.0.7", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.7", - "@csstools/postcss-gradients-interpolation-method": "^4.0.15", - "@csstools/postcss-hwb-function": "^3.0.13", + "@csstools/postcss-gamut-mapping": "^1.0.9", + "@csstools/postcss-gradients-interpolation-method": "^4.0.17", + "@csstools/postcss-hwb-function": "^3.0.15", "@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-initial": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^4.0.6", - "@csstools/postcss-light-dark-function": "^1.0.3", + "@csstools/postcss-is-pseudo-class": "^4.0.7", + "@csstools/postcss-light-dark-function": "^1.0.5", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.7", - "@csstools/postcss-media-minmax": "^1.1.4", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7", + "@csstools/postcss-logical-viewport-units": "^2.0.9", + "@csstools/postcss-media-minmax": "^1.1.6", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.14", + "@csstools/postcss-oklab-function": "^3.0.16", "@csstools/postcss-progressive-custom-properties": "^3.2.0", - "@csstools/postcss-relative-color-syntax": "^2.0.14", + "@csstools/postcss-relative-color-syntax": "^2.0.16", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.6", + "@csstools/postcss-stepped-value-functions": "^3.0.8", "@csstools/postcss-text-decoration-shorthand": "^3.0.6", - "@csstools/postcss-trigonometric-functions": "^3.0.6", + "@csstools/postcss-trigonometric-functions": "^3.0.8", "@csstools/postcss-unset-value": "^3.0.1", "autoprefixer": "^10.4.19", "browserslist": "^4.22.3", "css-blank-pseudo": "^6.0.2", - "css-has-pseudo": "^6.0.3", + "css-has-pseudo": "^6.0.4", "css-prefers-color-scheme": "^9.0.1", "cssdb": "^8.0.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.9", + "postcss-color-functional-notation": "^6.0.11", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.4", - "postcss-custom-properties": "^13.3.7", - "postcss-custom-selectors": "^7.1.8", + "postcss-custom-media": "^10.0.6", + "postcss-custom-properties": "^13.3.10", + "postcss-custom-selectors": "^7.1.10", "postcss-dir-pseudo-class": "^8.0.1", "postcss-double-position-gradients": "^5.0.6", "postcss-focus-visible": "^9.0.1", @@ -9566,9 +9566,9 @@ "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.14", + "postcss-lab-function": "^6.0.16", "postcss-logical": "^7.0.1", - "postcss-nesting": "^12.1.2", + "postcss-nesting": "^12.1.3", "postcss-opacity-percentage": "^2.0.0", "postcss-overflow-shorthand": "^5.0.1", "postcss-page-break": "^3.0.4", @@ -10948,20 +10948,20 @@ } }, "node_modules/stylelint": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", - "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.5.0.tgz", + "integrity": "sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw==", "dev": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.6.1", "@csstools/css-tokenizer": "^2.2.4", "@csstools/media-query-list-parser": "^2.1.9", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.0.3", "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.1", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", @@ -10990,7 +10990,7 @@ "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { @@ -11311,9 +11311,9 @@ } }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -13037,9 +13037,9 @@ } }, "@csstools/cascade-layer-name-parser": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz", - "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true, "requires": {} }, @@ -13050,87 +13050,87 @@ "dev": true }, "@csstools/css-calc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz", - "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", + "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", "dev": true, "requires": {} }, "@csstools/css-color-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.0.tgz", - "integrity": "sha512-0/v6OPpcg+b8TJT2N1Rcp0oH5xEvVOU5K2qDkaR3IMHNXuJ7XfVCQLINt3Cuj8mr54DbilEoZ9uvAmHBoZ//Fw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", + "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", "dev": true, "requires": { "@csstools/color-helpers": "^4.2.0", - "@csstools/css-calc": "^1.2.0" + "@csstools/css-calc": "^1.2.2" } }, "@csstools/css-parser-algorithms": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", - "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", - "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true }, "@csstools/media-query-list-parser": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", - "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true, "requires": {} }, "@csstools/postcss-cascade-layers": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz", - "integrity": "sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.5.tgz", + "integrity": "sha512-nAI2ToT2G/E4XEwJitVjCr2V2SluE9Eaiski+xfRbKSGxFmDUtua7SCG1AtMbjteIVqGDRw7uBd7qXqCZq2b1Q==", "dev": true, "requires": { - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" } }, "@csstools/postcss-color-function": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.14.tgz", - "integrity": "sha512-joGAf5bT3Jg1CpybupMJ4DwNg/VNjmLWZoWMDmX0MTy/ftHA1Qr4+CslqTT4AA1n6Dx4Wa+DSMGPrDLHtRP0jg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", + "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-color-mix-function": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.14.tgz", - "integrity": "sha512-ZLbgtdhyuOoWoRo/W8jFv68q+IMgTJHOAI+WunRbrRPqI+vJ0K2rud/lS9Se5urzM/imVKs/kz0Uobm5Yj4HUg==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", + "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-exponential-functions": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz", - "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", + "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-font-format-keywords": { @@ -13144,38 +13144,38 @@ } }, "@csstools/postcss-gamut-mapping": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.7.tgz", - "integrity": "sha512-vrsHsl5TN6NB5CT0rPG6JE9V2GLFftcmPtF/k4cWT4gyVMCsDyS9wEVl82sgvh/JQ32TaUo6bh8Ndl+XRJqGQw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", + "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.15.tgz", - "integrity": "sha512-0xQ5r4WU/6W2lDmnOTx9liC1Cq6RSnrkEzqX7d0cRA3fz5hjC276pA0nLMoAiY3vtAp0u71nTk/3TRdnCx/OUw==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", + "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-hwb-function": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.13.tgz", - "integrity": "sha512-f44tgkFSxJBGm8UjlkAfBP7xE2x2XFFdvNdedHl8jpx2pQcW8a50OT3yeMnM3NB9Y2Ynd7Wn8iXARiV/IHoKvw==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", + "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } @@ -13199,23 +13199,23 @@ "requires": {} }, "@csstools/postcss-is-pseudo-class": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz", - "integrity": "sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.7.tgz", + "integrity": "sha512-snT/fL6V0I/4AiObPtk2mzJ/eSvpqnf3Kyx9Mc0rI6VskjRkkrEME+kH3aMKBKwjstBrgrYUMoI+vXw2HRi9CQ==", "dev": true, "requires": { - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" } }, "@csstools/postcss-light-dark-function": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.3.tgz", - "integrity": "sha512-izW8hvhOqJlarLcGXO5PSylW9pQS3fytmhRdx2/e1oZFi15vs7ZShOHcREHJ3FfGdYqDA10cP9uhH0A3hmm1Rw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", + "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } @@ -13251,36 +13251,36 @@ } }, "@csstools/postcss-logical-viewport-units": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz", - "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", + "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", "dev": true, "requires": { - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-media-minmax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz", - "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", + "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz", - "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", + "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "@csstools/postcss-nested-calc": { @@ -13303,14 +13303,14 @@ } }, "@csstools/postcss-oklab-function": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.14.tgz", - "integrity": "sha512-92xdpcfc2wB3z4+GftPA0PXMuGI/tRLw9Tc0+HzpaAHHxyLK6aCJtoQIcw0Ox/PthXtqXZn/3wWT/Idfe8I7Wg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", + "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } @@ -13325,14 +13325,14 @@ } }, "@csstools/postcss-relative-color-syntax": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.14.tgz", - "integrity": "sha512-NlxgLjAjVCTUVGiWk8WNj3dKvux9eC6O5aLM3BmdA8UXEwBHYI9r4IqlanxG9PlcXnzhTUX6eZsqgmxwt4FPow==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", + "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } @@ -13347,14 +13347,14 @@ } }, "@csstools/postcss-stepped-value-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz", - "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", + "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-text-decoration-shorthand": { @@ -13368,14 +13368,14 @@ } }, "@csstools/postcss-trigonometric-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz", - "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", + "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-unset-value": { @@ -13393,9 +13393,9 @@ "requires": {} }, "@csstools/selector-specificity": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", - "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.0.tgz", + "integrity": "sha512-tGDFEHZ4XJeIt5NF7/nAfLGqPckmDZSnYne5gl67p4agQolE5s4rofdQ3e+VkeukfR91lVtSQ/Jt9DqM1ICiIQ==", "dev": true, "requires": {} }, @@ -13534,9 +13534,9 @@ "integrity": "sha512-CrI6oAecoahG7PF5dsgjdvlF5kCtusVMjg810EULD81TvnDsP+k/FRi/ClFubWLgBo4EGpr2EfvmumtqQFo7ow==" }, "@github/tab-container-element": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-4.5.0.tgz", - "integrity": "sha512-8pzFJVg7AyPFqOjKFoiHwVQbo4MdTPpUfQwW91Hgj+OOvySZVmw4PU8ejU4qTHbb2oA2ajYMRuXuAvhfMgnS1Q==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.3.0.tgz", + "integrity": "sha512-vHlN/GXgaJFJhh4oUYRh1pc4RAqduKlQOrEjVgSxR4JhLXsQcZ/hKWfCsRZAuZbSPzUGEYvggdieamS4FRSe4g==" }, "@humanwhocodes/config-array": { "version": "0.11.14", @@ -13835,9 +13835,9 @@ } }, "@oddbird/popover-polyfill": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.1.tgz", - "integrity": "sha512-1MBMy92urkxoIy3qQecs6DzSgtVg9WElUhPXZ7GejqH8AmoakP6uMZGO1vyf0Cf9dBujqb0C+cXyZTTBLHWs0A==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@oddbird/popover-polyfill/-/popover-polyfill-0.4.3.tgz", + "integrity": "sha512-kBS0ZAwH8kZqFl0mV89KPK4cLYl2ZoKSfYngK4dz1eLAhKzTK0yu4LrvLdMeM7JhjWK6GxBtiY+cl1s6vR2pUg==" }, "@pkgjs/parseargs": { "version": "0.11.0", @@ -13874,12 +13874,20 @@ "requires": { "@primer/primitives": "^7.15.12", "@primer/view-components": "^0.19.0" + }, + "dependencies": { + "@primer/primitives": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.17.1.tgz", + "integrity": "sha512-SiPzEb+up1nDpV2NGwNiY8m6sGnF3OUqRb0has5s6T40vq6Li/g3cYVgl+oolEa4DUoNygEPs09jwJt24f/3zg==", + "dev": true + } } }, "@primer/primitives": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.17.0.tgz", - "integrity": "sha512-IlfBmMElmUbnQ4LIXSD2QLkty7akaNNQim9ofOjlE+LiVCwvxOuMEyZXVi9bm3hWLDszKyJ5mDLHKRuiY1/P+w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-8.1.0.tgz", + "integrity": "sha512-WixqDhIJHmQJD82JMmSwM9/LGkrA3HxNUgkkm4xubUY68il2ny7xYw5Jk8W2MwjTOyHHQ3hg9JaNV+BqVJ7N5A==", "dev": true }, "@primer/stylelint-config": { @@ -14185,14 +14193,6 @@ "@github/tab-container-element": "^3.1.2", "@oddbird/popover-polyfill": "^0.4.0", "@primer/behaviors": "^1.3.4" - }, - "dependencies": { - "@github/tab-container-element": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@github/tab-container-element/-/tab-container-element-3.4.0.tgz", - "integrity": "sha512-Yx70pO8A0p7Stnm9knKkUNX8i4bjuwDYZarRkM8JH0Z+ffhpe++oNAPbzGI9GEcGugRHvKuSC6p4YOdoHtTniQ==", - "dev": true - } } }, "@rollup/plugin-node-resolve": { @@ -15101,18 +15101,18 @@ "requires": {} }, "css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true }, "css-has-pseudo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz", - "integrity": "sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.4.tgz", + "integrity": "sha512-u9vuyeksska4OMRC061xTQb2RJZv7T1JJjnZbaQpNhZRPF1UqGpBqHnlcwRS/1vv+QOpD4NVsaFT4U1zmkciuA==", "dev": true, "requires": { - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0" } @@ -18090,14 +18090,14 @@ } }, "postcss-color-functional-notation": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.9.tgz", - "integrity": "sha512-8i/ofOArZ4fljp+3g+HI6Pok01Kb8YaSqInrJt2vMimEKrI0ZDNRLpH+wLhXBNu/Bi8zeWDvxhvCqsGSpu8E6Q==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", + "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } @@ -18145,39 +18145,39 @@ } }, "postcss-custom-media": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz", - "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "postcss-custom-properties": { - "version": "13.3.7", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.7.tgz", - "integrity": "sha512-0N9F/GUCr/D0IazjzHahyYW2bQVDT6qDtEudiGHAhMd3XqhfM3VmfYVlkc/40DOhsPtngSNb54/Ctu8msvFOvQ==", + "version": "13.3.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", + "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-custom-selectors": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz", - "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==", + "version": "7.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", + "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "postcss-selector-parser": "^6.0.13" } }, @@ -18292,14 +18292,14 @@ } }, "postcss-lab-function": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.14.tgz", - "integrity": "sha512-ddQS9FRWT8sfl4wfW0ae8fpP2JdLIuhC9pYpHq1077avjrLzg73T9IEVu5QmFa72nJhYFlO9CbqjcoSdEzfY9A==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", + "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^2.0.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } @@ -18404,13 +18404,13 @@ } }, "postcss-nesting": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.2.tgz", - "integrity": "sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==", + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.3.tgz", + "integrity": "sha512-8XVmgNNYlmIg1qxSP7O5n76nm0I71noCzlSCl7oqaL2opJ5nSB7r8/726yObKrUTRt6ipjiqHB1wYrMVTM66Sg==", "dev": true, "requires": { "@csstools/selector-resolve-nested": "^1.1.0", - "@csstools/selector-specificity": "^3.0.3", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" } }, @@ -18537,54 +18537,54 @@ } }, "postcss-preset-env": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.8.tgz", - "integrity": "sha512-AjQ5ZgrVJVL8Ja7UxIlbyHUN5knkdk6L0JxxV7KDZU4S5WfJjRNgvWlU7Xq7CMyRZSjHZBmLDOsBKIL9WStPyw==", + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.12.tgz", + "integrity": "sha512-aSeT8hNFKAgywopQE9MINFR5rZjRoA1MKv/Z09aLNlF3ki7Es3oeoFDx52po1QbBVvFuU9wSH/IosqqAa3oJow==", "dev": true, "requires": { - "@csstools/postcss-cascade-layers": "^4.0.4", - "@csstools/postcss-color-function": "^3.0.14", - "@csstools/postcss-color-mix-function": "^2.0.14", - "@csstools/postcss-exponential-functions": "^1.0.5", + "@csstools/postcss-cascade-layers": "^4.0.5", + "@csstools/postcss-color-function": "^3.0.16", + "@csstools/postcss-color-mix-function": "^2.0.16", + "@csstools/postcss-exponential-functions": "^1.0.7", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.7", - "@csstools/postcss-gradients-interpolation-method": "^4.0.15", - "@csstools/postcss-hwb-function": "^3.0.13", + "@csstools/postcss-gamut-mapping": "^1.0.9", + "@csstools/postcss-gradients-interpolation-method": "^4.0.17", + "@csstools/postcss-hwb-function": "^3.0.15", "@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-initial": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^4.0.6", - "@csstools/postcss-light-dark-function": "^1.0.3", + "@csstools/postcss-is-pseudo-class": "^4.0.7", + "@csstools/postcss-light-dark-function": "^1.0.5", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.7", - "@csstools/postcss-media-minmax": "^1.1.4", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7", + "@csstools/postcss-logical-viewport-units": "^2.0.9", + "@csstools/postcss-media-minmax": "^1.1.6", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.14", + "@csstools/postcss-oklab-function": "^3.0.16", "@csstools/postcss-progressive-custom-properties": "^3.2.0", - "@csstools/postcss-relative-color-syntax": "^2.0.14", + "@csstools/postcss-relative-color-syntax": "^2.0.16", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.6", + "@csstools/postcss-stepped-value-functions": "^3.0.8", "@csstools/postcss-text-decoration-shorthand": "^3.0.6", - "@csstools/postcss-trigonometric-functions": "^3.0.6", + "@csstools/postcss-trigonometric-functions": "^3.0.8", "@csstools/postcss-unset-value": "^3.0.1", "autoprefixer": "^10.4.19", "browserslist": "^4.22.3", "css-blank-pseudo": "^6.0.2", - "css-has-pseudo": "^6.0.3", + "css-has-pseudo": "^6.0.4", "css-prefers-color-scheme": "^9.0.1", "cssdb": "^8.0.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.9", + "postcss-color-functional-notation": "^6.0.11", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.4", - "postcss-custom-properties": "^13.3.7", - "postcss-custom-selectors": "^7.1.8", + "postcss-custom-media": "^10.0.6", + "postcss-custom-properties": "^13.3.10", + "postcss-custom-selectors": "^7.1.10", "postcss-dir-pseudo-class": "^8.0.1", "postcss-double-position-gradients": "^5.0.6", "postcss-focus-visible": "^9.0.1", @@ -18592,9 +18592,9 @@ "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.14", + "postcss-lab-function": "^6.0.16", "postcss-logical": "^7.0.1", - "postcss-nesting": "^12.1.2", + "postcss-nesting": "^12.1.3", "postcss-opacity-percentage": "^2.0.0", "postcss-overflow-shorthand": "^5.0.1", "postcss-page-break": "^3.0.4", @@ -19572,20 +19572,20 @@ } }, "stylelint": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", - "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.5.0.tgz", + "integrity": "sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^2.6.1", "@csstools/css-tokenizer": "^2.2.4", "@csstools/media-query-list-parser": "^2.1.9", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.0.3", "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.1", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", @@ -19614,7 +19614,7 @@ "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "dependencies": { @@ -19823,9 +19823,9 @@ } }, "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "requires": { "ajv": "^8.0.1", diff --git a/package.json b/package.json index 02d6949af2..9a6619f704 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@github/image-crop-element": "^5.0.0", "@github/include-fragment-element": "^6.1.1", "@github/relative-time-element": "^4.0.0", - "@github/tab-container-element": "^4.5.0", + "@github/tab-container-element": "^3.1.2", "@oddbird/popover-polyfill": "^0.4.0", "@primer/behaviors": "^1.3.4" }, @@ -63,7 +63,7 @@ "@github/prettier-config": "0.0.6", "@playwright/test": "^1.35.1", "@primer/css": "21.2.2", - "@primer/primitives": "^7.16.0", + "@primer/primitives": "^8.1.0", "@primer/stylelint-config": "^12.7.2", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^8.3.3", diff --git a/static/arguments.json b/static/arguments.json index 0bb6a4fde8..7f5e27accd 100644 --- a/static/arguments.json +++ b/static/arguments.json @@ -2462,6 +2462,18 @@ "default": "N/A", "description": "One of `:left` or `:right`. - Defaults to left" }, + { + "name": "body_arguments", + "type": "Hash", + "default": "`{}`", + "description": "[System arguments](/system-arguments) for the body wrapper." + }, + { + "name": "wrapper_arguments", + "type": "Hash", + "default": "`{}`", + "description": "[System arguments](/system-arguments) for the `TabContainer` wrapper." + }, { "name": "system_arguments", "type": "Hash", diff --git a/static/info_arch.json b/static/info_arch.json index 8ae4e1cee7..3ed7e39541 100644 --- a/static/info_arch.json +++ b/static/info_arch.json @@ -2284,7 +2284,7 @@ { "fully_qualified_name": "Primer::Alpha::Banner", "description": "Use `Banner` to highlight important information.", - "accessibility_docs": "Given that Banner is made visually prominent to sighted users through the use of icons and color, consider providing a heading and designating the Banner as a region landmark to improve navigability and discoverability of the Banner of assistive technology users. At this time, the PVC Banner does not render a heading nor render as a region landmark by default. This may be introduced in the future [as a breaking API change](https://github.com/primer/view_components/issues/2619). For now, consider providing an appropriate heading inside of the Banner and rendering the Banner as a `
` tag with `aria-labelledby=\"switch-this-with-banner-heading-id\"` to implicitly designate the Banner as a region landmark.\n\nA Banner can be used in one of two ways – to highlight information on a page, or to communicate an urgent message/feedback for a user action. For the latter scenario, it may be necessary to use a live region or focus management technique to ensure that the Banner is discoverable and accessible for all users. Otherwise, the Banner can easily be missed, including by those using magnification software or screen reader users who may not realize that a Banner has appeared. The appropriate technique to use is highly context-dependent. Visit the [Banner's Accessibility section](https://primer.style/components/banner#accessibility) or defer to the accessibility team to determine if your scenario requires either techniques.\n\n### Announcing a Banner\n When a Banner is used to communicate non-critical feedback, or is used in critical scenarios where moving focus is considered too disruptive, use a live region announcement to announce the content of the Banner to screen reader users.\n\n Live regions can be finicky and don't work well when injected dynamically. Setting a live region attribute on the Banner itself is discouraged as it will not announce as expected for most screen readers.\n\n To ensure a Banner is announced reliably, make sure that there's a live region container that is already on the page. When the Banner is shown, populate the live region container with the content of the Banner. This can be done in one of two ways. The first is to rely on a global live region container that is guaranteed to be on the page. When the Banner appears, populate this global live region container with the Banner content. The second technique is to hide or show the Banner within a live region wrapper that is guaranteed to always be on the page.\n\n For more information about either technique, visit [Staff only: Challenges with live regions](https://github.com/github/accessibility/blob/main/docs/coaching-recommendations/toast-flash-banner/accessible-banner-prototype.md#challenges-with-dynamically-inserted-live-region). This guidance is subject to change.\n\n### Focusing a Banner\n Focusing a Banner when it appears helps to maximize discoverability of the message, especially in critical scenarios.\n\n To properly focus a banner, add a `tabindex=\"-1\"` to the Banner container, and focus that container (one way is using the [`focus()` API](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus)).\n\n For more information about the focus management technique, visit the [Staff only: Accessible Banner Prototype docs](https://github.com/github/accessibility/blob/main/docs/coaching-recommendations/toast-flash-banner/accessible-banner-prototype.md#consideration). This guidance is subject to change.", + "accessibility_docs": "### Improve discoverability with a heading and landmark\nBanners are made visually prominent with icons and colors to immediately draw attention.\n\nTo ensure the Banner is also easily discoverable for assistive technology users, consider:\n1. Providing a heading inside of the Banner that describes the purpose of the Banner.\n2. Designating the Banner as a `region` landmark. This can be achieved by rendering the Banner as a `section` with an `aria-labelledby` pointing to the heading.\n\n### Communicating feedback\nWhen a Banner is used to communicate feedback, a live region or focus management technique should be in place to ensure that assistive technology users are aware of the feedback, especially when the Banner is shown client-side. Visit the [Banner's Accessibility section](https://primer.style/components/banner#accessibility), or defer to the accessibility team.\n\n#### Approach 1: Announcing a Banner\nA live region announcement can be used to communicate non-critical feedback, such as a success message.\n\nTo successfully trigger a live region announcement for a Banner that is un-`hidden` or dynamically injected onto the page, **do not** set the live region attribute/role on the Banner itself. Instead, it's important to rely on a live region that is already guaranteed to be on the page. Learn more about specific techniques at: [Staff only: Challenges with live regions](https://github.com/github/accessibility/blob/main/docs/coaching-recommendations/toast-flash-banner/accessible-banner-prototype.md#challenges-with-dynamically-inserted-live-region).\n\n#### Approach 2: Focusing a Banner\nFocusing the Banner can be appropriate for critical feedback scenarios, such as a [form validation error summary](https://primer.style/ui-patterns/forms/overview#interactive-summary-of-errors) where the Banner contains actions to help unblock the user.\n\nTo properly focus a Banner, add a `tabindex=\"-1\"` place focus with JavaScript (using the [`focus()` API](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus)).", "is_form_component": false, "is_published": true, "requires_js": true, @@ -7628,6 +7628,18 @@ "default": "N/A", "description": "One of `:left` or `:right`. - Defaults to left" }, + { + "name": "body_arguments", + "type": "Hash", + "default": "`{}`", + "description": "{{link_to_system_arguments_docs}} for the body wrapper." + }, + { + "name": "wrapper_arguments", + "type": "Hash", + "default": "`{}`", + "description": "{{link_to_system_arguments_docs}} for the `TabContainer` wrapper." + }, { "name": "system_arguments", "type": "Hash", diff --git a/test/components/alpha/tab_panels_test.rb b/test/components/alpha/tab_panels_test.rb index 48f1f9d199..1c501a09dd 100644 --- a/test/components/alpha/tab_panels_test.rb +++ b/test/components/alpha/tab_panels_test.rb @@ -31,8 +31,16 @@ def test_renders_tabs_and_panels_with_relevant_aria_attributes end assert_selector("tab-container") do - assert_selector("button#tab-1.tabnav-tab[aria-selected='true']", text: "Tab 1") - assert_selector("button#tab-2.tabnav-tab", text: "Tab 2") + assert_selector("div.tabnav") do + assert_selector("ul.tabnav-tabs[aria-label='label']") do + assert_selector("li") do + assert_selector("button#tab-1.tabnav-tab[aria-selected='true']", text: "Tab 1") + end + assert_selector("li") do + assert_selector("button#tab-2.tabnav-tab", text: "Tab 2") + end + end + end assert_selector("div#panel-tab-1[aria-labelledby='tab-1']", text: "Panel 1") assert_selector("div#panel-tab-2[aria-labelledby='tab-2']", text: "Panel 2", visible: false) end @@ -62,8 +70,16 @@ def test_renders_extra_content component.with_extra { "extra" } end assert_selector("tab-container") do - assert_selector("button#tab-1.tabnav-tab[aria-selected='true']", text: "Tab 1") - assert_selector("button#tab-2.tabnav-tab", text: "Tab 2") + assert_selector("div.tabnav") do + assert_selector("ul.tabnav-tabs[aria-label='label']") do + assert_selector("li") do + assert_selector("button#tab-1.tabnav-tab[aria-selected='true']", text: "Tab 1") + end + assert_selector("li") do + assert_selector("button#tab-2.tabnav-tab", text: "Tab 2") + end + end + end assert_selector("div#panel-tab-1[aria-labelledby='tab-1']", text: "Panel 1") assert_selector("div#panel-tab-2[aria-labelledby='tab-2']", text: "Panel 2", visible: false) assert_text("extra") diff --git a/test/components/alpha/underline_panels_test.rb b/test/components/alpha/underline_panels_test.rb index c577fac714..63a0d2bf40 100644 --- a/test/components/alpha/underline_panels_test.rb +++ b/test/components/alpha/underline_panels_test.rb @@ -20,13 +20,21 @@ def test_renders_panels_and_tab_container end end - assert_selector("tab-container.UnderlineNav") do - assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") - assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") - assert_selector("div.UnderlineNav-actions", text: "Actions content") + assert_selector("tab-container") do + assert_selector("div.UnderlineNav") do + assert_selector("ul.UnderlineNav-body[role='tablist'][aria-label='label']") do + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") + end + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") + end + end + assert_selector("div.UnderlineNav-actions", text: "Actions content") + end + assert_selector("div[role='tabpanel']", text: "Panel 1") + assert_selector("div[role='tabpanel']", text: "Panel 2", visible: false) end - assert_selector("div[role='tabpanel']", text: "Panel 1") - assert_selector("div[role='tabpanel']", text: "Panel 2", visible: false) end def test_customizes_tab_container @@ -37,7 +45,7 @@ def test_customizes_tab_container end end - assert_selector("div.m-2.custom-class") + assert_selector("tab-container.m-2.custom-class") end def test_raises_if_multiple_tabs_are_selected @@ -101,9 +109,15 @@ def test_align_falls_back_to_default refute_selector(".UnderlineNav--right") - assert_selector("tab-container.UnderlineNav") do - assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") - assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") + assert_selector("div.UnderlineNav") do + assert_selector("ul.UnderlineNav-body[aria-label='label']") do + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") + end + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") + end + end assert_selector("div.UnderlineNav-actions", text: "Actions content") end end @@ -123,9 +137,15 @@ def test_adds_underline_nav_right_when_align_right_is_set end end - assert_selector("tab-container.UnderlineNav.UnderlineNav--right") do - assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") - assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") + assert_selector("div.UnderlineNav.UnderlineNav--right") do + assert_selector("ul.UnderlineNav-body[aria-label='label']") do + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") + end + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") + end + end assert_selector("div.UnderlineNav-actions", text: "Actions content") end end @@ -144,6 +164,8 @@ def test_puts_actions_first_if_align_right_and_actions_exist "Actions content" end end + + assert_selector(".UnderlineNav > .UnderlineNav-body:last-child") end def test_renders_tab_icon_with_correct_classes diff --git a/test/css/component_specific_selectors_test.rb b/test/css/component_specific_selectors_test.rb index e52e3cb2ff..76e795384a 100644 --- a/test/css/component_specific_selectors_test.rb +++ b/test/css/component_specific_selectors_test.rb @@ -50,7 +50,6 @@ class ComponentSpecificSelectorsTest < Minitest::Test ], Primer::Alpha::TabNav => [ ".tabnav-tab.selected", - "tab-container .tabnav-tab", ".tabnav-extra", ".tabnav-btn" ], diff --git a/test/system/alpha/tab_panels_test.rb b/test/system/alpha/tab_panels_test.rb index 158dabfa51..3736a777a4 100644 --- a/test/system/alpha/tab_panels_test.rb +++ b/test/system/alpha/tab_panels_test.rb @@ -6,12 +6,22 @@ module Alpha class IntegrationTabPanelsTest < System::TestCase def assert_tab_panels_rendered assert_selector("tab-container") do - assert_selector("button#tab-1.tabnav-tab[role='tab'][aria-selected='true']", text: "Tab 1") - assert_selector("button#tab-2.tabnav-tab[role='tab']", text: "Tab 2") - assert_selector("button#tab-3.tabnav-tab[role='tab']", text: "Tab 3") + assert_selector("div.tabnav") do + assert_selector("ul.tabnav-tabs[role='tablist']") do + assert_selector("li[role='presentation']") do + assert_selector("button#tab-1.tabnav-tab[role='tab'][aria-selected='true']", text: "Tab 1") + end + assert_selector("li[role='presentation']") do + assert_selector("button#tab-2.tabnav-tab[role='tab']", text: "Tab 2") + end + assert_selector("li[role='presentation']") do + assert_selector("button#tab-3.tabnav-tab[role='tab']", text: "Tab 3") + end + end + end assert_selector("div#panel-tab-1[role='tabpanel']", text: "Panel 1") - refute_selector("div#panel-tab-2[role='tabpanel']", text: "Panel 2") - refute_selector("div#panel-tab-3[role='tabpanel']", text: "Panel 3") + assert_selector("div#panel-tab-2[role='tabpanel']", text: "Panel 2", visible: false) + assert_selector("div#panel-tab-3[role='tabpanel']", text: "Panel 3", visible: false) end end @@ -27,7 +37,7 @@ def assert_selects_tab(tab) def assert_shows_panel(panel) (1..3).each do |num| - assert_selector("div[role='tabpanel']", text: "Panel #{num}", visible: panel == num) + assert_selector("div[role='tabpanel']#{'[hidden]' unless panel == num}", text: "Panel #{num}", visible: panel == num) end end diff --git a/test/system/alpha/underline_panels_test.rb b/test/system/alpha/underline_panels_test.rb index 7538462426..2ec4e4f7ce 100644 --- a/test/system/alpha/underline_panels_test.rb +++ b/test/system/alpha/underline_panels_test.rb @@ -5,10 +5,20 @@ module Alpha class IntegrationUnderlinePanelsTest < System::TestCase def assert_underline_panels_rendered - assert_selector("tab-container.UnderlineNav") do - assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") - assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") - assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 3") + assert_selector("tab-container") do + assert_selector("div.UnderlineNav") do + assert_selector("ul.UnderlineNav-body[role='tablist']") do + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab'][aria-selected='true']", text: "Tab 1") + end + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 2") + end + assert_selector("li[role='presentation']") do + assert_selector("button.UnderlineNav-item[role='tab']", text: "Tab 3") + end + end + end assert_selector("div[role='tabpanel']", text: "Panel 1") assert_selector("div[role='tabpanel']", text: "Panel 2", visible: false) assert_selector("div[role='tabpanel']", text: "Panel 3", visible: false) @@ -27,7 +37,7 @@ def assert_selects_tab(tab) def assert_shows_panel(panel) (1..3).each do |num| - assert_selector("div[role='tabpanel']", text: "Panel #{num}", visible: panel == num) + assert_selector("div[role='tabpanel']#{'[hidden]' unless panel == num}", text: "Panel #{num}", visible: panel == num) end end