@spectrum-web-components/tabs 0.9.0 → 0.9.2

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.
Files changed (74) hide show
  1. package/README.md +154 -36
  2. package/custom-elements.json +41 -13
  3. package/package.json +4 -3
  4. package/sp-tab-panel.dev.js +1 -0
  5. package/sp-tab-panel.dev.js.map +1 -1
  6. package/sp-tab-panel.js +1 -1
  7. package/sp-tab-panel.js.map +2 -2
  8. package/sp-tab.dev.js +1 -0
  9. package/sp-tab.dev.js.map +1 -1
  10. package/sp-tab.js +1 -1
  11. package/sp-tab.js.map +2 -2
  12. package/sp-tabs.dev.js +1 -0
  13. package/sp-tabs.dev.js.map +1 -1
  14. package/sp-tabs.js +1 -1
  15. package/sp-tabs.js.map +2 -2
  16. package/src/Tab.dev.js +18 -7
  17. package/src/Tab.dev.js.map +1 -1
  18. package/src/Tab.js +5 -5
  19. package/src/Tab.js.map +2 -2
  20. package/src/TabPanel.dev.js +1 -0
  21. package/src/TabPanel.dev.js.map +1 -1
  22. package/src/TabPanel.js +2 -2
  23. package/src/TabPanel.js.map +2 -2
  24. package/src/Tabs.d.ts +9 -2
  25. package/src/Tabs.dev.js +52 -12
  26. package/src/Tabs.dev.js.map +2 -2
  27. package/src/Tabs.js +4 -4
  28. package/src/Tabs.js.map +3 -3
  29. package/src/index.dev.js +1 -0
  30. package/src/index.dev.js.map +1 -1
  31. package/src/index.js +1 -1
  32. package/src/index.js.map +1 -1
  33. package/src/spectrum-tab.css.dev.js +1 -0
  34. package/src/spectrum-tab.css.dev.js.map +1 -1
  35. package/src/spectrum-tab.css.js +1 -1
  36. package/src/spectrum-tab.css.js.map +2 -2
  37. package/src/spectrum-tabs.css.dev.js +1 -0
  38. package/src/spectrum-tabs.css.dev.js.map +1 -1
  39. package/src/spectrum-tabs.css.js +1 -1
  40. package/src/spectrum-tabs.css.js.map +2 -2
  41. package/src/tab-panel.css.dev.js +1 -0
  42. package/src/tab-panel.css.dev.js.map +1 -1
  43. package/src/tab-panel.css.js +1 -1
  44. package/src/tab-panel.css.js.map +2 -2
  45. package/src/tab.css.dev.js +1 -0
  46. package/src/tab.css.dev.js.map +1 -1
  47. package/src/tab.css.js +1 -1
  48. package/src/tab.css.js.map +2 -2
  49. package/src/tabs.css.dev.js +2 -1
  50. package/src/tabs.css.dev.js.map +2 -2
  51. package/src/tabs.css.js +2 -2
  52. package/src/tabs.css.js.map +3 -3
  53. package/stories/tabs-horizontal-sizes.stories.js +77 -7
  54. package/stories/tabs-horizontal-sizes.stories.js.map +1 -1
  55. package/stories/tabs-vertical-right-sizes.stories.js +74 -7
  56. package/stories/tabs-vertical-right-sizes.stories.js.map +1 -1
  57. package/stories/tabs-vertical-sizes.stories.js +74 -7
  58. package/stories/tabs-vertical-sizes.stories.js.map +1 -1
  59. package/stories/tabs.stories.js +279 -75
  60. package/stories/tabs.stories.js.map +2 -2
  61. package/test/benchmark/basic-test.js +6 -1
  62. package/test/benchmark/basic-test.js.map +1 -1
  63. package/test/tab.test.js +37 -4
  64. package/test/tab.test.js.map +1 -1
  65. package/test/tabs-horizontal-sizes.test-vrt.js +4 -1
  66. package/test/tabs-horizontal-sizes.test-vrt.js.map +1 -1
  67. package/test/tabs-vertical-right-sizes.test-vrt.js +4 -1
  68. package/test/tabs-vertical-right-sizes.test-vrt.js.map +1 -1
  69. package/test/tabs-vertical-sizes.test-vrt.js +4 -1
  70. package/test/tabs-vertical-sizes.test-vrt.js.map +1 -1
  71. package/test/tabs.test-vrt.js +4 -1
  72. package/test/tabs.test-vrt.js.map +1 -1
  73. package/test/tabs.test.js +428 -17
  74. package/test/tabs.test.js.map +1 -1
package/src/TabPanel.js CHANGED
@@ -1,4 +1,4 @@
1
- var u=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var d=(p,e,i,r)=>{for(var t=r>1?void 0:r?n(e,i):e,s=p.length-1,o;s>=0;s--)(o=p[s])&&(t=(r?o(e,i,t):o(t))||t);return r&&t&&u(e,i,t),t};import{html as c,SpectrumElement as h}from"@spectrum-web-components/base";import{property as a}from"@spectrum-web-components/base/src/decorators.js";import m from"./tab-panel.css.js";const l=class extends h{constructor(){super(...arguments);this.selected=!1;this.value=""}render(){return c`
1
+ "use strict";var u=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var d=(p,e,r,i)=>{for(var t=i>1?void 0:i?c(e,r):e,s=p.length-1,o;s>=0;s--)(o=p[s])&&(t=(i?o(e,r,t):o(t))||t);return i&&t&&u(e,r,t),t};import{html as h,SpectrumElement as n}from"@spectrum-web-components/base";import{property as a}from"@spectrum-web-components/base/src/decorators.js";import m from"./tab-panel.css.js";const l=class extends n{constructor(){super(...arguments);this.selected=!1;this.value=""}render(){return h`
2
2
  <slot></slot>
3
- `}firstUpdated(){this.slot="tab-panel",this.setAttribute("role","tabpanel"),this.tabIndex=0,this.hasAttribute("id")||(this.id=`sp-tab-panel-${l.instanceCount++}`)}updated(e){e.has("selected")&&(this.selected?(this.removeAttribute("aria-hidden"),this.tabIndex=0):(this.setAttribute("aria-hidden","true"),this.tabIndex=-1))}};export let TabPanel=l;TabPanel.styles=[m],TabPanel.instanceCount=0,d([a({type:Boolean,reflect:!0})],TabPanel.prototype,"selected",2),d([a({type:String,reflect:!0})],TabPanel.prototype,"value",2);
3
+ `}firstUpdated(){this.slot="tab-panel",this.setAttribute("role","tabpanel"),this.tabIndex=0,this.hasAttribute("id")||(this.id=`sp-tab-panel-${l.instanceCount++}`)}updated(r){r.has("selected")&&(this.selected?(this.removeAttribute("aria-hidden"),this.tabIndex=0):(this.setAttribute("aria-hidden","true"),this.tabIndex=-1))}};export let TabPanel=l;TabPanel.styles=[m],TabPanel.instanceCount=0,d([a({type:Boolean,reflect:!0})],TabPanel.prototype,"selected",2),d([a({type:String,reflect:!0})],TabPanel.prototype,"value",2);
4
4
  //# sourceMappingURL=TabPanel.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["TabPanel.ts"],
4
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*/\n\nimport {\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\n\nimport panelStyles from './tab-panel.css.js';\n\n/**\n * @element sp-tab-panel\n *\n * @slot - content of the Tab Panel\n */\nexport class TabPanel extends SpectrumElement {\n static override styles = [panelStyles];\n\n /**\n * @private\n */\n static instanceCount = 0;\n\n @property({ type: Boolean, reflect: true })\n public selected = false;\n\n @property({ type: String, reflect: true })\n public value = '';\n\n protected override render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n\n protected override firstUpdated(): void {\n this.slot = 'tab-panel';\n this.setAttribute('role', 'tabpanel');\n this.tabIndex = 0;\n if (!this.hasAttribute('id')) {\n this.id = `sp-tab-panel-${TabPanel.instanceCount++}`;\n }\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n if (changes.has('selected')) {\n if (this.selected) {\n this.removeAttribute('aria-hidden');\n this.tabIndex = 0;\n } else {\n this.setAttribute('aria-hidden', 'true');\n this.tabIndex = -1;\n }\n }\n }\n}\n"],
5
- "mappings": "wMAYA,0EAMA,2EAEA,kCAOO,qBAAuB,EAAgB,CAAvC,kCASI,cAAW,GAGX,WAAQ,GAEI,QAAyB,CACxC,MAAO;AAAA;AAAA,SAGX,CAEmB,cAAqB,CACpC,KAAK,KAAO,YACZ,KAAK,aAAa,OAAQ,UAAU,EACpC,KAAK,SAAW,EACX,KAAK,aAAa,IAAI,GACvB,MAAK,GAAK,gBAAgB,EAAS,kBAE3C,CAEmB,QAAQ,EAAqC,CAC5D,AAAI,EAAQ,IAAI,UAAU,GACtB,CAAI,KAAK,SACL,MAAK,gBAAgB,aAAa,EAClC,KAAK,SAAW,GAEhB,MAAK,aAAa,cAAe,MAAM,EACvC,KAAK,SAAW,IAG5B,CACJ,EAxCO,sBACa,AADb,SACa,OAAS,CAAC,CAAW,EAK9B,AANJ,SAMI,cAAgB,EAGhB,GADP,AAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GACnC,AATJ,SASI,wBAGA,GADP,AAAC,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAClC,AAZJ,SAYI",
6
- "names": []
5
+ "mappings": "qNAYA,OACI,QAAAA,EAEA,mBAAAC,MAEG,gCACP,OAAS,YAAAC,MAAgB,kDAEzB,OAAOC,MAAiB,qBAOjB,MAAMC,EAAN,cAAuBH,CAAgB,CAAvC,kCASH,KAAO,SAAW,GAGlB,KAAO,MAAQ,GAEI,QAAyB,CACxC,OAAOD;AAAA;AAAA,SAGX,CAEmB,cAAqB,CACpC,KAAK,KAAO,YACZ,KAAK,aAAa,OAAQ,UAAU,EACpC,KAAK,SAAW,EACX,KAAK,aAAa,IAAI,IACvB,KAAK,GAAK,gBAAgBI,EAAS,kBAE3C,CAEmB,QAAQC,EAAqC,CACxDA,EAAQ,IAAI,UAAU,IAClB,KAAK,UACL,KAAK,gBAAgB,aAAa,EAClC,KAAK,SAAW,IAEhB,KAAK,aAAa,cAAe,MAAM,EACvC,KAAK,SAAW,IAG5B,CACJ,EAxCO,WAAM,SAAND,EAAM,SACO,OAAS,CAACD,CAAW,EAD5B,SAMF,cAAgB,EAGhBG,EAAA,CADNJ,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GARjC,SASF,wBAGAI,EAAA,CADNJ,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAXhC,SAYF",
6
+ "names": ["html", "SpectrumElement", "property", "panelStyles", "_TabPanel", "changes", "__decorateClass"]
7
7
  }
