ui: Sidebar navigation / redesign (#9553)

* CSS for moving from a horizontal main menu to a side/vertical one
* Add <App /> Component and rearrange <HashcorpConsul /> to use it

1. HashicorpConsul now uses <App />
2. <App /> is now translated and adds 'skip to main content' functionality
3. Adds ember-in-viewport addon in order to visibly hide main navigation
items in order to take them out of focus/tabbing
4. Slight amends to the dom service while I was there
This commit is contained in:
John Cowen 2021-01-26 17:40:33 +00:00 committed by GitHub
parent f36d77ee4a
commit 82a62cd2ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 1503 additions and 630 deletions

3
.changelog/9553.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:improvement
ui: Move to a sidebar based main navigation
```

View File

@ -0,0 +1,86 @@
{{#let (hash
main=(concat guid '-main')
) as |exported|}}
<div
class="app"
...attributes
>
<ModalLayer />
<div
class="skip-links"
{{on "click" this.focus}}
>
<a href={{concat '#' exported.main}}>{{t 'components.app.skip_to_content'}}</a>
{{!--
In order to add further skip links from within other templates use:
<Portal @target="app-skip-links">
<a href="#sub-content">Skip to subcontent</a>
</Portal>
from within your template
--}}
<PortalTarget
@name="app-skip-links"
@mutiple={{true}}
></PortalTarget>
</div>
<input
type="checkbox"
id={{concat guid "-main-nav-toggle"}}
/>
<header
role="banner"
>
<label
tabindex="0"
for={{concat guid "-main-nav-toggle"}}
aria-label={{t 'components.app.toggle_menu'}}
{{on "keypress" this.keypressClick}}
{{on "mouseup" this.unfocus}}
></label>
{{yield exported to="home-nav"}}
<div
data-test-navigation
>
{{!--
The viewport tolerances here give us a 10 pixel buffer to make sure the menu
is marked as out of the viewport, we use all sides so we don't need to change
this should any CSS change
--}}
<nav
aria-label={{t 'components.app.main'}}
class={{if this.navInViewport 'in-viewport'}}
{{in-viewport
onEnter=(set this 'navInViewport' true)
onExit=(set this 'navInViewport' false)
viewportTolerance=(hash top=-10 bottom =-10 left=-10 right=-10)
}}
>
{{yield exported to="main-nav"}}
</nav>
{{!--
Whilst this has a role of navigation, it is 'complementary navigation' we
don't want to change the navigation role here, but we do want to label it as
'complementary' to the main content. The phrase 'complementary navigation' as
read by a screenreader should convey the meaning we are after here.
--}}
<nav aria-label={{t 'components.app.complementary'}}>
{{yield exported to="complementary-nav"}}
</nav>
</div>
</header>
<main id={{concat guid '-main'}}>
{{yield exported to="main"}}
</main>
<footer
role="contentinfo"
data-test-footer
>
{{yield exported to="content-info"}}
</footer>
</div>
{{/let}}

View File

@ -0,0 +1,31 @@
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
export default class AppComponent extends Component {
@service('dom') dom;
constructor(args, owner) {
super(...arguments);
this.guid = this.dom.guid(this);
}
@action
keypressClick(e) {
e.target.dispatchEvent(new MouseEvent('click'));
}
@action
focus(e) {
const href = e.target.getAttribute('href');
if (href.startsWith('#')) {
e.preventDefault();
this.dom.focus(href);
}
}
@action
unfocus(e) {
e.target.blur();
}
}

View File

@ -0,0 +1,70 @@
.app {
--chrome-width: 300px;
--chrome-height: 64px;
}
.app .skip-links {
@extend %skip-links;
}
[role='banner'] {
@extend %main-header-horizontal;
}
[role="banner"] > label {
@extend %main-nav-horizontal-toggle-button;
}
.hashicorp-consul > input[id] {
@extend %main-nav-horizontal-toggle;
}
%main-header-horizontal > div {
@extend %main-nav-horizontal-panel;
}
%main-header-horizontal nav:first-of-type {
@extend %main-nav-vertical, %main-nav-sidebar;
}
%main-header-horizontal nav:last-of-type {
@extend %main-nav-horizontal;
margin-left: auto;
}
%main-nav-sidebar,
main {
@extend %transition-pushover;
}
%main-nav-sidebar {
transition-property: left;
z-index: 10;
}
main {
top: var(--chrome-height);
transition-property: margin-left;
}
@media #{$--sidebar-open} {
%main-nav-horizontal-toggle + header > div > nav:first-of-type {
left: 0;
}
%main-nav-horizontal-toggle:checked + header > div > nav:first-of-type {
left: calc(var(--chrome-width) * -1);
}
%main-nav-horizontal-toggle ~ main,
%main-nav-horizontal-toggle ~ footer {
margin-left: var(--chrome-width);
}
%main-nav-horizontal-toggle:checked ~ main,
%main-nav-horizontal-toggle:checked ~ footer {
margin-left: 0;
}
}
@media #{$--lt-sidebar-open} {
%main-nav-horizontal-toggle:checked + header > div > nav:first-of-type {
left: 0;
}
%main-nav-horizontal-toggle + header > div > nav:first-of-type {
left: calc(var(--chrome-width) * -1);
}
%main-nav-horizontal-toggle ~ main,
%main-nav-horizontal-toggle ~ footer {
margin-left: 0;
}
}

View File

@ -1,25 +1,31 @@
<ModalLayer />
<header role="banner" data-test-navigation>
<a data-test-main-nav-logo href={{href-to 'index'}}><svg width="28" height="27" xmlns="http://www.w3.org/2000/svg"><title>Consul</title><path d="M13.284 16.178a2.876 2.876 0 1 1-.008-5.751 2.876 2.876 0 0 1 .008 5.75zm5.596-1.547a1.333 1.333 0 1 1 0-2.667 1.333 1.333 0 0 1 0 2.667zm4.853 1.249a1.271 1.271 0 1 1 .027-.107c0 .031 0 .067-.027.107zm-.937-3.436a1.333 1.333 0 1 1 .986-1.595c.033.172.033.348 0 .52-.07.53-.465.96-.986 1.075zm4.72 3.29a1.333 1.333 0 1 1-1.076-1.538 1.333 1.333 0 0 1 1.116 1.417.342.342 0 0 0-.027.12h-.013zm-1.08-3.33a1.333 1.333 0 1 1 1.088-1.524c.014.114.014.229 0 .342a1.333 1.333 0 0 1-1.102 1.182h.014zm-.925 7.925a1.333 1.333 0 1 1 .165-.547c-.01.193-.067.38-.165.547zm-.48-12.191a1.333 1.333 0 1 1 .507-1.814c.14.237.198.514.164.787-.038.438-.289.828-.67 1.045v-.018zM13.333 26.667C5.97 26.667 0 20.697 0 13.333 0 5.97 5.97 0 13.333 0c2.929-.01 5.778.955 8.098 2.742L19.8 4.89a10.667 10.667 0 0 0-17.133 8.444 10.667 10.667 0 0 0 17.137 8.471l1.627 2.13a13.218 13.218 0 0 1-8.098 2.733z" fill="#FFF"/></svg></a>
<input type="checkbox" name="menu" id="main-nav-toggle" onchange={{action 'change'}} />
<label for="main-nav-toggle">
Toggle Menu
</label>
<div>
<label for="main-nav-toggle">
<span>Close</span>
</label>
<nav aria-label="Main">
{{#if dc}}
<App
class="hashicorp-consul"
...attributes
>
<:home-nav>
<a
href={{href-to 'index'}}
><svg width="28" height="27" xmlns="http://www.w3.org/2000/svg">
<title>Consul</title>
<path
d="M13.284 16.178a2.876 2.876 0 1 1-.008-5.751 2.876 2.876 0 0 1 .008 5.75zm5.596-1.547a1.333 1.333 0 1 1 0-2.667 1.333 1.333 0 0 1 0 2.667zm4.853 1.249a1.271 1.271 0 1 1 .027-.107c0 .031 0 .067-.027.107zm-.937-3.436a1.333 1.333 0 1 1 .986-1.595c.033.172.033.348 0 .52-.07.53-.465.96-.986 1.075zm4.72 3.29a1.333 1.333 0 1 1-1.076-1.538 1.333 1.333 0 0 1 1.116 1.417.342.342 0 0 0-.027.12h-.013zm-1.08-3.33a1.333 1.333 0 1 1 1.088-1.524c.014.114.014.229 0 .342a1.333 1.333 0 0 1-1.102 1.182h.014zm-.925 7.925a1.333 1.333 0 1 1 .165-.547c-.01.193-.067.38-.165.547zm-.48-12.191a1.333 1.333 0 1 1 .507-1.814c.14.237.198.514.164.787-.038.438-.289.828-.67 1.045v-.018zM13.333 26.667C5.97 26.667 0 20.697 0 13.333 0 5.97 5.97 0 13.333 0c2.929-.01 5.778.955 8.098 2.742L19.8 4.89a10.667 10.667 0 0 0-17.133 8.444 10.667 10.667 0 0 0 17.137 8.471l1.627 2.13a13.218 13.218 0 0 1-8.098 2.733z"/>
</svg></a>
</:home-nav>
<:main-nav>
{{#if @dc}}
<ul>
{{#let (or this.nspaces @nspaces) as |nspaces|}}
{{#if (and (env 'CONSUL_NSPACES_ENABLED') (gt nspaces.length 0))}}
<li class="nspaces" data-test-nspace-menu>
{{#if (and (eq nspaces.length 1) (not canManageNspaces)) }}
<span data-test-nspace-selected={{nspace.Name}}>{{nspace.Name}}</span>
{{ else }}
<li
class="nspaces"
data-test-nspace-menu
>
Namespace
<PopoverMenu @position="left" as |components api|>
<BlockSlot @name="trigger">
{{nspace.Name}}
{{@nspace.Name}}
</BlockSlot>
{{#if (is-href 'dc.nspaces')}}
<BlockSlot @name="header">
@ -30,19 +36,14 @@
{{/if}}
<BlockSlot @name="menu">
{{#let components.MenuItem components.MenuSeparator as |MenuItem MenuSeparator|}}
<MenuSeparator>
<BlockSlot @name="label">
Namespaces
<DataSource
@src="/*/*/namespaces"
@onchange={{action (mut nspaces) value="data"}}
@onchange={{action (mut this.nspaces) value="data"}}
@loading="lazy"
/>
</BlockSlot>
</MenuSeparator>
{{#each (reject-by 'DeletedAt' nspaces) as |item|}}
<MenuItem
class={{if (eq nspace.Name item.Name) 'is-active'}}
class={{if (eq @nspace.Name item.Name) 'is-active'}}
@href={{href-mut (hash nspace=(concat '~' item.Name))}}
>
<BlockSlot @name="label">
@ -50,11 +51,11 @@
</BlockSlot>
</MenuItem>
{{/each}}
{{#if canManageNspaces }}
{{#if this.canManageNspaces}}
<MenuSeparator />
<MenuItem
data-test-main-nav-nspaces
@href={{href-to 'dc.nspaces' dc.Name}}
@href={{href-to 'dc.nspaces' @dc.Name}}
>
<BlockSlot @name="label">
Manage Namespaces
@ -64,37 +65,33 @@
{{/let}}
</BlockSlot>
</PopoverMenu>
{{/if}}
</li>
{{/if}}
<li data-test-datacenter-menu>
{{#if (or (not dcs) (eq dcs.length 1)) }}
<span data-test-datacenter-selected={{dc.Name}}>{{dc.Name}}</span>
{{ else }}
{{/let}}
<li
class="dcs"
data-test-datacenter-menu
>
Datacenter
<PopoverMenu @position="left" as |components|>
<BlockSlot @name="trigger">
{{dc.Name}}
{{@dc.Name}}
</BlockSlot>
<BlockSlot @name="menu">
{{#let components.MenuItem components.MenuSeparator as |MenuItem MenuSeparator|}}
<MenuSeparator>
<BlockSlot @name="label">
Datacenters
<DataSource
@src="/*/*/datacenters"
@onchange={{action (mut dcs) value="data"}}
@onchange={{action (mut @dcs) value="data"}}
@loading="lazy"
/>
</BlockSlot>
</MenuSeparator>
{{#each (sort-by 'Name' dcs) as |item|}}
{{#each (sort-by 'Name' @dcs) as |item|}}
<MenuItem
data-test-datacenter-picker
class={{concat (if (eq dc.Name item.Name) 'is-active') (if item.Local ' is-local') }}
class={{concat (if (eq @dc.Name item.Name) 'is-active') (if item.Local ' is-local') }}
@href={{href-mut (hash dc=item.Name)}}
>
<BlockSlot @name="label">
<span>{{item.Name}}</span>
{{item.Name}}
{{#if item.Local}}
<span>Local</span>
{{/if}}
@ -105,27 +102,35 @@
</BlockSlot>
</PopoverMenu>
{{/if}}
</li>
<li data-test-main-nav-services class={{if (is-href 'dc.services' dc.Name) 'is-active'}}>
<a href={{href-to 'dc.services' dc.Name}}>Services</a>
<li data-test-main-nav-services class={{if (is-href 'dc.services' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.services' @dc.Name}}>Services</a>
</li>
<li data-test-main-nav-nodes class={{if (is-href 'dc.nodes' dc.Name) 'is-active'}}>
<a href={{href-to 'dc.nodes' dc.Name}}>Nodes</a>
<li data-test-main-nav-nodes class={{if (is-href 'dc.nodes' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.nodes' @dc.Name}}>Nodes</a>
</li>
<li data-test-main-nav-kvs class={{if (is-href 'dc.kv' dc.Name) 'is-active'}}>
<a href={{href-to 'dc.kv' dc.Name}}>Key/Value</a>
<li data-test-main-nav-kvs class={{if (is-href 'dc.kv' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.kv' @dc.Name}}>Key/Value</a>
</li>
<li data-test-main-nav-acls class={{if (or (is-href 'dc.acls' dc.Name) (is-href 'dc.aclsdisabled') (is-href 'dc.unauthorized')) 'is-active'}}>
<a href={{href-to 'dc.acls.tokens' dc.Name}}>ACL</a>
<li data-test-main-nav-intentions class={{if (is-href 'dc.intentions' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.intentions' @dc.Name}}>Intentions</a>
</li>
<li data-test-main-nav-intentions class={{if (is-href 'dc.intentions' dc.Name) 'is-active'}}>
<a href={{href-to 'dc.intentions' dc.Name}}>Intentions</a>
<li role="separator">Access Controls</li>
<li data-test-main-nav-tokens class={{if (is-href 'dc.acls.tokens' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.acls.tokens' @dc.Name}}>Tokens</a>
</li>
<li data-test-main-nav-policies class={{if (is-href 'dc.acls.policies' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.acls.policies' @dc.Name}}>Policies</a>
</li>
<li data-test-main-nav-roles class={{if (is-href 'dc.acls.roles' @dc.Name) 'is-active'}}>
<a href={{href-to 'dc.acls.roles' @dc.Name}}>Roles</a>
</li>
</ul>
{{/if}}
</nav>
<nav>
</:main-nav>
<:complementary-nav>
<ul>
<li data-test-main-nav-help>
<PopoverMenu @position="right" as |components|>
@ -152,7 +157,7 @@
</MenuItem>
<MenuSeparator />
<MenuItem
class="feedback-link"
class="learn-link"
@href={{env 'CONSUL_REPO_ISSUES_URL'}}
>
<BlockSlot @name="label">
@ -169,16 +174,16 @@
{{#if (env 'CONSUL_ACLS_ENABLED')}}
<li data-test-main-nav-auth>
<AuthDialog
@dc={{dc.Name}}
@nspace={{nspace.Name}}
@onchange={{action "reauthorize"}} as |authDialog components|
@dc={{@dc.Name}}
@nspace={{@nspace.Name}}
@onchange={{this.reauthorize}} as |authDialog components|
>
{{#let components.AuthForm components.AuthProfile as |AuthForm AuthProfile|}}
<BlockSlot @name="unauthorized">
<label tabindex="0" for="login-toggle" onkeypress={{action 'keypressClick'}}>
<label tabindex="0" for={{concat guid "-login-toggle"}} onkeypress={{this.keypressClick}}>
<span>Log in</span>
</label>
<ModalDialog @name="login-toggle" @onclose={{action 'close'}} @onopen={{action 'open'}} as |api|>
<ModalDialog @name={{concat guid "-login-toggle"}} @onclose={{this.close}} @onopen={{this.open}} as |api|>
<Ref @target={{this}} @name="modal" @value={{api}} />
<BlockSlot @name="header">
<h2>Log in to Consul</h2>
@ -196,7 +201,7 @@
</ModalDialog>
</BlockSlot>
<BlockSlot @name="authorized">
<ModalDialog @name="login-toggle" @onclose={{action 'close'}} @onopen={{action 'open'}} as |api|>
<ModalDialog @name={{concat guid "-login-toggle"}} @onclose={{this.close}} @onopen={{this.open}} as |api|>
<Ref @target={{this}} @name="modal" @value={{api}} />
<BlockSlot @name="header">
<h2>Log in with a different token</h2>
@ -218,13 +223,13 @@
</BlockSlot>
<BlockSlot @name="menu">
{{#let components.MenuItem components.MenuSeparator as |MenuItem MenuSeparator|}}
{{!TODO: It might be nice to use one of our recursive components here}}
{{#if authDialog.token.AccessorID}}
{{!TODO: It might be nice to use one of our recursive components here}}
{{#if authDialog.token.AccessorID}}
<li role="none">
<AuthProfile />
</li>
<MenuSeparator />
{{/if}}
{{/if}}
<MenuItem
class="dangerous"
@onclick={{action authDialog.logout}}
@ -242,15 +247,28 @@
</li>
{{/if}}
</ul>
</nav>
</div>
</header>
<main>
{{yield}}
</main>
<footer role="contentinfo" data-test-footer>
<a data-test-footer-copyright href="{{env 'CONSUL_COPYRIGHT_URL'}}/" rel="noopener noreferrer" target="_blank">&copy; {{env 'CONSUL_COPYRIGHT_YEAR'}} HashiCorp</a>
<p data-test-footer-version>Consul {{env 'CONSUL_VERSION'}}</p>
<a data-test-footer-docs href="{{env 'CONSUL_DOCS_URL'}}" rel="help noopener noreferrer" target="_blank">Documentation</a>
</:complementary-nav>
<:main>
{{yield}}
</:main>
<:content-info>
<Action
@href={{concat (env 'CONSUL_COPYRIGHT_URL') '/'}}
@external={{true}}
>
&copy; {{env 'CONSUL_COPYRIGHT_YEAR'}} HashiCorp
</Action>
<p>
Consul {{env 'CONSUL_VERSION'}}
</p>
<Action
@href={{env 'CONSUL_DOCS_URL'}}
@external={{true}}
>
Documentation
</Action>
{{{concat '<!-- ' (env 'CONSUL_GIT_SHA') '-->'}}}
</footer>
</:content-info>
</App>

View File

@ -1,48 +1,38 @@
import Component from '@ember/component';
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { computed } from '@ember/object';
import { action } from '@ember/object';
export default Component.extend({
dom: service('dom'),
export default class HashiCorpConsul extends Component {
@service('dom') dom;
constructor(args, owner) {
super(...arguments);
this.guid = this.dom.guid(this);
}
didInsertElement: function() {
this._super(...arguments);
this.dom.root().classList.remove('template-with-vertical-menu');
},
// TODO: Right now this is the only place where we need permissions
// but we are likely to need it elsewhere, so probably need a nice helper
canManageNspaces: computed('permissions', function() {
get canManageNspaces() {
return (
typeof (this.permissions || []).find(function(item) {
typeof (this.args.permissions || []).find(function(item) {
return item.Resource === 'operator' && item.Access === 'write' && item.Allow;
}) !== 'undefined'
);
}),
actions: {
keypressClick: function(e) {
e.target.dispatchEvent(new MouseEvent('click'));
},
open: function() {
this.authForm.focus();
},
close: function() {
this.authForm.reset();
},
reauthorize: function(e) {
this.modal.close();
this.onchange(e);
},
change: function(e) {
const win = this.dom.viewport();
const $root = this.dom.root();
const $body = this.dom.element('body');
if (e.target.checked) {
$root.classList.add('template-with-vertical-menu');
$body.style.height = $root.style.height = win.innerHeight + 'px';
} else {
$root.classList.remove('template-with-vertical-menu');
$body.style.height = $root.style.height = null;
}
},
},
});
@action
open() {
this.authForm.focus();
}
@action
close() {
this.authForm.reset();
}
@action
reauthorize(e) {
this.modal.close();
this.args.onchange(e);
}
}

View File

@ -0,0 +1,14 @@
.hashicorp-consul {
[role="banner"] a svg {
fill: var(--brand-600);
}
.docs-link a::after {
@extend %with-docs-mask, %as-pseudo;
}
.learn-link a::after {
@extend %with-learn-mask, %as-pseudo;
}
.feedback-link a::after {
@extend %with-logo-github-monochrome-mask, %as-pseudo;
}
}

View File

@ -4,8 +4,10 @@ export default (collection, clickable, attribute, is, authForm, emptyState) => s
'services',
'nodes',
'kvs',
'acls',
'intentions',
'tokens',
'policies',
'roles',
'help',
'settings',
'auth',

View File

@ -1,9 +1,17 @@
%main-header-horizontal {
display: flex;
position: fixed;
z-index: 5;
left: 0;
padding: 0 25px;
width: calc(100% - 50px);
}
%main-header-horizontal,
%main-header-horizontal::before {
height: var(--chrome-height);
}
%main-header-horizontal {
align-items: center;
height: 48px;
}
%main-header-horizontal::before {
content: '';
@ -11,11 +19,9 @@
z-index: -1;
left: 0;
width: 100vw;
height: 48px;
}
%main-header-horizontal > a {
display: block;
margin-right: 12px;
line-height: 0;
font-size: 0;
}

View File

@ -0,0 +1,3 @@
%main-header-horizontal::before {
background-color: var(--gray-000);
}

View File

@ -0,0 +1,45 @@
%main-nav-horizontal > ul,
%main-nav-horizontal-panel {
display: flex;
}
%main-nav-horizontal-toggle-button {
display: flex;
align-items: center;
height: 100%;
padding: 0 1rem;
padding-left: 5px;
}
%main-nav-horizontal-panel {
justify-content: space-between;
flex-grow: 1;
}
%main-nav-horizontal-menu-panel {
z-index: 400;
/* TODO: We should probably make menu-panel default to left hand side*/
left: 0;
right: auto;
top: 28px !important;
}
%main-nav-horizontal-action {
display: block;
padding: 5px 12px;
white-space: nowrap;
}
%main-nav-horizontal .popover-menu > label {
/* Usually there is no space between buttons which is */
/* fine as the button only highlights when its selected */
/* therefore no two siblings are highlighted at the same time */
/* which means you don't notice there is no space between the */
/* buttons. popover-menu triggers on the other hand can be */
/* at the same time as a sibling, therefore they need a little */
/* space between it and its sibling - this is a property of */
/* the main nav not the popover-menu */
padding-right: 5px;
}
%main-nav-horizontal .popover-menu > label > * {
/* less space as the chevron adds space */
padding-right: 4px !important;
}
%main-nav-horizontal .popover-menu > label > button::after {
top: 2px;
}

View File

@ -0,0 +1,26 @@
%main-nav-horizontal-action {
border-radius: $decor-radius-200;
cursor: pointer;
}
%main-nav-horizontal-action > a {
color: inherit;
}
/**/
/* reduced size hamburger menu */
%main-nav-horizontal-toggle {
display: none;
}
%main-nav-horizontal-toggle-button::before {
@extend %with-menu-mask, %as-pseudo;
font-size: 1.2em;
cursor: pointer;
}
%main-nav-horizontal-toggle-button::before {
background-color: var(--gray-800);
}
%main-nav-horizontal-action,
%main-nav-horizontal-action-intent,
%main-nav-horizontal-action-active {
color: var(--gray-600);
}
/**/

View File

@ -0,0 +1,57 @@
@import './skin';
@import './layout';
/* things that should look like nav buttons */
%main-nav-vertical > ul > li > a,
%main-nav-vertical > ul > li > span {
@extend %main-nav-vertical-action;
}
%main-nav-vertical > ul > li > a:active,
%main-nav-vertical > ul > li.is-active > a {
@extend %main-nav-vertical-action-active;
}
%main-nav-vertical-action-active:hover:not(:active),
%main-nav-vertical-action-active:focus:not(:active) {
@extend %main-nav-vertical-action-active-intent;
}
/* Whilst we want spans to look the same as actions */
/* we don't want them to act the same */
%main-nav-vertical-action:not(span):hover,
%main-nav-vertical-action:not(span):focus {
@extend %main-nav-vertical-action-intent;
}
%main-nav-vertical > ul > li > label {
@extend %main-nav-vertical-action;
}
%main-nav-vertical .popover-menu {
margin-top: .5rem;
}
%main-nav-vertical .popover-menu .menu-panel {
top: 37px !important;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
%main-nav-vertical .popover-menu > label > button {
border: $decor-border-100;
border-color: var(--gray-500);
color: var(--gray-999);
width: calc(100% - 20px);
z-index: 100;
text-align: left;
padding: 10px;
border-radius: $decor-radius-100;
}
%main-nav-vertical .popover-menu > label > button::after {
float: right;
}
%main-nav-vertical .popover-menu .menu-panel {
top: 28px;
z-index: 100;
}
/* menu-panels in the main navigation are treated slightly differently */
%main-nav-vertical label + div {
@extend %main-nav-vertical-menu-panel;
}

View File

@ -0,0 +1,41 @@
%main-nav-vertical {
position: absolute;
left: 0;
top: var(--chrome-height, 47px);
width: var(--chrome-width, 300px);
height: calc(100vh - var(--chrome-height, 47px) - 35px);
padding-top: 35px;
overflow: auto;
}
// disable tabbing when not visible
%main-nav-vertical:not(.in-viewport) {
visibility: hidden;
}
%main-nav-vertical li.nspaces,
%main-nav-vertical li.dcs {
margin-bottom: 25px;
padding: 0 20px;
}
// TODO: We no longer have the rule that menu-panel buttons only contain two
// items, left and right aligned. We should remove this and look to use
// align-self for anything that needs right aligning instead.
%main-nav-vertical [role="menuitem"] {
justify-content: flex-start !important;
}
%main-nav-vertical [role="menuitem"] span {
margin-left: .5rem;
}
%main-nav-vertical-action,
%main-nav-vertical [role="separator"] {
display: block;
padding: 7px 25px;
}
%main-nav-vertical [role="separator"] {
margin-top: .7rem;
padding-bottom: 0;
}
%main-nav-vertical-menu-panel {
min-width: 260px;
}

View File

@ -0,0 +1,53 @@
%main-nav-vertical-action {
cursor: pointer;
border-right: $decor-border-400;
border-color: $transparent;
font-size: $typo-size-600;
}
%main-nav-vertical-action > a {
color: inherit;
font-size: inherit;
}
%main-nav-vertical [role="separator"] {
text-transform: uppercase;
}
%main-nav-vertical-action-intent {
text-decoration: underline;
}
%main-nav-vertical-action-active-intent {
text-decoration: none;
}
%main-nav-vertical {
background-color: var(--gray-050);
color: var(--gray-700);
}
%main-nav-vertical [role="separator"] {
color: var(--gray-600);
}
%main-nav-vertical-action {
color: var(--gray-800);
}
%main-nav-vertical-action-intent,
%main-nav-vertical-action-active {
color: var(--gray-999);
}
%main-nav-vertical-action-active {
background-color: var(--gray-150);
border-color: var(--gray-999);
}
%main-nav-vertical .is-local span:last-of-type {
@extend %pill-200;
color: var(--gray-000);
background-color: var(--gray-500);
}
%main-nav-vertical .nspaces .menu-panel > div {
background-color: var(--gray-050);
color: var(--gray-999);
padding-left: 36px;
}
%main-nav-vertical .nspaces .menu-panel > div::before {
@extend %with-info-circle-fill-mask, %as-pseudo;
color: $blue-500;
/* sizes the icon not the text */
font-size: 1.1em;
}

View File

@ -3,32 +3,31 @@
border-radius: $decor-radius-200;
box-shadow: $decor-elevation-600;
}
%menu-panel {
border-color: $gray-300;
background-color: $white;
}
%menu-panel dd {
color: $gray-500;
}
%menu-panel > ul > li {
list-style-type: none;
}
%menu-panel-separator {
text-transform: uppercase;
color: $gray-400;
}
%menu-panel-header + ul,
%menu-panel-separator:not(:first-child) {
border-top: $decor-border-100;
border-color: $gray-300;
}
%menu-panel .docs-link a::after {
@extend %with-docs-mask, %as-pseudo;
}
%menu-panel .learn-link a::after {
@extend %with-learn-mask, %as-pseudo;
}
%menu-panel .is-active > *::after {
@extend %with-check-plain-mask, %as-pseudo;
}
%menu-panel {
border-color: var(--gray-300);
background-color: var(--gray-000);
}
%menu-panel dd {
color: $gray-500;
}
%menu-panel-separator {
color: var(--gray-400);
}
%menu-panel-header + ul,
%menu-panel-separator:not(:first-child) {
border-color: var(--gray-300);
}

View File

@ -0,0 +1,3 @@
@import './skin';
@import './layout';

View File

@ -0,0 +1,13 @@
%skip-links {
display: flex;
flex-direction: column;
position: absolute;
left: 50%;
padding: 20px;
top: -100px;
transform: translateX(-50%);
}
%skip-links:focus-within {
top: 0px;
}

View File

@ -0,0 +1,9 @@
%skip-links {
outline: 1px solid $white;
color: $white;
background-color: $blue-500;
}
%skip-links a {
color: inherit;
}

View File

@ -1,5 +1,4 @@
import Service from '@ember/service';
import { getOwner } from '@ember/application';
import Service, { inject as service } from '@ember/service';
import { guidFor } from '@ember/object/internals';
// selecting
@ -24,13 +23,12 @@ let $_;
let inViewportCallbacks;
const clickFirstAnchor = clickFirstAnchorFactory(closest);
export default class DomService extends Service {
doc = document;
win = window;
@service('-document') doc;
init() {
super.init(...arguments);
constructor(owner) {
super(...arguments);
inViewportCallbacks = new WeakMap();
$_ = getComponentFactory(getOwner(this));
$_ = getComponentFactory(owner);
}
willDestroy() {
@ -44,13 +42,29 @@ export default class DomService extends Service {
}
viewport() {
return this.win;
return this.doc.defaultView;
}
guid(el) {
return guidFor(el);
}
focus($el) {
if (typeof $el === 'string') {
$el = this.element($el);
}
if (typeof $el !== 'undefined') {
let previousIndex = $el.getAttribute('tabindex');
$el.setAttribute('tabindex', '0');
$el.focus();
if (previousIndex === null) {
$el.removeAttribute('tabindex');
} else {
$el.setAttribute('tabindex', previousIndex);
}
}
}
// TODO: should this be here? Needs a better name at least
clickFirstAnchor = clickFirstAnchor;

View File

@ -3,10 +3,6 @@
/* all variables and custom queries including generic base variables */
@import 'variables';
/*TODO: Move this to its own local component*/
@import 'ember-power-select';
/**/
/* all components including generic base components */
@import 'components';
/* cascading typography */
@ -15,3 +11,5 @@
@import 'layout';
/* pinpoint individual overwrites for those 'just on this page' problems */
@import 'routes';
/* global control of themeable components */
@import 'themes';

View File

@ -17,3 +17,7 @@
opacity: 1;
pointer-events: auto;
}
%transition-pushover {
transition-timing-function: cubic-bezier(0.1, 0.1, 0.25, 0.9);
transition-duration: 0.1s;
}

View File

@ -61,6 +61,7 @@ $cyan-900: #003346;
$gray-010: #fbfbfc;
$gray-050: #f7f8fa;
$gray-100: #ebeef2;
$gray-150: #ebeef2;
$gray-200: #dce0e6;
$gray-300: #bac1cc;
$gray-400: #8e96a3;
@ -68,7 +69,9 @@ $gray-500: #6f7682;
$gray-600: #626873;
$gray-700: #525761;
$gray-800: #373a42;
$gray-850: #2c2e33;
$gray-900: #1f2124;
$gray-950: #15171c;
$green-050: #ecf7ed;
$green-100: #c6e9c9;
$green-200: #a0dba5;

View File

@ -1,3 +1,4 @@
@import './base-variables';
@import './semantic-variables';
@import './frame-placeholders';
@import './theme-placeholders';

View File

@ -0,0 +1,90 @@
%theme-light {
--gray-000: #{$white};
--gray-050: #{$gray-050};
--gray-100: #{$gray-100};
--gray-150: #{$gray-150};
--gray-200: #{$gray-200};
--gray-300: #{$gray-300};
--gray-400: #{$gray-400};
--gray-500: #{$gray-500};
--gray-600: #{$gray-600};
--gray-700: #{$gray-700};
--gray-800: #{$gray-800};
--gray-850: #{$gray-850};
--gray-900: #{$gray-900};
--gray-950: #{$gray-950};
--gray-999: #{$black};
--blue-500: #{$blue-500};
--transparent: #{$transparent};
}
%theme-high-contrast {
--transparent: #{$transparent};
}
%theme-low-contrast {
--transparent: #{$transparent};
}
%theme-light-low-contrast {
--transparent: #{$transparent};
}
%theme-dark-low-contrast {
--transparent: #{$transparent};
}
%theme-light-high-contrast {
--gray-000: #{$white};
--gray-050: #{$white};
--gray-100: #{$white};
--gray-150: #{$white};
--gray-200: #{$white};
--gray-300: #{$white};
--gray-400: #{$white};
--gray-500: #{$gray-500};
--gray-600: #{$black};
--gray-700: #{$black};
--gray-800: #{$black};
--gray-850: #{$black};
--gray-900: #{$black};
--gray-950: #{$black};
--gray-999: #{$black};
--transparent: #{$transparent};
}
%theme-dark-high-contrast {
--gray-000: #{$black};
--gray-050: #{$black};
--gray-100: #{$black};
--gray-150: #{$black};
--gray-200: #{$black};
--gray-300: #{$black};
--gray-400: #{$black};
--gray-500: #{$gray-500};
--gray-600: #{$white};
--gray-700: #{$white};
--gray-800: #{$white};
--gray-850: #{$white};
--gray-900: #{$white};
--gray-950: #{$white};
--gray-999: #{$white};
--transparent: #{$transparent};
}
%theme-dark {
--gray-000: #{$black};
--gray-050: #{$gray-950};
--gray-100: #{$gray-900};
--gray-150: #{$gray-850};
--gray-200: #{$gray-800};
--gray-300: #{$gray-700};
--gray-400: #{$gray-600};
--gray-500: #{$gray-500};
--gray-600: #{$gray-400};
--gray-700: #{$gray-300};
--gray-800: #{$gray-200};
--gray-850: #{$gray-150};
--gray-900: #{$gray-100};
--gray-950: #{$gray-050};
--gray-999: #{$white};
--transparent: #{$transparent};
}

View File

@ -94,8 +94,8 @@
}
%internal-button {
color: $gray-900;
background-color: $white;
color: var(--gray-900);
background-color: var(--gray-000);
}
%internal-button-dangerous {
@extend %frame-red-300;
@ -104,7 +104,7 @@
@extend %frame-red-700;
}
%internal-button-intent {
background-color: $gray-050;
background-color: var(--gray-050);
}
%internal-button:focus,
%internal-button:hover {

View File

@ -5,7 +5,6 @@
@import './display-toggle/index';
@import './form-elements/index';
@import './inline-alert/index';
@import './menu-panel/index';
@import './pill/index';
@import './popover-menu/index';
@import './radio-group/index';

View File

@ -7,6 +7,7 @@ $decor-border-000: none;
$decor-border-100: 1px solid;
$decor-border-200: 2px solid;
$decor-border-300: 3px solid;
$decor-border-400: 4px solid;
$decor-elevation-100: 0 3px 2px rgba(0, 0, 0, 0.06);
$decor-elevation-200: 0 2px 4px rgba(0, 0, 0, 0.1);
$decor-elevation-300: 0 5px 1px -2px rgba($black, 0.12);

View File

@ -9,7 +9,7 @@ strong {
}
/* %typo-body */
body {
color: $gray-900;
color: var(--gray-900);
}
/* TODO: Consider changing this to 'p a, dd a, td a' etc etc*/
a {

View File

@ -38,13 +38,23 @@
@import './components/brand-loader';
@import './components/loader';
@import './components/main-header-horizontal';
@import './components/main-nav-horizontal';
@import './components/footer';
/**/
@import './components/app-view';
@import 'consul-ui/components/skip-links';
@import 'consul-ui/components/app';
/* app chrome */
@import 'consul-ui/components/main-header-horizontal';
@import 'consul-ui/components/main-nav-horizontal';
@import 'consul-ui/components/main-nav-vertical';
@import 'consul-ui/components/hashicorp-consul';
/**/
@import 'ember-power-select';
/**/
@import 'consul-ui/components/menu-panel';
@import 'consul-ui/components/overlay';
@import 'consul-ui/components/tooltip';
@import 'consul-ui/components/notice';

View File

@ -22,17 +22,17 @@
#toolbar-toggle {
display: none;
}
@media #{$--horizontal-selects} {
[for='toolbar-toggle'] {
display: none;
}
}
@media #{$--lt-spacious-page-header} {
%app-view-actions {
margin-top: 9px;
}
}
// reduced search magnifying icon layout
@media #{$--horizontal-selects} {
[for='toolbar-toggle'] {
display: none;
}
}
@media #{$--lt-horizontal-selects} {
%app-view-header h1 {
display: inline-block;

View File

@ -1,7 +0,0 @@
@import './main-header-horizontal/index';
[role='banner'] {
@extend %main-header-horizontal;
}
%main-header-horizontal::before {
background-color: var(--swatch-brand-600, $black);
}

View File

@ -1,67 +0,0 @@
@import './main-nav-horizontal/index';
%main-nav-horizontal-action,
%main-nav-horizontal-toggle-button {
color: var(--typo-brand-050, $black);
}
%main-nav-horizontal .docs-link a::after {
@extend %with-docs-icon, %as-pseudo;
}
%main-nav-horizontal .learn-link a::after {
@extend %with-learn-icon, %as-pseudo;
}
%main-nav-horizontal .feedback-link a::after {
@extend %with-logo-github-monochrome-mask, %as-pseudo;
}
%main-header-horizontal nav:first-of-type {
@extend %primary-nav;
}
%main-header-horizontal nav:last-of-type {
@extend %secondary-nav;
}
%primary-nav,
%secondary-nav {
@extend %main-nav-horizontal;
}
%primary-nav .nspaces .menu-panel > div {
background-color: $gray-050;
padding-left: 36px;
}
%primary-nav .nspaces .menu-panel > div::before {
@extend %with-info-circle-fill-mask, %as-pseudo;
color: $blue-500;
/* sizes the icon not the text */
font-size: 1.1em;
}
%main-header-horizontal > div {
@extend %main-nav-horizontal-panel;
}
%main-header-horizontal label[for='main-nav-toggle'] {
@extend %main-nav-horizontal-toggle-button;
}
%main-header-horizontal > input {
@extend %main-nav-horizontal-toggle;
}
@media #{$--lt-horizontal-nav} {
%main-nav-horizontal-panel {
background-color: var(--swatch-brand-600, $black);
}
%primary-nav {
margin-top: 65px;
}
%secondary-nav li:first-child {
display: none;
}
%primary-nav > ul > li.is-active > a {
font-weight: $typo-weight-bold;
}
}
@media #{$--horizontal-nav} {
%main-nav-horizontal-action-active {
background-color: var(--swatch-brand-800, $black);
}
}

View File

@ -1,116 +0,0 @@
%main-nav-horizontal .popover-menu > label > * {
/* less space as the chevron adds space */
padding-right: 4px !important;
}
%main-nav-horizontal-action {
display: block;
padding: 5px 12px;
white-space: nowrap;
}
%main-nav-horizontal-menu-panel {
z-index: 400;
/* TODO: We should probably make menu-panel default to left hand side*/
left: 0;
right: auto;
top: 28px !important;
}
%main-nav-horizontal .popover-menu > label > button::after {
top: 2px;
}
%main-nav-horizontal .is-local [role='menuitem'] {
display: inline-block;
}
%main-nav-horizontal .is-local [role='menuitem']:after {
display: inline-flex !important;
}
@media #{$--horizontal-nav} {
%main-nav-horizontal > ul,
%main-nav-horizontal-panel {
display: flex;
}
%main-nav-horizontal-panel {
justify-content: space-between;
flex-grow: 1;
}
%main-nav-horizontal-menu-panel {
min-width: 266px;
}
%main-nav-horizontal-toggle-button {
display: none;
}
%main-nav-horizontal .popover-menu > label {
/* Usually there is no space between buttons which is */
/* fine as the button only highlights when its selected */
/* therefore no two siblings are highlighted at the same time */
/* which means you don't notice there is no space between the */
/* buttons. popover-menu triggers on the other hand can be */
/* at the same time as a sibling, therefore they need a little */
/* space between it and its sibling - this is a poroperty of */
/* the main nav not the popover-menu */
padding-right: 5px;
}
}
@media #{$--lt-horizontal-nav} {
%main-nav-horizontal-action {
padding-top: 15px;
padding-bottom: 15px;
text-align: right;
}
%main-nav-horizontal .popover-menu > label {
display: flex;
flex-direction: row-reverse;
}
%main-nav-horizontal-menu-panel {
width: 180px;
top: 38px !important;
}
%main-nav-horizontal-toggle:checked ~ div {
width: 250px;
right: 0;
padding: 15px 35px;
padding-top: 0;
}
%main-nav-horizontal-toggle:checked + label {
width: 100vw;
height: 100%;
left: 0;
top: 0;
}
%main-nav-horizontal-toggle-button {
position: absolute;
z-index: 200;
right: 0;
width: 100px;
height: 48px;
}
%main-nav-horizontal-toggle-button::before {
position: absolute;
top: 50%;
right: 2px;
margin-top: -0.6em;
}
%main-nav-horizontal-panel {
box-sizing: border-box;
overflow: auto;
position: absolute;
z-index: 300;
top: 0;
right: -100%;
width: 0;
height: 100%;
padding: 0;
padding-top: 15px;
}
%main-nav-horizontal-panel {
transition-timing-function: cubic-bezier(0.1, 0.1, 0.25, 0.9);
transition-duration: 0.2s;
transition-property: width right;
}
%main-nav-horizontal-panel label span {
visibility: visible !important;
display: inline-block;
padding-right: 47px;
padding-top: 13px;
}
}

View File

@ -1,43 +0,0 @@
/* nav buttons */
%main-nav-horizontal-action {
border-radius: $decor-radius-200;
cursor: pointer;
}
%main-nav-horizontal-action,
%main-nav-horizontal-action-intent,
%main-nav-horizontal-action-active {
color: $white;
}
%main-nav-horizontal-action > a {
color: inherit;
}
/**/
/* reduced size hamburger menu */
%main-nav-horizontal-toggle {
display: none;
}
%main-nav-horizontal-toggle-button {
text-indent: -9000px;
}
%main-nav-horizontal-toggle-button::before {
@extend %with-more-vertical-mask, %as-pseudo;
background-color: $white;
font-size: 1.2em;
}
%main-nav-horizontal-toggle-button span {
visibility: hidden;
}
@media #{$--lt-horizontal-nav} {
%main-nav-horizontal-toggle-button {
cursor: pointer;
}
%main-nav-horizontal-toggle:checked + label {
background-color: rgba($black, 0.4);
}
}
/**/
/* nav dropdown */
%main-nav-horizontal .is-local span:nth-child(2) {
@extend %pill-200, %frame-gray-600;
}
/**/

View File

@ -49,10 +49,6 @@ main,
%modal-window {
@extend %main-content;
}
html.template-with-vertical-menu,
html.template-with-vertical-menu body {
overflow: hidden;
}
html:not(.has-nspaces) [class*='nspace-'] {
display: none;
}

View File

@ -25,14 +25,10 @@ $ideal-content-padding: 33px;
max-width: $ideal-content-width;
}
%viewport-container {
padding-left: calc(#{$ideal-viewport-padding-num}% / (#{$ideal-viewport-width-num} / 100));
padding-right: calc(#{$ideal-viewport-padding-num}% / (#{$ideal-viewport-width-num} / 100));
padding-left: calc(#{$ideal-viewport-padding-num}vw / (#{$ideal-viewport-width-num} / 100));
padding-left: 25px;
padding-right: calc(#{$ideal-viewport-padding-num}vw / (#{$ideal-viewport-width-num} / 100));
}
%content-container {
padding-left: calc(33% / (#{$ideal-viewport-width-num} / 100));
padding-right: calc(33% / (#{$ideal-viewport-width-num} / 100));
padding-left: calc(24vw / (#{$ideal-viewport-width-num} / 100));
padding-right: calc(24vw / (#{$ideal-viewport-width-num} / 100));
}

View File

@ -8,13 +8,6 @@ html[data-route^='dc.acls.index'] .filter-bar {
html[data-route^='dc.acls.index'] .filter-bar [role='radiogroup'] {
@extend %expanded-single-select;
}
@media #{$--horizontal-tabs} {
html[data-route^='dc.acls.policies.index'] main header .actions,
html[data-route^='dc.acls.policies.index'] main header .actions {
position: relative;
top: 42px;
}
}
@media #{$--lt-wide-form} {
html[data-route^='dc.acls.create'] main header .actions,

View File

@ -0,0 +1,18 @@
:root {
@extend %theme-light;
}
%main-header-horizontal,
%main-nav-vertical,
%main-nav-horizontal {
@extend %theme-dark;
}
%main-nav-horizontal .menu-panel {
@extend %theme-light;
}
%main-nav-vertical .nspaces .menu-panel > div {
@extend %theme-light;
}
%main-nav-vertical .menu-panel a:hover,
%main-nav-vertical .menu-panel a:focus {
background-color: var(--blue-500);
}

View File

@ -1,10 +1,10 @@
$ideal-width: 1260px;
$--horizontal-filters: '(min-width: 1080px)';
$--lt-horizontal-filters: '(max-width: 1079px)';
$--horizontal-filters: '(min-width: 1300px)';
$--lt-horizontal-filters: '(max-width: 1379px)';
$--horizontal-selects: '(min-width: 696px)';
$--lt-horizontal-selects: '(max-width: 695px)';
$--horizontal-selects: '(min-width: 996px)';
$--lt-horizontal-selects: '(max-width: 995px)';
$--horizontal-nav: '(min-width: 850px)';
$--lt-horizontal-nav: '(max-width: 849px)';
@ -35,8 +35,5 @@ $--lt-wide-form: '(max-width: 420px)';
$--wide-table: '(min-width: 421px)';
$--lt-wide-table: '(max-width: 420px)';
$--medium-table: '(min-width: 850px)';
$--lt-medium-table: '(max-width: 849px)';
/* */
$--fixed-grid: '(min-width: 1260px)';
$--lt-fixed-grid: '(max-width: 1259px)';
$--sidebar-open: '(min-width: 900px)';
$--lt-sidebar-open: '(max-width: 899px)';

View File

@ -1 +0,0 @@
<TabNav @items={{array (hash label="Tokens" href=(href-to "dc.acls.tokens") selected=(is-href "dc.acls.tokens")) (hash label="Roles" href=(href-to "dc.acls.roles") selected=(is-href "dc.acls.roles")) (hash label="Policies" href=(href-to "dc.acls.policies") selected=(is-href "dc.acls.policies"))}} />

View File

@ -46,14 +46,9 @@ as |sort filters items|}}
</BlockSlot>
<BlockSlot @name="header">
<h1>
Access Controls
Policies
</h1>
</BlockSlot>
<BlockSlot @name="nav">
{{#if isAuthorized }}
{{partial 'dc/acls/nav'}}
{{/if}}
</BlockSlot>
<BlockSlot @name="actions">
<a data-test-create href="{{href-to 'dc.acls.policies.create'}}" class="type-create">Create</a>
</BlockSlot>

View File

@ -40,14 +40,9 @@ as |sort filters items|}}
</BlockSlot>
<BlockSlot @name="header">
<h1>
Access Controls
Roles
</h1>
</BlockSlot>
<BlockSlot @name="nav">
{{#if isAuthorized }}
{{partial 'dc/acls/nav'}}
{{/if}}
</BlockSlot>
<BlockSlot @name="actions">
<a data-test-create href="{{href-to 'dc.acls.roles.create'}}" class="type-create">Create</a>
</BlockSlot>

View File

@ -44,14 +44,9 @@ as |sort filters items|}}
</BlockSlot>
<BlockSlot @name="header">
<h1>
Access Controls
Tokens
</h1>
</BlockSlot>
<BlockSlot @name="nav">
{{#if isAuthorized }}
{{partial 'dc/acls/nav'}}
{{/if}}
</BlockSlot>
<BlockSlot @name="actions">
<a data-test-create href="{{href-to 'dc.acls.tokens.create'}}" class="type-create">Create</a>
</BlockSlot>

View File

@ -114,6 +114,7 @@
"ember-exam": "^4.0.0",
"ember-export-application-global": "^2.0.1",
"ember-href-to": "^3.1.0",
"ember-in-viewport": "^3.8.1",
"ember-inflector": "^3.0.0",
"ember-intl": "^5.5.1",
"ember-load-initializers": "^2.1.1",

View File

@ -25,7 +25,7 @@ Feature: page-navigation
| Link | URL | Endpoint |
| nodes | /dc-1/nodes | /v1/internal/ui/nodes?dc=dc-1&ns=@namespace |
| kvs | /dc-1/kv | /v1/kv/?keys&dc=dc-1&separator=%2F&ns=@namespace |
| acls | /dc-1/acls/tokens | /v1/acl/tokens?dc=dc-1&ns=@namespace |
| tokens | /dc-1/acls/tokens | /v1/acl/tokens?dc=dc-1&ns=@namespace |
# | settings | /settings | /v1/catalog/datacenters |
-------------------------------------------------------------------------------------
Scenario: Clicking a [Item] in the [Model] listing and back again

View File

@ -57,6 +57,14 @@ common:
desc: Healthy to Unhealthy
components:
app:
skip_to_content: Skip to Content
toggle_menu: Toggle Menu
# landmark aria-labels - only screen read, so potentially included with
# screenreader landmarks/phrases i.e. Main Navigation for nav elements and
# therefore potentially do not need the word 'navigation' adding to them
main: Main
complementary: Complementary
consul:
service:
search-bar:

View File

@ -16,6 +16,13 @@
dependencies:
"@babel/highlight" "^7.10.4"
"@babel/code-frame@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
dependencies:
"@babel/highlight" "^7.10.4"
"@babel/compat-data@^7.12.1":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.1.tgz#d7386a689aa0ddf06255005b4b991988021101a0"
@ -65,6 +72,27 @@
semver "^5.4.1"
source-map "^0.5.0"
"@babel/core@^7.12.3":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd"
integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.12.10"
"@babel/helper-module-transforms" "^7.12.1"
"@babel/helpers" "^7.12.5"
"@babel/parser" "^7.12.10"
"@babel/template" "^7.12.7"
"@babel/traverse" "^7.12.10"
"@babel/types" "^7.12.10"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
json5 "^2.1.2"
lodash "^4.17.19"
semver "^5.4.1"
source-map "^0.5.0"
"@babel/generator@^7.11.6", "@babel/generator@^7.12.1", "@babel/generator@^7.9.6":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.1.tgz#0d70be32bdaa03d7c51c8597dda76e0df1f15468"
@ -74,6 +102,15 @@
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/generator@^7.12.10", "@babel/generator@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af"
integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==
dependencies:
"@babel/types" "^7.12.11"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
@ -169,6 +206,15 @@
"@babel/template" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/helper-function-name@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42"
integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==
dependencies:
"@babel/helper-get-function-arity" "^7.12.10"
"@babel/template" "^7.12.7"
"@babel/types" "^7.12.11"
"@babel/helper-get-function-arity@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
@ -176,6 +222,13 @@
dependencies:
"@babel/types" "^7.10.4"
"@babel/helper-get-function-arity@^7.12.10":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf"
integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==
dependencies:
"@babel/types" "^7.12.10"
"@babel/helper-hoist-variables@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e"
@ -197,6 +250,13 @@
dependencies:
"@babel/types" "^7.12.1"
"@babel/helper-module-imports@^7.12.5":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb"
integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==
dependencies:
"@babel/types" "^7.12.5"
"@babel/helper-module-transforms@^7.11.0", "@babel/helper-module-transforms@^7.12.1":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c"
@ -271,11 +331,23 @@
dependencies:
"@babel/types" "^7.11.0"
"@babel/helper-split-export-declaration@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a"
integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==
dependencies:
"@babel/types" "^7.12.11"
"@babel/helper-validator-identifier@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
"@babel/helper-validator-identifier@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
"@babel/helper-validator-option@^7.12.1":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9"
@ -300,6 +372,15 @@
"@babel/traverse" "^7.12.1"
"@babel/types" "^7.12.1"
"@babel/helpers@^7.12.5":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e"
integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==
dependencies:
"@babel/template" "^7.10.4"
"@babel/traverse" "^7.12.5"
"@babel/types" "^7.12.5"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
@ -314,6 +395,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd"
integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==
"@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79"
integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==
"@babel/plugin-proposal-async-generator-functions@^7.12.1":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e"
@ -829,6 +915,15 @@
resolve "^1.8.1"
semver "^5.5.1"
"@babel/plugin-transform-runtime@^7.12.1":
version "7.12.10"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562"
integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==
dependencies:
"@babel/helper-module-imports" "^7.12.5"
"@babel/helper-plugin-utils" "^7.10.4"
semver "^5.5.1"
"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.8.3":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3"
@ -1046,6 +1141,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.12.5":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@ -1055,6 +1157,15 @@
"@babel/parser" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/template@^7.12.7":
version "7.12.7"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc"
integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/parser" "^7.12.7"
"@babel/types" "^7.12.7"
"@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.12.1", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e"
@ -1070,6 +1181,21 @@
globals "^11.1.0"
lodash "^4.17.19"
"@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5":
version "7.12.12"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376"
integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==
dependencies:
"@babel/code-frame" "^7.12.11"
"@babel/generator" "^7.12.11"
"@babel/helper-function-name" "^7.12.11"
"@babel/helper-split-export-declaration" "^7.12.11"
"@babel/parser" "^7.12.11"
"@babel/types" "^7.12.12"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.12.1", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae"
@ -1079,6 +1205,15 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7":
version "7.12.12"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299"
integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@base2/pretty-print-object@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047"
@ -1282,6 +1417,45 @@
ember-cli-htmlbars-inline-precompile "^2.1.0"
ember-test-waiters "^1.1.1"
"@embroider/core@0.33.0", "@embroider/core@^0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.33.0.tgz#0fb1752d6e34ea45368e65c42e13220a57ffae76"
integrity sha512-Kd3W4vBJCSwskVislwldhuoe1RtdA04lRr2r2ccnPI4msCXxLn292WBaS7/x0LdEu2EMO5ffRDeQva2/xoS4Yg==
dependencies:
"@babel/core" "^7.12.3"
"@babel/parser" "^7.12.3"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-transform-runtime" "^7.12.1"
"@babel/runtime" "^7.12.5"
"@babel/traverse" "^7.12.1"
"@babel/types" "^7.12.1"
"@embroider/macros" "0.33.0"
assert-never "^1.1.0"
babel-plugin-syntax-dynamic-import "^6.18.0"
broccoli-node-api "^1.7.0"
broccoli-persistent-filter "^3.1.2"
broccoli-plugin "^4.0.1"
broccoli-source "^3.0.0"
debug "^3.1.0"
escape-string-regexp "^4.0.0"
fast-sourcemap-concat "^1.4.0"
filesize "^4.1.2"
fs-extra "^7.0.1"
fs-tree-diff "^2.0.0"
handlebars "^4.4.2"
js-string-escape "^1.0.1"
jsdom "^16.4.0"
json-stable-stringify "^1.0.1"
lodash "^4.17.10"
pkg-up "^2.0.0"
resolve "^1.8.1"
resolve-package-path "^1.2.2"
semver "^7.3.2"
strip-bom "^3.0.0"
typescript-memoize "^1.0.0-alpha.3"
walk-sync "^1.1.3"
wrap-legacy-hbs-plugin-if-needed "^1.0.1"
"@embroider/core@0.4.3", "@embroider/core@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.4.3.tgz#117973b9761d68aee14d820bbaefeb05d5984ba8"
@ -1316,6 +1490,21 @@
typescript-memoize "^1.0.0-alpha.3"
walk-sync "^1.1.3"
"@embroider/macros@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.33.0.tgz#d5826ea7565bb69b57ba81ed528315fe77acbf9d"
integrity sha512-nl/1zRn+Wd3MO8Bb+YPqHmFl/2vwQLTsEB6Zt+K9bWXsM/kA+dPCeeCReLN6PbkMP16xxqtNSIrQ8Y49hnWjpg==
dependencies:
"@babel/core" "^7.12.3"
"@babel/traverse" "^7.12.1"
"@babel/types" "^7.12.1"
"@embroider/core" "0.33.0"
assert-never "^1.1.0"
ember-cli-babel "^7.23.0"
lodash "^4.17.10"
resolve "^1.8.1"
semver "^7.3.2"
"@embroider/macros@0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.4.3.tgz#ea5604b8bd578520f15886a428a6c4fa9481abc0"
@ -1478,6 +1667,14 @@
resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.1.11.tgz#a6878c07a13a2c2c76fcde598a5c97637bfc4280"
integrity sha1-poeMB6E6LCx2/N5ZilyXY3v8QoA=
"@glimmer/encoder@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.42.2.tgz#d3ba3dc9f1d4fa582d1d18b63da100fc5c664057"
integrity sha512-8xkdly0i0BP5HMI0suPB9ly0AnEq8x9Z8j3Gee1HYIovM5VLNtmh7a8HsaHYRs/xHmBEZcqtr8JV89w6F59YMQ==
dependencies:
"@glimmer/interfaces" "^0.42.2"
"@glimmer/vm" "^0.42.2"
"@glimmer/env@0.1.7", "@glimmer/env@^0.1.7":
version "0.1.7"
resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07"
@ -1490,6 +1687,55 @@
dependencies:
"@simple-dom/interface" "^1.4.0"
"@glimmer/interfaces@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.42.2.tgz#9cf8d6f8f5eee6bfcfa36919ca68ae716e1f78db"
integrity sha512-7LOuQd02cxxNNHChzdHMAU8/qOeQvTro141CU5tXITP7z6aOv2D2gkFdau97lLQiVxezGrh8J7h8GCuF7TEqtg==
"@glimmer/low-level@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.42.2.tgz#52c745414d1d04c4245c369bd132c0e786c816ef"
integrity sha512-s+Q44SnKdTBTnkgX0deBlVNnNPVas+Pg8xEnwky9VrUqOHKsIZRrPgfVULeC6bIdFXtXOKm5CjTajhb9qnQbXQ==
"@glimmer/program@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.42.2.tgz#fe504679ca4df6251dd5fcf3003699bb51fa41fa"
integrity sha512-XpQ6EYzA1VL9ESKoih5XW5JftFmlRvwy3bF/I1ABOa3yLIh8mApEwrRI/sIHK0Nv5s1j0uW4itVF196WxnJXgw==
dependencies:
"@glimmer/encoder" "^0.42.2"
"@glimmer/interfaces" "^0.42.2"
"@glimmer/util" "^0.42.2"
"@glimmer/reference@^0.42.1", "@glimmer/reference@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.42.2.tgz#57874e27c825fb7041b5295b5eb153f3f3f92f8f"
integrity sha512-XuhbRjr3M9Q/DP892jGxVfPE6jaGGHu5w9ppGMnuTY7Vm/x+A+68MCiaREhDcEwJlzGg4UkfVjU3fdgmUIrc5Q==
dependencies:
"@glimmer/util" "^0.42.2"
"@glimmer/runtime@^0.42.1":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.42.2.tgz#50e7da5d3cf9144248048a7478be3c489784a4bb"
integrity sha512-52LVZJsLKM3GzI3TEmYcw2LdI9Uk0jotISc3w2ozQBWvkKoYxjDNvI/gsjyMpenj4s7FcG2ggOq0x4tNFqm1GA==
dependencies:
"@glimmer/interfaces" "^0.42.2"
"@glimmer/low-level" "^0.42.2"
"@glimmer/program" "^0.42.2"
"@glimmer/reference" "^0.42.2"
"@glimmer/util" "^0.42.2"
"@glimmer/vm" "^0.42.2"
"@glimmer/wire-format" "^0.42.2"
"@glimmer/syntax@^0.42.1":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.42.2.tgz#89bb3cb787285b84665dc0d8907d94b008e5be9a"
integrity sha512-SR26SmF/Mb5o2cc4eLHpOyoX5kwwXP4KRhq4fbWfrvan74xVWA38PLspPCzwGhyVH/JsE7tUEPMjSo2DcJge/Q==
dependencies:
"@glimmer/interfaces" "^0.42.2"
"@glimmer/util" "^0.42.2"
handlebars "^4.0.13"
simple-html-tokenizer "^0.5.8"
"@glimmer/syntax@^0.62.3":
version "0.62.3"
resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.62.3.tgz#8c4abd245a54e8cc084a47ab4a65c33194256fda"
@ -1517,6 +1763,11 @@
"@glimmer/interfaces" "0.62.3"
"@simple-dom/interface" "^1.4.0"
"@glimmer/util@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.42.2.tgz#9ca1631e42766ea6059f4b49d0bdfb6095aad2c4"
integrity sha512-Heck0baFSaWDanCYtmOcLeaz7v+rSqI8ovS7twrp2/FWEteb3Ze5sWQ2BEuSAG23L/k/lzVwYM/MY7ZugxBpaA==
"@glimmer/util@^0.44.0":
version "0.44.0"
resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.44.0.tgz#45df98d73812440206ae7bda87cfe04aaae21ed9"
@ -1527,6 +1778,22 @@
resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.44.0.tgz#03d127097dc9cb23052cdb7fcae59d0a9dca53e1"
integrity sha512-i01plR0EgFVz69GDrEuFgq1NheIjZcyTy3c7q+w7d096ddPVeVcRzU3LKaqCfovvLJ+6lJx40j45ecycASUUyw==
"@glimmer/vm@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.42.2.tgz#492a4f05eac587c3a37371b3c62593f20bef553d"
integrity sha512-D2MNU5glICLqvet5SfVPrv+l6JNK2TR+CdQhch1Ew+btOoqlW+2LIJIF/5wLb1POjIMEkt+78t/7RN0mDFXGzw==
dependencies:
"@glimmer/interfaces" "^0.42.2"
"@glimmer/util" "^0.42.2"
"@glimmer/wire-format@^0.42.2":
version "0.42.2"
resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.42.2.tgz#b95062b594dddeb8bd11cba3a6a0accbfabc9930"
integrity sha512-IqUo6mdJ7GRsK7KCyZxrc17ioSg9RBniEnb418ZMQxsV/WBv9NQ359MuClUck2M24z1AOXo4TerUw0U7+pb1/A==
dependencies:
"@glimmer/interfaces" "^0.42.2"
"@glimmer/util" "^0.42.2"
"@handlebars/parser@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@handlebars/parser/-/parser-1.1.0.tgz#d6dbc7574774b238114582410e8fee0dc3532bdf"
@ -3150,7 +3417,7 @@ JSV@^4.0.x:
resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57"
integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=
abab@^2.0.0:
abab@^2.0.0, abab@^2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
@ -3183,6 +3450,14 @@ acorn-globals@^4.3.0:
acorn "^6.0.1"
acorn-walk "^6.0.1"
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
dependencies:
acorn "^7.1.1"
acorn-walk "^7.1.1"
acorn-jsx@^5.1.0, acorn-jsx@^5.2.0:
version "5.3.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
@ -3193,7 +3468,7 @@ acorn-walk@^6.0.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
acorn-walk@^7.0.0:
acorn-walk@^7.0.0, acorn-walk@^7.1.1:
version "7.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
@ -3208,7 +3483,7 @@ acorn@^6.0.1, acorn@^6.0.2, acorn@^6.4.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
acorn@^7.1.0, acorn@^7.4.0:
acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
@ -5341,6 +5616,23 @@ broccoli-persistent-filter@^3.1.0:
symlink-or-copy "^1.0.1"
sync-disk-cache "^2.0.0"
broccoli-persistent-filter@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-3.1.2.tgz#41da6b9577be09a170ecde185f2c5a6099f99c4e"
integrity sha512-CbU95RXXVyy+eJV9XTiHUC7NnsY3EvdVrGzp3YgyvO2bzXZFE5/GzDp4X/VQqX+jsk4qyT1HvMOF0sD1DX68TQ==
dependencies:
async-disk-cache "^2.0.0"
async-promise-queue "^1.0.3"
broccoli-plugin "^4.0.3"
fs-tree-diff "^2.0.0"
hash-for-dep "^1.5.0"
heimdalljs "^0.2.1"
heimdalljs-logger "^0.1.7"
promise-map-series "^0.2.1"
rimraf "^3.0.0"
symlink-or-copy "^1.0.1"
sync-disk-cache "^2.0.0"
broccoli-plugin@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.1.0.tgz#73e2cfa05f8ea1e3fc1420c40c3d9e7dc724bf02"
@ -5384,7 +5676,7 @@ broccoli-plugin@^3.1.0:
rimraf "^2.3.4"
symlink-or-copy "^1.1.8"
broccoli-plugin@^4.0.1, broccoli-plugin@^4.0.2, broccoli-plugin@^4.0.3:
broccoli-plugin@^4.0.0, broccoli-plugin@^4.0.1, broccoli-plugin@^4.0.2, broccoli-plugin@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-4.0.3.tgz#9dcfbfb6a1b27a37cc22e65c071719ce9f92bc1e"
integrity sha512-CtAIEYq5K+4yQv8c/BHymOteuyjDAJfvy/asu4LudIWcMSS7dTn3yGI5gNBkwHG+qlRangYkHJNVAcDZMQbSVQ==
@ -6706,11 +6998,16 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
cssom@0.3.x, cssom@^0.3.4:
cssom@0.3.x, cssom@^0.3.4, cssom@~0.3.6:
version "0.3.8"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
cssom@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
cssstyle@^1.1.1:
version "1.4.0"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
@ -6718,6 +7015,13 @@ cssstyle@^1.1.1:
dependencies:
cssom "0.3.x"
cssstyle@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
dependencies:
cssom "~0.3.6"
csstype@^2.5.7:
version "2.6.13"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f"
@ -6829,6 +7133,15 @@ data-urls@^1.0.1:
whatwg-mimetype "^2.2.0"
whatwg-url "^7.0.0"
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
dependencies:
abab "^2.0.3"
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
dayjs@^1.9.3:
version "1.9.3"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.9.3.tgz#b7f94b22ad2a136a4ca02a01ab68ae893fe1a268"
@ -6874,6 +7187,11 @@ debuglog@^1.0.1:
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
decimal.js@^10.2.0:
version "10.2.1"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"
integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@ -7168,6 +7486,13 @@ domexception@^1.0.1:
dependencies:
webidl-conversions "^4.0.2"
domexception@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
dependencies:
webidl-conversions "^5.0.0"
domhandler@^2.3.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
@ -7375,6 +7700,40 @@ ember-auto-import@^1.2.13, ember-auto-import@^1.5.2, ember-auto-import@^1.5.3:
walk-sync "^0.3.3"
webpack "~4.28"
ember-auto-import@^1.6.0:
version "1.10.1"
resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.10.1.tgz#6c93a875e494aa0a58b759867d3f20adfd514ae3"
integrity sha512-7bOWzPELlVwdWDOkB+phDIjg8BNW+/2RiLLQ+Xa/eIvCLT4ABYhHV5wqW5gs5BnXTDVLfE4ddKZdllnGuPGGDQ==
dependencies:
"@babel/core" "^7.1.6"
"@babel/preset-env" "^7.10.2"
"@babel/traverse" "^7.1.6"
"@babel/types" "^7.1.6"
"@embroider/core" "^0.33.0"
babel-core "^6.26.3"
babel-loader "^8.0.6"
babel-plugin-syntax-dynamic-import "^6.18.0"
babylon "^6.18.0"
broccoli-debug "^0.6.4"
broccoli-node-api "^1.7.0"
broccoli-plugin "^4.0.0"
debug "^3.1.0"
ember-cli-babel "^7.0.0"
enhanced-resolve "^4.0.0"
fs-extra "^6.0.1"
fs-tree-diff "^2.0.0"
handlebars "^4.3.1"
js-string-escape "^1.0.1"
lodash "^4.17.19"
mkdirp "^0.5.1"
resolve-package-path "^3.1.0"
rimraf "^2.6.2"
semver "^7.3.4"
symlink-or-copy "^1.2.0"
typescript-memoize "^1.0.0-alpha.3"
walk-sync "^0.3.3"
webpack "^4.43.0"
ember-basic-dropdown@^3.0.10:
version "3.0.10"
resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-3.0.10.tgz#47ed9fe9ff9e69d1a021771a91823c730985ffe0"
@ -7451,7 +7810,7 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0, em
resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879"
integrity sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==
ember-cli-babel@7, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0:
ember-cli-babel@7, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0:
version "7.23.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.23.0.tgz#ec580aa2c115d0810e454dd5c2fffce238284b92"
integrity sha512-ix58DlRDAbGITtdJoRUPcAoQwKLYr/x/kIXjU9u1ATyhmuUjqb+0FDXghOWbkNihGiNOqBBR49+LBgK9AeBcNw==
@ -8143,6 +8502,18 @@ ember-in-element-polyfill@^1.0.0:
ember-cli-htmlbars "^4.3.1"
ember-cli-version-checker "^5.0.2"
ember-in-viewport@^3.8.1:
version "3.8.1"
resolved "https://registry.yarnpkg.com/ember-in-viewport/-/ember-in-viewport-3.8.1.tgz#fd8305366d425c3912def49210e63fd582a7e60d"
integrity sha512-abzKIa7FiOBz3fLkZ3ZSgxJQf5enGe1IdrLdjfo5HjdyWTq9j+B0lzuZCoOYUuWdoiTiXvT3gDFNqQ5j7ky2kw==
dependencies:
ember-auto-import "^1.6.0"
ember-cli-babel "^7.22.1"
ember-modifier "^2.1.0"
fast-deep-equal "^2.0.1"
intersection-observer-admin "~0.2.13"
raf-pool "~0.1.4"
ember-inflector@^3.0.0, ember-inflector@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-3.0.1.tgz#04be6df4d7e4000f6d6bd70787cdc995f77be4ab"
@ -8795,7 +9166,12 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escodegen@^1.11.0, escodegen@^1.12.0:
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
escodegen@^1.11.0, escodegen@^1.12.0, escodegen@^1.14.1:
version "1.14.3"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
@ -9206,6 +9582,11 @@ faker@^4.1.0:
resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f"
integrity sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=
fast-deep-equal@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-deep-equal@^3.1.1:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@ -10236,7 +10617,7 @@ gzip-size@5.1.1:
duplexer "^0.1.1"
pify "^4.0.1"
handlebars@^4.0.11, handlebars@^4.0.4, handlebars@^4.3.1, handlebars@^4.7.3:
handlebars@^4.0.11, handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.3.1, handlebars@^4.4.2, handlebars@^4.7.3:
version "4.7.6"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e"
integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==
@ -10573,6 +10954,13 @@ html-encoding-sniffer@^1.0.2:
dependencies:
whatwg-encoding "^1.0.1"
html-encoding-sniffer@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
dependencies:
whatwg-encoding "^1.0.5"
html-entities@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
@ -10974,6 +11362,11 @@ interpret@^2.0.0:
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
intersection-observer-admin@~0.2.13:
version "0.2.13"
resolved "https://registry.yarnpkg.com/intersection-observer-admin/-/intersection-observer-admin-0.2.13.tgz#00a021695bf5aef8d198204514d2f849fd27d089"
integrity sha512-REIM59IHXPe9U5eTnowurzzfhgqVkSImZJnOSJZTAJ0LnyJqw8S/eD5s8ZYneQfm9JszhGIBwudF9gF02A3BpQ==
intl-messageformat-parser@6.0.18, intl-messageformat-parser@^6.0.5:
version "6.0.18"
resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.0.18.tgz#bf2855b82b0749e1f34e452f0a15d08d3277c8c7"
@ -11006,6 +11399,11 @@ invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
dependencies:
loose-envify "^1.0.0"
ip-regex@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
ip@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
@ -11322,6 +11720,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
is-potential-custom-element-name@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
@ -11717,6 +12120,38 @@ jsdom@^12.0.0:
ws "^6.1.0"
xml-name-validator "^3.0.0"
jsdom@^16.4.0:
version "16.4.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb"
integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==
dependencies:
abab "^2.0.3"
acorn "^7.1.1"
acorn-globals "^6.0.0"
cssom "^0.4.4"
cssstyle "^2.2.0"
data-urls "^2.0.0"
decimal.js "^10.2.0"
domexception "^2.0.1"
escodegen "^1.14.1"
html-encoding-sniffer "^2.0.1"
is-potential-custom-element-name "^1.0.0"
nwsapi "^2.2.0"
parse5 "5.1.1"
request "^2.88.2"
request-promise-native "^1.0.8"
saxes "^5.0.0"
symbol-tree "^3.2.4"
tough-cookie "^3.0.1"
w3c-hr-time "^1.0.2"
w3c-xmlserializer "^2.0.0"
webidl-conversions "^6.1.0"
whatwg-encoding "^1.0.5"
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
ws "^7.2.3"
xml-name-validator "^3.0.0"
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@ -13210,7 +13645,7 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
nwsapi@^2.0.9:
nwsapi@^2.0.9, nwsapi@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
@ -13659,6 +14094,11 @@ parse5@5.1.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
parse5@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
parse5@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
@ -14304,6 +14744,11 @@ qunit@^2.9.3:
node-watch "0.6.4"
tiny-glob "0.2.6"
raf-pool@~0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/raf-pool/-/raf-pool-0.1.4.tgz#6b9f75ea1903c16e162ffe8c76688f5a625bc2cd"
integrity sha512-BBPamTVuSprPq7CUmgxc+ycbsYUtUYnQtJYEfMHXMaostPaNpQzipLfSa/rwjmlgjBPiD7G+I+8W340sLOPu6g==
ramda@^0.21.0:
version "0.21.0"
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35"
@ -14939,7 +15384,7 @@ request-promise-core@1.1.4:
dependencies:
lodash "^4.17.19"
request-promise-native@^1.0.5:
request-promise-native@^1.0.5, request-promise-native@^1.0.8:
version "1.0.9"
resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
@ -14948,7 +15393,7 @@ request-promise-native@^1.0.5:
stealthy-require "^1.1.1"
tough-cookie "^2.3.3"
request@^2.88.0:
request@^2.88.0, request@^2.88.2:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
@ -15053,6 +15498,14 @@ resolve-package-path@^2.0.0:
path-root "^0.1.1"
resolve "^1.13.1"
resolve-package-path@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-3.1.0.tgz#35faaa5d54a9c7dd481eb7c4b2a44410c9c763d8"
integrity sha512-2oC2EjWbMJwvSN6Z7DbDfJMnD8MYEouaLn5eIX0j8XwPsYCVIyY9bbnX88YHVkbr8XHqvZrYbxaLPibfTYKZMA==
dependencies:
path-root "^0.1.1"
resolve "^1.17.0"
resolve-path@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
@ -15264,6 +15717,13 @@ saxes@^3.1.3:
dependencies:
xmlchars "^2.1.1"
saxes@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
dependencies:
xmlchars "^2.2.0"
scheduler@^0.19.1:
version "0.19.1"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
@ -15342,6 +15802,13 @@ semver@^7.0.0, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
semver@^7.3.4:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
send@0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
@ -15495,7 +15962,7 @@ silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0, silent-error@^1.1
dependencies:
debug "^2.2.0"
simple-html-tokenizer@^0.5.10:
simple-html-tokenizer@^0.5.10, simple-html-tokenizer@^0.5.8:
version "0.5.10"
resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.10.tgz#0843e4f00c9677f1c81e3dfeefcee0a4aca8e5d0"
integrity sha512-1DHMUmvUOGuUZ9/+cX/+hOhWhRD5dEw6lodn8WuV+T+cQ31hhBcCu1dcDsNotowi4mMaNhrLyKoS+DtB81HdDA==
@ -16201,7 +16668,7 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
symbol-tree@^3.2.2:
symbol-tree@^3.2.2, symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
@ -16633,6 +17100,15 @@ tough-cookie@^2.3.3, tough-cookie@^2.4.3, tough-cookie@~2.5.0:
psl "^1.1.28"
punycode "^2.1.1"
tough-cookie@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
dependencies:
ip-regex "^2.1.0"
psl "^1.1.28"
punycode "^2.1.1"
tr46@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
@ -16640,6 +17116,13 @@ tr46@^1.0.1:
dependencies:
punycode "^2.1.0"
tr46@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
dependencies:
punycode "^2.1.1"
tracked-maps-and-sets@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tracked-maps-and-sets/-/tracked-maps-and-sets-2.1.0.tgz#762cf89fb22ca16aa4b1a7198c03e844e0ef238d"
@ -17306,13 +17789,20 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
w3c-hr-time@^1.0.1:
w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
dependencies:
browser-process-hrtime "^1.0.0"
w3c-xmlserializer@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
dependencies:
xml-name-validator "^3.0.0"
walk-sync@^0.2.5:
version "0.2.7"
resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.2.7.tgz#b49be4ee6867657aeb736978b56a29d10fa39969"
@ -17407,6 +17897,16 @@ webidl-conversions@^4.0.2:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
webidl-conversions@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
webpack-dev-middleware@^3.7.0:
version "3.7.2"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
@ -17531,7 +18031,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
dependencies:
iconv-lite "0.4.24"
whatwg-mimetype@^2.2.0:
whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
@ -17545,6 +18045,15 @@ whatwg-url@^7.0.0:
tr46 "^1.0.1"
webidl-conversions "^4.0.2"
whatwg-url@^8.0.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"
integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^2.0.2"
webidl-conversions "^6.1.0"
which-boxed-primitive@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz#cbe8f838ebe91ba2471bb69e9edbda67ab5a5ec1"
@ -17684,6 +18193,16 @@ wrap-ansi@^7.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrap-legacy-hbs-plugin-if-needed@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wrap-legacy-hbs-plugin-if-needed/-/wrap-legacy-hbs-plugin-if-needed-1.0.1.tgz#6683eb74747f33e7caea54bb2ed85106ef9006b4"
integrity sha512-aJjXe5WwrY0u0dcUgKW3m2SGnxosJ66LLm/QaG0YMHqgA6+J2xwAFZfhSLsQ2BmO5x8PTH+OIxoAXuGz3qBA7A==
dependencies:
"@glimmer/reference" "^0.42.1"
"@glimmer/runtime" "^0.42.1"
"@glimmer/syntax" "^0.42.1"
"@simple-dom/interface" "^1.4.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@ -17718,6 +18237,11 @@ ws@^7.1.2:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
ws@^7.2.3:
version "7.4.2"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd"
integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==
ws@~6.1.0:
version "6.1.4"
resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
@ -17740,7 +18264,7 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
xmlchars@^2.1.1:
xmlchars@^2.1.1, xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==