@spectrum-web-components/tabs 0.41.2 → 0.42.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/custom-elements.json +37 -0
- package/package.json +8 -8
- package/src/TabsOverflow.d.ts +2 -0
- package/src/TabsOverflow.dev.js +14 -0
- package/src/TabsOverflow.dev.js.map +2 -2
- package/src/TabsOverflow.js +9 -5
- package/src/TabsOverflow.js.map +3 -3
- package/stories/tabs.stories.js +6 -15
- package/stories/tabs.stories.js.map +2 -2
- package/test/tabs-overflow.test.js +74 -0
- package/test/tabs-overflow.test.js.map +2 -2
package/custom-elements.json
CHANGED
|
@@ -800,10 +800,31 @@
|
|
|
800
800
|
"type": {
|
|
801
801
|
"text": "boolean"
|
|
802
802
|
},
|
|
803
|
+
"privacy": "public",
|
|
803
804
|
"default": "false",
|
|
804
805
|
"attribute": "compact",
|
|
805
806
|
"reflects": true
|
|
806
807
|
},
|
|
808
|
+
{
|
|
809
|
+
"kind": "field",
|
|
810
|
+
"name": "labelPrevious",
|
|
811
|
+
"type": {
|
|
812
|
+
"text": "string"
|
|
813
|
+
},
|
|
814
|
+
"privacy": "public",
|
|
815
|
+
"default": "'Scroll to previous tabs'",
|
|
816
|
+
"attribute": "label-previous"
|
|
817
|
+
},
|
|
818
|
+
{
|
|
819
|
+
"kind": "field",
|
|
820
|
+
"name": "labelNext",
|
|
821
|
+
"type": {
|
|
822
|
+
"text": "string"
|
|
823
|
+
},
|
|
824
|
+
"privacy": "public",
|
|
825
|
+
"default": "'Scroll to next tabs'",
|
|
826
|
+
"attribute": "label-next"
|
|
827
|
+
},
|
|
807
828
|
{
|
|
808
829
|
"kind": "field",
|
|
809
830
|
"name": "dir",
|
|
@@ -895,6 +916,22 @@
|
|
|
895
916
|
"default": "false",
|
|
896
917
|
"fieldName": "compact"
|
|
897
918
|
},
|
|
919
|
+
{
|
|
920
|
+
"name": "label-previous",
|
|
921
|
+
"type": {
|
|
922
|
+
"text": "string"
|
|
923
|
+
},
|
|
924
|
+
"default": "'Scroll to previous tabs'",
|
|
925
|
+
"fieldName": "labelPrevious"
|
|
926
|
+
},
|
|
927
|
+
{
|
|
928
|
+
"name": "label-next",
|
|
929
|
+
"type": {
|
|
930
|
+
"text": "string"
|
|
931
|
+
},
|
|
932
|
+
"default": "'Scroll to next tabs'",
|
|
933
|
+
"fieldName": "labelNext"
|
|
934
|
+
},
|
|
898
935
|
{
|
|
899
936
|
"name": "dir",
|
|
900
937
|
"type": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/tabs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -86,14 +86,14 @@
|
|
|
86
86
|
],
|
|
87
87
|
"dependencies": {
|
|
88
88
|
"@lit-labs/observers": "^2.0.0",
|
|
89
|
-
"@spectrum-web-components/base": "^0.
|
|
90
|
-
"@spectrum-web-components/icon": "^0.
|
|
91
|
-
"@spectrum-web-components/icons-ui": "^0.
|
|
92
|
-
"@spectrum-web-components/reactive-controllers": "^0.
|
|
93
|
-
"@spectrum-web-components/shared": "^0.
|
|
89
|
+
"@spectrum-web-components/base": "^0.42.0",
|
|
90
|
+
"@spectrum-web-components/icon": "^0.42.0",
|
|
91
|
+
"@spectrum-web-components/icons-ui": "^0.42.0",
|
|
92
|
+
"@spectrum-web-components/reactive-controllers": "^0.42.0",
|
|
93
|
+
"@spectrum-web-components/shared": "^0.42.0"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
|
-
"@spectrum-css/tabs": "^4.1.
|
|
96
|
+
"@spectrum-css/tabs": "^4.1.3"
|
|
97
97
|
},
|
|
98
98
|
"types": "./src/index.d.ts",
|
|
99
99
|
"customElements": "custom-elements.json",
|
|
@@ -101,5 +101,5 @@
|
|
|
101
101
|
"./sp-*.js",
|
|
102
102
|
"./**/*.dev.js"
|
|
103
103
|
],
|
|
104
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "9b3bd55ff8e8f9438817255976e77fd456b19d72"
|
|
105
105
|
}
|
package/src/TabsOverflow.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ declare const TabsOverflow_base: typeof SpectrumElement & {
|
|
|
12
12
|
export declare class TabsOverflow extends TabsOverflow_base {
|
|
13
13
|
static get styles(): CSSResultArray;
|
|
14
14
|
compact: boolean;
|
|
15
|
+
labelPrevious: string;
|
|
16
|
+
labelNext: string;
|
|
15
17
|
dir: 'ltr' | 'rtl';
|
|
16
18
|
private overflowState;
|
|
17
19
|
private scrollContent;
|
package/src/TabsOverflow.dev.js
CHANGED
|
@@ -32,6 +32,8 @@ export class TabsOverflow extends SizedMixin(SpectrumElement) {
|
|
|
32
32
|
constructor() {
|
|
33
33
|
super();
|
|
34
34
|
this.compact = false;
|
|
35
|
+
this.labelPrevious = "Scroll to previous tabs";
|
|
36
|
+
this.labelNext = "Scroll to next tabs";
|
|
35
37
|
this.overflowState = {
|
|
36
38
|
canScrollLeft: false,
|
|
37
39
|
canScrollRight: false
|
|
@@ -89,6 +91,8 @@ export class TabsOverflow extends SizedMixin(SpectrumElement) {
|
|
|
89
91
|
}
|
|
90
92
|
render() {
|
|
91
93
|
const { canScrollRight, canScrollLeft } = this.overflowState;
|
|
94
|
+
const ariaLabelPrevious = this.labelPrevious;
|
|
95
|
+
const ariaLabelNext = this.labelNext;
|
|
92
96
|
return html`
|
|
93
97
|
<div
|
|
94
98
|
class=${classMap({
|
|
@@ -102,8 +106,10 @@ export class TabsOverflow extends SizedMixin(SpectrumElement) {
|
|
|
102
106
|
"left-scroll": true,
|
|
103
107
|
show: canScrollLeft
|
|
104
108
|
})}
|
|
109
|
+
aria-label=${ariaLabelPrevious}
|
|
105
110
|
quiet
|
|
106
111
|
dir="rtl"
|
|
112
|
+
tabindex="-1"
|
|
107
113
|
@click=${this._handleScrollClick}
|
|
108
114
|
>
|
|
109
115
|
<sp-icon-chevron100
|
|
@@ -116,7 +122,9 @@ export class TabsOverflow extends SizedMixin(SpectrumElement) {
|
|
|
116
122
|
"right-scroll": true,
|
|
117
123
|
show: canScrollRight
|
|
118
124
|
})}
|
|
125
|
+
aria-label=${ariaLabelNext}
|
|
119
126
|
quiet
|
|
127
|
+
tabindex="-1"
|
|
120
128
|
@click=${this._handleScrollClick}
|
|
121
129
|
>
|
|
122
130
|
<sp-icon-chevron100
|
|
@@ -135,6 +143,12 @@ export class TabsOverflow extends SizedMixin(SpectrumElement) {
|
|
|
135
143
|
__decorateClass([
|
|
136
144
|
property({ type: Boolean, reflect: true })
|
|
137
145
|
], TabsOverflow.prototype, "compact", 2);
|
|
146
|
+
__decorateClass([
|
|
147
|
+
property({ type: String, attribute: "label-previous" })
|
|
148
|
+
], TabsOverflow.prototype, "labelPrevious", 2);
|
|
149
|
+
__decorateClass([
|
|
150
|
+
property({ type: String, attribute: "label-next" })
|
|
151
|
+
], TabsOverflow.prototype, "labelNext", 2);
|
|
138
152
|
__decorateClass([
|
|
139
153
|
property({ reflect: true })
|
|
140
154
|
], TabsOverflow.prototype, "dir", 2);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["TabsOverflow.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n PropertyValueMap,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport { ResizeController } from '@lit-labs/observers/resize-controller.js';\nimport { Tabs } from './Tabs.dev.js'\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport chevronIconStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport tabSizes from './tabs-sizes.css.js';\nimport styles from './tabs-overflow.css.js';\n\ninterface TabsOverflowState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n/**\n * @element sp-tabs-overflow\n */\nexport class TabsOverflow extends SizedMixin(SpectrumElement) {\n public static override get styles(): CSSResultArray {\n return [chevronIconStyles, styles, tabSizes];\n }\n\n @property({ type: Boolean, reflect: true })\n compact = false;\n\n @property({ reflect: true })\n public override dir!: 'ltr' | 'rtl';\n\n @state()\n private overflowState: TabsOverflowState = {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n @queryAssignedElements({ selector: 'sp-tabs', flatten: true })\n private scrollContent!: Tabs[];\n\n @query('.tabs-overflow-container')\n private overflowContainer!: HTMLDivElement;\n\n resizeController!: ResizeController;\n\n public constructor() {\n super();\n this.resizeController = new ResizeController(this, {\n target: this,\n callback: (): void => {\n this._updateScrollState();\n },\n });\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n // enable scroll event\n const [tabs] = this.scrollContent;\n if (tabs) {\n tabs.enableTabsScroll = true;\n }\n this.resizeController.observe(this.overflowContainer);\n }\n\n private async _handleSlotChange(): Promise<void> {\n const [tabsElement] = this.scrollContent;\n await tabsElement?.updateComplete;\n this._updateScrollState();\n }\n\n private _updateScrollState(): void {\n const { scrollContent, overflowState } = this;\n\n if (scrollContent) {\n const [tabsElement] = this.scrollContent;\n const { canScrollLeft, canScrollRight } =\n tabsElement?.scrollState || {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n this.overflowState = {\n ...overflowState,\n canScrollLeft,\n canScrollRight,\n };\n }\n }\n\n private _handleScrollClick(event: MouseEvent): void {\n const currentTarget = event.currentTarget as HTMLElement;\n const [tabsElement] = this.scrollContent;\n\n const dist = tabsElement.clientWidth * 0.5;\n const left = currentTarget.classList.contains('left-scroll')\n ? -dist\n : dist;\n tabsElement.scrollTabs(left, 'smooth');\n }\n\n protected override updated(\n changedProperties: PropertyValueMap<this>\n ): void {\n super.updated(changedProperties);\n if (changedProperties.has('dir')) {\n this._updateScrollState();\n }\n }\n\n protected override render(): TemplateResult {\n const { canScrollRight, canScrollLeft } = this.overflowState;\n return html`\n <div\n class=${classMap({\n 'tabs-overflow-container': true,\n 'left-shadow': canScrollLeft,\n 'right-shadow': canScrollRight,\n })}\n >\n <sp-action-button\n class=${classMap({\n 'left-scroll': true,\n show: canScrollLeft,\n })}\n quiet\n dir=\"rtl\"\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronLeft300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <sp-action-button\n class=${classMap({\n 'right-scroll': true,\n show: canScrollRight,\n })}\n quiet\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronRight300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <slot\n @slotchange=${this._handleSlotChange}\n @sp-tabs-scroll=${this._updateScrollState}\n ></slot>\n </div>\n `;\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;AAWA;AAAA,EAEI;AAAA,EAGA;AAAA,EACA;AAAA,OAEG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAEjC,OAAO;AACP,OAAO;AACP,OAAO,uBAAuB;AAC9B,OAAO,cAAc;AACrB,OAAO,YAAY;AASZ,aAAM,qBAAqB,WAAW,eAAe,EAAE;AAAA,
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n PropertyValueMap,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport { ResizeController } from '@lit-labs/observers/resize-controller.js';\nimport { Tabs } from './Tabs.dev.js'\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport chevronIconStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport tabSizes from './tabs-sizes.css.js';\nimport styles from './tabs-overflow.css.js';\n\ninterface TabsOverflowState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n/**\n * @element sp-tabs-overflow\n */\nexport class TabsOverflow extends SizedMixin(SpectrumElement) {\n public static override get styles(): CSSResultArray {\n return [chevronIconStyles, styles, tabSizes];\n }\n\n @property({ type: Boolean, reflect: true })\n public compact = false;\n\n @property({ type: String, attribute: 'label-previous' })\n public labelPrevious = 'Scroll to previous tabs';\n\n @property({ type: String, attribute: 'label-next' })\n public labelNext = 'Scroll to next tabs';\n\n @property({ reflect: true })\n public override dir!: 'ltr' | 'rtl';\n\n @state()\n private overflowState: TabsOverflowState = {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n @queryAssignedElements({ selector: 'sp-tabs', flatten: true })\n private scrollContent!: Tabs[];\n\n @query('.tabs-overflow-container')\n private overflowContainer!: HTMLDivElement;\n\n resizeController!: ResizeController;\n\n public constructor() {\n super();\n this.resizeController = new ResizeController(this, {\n target: this,\n callback: (): void => {\n this._updateScrollState();\n },\n });\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n // enable scroll event\n const [tabs] = this.scrollContent;\n if (tabs) {\n tabs.enableTabsScroll = true;\n }\n this.resizeController.observe(this.overflowContainer);\n }\n\n private async _handleSlotChange(): Promise<void> {\n const [tabsElement] = this.scrollContent;\n await tabsElement?.updateComplete;\n this._updateScrollState();\n }\n\n private _updateScrollState(): void {\n const { scrollContent, overflowState } = this;\n\n if (scrollContent) {\n const [tabsElement] = this.scrollContent;\n const { canScrollLeft, canScrollRight } =\n tabsElement?.scrollState || {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n this.overflowState = {\n ...overflowState,\n canScrollLeft,\n canScrollRight,\n };\n }\n }\n\n private _handleScrollClick(event: MouseEvent): void {\n const currentTarget = event.currentTarget as HTMLElement;\n const [tabsElement] = this.scrollContent;\n\n const dist = tabsElement.clientWidth * 0.5;\n const left = currentTarget.classList.contains('left-scroll')\n ? -dist\n : dist;\n tabsElement.scrollTabs(left, 'smooth');\n }\n\n protected override updated(\n changedProperties: PropertyValueMap<this>\n ): void {\n super.updated(changedProperties);\n if (changedProperties.has('dir')) {\n this._updateScrollState();\n }\n }\n\n protected override render(): TemplateResult {\n const { canScrollRight, canScrollLeft } = this.overflowState;\n const ariaLabelPrevious = this.labelPrevious;\n const ariaLabelNext = this.labelNext;\n return html`\n <div\n class=${classMap({\n 'tabs-overflow-container': true,\n 'left-shadow': canScrollLeft,\n 'right-shadow': canScrollRight,\n })}\n >\n <sp-action-button\n class=${classMap({\n 'left-scroll': true,\n show: canScrollLeft,\n })}\n aria-label=${ariaLabelPrevious}\n quiet\n dir=\"rtl\"\n tabindex=\"-1\"\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronLeft300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <sp-action-button\n class=${classMap({\n 'right-scroll': true,\n show: canScrollRight,\n })}\n aria-label=${ariaLabelNext}\n quiet\n tabindex=\"-1\"\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronRight300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <slot\n @slotchange=${this._handleSlotChange}\n @sp-tabs-scroll=${this._updateScrollState}\n ></slot>\n </div>\n `;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/src/TabsOverflow.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var r=(c,a,t,o)=>{for(var e=o>1?void 0:o?u(a,t):a,l=c.length-1,s;l>=0;l--)(s=c[l])&&(e=(o?s(a,t,e):s(e))||e);return o&&e&&p(a,t,e),e};import{html as h,SizedMixin as d,SpectrumElement as S}from"@spectrum-web-components/base";import{property as i,query as v,queryAssignedElements as b,state as f}from"@spectrum-web-components/base/src/decorators.js";import{classMap as n}from"@spectrum-web-components/base/src/directives.js";import{ResizeController as m}from"@lit-labs/observers/resize-controller.js";import"@spectrum-web-components/action-button/sp-action-button.js";import"@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js";import C from"@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";import g from"./tabs-sizes.css.js";import y from"./tabs-overflow.css.js";export class TabsOverflow extends d(S){constructor(){super();this.compact=!1;this.labelPrevious="Scroll to previous tabs";this.labelNext="Scroll to next tabs";this.overflowState={canScrollLeft:!1,canScrollRight:!1};this.resizeController=new m(this,{target:this,callback:()=>{this._updateScrollState()}})}static get styles(){return[C,y,g]}firstUpdated(t){super.firstUpdated(t);const[o]=this.scrollContent;o&&(o.enableTabsScroll=!0),this.resizeController.observe(this.overflowContainer)}async _handleSlotChange(){const[t]=this.scrollContent;await(t==null?void 0:t.updateComplete),this._updateScrollState()}_updateScrollState(){const{scrollContent:t,overflowState:o}=this;if(t){const[e]=this.scrollContent,{canScrollLeft:l,canScrollRight:s}=(e==null?void 0:e.scrollState)||{canScrollLeft:!1,canScrollRight:!1};this.overflowState={...o,canScrollLeft:l,canScrollRight:s}}}_handleScrollClick(t){const o=t.currentTarget,[e]=this.scrollContent,l=e.clientWidth*.5,s=o.classList.contains("left-scroll")?-l:l;e.scrollTabs(s,"smooth")}updated(t){super.updated(t),t.has("dir")&&this._updateScrollState()}render(){const{canScrollRight:t,canScrollLeft:o}=this.overflowState,e=this.labelPrevious,l=this.labelNext;return h`
|
|
2
2
|
<div
|
|
3
|
-
class=${
|
|
3
|
+
class=${n({"tabs-overflow-container":!0,"left-shadow":o,"right-shadow":t})}
|
|
4
4
|
>
|
|
5
5
|
<sp-action-button
|
|
6
|
-
class=${
|
|
6
|
+
class=${n({"left-scroll":!0,show:o})}
|
|
7
|
+
aria-label=${e}
|
|
7
8
|
quiet
|
|
8
9
|
dir="rtl"
|
|
10
|
+
tabindex="-1"
|
|
9
11
|
@click=${this._handleScrollClick}
|
|
10
12
|
>
|
|
11
13
|
<sp-icon-chevron100
|
|
@@ -14,8 +16,10 @@
|
|
|
14
16
|
></sp-icon-chevron100>
|
|
15
17
|
</sp-action-button>
|
|
16
18
|
<sp-action-button
|
|
17
|
-
class=${
|
|
19
|
+
class=${n({"right-scroll":!0,show:t})}
|
|
20
|
+
aria-label=${l}
|
|
18
21
|
quiet
|
|
22
|
+
tabindex="-1"
|
|
19
23
|
@click=${this._handleScrollClick}
|
|
20
24
|
>
|
|
21
25
|
<sp-icon-chevron100
|
|
@@ -28,5 +32,5 @@
|
|
|
28
32
|
@sp-tabs-scroll=${this._updateScrollState}
|
|
29
33
|
></slot>
|
|
30
34
|
</div>
|
|
31
|
-
`}}
|
|
35
|
+
`}}r([i({type:Boolean,reflect:!0})],TabsOverflow.prototype,"compact",2),r([i({type:String,attribute:"label-previous"})],TabsOverflow.prototype,"labelPrevious",2),r([i({type:String,attribute:"label-next"})],TabsOverflow.prototype,"labelNext",2),r([i({reflect:!0})],TabsOverflow.prototype,"dir",2),r([f()],TabsOverflow.prototype,"overflowState",2),r([b({selector:"sp-tabs",flatten:!0})],TabsOverflow.prototype,"scrollContent",2),r([v(".tabs-overflow-container")],TabsOverflow.prototype,"overflowContainer",2);
|
|
32
36
|
//# sourceMappingURL=TabsOverflow.js.map
|
package/src/TabsOverflow.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["TabsOverflow.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n PropertyValueMap,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport { ResizeController } from '@lit-labs/observers/resize-controller.js';\nimport { Tabs } from './Tabs.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport chevronIconStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport tabSizes from './tabs-sizes.css.js';\nimport styles from './tabs-overflow.css.js';\n\ninterface TabsOverflowState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n/**\n * @element sp-tabs-overflow\n */\nexport class TabsOverflow extends SizedMixin(SpectrumElement) {\n public static override get styles(): CSSResultArray {\n return [chevronIconStyles, styles, tabSizes];\n }\n\n @property({ type: Boolean, reflect: true })\n compact = false;\n\n @property({ reflect: true })\n public override dir!: 'ltr' | 'rtl';\n\n @state()\n private overflowState: TabsOverflowState = {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n @queryAssignedElements({ selector: 'sp-tabs', flatten: true })\n private scrollContent!: Tabs[];\n\n @query('.tabs-overflow-container')\n private overflowContainer!: HTMLDivElement;\n\n resizeController!: ResizeController;\n\n public constructor() {\n super();\n this.resizeController = new ResizeController(this, {\n target: this,\n callback: (): void => {\n this._updateScrollState();\n },\n });\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n // enable scroll event\n const [tabs] = this.scrollContent;\n if (tabs) {\n tabs.enableTabsScroll = true;\n }\n this.resizeController.observe(this.overflowContainer);\n }\n\n private async _handleSlotChange(): Promise<void> {\n const [tabsElement] = this.scrollContent;\n await tabsElement?.updateComplete;\n this._updateScrollState();\n }\n\n private _updateScrollState(): void {\n const { scrollContent, overflowState } = this;\n\n if (scrollContent) {\n const [tabsElement] = this.scrollContent;\n const { canScrollLeft, canScrollRight } =\n tabsElement?.scrollState || {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n this.overflowState = {\n ...overflowState,\n canScrollLeft,\n canScrollRight,\n };\n }\n }\n\n private _handleScrollClick(event: MouseEvent): void {\n const currentTarget = event.currentTarget as HTMLElement;\n const [tabsElement] = this.scrollContent;\n\n const dist = tabsElement.clientWidth * 0.5;\n const left = currentTarget.classList.contains('left-scroll')\n ? -dist\n : dist;\n tabsElement.scrollTabs(left, 'smooth');\n }\n\n protected override updated(\n changedProperties: PropertyValueMap<this>\n ): void {\n super.updated(changedProperties);\n if (changedProperties.has('dir')) {\n this._updateScrollState();\n }\n }\n\n protected override render(): TemplateResult {\n const { canScrollRight, canScrollLeft } = this.overflowState;\n return html`\n <div\n class=${classMap({\n 'tabs-overflow-container': true,\n 'left-shadow': canScrollLeft,\n 'right-shadow': canScrollRight,\n })}\n >\n <sp-action-button\n class=${classMap({\n 'left-scroll': true,\n show: canScrollLeft,\n })}\n quiet\n dir=\"rtl\"\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronLeft300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <sp-action-button\n class=${classMap({\n 'right-scroll': true,\n show: canScrollRight,\n })}\n quiet\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronRight300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <slot\n @slotchange=${this._handleSlotChange}\n @sp-tabs-scroll=${this._updateScrollState}\n ></slot>\n </div>\n `;\n }\n}\n"],
|
|
5
|
-
"mappings": "qNAWA,OAEI,QAAAA,EAGA,cAAAC,EACA,mBAAAC,MAEG,gCACP,OACI,YAAAC,EACA,SAAAC,EACA,yBAAAC,EACA,SAAAC,MACG,kDACP,OAAS,YAAAC,MAAgB,kDACzB,OAAS,oBAAAC,MAAwB,2CAEjC,MAAO,6DACP,MAAO,gEACP,OAAOC,MAAuB,iEAC9B,OAAOC,MAAc,sBACrB,OAAOC,MAAY,yBASZ,aAAM,qBAAqBV,EAAWC,CAAe,CAAE,
|
|
6
|
-
"names": ["html", "SizedMixin", "SpectrumElement", "property", "query", "queryAssignedElements", "state", "classMap", "ResizeController", "chevronIconStyles", "tabSizes", "styles", "changes", "tabs", "tabsElement", "scrollContent", "overflowState", "canScrollLeft", "canScrollRight", "event", "currentTarget", "dist", "left", "changedProperties", "__decorateClass"]
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n CSSResultArray,\n html,\n PropertyValueMap,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport { ResizeController } from '@lit-labs/observers/resize-controller.js';\nimport { Tabs } from './Tabs.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport chevronIconStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\nimport tabSizes from './tabs-sizes.css.js';\nimport styles from './tabs-overflow.css.js';\n\ninterface TabsOverflowState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n/**\n * @element sp-tabs-overflow\n */\nexport class TabsOverflow extends SizedMixin(SpectrumElement) {\n public static override get styles(): CSSResultArray {\n return [chevronIconStyles, styles, tabSizes];\n }\n\n @property({ type: Boolean, reflect: true })\n public compact = false;\n\n @property({ type: String, attribute: 'label-previous' })\n public labelPrevious = 'Scroll to previous tabs';\n\n @property({ type: String, attribute: 'label-next' })\n public labelNext = 'Scroll to next tabs';\n\n @property({ reflect: true })\n public override dir!: 'ltr' | 'rtl';\n\n @state()\n private overflowState: TabsOverflowState = {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n @queryAssignedElements({ selector: 'sp-tabs', flatten: true })\n private scrollContent!: Tabs[];\n\n @query('.tabs-overflow-container')\n private overflowContainer!: HTMLDivElement;\n\n resizeController!: ResizeController;\n\n public constructor() {\n super();\n this.resizeController = new ResizeController(this, {\n target: this,\n callback: (): void => {\n this._updateScrollState();\n },\n });\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n // enable scroll event\n const [tabs] = this.scrollContent;\n if (tabs) {\n tabs.enableTabsScroll = true;\n }\n this.resizeController.observe(this.overflowContainer);\n }\n\n private async _handleSlotChange(): Promise<void> {\n const [tabsElement] = this.scrollContent;\n await tabsElement?.updateComplete;\n this._updateScrollState();\n }\n\n private _updateScrollState(): void {\n const { scrollContent, overflowState } = this;\n\n if (scrollContent) {\n const [tabsElement] = this.scrollContent;\n const { canScrollLeft, canScrollRight } =\n tabsElement?.scrollState || {\n canScrollLeft: false,\n canScrollRight: false,\n };\n\n this.overflowState = {\n ...overflowState,\n canScrollLeft,\n canScrollRight,\n };\n }\n }\n\n private _handleScrollClick(event: MouseEvent): void {\n const currentTarget = event.currentTarget as HTMLElement;\n const [tabsElement] = this.scrollContent;\n\n const dist = tabsElement.clientWidth * 0.5;\n const left = currentTarget.classList.contains('left-scroll')\n ? -dist\n : dist;\n tabsElement.scrollTabs(left, 'smooth');\n }\n\n protected override updated(\n changedProperties: PropertyValueMap<this>\n ): void {\n super.updated(changedProperties);\n if (changedProperties.has('dir')) {\n this._updateScrollState();\n }\n }\n\n protected override render(): TemplateResult {\n const { canScrollRight, canScrollLeft } = this.overflowState;\n const ariaLabelPrevious = this.labelPrevious;\n const ariaLabelNext = this.labelNext;\n return html`\n <div\n class=${classMap({\n 'tabs-overflow-container': true,\n 'left-shadow': canScrollLeft,\n 'right-shadow': canScrollRight,\n })}\n >\n <sp-action-button\n class=${classMap({\n 'left-scroll': true,\n show: canScrollLeft,\n })}\n aria-label=${ariaLabelPrevious}\n quiet\n dir=\"rtl\"\n tabindex=\"-1\"\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronLeft300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <sp-action-button\n class=${classMap({\n 'right-scroll': true,\n show: canScrollRight,\n })}\n aria-label=${ariaLabelNext}\n quiet\n tabindex=\"-1\"\n @click=${this._handleScrollClick}\n >\n <sp-icon-chevron100\n slot=\"icon\"\n class=\"spectrum-UIIcon-ChevronRight300\"\n ></sp-icon-chevron100>\n </sp-action-button>\n <slot\n @slotchange=${this._handleSlotChange}\n @sp-tabs-scroll=${this._updateScrollState}\n ></slot>\n </div>\n `;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["html", "SizedMixin", "SpectrumElement", "property", "query", "queryAssignedElements", "state", "classMap", "ResizeController", "chevronIconStyles", "tabSizes", "styles", "changes", "tabs", "tabsElement", "scrollContent", "overflowState", "canScrollLeft", "canScrollRight", "event", "currentTarget", "dist", "left", "changedProperties", "ariaLabelPrevious", "ariaLabelNext", "__decorateClass"]
|
|
7
7
|
}
|
package/stories/tabs.stories.js
CHANGED
|
@@ -51,29 +51,20 @@ export const Default = (args) => {
|
|
|
51
51
|
}
|
|
52
52
|
sp-tab-panel {
|
|
53
53
|
grid-area: 2/1/2/1;
|
|
54
|
-
transition: opacity
|
|
55
|
-
var(--spectrum-global-animation-duration-300)
|
|
54
|
+
transition: opacity var(--spectrum-animation-duration-300)
|
|
56
55
|
ease-in-out,
|
|
57
|
-
transform var(--spectrum-
|
|
58
|
-
ease-in-out;
|
|
56
|
+
transform var(--spectrum-animation-duration-300) ease-in-out;
|
|
59
57
|
}
|
|
60
58
|
sp-tab-panel:not([selected]) {
|
|
61
59
|
display: unset;
|
|
62
60
|
opacity: 0;
|
|
63
61
|
height: 0;
|
|
64
62
|
pointer-events: none;
|
|
65
|
-
transform: translateY(
|
|
66
|
-
|
|
67
|
-
--spectrum-dropdown-flyout-menu-offset-y,
|
|
68
|
-
var(--spectrum-global-dimension-size-75)
|
|
69
|
-
)
|
|
70
|
-
);
|
|
71
|
-
transition: opacity
|
|
72
|
-
var(--spectrum-global-animation-duration-300)
|
|
63
|
+
transform: translateY(calc(var(--swc-scale-factor) * 6px));
|
|
64
|
+
transition: opacity var(--spectrum-animation-duration-300)
|
|
73
65
|
ease-in-out,
|
|
74
|
-
transform var(--spectrum-
|
|
75
|
-
|
|
76
|
-
height 0s ease var(--spectrum-global-animation-duration-300);
|
|
66
|
+
transform var(--spectrum-animation-duration-300) ease-in-out,
|
|
67
|
+
height 0s ease var(--spectrum-animation-duration-300);
|
|
77
68
|
}
|
|
78
69
|
</style>
|
|
79
70
|
<sp-tabs
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["tabs.stories.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/icon/sp-icon.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-close.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-chevron-down.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-help.js';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport '@spectrum-web-components/tabs/sp-tab-panel.js';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\n\nexport default {\n component: 'sp-tabs',\n title: 'Tabs',\n argTypes: {\n direction: {\n name: 'direction',\n type: { name: 'string', required: false },\n description: 'The direction of the Tabs element',\n table: {\n type: {\n summary: '\"vertical\" | \"vertical-right\" | \"horizontal\"',\n },\n defaultValue: { summary: 'horizontal' },\n },\n control: {\n type: 'text',\n },\n },\n verticalTab: { control: 'boolean' },\n auto: { control: 'boolean' },\n },\n args: {\n direction: 'horizontal',\n type: false,\n verticalTab: false,\n auto: false,\n },\n};\n\ninterface Properties {\n direction: 'vertical' | 'vertical-right' | 'horizontal';\n verticalTabs?: boolean;\n verticalTab?: boolean;\n auto?: boolean;\n}\n\nconst panels = (): TemplateResult => html`\n <sp-tab-panel value=\"1\">Content for \"Really Long Name\"</sp-tab-panel>\n <sp-tab-panel value=\"2\">Content for tab 2</sp-tab-panel>\n <sp-tab-panel value=\"3\">Content for tab 3</sp-tab-panel>\n <sp-tab-panel value=\"4\">Content for tab 4</sp-tab-panel>\n`;\n\nexport const Default = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n sp-tab-panel {\n grid-area: 2/1/2/1;\n transition: opacity\n var(--spectrum-global-animation-duration-300)\n ease-in-out,\n transform var(--spectrum-global-animation-duration-300)\n ease-in-out;\n }\n sp-tab-panel:not([selected]) {\n display: unset;\n opacity: 0;\n height: 0;\n pointer-events: none;\n transform: translateY(\n var(\n --spectrum-dropdown-flyout-menu-offset-y,\n var(--spectrum-global-dimension-size-75)\n )\n );\n transition: opacity\n var(--spectrum-global-animation-duration-300)\n ease-in-out,\n transform var(--spectrum-global-animation-duration-300)\n ease-in-out,\n height 0s ease var(--spectrum-global-animation-duration-300);\n }\n </style>\n <sp-tabs\n selected=\"1\"\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n direction=${args.direction}\n >\n <sp-tab value=\"2\">Tab 2</sp-tab>\n <sp-tab value=\"3\">Tab 3</sp-tab>\n <sp-tab value=\"4\">Tab 4</sp-tab>\n <sp-tab value=\"1\" selected>Really Long Name</sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Autofocus = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n autofocus\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const disabledTabs = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n disabled\n ?auto=${args.auto}\n label=\"Disabled Tabs\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const disabledTab = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n ?auto=${args.auto}\n label=\"Disabled Tab\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" disabled></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" disabled></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const emphasized = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" emphasized ?auto=${args.auto} label=\"Demo Tabs\">\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const emphasizedQuiet = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n emphasized\n quiet\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Vertical = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVertical.args = {\n direction: 'vertical',\n};\n\nexport const verticalQuiet = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalQuiet.args = {\n direction: 'vertical',\n};\n\nexport const verticalEmphasizedQuiet = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n emphasized\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalEmphasizedQuiet.args = {\n direction: 'vertical',\n};\n\nexport const verticalCompact = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n compact\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalCompact.args = {\n direction: 'vertical',\n};\n\nexport const verticalQuietCompact = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n compact\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalQuietCompact.args = {\n direction: 'vertical',\n};\n\nexport const VerticalSized = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n height: 75vh;\n --swc-tabs-list-justify-content: center;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVerticalSized.args = {\n direction: 'vertical',\n};\n\nexport const VerticalRight = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n height: 75vh;\n --swc-tabs-list-justify-content: center;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVerticalRight.args = {\n direction: 'vertical-right',\n};\n\nexport const Icons = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\" ?vertical=${verticalTab}>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" ?vertical=${verticalTab}>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" ?vertical=${verticalTab}>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\" ?vertical=${verticalTab}>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const IconsWithSlottedLabel = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab value=\"1\" ?vertical=${verticalTab}>\n Tab 1\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab value=\"2\" ?vertical=${verticalTab}>\n Tab 2\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab value=\"3\" ?vertical=${verticalTab}>\n Tab 3\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab value=\"4\" ?vertical=${verticalTab}>\n Tab 4\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const IconsOnly = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab aria-label=\"Tab 1\" value=\"1\" ?vertical=${verticalTab}>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab aria-label=\"Tab 2\" value=\"2\" ?vertical=${verticalTab}>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab aria-label=\"Tab 3\" value=\"3\" ?vertical=${verticalTab}>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab aria-label=\"Tab 4\" value=\"4\" ?vertical=${verticalTab}>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const iconsIi = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\" vertical>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" vertical>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" vertical>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\" vertical>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\niconsIi.args = {\n direction: 'vertical',\n};\niconsIi.storyName = 'Icons II';\n\nexport const iconsIii = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\">\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\">\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\">\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\">\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\niconsIii.args = {\n direction: 'vertical',\n};\niconsIii.storyName = 'Icons III';\n\nexport const Quiet = ({ direction, auto }: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs selected=\"1\" quiet direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Compact = ({ direction, auto }: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" compact direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const quietCompact = ({\n direction,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n quiet\n compact\n direction=${direction}\n ?auto=${auto}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nquietCompact.storyName = 'Quiet Compact';\n"],
|
|
5
|
-
"mappings": ";AAWA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,SAAS,YAA4B;AAErC,eAAe;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,IACN,WAAW;AAAA,MACP,MAAM;AAAA,MACN,MAAM,EAAE,MAAM,UAAU,UAAU,MAAM;AAAA,MACxC,aAAa;AAAA,MACb,OAAO;AAAA,QACH,MAAM;AAAA,UACF,SAAS;AAAA,QACb;AAAA,QACA,cAAc,EAAE,SAAS,aAAa;AAAA,MAC1C;AAAA,MACA,SAAS;AAAA,QACL,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,IACA,aAAa,EAAE,SAAS,UAAU;AAAA,IAClC,MAAM,EAAE,SAAS,UAAU;AAAA,EAC/B;AAAA,EACA,MAAM;AAAA,IACF,WAAW;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACV;AACJ;AASA,MAAM,SAAS,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAO9B,aAAM,UAAU,CAAC,SAAqC;AACzD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/icon/sp-icon.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-close.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-chevron-down.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-help.js';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport '@spectrum-web-components/tabs/sp-tab-panel.js';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\n\nexport default {\n component: 'sp-tabs',\n title: 'Tabs',\n argTypes: {\n direction: {\n name: 'direction',\n type: { name: 'string', required: false },\n description: 'The direction of the Tabs element',\n table: {\n type: {\n summary: '\"vertical\" | \"vertical-right\" | \"horizontal\"',\n },\n defaultValue: { summary: 'horizontal' },\n },\n control: {\n type: 'text',\n },\n },\n verticalTab: { control: 'boolean' },\n auto: { control: 'boolean' },\n },\n args: {\n direction: 'horizontal',\n type: false,\n verticalTab: false,\n auto: false,\n },\n};\n\ninterface Properties {\n direction: 'vertical' | 'vertical-right' | 'horizontal';\n verticalTabs?: boolean;\n verticalTab?: boolean;\n auto?: boolean;\n}\n\nconst panels = (): TemplateResult => html`\n <sp-tab-panel value=\"1\">Content for \"Really Long Name\"</sp-tab-panel>\n <sp-tab-panel value=\"2\">Content for tab 2</sp-tab-panel>\n <sp-tab-panel value=\"3\">Content for tab 3</sp-tab-panel>\n <sp-tab-panel value=\"4\">Content for tab 4</sp-tab-panel>\n`;\n\nexport const Default = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n sp-tab-panel {\n grid-area: 2/1/2/1;\n transition: opacity var(--spectrum-animation-duration-300)\n ease-in-out,\n transform var(--spectrum-animation-duration-300) ease-in-out;\n }\n sp-tab-panel:not([selected]) {\n display: unset;\n opacity: 0;\n height: 0;\n pointer-events: none;\n transform: translateY(calc(var(--swc-scale-factor) * 6px));\n transition: opacity var(--spectrum-animation-duration-300)\n ease-in-out,\n transform var(--spectrum-animation-duration-300) ease-in-out,\n height 0s ease var(--spectrum-animation-duration-300);\n }\n </style>\n <sp-tabs\n selected=\"1\"\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n direction=${args.direction}\n >\n <sp-tab value=\"2\">Tab 2</sp-tab>\n <sp-tab value=\"3\">Tab 3</sp-tab>\n <sp-tab value=\"4\">Tab 4</sp-tab>\n <sp-tab value=\"1\" selected>Really Long Name</sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Autofocus = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n autofocus\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const disabledTabs = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n disabled\n ?auto=${args.auto}\n label=\"Disabled Tabs\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const disabledTab = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n ?auto=${args.auto}\n label=\"Disabled Tab\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" disabled></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" disabled></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const emphasized = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" emphasized ?auto=${args.auto} label=\"Demo Tabs\">\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const emphasizedQuiet = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n emphasized\n quiet\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Vertical = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVertical.args = {\n direction: 'vertical',\n};\n\nexport const verticalQuiet = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalQuiet.args = {\n direction: 'vertical',\n};\n\nexport const verticalEmphasizedQuiet = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n emphasized\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalEmphasizedQuiet.args = {\n direction: 'vertical',\n};\n\nexport const verticalCompact = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n compact\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalCompact.args = {\n direction: 'vertical',\n};\n\nexport const verticalQuietCompact = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n compact\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalQuietCompact.args = {\n direction: 'vertical',\n};\n\nexport const VerticalSized = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n height: 75vh;\n --swc-tabs-list-justify-content: center;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVerticalSized.args = {\n direction: 'vertical',\n};\n\nexport const VerticalRight = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n height: 75vh;\n --swc-tabs-list-justify-content: center;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVerticalRight.args = {\n direction: 'vertical-right',\n};\n\nexport const Icons = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\" ?vertical=${verticalTab}>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" ?vertical=${verticalTab}>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" ?vertical=${verticalTab}>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\" ?vertical=${verticalTab}>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const IconsWithSlottedLabel = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab value=\"1\" ?vertical=${verticalTab}>\n Tab 1\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab value=\"2\" ?vertical=${verticalTab}>\n Tab 2\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab value=\"3\" ?vertical=${verticalTab}>\n Tab 3\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab value=\"4\" ?vertical=${verticalTab}>\n Tab 4\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const IconsOnly = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab aria-label=\"Tab 1\" value=\"1\" ?vertical=${verticalTab}>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab aria-label=\"Tab 2\" value=\"2\" ?vertical=${verticalTab}>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab aria-label=\"Tab 3\" value=\"3\" ?vertical=${verticalTab}>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab aria-label=\"Tab 4\" value=\"4\" ?vertical=${verticalTab}>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const iconsIi = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\" vertical>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" vertical>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" vertical>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\" vertical>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\niconsIi.args = {\n direction: 'vertical',\n};\niconsIi.storyName = 'Icons II';\n\nexport const iconsIii = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\">\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\">\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\">\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\">\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\niconsIii.args = {\n direction: 'vertical',\n};\niconsIii.storyName = 'Icons III';\n\nexport const Quiet = ({ direction, auto }: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs selected=\"1\" quiet direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Compact = ({ direction, auto }: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" compact direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const quietCompact = ({\n direction,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n quiet\n compact\n direction=${direction}\n ?auto=${auto}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nquietCompact.storyName = 'Quiet Compact';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -162,5 +162,79 @@ describe("TabsOverflow", () => {
|
|
|
162
162
|
const firstTabPosition = firstTab.getBoundingClientRect();
|
|
163
163
|
expect(firstTabPosition.left).to.be.lessThan(0);
|
|
164
164
|
});
|
|
165
|
+
it("prev and next buttons have default labels", async () => {
|
|
166
|
+
const el = await renderTabsOverflow({
|
|
167
|
+
count: 20,
|
|
168
|
+
size: ElementSizes.M,
|
|
169
|
+
includeTabPanel: true
|
|
170
|
+
});
|
|
171
|
+
await elementUpdated(el);
|
|
172
|
+
const spTabsOverflows = el.querySelector(
|
|
173
|
+
"sp-tabs-overflow"
|
|
174
|
+
);
|
|
175
|
+
const leftButton = spTabsOverflows.shadowRoot.querySelector(
|
|
176
|
+
".left-scroll"
|
|
177
|
+
);
|
|
178
|
+
const rightButton = spTabsOverflows.shadowRoot.querySelector(
|
|
179
|
+
".right-scroll"
|
|
180
|
+
);
|
|
181
|
+
expect(leftButton == null ? void 0 : leftButton.getAttribute("aria-label")).to.equal(
|
|
182
|
+
"Scroll to previous tabs"
|
|
183
|
+
);
|
|
184
|
+
expect(rightButton == null ? void 0 : rightButton.getAttribute("aria-label")).to.equal(
|
|
185
|
+
"Scroll to next tabs"
|
|
186
|
+
);
|
|
187
|
+
});
|
|
188
|
+
it("prev and next buttons labels overwritten via attributes", async () => {
|
|
189
|
+
const tabsContainer = await fixture(
|
|
190
|
+
html`
|
|
191
|
+
<div class="container" style="width: 200px; height: 150px;">
|
|
192
|
+
<sp-tabs-overflow
|
|
193
|
+
label-previous="custom label prev"
|
|
194
|
+
label-next="custom label next"
|
|
195
|
+
>
|
|
196
|
+
<sp-tabs size=${ElementSizes.M} selected=${1}>
|
|
197
|
+
${repeat(
|
|
198
|
+
new Array(20),
|
|
199
|
+
(item) => item,
|
|
200
|
+
(_item, index) => html`
|
|
201
|
+
<sp-tab
|
|
202
|
+
label=${`Tab Item ${index + 1}`}
|
|
203
|
+
value=${index + 1}
|
|
204
|
+
></sp-tab>
|
|
205
|
+
`
|
|
206
|
+
)}
|
|
207
|
+
${repeat(
|
|
208
|
+
new Array(20),
|
|
209
|
+
(item) => item,
|
|
210
|
+
(_item, index) => html`
|
|
211
|
+
<sp-tab-panel value=${index + 1}>
|
|
212
|
+
Content for Tab Item ${index + 1}
|
|
213
|
+
</sp-tab-panel>
|
|
214
|
+
`
|
|
215
|
+
)}
|
|
216
|
+
</sp-tabs>
|
|
217
|
+
</sp-tabs-overflow>
|
|
218
|
+
</div>
|
|
219
|
+
`
|
|
220
|
+
);
|
|
221
|
+
await elementUpdated(tabsContainer);
|
|
222
|
+
const el = tabsContainer;
|
|
223
|
+
const spTabsOverflows = el.querySelector(
|
|
224
|
+
"sp-tabs-overflow"
|
|
225
|
+
);
|
|
226
|
+
const leftButton = spTabsOverflows.shadowRoot.querySelector(
|
|
227
|
+
".left-scroll"
|
|
228
|
+
);
|
|
229
|
+
const rightButton = spTabsOverflows.shadowRoot.querySelector(
|
|
230
|
+
".right-scroll"
|
|
231
|
+
);
|
|
232
|
+
expect(leftButton == null ? void 0 : leftButton.getAttribute("aria-label")).to.equal(
|
|
233
|
+
"custom label prev"
|
|
234
|
+
);
|
|
235
|
+
expect(rightButton == null ? void 0 : rightButton.getAttribute("aria-label")).to.equal(
|
|
236
|
+
"custom label next"
|
|
237
|
+
);
|
|
238
|
+
});
|
|
165
239
|
});
|
|
166
240
|
//# sourceMappingURL=tabs-overflow.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["tabs-overflow.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/scale-medium.js';\nimport '@spectrum-web-components/theme/theme-light.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab-panel.js';\nimport '@spectrum-web-components/tabs/sp-tabs-overflow.js';\nimport { Tab, Tabs, TabsOverflow } from '@spectrum-web-components/tabs';\nimport { ActionButton } from '@spectrum-web-components/action-button';\n\nimport { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport {\n ElementSize,\n ElementSizes,\n html,\n nothing,\n} from '@spectrum-web-components/base';\nimport { repeat } from 'lit/directives/repeat.js';\n\ntype OverflowProperties = {\n count: number;\n size: ElementSize;\n includeTabPanel: boolean;\n selected?: number;\n autoscroll?: boolean;\n};\n\nconst renderTabsOverflow = async ({\n count,\n size,\n includeTabPanel,\n selected = 1,\n autoscroll = false,\n}: OverflowProperties): Promise<HTMLDivElement> => {\n const tabsContainer = await fixture<HTMLDivElement>(\n html`\n <div class=\"container\" style=\"width: 200px; height: 150px;\">\n <sp-tabs-overflow ?autoscroll=${autoscroll}>\n <sp-tabs size=${size} selected=${selected}>\n ${repeat(\n new Array(count),\n (item) => item,\n (_item, index) =>\n html`\n <sp-tab\n label=${`Tab Item ${index + 1}`}\n value=${index + 1}\n ></sp-tab>\n `\n )}\n ${includeTabPanel\n ? html`\n ${repeat(\n new Array(count),\n (item) => item,\n (_item, index) =>\n html`\n <sp-tab-panel value=${index + 1}>\n Content for Tab Item\n ${index + 1}\n </sp-tab-panel>\n `\n )}\n `\n : nothing}\n </sp-tabs>\n </sp-tabs-overflow>\n </div>\n `\n );\n await elementUpdated(tabsContainer);\n return tabsContainer;\n};\n\ndescribe('TabsOverflow', () => {\n it('loads default tabs-overflow accessibly', async () => {\n const el = await fixture<TabsOverflow>(\n html`\n <sp-tabs-overflow>\n <sp-tabs size=\"m\" selected=\"1\">\n <sp-tab label=\"Tab Item 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab Item 2\" value=\"2\"></sp-tab>\n <sp-tab-panel value=\"1\">Tab Content 1</sp-tab-panel>\n <sp-tab-panel value=\"2\">Tab Content 2</sp-tab-panel>\n </sp-tabs>\n </sp-tabs-overflow>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n\n it('show render left and right buttons in shadowDom', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: true,\n });\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n expect(rightButton).to.exist;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n expect(leftButton).to.exist;\n });\n\n it('reflect proper sp-tab size', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.M,\n includeTabPanel: true,\n });\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n\n expect(spTabsOverflows.getAttribute('size')).to.equal('m');\n });\n\n it('should scroll when the button is clicked', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: true,\n });\n await elementUpdated(el);\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n leftButton.dispatchEvent(new Event('click', {}));\n\n const tabsEl = spTabsOverflows.querySelector('sp-tab') as Tab;\n const initialLeft = tabsEl.getBoundingClientRect().left;\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n const finalLeft = tabsEl.getBoundingClientRect().left;\n expect(finalLeft).to.be.lessThanOrEqual(initialLeft);\n });\n\n it('should fail properly if slot is not sp-tabs', async () => {\n const el = await fixture<TabsOverflow>(\n html`\n <sp-tabs-overflow>\n <div>Some div</div>\n </sp-tabs-overflow>\n `\n );\n\n await elementUpdated(el);\n const slot = el.shadowRoot.querySelector('slot');\n const slotContent = slot?.assignedElements() || '';\n expect(slotContent[0].toString()).to.not.contains('Tabs');\n });\n\n it('should automatically bring the selected tab into view', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: false,\n selected: 10,\n });\n await elementUpdated(el);\n\n // Grab the list of tabs.\n const tabsEl = el.querySelector('sp-tabs') as Tabs;\n\n // Grab the coordonates of the selected tab.\n const selectedTab = tabsEl.querySelector(\n `[role=\"tab\"][value=\"10\"]`\n ) as Tab;\n expect(selectedTab).to.exist;\n const selectedTabPosition = selectedTab.getBoundingClientRect();\n\n // Selected tab is in the viewport, offset left is greater than 0 and less than the width of the tabs.\n expect(selectedTabPosition.left).to.be.greaterThan(0);\n expect(selectedTabPosition.left).to.be.lessThan(tabsEl.clientWidth);\n\n // First tab is not in the viewport anymore, its offset left is less than 0.\n const firstTab = tabsEl.querySelector(`[role=\"tab\"][value=\"1\"]`) as Tab;\n const firstTabPosition = firstTab.getBoundingClientRect();\n expect(firstTabPosition.left).to.be.lessThan(0);\n });\n});\n"],
|
|
5
|
-
"mappings": ";AAWA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAIP,SAAS,gBAAgB,QAAQ,eAAe;AAChD;AAAA,EAEI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,cAAc;
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/scale-medium.js';\nimport '@spectrum-web-components/theme/theme-light.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab-panel.js';\nimport '@spectrum-web-components/tabs/sp-tabs-overflow.js';\nimport { Tab, Tabs, TabsOverflow } from '@spectrum-web-components/tabs';\nimport { ActionButton } from '@spectrum-web-components/action-button';\n\nimport { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport {\n ElementSize,\n ElementSizes,\n html,\n nothing,\n} from '@spectrum-web-components/base';\nimport { repeat } from 'lit/directives/repeat.js';\n\ntype OverflowProperties = {\n count: number;\n size: ElementSize;\n includeTabPanel: boolean;\n selected?: number;\n autoscroll?: boolean;\n labelPrev?: string;\n labelNext?: string;\n};\n\nconst renderTabsOverflow = async ({\n count,\n size,\n includeTabPanel,\n selected = 1,\n autoscroll = false,\n}: OverflowProperties): Promise<HTMLDivElement> => {\n const tabsContainer = await fixture<HTMLDivElement>(\n html`\n <div class=\"container\" style=\"width: 200px; height: 150px;\">\n <sp-tabs-overflow ?autoscroll=${autoscroll}>\n <sp-tabs size=${size} selected=${selected}>\n ${repeat(\n new Array(count),\n (item) => item,\n (_item, index) =>\n html`\n <sp-tab\n label=${`Tab Item ${index + 1}`}\n value=${index + 1}\n ></sp-tab>\n `\n )}\n ${includeTabPanel\n ? html`\n ${repeat(\n new Array(count),\n (item) => item,\n (_item, index) =>\n html`\n <sp-tab-panel value=${index + 1}>\n Content for Tab Item\n ${index + 1}\n </sp-tab-panel>\n `\n )}\n `\n : nothing}\n </sp-tabs>\n </sp-tabs-overflow>\n </div>\n `\n );\n await elementUpdated(tabsContainer);\n return tabsContainer;\n};\n\ndescribe('TabsOverflow', () => {\n it('loads default tabs-overflow accessibly', async () => {\n const el = await fixture<TabsOverflow>(\n html`\n <sp-tabs-overflow>\n <sp-tabs size=\"m\" selected=\"1\">\n <sp-tab label=\"Tab Item 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab Item 2\" value=\"2\"></sp-tab>\n <sp-tab-panel value=\"1\">Tab Content 1</sp-tab-panel>\n <sp-tab-panel value=\"2\">Tab Content 2</sp-tab-panel>\n </sp-tabs>\n </sp-tabs-overflow>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n\n it('show render left and right buttons in shadowDom', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: true,\n });\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n expect(rightButton).to.exist;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n expect(leftButton).to.exist;\n });\n\n it('reflect proper sp-tab size', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.M,\n includeTabPanel: true,\n });\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n\n expect(spTabsOverflows.getAttribute('size')).to.equal('m');\n });\n\n it('should scroll when the button is clicked', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: true,\n });\n await elementUpdated(el);\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n leftButton.dispatchEvent(new Event('click', {}));\n\n const tabsEl = spTabsOverflows.querySelector('sp-tab') as Tab;\n const initialLeft = tabsEl.getBoundingClientRect().left;\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n rightButton.dispatchEvent(new Event('click', {}));\n await elementUpdated(el);\n const finalLeft = tabsEl.getBoundingClientRect().left;\n expect(finalLeft).to.be.lessThanOrEqual(initialLeft);\n });\n\n it('should fail properly if slot is not sp-tabs', async () => {\n const el = await fixture<TabsOverflow>(\n html`\n <sp-tabs-overflow>\n <div>Some div</div>\n </sp-tabs-overflow>\n `\n );\n\n await elementUpdated(el);\n const slot = el.shadowRoot.querySelector('slot');\n const slotContent = slot?.assignedElements() || '';\n expect(slotContent[0].toString()).to.not.contains('Tabs');\n });\n\n it('should automatically bring the selected tab into view', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.L,\n includeTabPanel: false,\n selected: 10,\n });\n await elementUpdated(el);\n\n // Grab the list of tabs.\n const tabsEl = el.querySelector('sp-tabs') as Tabs;\n\n // Grab the coordonates of the selected tab.\n const selectedTab = tabsEl.querySelector(\n `[role=\"tab\"][value=\"10\"]`\n ) as Tab;\n expect(selectedTab).to.exist;\n const selectedTabPosition = selectedTab.getBoundingClientRect();\n\n // Selected tab is in the viewport, offset left is greater than 0 and less than the width of the tabs.\n expect(selectedTabPosition.left).to.be.greaterThan(0);\n expect(selectedTabPosition.left).to.be.lessThan(tabsEl.clientWidth);\n\n // First tab is not in the viewport anymore, its offset left is less than 0.\n const firstTab = tabsEl.querySelector(`[role=\"tab\"][value=\"1\"]`) as Tab;\n const firstTabPosition = firstTab.getBoundingClientRect();\n expect(firstTabPosition.left).to.be.lessThan(0);\n });\n\n it('prev and next buttons have default labels', async () => {\n const el = await renderTabsOverflow({\n count: 20,\n size: ElementSizes.M,\n includeTabPanel: true,\n });\n await elementUpdated(el);\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n expect(leftButton?.getAttribute('aria-label')).to.equal(\n 'Scroll to previous tabs'\n );\n expect(rightButton?.getAttribute('aria-label')).to.equal(\n 'Scroll to next tabs'\n );\n });\n\n it('prev and next buttons labels overwritten via attributes', async () => {\n const tabsContainer = await fixture<HTMLDivElement>(\n html`\n <div class=\"container\" style=\"width: 200px; height: 150px;\">\n <sp-tabs-overflow\n label-previous=\"custom label prev\"\n label-next=\"custom label next\"\n >\n <sp-tabs size=${ElementSizes.M} selected=${1}>\n ${repeat(\n new Array(20),\n (item) => item,\n (_item, index) =>\n html`\n <sp-tab\n label=${`Tab Item ${index + 1}`}\n value=${index + 1}\n ></sp-tab>\n `\n )}\n ${repeat(\n new Array(20),\n (item) => item,\n (_item, index) =>\n html`\n <sp-tab-panel value=${index + 1}>\n Content for Tab Item ${index + 1}\n </sp-tab-panel>\n `\n )}\n </sp-tabs>\n </sp-tabs-overflow>\n </div>\n `\n );\n await elementUpdated(tabsContainer);\n const el = tabsContainer;\n\n const spTabsOverflows: TabsOverflow = el.querySelector(\n 'sp-tabs-overflow'\n ) as TabsOverflow;\n const leftButton = spTabsOverflows.shadowRoot.querySelector(\n '.left-scroll'\n ) as ActionButton;\n const rightButton = spTabsOverflows.shadowRoot.querySelector(\n '.right-scroll'\n ) as ActionButton;\n\n expect(leftButton?.getAttribute('aria-label')).to.equal(\n 'custom label prev'\n );\n expect(rightButton?.getAttribute('aria-label')).to.equal(\n 'custom label next'\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|