Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(accordion): add meta #1225

Merged
merged 31 commits into from
Feb 28, 2022
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
24e06d5
expansion panel caption and meta
rachelbt Jan 31, 2022
9e5ebe9
adding ui-test and story
rachelbt Feb 1, 2022
8c73847
updating test snapshot
rachelbt Feb 1, 2022
5b3ad65
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 1, 2022
f2892e5
updating ui-test snapshot
rachelbt Feb 1, 2022
7fe09e2
meta-data color
rachelbt Feb 2, 2022
91c6de3
fix alignment panel header
rachelbt Feb 3, 2022
b556f83
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 3, 2022
6593f67
update tests
rachelbt Feb 3, 2022
0bebd52
remove h3 tag
rachelbt Feb 3, 2022
ceeffc8
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 6, 2022
d7524bb
remove h3 tag
rachelbt Feb 6, 2022
0daa2df
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 7, 2022
944d80e
add tests
rachelbt Feb 7, 2022
83f0967
Update components/expansion-panel/test/expansion-panel.test.js
rachelbt Feb 7, 2022
11a64cd
Update components/expansion-panel/test/expansion-panel.test.js
rachelbt Feb 7, 2022
6ad3c7b
Update components/expansion-panel/test/expansion-panel.test.js
rachelbt Feb 7, 2022
a78c5dc
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 8, 2022
4951c91
fix class name in test
rachelbt Feb 8, 2022
69a399b
add test for all header texts & css fix
rachelbt Feb 8, 2022
574d90b
fix test
rachelbt Feb 8, 2022
f23fa05
pull from master
rachelbt Feb 15, 2022
a72df25
fix merge issues
rachelbt Feb 15, 2022
4087004
fix merge issues
rachelbt Feb 15, 2022
e6a3417
remove caption
rachelbt Feb 17, 2022
978e7fe
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 17, 2022
66ef513
change metaData to meta
rachelbt Feb 17, 2022
9db9393
class name change
rachelbt Feb 21, 2022
648a294
class name change
rachelbt Feb 21, 2022
751593a
remove line trim
rachelbt Feb 28, 2022
4001c2d
Merge branch 'master' into issues-1126-accordion
rachelbt Feb 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 12 additions & 2 deletions __snapshots__/expansion panel.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@
<button
aria-controls="content"
class="expansion-panel-header"
id="expansion-panel"
>
<mwc-ripple>
</mwc-ripple>
<span class="leading-icon">
<slot name="icon">
</slot>
</span>
click me
<span class="header-text">
click me
</span>
<span class="trailing-icon">
<slot name="trailingIcon">
<vwc-icon
Expand All @@ -30,8 +33,10 @@
</span>
</button>
<div
aria-labelledby="expansion-panel"
class="expansion-panel-body"
id="content"
role="region"
>
<slot>
</slot>
Expand All @@ -45,14 +50,17 @@
<button
aria-controls="content"
class="expansion-panel-header"
id="expansion-panel"
>
<mwc-ripple>
</mwc-ripple>
<span class="leading-icon">
<slot name="icon">
</slot>
</span>
click me
<span class="header-text">
click me
</span>
<span class="trailing-icon">
<slot name="trailingIcon">
<vwc-icon
Expand All @@ -69,8 +77,10 @@
</span>
</button>
<div
aria-labelledby="expansion-panel"
class="expansion-panel-body"
id="content"
role="region"
>
<slot>
</slot>
Expand Down
52 changes: 49 additions & 3 deletions components/expansion-panel/src/vwc-expansion-panel.scss
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,20 @@
.expansion-panel-header {
@include typography.typography-cat-shorthand('subtitle-2');
position: relative;
display: flex;
display: grid;
align-items: center;
padding: 16px;
border: 0 none;
background: transparent;
cursor: pointer;
grid-template-areas: '. caption . .' 'leading header meta trailing';
grid-template-columns: auto 1fr auto auto;
grid-template-rows: auto auto;
text-align: left;

&.with-meta {
grid-template-columns: auto 1fr 0.35fr auto;
}

.leading-icon,
.trailing-icon {
Expand All @@ -44,8 +52,38 @@
#{icon-variables.$icon-size-variable-name}: var(#{expansion-panel-variables.$expansion-panel-icon-size-variable-name}, 20px);
}
}
.header-text {
/* stylelint-disable property-no-vendor-prefix */
/* stylelint-disable value-no-vendor-prefix */
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
grid-area: header;
-webkit-line-clamp: 2;
/* stylelint-enable property-no-vendor-prefix */
/* stylelint-enable value-no-vendor-prefix */
margin-inline-end: auto;
}

