diff --git a/ui/admin/app/components/scope-picker/index.hbs b/addons/core/addon/components/scope-picker/index.hbs similarity index 89% rename from ui/admin/app/components/scope-picker/index.hbs rename to addons/core/addon/components/scope-picker/index.hbs index 1d42c5beef..6645f7037d 100644 --- a/ui/admin/app/components/scope-picker/index.hbs +++ b/addons/core/addon/components/scope-picker/index.hbs @@ -4,19 +4,15 @@ }} {{#let this.currentScope as |scope|}} - + {{/let}} `[href="/scopes/${id}"] .hds-icon-check`; + const SELECTED_SCOPE_CHECK = + '.hds-dropdown-list-item--variant-checkmark-selected .hds-text'; let global; let scopeService; @@ -195,7 +196,7 @@ module('Integration | Component | scope-picker/index', function (hooks) { assert.dom(SCOPE_PICKER_DROPDOWN).hasText('Global'); assert.dom(SCOPE_PICKER_DROPDOWN_ICON).hasClass('hds-icon-globe'); - assert.dom(SELECTED_SCOPE_CHECK('global')).isVisible(); + assert.dom(SELECTED_SCOPE_CHECK).hasText('Global'); }); test('it renders correct dropdown button text and icon when selected scope is org type', async function (assert) { @@ -215,7 +216,7 @@ module('Integration | Component | scope-picker/index', function (hooks) { assert.dom(SCOPE_PICKER_DROPDOWN).hasText(scopeService.org.displayName); assert.dom(SCOPE_PICKER_DROPDOWN_ICON).hasClass('hds-icon-org'); - assert.dom(SELECTED_SCOPE_CHECK(scopeService.org.id)).isVisible(); + assert.dom(SELECTED_SCOPE_CHECK).hasText(scopeService.org.displayName); }); test('it renders correct dropdown button text and icon when selected scope is project type', async function (assert) { @@ -229,7 +230,6 @@ module('Integration | Component | scope-picker/index', function (hooks) { }); query.filters.scope_id = [{ equals: org.id }]; const projects = await store.query('scope', { scope_id: org.id, query }); - scopeService.org = global; scopeService.project = projects[0]; query.filters.scope_id = [{ equals: 'global' }]; scopeService.orgsList = await store.query('scope', { @@ -243,6 +243,6 @@ module('Integration | Component | scope-picker/index', function (hooks) { assert.dom(SCOPE_PICKER_DROPDOWN).hasText(scopeService.project.displayName); assert.dom(SCOPE_PICKER_DROPDOWN_ICON).hasClass('hds-icon-grid'); - assert.dom(SELECTED_SCOPE_CHECK(scopeService.project.id)).isVisible(); + assert.dom(SELECTED_SCOPE_CHECK).hasText(scopeService.project.displayName); }); }); diff --git a/addons/core/tests/unit/utils/param-value-finder-test.js b/addons/core/tests/unit/utils/param-value-finder-test.js new file mode 100644 index 0000000000..10b9aadfd9 --- /dev/null +++ b/addons/core/tests/unit/utils/param-value-finder-test.js @@ -0,0 +1,55 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; +import { paramValueFinder } from 'core/utils/param-value-finder'; + +module('Unit | Utility | param-value-finder', function (hooks) { + setupTest(hooks); + + test('returns empty array when null or empty routeInfo object is used', function (assert) { + let result = paramValueFinder('scopes', null); + + assert.deepEqual(result, []); + + result = paramValueFinder('scopes', {}); + + assert.deepEqual(result, []); + }); + + test('returns correct array when routeInfo object is used', function (assert) { + // Route being tested is '/scopes' + const application = { localName: 'application', params: {}, parent: null }; + const scopes = { localName: 'scopes', params: {}, parent: application }; + const scopesIndex = { + localName: 'index', + name: 'scopes.index', + parent: scopes, + }; + let result = paramValueFinder('scopes', scopesIndex.parent); + + assert.deepEqual(result, []); + + // Route being tested is '/scopes/global/auth-methods' + const scope = { + localName: 'scope', + params: { scope_id: 'global' }, + parent: scopes, + }; + const authMethods = { + localName: 'auth-methods', + params: {}, + parent: scope, + }; + const authMethodsIndex = { + localName: 'index', + name: 'scopes.scope.auth-methods.index', + parent: authMethods, + }; + result = paramValueFinder('scopes', authMethodsIndex.parent); + assert.deepEqual(result, ['global']); + }); +}); diff --git a/addons/rose/addon/components/rose/header/brand/index.hbs b/addons/rose/addon/components/rose/header/brand/index.hbs deleted file mode 100644 index d24e7e489b..0000000000 --- a/addons/rose/addon/components/rose/header/brand/index.hbs +++ /dev/null @@ -1,24 +0,0 @@ -{{! - Copyright (c) HashiCorp, Inc. - SPDX-License-Identifier: BUSL-1.1 -}} - - - - {{#if @logo}} - {{inline-svg @logo}} - {{/if}} - - {{#if @text}} - {{@text}} - {{/if}} - - \ No newline at end of file diff --git a/addons/rose/addon/components/rose/header/index.hbs b/addons/rose/addon/components/rose/header/index.hbs deleted file mode 100644 index 70dcd90aa2..0000000000 --- a/addons/rose/addon/components/rose/header/index.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{{! - Copyright (c) HashiCorp, Inc. - SPDX-License-Identifier: BUSL-1.1 -}} - -
- {{yield - (hash - brand=(component 'rose/header/brand') - utilities=(component 'rose/header/utilities') - nav=(component 'rose/header/nav') - ) - }} -
\ No newline at end of file diff --git a/addons/rose/addon/components/rose/header/nav/index.hbs b/addons/rose/addon/components/rose/header/nav/index.hbs deleted file mode 100644 index afee26cd00..0000000000 --- a/addons/rose/addon/components/rose/header/nav/index.hbs +++ /dev/null @@ -1,8 +0,0 @@ -{{! - Copyright (c) HashiCorp, Inc. - SPDX-License-Identifier: BUSL-1.1 -}} - - \ No newline at end of file diff --git a/addons/rose/addon/components/rose/header/utilities/index.hbs b/addons/rose/addon/components/rose/header/utilities/index.hbs deleted file mode 100644 index e5a61a884b..0000000000 --- a/addons/rose/addon/components/rose/header/utilities/index.hbs +++ /dev/null @@ -1,8 +0,0 @@ -{{! - Copyright (c) HashiCorp, Inc. - SPDX-License-Identifier: BUSL-1.1 -}} - -
- {{yield}} -
\ No newline at end of file diff --git a/addons/rose/addon/components/rose/layout/global/index.hbs b/addons/rose/addon/components/rose/layout/global/index.hbs deleted file mode 100644 index 5724af0f7d..0000000000 --- a/addons/rose/addon/components/rose/layout/global/index.hbs +++ /dev/null @@ -1,16 +0,0 @@ -{{! - Copyright (c) HashiCorp, Inc. - SPDX-License-Identifier: BUSL-1.1 -}} - -
- {{yield - (hash - header=(component - 'rose/anonymous' tagName='header' class='rose-layout-global-header' - ) - body=(component 'rose/anonymous' class='rose-layout-global-body') - footer=(component 'rose/anonymous' class='rose-layout-global-footer') - ) - }} -
\ No newline at end of file diff --git a/addons/rose/addon/styles/hds/overrides.scss b/addons/rose/addon/styles/hds/overrides.scss index f21fb9c7ce..1a79769192 100644 --- a/addons/rose/addon/styles/hds/overrides.scss +++ b/addons/rose/addon/styles/hds/overrides.scss @@ -59,20 +59,3 @@ form { color: inherit; } } - -// TODO: This is a temporary fix that ensures changing the color theme won't alter the dropdown colors. -.app-frame-sidebar-style-overrides .side-nav-style-overrides { - .hds-dropdown-toggle-button, - .hds-dropdown-toggle-icon { - background: var(--token-side-nav-color-surface-primary); - - &:hover { - background: var(--token-side-nav-color-surface-interactive-hover); - } - - &:active, - &:focus { - background: var(--token-side-nav-color-surface-primary); - } - } -} diff --git a/addons/rose/addon/styles/hds/themes/dark-mode/_color-tokens-tier-2.scss b/addons/rose/addon/styles/hds/themes/dark-mode/_color-tokens-tier-2.scss index ef29788d11..b2c5f9bbb6 100644 --- a/addons/rose/addon/styles/hds/themes/dark-mode/_color-tokens-tier-2.scss +++ b/addons/rose/addon/styles/hds/themes/dark-mode/_color-tokens-tier-2.scss @@ -259,4 +259,24 @@ --token-form-toggle-base-surface-color-default: var( --token-color-palette-neutral-100 ); /* the toggle has a different base surface color, compared to the other controls */ + + // Hds app side nav color-mappings + --token-app-side-nav-color-foreground-primary: var( + --token-color-palette-neutral-600 + ); + --token-app-side-nav-color-surface-primary: var( + --token-color-palette-neutral-50 + ); + --token-app-side-nav-wrapper-border-color: var( + --token-color-palette-neutral-200 + ); + --token-app-side-nav-color-foreground-faint: var( + --token-color-palette-neutral-500 + ); + --token-app-side-nav-color-surface-interactive-hover: var( + --token-color-palette-neutral-100 + ); + --token-app-side-nav-color-surface-interactive-active: var( + --token-color-palette-neutral-300 + ); } diff --git a/addons/rose/addon/styles/hds/themes/dark-mode/index.scss b/addons/rose/addon/styles/hds/themes/dark-mode/index.scss index 9aa3916ff5..b2499908db 100644 --- a/addons/rose/addon/styles/hds/themes/dark-mode/index.scss +++ b/addons/rose/addon/styles/hds/themes/dark-mode/index.scss @@ -121,14 +121,80 @@ } } +@mixin dark-mode-button-override { + /* stylelint-disable-next-line selector-class-pattern */ + .hds-app-frame:has( + .hds-app-side-nav--is-mobile.hds-app-side-nav--is-not-minimized + ) { + /* stylelint-disable-next-line selector-class-pattern */ + .hds-button, + .hds-dropdown-toggle-button, + .hds-dropdown-toggle-icon, + .hds-app-header__home-link { + color: var(--token-color-palette-neutral-200); + background-color: var(--token-color-palette-neutral-50); + border-color: var(--token-color-palette-neutral-100); + } + } +} + +@mixin dark-mode-app-header-override { + .hds-app-header { + color: var(--token-color-palette-neutral-700); + background: var(--token-color-palette-neutral-0); + border-bottom-color: var(--token-color-palette-neutral-100); + + &__home-link { + background-color: var(--token-color-palette-neutral-0); + } + } + + .hds-dropdown-toggle-button, + .hds-dropdown-toggle-icon { + background: var(--token-color-palette-neutral-0); + border-color: var(--token-color-palette-neutral-100); + + &:hover { + background: var(--token-color-palette-neutral-50); + } + + &:active, + &:focus { + background: var(--token-color-palette-neutral-0); + } + } +} + +@mixin dark-mode-app-side-nav-override { + .hds-app-side-nav { + &__overlay { + background-color: var(--token-color-palette-neutral-50); + } + + &__list-title { + color: var(--token-color-palette-neutral-300); + } + + &__list-item-link.active { + background: var(--token-color-palette-neutral-100); + } + } +} + @media (prefers-color-scheme: dark) { .ember-application:not(.rose-theme-light) { @include dark-mode; @include dark-mode-modal-override; + @include dark-mode-app-header-override; + @include dark-mode-app-side-nav-override; + @include dark-mode-button-override; } } .ember-application.rose-theme-dark { @include dark-mode; @include dark-mode-modal-override; + @include dark-mode-app-header-override; + @include dark-mode-app-side-nav-override; + @include dark-mode-button-override; } diff --git a/addons/rose/app/components/rose/header/nav.js b/addons/rose/app/components/rose/header/nav.js deleted file mode 100644 index 7684ecf05d..0000000000 --- a/addons/rose/app/components/rose/header/nav.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -export { default } from 'rose/components/rose/header/nav'; diff --git a/addons/rose/app/components/rose/header/utilities.js b/addons/rose/app/components/rose/header/utilities.js deleted file mode 100644 index 7c759ca10f..0000000000 --- a/addons/rose/app/components/rose/header/utilities.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -export { default } from 'rose/components/rose/header/utilities'; diff --git a/addons/rose/app/components/rose/layout/global.js b/addons/rose/app/components/rose/layout/global.js deleted file mode 100644 index 8d0f6f6d3d..0000000000 --- a/addons/rose/app/components/rose/layout/global.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -export { default } from 'rose/components/rose/layout/global'; diff --git a/addons/rose/app/styles/rose/components/_index.scss b/addons/rose/app/styles/rose/components/_index.scss index 907c97f8cc..949d444e79 100644 --- a/addons/rose/app/styles/rose/components/_index.scss +++ b/addons/rose/app/styles/rose/components/_index.scss @@ -8,7 +8,6 @@ @use 'code-editor'; @use 'form'; @use 'frame'; -@use 'header'; @use 'layout'; @use 'list'; @use 'metadata-list'; diff --git a/addons/rose/app/styles/rose/components/header/_brand.scss b/addons/rose/app/styles/rose/components/header/_brand.scss deleted file mode 100644 index 1612859e07..0000000000 --- a/addons/rose/app/styles/rose/components/header/_brand.scss +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -@use '../../variables/sizing'; -@use '../../utilities/type'; - -.rose-header-brand { - grid-area: brand; - display: flex; - align-items: center; - color: var(--white); - text-decoration: none; - padding: 0 10px; - margin: 10px; - - svg { - display: block; - } - - .rose-header-brand-text { - @include type.type(m, normal); - - margin: 0; - margin-left: sizing.rems(s); - white-space: nowrap; - position: absolute; - top: -1000px; - left: -1000px; - opacity: 0; - width: 1px; - height: 1px; - } -} diff --git a/addons/rose/app/styles/rose/components/header/_dropdown.scss b/addons/rose/app/styles/rose/components/header/_dropdown.scss deleted file mode 100644 index 3a277aef89..0000000000 --- a/addons/rose/app/styles/rose/components/header/_dropdown.scss +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -.rose-header { - // Temporary fix: This header component will be retired upon integrating HDS side nav for desktop. - .header-dropdown-button-override > button { - background: var(--black); - border: none; - color: var(--white); - } -} diff --git a/addons/rose/app/styles/rose/components/header/_index.scss b/addons/rose/app/styles/rose/components/header/_index.scss deleted file mode 100644 index 95c83b2943..0000000000 --- a/addons/rose/app/styles/rose/components/header/_index.scss +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -@use '../../variables/sizing'; -@use '../../variables/media'; -@use '../../utilities/type'; - -@use 'brand'; -@use 'nav'; -@use 'utilities'; -@use 'dropdown'; - -.rose-header { - --box-shadow-light: none; - --box-shadow-dark: inset 0 -#{sizing.rems(xxxxs)} 0 var(--ui-border-subtler-1); - --box-shadow: var(--box-shadow-light); - - display: grid; - grid-template-areas: 'brand nav utilities'; - grid-template-columns: 0.01fr auto 1fr; - background: var(--black); - box-shadow: var(--box-shadow); - - .ember-application.rose-theme-light & { - --box-shadow: var(--box-shadow-light); - } - - @media (prefers-color-scheme: dark) { - --box-shadow: var(--box-shadow-dark); - } - - .ember-application.rose-theme-dark & { - --box-shadow: var(--box-shadow-dark); - } -} - -@media (width <= (media.width(small))) { - .rose-header { - grid-template-columns: 1fr 3fr; - grid-template-areas: - 'brand utilities' - 'nav nav'; - padding-bottom: 0; - } -} diff --git a/addons/rose/app/styles/rose/components/header/_nav.scss b/addons/rose/app/styles/rose/components/header/_nav.scss deleted file mode 100644 index 09671b088b..0000000000 --- a/addons/rose/app/styles/rose/components/header/_nav.scss +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -@use '../../variables/sizing'; -@use '../../variables/media'; - -.rose-header-nav { - grid-area: nav; - display: flex; - flex-wrap: wrap; - align-items: center; - margin-right: sizing.rems(s); - - @media (width <= (media.width(small))) { - padding: 0 20px; - background: var(--ui-header-subtler); - } -} diff --git a/addons/rose/app/styles/rose/components/header/_utilities.scss b/addons/rose/app/styles/rose/components/header/_utilities.scss deleted file mode 100644 index c27512b156..0000000000 --- a/addons/rose/app/styles/rose/components/header/_utilities.scss +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -@use '../../variables/sizing'; - -.rose-header-utilities { - grid-area: utilities; - display: flex; - flex-wrap: wrap; - flex-direction: row-reverse; - align-items: center; - margin-right: sizing.rems(s); -} diff --git a/addons/rose/app/styles/rose/components/layout/_global.scss b/addons/rose/app/styles/rose/components/layout/_global.scss deleted file mode 100644 index 6715e109fe..0000000000 --- a/addons/rose/app/styles/rose/components/layout/_global.scss +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -.rose-layout-global { - min-height: 100vh; - display: flex; - flex-direction: column; - - .rose-layout-global-body { - flex: 1; - display: flex; - } -} diff --git a/addons/rose/app/styles/rose/components/layout/_index.scss b/addons/rose/app/styles/rose/components/layout/_index.scss index 76bb2be7d1..0ed5788393 100644 --- a/addons/rose/app/styles/rose/components/layout/_index.scss +++ b/addons/rose/app/styles/rose/components/layout/_index.scss @@ -3,7 +3,6 @@ * SPDX-License-Identifier: BUSL-1.1 */ -@use 'global'; @use 'sidebar'; @use 'page'; @use 'centered'; diff --git a/addons/rose/app/styles/rose/components/layout/_page.scss b/addons/rose/app/styles/rose/components/layout/_page.scss index b924f2963c..97e0893301 100644 --- a/addons/rose/app/styles/rose/components/layout/_page.scss +++ b/addons/rose/app/styles/rose/components/layout/_page.scss @@ -18,6 +18,7 @@ .rose-layout-page-header { grid-area: header; margin-bottom: sizing.rems(s); + margin-top: sizing.rems(l); h1 { display: flex; diff --git a/addons/rose/package.json b/addons/rose/package.json index 6314579664..4a27aa509e 100644 --- a/addons/rose/package.json +++ b/addons/rose/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@babel/core": "^7.26.10", - "@hashicorp/design-system-components": "^4.20.2", + "@hashicorp/design-system-components": "^4.23.1", "@hashicorp/design-system-tokens": "^2.3.0", "@hashicorp/flight-icons": "^3.10.0", "@nullvoxpopuli/ember-composable-helpers": "^5.2.10", diff --git a/addons/rose/tests/integration/components/rose/header-test.js b/addons/rose/tests/integration/components/rose/header-test.js deleted file mode 100644 index aee18bbd28..0000000000 --- a/addons/rose/tests/integration/components/rose/header-test.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import { hbs } from 'ember-cli-htmlbars'; - -module('Integration | Component | rose/header', function (hooks) { - setupRenderingTest(hooks); - - test('it renders', async function (assert) { - await render(hbs``); - assert.ok(find('.rose-header')); - }); - - test('it renders with brand', async function (assert) { - await render(hbs` - - `); - assert.ok(find('.rose-header-brand')); - assert.notOk(find('.rose-header-nav')); - assert.notOk(find('.rose-header-utilities')); - }); - - test('it renders with nav', async function (assert) { - await render(hbs` - - `); - assert.ok(find('.rose-header-nav')); - assert.notOk(find('.rose-header-brand')); - assert.notOk(find('.rose-header-utilities')); - }); - - test('it renders with utilities', async function (assert) { - await render(hbs` - - `); - assert.notOk(find('.rose-header-brand')); - assert.notOk(find('.rose-header-nav')); - assert.ok(find('.rose-header-utilities')); - }); - - test('it renders the hds dropdown within header utilities', async function (assert) { - await render(hbs` - - - - - - `); - assert.ok(find('.hds-dropdown')); - }); -}); diff --git a/addons/rose/tests/integration/components/rose/header/brand-test.js b/addons/rose/tests/integration/components/rose/header/brand-test.js deleted file mode 100644 index 5e18d7d19d..0000000000 --- a/addons/rose/tests/integration/components/rose/header/brand-test.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import { hbs } from 'ember-cli-htmlbars'; - -module('Integration | Component | rose/header/brand', function (hooks) { - setupRenderingTest(hooks); - - test('it renders', async function (assert) { - await render(hbs` - - `); - assert.ok(find('.rose-header-brand')); - assert.ok(find('.rose-header-brand svg')); - assert.strictEqual( - find('.rose-header-brand-text').textContent.trim(), - 'Product Name', - ); - }); -}); diff --git a/addons/rose/tests/integration/components/rose/header/nav-test.js b/addons/rose/tests/integration/components/rose/header/nav-test.js deleted file mode 100644 index cf52fb25fd..0000000000 --- a/addons/rose/tests/integration/components/rose/header/nav-test.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import { hbs } from 'ember-cli-htmlbars'; - -module('Integration | Component | rose/header/nav', function (hooks) { - setupRenderingTest(hooks); - - test('it renders', async function (assert) { - await render(hbs``); - assert.ok(find('.rose-header-nav')); - }); -}); diff --git a/addons/rose/tests/integration/components/rose/header/utilities-test.js b/addons/rose/tests/integration/components/rose/header/utilities-test.js deleted file mode 100644 index 15c5b060c4..0000000000 --- a/addons/rose/tests/integration/components/rose/header/utilities-test.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import { hbs } from 'ember-cli-htmlbars'; - -module('Integration | Component | rose/header/utilities', function (hooks) { - setupRenderingTest(hooks); - - test('it renders', async function (assert) { - await render(hbs``); - assert.ok(find('.rose-header-utilities')); - }); -}); diff --git a/addons/rose/tests/integration/components/rose/layout/global-test.js b/addons/rose/tests/integration/components/rose/layout/global-test.js deleted file mode 100644 index c2422c4f5b..0000000000 --- a/addons/rose/tests/integration/components/rose/layout/global-test.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, find } from '@ember/test-helpers'; -import { hbs } from 'ember-cli-htmlbars'; - -module('Integration | Component | rose/layout/global', function (hooks) { - setupRenderingTest(hooks); - - test('it renders', async function (assert) { - await render(hbs``); - assert.ok(find('section')); - assert.ok(find('.rose-layout-global')); - }); - - test('it renders with attributes', async function (assert) { - await render(hbs``); - assert.ok(find('#global')); - }); - - test('it renders with header', async function (assert) { - await render(hbs` - - `); - assert.ok(find('.rose-layout-global-header')); - }); - - test('it renders with body', async function (assert) { - await render(hbs` - - `); - assert.ok(find('.rose-layout-global-body')); - }); - - test('it renders with footer', async function (assert) { - await render(hbs` - - `); - assert.ok(find('.rose-layout-global-footer')); - }); -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b219c2cdca..fcd94ae65d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -535,8 +535,8 @@ importers: specifier: ^7.26.10 version: 7.27.1 '@hashicorp/design-system-components': - specifier: ^4.20.2 - version: 4.20.2(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@3.1.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + specifier: ^4.23.1 + version: 4.23.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) '@hashicorp/design-system-tokens': specifier: ^2.3.0 version: 2.3.0 @@ -968,6 +968,9 @@ importers: '@xterm/xterm': specifier: ^5.5.0 version: 5.5.0 + ember-a11y-refocus: + specifier: ^5.0.0 + version: 5.0.0(@babel/core@7.27.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) ember-named-blocks-polyfill: specifier: ^0.2.5 version: 0.2.5 @@ -2044,10 +2047,6 @@ packages: '@glint/template': optional: true - '@ember/string@3.1.1': - resolution: {integrity: sha512-UbXJ+k3QOrYN4SRPHgXCqYIJ+yWWUg1+vr0H4DhdQPTy8LJfyqwZ2tc5uqpSSnEXE+/1KopHBE5J8GDagAg5cg==} - engines: {node: 12.* || 14.* || >= 16} - '@ember/string@4.0.1': resolution: {integrity: sha512-VWeng8BSWrIsdPfffOQt/bKwNKJL7+37gPFh/6iZZ9bke+S83kKqkS30poo4bTGfRcMnvAE0ie7txom+iDu81Q==} @@ -2065,8 +2064,8 @@ packages: resolution: {integrity: sha512-gcJuHiXgnrzaU8NyU+2bMbtS6PNOr5v5B8OXBqaBvTCsMpXLvKo8OBOQFCoUN0rPX2J6VaFqrbi/371sMvzZug==} engines: {node: 12.* || 14.* || >= 16} - '@embroider/macros@1.16.13': - resolution: {integrity: sha512-2oGZh0m1byBYQFWEa8b2cvHJB2LzaF3DdMCLCqcRAccABMROt1G3sultnNCT30NhfdGWMEsJOT3Jm4nFxXmTRw==} + '@embroider/macros@1.18.0': + resolution: {integrity: sha512-KanP80XxNK4bmQ1HKTcUjy/cdCt9n7knPMLK1vzHdOFymACHo+GbhgUjXjYdOCuBTv+ZwcjL2P2XDmBcYS9r8g==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@glint/template': ^1.0.0 @@ -2074,8 +2073,8 @@ packages: '@glint/template': optional: true - '@embroider/macros@1.18.0': - resolution: {integrity: sha512-KanP80XxNK4bmQ1HKTcUjy/cdCt9n7knPMLK1vzHdOFymACHo+GbhgUjXjYdOCuBTv+ZwcjL2P2XDmBcYS9r8g==} + '@embroider/macros@1.18.2': + resolution: {integrity: sha512-mkgk0yjcYgujZQv9IGLD3yPb4a+d6EDKm22GK6TUyBCF8veTeg6HBXwHfu6K2DCnG0LEwnb2MJ0WCFGmTiatPw==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@glint/template': ^1.0.0 @@ -2091,6 +2090,10 @@ packages: resolution: {integrity: sha512-5J5ipUMCAinQS38WW7wedruq5Z4VnHvNo+ZgOduw0PtI9w0CQWx7/HE+98PBDW8jclikeF+aHwF317vc1hwuzg==} engines: {node: 12.* || 14.* || >= 16} + '@embroider/shared-internals@3.0.1': + resolution: {integrity: sha512-d7RQwDwqqHo7YvjE9t1rtIrCCYtbSoO0uRq2ikVhRh4hGS5OojZNu2ZtS0Wqrg+V72CRtMFr/hibTvHNsRM2Lg==} + engines: {node: 12.* || 14.* || >= 16} + '@embroider/test-setup@4.0.0': resolution: {integrity: sha512-1S3Ebk0CEh3XDqD93AWSwQZBCk+oGv03gtkaGgdgyXGIR7jrVyDgEnEuslN/hJ0cuU8TqhiXrzHMw7bJwIGhWw==} engines: {node: 12.* || 14.* || >= 16} @@ -2106,21 +2109,8 @@ packages: '@embroider/webpack': optional: true - '@embroider/util@1.13.2': - resolution: {integrity: sha512-6/0sK4dtFK7Ld+t5Ovn9EilBVySoysMRdDAf/jGteOO7jdLKNgHnONg0w1T7ZZaMFUQfwJdRrk3u0dM+Idhiew==} - engines: {node: 12.* || 14.* || >= 16} - peerDependencies: - '@glint/environment-ember-loose': ^1.0.0 - '@glint/template': ^1.0.0 - ember-source: '*' - peerDependenciesMeta: - '@glint/environment-ember-loose': - optional: true - '@glint/template': - optional: true - - '@embroider/util@1.13.3': - resolution: {integrity: sha512-fb9S137zZqSI1IeWpGKVJ+WZHsRiIrD9D2A4aVwVH0dZeBKDg6lMaMN2MiXJ/ldUAG3DUFxnClnpiG5m2g3JFA==} + '@embroider/util@1.13.4': + resolution: {integrity: sha512-TqA0SNQarSJUdYGv+39MBCHkiuxhr2u0iKJP/JnDmQkCiVhvuFWy3P3n5sI26fVrVwG3DJLfxE2XVnB37udFOA==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@glint/environment-ember-loose': ^1.0.0 @@ -2462,18 +2452,25 @@ packages: '@handlebars/parser@2.0.0': resolution: {integrity: sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==} - '@hashicorp/design-system-components@4.20.2': - resolution: {integrity: sha512-0FDaDlvaQQVVXoSoWsExmW1TUgmuJNoCz11JuwaOwin59Vl4ttVLsNvY8DviGJlh6VhV1yYlGJa7X2xhQG+ESQ==} + '@hashicorp/design-system-components@4.23.1': + resolution: {integrity: sha512-fPwU71wMKDOSbdEggFlyFb5xprLwUGoIkxFaJHqrQkDZ5HwVrxWLEtfBVloJlWsKNcsaCcpuHbVZbz3NUxqnhg==} engines: {node: '>= 18'} peerDependencies: + '@ember/string': ^3.1.1 || ^4.0.0 ember-engines: '>= 0.11.0' + ember-intl: ^7.3.0 peerDependenciesMeta: ember-engines: optional: true + ember-intl: + optional: true '@hashicorp/design-system-tokens@2.3.0': resolution: {integrity: sha512-T2XhcgUeiGkNqvPu73yittDghEccUpIZc7Fh/g4PG7KEvJwbXItFWTRWoHSGR8T6r6LpOP5E6CC4hSVwGRugRg==} + '@hashicorp/design-system-tokens@2.3.1': + resolution: {integrity: sha512-JWOVMi4jwQExtO8JRPdYHQYe+4iRrL//qcTn3iO7Mgfhz5rGCR+BiBX0kEoD15zebWbrdOL6R5ut/dSz+FuiYQ==} + '@hashicorp/ember-asciinema-player@https://codeload.github.com/hashicorp/ember-asciinema-player/tar.gz/e047a096039cff70234c232efe75dcad74c6358a': resolution: {tarball: https://codeload.github.com/hashicorp/ember-asciinema-player/tar.gz/e047a096039cff70234c232efe75dcad74c6358a} version: 0.0.0 @@ -2484,8 +2481,8 @@ packages: '@hashicorp/flight-icons@3.10.0': resolution: {integrity: sha512-wtufYZ5Ntihmy+vbR0dM+Q7X56xPX/dtpcfVs4nCRgvYZZic5ayqE8tefs2FGtxauH6zuzzVk48s5S6psv9g+g==} - '@hashicorp/flight-icons@3.11.1': - resolution: {integrity: sha512-FQOHB2qCzHoG3dm6zidS39D4U0ida/7Sge5EG+KqcebH5jsbJQiMyB/qMc3YQBo5vGBe8XUa+rVW8v4JNpzk1Q==} + '@hashicorp/flight-icons@3.13.0': + resolution: {integrity: sha512-eUPjix112KlkS+LVzqHsvxxAaPNpjG1PmQYzTtUdmLNJkG1PsN1Mcaz3gU7HGNpUSVvOqlNbyCSxgeITBJ+7cw==} '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} @@ -2667,6 +2664,9 @@ packages: '@nullvoxpopuli/ember-composable-helpers@5.2.10': resolution: {integrity: sha512-60lzfYZ3Gn5f5NX7KKh01vOUeMYCgNFMxVwRBtxcyotCmBob3eoW6JL1hO3zStv79k/n/vijdr1o/G1N3+l8Fg==} + '@nullvoxpopuli/ember-composable-helpers@5.3.0': + resolution: {integrity: sha512-pjuYVAxJJETaFFmDME9sPH++kSNcTJjxHqHUSJOwoYvxSRBHIysJbCFD/CHQjJtbI5D4pVouYU80ugmyGrZoFA==} + '@nuxt/opencollective@0.4.1': resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} @@ -10575,12 +10575,6 @@ snapshots: - '@babel/core' - supports-color - '@ember/string@3.1.1': - dependencies: - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - supports-color - '@ember/string@4.0.1': {} '@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)': @@ -10622,11 +10616,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@embroider/macros@1.16.13(@glint/template@1.5.2)': + '@embroider/macros@1.18.0(@glint/template@1.5.2)': dependencies: - '@embroider/shared-internals': 2.9.0 + '@embroider/shared-internals': 3.0.0 assert-never: 1.4.0 - babel-import-util: 2.1.1 + babel-import-util: 3.0.1 ember-cli-babel: 7.26.11 find-up: 5.0.0 lodash: 4.17.21 @@ -10637,9 +10631,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@embroider/macros@1.18.0(@glint/template@1.5.2)': + '@embroider/macros@1.18.2(@glint/template@1.5.2)': dependencies: - '@embroider/shared-internals': 3.0.0 + '@embroider/shared-internals': 3.0.1 assert-never: 1.4.0 babel-import-util: 3.0.1 ember-cli-babel: 7.26.11 @@ -10687,25 +10681,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@embroider/test-setup@4.0.0': + '@embroider/shared-internals@3.0.1': dependencies: + babel-import-util: 3.0.1 + debug: 4.4.1 + ember-rfc176-data: 0.3.18 + fs-extra: 9.1.0 + is-subdir: 1.2.0 + js-string-escape: 1.0.1 lodash: 4.17.21 - resolve: 1.22.10 - - '@embroider/util@1.13.2(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8))': - dependencies: - '@embroider/macros': 1.18.0(@glint/template@1.5.2) - broccoli-funnel: 3.0.8 - ember-cli-babel: 7.26.11 - ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8) - optionalDependencies: - '@glint/template': 1.5.2 + minimatch: 3.1.2 + pkg-entry-points: 1.1.1 + resolve-package-path: 4.0.3 + resolve.exports: 2.0.3 + semver: 7.7.2 + typescript-memoize: 1.1.1 transitivePeerDependencies: - supports-color - '@embroider/util@1.13.3(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8))': + '@embroider/test-setup@4.0.0': + dependencies: + lodash: 4.17.21 + resolve: 1.22.10 + + '@embroider/util@1.13.4(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8))': dependencies: - '@embroider/macros': 1.16.13(@glint/template@1.5.2) + '@embroider/macros': 1.18.2(@glint/template@1.5.2) broccoli-funnel: 3.0.8 ember-cli-babel: 7.26.11 ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8) @@ -11094,7 +11095,7 @@ snapshots: '@handlebars/parser@2.0.0': {} - '@hashicorp/design-system-components@4.20.2(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@3.1.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8))': + '@hashicorp/design-system-components@4.23.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8))': dependencies: '@codemirror/commands': 6.8.1 '@codemirror/lang-go': 6.0.1 @@ -11109,16 +11110,16 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/view': 6.36.8 '@ember/render-modifiers': 2.1.0(@babel/core@7.27.1)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) - '@ember/string': 3.1.1 + '@ember/string': 4.0.1 '@ember/test-waiters': 3.1.0 '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) - '@embroider/util': 1.13.2(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + '@embroider/macros': 1.18.2(@glint/template@1.5.2) + '@embroider/util': 1.13.4(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) '@floating-ui/dom': 1.7.0 - '@hashicorp/design-system-tokens': 2.3.0 - '@hashicorp/flight-icons': 3.11.1 + '@hashicorp/design-system-tokens': 2.3.1 + '@hashicorp/flight-icons': 3.13.0 '@lezer/highlight': 1.2.1 - '@nullvoxpopuli/ember-composable-helpers': 5.2.10(@babel/core@7.27.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + '@nullvoxpopuli/ember-composable-helpers': 5.3.0(@babel/core@7.27.1) clipboard-polyfill: 4.1.1 codemirror-lang-hcl: 0.0.0-beta.2 decorator-transforms: 2.3.0(@babel/core@7.27.1) @@ -11129,15 +11130,16 @@ snapshots: ember-focus-trap: 1.1.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) ember-get-config: 2.1.1(@glint/template@1.5.2) ember-modifier: 4.2.2(@babel/core@7.27.1) - ember-power-select: 8.7.1(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@3.1.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + ember-power-select: 8.7.1(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) ember-stargate: 0.6.0(@babel/core@7.27.1)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) - ember-style-modifier: 4.4.0(@babel/core@7.27.1)(@ember/string@3.1.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + ember-style-modifier: 4.4.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) ember-truth-helpers: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) luxon: 3.6.1 prismjs: 1.30.0 sass: 1.88.0 tabbable: 6.2.0 tippy.js: 6.3.7 + tracked-built-ins: 4.0.0(@babel/core@7.27.1) transitivePeerDependencies: - '@babel/core' - '@ember/test-helpers' @@ -11150,6 +11152,8 @@ snapshots: '@hashicorp/design-system-tokens@2.3.0': {} + '@hashicorp/design-system-tokens@2.3.1': {} + '@hashicorp/ember-asciinema-player@https://codeload.github.com/hashicorp/ember-asciinema-player/tar.gz/e047a096039cff70234c232efe75dcad74c6358a(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8))(webpack@5.99.8)': dependencies: asciinema-player: 3.4.0 @@ -11164,7 +11168,7 @@ snapshots: '@hashicorp/flight-icons@3.10.0': {} - '@hashicorp/flight-icons@3.11.1': {} + '@hashicorp/flight-icons@3.13.0': {} '@humanwhocodes/config-array@0.13.0': dependencies: @@ -11371,6 +11375,14 @@ snapshots: - ember-source - supports-color + '@nullvoxpopuli/ember-composable-helpers@5.3.0(@babel/core@7.27.1)': + dependencies: + '@embroider/addon-shim': 1.10.0 + decorator-transforms: 2.3.0(@babel/core@7.27.1) + transitivePeerDependencies: + - '@babel/core' + - supports-color + '@nuxt/opencollective@0.4.1': dependencies: consola: 3.4.2 @@ -13676,18 +13688,18 @@ snapshots: - supports-color - webpack - ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@3.1.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)): + ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)): dependencies: '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) - '@embroider/util': 1.13.3(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + '@embroider/macros': 1.18.2(@glint/template@1.5.2) + '@embroider/util': 1.13.4(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) '@glimmer/component': 2.0.0 decorator-transforms: 2.3.0(@babel/core@7.27.1) ember-element-helper: 0.8.8 ember-lifeline: 7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)) ember-modifier: 4.2.2(@babel/core@7.27.1) - ember-style-modifier: 4.4.0(@babel/core@7.27.1)(@ember/string@3.1.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + ember-style-modifier: 4.4.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) ember-truth-helpers: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) transitivePeerDependencies: - '@babel/core' @@ -14585,15 +14597,15 @@ snapshots: transitivePeerDependencies: - supports-color - ember-power-select@8.7.1(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@3.1.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)): + ember-power-select@8.7.1(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.6.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)): dependencies: '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) '@embroider/addon-shim': 1.10.0 - '@embroider/util': 1.13.2(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + '@embroider/util': 1.13.4(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) '@glimmer/component': 2.0.0 decorator-transforms: 2.3.0(@babel/core@7.27.1) ember-assign-helper: 0.5.1 - ember-basic-dropdown: 8.6.1(@babel/core@7.27.1)(@ember/string@3.1.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) + ember-basic-dropdown: 8.6.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)) ember-concurrency: 4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2) ember-lifeline: 7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)) ember-modifier: 4.2.2(@babel/core@7.27.1) @@ -14650,7 +14662,7 @@ snapshots: ember-resources@7.0.4(@glimmer/component@2.0.0)(@glint/template@1.5.2): dependencies: '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.18.2(@glint/template@1.5.2) '@glint/template': 1.5.2 optionalDependencies: '@glimmer/component': 2.0.0 @@ -14804,9 +14816,9 @@ snapshots: - ember-source - supports-color - ember-style-modifier@4.4.0(@babel/core@7.27.1)(@ember/string@3.1.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)): + ember-style-modifier@4.4.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8)): dependencies: - '@ember/string': 3.1.1 + '@ember/string': 4.0.1 '@embroider/addon-shim': 1.10.0 csstype: 3.1.3 decorator-transforms: 2.3.0(@babel/core@7.27.1) diff --git a/ui/admin/app/components/header-nav/index.hbs b/ui/admin/app/components/header-nav/index.hbs deleted file mode 100644 index 26dd9babfe..0000000000 --- a/ui/admin/app/components/header-nav/index.hbs +++ /dev/null @@ -1,41 +0,0 @@ -{{! - Copyright (c) HashiCorp, Inc. - SPDX-License-Identifier: BUSL-1.1 -}} - - - - {{#if this.session.data.authenticated.isGlobal}} - - {{t 'titles.global'}} - - {{/if}} - {{#each this.scope.orgsList as |org|}} - - {{org.displayName}} - - {{/each}} - - -{{#if this.scope.project}} - - - {{#each this.scope.projectsList as |project|}} - - {{project.displayName}} - - {{/each}} - -{{/if}} \ No newline at end of file diff --git a/ui/admin/app/components/header-nav/index.js b/ui/admin/app/components/header-nav/index.js deleted file mode 100644 index 93e5998c07..0000000000 --- a/ui/admin/app/components/header-nav/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import Component from '@glimmer/component'; -import { service } from '@ember/service'; - -export default class HeaderNavComponent extends Component { - // =services - - @service session; - @service scope; -} diff --git a/ui/admin/app/controllers/application.js b/ui/admin/app/controllers/application.js index b1bb690fe7..df54f26216 100644 --- a/ui/admin/app/controllers/application.js +++ b/ui/admin/app/controllers/application.js @@ -9,7 +9,7 @@ import { getOwner } from '@ember/application'; import { action } from '@ember/object'; import { loading } from 'ember-loading'; import { defaultValidator } from 'ember-a11y-refocus'; -import { paramValueFinder } from 'admin/utils/param-value-finder'; +import { paramValueFinder } from 'core/utils/param-value-finder'; const THEMES = [ { diff --git a/ui/admin/app/styles/app.scss b/ui/admin/app/styles/app.scss index d3b50eba96..2e0623ed74 100644 --- a/ui/admin/app/styles/app.scss +++ b/ui/admin/app/styles/app.scss @@ -11,12 +11,6 @@ @use 'notify'; @use '@hashicorp/ember-asciinema-player'; -.rose-layout-global { - .rose-layout-global-body { - justify-content: center; - } -} - .rose-layout-centered { > .rose-layout-page { width: sizing.rems(l) * 18; @@ -89,14 +83,6 @@ } } -[class*='session-status-'] { - color: var(--ui-gray-subtler-2); -} - -.session-status-active { - color: var(--success); -} - .nowrap { white-space: nowrap; } @@ -1004,18 +990,6 @@ } } -// scope picker -.scope-picker { - &__toggle-button { - width: 100%; - } - - li:has(.indentation), - li.indentation { - margin-left: 1.5rem; - } -} - // dropdown checkbox list .dropdown-checkbox-list { margin-bottom: 1rem; diff --git a/ui/admin/app/templates/application.hbs b/ui/admin/app/templates/application.hbs index ca787e70d8..0b12552ff7 100644 --- a/ui/admin/app/templates/application.hbs +++ b/ui/admin/app/templates/application.hbs @@ -5,119 +5,104 @@ {{page-title (app-name)}} - - - + + - <:header> - - <:logo> - - - <:actions> - {{#if (feature-flag 'dev-edition-toggle')}} - - - - - {{#each this.featureEdition.editions as |edition|}} - - {{edition}} - - {{/each}} - - - - {{#each this.featureEdition.licensedFeatures as |feature|}} - - {{feature}} - + <:logo> + + - {{/each}} - - - - {{t 'actions.download-db'}} - - - {{t 'actions.clear-db'}} - - - {{/if}} + <:globalActions> + + - + {{#if (feature-flag 'dev-edition-toggle')}} + + + + {{#each this.featureEdition.editions as |edition|}} + + {{edition}} + + {{/each}} + + + - {{#if this.session.data.authenticated.username}} - - {{else}} - - {{/if}} + {{t 'actions.download-db'}} + + + {{t 'actions.clear-db'}} + + + {{/if}} - {{t - 'actions.change-password' - }} - + + {{#if this.session.data.authenticated.username}} + + {{else}} + + {{/if}} - {{t - 'actions.deauthenticate' - }} - + {{t + 'actions.change-password' + }} + - - {{#each this.themes as |theme|}} - - {{t (concat 'themes.' theme.label)}} - - {{/each}} - - - - + {{t + 'actions.deauthenticate' + }} + - <:body> - - + + {{#each this.themes as |theme|}} + + {{t (concat 'themes.' theme.label)}} + + {{/each}} +
+ - <:footer> - - - + + + + + + + diff --git a/ui/admin/app/templates/scopes/scope.hbs b/ui/admin/app/templates/scopes/scope.hbs index 66a2341a24..9381e9453a 100644 --- a/ui/admin/app/templates/scopes/scope.hbs +++ b/ui/admin/app/templates/scopes/scope.hbs @@ -33,7 +33,7 @@ /> {{/if}} - + {{#if @model.isGlobal}} {{t 'titles.scope-level' scope=(t 'titles.global')}} @@ -243,6 +243,5 @@ @route='scopes.scope.edit' /> {{/if}} - - + {{outlet}} \ No newline at end of file diff --git a/ui/admin/tests/unit/utils/param-value-finder-test.js b/ui/admin/tests/unit/utils/param-value-finder-test.js deleted file mode 100644 index af648fd115..0000000000 --- a/ui/admin/tests/unit/utils/param-value-finder-test.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; -import { paramValueFinder } from 'admin/utils/param-value-finder'; - -module('Unit | Utility | param-value-finder', function (hooks) { - setupTest(hooks); - - let router; - - hooks.beforeEach(function () { - router = this.owner.lookup('service:router'); - }); - - test('returns empty array when null or empty routeInfo object is used', function (assert) { - let result = paramValueFinder('scopes', null); - - assert.deepEqual(result, []); - - result = paramValueFinder('scopes', {}); - - assert.deepEqual(result, []); - }); - - test('returns correct array when routeInfo object is used', function (assert) { - let routeInfo = router.recognize('/scopes'); - let result = paramValueFinder('scopes', routeInfo.parent); - - assert.deepEqual(result, []); - - routeInfo = router.recognize('/scopes/global/auth-methods'); - result = paramValueFinder('scopes', routeInfo.parent); - assert.deepEqual(result, ['global']); - }); -}); diff --git a/ui/desktop/app/controllers/application.js b/ui/desktop/app/controllers/application.js index dab1c3ebaa..01cbd7ea17 100644 --- a/ui/desktop/app/controllers/application.js +++ b/ui/desktop/app/controllers/application.js @@ -8,6 +8,8 @@ import { service } from '@ember/service'; import { getOwner } from '@ember/application'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; +import { defaultValidator } from 'ember-a11y-refocus'; +import { paramValueFinder } from 'core/utils/param-value-finder'; export default class ApplicationController extends Controller { // =services @@ -17,6 +19,7 @@ export default class ApplicationController extends Controller { @service ipc; @service session; @service('browser/window') window; + @service router; @tracked isLoggingOut = false; @tracked isAppQuitting = false; @@ -33,6 +36,18 @@ export default class ApplicationController extends Controller { }); } + /** + * Shows side navigation only for routes nested under a scope + * and if user has been authenticated. + * @type {boolean} + */ + get showSideNav() { + return ( + this.router.currentRouteName.startsWith('scopes.scope') && + this.session.isAuthenticated + ); + } + // =actions /** @@ -127,4 +142,29 @@ export default class ApplicationController extends Controller { super.willDestroy(...arguments); this.removeOnAppQuitListener?.(); } + + /** + * Add custom route change validation to prevent refocus when + * user is attempting to search, filter, or sort. + * @param {object} transition + * @returns {boolean} + */ + customRouteChangeValidator(transition) { + if (!transition.to || !transition.from) { + return true; + } + if (transition.to.name === transition.from.name) { + const toParams = paramValueFinder( + transition.to.localName, + transition.to.parent, + ); + const fromParams = paramValueFinder( + transition.from.localName, + transition.from.parent, + ); + // Return false to prevent refocus when routes have equivalent dynamic segments (params). + return JSON.stringify(toParams) !== JSON.stringify(fromParams); + } + return defaultValidator(transition); + } } diff --git a/ui/desktop/app/controllers/scopes/scope.js b/ui/desktop/app/controllers/scopes/scope.js deleted file mode 100644 index 80a51e6317..0000000000 --- a/ui/desktop/app/controllers/scopes/scope.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import Controller from '@ember/controller'; -import { service } from '@ember/service'; - -export default class ScopesScopeController extends Controller { - // =services - - @service session; -} diff --git a/ui/desktop/app/routes/scopes/scope.js b/ui/desktop/app/routes/scopes/scope.js index dc48a8e215..e1df520f24 100644 --- a/ui/desktop/app/routes/scopes/scope.js +++ b/ui/desktop/app/routes/scopes/scope.js @@ -53,12 +53,12 @@ export default class ScopesScopeRoute extends Route { */ async afterModel(model) { // First, load orgs and, if necessary, projects - let orgs, projects; + let orgs; orgs = await this.store .query('scope', { scope_id: 'global' }) .catch(() => new TrackedArray([])); if (model.isProject) { - projects = await this.store.query('scope', { scope_id: model.scopeID }); + await this.store.query('scope', { scope_id: model.scopeID }); } // Then pull out the "selected" scopes, if relevant let selectedOrg, selectedProject; @@ -70,16 +70,6 @@ export default class ScopesScopeRoute extends Route { // Update the scope service with the current scope(s); this.scope.org = selectedOrg; this.scope.project = selectedProject; - this.scopes = { orgs, projects, selectedOrg, selectedProject }; - } - - /** - * Adds the scopes hash to the controller context (see `afterModel`). - * @param {Controller} controller - */ - setupController(controller) { - super.setupController(...arguments); - const scopes = this.scopes; - controller.setProperties({ scopes }); + this.scope.orgsList = orgs; } } diff --git a/ui/desktop/app/styles/app.scss b/ui/desktop/app/styles/app.scss index 5787047fd4..7b905bbbb9 100644 --- a/ui/desktop/app/styles/app.scss +++ b/ui/desktop/app/styles/app.scss @@ -24,34 +24,6 @@ } } -/** - * This section enables scrolling within the sidebar columns separately, - * rather than the whole viewport. This ensures the sidebar and application - * header remain visible when scrolling. - */ -.rose-layout-global { - max-height: 100vh; - - .rose-layout-global-body { - max-height: 100vh; - overflow: auto; - - main { - /** This overrides the main defined within Rose. - * HDS has this set to 1.5rem top/bottom 3rem left/right. HDS assumes the usage of breadcrumbs - * but the DC have no breadcrumbs, so we will keep it at 3rem all around. - */ - padding: 3rem; - flex-grow: 1; - } - } - - .rose-layout-sidebar-sidebar, - .rose-layout-sidebar-body { - overflow-y: auto; - } -} - .rose-nav-sidebar { margin-top: sizing.rems(xxl); @@ -74,95 +46,11 @@ } } -.rose-header { - -webkit-app-region: drag; - min-height: sizing.rems(l) * 2; - position: relative; - -webkit-user-select: none; - - .rose-header-brand, - .rose-header-nav, - .rose-header-utilities button { - -webkit-app-region: no-drag; - } - - &.header-cushion { - padding-left: sizing.rems(l) * 3; - } - - .button-window-minimize, - .button-window-fullscreen, - .button-window-close { - background: transparent; - border: transparent; - color: var(--white); - margin: sizing.rems(xs); - } - - .button-window-close { - &:hover { - background: var(--failure); - } - } - - .button-window-minimize, - .button-window-fullscreen { - &:hover { - background: var(--white); - color: var(--black); - } - } - - .logotype { - display: none; - } - - &.loading { - &::after { - animation: gradient 1s linear infinite; - background: repeating-linear-gradient( - to right, - var(--subtle), - var(--subtle), - var(--info), - var(--subtle), - var(--subtle) - ); - background-position: -100% 0; - background-size: 200% auto; - content: ' '; - height: 3px; - left: 0; - position: absolute; - right: 0; - top: 100%; - - @keyframes gradient { - 0% { - background-position: -100% 0; - } - - 100% { - background-position: -200% 0; - } - } - } - } -} - -[class*='session-status-'] { - color: var(--ui-gray-subtler-2); -} - -.nowrap { - white-space: nowrap; -} - .branded-card { border: 1px solid var(--ui-border-subtler-1); border-radius: sizing.rems(xxxs); margin: 0 auto; - margin-top: sizing.rems(l) * 1.25; + margin-top: sizing.rems(xl) * 1.5; padding: (sizing.rems(l) * 4) (sizing.rems(l) * 3) (sizing.rems(l) * 2) (sizing.rems(l) * 3); position: relative; @@ -422,3 +310,46 @@ } } } + +.app-header { + -webkit-app-region: drag; + // user-select: none; + + &.header-cushion { + padding-left: sizing.rems(l) * 4; + } + + /* stylelint-disable-next-line selector-class-pattern */ + &__logo, + &__global-actions, + &__utility-actions, + .hds-app-header__menu-button { + -webkit-app-region: no-drag; + } + + /* stylelint-disable-next-line selector-class-pattern */ + .hds-app-header__utility-actions { + .button-window-minimize, + .button-window-fullscreen, + .button-window-close { + background: transparent; + border: transparent; + color: var(--white); + margin: sizing.rems(xs); + } + + .button-window-close { + &:hover { + background: var(--failure); + } + } + + .button-window-minimize, + .button-window-fullscreen { + &:hover { + background: var(--white); + color: var(--black); + } + } + } +} diff --git a/ui/desktop/app/templates/application.hbs b/ui/desktop/app/templates/application.hbs index 193cc65ee8..0a677b8a87 100644 --- a/ui/desktop/app/templates/application.hbs +++ b/ui/desktop/app/templates/application.hbs @@ -5,52 +5,31 @@ {{page-title (app-name)}} - - - - + + - - - -
-
+ <:logo> +
-
+ {{#if this.showWindowActions}} + + + + {{/if}} + - - {{outlet}} - + + + + + + + + -
+ + {{outlet}} + + {{#if this.flashMessages.queue}}
diff --git a/ui/desktop/app/templates/scopes/scope.hbs b/ui/desktop/app/templates/scopes/scope.hbs index bcb9de486a..d14e217751 100644 --- a/ui/desktop/app/templates/scopes/scope.hbs +++ b/ui/desktop/app/templates/scopes/scope.hbs @@ -3,31 +3,4 @@ SPDX-License-Identifier: BUSL-1.1 }} -{{outlet}} - -{{#if this.session.isAuthenticated}} - - - - - {{t 'titles.global'}} - - {{#if this.scopes.orgs.length}} - - {{/if}} - {{#each this.scopes.orgs as |scope|}} - - {{scope.displayName}} - - {{/each}} - - -{{/if}} \ No newline at end of file +{{outlet}} \ No newline at end of file diff --git a/ui/desktop/app/templates/scopes/scope/authenticate.hbs b/ui/desktop/app/templates/scopes/scope/authenticate.hbs index 53273be880..349b9a290c 100644 --- a/ui/desktop/app/templates/scopes/scope/authenticate.hbs +++ b/ui/desktop/app/templates/scopes/scope/authenticate.hbs @@ -5,76 +5,72 @@ {{page-title (t 'actions.authenticate')}} -
- {{#if this.isOIDCRoute}} - {{outlet}} - {{else}} - +{{#if this.isOIDCRoute}} + {{outlet}} +{{else}} + - - - - {{t 'titles.global'}} + + + + {{t 'titles.global'}} + + {{#each this.sortedScopes as |scope|}} + + {{scope.displayName}} - {{#each this.sortedScopes as |scope|}} - - {{scope.displayName}} - - {{/each}} - + {{/each}} + - - {{#each @model.authMethods as |authMethod|}} - - {{#if authMethod.name}} - {{authMethod.name}} - {{else}} - {{t (concat 'resources.auth-method.types.' authMethod.type)}} - {{/if}} - - {{/each}} - + + {{#each @model.authMethods as |authMethod|}} + + {{#if authMethod.name}} + {{authMethod.name}} + {{else}} + {{t (concat 'resources.auth-method.types.' authMethod.type)}} + {{/if}} + + {{/each}} + - {{#if @model.authMethods}} - {{outlet}} - {{else}} - - - - - - - {{/if}} - - {{t 'cluster-url.connected-to'}}: - - {{this.clusterUrl}} - -
- - {{t 'actions.change-cluster-url'}} - -
-
- {{/if}} -
\ No newline at end of file + {{#if @model.authMethods}} + {{outlet}} + {{else}} + + + + + + + {{/if}} + + {{t 'cluster-url.connected-to'}}: + + {{this.clusterUrl}} + +
+ + {{t 'actions.change-cluster-url'}} + +
+ +{{/if}} \ No newline at end of file diff --git a/ui/desktop/app/templates/scopes/scope/projects.hbs b/ui/desktop/app/templates/scopes/scope/projects.hbs index c238271278..1cadaa7968 100644 --- a/ui/desktop/app/templates/scopes/scope/projects.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects.hbs @@ -3,28 +3,22 @@ SPDX-License-Identifier: BUSL-1.1 }} - - - - - - {{t 'resources.target.title_plural'}} - + + + + + - - - {{t 'resources.session.title_plural'}} - - - - {{t 'titles.settings'}} - - - - - -
- {{outlet}} -
-
-
\ No newline at end of file +{{outlet}} \ No newline at end of file diff --git a/ui/desktop/package.json b/ui/desktop/package.json index f178f5f32a..a80acbcfa0 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -45,6 +45,7 @@ "@xterm/addon-canvas": "^0.7.0", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", + "ember-a11y-refocus": "^5.0.0", "ember-named-blocks-polyfill": "^0.2.5", "lodash": "^4.17.21", "uuid": "^11.0.3"