package/src/Tabs.d.ts CHANGED
@@ -11,8 +11,6 @@ declare const Tabs_base: typeof Focusable & {
11
11
  *
12
12
  * @slot - Tab elements to manage as a group
13
13
  * @slot tab-panel - Tab Panel elements related to the listed Tab elements
14
- * @attr {Boolean} quiet - The tabs border is a lot smaller
15
- * @attr {Boolean} compact - The collection of tabs take up less space
16
14
  * @csspart tablist - Container element for the slotted sp-tab elements
17
15
  *
18
16
  * @fires change - The selected Tab child has changed.
@@ -28,9 +26,17 @@ export declare class Tabs extends Tabs_base {
28
26
  * https://w3c.github.io/aria-practices/#kbd_selection_follows_focus
29
27
  */
30
28
  auto: boolean;
29
+ /**
30
+ * The tab items are displayed closer together.
31
+ */
32
+ compact: boolean;
31
33
  direction: 'vertical' | 'vertical-right' | 'horizontal';
32
34
  emphasized: boolean;
33
35
  label: string;
36
+ /**
37
+ * The tab list is displayed without a border.
38
+ */
39
+ quiet: boolean;
34
40
  selectionIndicatorStyle: string;
35
41
  shouldAnimate: boolean;
36
42
  private tabList;
@@ -40,6 +46,7 @@ export declare class Tabs extends Tabs_base {
40
46
  private set tabs(value);
41
47
  private get tabs();
42
48
  private _tabs;
49
+ constructor();
43
50
  rovingTabindexController: RovingTabindexController<Tab>;
44
51
  /**
45
52
  * @private
package/src/Tabs.dev.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -18,17 +19,20 @@ import {
18
19
  query
19
20
  } from "@spectrum-web-components/base/src/decorators.js";
20
21
  import { ifDefined } from "@spectrum-web-components/base/src/directives.js";
22
+ import { IntersectionController } from "@lit-labs/observers/intersection_controller.js";
21
23
  import { Focusable } from "@spectrum-web-components/shared";
22
24
  import { RovingTabindexController } from "@spectrum-web-components/reactive-controllers/src/RovingTabindex.js";
23
25
  import tabStyles from "./tabs.css.js";
24
26
  const noSelectionStyle = "transform: translateX(0px) scaleX(0) scaleY(0)";
25
27
  export class Tabs extends SizedMixin(Focusable) {
26
28
  constructor() {
27
- super(...arguments);
29
+ super();
28
30
  this.auto = false;
31
+ this.compact = false;
29
32
  this.direction = "horizontal";
30
33
  this.emphasized = false;
31
34
  this.label = "";
35
+ this.quiet = false;
32
36
  this.selectionIndicatorStyle = noSelectionStyle;
33
37
  this.shouldAnimate = false;
34
38
  this._selected = "";
@@ -82,7 +86,9 @@ export class Tabs extends SizedMixin(Focusable) {
82
86
  element.removeAttribute("selected");
83
87
  });
84
88
  if (this.selected) {
85
- const currentChecked = this.tabs.find((el) => el.value === this.selected);
89
+ const currentChecked = this.tabs.find(
90
+ (el) => el.value === this.selected
91
+ );
86
92
  if (currentChecked) {
87
93
  currentChecked.selected = true;
88
94
  } else {
@@ -122,6 +128,16 @@ export class Tabs extends SizedMixin(Focusable) {
122
128
  this.tabChangeResolver = function() {
123
129
  return;
124
130
  };
131
+ new IntersectionController(this, {
132
+ config: {
133
+ root: null,
134
+ rootMargin: "0px",
135
+ threshold: [0, 1]
136
+ },
137
+ callback: () => {
138
+ this.updateSelectionIndicator();
139
+ }
140
+ });
125
141
  }
126
142
  static get styles() {
127
143
  return [tabStyles];
@@ -188,7 +204,9 @@ export class Tabs extends SizedMixin(Focusable) {
188
204
  <slot @slotchange=${this.onSlotChange}></slot>
189
205
  <div
190
206
  id="selection-indicator"
191
- class=${ifDefined(this.shouldAnimate ? void 0 : "first-position")}
207
+ class=${ifDefined(
208
+ this.shouldAnimate ? void 0 : "first-position"
209
+ )}
192
210
  style=${this.selectionIndicatorStyle}
193
211
  role="presentation"
194
212
  ></div>
@@ -198,7 +216,9 @@ export class Tabs extends SizedMixin(Focusable) {
198
216
  }
199
217
  willUpdate(changes) {
200
218
  if (!this.hasUpdated) {
201
- const selectedChild = this.querySelector(":scope > [selected]");
219
+ const selectedChild = this.querySelector(
220
+ ":scope > [selected]"
221
+ );
202
222
  if (selectedChild) {
203
223
  this.selectTarget(selectedChild);
204
224
  }
@@ -206,11 +226,15 @@ export class Tabs extends SizedMixin(Focusable) {
206
226
  super.updated(changes);
207
227
  if (changes.has("selected")) {
208
228
  if (changes.get("selected")) {
209
- const previous = this.querySelector(`[role="tabpanel"][value="${changes.get("selected")}"]`);
229
+ const previous = this.querySelector(
230
+ `[role="tabpanel"][value="${changes.get("selected")}"]`
231
+ );
210
232
  if (previous)
211
233
  previous.selected = false;
212
234
  }
213
- const next = this.querySelector(`[role="tabpanel"][value="${this.selected}"]`);
235
+ const next = this.querySelector(
236
+ `[role="tabpanel"][value="${this.selected}"]`
237
+ );
214
238
  if (next)
215
239
  next.selected = true;
216
240
  }
@@ -240,9 +264,11 @@ export class Tabs extends SizedMixin(Focusable) {
240
264
  if (value) {
241
265
  const selected = this.selected;
242
266
  this.selected = value;
243
- const applyDefault = this.dispatchEvent(new Event("change", {
244
- cancelable: true
245
- }));
267
+ const applyDefault = this.dispatchEvent(
268
+ new Event("change", {
269
+ cancelable: true
270
+ })
271
+ );
246
272
  if (!applyDefault) {
247
273
  this.selected = selected;
248
274
  }
@@ -254,7 +280,9 @@ export class Tabs extends SizedMixin(Focusable) {
254
280
  }
255
281
  shouldUpdateCheckedState() {
256
282
  this.tabChangeResolver();
257
- this.tabChangePromise = new Promise((res) => this.tabChangeResolver = res);
283
+ this.tabChangePromise = new Promise(
284
+ (res) => this.tabChangeResolver = res
285
+ );
258
286
  setTimeout(this.updateCheckedState);
259
287
  }
260
288
  async getUpdateComplete() {
@@ -266,13 +294,19 @@ export class Tabs extends SizedMixin(Focusable) {
266
294
  super.connectedCallback();
267
295
  window.addEventListener("resize", this.updateSelectionIndicator);
268
296
  if ("fonts" in document) {
269
- document.fonts.addEventListener("loadingdone", this.updateSelectionIndicator);
297
+ document.fonts.addEventListener(
298
+ "loadingdone",
299
+ this.updateSelectionIndicator
300
+ );
270
301
  }
271
302
  }
272
303
  disconnectedCallback() {
273
304
  window.removeEventListener("resize", this.updateSelectionIndicator);
274
305
  if ("fonts" in document) {
275
- document.fonts.removeEventListener("loadingdone", this.updateSelectionIndicator);
306
+ document.fonts.removeEventListener(
307
+ "loadingdone",
308
+ this.updateSelectionIndicator
309
+ );
276
310
  }
277
311
  super.disconnectedCallback();
278
312
  }
@@ -280,6 +314,9 @@ export class Tabs extends SizedMixin(Focusable) {
280
314
  __decorateClass([
281
315
  property({ type: Boolean })
282
316
  ], Tabs.prototype, "auto", 2);
317
+ __decorateClass([
318
+ property({ type: Boolean, reflect: true })
319
+ ], Tabs.prototype, "compact", 2);
283
320
  __decorateClass([
284
321
  property({ reflect: true })
285
322
  ], Tabs.prototype, "direction", 2);
@@ -289,6 +326,9 @@ __decorateClass([
289
326
  __decorateClass([
290
327
  property()
291
328
  ], Tabs.prototype, "label", 2);
329
+ __decorateClass([
330
+ property({ type: Boolean, reflect: true })
331
+ ], Tabs.prototype, "quiet", 2);
292
332
  __decorateClass([
293
333
  property({ attribute: false })
294
334
  ], Tabs.prototype, "selectionIndicatorStyle", 2);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Tabs.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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { Tab } from './Tab.dev.js'\nimport { Focusable } from '@spectrum-web-components/shared';\nimport { RovingTabindexController } from '@spectrum-web-components/reactive-controllers/src/RovingTabindex.js';\n\nimport tabStyles from './tabs.css.js';\nimport { TabPanel } from './TabPanel.dev.js'\n\nconst noSelectionStyle = 'transform: translateX(0px) scaleX(0) scaleY(0)';\n\n/**\n * @element sp-tabs\n *\n * @slot - Tab elements to manage as a group\n * @slot tab-panel - Tab Panel elements related to the listed Tab elements\n * @attr {Boolean} quiet - The tabs border is a lot smaller\n * @attr {Boolean} compact - The collection of tabs take up less space\n * @csspart tablist - Container element for the slotted sp-tab elements\n *\n * @fires change - The selected Tab child has changed.\n */\nexport class Tabs extends SizedMixin(Focusable) {\n public static override get styles(): CSSResultArray {\n return [tabStyles];\n }\n\n /**\n * Whether to activate a tab on keyboard focus or not.\n *\n * By default a tab is activated via a \"click\" interaction. This is specifically intended for when\n * tab content cannot be displayed instantly, e.g. not all of the DOM content is available, etc.\n * To learn more about \"Deciding When to Make Selection Automatically Follow Focus\", visit:\n * https://w3c.github.io/aria-practices/#kbd_selection_follows_focus\n */\n @property({ type: Boolean })\n public auto = false;\n\n @property({ reflect: true })\n public direction: 'vertical' | 'vertical-right' | 'horizontal' =\n 'horizontal';\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property()\n public label = '';\n\n @property({ attribute: false })\n public selectionIndicatorStyle = noSelectionStyle;\n\n @property({ attribute: false })\n public shouldAnimate = false;\n\n @query('#list')\n private tabList!: HTMLDivElement;\n\n @property({ reflect: true })\n public get selected(): string {\n return this._selected;\n }\n\n public set selected(value: string) {\n const oldValue = this.selected;\n\n if (value === oldValue) {\n return;\n }\n\n this._selected = value;\n this.shouldUpdateCheckedState();\n this.requestUpdate('selected', oldValue);\n }\n\n private _selected = '';\n\n private set tabs(tabs: Tab[]) {\n if (tabs === this.tabs) return;\n this._tabs = tabs;\n this.rovingTabindexController.clearElementCache();\n }\n\n private get tabs(): Tab[] {\n return this._tabs;\n }\n\n private _tabs: Tab[] = [];\n\n rovingTabindexController = new RovingTabindexController<Tab>(this, {\n focusInIndex: (elements) => {\n let focusInIndex = 0;\n const firstFocusableElement = elements.find((el, index) => {\n const focusInElement = this.selected\n ? !el.disabled && el.value === this.selected\n : !el.disabled;\n focusInIndex = index;\n return focusInElement;\n });\n return firstFocusableElement ? focusInIndex : -1;\n },\n direction: () =>\n this.direction === 'horizontal' ? 'horizontal' : 'vertical',\n elementEnterAction: (el) => {\n if (!this.auto) return;\n\n this.shouldAnimate = true;\n this.selectTarget(el);\n },\n elements: () => this.tabs,\n isFocusableElement: (el) => !el.disabled,\n listenerScope: () => this.tabList,\n });\n\n /**\n * @private\n */\n public override get focusElement(): Tab | this {\n return this.rovingTabindexController.focusInElement || this;\n }\n\n protected override manageAutoFocus(): void {\n const tabs = [...this.children] as Tab[];\n const tabUpdateCompletes = tabs.map((tab) => {\n if (typeof tab.updateComplete !== 'undefined') {\n return tab.updateComplete;\n }\n return Promise.resolve(true);\n });\n Promise.all(tabUpdateCompletes).then(() => super.manageAutoFocus());\n }\n\n protected managePanels({\n target,\n }: Event & { target: HTMLSlotElement }): void {\n const panels = target.assignedElements() as TabPanel[];\n panels.map((panel) => {\n const { value, id } = panel;\n const tab = this.querySelector(`[role=\"tab\"][value=\"${value}\"]`);\n if (tab) {\n tab.setAttribute('aria-controls', id);\n panel.setAttribute('aria-labelledby', tab.id);\n }\n panel.selected = value === this.selected;\n });\n }\n\n protected override render(): TemplateResult {\n return html`\n <div\n aria-label=${ifDefined(this.label ? this.label : undefined)}\n @click=${this.onClick}\n @keydown=${this.onKeyDown}\n @sp-tab-contentchange=${this.updateSelectionIndicator}\n id=\"list\"\n role=\"tablist\"\n part=\"tablist\"\n >\n <slot @slotchange=${this.onSlotChange}></slot>\n <div\n id=\"selection-indicator\"\n class=${ifDefined(\n this.shouldAnimate ? undefined : 'first-position'\n )}\n style=${this.selectionIndicatorStyle}\n role=\"presentation\"\n ></div>\n </div>\n <slot name=\"tab-panel\" @slotchange=${this.managePanels}></slot>\n `;\n }\n\n protected override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n const selectedChild = this.querySelector(\n ':scope > [selected]'\n ) as Tab;\n if (selectedChild) {\n this.selectTarget(selectedChild);\n }\n }\n\n super.updated(changes);\n if (changes.has('selected')) {\n if (changes.get('selected')) {\n const previous = this.querySelector(\n `[role=\"tabpanel\"][value=\"${changes.get('selected')}\"]`\n ) as TabPanel;\n if (previous) previous.selected = false;\n }\n const next = this.querySelector(\n `[role=\"tabpanel\"][value=\"${this.selected}\"]`\n ) as TabPanel;\n if (next) next.selected = true;\n }\n if (changes.has('direction')) {\n if (this.direction === 'horizontal') {\n this.removeAttribute('aria-orientation');\n } else {\n this.setAttribute('aria-orientation', 'vertical');\n }\n }\n if (changes.has('dir')) {\n this.updateSelectionIndicator();\n }\n if (changes.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n if (\n !this.shouldAnimate &&\n typeof changes.get('shouldAnimate') !== 'undefined'\n ) {\n this.shouldAnimate = true;\n }\n }\n\n private onClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n const target = event\n .composedPath()\n .find((el) => (el as Tab).parentElement === this) as Tab;\n if (!target || target.disabled) {\n return;\n }\n this.shouldAnimate = true;\n this.selectTarget(target);\n };\n\n private onKeyDown = (event: KeyboardEvent): void => {\n if (event.code === 'Enter' || event.code === 'Space') {\n event.preventDefault();\n const target = event.target as HTMLElement;\n if (target) {\n this.selectTarget(target);\n }\n }\n };\n\n private selectTarget(target: HTMLElement): void {\n const value = target.getAttribute('value');\n if (value) {\n const selected = this.selected;\n this.selected = value;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n })\n );\n if (!applyDefault) {\n this.selected = selected;\n }\n }\n }\n\n private onSlotChange(): void {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n this.shouldUpdateCheckedState();\n }\n\n private shouldUpdateCheckedState(): void {\n this.tabChangeResolver();\n this.tabChangePromise = new Promise(\n (res) => (this.tabChangeResolver = res)\n );\n setTimeout(this.updateCheckedState);\n }\n\n private updateCheckedState = (): void => {\n if (!this.tabs.length) {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n }\n this.tabs.forEach((element) => {\n element.removeAttribute('selected');\n });\n\n if (this.selected) {\n const currentChecked = this.tabs.find(\n (el) => el.value === this.selected\n );\n\n if (currentChecked) {\n currentChecked.selected = true;\n } else {\n this.selected = '';\n }\n } else {\n const firstTab = this.tabs[0];\n if (firstTab) {\n firstTab.setAttribute('tabindex', '0');\n }\n }\n\n this.updateSelectionIndicator();\n this.tabChangeResolver();\n };\n\n private updateSelectionIndicator = async (): Promise<void> => {\n const selectedElement = this.tabs.find((el) => el.selected);\n if (!selectedElement) {\n this.selectionIndicatorStyle = noSelectionStyle;\n return;\n }\n await Promise.all([\n selectedElement.updateComplete,\n document.fonts ? document.fonts.ready : Promise.resolve(),\n ]);\n const tabBoundingClientRect = selectedElement.getBoundingClientRect();\n\n if (this.direction === 'horizontal') {\n const width = tabBoundingClientRect.width;\n const offset = selectedElement.offsetLeft;\n\n this.selectionIndicatorStyle = `transform: translateX(${offset}px) scaleX(${width});`;\n } else {\n const height = tabBoundingClientRect.height;\n const offset = selectedElement.offsetTop;\n\n this.selectionIndicatorStyle = `transform: translateY(${offset}px) scaleY(${height});`;\n }\n };\n\n private tabChangePromise = Promise.resolve();\n private tabChangeResolver: () => void = function () {\n return;\n };\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.tabChangePromise;\n return complete;\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n addEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.addEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n }\n\n public override disconnectedCallback(): void {\n window.removeEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n removeEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.removeEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n super.disconnectedCallback();\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAYA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AAEA;AAGA,MAAM,mBAAmB;AAalB,aAAM,aAAa,WAAW,SAAS,EAAE;AAAA,EAAzC;AAAA;AAcI,gBAAO;AAGP,qBACH;AAGG,sBAAa;AAGb,iBAAQ;AAGR,mCAA0B;AAG1B,yBAAgB;AAsBf,qBAAY;AAYZ,iBAAe,CAAC;AAExB,oCAA2B,IAAI,yBAA8B,MAAM;AAAA,MAC/D,cAAc,CAAC,aAAa;AACxB,YAAI,eAAe;AACnB,cAAM,wBAAwB,SAAS,KAAK,CAAC,IAAI,UAAU;AACvD,gBAAM,iBAAiB,KAAK,WACtB,CAAC,GAAG,YAAY,GAAG,UAAU,KAAK,WAClC,CAAC,GAAG;AACV,yBAAe;AACf,iBAAO;AAAA,QACX,CAAC;AACD,eAAO,wBAAwB,eAAe;AAAA,MAClD;AAAA,MACA,WAAW,MACP,KAAK,cAAc,eAAe,eAAe;AAAA,MACrD,oBAAoB,CAAC,OAAO;AACxB,YAAI,CAAC,KAAK;AAAM;AAEhB,aAAK,gBAAgB;AACrB,aAAK,aAAa,EAAE;AAAA,MACxB;AAAA,MACA,UAAU,MAAM,KAAK;AAAA,MACrB,oBAAoB,CAAC,OAAO,CAAC,GAAG;AAAA,MAChC,eAAe,MAAM,KAAK;AAAA,IAC9B,CAAC;AA4GO,mBAAU,CAAC,UAAuB;AACtC,UAAI,KAAK,UAAU;AACf;AAAA,MACJ;AACA,YAAM,SAAS,MACV,aAAa,EACb,KAAK,CAAC,OAAQ,GAAW,kBAAkB,IAAI;AACpD,UAAI,CAAC,UAAU,OAAO,UAAU;AAC5B;AAAA,MACJ;AACA,WAAK,gBAAgB;AACrB,WAAK,aAAa,MAAM;AAAA,IAC5B;AAEQ,qBAAY,CAAC,UAA+B;AAChD,UAAI,MAAM,SAAS,WAAW,MAAM,SAAS,SAAS;AAClD,cAAM,eAAe;AACrB,cAAM,SAAS,MAAM;AACrB,YAAI,QAAQ;AACR,eAAK,aAAa,MAAM;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AA+BQ,8BAAqB,MAAY;AACrC,UAAI,CAAC,KAAK,KAAK,QAAQ;AACnB,aAAK,OAAO,CAAC,GAAG,KAAK,iBAAiB,cAAc,CAAC;AAAA,MACzD;AACA,WAAK,KAAK,QAAQ,CAAC,YAAY;AAC3B,gBAAQ,gBAAgB,UAAU;AAAA,MACtC,CAAC;AAED,UAAI,KAAK,UAAU;AACf,cAAM,iBAAiB,KAAK,KAAK,KAC7B,CAAC,OAAO,GAAG,UAAU,KAAK,QAC9B;AAEA,YAAI,gBAAgB;AAChB,yBAAe,WAAW;AAAA,QAC9B,OAAO;AACH,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ,OAAO;AACH,cAAM,WAAW,KAAK,KAAK;AAC3B,YAAI,UAAU;AACV,mBAAS,aAAa,YAAY,GAAG;AAAA,QACzC;AAAA,MACJ;AAEA,WAAK,yBAAyB;AAC9B,WAAK,kBAAkB;AAAA,IAC3B;AAEQ,oCAA2B,YAA2B;AAC1D,YAAM,kBAAkB,KAAK,KAAK,KAAK,CAAC,OAAO,GAAG,QAAQ;AAC1D,UAAI,CAAC,iBAAiB;AAClB,aAAK,0BAA0B;AAC/B;AAAA,MACJ;AACA,YAAM,QAAQ,IAAI;AAAA,QACd,gBAAgB;AAAA,QAChB,SAAS,QAAQ,SAAS,MAAM,QAAQ,QAAQ,QAAQ;AAAA,MAC5D,CAAC;AACD,YAAM,wBAAwB,gBAAgB,sBAAsB;AAEpE,UAAI,KAAK,cAAc,cAAc;AACjC,cAAM,QAAQ,sBAAsB;AACpC,cAAM,SAAS,gBAAgB;AAE/B,aAAK,0BAA0B,yBAAyB,oBAAoB;AAAA,MAChF,OAAO;AACH,cAAM,SAAS,sBAAsB;AACrC,cAAM,SAAS,gBAAgB;AAE/B,aAAK,0BAA0B,yBAAyB,oBAAoB;AAAA,MAChF;AAAA,IACJ;AAEQ,4BAAmB,QAAQ,QAAQ;AACnC,6BAAgC,WAAY;AAChD;AAAA,IACJ;AAAA;AAAA,aAlT2B,SAAyB;AAChD,WAAO,CAAC,SAAS;AAAA,EACrB;AAAA,MAiCW,WAAmB;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,MAEW,SAAS,OAAe;AAC/B,UAAM,WAAW,KAAK;AAEtB,QAAI,UAAU,UAAU;AACpB;AAAA,IACJ;AAEA,SAAK,YAAY;AACjB,SAAK,yBAAyB;AAC9B,SAAK,cAAc,YAAY,QAAQ;AAAA,EAC3C;AAAA,MAIY,KAAK,MAAa;AAC1B,QAAI,SAAS,KAAK;AAAM;AACxB,SAAK,QAAQ;AACb,SAAK,yBAAyB,kBAAkB;AAAA,EACpD;AAAA,MAEY,OAAc;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA,MAgCoB,eAA2B;AAC3C,WAAO,KAAK,yBAAyB,kBAAkB;AAAA,EAC3D;AAAA,EAEmB,kBAAwB;AACvC,UAAM,OAAO,CAAC,GAAG,KAAK,QAAQ;AAC9B,UAAM,qBAAqB,KAAK,IAAI,CAAC,QAAQ;AACzC,UAAI,OAAO,IAAI,mBAAmB,aAAa;AAC3C,eAAO,IAAI;AAAA,MACf;AACA,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC/B,CAAC;AACD,YAAQ,IAAI,kBAAkB,EAAE,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAAA,EACtE;AAAA,EAEU,aAAa;AAAA,IACnB;AAAA,KAC0C;AAC1C,UAAM,SAAS,OAAO,iBAAiB;AACvC,WAAO,IAAI,CAAC,UAAU;AAClB,YAAM,EAAE,OAAO,OAAO;AACtB,YAAM,MAAM,KAAK,cAAc,uBAAuB,SAAS;AAC/D,UAAI,KAAK;AACL,YAAI,aAAa,iBAAiB,EAAE;AACpC,cAAM,aAAa,mBAAmB,IAAI,EAAE;AAAA,MAChD;AACA,YAAM,WAAW,UAAU,KAAK;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EAEmB,SAAyB;AACxC,WAAO;AAAA;AAAA,6BAEc,UAAU,KAAK,QAAQ,KAAK,QAAQ,MAAS;AAAA,yBACjD,KAAK;AAAA,2BACH,KAAK;AAAA,wCACQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,oCAKT,KAAK;AAAA;AAAA;AAAA,4BAGb,UACJ,KAAK,gBAAgB,SAAY,gBACrC;AAAA,4BACQ,KAAK;AAAA;AAAA;AAAA;AAAA,iDAIgB,KAAK;AAAA;AAAA,EAElD;AAAA,EAEmB,WAAW,SAA+B;AACzD,QAAI,CAAC,KAAK,YAAY;AAClB,YAAM,gBAAgB,KAAK,cACvB,qBACJ;AACA,UAAI,eAAe;AACf,aAAK,aAAa,aAAa;AAAA,MACnC;AAAA,IACJ;AAEA,UAAM,QAAQ,OAAO;AACrB,QAAI,QAAQ,IAAI,UAAU,GAAG;AACzB,UAAI,QAAQ,IAAI,UAAU,GAAG;AACzB,cAAM,WAAW,KAAK,cAClB,4BAA4B,QAAQ,IAAI,UAAU,KACtD;AACA,YAAI;AAAU,mBAAS,WAAW;AAAA,MACtC;AACA,YAAM,OAAO,KAAK,cACd,4BAA4B,KAAK,YACrC;AACA,UAAI;AAAM,aAAK,WAAW;AAAA,IAC9B;AACA,QAAI,QAAQ,IAAI,WAAW,GAAG;AAC1B,UAAI,KAAK,cAAc,cAAc;AACjC,aAAK,gBAAgB,kBAAkB;AAAA,MAC3C,OAAO;AACH,aAAK,aAAa,oBAAoB,UAAU;AAAA,MACpD;AAAA,IACJ;AACA,QAAI,QAAQ,IAAI,KAAK,GAAG;AACpB,WAAK,yBAAyB;AAAA,IAClC;AACA,QAAI,QAAQ,IAAI,UAAU,GAAG;AACzB,UAAI,KAAK,UAAU;AACf,aAAK,aAAa,iBAAiB,MAAM;AAAA,MAC7C,OAAO;AACH,aAAK,gBAAgB,eAAe;AAAA,MACxC;AAAA,IACJ;AACA,QACI,CAAC,KAAK,iBACN,OAAO,QAAQ,IAAI,eAAe,MAAM,aAC1C;AACE,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA,EA0BQ,aAAa,QAA2B;AAC5C,UAAM,QAAQ,OAAO,aAAa,OAAO;AACzC,QAAI,OAAO;AACP,YAAM,WAAW,KAAK;AACtB,WAAK,WAAW;AAChB,YAAM,eAAe,KAAK,cACtB,IAAI,MAAM,UAAU;AAAA,QAChB,YAAY;AAAA,MAChB,CAAC,CACL;AACA,UAAI,CAAC,cAAc;AACf,aAAK,WAAW;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,eAAqB;AACzB,SAAK,OAAO,CAAC,GAAG,KAAK,iBAAiB,cAAc,CAAC;AACrD,SAAK,yBAAyB;AAAA,EAClC;AAAA,EAEQ,2BAAiC;AACrC,SAAK,kBAAkB;AACvB,SAAK,mBAAmB,IAAI,QACxB,CAAC,QAAS,KAAK,oBAAoB,GACvC;AACA,eAAW,KAAK,kBAAkB;AAAA,EACtC;AAAA,QA6DyB,oBAAsC;AAC3D,UAAM,WAAY,MAAM,MAAM,kBAAkB;AAChD,UAAM,KAAK;AACX,WAAO;AAAA,EACX;AAAA,EAEgB,oBAA0B;AACtC,UAAM,kBAAkB;AACxB,WAAO,iBAAiB,UAAU,KAAK,wBAAwB;AAC/D,QAAI,WAAW,UAAU;AACrB,MACI,SAQF,MAAM,iBACJ,eACA,KAAK,wBACT;AAAA,IACJ;AAAA,EACJ;AAAA,EAEgB,uBAA6B;AACzC,WAAO,oBAAoB,UAAU,KAAK,wBAAwB;AAClE,QAAI,WAAW,UAAU;AACrB,MACI,SAQF,MAAM,oBACJ,eACA,KAAK,wBACT;AAAA,IACJ;AACA,UAAM,qBAAqB;AAAA,EAC/B;AACJ;AApVW;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GACpB,AAdJ,KAcI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GACpB,AAjBJ,KAiBI;AAIA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AArBJ,KAqBI;AAGA;AAAA,EADP,AAAC,SAAS;AAAA,GACH,AAxBJ,KAwBI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GACvB,AA3BJ,KA2BI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GACvB,AA9BJ,KA8BI;AAGC;AAAA,EADR,AAAC,MAAM,OAAO;AAAA,GACN,AAjCL,KAiCK;AAGG;AAAA,EADX,AAAC,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GAChB,AApCR,KAoCQ;",
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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { IntersectionController } from '@lit-labs/observers/intersection_controller.js';\nimport { Tab } from './Tab.dev.js'\nimport { Focusable } from '@spectrum-web-components/shared';\nimport { RovingTabindexController } from '@spectrum-web-components/reactive-controllers/src/RovingTabindex.js';\n\nimport tabStyles from './tabs.css.js';\nimport { TabPanel } from './TabPanel.dev.js'\n\nconst noSelectionStyle = 'transform: translateX(0px) scaleX(0) scaleY(0)';\n\n/**\n * @element sp-tabs\n *\n * @slot - Tab elements to manage as a group\n * @slot tab-panel - Tab Panel elements related to the listed Tab elements\n * @csspart tablist - Container element for the slotted sp-tab elements\n *\n * @fires change - The selected Tab child has changed.\n */\nexport class Tabs extends SizedMixin(Focusable) {\n public static override get styles(): CSSResultArray {\n return [tabStyles];\n }\n\n /**\n * Whether to activate a tab on keyboard focus or not.\n *\n * By default a tab is activated via a \"click\" interaction. This is specifically intended for when\n * tab content cannot be displayed instantly, e.g. not all of the DOM content is available, etc.\n * To learn more about \"Deciding When to Make Selection Automatically Follow Focus\", visit:\n * https://w3c.github.io/aria-practices/#kbd_selection_follows_focus\n */\n @property({ type: Boolean })\n public auto = false;\n\n /**\n * The tab items are displayed closer together.\n */\n @property({ type: Boolean, reflect: true })\n public compact = false;\n\n @property({ reflect: true })\n public direction: 'vertical' | 'vertical-right' | 'horizontal' =\n 'horizontal';\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property()\n public label = '';\n\n /**\n * The tab list is displayed without a border.\n */\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ attribute: false })\n public selectionIndicatorStyle = noSelectionStyle;\n\n @property({ attribute: false })\n public shouldAnimate = false;\n\n @query('#list')\n private tabList!: HTMLDivElement;\n\n @property({ reflect: true })\n public get selected(): string {\n return this._selected;\n }\n\n public set selected(value: string) {\n const oldValue = this.selected;\n\n if (value === oldValue) {\n return;\n }\n\n this._selected = value;\n this.shouldUpdateCheckedState();\n this.requestUpdate('selected', oldValue);\n }\n\n private _selected = '';\n\n private set tabs(tabs: Tab[]) {\n if (tabs === this.tabs) return;\n this._tabs = tabs;\n this.rovingTabindexController.clearElementCache();\n }\n\n private get tabs(): Tab[] {\n return this._tabs;\n }\n\n private _tabs: Tab[] = [];\n\n constructor() {\n super();\n new IntersectionController(this, {\n config: {\n root: null,\n rootMargin: \"0px\",\n threshold: [0, 1]\n },\n callback: () => {\n this.updateSelectionIndicator();\n }\n });\n }\n\n rovingTabindexController = new RovingTabindexController<Tab>(this, {\n focusInIndex: (elements) => {\n let focusInIndex = 0;\n const firstFocusableElement = elements.find((el, index) => {\n const focusInElement = this.selected\n ? !el.disabled && el.value === this.selected\n : !el.disabled;\n focusInIndex = index;\n return focusInElement;\n });\n return firstFocusableElement ? focusInIndex : -1;\n },\n direction: () =>\n this.direction === 'horizontal' ? 'horizontal' : 'vertical',\n elementEnterAction: (el) => {\n if (!this.auto) return;\n\n this.shouldAnimate = true;\n this.selectTarget(el);\n },\n elements: () => this.tabs,\n isFocusableElement: (el) => !el.disabled,\n listenerScope: () => this.tabList,\n });\n\n /**\n * @private\n */\n public override get focusElement(): Tab | this {\n return this.rovingTabindexController.focusInElement || this;\n }\n\n protected override manageAutoFocus(): void {\n const tabs = [...this.children] as Tab[];\n const tabUpdateCompletes = tabs.map((tab) => {\n if (typeof tab.updateComplete !== 'undefined') {\n return tab.updateComplete;\n }\n return Promise.resolve(true);\n });\n Promise.all(tabUpdateCompletes).then(() => super.manageAutoFocus());\n }\n\n protected managePanels({\n target,\n }: Event & { target: HTMLSlotElement }): void {\n const panels = target.assignedElements() as TabPanel[];\n panels.map((panel) => {\n const { value, id } = panel;\n const tab = this.querySelector(`[role=\"tab\"][value=\"${value}\"]`);\n if (tab) {\n tab.setAttribute('aria-controls', id);\n panel.setAttribute('aria-labelledby', tab.id);\n }\n panel.selected = value === this.selected;\n });\n }\n\n protected override render(): TemplateResult {\n return html`\n <div\n aria-label=${ifDefined(this.label ? this.label : undefined)}\n @click=${this.onClick}\n @keydown=${this.onKeyDown}\n @sp-tab-contentchange=${this.updateSelectionIndicator}\n id=\"list\"\n role=\"tablist\"\n part=\"tablist\"\n >\n <slot @slotchange=${this.onSlotChange}></slot>\n <div\n id=\"selection-indicator\"\n class=${ifDefined(\n this.shouldAnimate ? undefined : 'first-position'\n )}\n style=${this.selectionIndicatorStyle}\n role=\"presentation\"\n ></div>\n </div>\n <slot name=\"tab-panel\" @slotchange=${this.managePanels}></slot>\n `;\n }\n\n protected override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n const selectedChild = this.querySelector(\n ':scope > [selected]'\n ) as Tab;\n if (selectedChild) {\n this.selectTarget(selectedChild);\n }\n }\n\n super.updated(changes);\n if (changes.has('selected')) {\n if (changes.get('selected')) {\n const previous = this.querySelector(\n `[role=\"tabpanel\"][value=\"${changes.get('selected')}\"]`\n ) as TabPanel;\n if (previous) previous.selected = false;\n }\n const next = this.querySelector(\n `[role=\"tabpanel\"][value=\"${this.selected}\"]`\n ) as TabPanel;\n if (next) next.selected = true;\n }\n if (changes.has('direction')) {\n if (this.direction === 'horizontal') {\n this.removeAttribute('aria-orientation');\n } else {\n this.setAttribute('aria-orientation', 'vertical');\n }\n }\n if (changes.has('dir')) {\n this.updateSelectionIndicator();\n }\n if (changes.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n if (\n !this.shouldAnimate &&\n typeof changes.get('shouldAnimate') !== 'undefined'\n ) {\n this.shouldAnimate = true;\n }\n }\n\n private onClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n const target = event\n .composedPath()\n .find((el) => (el as Tab).parentElement === this) as Tab;\n if (!target || target.disabled) {\n return;\n }\n this.shouldAnimate = true;\n this.selectTarget(target);\n };\n\n private onKeyDown = (event: KeyboardEvent): void => {\n if (event.code === 'Enter' || event.code === 'Space') {\n event.preventDefault();\n const target = event.target as HTMLElement;\n if (target) {\n this.selectTarget(target);\n }\n }\n };\n\n private selectTarget(target: HTMLElement): void {\n const value = target.getAttribute('value');\n if (value) {\n const selected = this.selected;\n this.selected = value;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n })\n );\n if (!applyDefault) {\n this.selected = selected;\n }\n }\n }\n\n private onSlotChange(): void {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n this.shouldUpdateCheckedState();\n }\n\n private shouldUpdateCheckedState(): void {\n this.tabChangeResolver();\n this.tabChangePromise = new Promise(\n (res) => (this.tabChangeResolver = res)\n );\n setTimeout(this.updateCheckedState);\n }\n\n private updateCheckedState = (): void => {\n if (!this.tabs.length) {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n }\n this.tabs.forEach((element) => {\n element.removeAttribute('selected');\n });\n\n if (this.selected) {\n const currentChecked = this.tabs.find(\n (el) => el.value === this.selected\n );\n\n if (currentChecked) {\n currentChecked.selected = true;\n } else {\n this.selected = '';\n }\n } else {\n const firstTab = this.tabs[0];\n if (firstTab) {\n firstTab.setAttribute('tabindex', '0');\n }\n }\n\n this.updateSelectionIndicator();\n this.tabChangeResolver();\n };\n\n private updateSelectionIndicator = async (): Promise<void> => {\n const selectedElement = this.tabs.find((el) => el.selected);\n if (!selectedElement) {\n this.selectionIndicatorStyle = noSelectionStyle;\n return;\n }\n await Promise.all([\n selectedElement.updateComplete,\n document.fonts ? document.fonts.ready : Promise.resolve(),\n ]);\n const tabBoundingClientRect = selectedElement.getBoundingClientRect();\n\n if (this.direction === 'horizontal') {\n const width = tabBoundingClientRect.width;\n const offset = selectedElement.offsetLeft;\n\n this.selectionIndicatorStyle = `transform: translateX(${offset}px) scaleX(${width});`;\n } else {\n const height = tabBoundingClientRect.height;\n const offset = selectedElement.offsetTop;\n\n this.selectionIndicatorStyle = `transform: translateY(${offset}px) scaleY(${height});`;\n }\n };\n\n private tabChangePromise = Promise.resolve();\n private tabChangeResolver: () => void = function () {\n return;\n };\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.tabChangePromise;\n return complete;\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n addEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.addEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n }\n\n public override disconnectedCallback(): void {\n window.removeEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n removeEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.removeEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/src/Tabs.js CHANGED
@@ -1,6 +1,6 @@
1
- var u=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var o=(n,e,t,i)=>{for(var s=i>1?void 0:i?h(e,t):e,r=n.length-1,a;r>=0;r--)(a=n[r])&&(s=(i?a(e,t,s):a(s))||s);return i&&s&&u(e,t,s),s};import{html as p,SizedMixin as b}from"@spectrum-web-components/base";import{property as l,query as f}from"@spectrum-web-components/base/src/decorators.js";import{ifDefined as d}from"@spectrum-web-components/base/src/directives.js";import{Focusable as m}from"@spectrum-web-components/shared";import{RovingTabindexController as v}from"@spectrum-web-components/reactive-controllers/src/RovingTabindex.js";import g from"./tabs.css.js";const c="transform: translateX(0px) scaleX(0) scaleY(0)";export class Tabs extends b(m){constructor(){super(...arguments);this.auto=!1;this.direction="horizontal";this.emphasized=!1;this.label="";this.selectionIndicatorStyle=c;this.shouldAnimate=!1;this._selected="";this._tabs=[];this.rovingTabindexController=new v(this,{focusInIndex:e=>{let t=0;return e.find((s,r)=>{const a=this.selected?!s.disabled&&s.value===this.selected:!s.disabled;return t=r,a})?t:-1},direction:()=>this.direction==="horizontal"?"horizontal":"vertical",elementEnterAction:e=>{!this.auto||(this.shouldAnimate=!0,this.selectTarget(e))},elements:()=>this.tabs,isFocusableElement:e=>!e.disabled,listenerScope:()=>this.tabList});this.onClick=e=>{if(this.disabled)return;const t=e.composedPath().find(i=>i.parentElement===this);!t||t.disabled||(this.shouldAnimate=!0,this.selectTarget(t))};this.onKeyDown=e=>{if(e.code==="Enter"||e.code==="Space"){e.preventDefault();const t=e.target;t&&this.selectTarget(t)}};this.updateCheckedState=()=>{if(this.tabs.length||(this.tabs=[...this.querySelectorAll('[role="tab"]')]),this.tabs.forEach(e=>{e.removeAttribute("selected")}),this.selected){const e=this.tabs.find(t=>t.value===this.selected);e?e.selected=!0:this.selected=""}else{const e=this.tabs[0];e&&e.setAttribute("tabindex","0")}this.updateSelectionIndicator(),this.tabChangeResolver()};this.updateSelectionIndicator=async()=>{const e=this.tabs.find(i=>i.selected);if(!e){this.selectionIndicatorStyle=c;return}await Promise.all([e.updateComplete,document.fonts?document.fonts.ready:Promise.resolve()]);const t=e.getBoundingClientRect();if(this.direction==="horizontal"){const i=t.width,s=e.offsetLeft;this.selectionIndicatorStyle=`transform: translateX(${s}px) scaleX(${i});`}else{const i=t.height,s=e.offsetTop;this.selectionIndicatorStyle=`transform: translateY(${s}px) scaleY(${i});`}};this.tabChangePromise=Promise.resolve();this.tabChangeResolver=function(){}}static get styles(){return[g]}get selected(){return this._selected}set selected(e){const t=this.selected;e!==t&&(this._selected=e,this.shouldUpdateCheckedState(),this.requestUpdate("selected",t))}set tabs(e){e!==this.tabs&&(this._tabs=e,this.rovingTabindexController.clearElementCache())}get tabs(){return this._tabs}get focusElement(){return this.rovingTabindexController.focusInElement||this}manageAutoFocus(){const t=[...this.children].map(i=>typeof i.updateComplete!="undefined"?i.updateComplete:Promise.resolve(!0));Promise.all(t).then(()=>super.manageAutoFocus())}managePanels({target:e}){e.assignedElements().map(i=>{const{value:s,id:r}=i,a=this.querySelector(`[role="tab"][value="${s}"]`);a&&(a.setAttribute("aria-controls",r),i.setAttribute("aria-labelledby",a.id)),i.selected=s===this.selected})}render(){return p`
1
+ "use strict";var h=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var a=(d,l,e,t)=>{for(var i=t>1?void 0:t?p(l,e):l,s=d.length-1,r;s>=0;s--)(r=d[s])&&(i=(t?r(l,e,i):r(i))||i);return t&&i&&h(l,e,i),i};import{html as b,SizedMixin as f}from"@spectrum-web-components/base";import{property as o,query as m}from"@spectrum-web-components/base/src/decorators.js";import{ifDefined as c}from"@spectrum-web-components/base/src/directives.js";import{IntersectionController as v}from"@lit-labs/observers/intersection_controller.js";import{Focusable as g}from"@spectrum-web-components/shared";import{RovingTabindexController as C}from"@spectrum-web-components/reactive-controllers/src/RovingTabindex.js";import S from"./tabs.css.js";const u="transform: translateX(0px) scaleX(0) scaleY(0)";export class Tabs extends f(g){constructor(){super();this.auto=!1;this.compact=!1;this.direction="horizontal";this.emphasized=!1;this.label="";this.quiet=!1;this.selectionIndicatorStyle=u;this.shouldAnimate=!1;this._selected="";this._tabs=[];this.rovingTabindexController=new C(this,{focusInIndex:e=>{let t=0;return e.find((s,r)=>{const n=this.selected?!s.disabled&&s.value===this.selected:!s.disabled;return t=r,n})?t:-1},direction:()=>this.direction==="horizontal"?"horizontal":"vertical",elementEnterAction:e=>{!this.auto||(this.shouldAnimate=!0,this.selectTarget(e))},elements:()=>this.tabs,isFocusableElement:e=>!e.disabled,listenerScope:()=>this.tabList});this.onClick=e=>{if(this.disabled)return;const t=e.composedPath().find(i=>i.parentElement===this);!t||t.disabled||(this.shouldAnimate=!0,this.selectTarget(t))};this.onKeyDown=e=>{if(e.code==="Enter"||e.code==="Space"){e.preventDefault();const t=e.target;t&&this.selectTarget(t)}};this.updateCheckedState=()=>{if(this.tabs.length||(this.tabs=[...this.querySelectorAll('[role="tab"]')]),this.tabs.forEach(e=>{e.removeAttribute("selected")}),this.selected){const e=this.tabs.find(t=>t.value===this.selected);e?e.selected=!0:this.selected=""}else{const e=this.tabs[0];e&&e.setAttribute("tabindex","0")}this.updateSelectionIndicator(),this.tabChangeResolver()};this.updateSelectionIndicator=async()=>{const e=this.tabs.find(i=>i.selected);if(!e){this.selectionIndicatorStyle=u;return}await Promise.all([e.updateComplete,document.fonts?document.fonts.ready:Promise.resolve()]);const t=e.getBoundingClientRect();if(this.direction==="horizontal"){const i=t.width,s=e.offsetLeft;this.selectionIndicatorStyle=`transform: translateX(${s}px) scaleX(${i});`}else{const i=t.height,s=e.offsetTop;this.selectionIndicatorStyle=`transform: translateY(${s}px) scaleY(${i});`}};this.tabChangePromise=Promise.resolve();this.tabChangeResolver=function(){};new v(this,{config:{root:null,rootMargin:"0px",threshold:[0,1]},callback:()=>{this.updateSelectionIndicator()}})}static get styles(){return[S]}get selected(){return this._selected}set selected(e){const t=this.selected;e!==t&&(this._selected=e,this.shouldUpdateCheckedState(),this.requestUpdate("selected",t))}set tabs(e){e!==this.tabs&&(this._tabs=e,this.rovingTabindexController.clearElementCache())}get tabs(){return this._tabs}get focusElement(){return this.rovingTabindexController.focusInElement||this}manageAutoFocus(){const t=[...this.children].map(i=>typeof i.updateComplete!="undefined"?i.updateComplete:Promise.resolve(!0));Promise.all(t).then(()=>super.manageAutoFocus())}managePanels({target:e}){e.assignedElements().map(i=>{const{value:s,id:r}=i,n=this.querySelector(`[role="tab"][value="${s}"]`);n&&(n.setAttribute("aria-controls",r),i.setAttribute("aria-labelledby",n.id)),i.selected=s===this.selected})}render(){return b`
2
2
  <div
3
- aria-label=${d(this.label?this.label:void 0)}
3
+ aria-label=${c(this.label?this.label:void 0)}
4
4
  @click=${this.onClick}
5
5
  @keydown=${this.onKeyDown}
6
6
  @sp-tab-contentchange=${this.updateSelectionIndicator}
@@ -11,11 +11,11 @@ var u=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var o=(n,e,t,i
11
11
  <slot @slotchange=${this.onSlotChange}></slot>
12
12
  <div
13
13
  id="selection-indicator"
14
- class=${d(this.shouldAnimate?void 0:"first-position")}
14
+ class=${c(this.shouldAnimate?void 0:"first-position")}
15
15
  style=${this.selectionIndicatorStyle}
16
16
  role="presentation"
17
17
  ></div>
18
18
  </div>
19
19
  <slot name="tab-panel" @slotchange=${this.managePanels}></slot>
20
- `}willUpdate(e){if(!this.hasUpdated){const t=this.querySelector(":scope > [selected]");t&&this.selectTarget(t)}if(super.updated(e),e.has("selected")){if(e.get("selected")){const i=this.querySelector(`[role="tabpanel"][value="${e.get("selected")}"]`);i&&(i.selected=!1)}const t=this.querySelector(`[role="tabpanel"][value="${this.selected}"]`);t&&(t.selected=!0)}e.has("direction")&&(this.direction==="horizontal"?this.removeAttribute("aria-orientation"):this.setAttribute("aria-orientation","vertical")),e.has("dir")&&this.updateSelectionIndicator(),e.has("disabled")&&(this.disabled?this.setAttribute("aria-disabled","true"):this.removeAttribute("aria-disabled")),!this.shouldAnimate&&typeof e.get("shouldAnimate")!="undefined"&&(this.shouldAnimate=!0)}selectTarget(e){const t=e.getAttribute("value");if(t){const i=this.selected;this.selected=t,this.dispatchEvent(new Event("change",{cancelable:!0}))||(this.selected=i)}}onSlotChange(){this.tabs=[...this.querySelectorAll('[role="tab"]')],this.shouldUpdateCheckedState()}shouldUpdateCheckedState(){this.tabChangeResolver(),this.tabChangePromise=new Promise(e=>this.tabChangeResolver=e),setTimeout(this.updateCheckedState)}async getUpdateComplete(){const e=await super.getUpdateComplete();return await this.tabChangePromise,e}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.updateSelectionIndicator),"fonts"in document&&document.fonts.addEventListener("loadingdone",this.updateSelectionIndicator)}disconnectedCallback(){window.removeEventListener("resize",this.updateSelectionIndicator),"fonts"in document&&document.fonts.removeEventListener("loadingdone",this.updateSelectionIndicator),super.disconnectedCallback()}}o([l({type:Boolean})],Tabs.prototype,"auto",2),o([l({reflect:!0})],Tabs.prototype,"direction",2),o([l({type:Boolean,reflect:!0})],Tabs.prototype,"emphasized",2),o([l()],Tabs.prototype,"label",2),o([l({attribute:!1})],Tabs.prototype,"selectionIndicatorStyle",2),o([l({attribute:!1})],Tabs.prototype,"shouldAnimate",2),o([f("#list")],Tabs.prototype,"tabList",2),o([l({reflect:!0})],Tabs.prototype,"selected",1);
20
+ `}willUpdate(e){if(!this.hasUpdated){const t=this.querySelector(":scope > [selected]");t&&this.selectTarget(t)}if(super.updated(e),e.has("selected")){if(e.get("selected")){const i=this.querySelector(`[role="tabpanel"][value="${e.get("selected")}"]`);i&&(i.selected=!1)}const t=this.querySelector(`[role="tabpanel"][value="${this.selected}"]`);t&&(t.selected=!0)}e.has("direction")&&(this.direction==="horizontal"?this.removeAttribute("aria-orientation"):this.setAttribute("aria-orientation","vertical")),e.has("dir")&&this.updateSelectionIndicator(),e.has("disabled")&&(this.disabled?this.setAttribute("aria-disabled","true"):this.removeAttribute("aria-disabled")),!this.shouldAnimate&&typeof e.get("shouldAnimate")!="undefined"&&(this.shouldAnimate=!0)}selectTarget(e){const t=e.getAttribute("value");if(t){const i=this.selected;this.selected=t,this.dispatchEvent(new Event("change",{cancelable:!0}))||(this.selected=i)}}onSlotChange(){this.tabs=[...this.querySelectorAll('[role="tab"]')],this.shouldUpdateCheckedState()}shouldUpdateCheckedState(){this.tabChangeResolver(),this.tabChangePromise=new Promise(e=>this.tabChangeResolver=e),setTimeout(this.updateCheckedState)}async getUpdateComplete(){const e=await super.getUpdateComplete();return await this.tabChangePromise,e}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.updateSelectionIndicator),"fonts"in document&&document.fonts.addEventListener("loadingdone",this.updateSelectionIndicator)}disconnectedCallback(){window.removeEventListener("resize",this.updateSelectionIndicator),"fonts"in document&&document.fonts.removeEventListener("loadingdone",this.updateSelectionIndicator),super.disconnectedCallback()}}a([o({type:Boolean})],Tabs.prototype,"auto",2),a([o({type:Boolean,reflect:!0})],Tabs.prototype,"compact",2),a([o({reflect:!0})],Tabs.prototype,"direction",2),a([o({type:Boolean,reflect:!0})],Tabs.prototype,"emphasized",2),a([o()],Tabs.prototype,"label",2),a([o({type:Boolean,reflect:!0})],Tabs.prototype,"quiet",2),a([o({attribute:!1})],Tabs.prototype,"selectionIndicatorStyle",2),a([o({attribute:!1})],Tabs.prototype,"shouldAnimate",2),a([m("#list")],Tabs.prototype,"tabList",2),a([o({reflect:!0})],Tabs.prototype,"selected",1);
21
21
  //# sourceMappingURL=Tabs.js.map
package/src/Tabs.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Tabs.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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { Tab } from './Tab.js';\nimport { Focusable } from '@spectrum-web-components/shared';\nimport { RovingTabindexController } from '@spectrum-web-components/reactive-controllers/src/RovingTabindex.js';\n\nimport tabStyles from './tabs.css.js';\nimport { TabPanel } from './TabPanel.js';\n\nconst noSelectionStyle = 'transform: translateX(0px) scaleX(0) scaleY(0)';\n\n/**\n * @element sp-tabs\n *\n * @slot - Tab elements to manage as a group\n * @slot tab-panel - Tab Panel elements related to the listed Tab elements\n * @attr {Boolean} quiet - The tabs border is a lot smaller\n * @attr {Boolean} compact - The collection of tabs take up less space\n * @csspart tablist - Container element for the slotted sp-tab elements\n *\n * @fires change - The selected Tab child has changed.\n */\nexport class Tabs extends SizedMixin(Focusable) {\n public static override get styles(): CSSResultArray {\n return [tabStyles];\n }\n\n /**\n * Whether to activate a tab on keyboard focus or not.\n *\n * By default a tab is activated via a \"click\" interaction. This is specifically intended for when\n * tab content cannot be displayed instantly, e.g. not all of the DOM content is available, etc.\n * To learn more about \"Deciding When to Make Selection Automatically Follow Focus\", visit:\n * https://w3c.github.io/aria-practices/#kbd_selection_follows_focus\n */\n @property({ type: Boolean })\n public auto = false;\n\n @property({ reflect: true })\n public direction: 'vertical' | 'vertical-right' | 'horizontal' =\n 'horizontal';\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property()\n public label = '';\n\n @property({ attribute: false })\n public selectionIndicatorStyle = noSelectionStyle;\n\n @property({ attribute: false })\n public shouldAnimate = false;\n\n @query('#list')\n private tabList!: HTMLDivElement;\n\n @property({ reflect: true })\n public get selected(): string {\n return this._selected;\n }\n\n public set selected(value: string) {\n const oldValue = this.selected;\n\n if (value === oldValue) {\n return;\n }\n\n this._selected = value;\n this.shouldUpdateCheckedState();\n this.requestUpdate('selected', oldValue);\n }\n\n private _selected = '';\n\n private set tabs(tabs: Tab[]) {\n if (tabs === this.tabs) return;\n this._tabs = tabs;\n this.rovingTabindexController.clearElementCache();\n }\n\n private get tabs(): Tab[] {\n return this._tabs;\n }\n\n private _tabs: Tab[] = [];\n\n rovingTabindexController = new RovingTabindexController<Tab>(this, {\n focusInIndex: (elements) => {\n let focusInIndex = 0;\n const firstFocusableElement = elements.find((el, index) => {\n const focusInElement = this.selected\n ? !el.disabled && el.value === this.selected\n : !el.disabled;\n focusInIndex = index;\n return focusInElement;\n });\n return firstFocusableElement ? focusInIndex : -1;\n },\n direction: () =>\n this.direction === 'horizontal' ? 'horizontal' : 'vertical',\n elementEnterAction: (el) => {\n if (!this.auto) return;\n\n this.shouldAnimate = true;\n this.selectTarget(el);\n },\n elements: () => this.tabs,\n isFocusableElement: (el) => !el.disabled,\n listenerScope: () => this.tabList,\n });\n\n /**\n * @private\n */\n public override get focusElement(): Tab | this {\n return this.rovingTabindexController.focusInElement || this;\n }\n\n protected override manageAutoFocus(): void {\n const tabs = [...this.children] as Tab[];\n const tabUpdateCompletes = tabs.map((tab) => {\n if (typeof tab.updateComplete !== 'undefined') {\n return tab.updateComplete;\n }\n return Promise.resolve(true);\n });\n Promise.all(tabUpdateCompletes).then(() => super.manageAutoFocus());\n }\n\n protected managePanels({\n target,\n }: Event & { target: HTMLSlotElement }): void {\n const panels = target.assignedElements() as TabPanel[];\n panels.map((panel) => {\n const { value, id } = panel;\n const tab = this.querySelector(`[role=\"tab\"][value=\"${value}\"]`);\n if (tab) {\n tab.setAttribute('aria-controls', id);\n panel.setAttribute('aria-labelledby', tab.id);\n }\n panel.selected = value === this.selected;\n });\n }\n\n protected override render(): TemplateResult {\n return html`\n <div\n aria-label=${ifDefined(this.label ? this.label : undefined)}\n @click=${this.onClick}\n @keydown=${this.onKeyDown}\n @sp-tab-contentchange=${this.updateSelectionIndicator}\n id=\"list\"\n role=\"tablist\"\n part=\"tablist\"\n >\n <slot @slotchange=${this.onSlotChange}></slot>\n <div\n id=\"selection-indicator\"\n class=${ifDefined(\n this.shouldAnimate ? undefined : 'first-position'\n )}\n style=${this.selectionIndicatorStyle}\n role=\"presentation\"\n ></div>\n </div>\n <slot name=\"tab-panel\" @slotchange=${this.managePanels}></slot>\n `;\n }\n\n protected override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n const selectedChild = this.querySelector(\n ':scope > [selected]'\n ) as Tab;\n if (selectedChild) {\n this.selectTarget(selectedChild);\n }\n }\n\n super.updated(changes);\n if (changes.has('selected')) {\n if (changes.get('selected')) {\n const previous = this.querySelector(\n `[role=\"tabpanel\"][value=\"${changes.get('selected')}\"]`\n ) as TabPanel;\n if (previous) previous.selected = false;\n }\n const next = this.querySelector(\n `[role=\"tabpanel\"][value=\"${this.selected}\"]`\n ) as TabPanel;\n if (next) next.selected = true;\n }\n if (changes.has('direction')) {\n if (this.direction === 'horizontal') {\n this.removeAttribute('aria-orientation');\n } else {\n this.setAttribute('aria-orientation', 'vertical');\n }\n }\n if (changes.has('dir')) {\n this.updateSelectionIndicator();\n }\n if (changes.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n if (\n !this.shouldAnimate &&\n typeof changes.get('shouldAnimate') !== 'undefined'\n ) {\n this.shouldAnimate = true;\n }\n }\n\n private onClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n const target = event\n .composedPath()\n .find((el) => (el as Tab).parentElement === this) as Tab;\n if (!target || target.disabled) {\n return;\n }\n this.shouldAnimate = true;\n this.selectTarget(target);\n };\n\n private onKeyDown = (event: KeyboardEvent): void => {\n if (event.code === 'Enter' || event.code === 'Space') {\n event.preventDefault();\n const target = event.target as HTMLElement;\n if (target) {\n this.selectTarget(target);\n }\n }\n };\n\n private selectTarget(target: HTMLElement): void {\n const value = target.getAttribute('value');\n if (value) {\n const selected = this.selected;\n this.selected = value;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n })\n );\n if (!applyDefault) {\n this.selected = selected;\n }\n }\n }\n\n private onSlotChange(): void {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n this.shouldUpdateCheckedState();\n }\n\n private shouldUpdateCheckedState(): void {\n this.tabChangeResolver();\n this.tabChangePromise = new Promise(\n (res) => (this.tabChangeResolver = res)\n );\n setTimeout(this.updateCheckedState);\n }\n\n private updateCheckedState = (): void => {\n if (!this.tabs.length) {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n }\n this.tabs.forEach((element) => {\n element.removeAttribute('selected');\n });\n\n if (this.selected) {\n const currentChecked = this.tabs.find(\n (el) => el.value === this.selected\n );\n\n if (currentChecked) {\n currentChecked.selected = true;\n } else {\n this.selected = '';\n }\n } else {\n const firstTab = this.tabs[0];\n if (firstTab) {\n firstTab.setAttribute('tabindex', '0');\n }\n }\n\n this.updateSelectionIndicator();\n this.tabChangeResolver();\n };\n\n private updateSelectionIndicator = async (): Promise<void> => {\n const selectedElement = this.tabs.find((el) => el.selected);\n if (!selectedElement) {\n this.selectionIndicatorStyle = noSelectionStyle;\n return;\n }\n await Promise.all([\n selectedElement.updateComplete,\n document.fonts ? document.fonts.ready : Promise.resolve(),\n ]);\n const tabBoundingClientRect = selectedElement.getBoundingClientRect();\n\n if (this.direction === 'horizontal') {\n const width = tabBoundingClientRect.width;\n const offset = selectedElement.offsetLeft;\n\n this.selectionIndicatorStyle = `transform: translateX(${offset}px) scaleX(${width});`;\n } else {\n const height = tabBoundingClientRect.height;\n const offset = selectedElement.offsetTop;\n\n this.selectionIndicatorStyle = `transform: translateY(${offset}px) scaleY(${height});`;\n }\n };\n\n private tabChangePromise = Promise.resolve();\n private tabChangeResolver: () => void = function () {\n return;\n };\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.tabChangePromise;\n return complete;\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n addEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.addEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n }\n\n public override disconnectedCallback(): void {\n window.removeEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n removeEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.removeEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n super.disconnectedCallback();\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
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*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { IntersectionController } from '@lit-labs/observers/intersection_controller.js';\nimport { Tab } from './Tab.js';\nimport { Focusable } from '@spectrum-web-components/shared';\nimport { RovingTabindexController } from '@spectrum-web-components/reactive-controllers/src/RovingTabindex.js';\n\nimport tabStyles from './tabs.css.js';\nimport { TabPanel } from './TabPanel.js';\n\nconst noSelectionStyle = 'transform: translateX(0px) scaleX(0) scaleY(0)';\n\n/**\n * @element sp-tabs\n *\n * @slot - Tab elements to manage as a group\n * @slot tab-panel - Tab Panel elements related to the listed Tab elements\n * @csspart tablist - Container element for the slotted sp-tab elements\n *\n * @fires change - The selected Tab child has changed.\n */\nexport class Tabs extends SizedMixin(Focusable) {\n public static override get styles(): CSSResultArray {\n return [tabStyles];\n }\n\n /**\n * Whether to activate a tab on keyboard focus or not.\n *\n * By default a tab is activated via a \"click\" interaction. This is specifically intended for when\n * tab content cannot be displayed instantly, e.g. not all of the DOM content is available, etc.\n * To learn more about \"Deciding When to Make Selection Automatically Follow Focus\", visit:\n * https://w3c.github.io/aria-practices/#kbd_selection_follows_focus\n */\n @property({ type: Boolean })\n public auto = false;\n\n /**\n * The tab items are displayed closer together.\n */\n @property({ type: Boolean, reflect: true })\n public compact = false;\n\n @property({ reflect: true })\n public direction: 'vertical' | 'vertical-right' | 'horizontal' =\n 'horizontal';\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property()\n public label = '';\n\n /**\n * The tab list is displayed without a border.\n */\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ attribute: false })\n public selectionIndicatorStyle = noSelectionStyle;\n\n @property({ attribute: false })\n public shouldAnimate = false;\n\n @query('#list')\n private tabList!: HTMLDivElement;\n\n @property({ reflect: true })\n public get selected(): string {\n return this._selected;\n }\n\n public set selected(value: string) {\n const oldValue = this.selected;\n\n if (value === oldValue) {\n return;\n }\n\n this._selected = value;\n this.shouldUpdateCheckedState();\n this.requestUpdate('selected', oldValue);\n }\n\n private _selected = '';\n\n private set tabs(tabs: Tab[]) {\n if (tabs === this.tabs) return;\n this._tabs = tabs;\n this.rovingTabindexController.clearElementCache();\n }\n\n private get tabs(): Tab[] {\n return this._tabs;\n }\n\n private _tabs: Tab[] = [];\n\n constructor() {\n super();\n new IntersectionController(this, {\n config: {\n root: null,\n rootMargin: \"0px\",\n threshold: [0, 1]\n },\n callback: () => {\n this.updateSelectionIndicator();\n }\n });\n }\n\n rovingTabindexController = new RovingTabindexController<Tab>(this, {\n focusInIndex: (elements) => {\n let focusInIndex = 0;\n const firstFocusableElement = elements.find((el, index) => {\n const focusInElement = this.selected\n ? !el.disabled && el.value === this.selected\n : !el.disabled;\n focusInIndex = index;\n return focusInElement;\n });\n return firstFocusableElement ? focusInIndex : -1;\n },\n direction: () =>\n this.direction === 'horizontal' ? 'horizontal' : 'vertical',\n elementEnterAction: (el) => {\n if (!this.auto) return;\n\n this.shouldAnimate = true;\n this.selectTarget(el);\n },\n elements: () => this.tabs,\n isFocusableElement: (el) => !el.disabled,\n listenerScope: () => this.tabList,\n });\n\n /**\n * @private\n */\n public override get focusElement(): Tab | this {\n return this.rovingTabindexController.focusInElement || this;\n }\n\n protected override manageAutoFocus(): void {\n const tabs = [...this.children] as Tab[];\n const tabUpdateCompletes = tabs.map((tab) => {\n if (typeof tab.updateComplete !== 'undefined') {\n return tab.updateComplete;\n }\n return Promise.resolve(true);\n });\n Promise.all(tabUpdateCompletes).then(() => super.manageAutoFocus());\n }\n\n protected managePanels({\n target,\n }: Event & { target: HTMLSlotElement }): void {\n const panels = target.assignedElements() as TabPanel[];\n panels.map((panel) => {\n const { value, id } = panel;\n const tab = this.querySelector(`[role=\"tab\"][value=\"${value}\"]`);\n if (tab) {\n tab.setAttribute('aria-controls', id);\n panel.setAttribute('aria-labelledby', tab.id);\n }\n panel.selected = value === this.selected;\n });\n }\n\n protected override render(): TemplateResult {\n return html`\n <div\n aria-label=${ifDefined(this.label ? this.label : undefined)}\n @click=${this.onClick}\n @keydown=${this.onKeyDown}\n @sp-tab-contentchange=${this.updateSelectionIndicator}\n id=\"list\"\n role=\"tablist\"\n part=\"tablist\"\n >\n <slot @slotchange=${this.onSlotChange}></slot>\n <div\n id=\"selection-indicator\"\n class=${ifDefined(\n this.shouldAnimate ? undefined : 'first-position'\n )}\n style=${this.selectionIndicatorStyle}\n role=\"presentation\"\n ></div>\n </div>\n <slot name=\"tab-panel\" @slotchange=${this.managePanels}></slot>\n `;\n }\n\n protected override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n const selectedChild = this.querySelector(\n ':scope > [selected]'\n ) as Tab;\n if (selectedChild) {\n this.selectTarget(selectedChild);\n }\n }\n\n super.updated(changes);\n if (changes.has('selected')) {\n if (changes.get('selected')) {\n const previous = this.querySelector(\n `[role=\"tabpanel\"][value=\"${changes.get('selected')}\"]`\n ) as TabPanel;\n if (previous) previous.selected = false;\n }\n const next = this.querySelector(\n `[role=\"tabpanel\"][value=\"${this.selected}\"]`\n ) as TabPanel;\n if (next) next.selected = true;\n }\n if (changes.has('direction')) {\n if (this.direction === 'horizontal') {\n this.removeAttribute('aria-orientation');\n } else {\n this.setAttribute('aria-orientation', 'vertical');\n }\n }\n if (changes.has('dir')) {\n this.updateSelectionIndicator();\n }\n if (changes.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n if (\n !this.shouldAnimate &&\n typeof changes.get('shouldAnimate') !== 'undefined'\n ) {\n this.shouldAnimate = true;\n }\n }\n\n private onClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n const target = event\n .composedPath()\n .find((el) => (el as Tab).parentElement === this) as Tab;\n if (!target || target.disabled) {\n return;\n }\n this.shouldAnimate = true;\n this.selectTarget(target);\n };\n\n private onKeyDown = (event: KeyboardEvent): void => {\n if (event.code === 'Enter' || event.code === 'Space') {\n event.preventDefault();\n const target = event.target as HTMLElement;\n if (target) {\n this.selectTarget(target);\n }\n }\n };\n\n private selectTarget(target: HTMLElement): void {\n const value = target.getAttribute('value');\n if (value) {\n const selected = this.selected;\n this.selected = value;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n })\n );\n if (!applyDefault) {\n this.selected = selected;\n }\n }\n }\n\n private onSlotChange(): void {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n this.shouldUpdateCheckedState();\n }\n\n private shouldUpdateCheckedState(): void {\n this.tabChangeResolver();\n this.tabChangePromise = new Promise(\n (res) => (this.tabChangeResolver = res)\n );\n setTimeout(this.updateCheckedState);\n }\n\n private updateCheckedState = (): void => {\n if (!this.tabs.length) {\n this.tabs = [...this.querySelectorAll('[role=\"tab\"]')] as Tab[];\n }\n this.tabs.forEach((element) => {\n element.removeAttribute('selected');\n });\n\n if (this.selected) {\n const currentChecked = this.tabs.find(\n (el) => el.value === this.selected\n );\n\n if (currentChecked) {\n currentChecked.selected = true;\n } else {\n this.selected = '';\n }\n } else {\n const firstTab = this.tabs[0];\n if (firstTab) {\n firstTab.setAttribute('tabindex', '0');\n }\n }\n\n this.updateSelectionIndicator();\n this.tabChangeResolver();\n };\n\n private updateSelectionIndicator = async (): Promise<void> => {\n const selectedElement = this.tabs.find((el) => el.selected);\n if (!selectedElement) {\n this.selectionIndicatorStyle = noSelectionStyle;\n return;\n }\n await Promise.all([\n selectedElement.updateComplete,\n document.fonts ? document.fonts.ready : Promise.resolve(),\n ]);\n const tabBoundingClientRect = selectedElement.getBoundingClientRect();\n\n if (this.direction === 'horizontal') {\n const width = tabBoundingClientRect.width;\n const offset = selectedElement.offsetLeft;\n\n this.selectionIndicatorStyle = `transform: translateX(${offset}px) scaleX(${width});`;\n } else {\n const height = tabBoundingClientRect.height;\n const offset = selectedElement.offsetTop;\n\n this.selectionIndicatorStyle = `transform: translateY(${offset}px) scaleY(${height});`;\n }\n };\n\n private tabChangePromise = Promise.resolve();\n private tabChangeResolver: () => void = function () {\n return;\n };\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.tabChangePromise;\n return complete;\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n addEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.addEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n }\n\n public override disconnectedCallback(): void {\n window.removeEventListener('resize', this.updateSelectionIndicator);\n if ('fonts' in document) {\n (\n document as unknown as {\n fonts: {\n removeEventListener: (\n name: string,\n callback: () => void\n ) => void;\n };\n }\n ).fonts.removeEventListener(\n 'loadingdone',\n this.updateSelectionIndicator\n );\n }\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["html", "SizedMixin", "property", "query", "ifDefined", "IntersectionController", "Focusable", "RovingTabindexController", "tabStyles", "noSelectionStyle", "elements", "focusInIndex", "el", "index", "focusInElement", "event", "target", "element", "currentChecked", "firstTab", "selectedElement", "tabBoundingClientRect", "width", "offset", "height", "value", "oldValue", "tabs", "tabUpdateCompletes", "tab", "panel", "id", "changes", "selectedChild", "previous", "next", "selected", "res", "complete", "__decorateClass"]
7
7
  }
package/src/index.dev.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  export * from "./Tabs.dev.js";
2
3
  export * from "./Tab.dev.js";
3
4
  export * from "./TabPanel.dev.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["index.ts"],
4
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*/\n\nexport * from './Tabs.dev.js'\nexport * from './Tab.dev.js'\nexport * from './TabPanel.dev.js'\n"],
5
- "mappings": "AAYA;AACA;AACA;",
5
+ "mappings": ";AAYA,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
package/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export*from"./Tabs.js";export*from"./Tab.js";export*from"./TabPanel.js";
1
+ "use strict";export*from"./Tabs.js";export*from"./Tab.js";export*from"./TabPanel.js";
2
2
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["index.ts"],
4
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*/\n\nexport * from './Tabs.js';\nexport * from './Tab.js';\nexport * from './TabPanel.js';\n"],
5
- "mappings": "AAYA,uBACA,sBACA",
5
+ "mappings": "aAYA,WAAc,YACd,WAAc,WACd,WAAc",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  import { css } from "@spectrum-web-components/base";
2
3
  const styles = css`
3
4
  :host{box-sizing:border-box;cursor:pointer;height:var(--spectrum-tabs-quiet-textonly-tabitem-height);line-height:var(--spectrum-tabs-quiet-textonly-tabitem-height);outline:none;position:relative;text-decoration:none;transition:color var(
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["spectrum-tab.css.ts"],
4
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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n:host{box-sizing:border-box;cursor:pointer;height:var(--spectrum-tabs-quiet-textonly-tabitem-height);line-height:var(--spectrum-tabs-quiet-textonly-tabitem-height);outline:none;position:relative;text-decoration:none;transition:color var(\n--spectrum-tabs-texticon-tabitem-selection-indicator-animation-duration\n) ease-out;white-space:nowrap;z-index:1}:host([disabled]){cursor:default}:host([disabled]) #item-label{cursor:default}::slotted([slot=icon]){height:var(\n--spectrum-tabs-quiet-textonly-tabitem-height\n)}:host([dir=ltr]) slot[name=icon]+#item-label{margin-left:calc(var(--spectrum-tabs-quiet-textonly-tabitem-icon-gap) - var(--spectrum-global-dimension-size-40))}:host([dir=rtl]) slot[name=icon]+#item-label{margin-right:calc(var(--spectrum-tabs-quiet-textonly-tabitem-icon-gap) - var(--spectrum-global-dimension-size-40))}:host([dir=ltr]):before{left:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host([dir=rtl]):before{right:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host([dir=ltr]):before{right:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host([dir=rtl]):before{left:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host:before{border:var(--spectrum-tabs-textonly-tabitem-focus-ring-size) solid transparent;border-radius:var(\n--spectrum-tabs-textonly-tabitem-focus-ring-border-radius\n);box-sizing:border-box;content:\"\";height:var(--spectrum-tabs-textonly-tabitem-focus-ring-height);margin-top:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-height)/-2);pointer-events:none;position:absolute;top:50%}#item-label{cursor:pointer;display:inline-block;font-size:var(--spectrum-tabs-texticon-tabitem-text-size);font-weight:var(--spectrum-tabs-textonly-tabitem-text-font-weight);text-decoration:none;vertical-align:top}#item-label:empty{display:none}:host{color:var(\n--spectrum-tabs-textonly-tabitem-text-color\n)}::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color\n)}:host(:hover){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-hover\n)}:host(:hover) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-hover\n)}:host([selected]){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-selected\n)}:host([selected]) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-selected\n)}:host(.focus-visible){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-selected-key-focus\n)}:host(:focus-visible){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-selected-key-focus\n)}:host(.focus-visible):before{border-color:var(\n--spectrum-tabs-textonly-tabitem-focus-ring-border-color-key-focus\n)}:host(:focus-visible):before{border-color:var(\n--spectrum-tabs-textonly-tabitem-focus-ring-border-color-key-focus\n)}:host(.focus-visible) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-selected-key-focus\n)}:host(:focus-visible) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-selected-key-focus\n)}:host([disabled]){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-disabled\n)}:host([disabled]) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-disabled\n)}\n`;\nexport default styles;"],
5
- "mappings": "AAWA;AACA,MAAM,SAAS;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCf,eAAe;",
5
+ "mappings": ";AAWA,SAAS,WAAW;AACpB,MAAM,SAAS;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCf,eAAe;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import{css as t}from"@spectrum-web-components/base";const e=t`
1
+ "use strict";import{css as t}from"@spectrum-web-components/base";const e=t`
2
2
  :host{box-sizing:border-box;cursor:pointer;height:var(--spectrum-tabs-quiet-textonly-tabitem-height);line-height:var(--spectrum-tabs-quiet-textonly-tabitem-height);outline:none;position:relative;text-decoration:none;transition:color var(
3
3
  --spectrum-tabs-texticon-tabitem-selection-indicator-animation-duration
4
4
  ) ease-out;white-space:nowrap;z-index:1}:host([disabled]){cursor:default}:host([disabled]) #item-label{cursor:default}::slotted([slot=icon]){height:var(
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["spectrum-tab.css.ts"],
4
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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n:host{box-sizing:border-box;cursor:pointer;height:var(--spectrum-tabs-quiet-textonly-tabitem-height);line-height:var(--spectrum-tabs-quiet-textonly-tabitem-height);outline:none;position:relative;text-decoration:none;transition:color var(\n--spectrum-tabs-texticon-tabitem-selection-indicator-animation-duration\n) ease-out;white-space:nowrap;z-index:1}:host([disabled]){cursor:default}:host([disabled]) #item-label{cursor:default}::slotted([slot=icon]){height:var(\n--spectrum-tabs-quiet-textonly-tabitem-height\n)}:host([dir=ltr]) slot[name=icon]+#item-label{margin-left:calc(var(--spectrum-tabs-quiet-textonly-tabitem-icon-gap) - var(--spectrum-global-dimension-size-40))}:host([dir=rtl]) slot[name=icon]+#item-label{margin-right:calc(var(--spectrum-tabs-quiet-textonly-tabitem-icon-gap) - var(--spectrum-global-dimension-size-40))}:host([dir=ltr]):before{left:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host([dir=rtl]):before{right:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host([dir=ltr]):before{right:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host([dir=rtl]):before{left:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-padding-x)*-1)}:host:before{border:var(--spectrum-tabs-textonly-tabitem-focus-ring-size) solid transparent;border-radius:var(\n--spectrum-tabs-textonly-tabitem-focus-ring-border-radius\n);box-sizing:border-box;content:\"\";height:var(--spectrum-tabs-textonly-tabitem-focus-ring-height);margin-top:calc(var(--spectrum-tabs-textonly-tabitem-focus-ring-height)/-2);pointer-events:none;position:absolute;top:50%}#item-label{cursor:pointer;display:inline-block;font-size:var(--spectrum-tabs-texticon-tabitem-text-size);font-weight:var(--spectrum-tabs-textonly-tabitem-text-font-weight);text-decoration:none;vertical-align:top}#item-label:empty{display:none}:host{color:var(\n--spectrum-tabs-textonly-tabitem-text-color\n)}::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color\n)}:host(:hover){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-hover\n)}:host(:hover) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-hover\n)}:host([selected]){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-selected\n)}:host([selected]) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-selected\n)}:host(.focus-visible){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-selected-key-focus\n)}:host(:focus-visible){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-selected-key-focus\n)}:host(.focus-visible):before{border-color:var(\n--spectrum-tabs-textonly-tabitem-focus-ring-border-color-key-focus\n)}:host(:focus-visible):before{border-color:var(\n--spectrum-tabs-textonly-tabitem-focus-ring-border-color-key-focus\n)}:host(.focus-visible) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-selected-key-focus\n)}:host(:focus-visible) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-selected-key-focus\n)}:host([disabled]){color:var(\n--spectrum-tabs-textonly-tabitem-text-color-disabled\n)}:host([disabled]) ::slotted([slot=icon]){color:var(\n--spectrum-tabs-textonly-tabitem-icon-color-disabled\n)}\n`;\nexport default styles;"],
5
- "mappings": "AAWA,oDACA,KAAM,GAAS;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCf,cAAe",
6
- "names": []
5
+ "mappings": "aAWA,OAAS,OAAAA,MAAW,gCACpB,MAAMC,EAASD;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCf,eAAeC",
6
+ "names": ["css", "styles"]
7
7
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  import { css } from "@spectrum-web-components/base";
2
3
  const styles = css`
3
4
  :host([size=s]){--spectrum-tabs-quiet-textonly-tabitem-selection-indicator-background-color-selected:var(