.caption {
@include typography.typography-cat-shorthand('body-2');
color: var(--vvd-color-neutral-80);
grid-area: caption;
}

.meta {
@include typography.typography-cat-shorthand('body-2-bold');
overflow: hidden;
flex-shrink: 0;
color: var(--vvd-color-neutral-70);
grid-area: meta;
margin-inline-start: 1rem;
text-overflow: ellipsis;
white-space: nowrap;
}

.leading-icon {
grid-area: leading;
/* stylelint-disable selector-no-qualifying-type */
vwc-icon,
slot[name="icon"i]::slotted(vwc-icon) {
Expand All @@ -55,8 +93,7 @@
}

.trailing-icon {
margin-inline-start: auto;

grid-area: trailing;
/* stylelint-disable selector-no-qualifying-type */
vwc-icon,
slot[name="trailingIcon"i]::slotted(vwc-icon) {
Expand Down Expand Up @@ -88,4 +125,13 @@
.expansion-panel-header {
@include typography.typography-cat-shorthand('body-2-bold');
}
.caption {
@include typography.typography-cat-shorthand('caption');
}
.meta {
@include typography.typography-cat-shorthand('caption-bold');
}
vwc-icon {
--vvd-expansion-panel-icon-size: 16px;
}
}
27 changes: 24 additions & 3 deletions components/expansion-panel/src/vwc-expansion-panel.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import '@vonage/vvd-core';
import '@vonage/vwc-icon';
import '@material/mwc-ripple/mwc-ripple.js';
import { classMap } from 'lit-html/directives/class-map.js';
import {
customElement,
eventOptions,
Expand All @@ -13,6 +14,7 @@ import type { Ripple } from '@material/mwc-ripple';
import { RippleHandlers } from '@material/mwc-ripple/ripple-handlers.js';
import { VWCExpansionPanelBase } from './vwc-expansion-panel-base.js';
import { style } from './vwc-expansion-panel.css.js';
import {nothing} from 'lit-html';

declare global {
interface HTMLElementTagNameMap {
Expand Down Expand Up @@ -45,6 +47,12 @@ export class VWCExpansionPanel extends VWCExpansionPanelBase {
@property({ type: String, reflect: true })
indicatorIconSet: IndicatorIconSets[number] = 'chevron';

@property({ type: String, reflect: true })
caption = '';

@property({ type: String, reflect: true })
metaData = '';
rachelbt marked this conversation as resolved.
Show resolved Hide resolved

@property({ type: Boolean, reflect: true })
dense = false;

Expand Down Expand Up @@ -73,9 +81,21 @@ export class VWCExpansionPanel extends VWCExpansionPanelBase {
return !this.noRipple ? html`<mwc-ripple></mwc-ripple>` : '';
}

private renderCaption(): TemplateResult | unknown {
return this.caption ? html`<span class="caption">${this.caption}</span>` : nothing;
}

private renderMetaData(): TemplateResult | unknown {
return this.metaData ? html`<span class="meta">${this.metaData}</span>` : nothing;
}

protected override render(): TemplateResult {
const classes = {
'with-meta': this.metaData,
};

return html`
<button class="expansion-panel-header"
<button class="expansion-panel-header ${classMap(classes)}" id="expansion-panel"
@mousedown="${this.handleRippleActivate}"
@mouseenter="${this.handleRippleMouseEnter}"
@mouseleave="${this.handleRippleMouseLeave}"
Expand All @@ -95,14 +115,15 @@ export class VWCExpansionPanel extends VWCExpansionPanelBase {
${this.renderIconOrToggle()}
</slot>
</span>
${this.heading || this.header}
${this.renderCaption()}<span class="header-text">${this.heading || this.header}</span>
${this.renderMetaData()}
<span class="trailing-icon">
<slot name="trailingIcon">
${!this.leadingToggle ? this.renderToggle() : ''}
</slot>
</span>
</button>
<div id="content" class="expansion-panel-body">
<div id="content" class="expansion-panel-body" role="region" aria-labelledby="expansion-panel">
<slot></slot>
</div>`;
}
Expand Down
10 changes: 10 additions & 0 deletions components/expansion-panel/stories/arg-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@ export const argTypes = {
type: 'text'
}
},
caption: {
control: {
type: 'text'
}
},
metaData: {
control: {
type: 'text'
}
},
indicatorIconSet: {
control: {
type: 'select',
Expand Down
6 changes: 6 additions & 0 deletions components/expansion-panel/stories/expansion-panel.stories.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,12 @@ Dense.args = { header: 'Campaign Details', dense: '' };
export const LeadingToggle = Template.bind({});
LeadingToggle.args = { header: 'Campaign Details', leadingToggle: '' };

export const Caption = Template.bind({});
Caption.args = { header: 'Campaign Details with caption', caption: 'item number' };

export const MetaData = Template.bind({});
MetaData.args = { header: 'Campaign Details', metaData: 'meta-data', icon: "chat-solid" };

export const Icon = Template.bind({});
Icon.args = { header: 'Campaign Details', icon: 'chat-solid' };

Expand Down
29 changes: 29 additions & 0 deletions components/expansion-panel/test/expansion-panel.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,35 @@ describe('expansion panel', () => {
expect(headerEl.textContent.trim()).to.equal(headerText);
});

it('should have caption text when caption is set', async () => {
const captionText = 'Item caption';
const [actualElement] = addElement(
textToDomToParent(`<${COMPONENT_NAME} caption="${captionText}"></${COMPONENT_NAME}>`)
);
await waitNextTask();
const caption = actualElement.shadowRoot.querySelector('.expansion-panel-header');
expect(caption.textContent.trim()).to.equal(captionText);
});

it('should have meat text when meta is set', async () => {
rachelbt marked this conversation as resolved.
Show resolved Hide resolved
const metaText = 'meta-data';
const [actualElement] = addElement(
textToDomToParent(`<${COMPONENT_NAME} metaData="${metaText}"></${COMPONENT_NAME}>`)
);
await waitNextTask();
const meta = actualElement.shadowRoot.querySelector('.expansion-panel-header');
expect(meta.textContent.trim()).to.equal(metaText);
rachelbt marked this conversation as resolved.
Show resolved Hide resolved
});

it('expansion-panel-header should have meta class when meta is set', async () => {
rachelbt marked this conversation as resolved.
Show resolved Hide resolved
const metaText = 'meta-data';
const [actualElement] = addElement(
textToDomToParent(`<${COMPONENT_NAME} metaData="${metaText}"></${COMPONENT_NAME}>`)
);
await waitNextTask();
expect(actualElement.shadowRoot.querySelector('.meta'));
rachelbt marked this conversation as resolved.
Show resolved Hide resolved
});

describe('toggle icons', () => {
let actualElement;
beforeEach(async () => {
Expand Down
Binary file modified ui-tests/snapshots/vwc-accordion.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 17 additions & 3 deletions ui-tests/tests/vwc-accordion/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,31 @@ export async function createElementVariations(wrapper) {
accordionElementWrapper.innerHTML =
`
<vwc-expansion-panel header="Campaign Details"></vwc-expansion-panel>

<vwc-expansion-panel header="Campaign Details" indicatorIconSet="binary"></vwc-expansion-panel>
<vwc-expansion-panel header="Campaign Details" icon="chat-solid"></vwc-expansion-panel>
<vwc-expansion-panel header="Campaign Details" leadingToggle></vwc-expansion-panel>
<vwc-expansion-panel header="Campaign Details" dense></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" caption="caption"></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data"></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" caption="caption" icon="chat-solid"></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" caption="caption" leadingToggle></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" caption="caption" indicatorIconSet="binary"></vwc-expansion-panel>
<hr>
<p>dense</p>
<vwc-expansion-panel header="Campaign Details" dense></vwc-expansion-panel>
<vwc-expansion-panel header="Campaign Details" indicatorIconSet="binary" dense></vwc-expansion-panel>
<vwc-expansion-panel header="Campaign Details" icon="chat-solid" dense></vwc-expansion-panel>
<vwc-expansion-panel header="Campaign Details" leadingToggle dense></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" caption="caption" dense></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" dense></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" caption="caption" icon="chat-solid" dense></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" caption="caption" leadingToggle dense></vwc-expansion-panel>
<vwc-expansion-panel header="I'm an accordion header" metaData="meta-data" caption="caption" indicatorIconSet="binary" dense></vwc-expansion-panel>

<vwc-expansion-panel open header="Campaign Details">
A campaign describes a specific use case and details of the messages you will be sending through it.
Such as: sample messages, subscriber opt-in/out, and the associated numbers you will be sending with these messages.
</vwc-expansion-panel>

<hr>
<vwc-accordion>
<vwc-expansion-panel open header="Item 1">lorem ipsum dolor amet</vwc-expansion-panel>
<vwc-expansion-panel header="Item 2">lorem ipsum dolor amet</vwc-expansion-panel>
Expand Down