@getflip/swirl-components 0.97.0 → 0.98.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.json +395 -3
- package/dist/cjs/index-506fe4ea.js +20 -8
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/swirl-accordion-item.cjs.entry.js +76 -0
- package/dist/cjs/swirl-accordion.cjs.entry.js +34 -0
- package/dist/cjs/swirl-app-layout_7.cjs.entry.js +2 -75
- package/dist/cjs/swirl-color-input.cjs.entry.js +78 -0
- package/dist/cjs/swirl-components.cjs.js +1 -1
- package/dist/cjs/swirl-modal.cjs.entry.js +1 -1
- package/dist/cjs/v4-8e8d6fbc.js +77 -0
- package/dist/collection/collection-manifest.json +4 -1
- package/dist/collection/components/swirl-accordion/swirl-accordion.css +7 -0
- package/dist/collection/components/swirl-accordion/swirl-accordion.js +33 -0
- package/dist/collection/components/swirl-accordion/swirl-accordion.spec.js +67 -0
- package/dist/collection/components/swirl-accordion/swirl-accordion.stories.js +64 -0
- package/dist/collection/components/swirl-accordion-item/swirl-accordion-item.css +155 -0
- package/dist/collection/components/swirl-accordion-item/swirl-accordion-item.js +246 -0
- package/dist/collection/components/swirl-accordion-item/swirl-accordion-item.spec.js +87 -0
- package/dist/collection/components/swirl-accordion-item/swirl-accordion-item.stories.js +34 -0
- package/dist/collection/components/swirl-color-input/swirl-color-input.css +68 -0
- package/dist/collection/components/swirl-color-input/swirl-color-input.js +292 -0
- package/dist/collection/components/swirl-color-input/swirl-color-input.spec.js +62 -0
- package/dist/collection/components/swirl-color-input/swirl-color-input.stories.js +22 -0
- package/dist/collection/components/swirl-modal/swirl-modal.css +4 -0
- package/dist/components/swirl-accordion-item.d.ts +11 -0
- package/dist/components/swirl-accordion-item.js +113 -0
- package/dist/components/swirl-accordion.d.ts +11 -0
- package/dist/components/swirl-accordion.js +49 -0
- package/dist/components/swirl-color-input.d.ts +11 -0
- package/dist/components/swirl-color-input.js +102 -0
- package/dist/components/swirl-icon.js +1 -35
- package/dist/components/swirl-icon2.js +37 -0
- package/dist/components/swirl-modal.js +1 -1
- package/dist/components/swirl-resource-list-item2.js +1 -74
- package/dist/components/v4.js +75 -0
- package/dist/esm/index-99d0060d.js +20 -8
- package/dist/esm/loader.js +1 -1
- package/dist/esm/swirl-accordion-item.entry.js +72 -0
- package/dist/esm/swirl-accordion.entry.js +30 -0
- package/dist/esm/swirl-app-layout_7.entry.js +1 -74
- package/dist/esm/swirl-color-input.entry.js +74 -0
- package/dist/esm/swirl-components.js +1 -1
- package/dist/esm/swirl-modal.entry.js +1 -1
- package/dist/esm/v4-fa4bb814.js +75 -0
- package/dist/swirl-components/p-19b890a3.js +1 -0
- package/dist/swirl-components/p-230745da.entry.js +1 -0
- package/dist/swirl-components/p-244a747a.entry.js +1 -0
- package/dist/swirl-components/{p-0fc0cd2c.entry.js → p-342bb04d.entry.js} +1 -1
- package/dist/swirl-components/p-b1648433.entry.js +1 -0
- package/dist/swirl-components/p-e8231bad.entry.js +1 -0
- package/dist/swirl-components/swirl-components.esm.js +1 -1
- package/dist/types/components/swirl-accordion/swirl-accordion.d.ts +6 -0
- package/dist/types/components/swirl-accordion/swirl-accordion.stories.d.ts +14 -0
- package/dist/types/components/swirl-accordion-item/swirl-accordion-item.d.ts +30 -0
- package/dist/types/components/swirl-accordion-item/swirl-accordion-item.stories.d.ts +14 -0
- package/dist/types/components/swirl-color-input/swirl-color-input.d.ts +24 -0
- package/dist/types/components/swirl-color-input/swirl-color-input.stories.d.ts +14 -0
- package/dist/types/components.d.ts +97 -4
- package/package.json +1 -1
- package/vscode-data.json +82 -0
- package/dist/swirl-components/p-8a00faee.entry.js +0 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { generateStoryElement } from "../../utils";
|
|
2
|
+
import Docs from "./swirl-accordion.mdx";
|
|
3
|
+
export default {
|
|
4
|
+
component: "swirl-accordion",
|
|
5
|
+
tags: ["autodocs"],
|
|
6
|
+
parameters: {
|
|
7
|
+
docs: {
|
|
8
|
+
page: Docs,
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
title: "Components/SwirlAccordion",
|
|
12
|
+
};
|
|
13
|
+
const Template = (args) => {
|
|
14
|
+
const element = generateStoryElement("swirl-accordion", args);
|
|
15
|
+
element.innerHTML = `
|
|
16
|
+
<swirl-accordion-item description="Lorem ipsum dolor sit amet, consectetur adipiscing elit." heading="Accordion item 1" initially-open>
|
|
17
|
+
<swirl-stack spacing="16">
|
|
18
|
+
<swirl-text size="sm">
|
|
19
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod
|
|
20
|
+
euismod libero, nec sollicitudin diam ultricies ut. Donec eget
|
|
21
|
+
consectetur libero. Donec et mi non mauris fermentum dictum. Sed
|
|
22
|
+
scelerisque, sapien vitae fringilla aliquam, quam sapien aliquet.
|
|
23
|
+
</swirl-text>
|
|
24
|
+
<swirl-button label="A button" variant="flat"></swirl-button>
|
|
25
|
+
</swirl-stack>
|
|
26
|
+
</swirl-accordion-item>
|
|
27
|
+
<swirl-accordion-item description="Lorem ipsum dolor sit amet, consectetur adipiscing elit." heading="Accordion item 2">
|
|
28
|
+
<swirl-stack spacing="16">
|
|
29
|
+
<swirl-text size="sm">
|
|
30
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod
|
|
31
|
+
euismod libero, nec sollicitudin diam ultricies ut. Donec eget
|
|
32
|
+
consectetur libero. Donec et mi non mauris fermentum dictum. Sed
|
|
33
|
+
scelerisque, sapien vitae fringilla aliquam, quam sapien aliquet.
|
|
34
|
+
</swirl-text>
|
|
35
|
+
<swirl-button label="A button" variant="flat"></swirl-button>
|
|
36
|
+
</swirl-stack>
|
|
37
|
+
</swirl-accordion-item>
|
|
38
|
+
<swirl-accordion-item description="Lorem ipsum dolor sit amet, consectetur adipiscing elit." heading="Accordion item 3">
|
|
39
|
+
<swirl-stack spacing="16">
|
|
40
|
+
<swirl-text size="sm">
|
|
41
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod
|
|
42
|
+
euismod libero, nec sollicitudin diam ultricies ut. Donec eget
|
|
43
|
+
consectetur libero. Donec et mi non mauris fermentum dictum. Sed
|
|
44
|
+
scelerisque, sapien vitae fringilla aliquam, quam sapien aliquet.
|
|
45
|
+
</swirl-text>
|
|
46
|
+
<swirl-button label="A button" variant="flat"></swirl-button>
|
|
47
|
+
</swirl-stack>
|
|
48
|
+
</swirl-accordion-item>
|
|
49
|
+
<swirl-accordion-item description="Lorem ipsum dolor sit amet, consectetur adipiscing elit." disabled heading="Accordion item 4">
|
|
50
|
+
<swirl-stack spacing="16">
|
|
51
|
+
<swirl-text size="sm">
|
|
52
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod
|
|
53
|
+
euismod libero, nec sollicitudin diam ultricies ut. Donec eget
|
|
54
|
+
consectetur libero. Donec et mi non mauris fermentum dictum. Sed
|
|
55
|
+
scelerisque, sapien vitae fringilla aliquam, quam sapien aliquet.
|
|
56
|
+
</swirl-text>
|
|
57
|
+
<swirl-button label="A button" variant="flat"></swirl-button>
|
|
58
|
+
</swirl-stack>
|
|
59
|
+
</swirl-accordion-item>
|
|
60
|
+
`;
|
|
61
|
+
return element;
|
|
62
|
+
};
|
|
63
|
+
export const SwirlAccordion = Template.bind({});
|
|
64
|
+
SwirlAccordion.args = {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: block;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
:host * {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:host(:last-child) .accordion-item {
|
|
10
|
+
border-bottom: 0.0625rem solid var(--s-border-default);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.accordion-item {
|
|
14
|
+
display: grid;
|
|
15
|
+
align-content: start;
|
|
16
|
+
border-top: 0.0625rem solid var(--s-border-default);
|
|
17
|
+
transition: grid-template-rows 0.15s;
|
|
18
|
+
grid-template-rows: auto 0fr;
|
|
19
|
+
will-change: grid-template-rows;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@media (prefers-reduced-motion) {
|
|
23
|
+
|
|
24
|
+
.accordion-item {
|
|
25
|
+
transition: none
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.accordion-item--expanded {
|
|
30
|
+
grid-template-rows: auto 1fr;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.accordion-item--expanded .accordion-item__content {
|
|
34
|
+
padding-top: var(--s-space-16);
|
|
35
|
+
padding-bottom: var(--s-space-16);
|
|
36
|
+
animation: accordion-overflow 0.01s;
|
|
37
|
+
animation-delay: 0.15s;
|
|
38
|
+
animation-fill-mode: forwards;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@media (min-width: 992px) and (max-width: 1439px) and (hover: hover),(min-width: 1440px) {
|
|
42
|
+
|
|
43
|
+
.accordion-item--expanded .accordion-item__content {
|
|
44
|
+
padding-top: var(--s-space-8)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.accordion-item__heading {
|
|
49
|
+
margin: 0;
|
|
50
|
+
padding: 0;
|
|
51
|
+
font-size: var(--s-font-size-base);
|
|
52
|
+
font-weight: var(--s-font-weight-semibold);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@media (min-width: 992px) and (max-width: 1439px) and (hover: hover),(min-width: 1440px) {
|
|
56
|
+
|
|
57
|
+
.accordion-item__heading {
|
|
58
|
+
font-size: var(--s-font-size-sm)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.accordion-item__toggle {
|
|
63
|
+
display: flex;
|
|
64
|
+
width: 100%;
|
|
65
|
+
padding: 0;
|
|
66
|
+
padding-top: var(--s-space-16);
|
|
67
|
+
padding-bottom: var(--s-space-16);
|
|
68
|
+
align-items: center;
|
|
69
|
+
border: none;
|
|
70
|
+
color: var(--s-text-default);
|
|
71
|
+
background-color: var(--s-surface-default);
|
|
72
|
+
font: inherit;
|
|
73
|
+
line-height: var(--s-line-height-lg);
|
|
74
|
+
text-align: start;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
gap: var(--s-space-16);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.accordion-item__toggle:hover {
|
|
80
|
+
background-color: var(--s-surface-hovered);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.accordion-item__toggle:active {
|
|
84
|
+
background-color: var(--s-surface-pressed);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.accordion-item__toggle:disabled {
|
|
88
|
+
color: var(--s-text-disabled);
|
|
89
|
+
background-color: var(--s-surface-default);
|
|
90
|
+
cursor: default;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.accordion-item__toggle:disabled .text {
|
|
94
|
+
color: var(--s-text-disabled);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.accordion-item__toggle:focus:not(:focus-visible) {
|
|
98
|
+
outline: none;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.accordion-item__toggle:focus-visible {
|
|
102
|
+
outline-color: var(--s-focus-default);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@media (min-width: 992px) and (max-width: 1439px) and (hover: hover),(min-width: 1440px) {
|
|
106
|
+
|
|
107
|
+
.accordion-item__toggle {
|
|
108
|
+
line-height: var(--s-line-height-sm)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.accordion-item__toggle-text {
|
|
113
|
+
flex-grow: 1;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.accordion-item__icon {
|
|
117
|
+
display: inline-flex;
|
|
118
|
+
padding-right: var(--s-space-8);
|
|
119
|
+
flex-shrink: 0;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.accordion-item__content {
|
|
123
|
+
overflow: hidden;
|
|
124
|
+
padding-top: 0;
|
|
125
|
+
padding-bottom: 0;
|
|
126
|
+
transition: padding-top 0.15s, padding-bottom 0.15s;
|
|
127
|
+
animation: accordion-display 0.01s;
|
|
128
|
+
animation-delay: 0.15s;
|
|
129
|
+
animation-fill-mode: forwards;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@media (prefers-reduced-motion) {
|
|
133
|
+
|
|
134
|
+
.accordion-item__content {
|
|
135
|
+
transition: none
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@keyframes accordion-overflow {
|
|
140
|
+
from {
|
|
141
|
+
overflow: hidden;
|
|
142
|
+
}
|
|
143
|
+
to {
|
|
144
|
+
overflow: visible;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@keyframes accordion-display {
|
|
149
|
+
from {
|
|
150
|
+
display: block;
|
|
151
|
+
}
|
|
152
|
+
to {
|
|
153
|
+
display: none;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { h, Host, } from "@stencil/core";
|
|
2
|
+
import { v4 as uuid } from "uuid";
|
|
3
|
+
import classnames from "classnames";
|
|
4
|
+
export class SwirlAccordionItem {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.id = `accordion-item-${uuid()}`;
|
|
7
|
+
this.headingId = `${this.id}-heading`;
|
|
8
|
+
this.onHeadingClick = () => {
|
|
9
|
+
this.toggle();
|
|
10
|
+
};
|
|
11
|
+
this.description = undefined;
|
|
12
|
+
this.disabled = undefined;
|
|
13
|
+
this.heading = undefined;
|
|
14
|
+
this.headingLevel = 2;
|
|
15
|
+
this.initiallyOpen = undefined;
|
|
16
|
+
this.expanded = false;
|
|
17
|
+
}
|
|
18
|
+
componentWillLoad() {
|
|
19
|
+
this.accordion = this.el.closest("swirl-accordion");
|
|
20
|
+
this.expanded = (this.initiallyOpen && !this.disabled) || false;
|
|
21
|
+
if (!Boolean(this.accordion)) {
|
|
22
|
+
throw new Error("[Swirl] swirl-accordion-item must be a child of a swirl-accordion.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Collapsed the accordion item.
|
|
27
|
+
*/
|
|
28
|
+
async collapse() {
|
|
29
|
+
if (!this.expanded || this.disabled) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this.expanded = false;
|
|
33
|
+
this.expansionChange.emit(this.expanded);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Expands the accordion item.
|
|
37
|
+
*/
|
|
38
|
+
async expand() {
|
|
39
|
+
if (this.expanded || this.disabled) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.expanded = true;
|
|
43
|
+
this.expansionChange.emit(this.expanded);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Toggles the accordion item.
|
|
47
|
+
*/
|
|
48
|
+
async toggle() {
|
|
49
|
+
if (this.expanded) {
|
|
50
|
+
this.collapse();
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.expand();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
render() {
|
|
57
|
+
const HeadingTag = `h${this.headingLevel}`;
|
|
58
|
+
const className = classnames("accordion-item", {
|
|
59
|
+
"accordion-item--expanded": this.expanded,
|
|
60
|
+
});
|
|
61
|
+
return (h(Host, null, h("div", { class: className }, h(HeadingTag, { class: "accordion-item__heading" }, h("button", { "aria-controls": this.id, "aria-expanded": String(this.expanded), class: "accordion-item__toggle", disabled: this.disabled, id: this.headingId, onClick: this.onHeadingClick, type: "button" }, h("span", { class: "accordion-item__toggle-text" }, this.heading, this.description && (h("swirl-text", { as: "span", color: "subdued", size: "sm" }, this.description))), h("span", { class: "accordion-item__icon" }, !this.expanded && (h("swirl-icon", { glyph: "chevron-right", size: 20 })), this.expanded && (h("swirl-icon", { glyph: "expand-more", size: 20 }))))), h("div", { "aria-labelledby": this.headingId, class: "accordion-item__content", id: this.id, role: "region" }, h("slot", null)))));
|
|
62
|
+
}
|
|
63
|
+
static get is() { return "swirl-accordion-item"; }
|
|
64
|
+
static get encapsulation() { return "shadow"; }
|
|
65
|
+
static get originalStyleUrls() {
|
|
66
|
+
return {
|
|
67
|
+
"$": ["swirl-accordion-item.css"]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
static get styleUrls() {
|
|
71
|
+
return {
|
|
72
|
+
"$": ["swirl-accordion-item.css"]
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
static get properties() {
|
|
76
|
+
return {
|
|
77
|
+
"description": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"mutable": false,
|
|
80
|
+
"complexType": {
|
|
81
|
+
"original": "string",
|
|
82
|
+
"resolved": "string",
|
|
83
|
+
"references": {}
|
|
84
|
+
},
|
|
85
|
+
"required": false,
|
|
86
|
+
"optional": true,
|
|
87
|
+
"docs": {
|
|
88
|
+
"tags": [],
|
|
89
|
+
"text": ""
|
|
90
|
+
},
|
|
91
|
+
"attribute": "description",
|
|
92
|
+
"reflect": false
|
|
93
|
+
},
|
|
94
|
+
"disabled": {
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"mutable": false,
|
|
97
|
+
"complexType": {
|
|
98
|
+
"original": "boolean",
|
|
99
|
+
"resolved": "boolean",
|
|
100
|
+
"references": {}
|
|
101
|
+
},
|
|
102
|
+
"required": false,
|
|
103
|
+
"optional": true,
|
|
104
|
+
"docs": {
|
|
105
|
+
"tags": [],
|
|
106
|
+
"text": ""
|
|
107
|
+
},
|
|
108
|
+
"attribute": "disabled",
|
|
109
|
+
"reflect": false
|
|
110
|
+
},
|
|
111
|
+
"heading": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"mutable": false,
|
|
114
|
+
"complexType": {
|
|
115
|
+
"original": "string",
|
|
116
|
+
"resolved": "string",
|
|
117
|
+
"references": {}
|
|
118
|
+
},
|
|
119
|
+
"required": true,
|
|
120
|
+
"optional": false,
|
|
121
|
+
"docs": {
|
|
122
|
+
"tags": [],
|
|
123
|
+
"text": ""
|
|
124
|
+
},
|
|
125
|
+
"attribute": "heading",
|
|
126
|
+
"reflect": false
|
|
127
|
+
},
|
|
128
|
+
"headingLevel": {
|
|
129
|
+
"type": "number",
|
|
130
|
+
"mutable": false,
|
|
131
|
+
"complexType": {
|
|
132
|
+
"original": "SwirlHeadingLevel",
|
|
133
|
+
"resolved": "1 | 2 | 3 | 4 | 5 | 6",
|
|
134
|
+
"references": {
|
|
135
|
+
"SwirlHeadingLevel": {
|
|
136
|
+
"location": "import",
|
|
137
|
+
"path": "../swirl-heading/swirl-heading"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"required": false,
|
|
142
|
+
"optional": true,
|
|
143
|
+
"docs": {
|
|
144
|
+
"tags": [],
|
|
145
|
+
"text": ""
|
|
146
|
+
},
|
|
147
|
+
"attribute": "heading-level",
|
|
148
|
+
"reflect": false,
|
|
149
|
+
"defaultValue": "2"
|
|
150
|
+
},
|
|
151
|
+
"initiallyOpen": {
|
|
152
|
+
"type": "boolean",
|
|
153
|
+
"mutable": false,
|
|
154
|
+
"complexType": {
|
|
155
|
+
"original": "boolean",
|
|
156
|
+
"resolved": "boolean",
|
|
157
|
+
"references": {}
|
|
158
|
+
},
|
|
159
|
+
"required": false,
|
|
160
|
+
"optional": true,
|
|
161
|
+
"docs": {
|
|
162
|
+
"tags": [],
|
|
163
|
+
"text": ""
|
|
164
|
+
},
|
|
165
|
+
"attribute": "initially-open",
|
|
166
|
+
"reflect": false
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
static get states() {
|
|
171
|
+
return {
|
|
172
|
+
"expanded": {}
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
static get events() {
|
|
176
|
+
return [{
|
|
177
|
+
"method": "expansionChange",
|
|
178
|
+
"name": "expansionChange",
|
|
179
|
+
"bubbles": true,
|
|
180
|
+
"cancelable": true,
|
|
181
|
+
"composed": true,
|
|
182
|
+
"docs": {
|
|
183
|
+
"tags": [],
|
|
184
|
+
"text": ""
|
|
185
|
+
},
|
|
186
|
+
"complexType": {
|
|
187
|
+
"original": "boolean",
|
|
188
|
+
"resolved": "boolean",
|
|
189
|
+
"references": {}
|
|
190
|
+
}
|
|
191
|
+
}];
|
|
192
|
+
}
|
|
193
|
+
static get methods() {
|
|
194
|
+
return {
|
|
195
|
+
"collapse": {
|
|
196
|
+
"complexType": {
|
|
197
|
+
"signature": "() => Promise<void>",
|
|
198
|
+
"parameters": [],
|
|
199
|
+
"references": {
|
|
200
|
+
"Promise": {
|
|
201
|
+
"location": "global"
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"return": "Promise<void>"
|
|
205
|
+
},
|
|
206
|
+
"docs": {
|
|
207
|
+
"text": "Collapsed the accordion item.",
|
|
208
|
+
"tags": []
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"expand": {
|
|
212
|
+
"complexType": {
|
|
213
|
+
"signature": "() => Promise<void>",
|
|
214
|
+
"parameters": [],
|
|
215
|
+
"references": {
|
|
216
|
+
"Promise": {
|
|
217
|
+
"location": "global"
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"return": "Promise<void>"
|
|
221
|
+
},
|
|
222
|
+
"docs": {
|
|
223
|
+
"text": "Expands the accordion item.",
|
|
224
|
+
"tags": []
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
"toggle": {
|
|
228
|
+
"complexType": {
|
|
229
|
+
"signature": "() => Promise<void>",
|
|
230
|
+
"parameters": [],
|
|
231
|
+
"references": {
|
|
232
|
+
"Promise": {
|
|
233
|
+
"location": "global"
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"return": "Promise<void>"
|
|
237
|
+
},
|
|
238
|
+
"docs": {
|
|
239
|
+
"text": "Toggles the accordion item.",
|
|
240
|
+
"tags": []
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
static get elementRef() { return "el"; }
|
|
246
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
import { SwirlAccordionItem } from "./swirl-accordion-item";
|
|
3
|
+
describe("swirl-accordion-item", () => {
|
|
4
|
+
it("renders heading and description", async () => {
|
|
5
|
+
const page = await newSpecPage({
|
|
6
|
+
components: [SwirlAccordionItem],
|
|
7
|
+
html: `
|
|
8
|
+
<swirl-accordion>
|
|
9
|
+
<swirl-accordion-item description="Description" heading="heading">
|
|
10
|
+
Content
|
|
11
|
+
</swirl-accordion-item>
|
|
12
|
+
</swirl-accordion>
|
|
13
|
+
`,
|
|
14
|
+
});
|
|
15
|
+
const id = page.root.shadowRoot.querySelector(".accordion-item__content").id;
|
|
16
|
+
expect(page.root).toEqualHtml(`
|
|
17
|
+
<swirl-accordion-item description="Description" heading="heading">
|
|
18
|
+
<mock:shadow-root>
|
|
19
|
+
<div class="accordion-item">
|
|
20
|
+
<h2 class="accordion-item__heading">
|
|
21
|
+
<button aria-controls="${id}" aria-expanded="false" class="accordion-item__toggle" id="${id}-heading" type="button">
|
|
22
|
+
<span class="accordion-item__toggle-text">
|
|
23
|
+
heading
|
|
24
|
+
<swirl-text as="span" color="subdued" size="sm">
|
|
25
|
+
Description
|
|
26
|
+
</swirl-text>
|
|
27
|
+
</span>
|
|
28
|
+
<span class="accordion-item__icon">
|
|
29
|
+
<swirl-icon glyph="chevron-right" size="20"></swirl-icon>
|
|
30
|
+
</span>
|
|
31
|
+
</button>
|
|
32
|
+
</h2>
|
|
33
|
+
<div aria-labelledby="${id}-heading" class="accordion-item__content" id="${id}" role="region">
|
|
34
|
+
<slot></slot>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</mock:shadow-root>
|
|
38
|
+
Content
|
|
39
|
+
</swirl-accordion-item>
|
|
40
|
+
`);
|
|
41
|
+
});
|
|
42
|
+
it("can be toggled", async () => {
|
|
43
|
+
const page = await newSpecPage({
|
|
44
|
+
components: [SwirlAccordionItem],
|
|
45
|
+
html: `
|
|
46
|
+
<swirl-accordion>
|
|
47
|
+
<swirl-accordion-item description="Description" heading="heading">
|
|
48
|
+
Content
|
|
49
|
+
</swirl-accordion-item>
|
|
50
|
+
</swirl-accordion>
|
|
51
|
+
`,
|
|
52
|
+
});
|
|
53
|
+
expect(page.root.shadowRoot
|
|
54
|
+
.querySelector(".accordion-item")
|
|
55
|
+
.classList.contains("accordion-item--expanded")).toBe(false);
|
|
56
|
+
const toggle = page.root.shadowRoot.querySelector(".accordion-item__toggle");
|
|
57
|
+
toggle.click();
|
|
58
|
+
await page.waitForChanges();
|
|
59
|
+
expect(page.root.shadowRoot
|
|
60
|
+
.querySelector(".accordion-item")
|
|
61
|
+
.classList.contains("accordion-item--expanded")).toBe(true);
|
|
62
|
+
toggle.click();
|
|
63
|
+
await page.waitForChanges();
|
|
64
|
+
expect(page.root.shadowRoot
|
|
65
|
+
.querySelector(".accordion-item")
|
|
66
|
+
.classList.contains("accordion-item--expanded")).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
it("fires expansionChange events", async () => {
|
|
69
|
+
const page = await newSpecPage({
|
|
70
|
+
components: [SwirlAccordionItem],
|
|
71
|
+
html: `
|
|
72
|
+
<swirl-accordion>
|
|
73
|
+
<swirl-accordion-item description="Description" heading="heading">
|
|
74
|
+
Content
|
|
75
|
+
</swirl-accordion-item>
|
|
76
|
+
</swirl-accordion>
|
|
77
|
+
`,
|
|
78
|
+
});
|
|
79
|
+
const spy = jest.fn();
|
|
80
|
+
page.root.addEventListener("expansionChange", spy);
|
|
81
|
+
const toggle = page.root.shadowRoot.querySelector(".accordion-item__toggle");
|
|
82
|
+
toggle.click();
|
|
83
|
+
expect(spy.mock.calls[0][0].detail).toBe(true);
|
|
84
|
+
toggle.click();
|
|
85
|
+
expect(spy.mock.calls[1][0].detail).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { generateStoryElement } from "../../utils";
|
|
2
|
+
import Docs from "./swirl-accordion-item.mdx";
|
|
3
|
+
export default {
|
|
4
|
+
component: "swirl-accordion-item",
|
|
5
|
+
tags: ["autodocs"],
|
|
6
|
+
parameters: {
|
|
7
|
+
docs: {
|
|
8
|
+
page: Docs,
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
title: "Components/SwirlAccordionItem",
|
|
12
|
+
};
|
|
13
|
+
const Template = (args) => {
|
|
14
|
+
const container = document.createElement("swirl-accordion");
|
|
15
|
+
const element = generateStoryElement("swirl-accordion-item", args);
|
|
16
|
+
element.innerHTML = `
|
|
17
|
+
<swirl-stack spacing="16">
|
|
18
|
+
<swirl-text size="sm">
|
|
19
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod
|
|
20
|
+
euismod libero, nec sollicitudin diam ultricies ut. Donec eget
|
|
21
|
+
consectetur libero. Donec et mi non mauris fermentum dictum. Sed
|
|
22
|
+
scelerisque, sapien vitae fringilla aliquam, quam sapien aliquet.
|
|
23
|
+
</swirl-text>
|
|
24
|
+
<swirl-button label="A button" variant="flat"></swirl-button>
|
|
25
|
+
</swirl-stack>
|
|
26
|
+
`;
|
|
27
|
+
container.append("\n ", element, "\n");
|
|
28
|
+
return container;
|
|
29
|
+
};
|
|
30
|
+
export const SwirlAccordionItem = Template.bind({});
|
|
31
|
+
SwirlAccordionItem.args = {
|
|
32
|
+
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
|
33
|
+
heading: "Accordion item",
|
|
34
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: block;
|
|
3
|
+
width: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
:host * {
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.color-input {
|
|
11
|
+
position: relative;
|
|
12
|
+
display: flex;
|
|
13
|
+
width: 100%;
|
|
14
|
+
align-items: center;
|
|
15
|
+
color: var(--s-text-default);
|
|
16
|
+
font: inherit;
|
|
17
|
+
line-height: var(--s-line-height-sm);
|
|
18
|
+
cursor: text;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.color-input--inline .color-input__preview {
|
|
22
|
+
width: 1.5rem;
|
|
23
|
+
height: 1.5rem;
|
|
24
|
+
margin-top: -0.125rem;
|
|
25
|
+
margin-bottom: -0.125rem;
|
|
26
|
+
margin-right: -0.25rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.color-input__input {
|
|
30
|
+
display: inline-flex;
|
|
31
|
+
width: 100%;
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: 0;
|
|
34
|
+
flex-grow: 1;
|
|
35
|
+
border: none;
|
|
36
|
+
color: var(--s-text-default);
|
|
37
|
+
background-color: transparent;
|
|
38
|
+
font: inherit;
|
|
39
|
+
font-size: var(--s-font-size-base);
|
|
40
|
+
line-height: var(--s-line-height-base);
|
|
41
|
+
caret-color: var(--s-border-highlight);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.color-input__input:focus {
|
|
45
|
+
outline: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.color-input__input:disabled {
|
|
49
|
+
color: var(--s-text-disabled);
|
|
50
|
+
background-color: transparent;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@media (min-width: 992px) and (max-width: 1439px) and (hover: hover),(min-width: 1440px) {
|
|
54
|
+
|
|
55
|
+
.color-input__input {
|
|
56
|
+
font-size: var(--s-font-size-sm);
|
|
57
|
+
line-height: var(--s-line-height-sm)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.color-input__preview {
|
|
62
|
+
width: 2.75rem;
|
|
63
|
+
height: 2.75rem;
|
|
64
|
+
margin-top: -1.25rem;
|
|
65
|
+
flex-shrink: 0;
|
|
66
|
+
border: 0.0625rem solid var(--s-border-default);
|
|
67
|
+
border-radius: var(--s-border-radius-s);
|
|
68
|
+
}
|