mirror of https://github.com/hashicorp/consul
John Cowen
3 years ago
committed by
GitHub
9 changed files with 404 additions and 1 deletions
@ -0,0 +1,125 @@
|
||||
<!-- START component-docs:@tagName --> |
||||
# DisclosureCard |
||||
<!-- END component-docs:@tagName --> |
||||
|
||||
```hbs preview-template |
||||
|
||||
<figure> |
||||
|
||||
<figcaption> |
||||
Use the component |
||||
</figcaption> |
||||
|
||||
<DisclosureCard as |disclosure|> |
||||
|
||||
<header> |
||||
<h4>api-service-1</h4> |
||||
</header> |
||||
<Consul::Bucket::List |
||||
@item={{hash |
||||
Namespace="different-nspace" |
||||
Partition="different-partition" |
||||
}} |
||||
@nspace={{'nspace'}} |
||||
@partition={{'partition'}} |
||||
/> |
||||
<DistributionMeter |
||||
type="linear" |
||||
as |meter|> |
||||
<meter.Meter class="warning" percentage="50" /> |
||||
<meter.Meter class="critical" percentage="30" /> |
||||
</DistributionMeter> |
||||
|
||||
<disclosure.Details |
||||
|
||||
as |details|> |
||||
<Consul::Bucket::List |
||||
@item={{hash |
||||
Namespace="different-nspace" |
||||
Partition="different-partition" |
||||
}} |
||||
@nspace={{'nspace'}} |
||||
@partition={{'partition'}} |
||||
/> |
||||
<DistributionMeter |
||||
type="linear" |
||||
as |meter|> |
||||
<meter.Meter class="warning" percentage="80" /> |
||||
<meter.Meter class="critical" percentage="10" /> |
||||
</DistributionMeter> |
||||
|
||||
<Consul::Bucket::List |
||||
@item={{hash |
||||
Namespace="different-nspace" |
||||
Partition="different-partition" |
||||
}} |
||||
@nspace={{'nspace'}} |
||||
@partition={{'partition'}} |
||||
/> |
||||
|
||||
<DistributionMeter |
||||
type="linear" |
||||
as |meter|> |
||||
<meter.Meter class="warning" percentage="10" /> |
||||
<meter.Meter class="critical" percentage="40" /> |
||||
</DistributionMeter> |
||||
|
||||
<Consul::Bucket::List |
||||
@item={{hash |
||||
Namespace="different-nspace" |
||||
Partition="different-partition" |
||||
}} |
||||
@nspace={{'nspace'}} |
||||
@partition={{'partition'}} |
||||
/> |
||||
|
||||
<DistributionMeter |
||||
type="linear" |
||||
as |meter|> |
||||
<meter.Meter class="warning" percentage="50" /> |
||||
<meter.Meter class="critical" percentage="30" /> |
||||
</DistributionMeter> |
||||
|
||||
</disclosure.Details> |
||||
|
||||
<disclosure.Action |
||||
slot="action" |
||||
{{on 'click' disclosure.toggle}} |
||||
> |
||||
{{if disclosure.expanded "View less" "View more"}} |
||||
</disclosure.Action> |
||||
|
||||
</DisclosureCard> |
||||
|
||||
</figure> |
||||
``` |
||||
|
||||
## Attributes |
||||
|
||||
<!-- START component-docs:@attrs --> |
||||
<!-- END component-docs:@attrs --> |
||||
|
||||
## Arguments |
||||
|
||||
<!-- START component-docs:@args --> |
||||
<!-- END component-docs:@args --> |
||||
|
||||
## Slots |
||||
|
||||
<!-- START component-docs:@slots --> |
||||
<!-- END component-docs:@slots --> |
||||
|
||||
## CSS Parts |
||||
|
||||
<!-- START component-docs:@cssparts --> |
||||
<!-- END component-docs:@cssparts --> |
||||
|
||||
## CSS Properties |
||||
|
||||
<!-- START component-docs:@cssprops --> |
||||
<!-- END component-docs:@cssprops --> |
||||
|
||||
## Contextual Components |
||||
|
||||
<!-- START component-docs:@components --> |
||||
<!-- END component-docs:@components --> |
@ -0,0 +1,90 @@
|
||||
<CustomElement |
||||
@element="disclosure-card" |
||||
@description="Block level component with extra disclosable content" |
||||
@attrs={{array |
||||
}} |
||||
as |custom element|> |
||||
<Disclosure as |disclosure|> |
||||
<disclosure-card |
||||
{{did-insert custom.connect}} |
||||
{{will-destroy custom.disconnect}} |
||||
expanded={{disclosure.expanded}} |
||||
> |
||||
|
||||
<custom.Template |
||||
@styles={{css-map |
||||
(require '/styles/base/icons/base-keyframes.css' from='/components/disclosure-card') |
||||
(require '/styles/base/icons/icons/chevron-down/index.css' from='/components/disclosure-card') |
||||
(require '/components/panel/index.css' from='/components/disclosure-card') |
||||
(css " |
||||
:host { |
||||
display: block; |
||||
} |
||||
slot[name='action']::slotted(button) { |
||||
display: block; |
||||
cursor: pointer; |
||||
width: 100%; |
||||
|
||||
background-color: rgb(var(--tone-gray-050)); |
||||
color: rgb(var(--tone-gray-800)); |
||||
padding-top: var(--padding-y); |
||||
padding-bottom: var(--padding-y); |
||||
} |
||||
slot[name='action']::slotted(button)::after { |
||||
transition-timing-function: linear; |
||||
transition-duration: 300ms; |
||||
transition-property: transform; |
||||
--icon-name: icon-chevron-down; |
||||
--icon-size: icon-000; |
||||
content: ''; |
||||
} |
||||
|
||||
:host([expanded]) slot[name='action']::slotted(button)::after { |
||||
transform: scaleY(-100%); |
||||
} |
||||
|
||||
:host([expanded]) [style*='max-height'] { |
||||
transition-duration: 50ms; |
||||
} |
||||
[style*='max-height'] { |
||||
transition-timing-function: ease-out; |
||||
transition-property: max-height; |
||||
overflow: hidden; |
||||
} |
||||
.content { |
||||
padding: var(--padding-y) var(--padding-x); |
||||
} |
||||
") |
||||
}} |
||||
> |
||||
<div part="base" |
||||
class={{class-map |
||||
"panel" |
||||
}} |
||||
> |
||||
<div |
||||
{{on-resize (dom-position (array |
||||
(array 'height' 'max-height') |
||||
))}} |
||||
class={{class-map |
||||
'content' |
||||
}} |
||||
> |
||||
<slot> |
||||
</slot> |
||||
</div> |
||||
<hr |
||||
class={{class-map |
||||
'panel-separator' |
||||
}} |
||||
/> |
||||
<slot name="action"> |
||||
</slot> |
||||
</div> |
||||
</custom.Template> |
||||
|
||||
{{yield disclosure}} |
||||
|
||||
</disclosure-card> |
||||
</Disclosure> |
||||
</CustomElement> |
@ -0,0 +1,31 @@
|
||||
export default (css) => css` |
||||
.panel { |
||||
--padding-x: 14px; |
||||
--padding-y: 14px; |
||||
} |
||||
.panel { |
||||
position: relative; |
||||
} |
||||
.panel-separator { |
||||
margin: 0; |
||||
} |
||||
|
||||
.panel { |
||||
--tone-border: var(--tone-gray-300); |
||||
border: var(--decor-border-100); |
||||
border-radius: var(--decor-radius-200); |
||||
box-shadow: var(--decor-elevation-600); |
||||
} |
||||
.panel-separator { |
||||
border: 0; |
||||
border-top: var(--decor-border-100); |
||||
} |
||||
.panel { |
||||
color: rgb(var(--tone-gray-900)); |
||||
background-color: rgb(var(--tone-gray-000)); |
||||
} |
||||
.panel, |
||||
.panel-separator { |
||||
border-color: rgb(var(--tone-border)); |
||||
} |
||||
`;
|
@ -0,0 +1,91 @@
|
||||
export default css => css` |
||||
*::before, *::after { |
||||
display: inline-block; |
||||
animation-play-state: paused; |
||||
animation-fill-mode: forwards; |
||||
animation-iteration-count: var(--icon-resolution, 1); |
||||
vertical-align: text-top; |
||||
} |
||||
*::before { |
||||
animation-name: var(--icon-name-start, var(--icon-name)), |
||||
var(--icon-size-start, var(--icon-size, icon-000)); |
||||
background-color: var(--icon-color-start, var(--icon-color)); |
||||
} |
||||
*::after { |
||||
animation-name: var(--icon-name-end, var(--icon-name)), |
||||
var(--icon-size-end, var(--icon-size, icon-000)); |
||||
background-color: var(--icon-color-end, var(--icon-color)); |
||||
} |
||||
|
||||
[style*='--icon-color-start']::before { |
||||
color: var(--icon-color-start); |
||||
} |
||||
[style*='--icon-color-end']::after { |
||||
color: var(--icon-color-end); |
||||
} |
||||
[style*='--icon-name-start']::before, |
||||
[style*='--icon-name-end']::after { |
||||
content: ''; |
||||
} |
||||
|
||||
@keyframes icon-000 { |
||||
100% { |
||||
width: 1.2em; |
||||
height: 1.2em; |
||||
} |
||||
} |
||||
@keyframes icon-100 { |
||||
100% { |
||||
width: 0.625rem; /* 10px */ |
||||
height: 0.625rem; /* 10px */ |
||||
} |
||||
} |
||||
@keyframes icon-200 { |
||||
100% { |
||||
width: 0.75rem; /* 12px */ |
||||
height: 0.75rem; /* 12px */ |
||||
} |
||||
} |
||||
@keyframes icon-300 { |
||||
100% { |
||||
width: 1rem; /* 16px */ |
||||
height: 1rem; /* 16px */ |
||||
} |
||||
} |
||||
@keyframes icon-400 { |
||||
100% { |
||||
width: 1.125rem; /* 18px */ |
||||
height: 1.125rem; /* 18px */ |
||||
} |
||||
} |
||||
@keyframes icon-500 { |
||||
100% { |
||||
width: 1.250rem; /* 20px */ |
||||
height: 1.250rem; /* 20px */ |
||||
} |
||||
} |
||||
@keyframes icon-600 { |
||||
100% { |
||||
width: 1.375rem; /* 22px */ |
||||
height: 1.375rem; /* 22px */ |
||||
} |
||||
} |
||||
@keyframes icon-700 { |
||||
100% { |
||||
width: 1.500rem; /* 24px */ |
||||
height: 1.500rem; /* 24px */ |
||||
} |
||||
} |
||||
@keyframes icon-800 { |
||||
100% { |
||||
width: 1.625rem; /* 26px */ |
||||
height: 1.625rem; /* 26px */ |
||||
} |
||||
} |
||||
@keyframes icon-900 { |
||||
100% { |
||||
width: 1.750rem; /* 28px */ |
||||
height: 1.750rem; /* 28px */ |
||||
} |
||||
} |
||||
`;
|
@ -0,0 +1,16 @@
|
||||
export default css => css ` |
||||
@keyframes icon-chevron-down { |
||||
50% { |
||||
|
||||
background-color: var(--icon-color, var(--color-chevron-down-500, currentColor)); |
||||
-webkit-mask-image: var(--icon-chevron-down-24); |
||||
mask-image: var(--icon-chevron-down-24); |
||||
} |
||||
|
||||
100% { |
||||
|
||||
background-color: var(--icon-color, var(--color-chevron-down-500, currentColor)); |
||||
-webkit-mask-image: var(--icon-chevron-down-16); |
||||
mask-image: var(--icon-chevron-down-16); |
||||
} |
||||
}`;
|
@ -0,0 +1,16 @@
|
||||
export default css => css ` |
||||
@keyframes icon-chevron-up { |
||||
50% { |
||||
|
||||
background-color: var(--icon-color, var(--color-chevron-up-500, currentColor)); |
||||
-webkit-mask-image: var(--icon-chevron-up-24); |
||||
mask-image: var(--icon-chevron-up-24); |
||||
} |
||||
|
||||
100% { |
||||
|
||||
background-color: var(--icon-color, var(--color-chevron-up-500, currentColor)); |
||||
-webkit-mask-image: var(--icon-chevron-up-16); |
||||
mask-image: var(--icon-chevron-up-16); |
||||
} |
||||
}`;
|
@ -0,0 +1,17 @@
|
||||
export default css => css ` |
||||
@keyframes icon-chevrons-down { |
||||
50% { |
||||
|
||||
background-color: var(--icon-color, var(--color-chevrons-down-500, currentColor)); |
||||
-webkit-mask-image: var(--icon-chevrons-down-24); |
||||
mask-image: var(--icon-chevrons-down-24); |
||||
} |
||||
|
||||
100% { |
||||
|
||||
background-color: var(--icon-color, var(--color-chevrons-down-500, currentColor)); |
||||
-webkit-mask-image: var(--icon-chevrons-down-16); |
||||
mask-image: var(--icon-chevrons-down-16); |
||||
} |
||||
} |
||||
`;
|
Loading…
Reference in new issue