@cas-smartdesign/tab-bar 4.0.2 → 4.1.1

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/dist/tab-bar.mjs CHANGED
@@ -1,12 +1,12 @@
1
- import { LitElement as f, css as x, unsafeCSS as g, html as l } from "lit";
1
+ import { LitElement as f, unsafeCSS as x, css as g, html as l } from "lit";
2
2
  import { property as h } from "lit/decorators/property.js";
3
3
  import { createPopper as y } from "@popperjs/core";
4
4
  import m, { ListDataProvider as S, SelectionType as E } from "@cas-smartdesign/virtual-list";
5
- const L = ":host{contain:content;outline:none}:host(:not([selected])) .text{opacity:.8}:host(:hover),:host(:focus),:host([anchors-shown]){background-color:var(--sd-tab-bar-hover-color, #e7f1fa);cursor:pointer}.root{position:relative;overflow:hidden;width:100%;height:100%;display:flex;align-items:center;justify-content:flex-start;padding:var(--sd-tab-bar-padding, 8px) calc(2 * var(--sd-tab-bar-padding, 8px));box-sizing:border-box}.counter{text-align:center;background-color:#d9d9d9;min-width:24px;height:24px;line-height:24px;margin-left:calc(-.5 * var(--sd-tab-bar-padding, 8px));margin-right:var(--sd-tab-bar-padding, 8px)}:host([selected]) .counter{color:var(--sd-tab-bar-selected-counter-color, white);background-color:var(--sd-tab-bar-selected-counter-background-color, #3b85d1)}.text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex-grow:1}.down-arrow{padding-left:calc(1.5 * var(--sd-tab-bar-padding, 8px));margin-right:calc(-1 * var(--sd-tab-bar-padding, 8px));outline:none;fill:var(--sd-tab-bar-color, #1467ba);flex:0 0 auto}.ripple{position:absolute;background:var(--sd-tab-bar-color, #1467ba);border-radius:50%;width:5px;height:5px;animation:rippleEffect .88s 1;opacity:0}@keyframes rippleEffect{0%{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}";
6
- var C = Object.defineProperty, I = Object.getOwnPropertyDescriptor, p = (c, t, e, i) => {
7
- for (var s = i > 1 ? void 0 : i ? I(t, e) : t, o = c.length - 1, n; o >= 0; o--)
8
- (n = c[o]) && (s = (i ? n(t, e, s) : n(s)) || s);
9
- return i && s && C(t, e, s), s;
5
+ const L = ":host{contain:content;outline:none}:host(:not([selected])) .text{opacity:.8}:host(:hover),:host(:focus),:host([anchors-shown]){background-color:var(--sd-tab-bar-hover-color, #e7f1fa);cursor:pointer}:host(:focus-visible){box-shadow:0 0 0 1px var(--sd-tab-bar-focus-color, #1467ba) inset}.root{position:relative;overflow:hidden;width:100%;height:100%;display:flex;align-items:center;justify-content:flex-start;padding:var(--sd-tab-bar-padding, 8px) calc(2 * var(--sd-tab-bar-padding, 8px));box-sizing:border-box}.counter{text-align:center;background-color:#d9d9d9;min-width:24px;height:24px;line-height:24px;margin-left:calc(-.5 * var(--sd-tab-bar-padding, 8px));margin-right:var(--sd-tab-bar-padding, 8px)}:host([selected]) .counter{color:var(--sd-tab-bar-selected-counter-color, white);background-color:var(--sd-tab-bar-selected-counter-background-color, #3b85d1)}.text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex-grow:1}.down-arrow{padding-left:calc(1.5 * var(--sd-tab-bar-padding, 8px));margin-right:calc(-1 * var(--sd-tab-bar-padding, 8px));outline:none;fill:var(--sd-tab-bar-color, #1467ba);flex:0 0 auto}.ripple{position:absolute;background:var(--sd-tab-bar-color, #1467ba);border-radius:50%;width:5px;height:5px;animation:rippleEffect .88s 1;opacity:0}@keyframes rippleEffect{0%{transform:scale(1);opacity:.4}to{transform:scale(100);opacity:0}}";
6
+ var C = Object.defineProperty, p = (c, t, e, o) => {
7
+ for (var s = void 0, i = c.length - 1, n; i >= 0; i--)
8
+ (n = c[i]) && (s = n(t, e, s) || s);
9
+ return s && C(t, e, s), s;
10
10
  };
11
11
  const w = navigator.userAgent.indexOf("Trident") !== -1, b = class b extends f {
12
12
  constructor() {
@@ -37,15 +37,15 @@ const w = navigator.userAgent.indexOf("Trident") !== -1, b = class b extends f {
37
37
  super.firstUpdated(t);
38
38
  const e = window.CSS && window.CSS.supports;
39
39
  this._cssMathMaxSupported = e && CSS.supports("max-width", "max(50vw)");
40
- const i = this.ownerDocument;
41
- i.adoptedStyleSheets && (this.shadowRoot.adoptedStyleSheets = [
40
+ const o = this.ownerDocument;
41
+ o.adoptedStyleSheets && (this.shadowRoot.adoptedStyleSheets = [
42
42
  ...this.shadowRoot.adoptedStyleSheets,
43
- ...i.adoptedStyleSheets
43
+ ...o.adoptedStyleSheets
44
44
  ]), this.addEventListener("pointerdown", (s) => {
45
45
  if (!this.noInk && !this.showRipple) {
46
46
  this.showRipple = !0;
47
- const o = this.getBoundingClientRect(), n = this.shadowRoot.querySelector(".ripple");
48
- n.style.left = `${s.clientX - o.left}px`, n.style.top = `${s.clientY - o.top}px`, n.style.display = "", n.addEventListener(
47
+ const i = this.getBoundingClientRect(), n = this.shadowRoot.querySelector(".ripple");
48
+ n.style.left = `${s.clientX - i.left}px`, n.style.top = `${s.clientY - i.top}px`, n.style.display = "", n.addEventListener(
49
49
  "animationend",
50
50
  () => {
51
51
  n.style.display = "none", this.showRipple = !1;
@@ -62,8 +62,8 @@ const w = navigator.userAgent.indexOf("Trident") !== -1, b = class b extends f {
62
62
  }
63
63
  static get styles() {
64
64
  return [
65
- x`
66
- ${g(L)}
65
+ g`
66
+ ${x(L)}
67
67
  `
68
68
  ];
69
69
  }
@@ -93,8 +93,8 @@ const w = navigator.userAgent.indexOf("Trident") !== -1, b = class b extends f {
93
93
  this.dispatchEvent(new CustomEvent("selection", { detail: { anchor: t } }));
94
94
  }
95
95
  isPointerAbove(t, e) {
96
- const i = e.getBoundingClientRect();
97
- return i.left <= t.clientX && i.right >= t.clientX && i.top <= t.clientY && i.bottom >= t.clientY;
96
+ const o = e.getBoundingClientRect();
97
+ return o.left <= t.clientX && o.right >= t.clientX && o.top <= t.clientY && o.bottom >= t.clientY;
98
98
  }
99
99
  showAnchors() {
100
100
  !this.anchorsShown && this.hasAnchors && (this.root.addEventListener("pointerleave", this.handlePointerLeave), this.list || this.createList(), this.dataProvider.items = this.anchors.map((t, e) => ({
@@ -160,26 +160,26 @@ b.ID = "sd-tab";
160
160
  let r = b;
161
161
  p([
162
162
  h({ type: String })
163
- ], r.prototype, "text", 2);
163
+ ], r.prototype, "text");
164
164
  p([
165
165
  h({ type: Array })
166
- ], r.prototype, "anchors", 2);
166
+ ], r.prototype, "anchors");
167
167
  p([
168
168
  h()
169
- ], r.prototype, "index", 2);
169
+ ], r.prototype, "index");
170
170
  p([
171
171
  h()
172
- ], r.prototype, "showCounter", 2);
172
+ ], r.prototype, "showCounter");
173
173
  p([
174
174
  h({ type: Boolean, reflect: !0, attribute: "anchors-shown" })
175
- ], r.prototype, "anchorsShown", 2);
175
+ ], r.prototype, "anchorsShown");
176
176
  m.ensureDefined();
177
177
  customElements.get(r.ID) || customElements.define(r.ID, r);
178
- const B = ":host{display:block;outline:none;contain:content}:host([vertical]) .tab-button-container{flex-direction:column}:host([vertical]) .slider{top:0;width:2px}:host(:not([vertical])) .slider{bottom:0;height:2px}.root{display:flex;width:100%;overflow:hidden}.tab-button-container{display:flex;flex-wrap:nowrap;overflow:hidden;position:relative;flex:1 1 auto}@supports (scrollbar-width: none){:host(:not([vertical])) .tab-button-container{overflow-x:auto;scrollbar-width:none}:host(:not([vertical])) .tab-button-container::-webkit-scrollbar{display:none}}@supports selector(::-webkit-scrollbar){:host(:not([vertical])) .tab-button-container{overflow-x:auto;scrollbar-width:none}:host(:not([vertical])) .tab-button-container::-webkit-scrollbar{display:none}}:host([vertical]) .root{height:100%}:host([vertical]) .tab-button-container{overflow-y:auto;height:100%}:host([vertical]) ::slotted(*){flex-shrink:0;flex-grow:0}.slider{background-color:var(--sd-tab-bar-color, #1467ba);position:absolute;left:0}:host(:not([no-slide])) .slider,:host([no-slide=false]) .slider{transition-duration:var(--sd-tab-bar-slide-duration, .5s)}.scroll-button{cursor:pointer;padding:4px;position:relative;flex:0 0 auto;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 2px #00000024,0 1px 5px #0000001f,0 3px 1px -2px #0003}.scroll-button>svg{width:24px;height:24px;fill:var(--sd-tab-bar-color, #1467ba)}.ripple{position:absolute;left:0;top:0;background-position:center;transition:background-color .88s;opacity:.4;width:100%;height:100%;border-radius:50%}.ripple:active{background-color:var(--sd-tab-bar-color, #1467ba);background-size:100%;transition:background-color 0s}";
179
- var A = Object.defineProperty, D = Object.getOwnPropertyDescriptor, d = (c, t, e, i) => {
180
- for (var s = i > 1 ? void 0 : i ? D(t, e) : t, o = c.length - 1, n; o >= 0; o--)
181
- (n = c[o]) && (s = (i ? n(t, e, s) : n(s)) || s);
182
- return i && s && A(t, e, s), s;
178
+ const I = ":host{display:block;outline:none;contain:content}:host([vertical]) .tab-button-container{flex-direction:column}:host([vertical]) .slider{top:0;width:2px}:host(:not([vertical])) .slider{bottom:0;height:2px}.root{display:flex;width:100%;overflow:hidden}.tab-button-container{display:flex;flex-wrap:nowrap;overflow:hidden;position:relative;flex:1 1 auto}@supports (scrollbar-width: none){:host(:not([vertical])) .tab-button-container{overflow-x:auto;scrollbar-width:none}:host(:not([vertical])) .tab-button-container::-webkit-scrollbar{display:none}}@supports selector(::-webkit-scrollbar){:host(:not([vertical])) .tab-button-container{overflow-x:auto;scrollbar-width:none}:host(:not([vertical])) .tab-button-container::-webkit-scrollbar{display:none}}:host([vertical]) .root{height:100%}:host([vertical]) .tab-button-container{overflow-y:auto;height:100%}:host([vertical]) ::slotted(*){flex-shrink:0;flex-grow:0}.slider{background-color:var(--sd-tab-bar-color, #1467ba);position:absolute;left:0}:host(:not([no-slide])) .slider,:host([no-slide=false]) .slider{transition-duration:var(--sd-tab-bar-slide-duration, .5s)}.scroll-button{cursor:pointer;padding:4px;position:relative;flex:0 0 auto;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 2px #00000024,0 1px 5px #0000001f,0 3px 1px -2px #0003}.scroll-button>svg{width:24px;height:24px;fill:var(--sd-tab-bar-color, #1467ba)}.ripple{position:absolute;left:0;top:0;background-position:center;transition:background-color .88s;opacity:.4;width:100%;height:100%;border-radius:50%}.ripple:active{background-color:var(--sd-tab-bar-color, #1467ba);background-size:100%;transition:background-color 0s}";
179
+ var B = Object.defineProperty, d = (c, t, e, o) => {
180
+ for (var s = void 0, i = c.length - 1, n; i >= 0; i--)
181
+ (n = c[i]) && (s = n(t, e, s) || s);
182
+ return s && B(t, e, s), s;
183
183
  };
184
184
  const v = 40, u = class u extends f {
185
185
  constructor() {
@@ -229,17 +229,17 @@ const v = 40, u = class u extends f {
229
229
  ...e.adoptedStyleSheets
230
230
  ]), this.shadowRoot.querySelector("slot").addEventListener("slotchange", this.handleSlotChange), this.addEventListener("keydown", this.handleKeyDown), this.tabButtonContainer.addEventListener("wheel", (s) => {
231
231
  if (this.tabButtonContainer.scrollWidth > this.tabButtonContainer.offsetWidth) {
232
- const o = document.elementsFromPoint(s.x, s.y)[0];
232
+ const i = document.elementsFromPoint(s.x, s.y)[0];
233
233
  this.tabButtonContainer.scrollLeft += s.deltaY;
234
234
  const n = document.elementsFromPoint(s.x, s.y)[0];
235
- o != n && (o instanceof r && o.hideAnchors(), n instanceof r && n.showAnchors()), s.preventDefault();
235
+ i != n && (i instanceof r && i.hideAnchors(), n instanceof r && n.showAnchors()), s.preventDefault();
236
236
  }
237
237
  });
238
238
  }
239
239
  static get styles() {
240
240
  return [
241
- x`
242
- ${g(B)}
241
+ g`
242
+ ${x(I)}
243
243
  `
244
244
  ];
245
245
  }
@@ -277,10 +277,10 @@ const v = 40, u = class u extends f {
277
277
  updateSelectionState() {
278
278
  this.tabElements && this.tabElements.forEach((t, e) => {
279
279
  e === this._selectedIndex ? (t.selected = !0, this.slider && window.requestAnimationFrame(() => {
280
- let i = t.offsetLeft, s = t.offsetTop;
281
- t.offsetParent != this._tabButtonContainer && (i -= this._tabButtonContainer.offsetLeft, s -= this._tabButtonContainer.offsetTop);
282
- const o = this.slider;
283
- this.vertical ? (o.style.height = t.offsetHeight + "px", o.style.transform = `translateY(${s}px)`) : (o.style.width = t.offsetWidth + "px", o.style.transform = `translateX(${i}px)`);
280
+ let o = t.offsetLeft, s = t.offsetTop;
281
+ t.offsetParent != this._tabButtonContainer && (o -= this._tabButtonContainer.offsetLeft, s -= this._tabButtonContainer.offsetTop);
282
+ const i = this.slider;
283
+ this.vertical ? (i.style.height = t.offsetHeight + "px", i.style.transform = `translateY(${s}px)`) : (i.style.width = t.offsetWidth + "px", i.style.transform = `translateX(${o}px)`);
284
284
  })) : t.selected = !1;
285
285
  });
286
286
  }
@@ -304,7 +304,7 @@ const v = 40, u = class u extends f {
304
304
  const t = this.tabElements[this.focusedIndex];
305
305
  let e = t.offsetLeft;
306
306
  t.offsetParent != this._tabButtonContainer && (e -= this._tabButtonContainer.offsetLeft);
307
- const i = t.offsetWidth, s = e + i;
307
+ const o = t.offsetWidth, s = e + o;
308
308
  if (e > this.tabButtonContainer.scrollLeft && s < this.tabButtonContainer.scrollLeft + this.tabButtonContainer.offsetWidth)
309
309
  return;
310
310
  this.tabButtonContainer.scrollLeft < e ? this.tabButtonContainer.scrollLeft = s - this.tabButtonContainer.offsetWidth : this.tabButtonContainer.scrollLeft + this.tabButtonContainer.offsetWidth > s && (this.tabButtonContainer.scrollLeft = e);
@@ -339,22 +339,22 @@ u.ID = "sd-tab-bar", u.shadowRootOptions = {
339
339
  let a = u;
340
340
  d([
341
341
  h({ type: Boolean, reflect: !0, attribute: "no-bar" })
342
- ], a.prototype, "noBar", 2);
342
+ ], a.prototype, "noBar");
343
343
  d([
344
344
  h({ type: Boolean, reflect: !0, attribute: "no-slide" })
345
- ], a.prototype, "noSlide", 2);
345
+ ], a.prototype, "noSlide");
346
346
  d([
347
347
  h({ type: Boolean, reflect: !0 })
348
- ], a.prototype, "vertical", 2);
348
+ ], a.prototype, "vertical");
349
349
  d([
350
350
  h({ type: Boolean, reflect: !0, attribute: "show-counter" })
351
- ], a.prototype, "showCounter", 2);
351
+ ], a.prototype, "showCounter");
352
352
  d([
353
353
  h()
354
- ], a.prototype, "showLeftScrollButton", 2);
354
+ ], a.prototype, "showLeftScrollButton");
355
355
  d([
356
356
  h()
357
- ], a.prototype, "showRightScrollButton", 2);
357
+ ], a.prototype, "showRightScrollButton");
358
358
  customElements.get(a.ID) || customElements.define(a.ID, a);
359
359
  export {
360
360
  r as Tab,
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bar.mjs","sources":["../tab.ts","../tab-bar.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS, PropertyValues, css } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { createPopper, Instance as Popper } from \"@popperjs/core\";\nimport \"@cas-smartdesign/virtual-list\";\nimport VirtualList, { ListDataProvider, SelectionType } from \"@cas-smartdesign/virtual-list\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [Tab.ID]: Tab;\n }\n}\nimport style from \"./tab-style.scss?inline\";\n\nconst isIE11 = navigator.userAgent.indexOf(\"Trident\") !== -1;\n\nexport interface ISelectionEvent {\n anchor: string;\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n selection: CustomEvent<ISelectionEvent>;\n}\n\nexport default interface Tab {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class Tab extends LitElement {\n public static readonly ID = \"sd-tab\";\n\n @property({ type: String })\n public text: string;\n @property({ type: Array })\n public anchors: string[];\n @property()\n public index: number;\n @property()\n public showCounter: boolean;\n\n @property({ type: Boolean, reflect: true, attribute: \"anchors-shown\" })\n private anchorsShown: boolean;\n\n public noInk: boolean;\n public vertical: boolean;\n\n public minimumOverlayWidth = 150;\n\n private showRipple: boolean;\n private popper: Popper;\n private list: VirtualList;\n private dataProvider: ListDataProvider;\n private _cssMathMaxSupported: boolean;\n\n get selected(): boolean {\n return this.hasAttribute(\"selected\");\n }\n\n set selected(newValue: boolean) {\n if (newValue) {\n this.setAttribute(\"selected\", \"\");\n } else {\n this.removeAttribute(\"selected\");\n if (this.shadowRoot && this.showRipple) {\n const rippleElement = this.shadowRoot.querySelector(\".ripple\") as HTMLElement;\n rippleElement.style.display = \"none\";\n this.showRipple = false;\n }\n }\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n const supportsCSS = window.CSS && window.CSS.supports;\n this._cssMathMaxSupported = supportsCSS && CSS.supports(\"max-width\", \"max(50vw)\");\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const ownerDocument = this.ownerDocument as any;\n if (ownerDocument.adoptedStyleSheets) {\n (this.shadowRoot as any).adoptedStyleSheets = [\n ...(this.shadowRoot as any).adoptedStyleSheets,\n ...ownerDocument.adoptedStyleSheets,\n ];\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n this.addEventListener(\"pointerdown\", (event: PointerEvent) => {\n if (!this.noInk && !this.showRipple) {\n this.showRipple = true;\n const rect: DOMRect = this.getBoundingClientRect();\n const rippleElement = this.shadowRoot.querySelector(\".ripple\") as HTMLElement;\n rippleElement.style.left = `${event.clientX - rect.left}px`;\n rippleElement.style.top = `${event.clientY - rect.top}px`;\n rippleElement.style.display = \"\";\n rippleElement.addEventListener(\n \"animationend\",\n () => {\n rippleElement.style.display = \"none\";\n this.showRipple = false;\n },\n { once: true },\n );\n }\n });\n this.addEventListener(\"click\", (event: MouseEvent) => {\n if (event.composedPath().indexOf(this.list) === -1) {\n this.dispatchSelectionEvent();\n event.preventDefault();\n event.stopPropagation();\n }\n });\n this.addEventListener(\"keydown\", this.handleKeyDown);\n if (!this.hasAttribute(\"tabindex\")) {\n this.setAttribute(\"tabindex\", \"0\");\n }\n }\n\n public disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hideAnchors();\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public render() {\n return html`\n <div class=\"root\" @pointerover=${this.showAnchors} @pointerdown=${this.showAnchors}>\n ${this.showCounter ? html` <span class=\"counter\">${this.index + 1}</span> ` : \"\"}\n <div class=\"text\">${this.text}</div>\n <div class=\"ripple\" style=\"display: none\"></div>\n ${this.hasAnchors\n ? html`\n <svg class=\"down-arrow\" tabindex=\"-1\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\">\n <path d=\"M13 4v2l-5 5-5-5v-2l5 5z\"></path>\n </svg>\n `\n : \"\"}\n </div>\n `;\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (this.hasAnchors) {\n const anchorTriggerKeys = this.vertical\n ? [\"Left\", \"ArrowLeft\", \"Right\", \"ArrowRight\", \"Enter\"]\n : [\"Down\", \"ArrowDown\", \"Up\", \"ArrowUp\", \"Enter\"];\n if (anchorTriggerKeys.indexOf(event.key) === -1) {\n this.hideAnchors();\n this.focus();\n } else {\n if (!this.anchorsShown) {\n this.showAnchors();\n window.requestAnimationFrame(() => {\n // IE would scroll down to bottom because the anchor list has not yet positioned there.\n this.list.focusIndex = 0;\n this.list.focus();\n\n this.updateDropdownSizes();\n });\n }\n event.preventDefault();\n event.stopPropagation();\n }\n } else if (event.key === \"Enter\") {\n this.dispatchSelectionEvent();\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private updateDropdownSizes(): void {\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const overlayMaxHeight = (viewportHeight - this.offsetHeight) * 0.5;\n Object.assign(this.list.style, {\n maxHeight: `${overlayMaxHeight}px`,\n minWidth: `${Math.max(this.offsetWidth, this.minimumOverlayWidth)}px`,\n maxWidth: this._cssMathMaxSupported\n ? `max(50vw, ${this.offsetWidth}px)`\n : Math.max((window.innerWidth || document.documentElement.clientWidth) / 2, this.offsetWidth) + \"px\",\n });\n }\n\n private handleListSelection = (event: CustomEvent) => {\n this.hideAnchors();\n event.stopPropagation();\n this.dispatchSelectionEvent(this.anchors[event.detail.index]);\n this.focus();\n };\n\n private dispatchSelectionEvent(selectedAnchor?: string): void {\n this.dispatchEvent(new CustomEvent<ISelectionEvent>(\"selection\", { detail: { anchor: selectedAnchor } }));\n }\n\n private handlePointerLeave = (event: PointerEvent) => {\n if (isIE11 || (this.list && !this.list.contains(event.target as HTMLElement))) {\n window.addEventListener(\"pointermove\", this.handlePointerMove);\n }\n };\n\n private handlePointerMove = (event: PointerEvent) => {\n if (!this.isPointerAbove(event, this) && !this.isPointerAbove(event, this.list)) {\n this.hideAnchors();\n window.removeEventListener(\"pointermove\", this.handlePointerMove);\n }\n };\n\n private isPointerAbove(event: PointerEvent, element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n return (\n rect.left <= event.clientX &&\n rect.right >= event.clientX &&\n rect.top <= event.clientY &&\n rect.bottom >= event.clientY\n );\n }\n\n public showAnchors() {\n if (!this.anchorsShown && this.hasAnchors) {\n this.root.addEventListener(\"pointerleave\", this.handlePointerLeave);\n if (!this.list) {\n this.createList();\n }\n this.dataProvider.items = this.anchors.map((anchor, index) => {\n return {\n caption: anchor,\n index,\n };\n });\n\n this.updateDropdownSizes();\n this.ownerDocument.body.appendChild(this.list);\n if (!this.popper) {\n this.popper = createPopper(this, this.list, {\n placement: this.vertical ? \"right-start\" : \"bottom-start\",\n modifiers: [\n {\n name: \"computeStyles\",\n options: {\n gpuAcceleration: !isIE11,\n },\n },\n {\n name: \"hide\",\n enabled: false,\n },\n {\n name: \"preventOverflow\",\n options: {\n padding: 0,\n },\n },\n {\n name: \"adjustWidthIfNeeded\",\n enabled: true,\n phase: \"read\",\n fn({ state }) {\n const list = state.elements.popper as VirtualList;\n list.increaseWidthOnNextRenderIfNeeded();\n },\n },\n ],\n });\n }\n\n window.requestAnimationFrame(() => {\n if (this.popper) {\n this.popper.update();\n }\n });\n\n this.anchorsShown = true;\n }\n }\n\n private createList(): void {\n this.list = document.createElement(VirtualList.ID) as VirtualList;\n this.dataProvider = new ListDataProvider();\n this.dataProvider.finalSizeIsKnown = true;\n this.dataProvider.connectList(this.list);\n this.list.classList.add(\"anchor-list\");\n this.list.tabIndex = 0;\n this.list.selectionType = SelectionType.TriggerOnly;\n this.list.addEventListener(\"selection\", this.handleListSelection);\n this.list.addEventListener(\"keydown\", (e) => {\n if (e.key == \"Escape\") {\n this.hideAnchors();\n this.focus();\n }\n });\n this.list.addEventListener(\"focusout\", () => {\n this.hideAnchors();\n });\n this.list.setAttribute(\"slot\", \"anchors\");\n this.list.itemHeight = 50;\n Object.assign(this.list.style, {\n zIndex: \"21000\",\n boxShadow: `rgba(0, 0, 0, 0.14) 0px 2px 2px 0px,\n rgba(0, 0, 0, 0.12) 0px 1px 5px 0px,\n rgba(0, 0, 0, 0.2) 0px 3px 1px -2px`,\n background: \"white\",\n overflowY: \"auto\",\n });\n }\n\n hideAnchors(): void {\n if (this.anchorsShown) {\n this.anchorsShown = false;\n this.root.removeEventListener(\"pointerleave\", this.handlePointerLeave);\n if (this.list) {\n this.list.focusIndex = -1;\n this.list.parentElement.removeChild(this.list);\n }\n }\n if (this.popper) {\n this.popper.destroy();\n this.popper = null;\n }\n }\n\n private get hasAnchors(): boolean {\n return !!(this.anchors && this.anchors.length);\n }\n\n private get root(): HTMLElement {\n if (this.shadowRoot) {\n return this.shadowRoot.querySelector(\".root\");\n }\n return null;\n }\n}\n\nVirtualList.ensureDefined();\nif (!customElements.get(Tab.ID)) {\n customElements.define(Tab.ID, Tab);\n}\n","import { LitElement, html, PropertyValues, unsafeCSS, css } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"./tab\";\nimport Tab from \"./tab\";\nexport { default as Tab } from \"./tab\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TabBar.ID]: TabBar;\n }\n}\nimport style from \"./tab-bar-style.scss?inline\";\n\nconst SCROLL_STEP = 40;\n\nexport interface ISelectionEvent {\n selectedTab: {\n index: number;\n tabElement: Tab;\n };\n anchor: string;\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n selection: CustomEvent<ISelectionEvent>;\n}\n\nexport default interface TabBar {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class TabBar extends LitElement {\n public static readonly ID = \"sd-tab-bar\";\n\n @property({ type: Boolean, reflect: true, attribute: \"no-bar\" })\n public noBar: boolean;\n @property({ type: Boolean, reflect: true, attribute: \"no-slide\" })\n public noSlide: boolean;\n @property({ type: Boolean, reflect: true })\n public vertical: boolean;\n @property({ type: Boolean, reflect: true, attribute: \"show-counter\" })\n public showCounter: boolean;\n\n public tabElements: Tab[];\n\n @property()\n private showLeftScrollButton: boolean;\n @property()\n private showRightScrollButton: boolean;\n\n private _focusedIndex: number;\n private _selectedIndex: number;\n private resizeObserver: ResizeObserver;\n private lastKnownWidth: number;\n private _tabButtonContainer: HTMLElement;\n\n static shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(() => {\n this.debounce(\"update-scroll-button-visibility\", () => {\n if (this.lastKnownWidth !== this.offsetWidth) {\n this.lastKnownWidth = this.offsetWidth;\n this.updateScrollButtonVisibility();\n }\n });\n });\n this.resizeObserver.observe(this);\n }\n\n public disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver.disconnect();\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const ownerDocument = this.ownerDocument as any;\n if (ownerDocument.adoptedStyleSheets) {\n (this.shadowRoot as any).adoptedStyleSheets = [\n ...(this.shadowRoot as any).adoptedStyleSheets,\n ...ownerDocument.adoptedStyleSheets,\n ];\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n const slot = this.shadowRoot.querySelector(\"slot\");\n slot.addEventListener(\"slotchange\", this.handleSlotChange);\n\n this.addEventListener(\"keydown\", this.handleKeyDown);\n\n this.tabButtonContainer.addEventListener(\"wheel\", (e) => {\n if (this.tabButtonContainer.scrollWidth > this.tabButtonContainer.offsetWidth) {\n const oldTab = document.elementsFromPoint(e.x, e.y)[0];\n\n this.tabButtonContainer.scrollLeft += e.deltaY;\n\n const newTab = document.elementsFromPoint(e.x, e.y)[0];\n\n if (oldTab != newTab) {\n if (oldTab instanceof Tab) {\n oldTab.hideAnchors();\n }\n if (newTab instanceof Tab) {\n newTab.showAnchors();\n }\n }\n\n e.preventDefault();\n }\n });\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n // prettier-ignore\n public render() {\n return html`\n <div class=\"root\">\n ${!this.vertical && this.showLeftScrollButton ? html`\n <div class=\"scroll-button left\" @pointerdown=\"${() => {\n this.tabButtonContainer.scrollLeft -= SCROLL_STEP;\n }}\">\n <div class=\"ripple\"></div>\n <svg><g><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path></g></svg>\n </div>` : \"\"}\n <div class=\"tab-button-container\" @scroll=\"${this.updateScrollButtonVisibility}\">\n <slot></slot>\n ${this.noBar ? \"\" : html` <div class=\"slider\"></div>`}\n </div>\n ${!this.vertical && this.showRightScrollButton ? html`\n <div class=\"scroll-button right\" @pointerdown=\"${() => {\n this.tabButtonContainer.scrollLeft += SCROLL_STEP;\n }}\">\n <div class=\"ripple\"></div>\n <svg><g><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path></g></svg>\n </div>` : \"\"}\n </div>\n `;\n }\n\n public set selectedIndex(newValue: number) {\n if (this._selectedIndex !== newValue) {\n this.focusedIndex = newValue;\n this._selectedIndex = newValue;\n this.updateSelectionState();\n }\n }\n\n public get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n private updateSelectionState(): void {\n if (this.tabElements) {\n this.tabElements.forEach((node: HTMLElement, ind: number) => {\n if (ind === this._selectedIndex) {\n (node as Tab).selected = true;\n if (this.slider) {\n window.requestAnimationFrame(() => {\n let offsetLeft = node.offsetLeft;\n let offsetTop = node.offsetTop;\n\n if (node.offsetParent != this._tabButtonContainer) {\n offsetLeft -= this._tabButtonContainer.offsetLeft;\n offsetTop -= this._tabButtonContainer.offsetTop;\n }\n\n const slider = this.slider;\n if (this.vertical) {\n slider.style.height = node.offsetHeight + \"px\";\n slider.style.transform = `translateY(${offsetTop}px)`;\n } else {\n slider.style.width = node.offsetWidth + \"px\";\n slider.style.transform = `translateX(${offsetLeft}px)`;\n }\n });\n }\n } else {\n (node as Tab).selected = false;\n }\n });\n }\n }\n\n public set focusedIndex(newValue: number) {\n if (this._focusedIndex !== newValue) {\n this._focusedIndex = newValue;\n this.updateFocusedState();\n }\n }\n\n public get focusedIndex(): number {\n return this._focusedIndex;\n }\n\n private updateFocusedState() {\n if (this.tabElements && this.focusedIndex >= 0 && this.focusedIndex < this.tabElements.length) {\n this.scrollToFocusedIfNeeded();\n this.tabElements[this.focusedIndex].focus();\n }\n }\n\n private get slider(): HTMLElement {\n return this.shadowRoot.querySelector(\".slider\");\n }\n\n private get tabButtonContainer(): HTMLElement {\n if (!this._tabButtonContainer) {\n this._tabButtonContainer = this.shadowRoot.querySelector(\".tab-button-container\");\n }\n return this._tabButtonContainer;\n }\n\n private scrollToFocusedIfNeeded(): void {\n if (this.tabElements && this.focusedIndex >= 0 && this.focusedIndex < this.tabElements.length) {\n const selectedNode = this.tabElements[this.focusedIndex] as HTMLElement;\n let nodeLeft: number = selectedNode.offsetLeft;\n if (selectedNode.offsetParent != this._tabButtonContainer) {\n nodeLeft -= this._tabButtonContainer.offsetLeft;\n }\n const nodeWidth: number = selectedNode.offsetWidth;\n const nodeRight: number = nodeLeft + nodeWidth;\n if (\n nodeLeft > this.tabButtonContainer.scrollLeft &&\n nodeRight < this.tabButtonContainer.scrollLeft + this.tabButtonContainer.offsetWidth\n ) {\n return;\n }\n if (this.tabButtonContainer.scrollLeft < nodeLeft) {\n this.tabButtonContainer.scrollLeft = nodeRight - this.tabButtonContainer.offsetWidth;\n } else if (this.tabButtonContainer.scrollLeft + this.tabButtonContainer.offsetWidth > nodeRight) {\n this.tabButtonContainer.scrollLeft = nodeLeft;\n }\n }\n }\n\n private handleSlotChange = () => {\n this.tabElements = this.shadowRoot\n .querySelector(\"slot\")\n .assignedNodes()\n .filter((node) => node instanceof Tab) as Tab[];\n let index = 0;\n this.tabElements.forEach((tab) => {\n tab.vertical = this.vertical;\n tab.showCounter = this.showCounter;\n tab.index = index++;\n tab.addEventListener(\"focus\", this.handleTabFocus);\n tab.addEventListener(\"selection\", this.handleTabSelection);\n });\n this.updateScrollButtonVisibility();\n if (this.selectedIndex == null) {\n this._focusedIndex = 0;\n this._selectedIndex = 0;\n }\n this.updateSelectionState();\n };\n\n private handleTabFocus = (event: FocusEvent) => {\n const index = (event.target as Tab).index;\n if (this.focusedIndex !== index) {\n this._focusedIndex = index;\n this.scrollToFocusedIfNeeded();\n }\n };\n\n private handleTabSelection = (event: CustomEvent) => {\n this.selectedIndex = (event.target as Tab).index;\n this.dispatchSelectionEvent(event.detail.anchor);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"Up\":\n case \"ArrowUp\":\n case \"Left\":\n case \"ArrowLeft\":\n event.preventDefault();\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\n break;\n case \"Down\":\n case \"ArrowDown\":\n case \"Right\":\n case \"ArrowRight\":\n event.preventDefault();\n this.focusedIndex = Math.min(this.focusedIndex + 1, this.tabElements.length - 1);\n break;\n }\n };\n\n private updateScrollButtonVisibility(): void {\n this.showLeftScrollButton = this.tabButtonContainer.scrollLeft !== 0;\n this.showRightScrollButton =\n this.tabButtonContainer.scrollLeft <\n this.tabButtonContainer.scrollWidth - this.tabButtonContainer.offsetWidth;\n }\n\n private dispatchSelectionEvent(selectedAnchor?: string): void {\n this.dispatchEvent(\n new CustomEvent<ISelectionEvent>(\"selection\", {\n detail: {\n selectedTab: {\n index: this.selectedIndex,\n tabElement: this.tabElements[this.selectedIndex],\n },\n anchor: selectedAnchor,\n },\n }),\n );\n }\n\n private debounced = {};\n private debounce(id: string, actor: () => void) {\n if (this.debounced[id]) {\n return;\n }\n this.debounced[id] = true;\n requestAnimationFrame(() => {\n delete this.debounced[id];\n actor();\n });\n }\n}\n\nif (!customElements.get(TabBar.ID)) {\n customElements.define(TabBar.ID, TabBar);\n}\n"],"names":["isIE11","_Tab","LitElement","event","newValue","rippleElement","changedProperties","supportsCSS","ownerDocument","rect","css","unsafeCSS","style","html","overlayMaxHeight","selectedAnchor","element","anchor","index","createPopper","state","VirtualList","ListDataProvider","SelectionType","e","Tab","__decorateClass","property","SCROLL_STEP","_TabBar","node","tab","oldTab","newTab","ind","offsetLeft","offsetTop","slider","selectedNode","nodeLeft","nodeWidth","nodeRight","id","actor","TabBar"],"mappings":"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"}
1
+ {"version":3,"file":"tab-bar.mjs","sources":["../tab.ts","../tab-bar.ts"],"sourcesContent":["import { LitElement, html, unsafeCSS, PropertyValues, css } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { createPopper, Instance as Popper } from \"@popperjs/core\";\nimport \"@cas-smartdesign/virtual-list\";\nimport VirtualList, { ListDataProvider, SelectionType } from \"@cas-smartdesign/virtual-list\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [Tab.ID]: Tab;\n }\n}\nimport style from \"./tab-style.scss?inline\";\n\nconst isIE11 = navigator.userAgent.indexOf(\"Trident\") !== -1;\n\nexport interface ISelectionEvent {\n anchor: string;\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n selection: CustomEvent<ISelectionEvent>;\n}\n\nexport default interface Tab {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class Tab extends LitElement {\n public static readonly ID = \"sd-tab\";\n\n @property({ type: String })\n public text: string;\n @property({ type: Array })\n public anchors: string[];\n @property()\n public index: number;\n @property()\n public showCounter: boolean;\n\n @property({ type: Boolean, reflect: true, attribute: \"anchors-shown\" })\n private anchorsShown: boolean;\n\n public noInk: boolean;\n public vertical: boolean;\n\n public minimumOverlayWidth = 150;\n\n private showRipple: boolean;\n private popper: Popper;\n private list: VirtualList;\n private dataProvider: ListDataProvider;\n private _cssMathMaxSupported: boolean;\n\n get selected(): boolean {\n return this.hasAttribute(\"selected\");\n }\n\n set selected(newValue: boolean) {\n if (newValue) {\n this.setAttribute(\"selected\", \"\");\n } else {\n this.removeAttribute(\"selected\");\n if (this.shadowRoot && this.showRipple) {\n const rippleElement = this.shadowRoot.querySelector(\".ripple\") as HTMLElement;\n rippleElement.style.display = \"none\";\n this.showRipple = false;\n }\n }\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n const supportsCSS = window.CSS && window.CSS.supports;\n this._cssMathMaxSupported = supportsCSS && CSS.supports(\"max-width\", \"max(50vw)\");\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const ownerDocument = this.ownerDocument as any;\n if (ownerDocument.adoptedStyleSheets) {\n (this.shadowRoot as any).adoptedStyleSheets = [\n ...(this.shadowRoot as any).adoptedStyleSheets,\n ...ownerDocument.adoptedStyleSheets,\n ];\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n this.addEventListener(\"pointerdown\", (event: PointerEvent) => {\n if (!this.noInk && !this.showRipple) {\n this.showRipple = true;\n const rect: DOMRect = this.getBoundingClientRect();\n const rippleElement = this.shadowRoot.querySelector(\".ripple\") as HTMLElement;\n rippleElement.style.left = `${event.clientX - rect.left}px`;\n rippleElement.style.top = `${event.clientY - rect.top}px`;\n rippleElement.style.display = \"\";\n rippleElement.addEventListener(\n \"animationend\",\n () => {\n rippleElement.style.display = \"none\";\n this.showRipple = false;\n },\n { once: true },\n );\n }\n });\n this.addEventListener(\"click\", (event: MouseEvent) => {\n if (event.composedPath().indexOf(this.list) === -1) {\n this.dispatchSelectionEvent();\n event.preventDefault();\n event.stopPropagation();\n }\n });\n this.addEventListener(\"keydown\", this.handleKeyDown);\n if (!this.hasAttribute(\"tabindex\")) {\n this.setAttribute(\"tabindex\", \"0\");\n }\n }\n\n public disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hideAnchors();\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public render() {\n return html`\n <div class=\"root\" @pointerover=${this.showAnchors} @pointerdown=${this.showAnchors}>\n ${this.showCounter ? html` <span class=\"counter\">${this.index + 1}</span> ` : \"\"}\n <div class=\"text\">${this.text}</div>\n <div class=\"ripple\" style=\"display: none\"></div>\n ${this.hasAnchors\n ? html`\n <svg class=\"down-arrow\" tabindex=\"-1\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\">\n <path d=\"M13 4v2l-5 5-5-5v-2l5 5z\"></path>\n </svg>\n `\n : \"\"}\n </div>\n `;\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (this.hasAnchors) {\n const anchorTriggerKeys = this.vertical\n ? [\"Left\", \"ArrowLeft\", \"Right\", \"ArrowRight\", \"Enter\"]\n : [\"Down\", \"ArrowDown\", \"Up\", \"ArrowUp\", \"Enter\"];\n if (anchorTriggerKeys.indexOf(event.key) === -1) {\n this.hideAnchors();\n this.focus();\n } else {\n if (!this.anchorsShown) {\n this.showAnchors();\n window.requestAnimationFrame(() => {\n // IE would scroll down to bottom because the anchor list has not yet positioned there.\n this.list.focusIndex = 0;\n this.list.focus();\n\n this.updateDropdownSizes();\n });\n }\n event.preventDefault();\n event.stopPropagation();\n }\n } else if (event.key === \"Enter\") {\n this.dispatchSelectionEvent();\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private updateDropdownSizes(): void {\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const overlayMaxHeight = (viewportHeight - this.offsetHeight) * 0.5;\n Object.assign(this.list.style, {\n maxHeight: `${overlayMaxHeight}px`,\n minWidth: `${Math.max(this.offsetWidth, this.minimumOverlayWidth)}px`,\n maxWidth: this._cssMathMaxSupported\n ? `max(50vw, ${this.offsetWidth}px)`\n : Math.max((window.innerWidth || document.documentElement.clientWidth) / 2, this.offsetWidth) + \"px\",\n });\n }\n\n private handleListSelection = (event: CustomEvent) => {\n this.hideAnchors();\n event.stopPropagation();\n this.dispatchSelectionEvent(this.anchors[event.detail.index]);\n this.focus();\n };\n\n private dispatchSelectionEvent(selectedAnchor?: string): void {\n this.dispatchEvent(new CustomEvent<ISelectionEvent>(\"selection\", { detail: { anchor: selectedAnchor } }));\n }\n\n private handlePointerLeave = (event: PointerEvent) => {\n if (isIE11 || (this.list && !this.list.contains(event.target as HTMLElement))) {\n window.addEventListener(\"pointermove\", this.handlePointerMove);\n }\n };\n\n private handlePointerMove = (event: PointerEvent) => {\n if (!this.isPointerAbove(event, this) && !this.isPointerAbove(event, this.list)) {\n this.hideAnchors();\n window.removeEventListener(\"pointermove\", this.handlePointerMove);\n }\n };\n\n private isPointerAbove(event: PointerEvent, element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n return (\n rect.left <= event.clientX &&\n rect.right >= event.clientX &&\n rect.top <= event.clientY &&\n rect.bottom >= event.clientY\n );\n }\n\n public showAnchors() {\n if (!this.anchorsShown && this.hasAnchors) {\n this.root.addEventListener(\"pointerleave\", this.handlePointerLeave);\n if (!this.list) {\n this.createList();\n }\n this.dataProvider.items = this.anchors.map((anchor, index) => {\n return {\n caption: anchor,\n index,\n };\n });\n\n this.updateDropdownSizes();\n this.ownerDocument.body.appendChild(this.list);\n if (!this.popper) {\n this.popper = createPopper(this, this.list, {\n placement: this.vertical ? \"right-start\" : \"bottom-start\",\n modifiers: [\n {\n name: \"computeStyles\",\n options: {\n gpuAcceleration: !isIE11,\n },\n },\n {\n name: \"hide\",\n enabled: false,\n },\n {\n name: \"preventOverflow\",\n options: {\n padding: 0,\n },\n },\n {\n name: \"adjustWidthIfNeeded\",\n enabled: true,\n phase: \"read\",\n fn({ state }) {\n const list = state.elements.popper as VirtualList;\n list.increaseWidthOnNextRenderIfNeeded();\n },\n },\n ],\n });\n }\n\n window.requestAnimationFrame(() => {\n if (this.popper) {\n this.popper.update();\n }\n });\n\n this.anchorsShown = true;\n }\n }\n\n private createList(): void {\n this.list = document.createElement(VirtualList.ID) as VirtualList;\n this.dataProvider = new ListDataProvider();\n this.dataProvider.finalSizeIsKnown = true;\n this.dataProvider.connectList(this.list);\n this.list.classList.add(\"anchor-list\");\n this.list.tabIndex = 0;\n this.list.selectionType = SelectionType.TriggerOnly;\n this.list.addEventListener(\"selection\", this.handleListSelection);\n this.list.addEventListener(\"keydown\", (e) => {\n if (e.key == \"Escape\") {\n this.hideAnchors();\n this.focus();\n }\n });\n this.list.addEventListener(\"focusout\", () => {\n this.hideAnchors();\n });\n this.list.setAttribute(\"slot\", \"anchors\");\n this.list.itemHeight = 50;\n Object.assign(this.list.style, {\n zIndex: \"21000\",\n boxShadow: `rgba(0, 0, 0, 0.14) 0px 2px 2px 0px,\n rgba(0, 0, 0, 0.12) 0px 1px 5px 0px,\n rgba(0, 0, 0, 0.2) 0px 3px 1px -2px`,\n background: \"white\",\n overflowY: \"auto\",\n });\n }\n\n hideAnchors(): void {\n if (this.anchorsShown) {\n this.anchorsShown = false;\n this.root.removeEventListener(\"pointerleave\", this.handlePointerLeave);\n if (this.list) {\n this.list.focusIndex = -1;\n this.list.parentElement.removeChild(this.list);\n }\n }\n if (this.popper) {\n this.popper.destroy();\n this.popper = null;\n }\n }\n\n private get hasAnchors(): boolean {\n return !!(this.anchors && this.anchors.length);\n }\n\n private get root(): HTMLElement {\n if (this.shadowRoot) {\n return this.shadowRoot.querySelector(\".root\");\n }\n return null;\n }\n}\n\nVirtualList.ensureDefined();\nif (!customElements.get(Tab.ID)) {\n customElements.define(Tab.ID, Tab);\n}\n","import { LitElement, html, PropertyValues, unsafeCSS, css } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"./tab\";\nimport Tab from \"./tab\";\nexport { default as Tab } from \"./tab\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TabBar.ID]: TabBar;\n }\n}\nimport style from \"./tab-bar-style.scss?inline\";\n\nconst SCROLL_STEP = 40;\n\nexport interface ISelectionEvent {\n selectedTab: {\n index: number;\n tabElement: Tab;\n };\n anchor: string;\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n selection: CustomEvent<ISelectionEvent>;\n}\n\nexport default interface TabBar {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class TabBar extends LitElement {\n public static readonly ID = \"sd-tab-bar\";\n\n @property({ type: Boolean, reflect: true, attribute: \"no-bar\" })\n public noBar: boolean;\n @property({ type: Boolean, reflect: true, attribute: \"no-slide\" })\n public noSlide: boolean;\n @property({ type: Boolean, reflect: true })\n public vertical: boolean;\n @property({ type: Boolean, reflect: true, attribute: \"show-counter\" })\n public showCounter: boolean;\n\n public tabElements: Tab[];\n\n @property()\n private showLeftScrollButton: boolean;\n @property()\n private showRightScrollButton: boolean;\n\n private _focusedIndex: number;\n private _selectedIndex: number;\n private resizeObserver: ResizeObserver;\n private lastKnownWidth: number;\n private _tabButtonContainer: HTMLElement;\n\n static shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n public connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(() => {\n this.debounce(\"update-scroll-button-visibility\", () => {\n if (this.lastKnownWidth !== this.offsetWidth) {\n this.lastKnownWidth = this.offsetWidth;\n this.updateScrollButtonVisibility();\n }\n });\n });\n this.resizeObserver.observe(this);\n }\n\n public disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver.disconnect();\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const ownerDocument = this.ownerDocument as any;\n if (ownerDocument.adoptedStyleSheets) {\n (this.shadowRoot as any).adoptedStyleSheets = [\n ...(this.shadowRoot as any).adoptedStyleSheets,\n ...ownerDocument.adoptedStyleSheets,\n ];\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n const slot = this.shadowRoot.querySelector(\"slot\");\n slot.addEventListener(\"slotchange\", this.handleSlotChange);\n\n this.addEventListener(\"keydown\", this.handleKeyDown);\n\n this.tabButtonContainer.addEventListener(\"wheel\", (e) => {\n if (this.tabButtonContainer.scrollWidth > this.tabButtonContainer.offsetWidth) {\n const oldTab = document.elementsFromPoint(e.x, e.y)[0];\n\n this.tabButtonContainer.scrollLeft += e.deltaY;\n\n const newTab = document.elementsFromPoint(e.x, e.y)[0];\n\n if (oldTab != newTab) {\n if (oldTab instanceof Tab) {\n oldTab.hideAnchors();\n }\n if (newTab instanceof Tab) {\n newTab.showAnchors();\n }\n }\n\n e.preventDefault();\n }\n });\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n // prettier-ignore\n public render() {\n return html`\n <div class=\"root\">\n ${!this.vertical && this.showLeftScrollButton ? html`\n <div class=\"scroll-button left\" @pointerdown=\"${() => {\n this.tabButtonContainer.scrollLeft -= SCROLL_STEP;\n }}\">\n <div class=\"ripple\"></div>\n <svg><g><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path></g></svg>\n </div>` : \"\"}\n <div class=\"tab-button-container\" @scroll=\"${this.updateScrollButtonVisibility}\">\n <slot></slot>\n ${this.noBar ? \"\" : html` <div class=\"slider\"></div>`}\n </div>\n ${!this.vertical && this.showRightScrollButton ? html`\n <div class=\"scroll-button right\" @pointerdown=\"${() => {\n this.tabButtonContainer.scrollLeft += SCROLL_STEP;\n }}\">\n <div class=\"ripple\"></div>\n <svg><g><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path></g></svg>\n </div>` : \"\"}\n </div>\n `;\n }\n\n public set selectedIndex(newValue: number) {\n if (this._selectedIndex !== newValue) {\n this.focusedIndex = newValue;\n this._selectedIndex = newValue;\n this.updateSelectionState();\n }\n }\n\n public get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n private updateSelectionState(): void {\n if (this.tabElements) {\n this.tabElements.forEach((node: HTMLElement, ind: number) => {\n if (ind === this._selectedIndex) {\n (node as Tab).selected = true;\n if (this.slider) {\n window.requestAnimationFrame(() => {\n let offsetLeft = node.offsetLeft;\n let offsetTop = node.offsetTop;\n\n if (node.offsetParent != this._tabButtonContainer) {\n offsetLeft -= this._tabButtonContainer.offsetLeft;\n offsetTop -= this._tabButtonContainer.offsetTop;\n }\n\n const slider = this.slider;\n if (this.vertical) {\n slider.style.height = node.offsetHeight + \"px\";\n slider.style.transform = `translateY(${offsetTop}px)`;\n } else {\n slider.style.width = node.offsetWidth + \"px\";\n slider.style.transform = `translateX(${offsetLeft}px)`;\n }\n });\n }\n } else {\n (node as Tab).selected = false;\n }\n });\n }\n }\n\n public set focusedIndex(newValue: number) {\n if (this._focusedIndex !== newValue) {\n this._focusedIndex = newValue;\n this.updateFocusedState();\n }\n }\n\n public get focusedIndex(): number {\n return this._focusedIndex;\n }\n\n private updateFocusedState() {\n if (this.tabElements && this.focusedIndex >= 0 && this.focusedIndex < this.tabElements.length) {\n this.scrollToFocusedIfNeeded();\n this.tabElements[this.focusedIndex].focus();\n }\n }\n\n private get slider(): HTMLElement {\n return this.shadowRoot.querySelector(\".slider\");\n }\n\n private get tabButtonContainer(): HTMLElement {\n if (!this._tabButtonContainer) {\n this._tabButtonContainer = this.shadowRoot.querySelector(\".tab-button-container\");\n }\n return this._tabButtonContainer;\n }\n\n private scrollToFocusedIfNeeded(): void {\n if (this.tabElements && this.focusedIndex >= 0 && this.focusedIndex < this.tabElements.length) {\n const selectedNode = this.tabElements[this.focusedIndex] as HTMLElement;\n let nodeLeft: number = selectedNode.offsetLeft;\n if (selectedNode.offsetParent != this._tabButtonContainer) {\n nodeLeft -= this._tabButtonContainer.offsetLeft;\n }\n const nodeWidth: number = selectedNode.offsetWidth;\n const nodeRight: number = nodeLeft + nodeWidth;\n if (\n nodeLeft > this.tabButtonContainer.scrollLeft &&\n nodeRight < this.tabButtonContainer.scrollLeft + this.tabButtonContainer.offsetWidth\n ) {\n return;\n }\n if (this.tabButtonContainer.scrollLeft < nodeLeft) {\n this.tabButtonContainer.scrollLeft = nodeRight - this.tabButtonContainer.offsetWidth;\n } else if (this.tabButtonContainer.scrollLeft + this.tabButtonContainer.offsetWidth > nodeRight) {\n this.tabButtonContainer.scrollLeft = nodeLeft;\n }\n }\n }\n\n private handleSlotChange = () => {\n this.tabElements = this.shadowRoot\n .querySelector(\"slot\")\n .assignedNodes()\n .filter((node) => node instanceof Tab) as Tab[];\n let index = 0;\n this.tabElements.forEach((tab) => {\n tab.vertical = this.vertical;\n tab.showCounter = this.showCounter;\n tab.index = index++;\n tab.addEventListener(\"focus\", this.handleTabFocus);\n tab.addEventListener(\"selection\", this.handleTabSelection);\n });\n this.updateScrollButtonVisibility();\n if (this.selectedIndex == null) {\n this._focusedIndex = 0;\n this._selectedIndex = 0;\n }\n this.updateSelectionState();\n };\n\n private handleTabFocus = (event: FocusEvent) => {\n const index = (event.target as Tab).index;\n if (this.focusedIndex !== index) {\n this._focusedIndex = index;\n this.scrollToFocusedIfNeeded();\n }\n };\n\n private handleTabSelection = (event: CustomEvent) => {\n this.selectedIndex = (event.target as Tab).index;\n this.dispatchSelectionEvent(event.detail.anchor);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"Up\":\n case \"ArrowUp\":\n case \"Left\":\n case \"ArrowLeft\":\n event.preventDefault();\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\n break;\n case \"Down\":\n case \"ArrowDown\":\n case \"Right\":\n case \"ArrowRight\":\n event.preventDefault();\n this.focusedIndex = Math.min(this.focusedIndex + 1, this.tabElements.length - 1);\n break;\n }\n };\n\n private updateScrollButtonVisibility(): void {\n this.showLeftScrollButton = this.tabButtonContainer.scrollLeft !== 0;\n this.showRightScrollButton =\n this.tabButtonContainer.scrollLeft <\n this.tabButtonContainer.scrollWidth - this.tabButtonContainer.offsetWidth;\n }\n\n private dispatchSelectionEvent(selectedAnchor?: string): void {\n this.dispatchEvent(\n new CustomEvent<ISelectionEvent>(\"selection\", {\n detail: {\n selectedTab: {\n index: this.selectedIndex,\n tabElement: this.tabElements[this.selectedIndex],\n },\n anchor: selectedAnchor,\n },\n }),\n );\n }\n\n private debounced = {};\n private debounce(id: string, actor: () => void) {\n if (this.debounced[id]) {\n return;\n }\n this.debounced[id] = true;\n requestAnimationFrame(() => {\n delete this.debounced[id];\n actor();\n });\n }\n}\n\nif (!customElements.get(TabBar.ID)) {\n customElements.define(TabBar.ID, TabBar);\n}\n"],"names":["isIE11","_Tab","LitElement","event","newValue","rippleElement","changedProperties","supportsCSS","ownerDocument","rect","css","unsafeCSS","style","html","overlayMaxHeight","selectedAnchor","element","anchor","index","createPopper","state","VirtualList","ListDataProvider","SelectionType","e","Tab","__decorateClass","property","SCROLL_STEP","_TabBar","node","tab","oldTab","newTab","ind","offsetLeft","offsetTop","slider","selectedNode","nodeLeft","nodeWidth","nodeRight","id","actor","TabBar"],"mappings":"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"}
@@ -1,20 +1,25 @@
1
1
  {
2
- "@cypress/vite-dev-server@5.0.7": {
2
+ "@cypress/vite-dev-server@7.0.0": {
3
3
  "licenses": "MIT",
4
4
  "repository": "https://github.com/cypress-io/cypress",
5
5
  "licenseUrl": "https://github.com/cypress-io/cypress/tree/develop/npm/vite-dev-server#readme"
6
6
  },
7
+ "@eslint/js@9.34.0": {
8
+ "licenses": "MIT",
9
+ "repository": "https://github.com/eslint/eslint",
10
+ "licenseUrl": "https://github.com/eslint/eslint/raw/HEAD/LICENSE"
11
+ },
7
12
  "@popperjs/core@2.11.8": {
8
13
  "licenses": "MIT",
9
14
  "repository": "https://github.com/popperjs/popper-core",
10
15
  "licenseUrl": "https://github.com/popperjs/popper-core/raw/HEAD/LICENSE.md"
11
16
  },
12
- "@rollup/plugin-node-resolve@15.2.3": {
17
+ "@rollup/plugin-node-resolve@16.0.1": {
13
18
  "licenses": "MIT",
14
19
  "repository": "https://github.com/rollup/plugins",
15
20
  "licenseUrl": "https://github.com/rollup/plugins/raw/HEAD/LICENSE"
16
21
  },
17
- "@types/node@20.10.6": {
22
+ "@types/node@24.3.0": {
18
23
  "licenses": "MIT",
19
24
  "repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
20
25
  "licenseUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/raw/HEAD/LICENSE"
@@ -24,47 +29,47 @@
24
29
  "repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
25
30
  "licenseUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/raw/HEAD/LICENSE"
26
31
  },
27
- "@typescript-eslint/eslint-plugin@6.17.0": {
32
+ "@typescript-eslint/eslint-plugin@8.41.0": {
28
33
  "licenses": "MIT",
29
34
  "repository": "https://github.com/typescript-eslint/typescript-eslint",
30
35
  "licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
31
36
  },
32
- "@typescript-eslint/parser@6.17.0": {
33
- "licenses": "BSD-2-Clause",
37
+ "@typescript-eslint/parser@8.41.0": {
38
+ "licenses": "MIT",
34
39
  "repository": "https://github.com/typescript-eslint/typescript-eslint",
35
40
  "licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
36
41
  },
37
- "@vitest/coverage-v8@1.1.1": {
42
+ "@vitest/coverage-v8@3.2.4": {
38
43
  "licenses": "MIT",
39
44
  "repository": "https://github.com/vitest-dev/vitest",
40
45
  "licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE"
41
46
  },
42
- "@vitest/ui@1.1.1": {
47
+ "@vitest/ui@3.2.4": {
43
48
  "licenses": "MIT",
44
49
  "repository": "https://github.com/vitest-dev/vitest",
45
50
  "licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE"
46
51
  },
47
- "axe-core@4.8.3": {
52
+ "axe-core@4.10.3": {
48
53
  "licenses": "MPL-2.0",
49
54
  "repository": "https://github.com/dequelabs/axe-core",
50
55
  "licenseUrl": "https://github.com/dequelabs/axe-core/raw/HEAD/LICENSE"
51
56
  },
52
- "cypress-axe@1.5.0": {
57
+ "cypress-axe@1.7.0": {
53
58
  "licenses": "MIT",
54
59
  "repository": "https://github.com/component-driven/cypress-axe",
55
60
  "licenseUrl": "https://github.com/component-driven/cypress-axe/raw/HEAD/License.md"
56
61
  },
57
- "cypress-real-events@1.13.0": {
58
- "licenses": "MIT",
59
- "repository": "https://github.com/dmtrKovalenko/cypress-real-events",
60
- "licenseUrl": "https://github.com/dmtrKovalenko/cypress-real-events"
61
- },
62
- "cypress@13.6.2": {
62
+ "cypress@15.0.0": {
63
63
  "licenses": "MIT",
64
64
  "repository": "https://github.com/cypress-io/cypress",
65
65
  "licenseUrl": "https://cypress.io"
66
66
  },
67
- "esbuild@0.19.11": {
67
+ "d3-color@3.1.0": {
68
+ "licenses": "ISC",
69
+ "repository": "https://github.com/d3/d3-color",
70
+ "licenseUrl": "https://github.com/d3/d3-color/raw/HEAD/LICENSE"
71
+ },
72
+ "esbuild@0.25.9": {
68
73
  "licenses": "MIT",
69
74
  "repository": "https://github.com/evanw/esbuild",
70
75
  "licenseUrl": "https://github.com/evanw/esbuild/raw/HEAD/LICENSE.md"
@@ -74,57 +79,62 @@
74
79
  "repository": "https://github.com/google/eslint-config-google",
75
80
  "licenseUrl": "https://github.com/google/eslint-config-google/raw/HEAD/LICENSE"
76
81
  },
77
- "eslint-config-prettier@9.1.0": {
82
+ "eslint-config-prettier@10.1.8": {
78
83
  "licenses": "MIT",
79
84
  "repository": "https://github.com/prettier/eslint-config-prettier",
80
85
  "licenseUrl": "https://github.com/prettier/eslint-config-prettier/raw/HEAD/LICENSE"
81
86
  },
82
- "eslint@8.56.0": {
87
+ "eslint@9.34.0": {
83
88
  "licenses": "MIT",
84
89
  "repository": "https://github.com/eslint/eslint",
85
90
  "licenseUrl": "https://github.com/eslint/eslint/raw/HEAD/LICENSE"
86
91
  },
87
- "github-markdown-css@5.5.0": {
92
+ "github-markdown-css@5.8.1": {
88
93
  "licenses": "MIT",
89
94
  "repository": "https://github.com/sindresorhus/github-markdown-css",
90
95
  "licenseUrl": "https://github.com/sindresorhus/github-markdown-css/raw/HEAD/license"
91
96
  },
92
- "highlight.js@11.9.0": {
97
+ "highlight.js@11.11.1": {
93
98
  "licenses": "BSD-3-Clause",
94
99
  "repository": "https://github.com/highlightjs/highlight.js",
95
100
  "licenseUrl": "https://github.com/highlightjs/highlight.js/raw/HEAD/LICENSE"
96
101
  },
97
- "junit-report-builder@3.1.0": {
102
+ "junit-report-builder@5.1.1": {
98
103
  "licenses": "MIT",
99
104
  "repository": "https://github.com/davidparsson/junit-report-builder",
100
105
  "licenseUrl": "https://github.com/davidparsson/junit-report-builder/raw/HEAD/LICENSE"
101
106
  },
102
- "lint-staged@15.2.0": {
107
+ "lint-staged@16.1.5": {
103
108
  "licenses": "MIT",
104
- "repository": "https://github.com/okonet/lint-staged",
105
- "licenseUrl": "https://github.com/okonet/lint-staged/raw/HEAD/LICENSE"
109
+ "repository": "https://github.com/lint-staged/lint-staged",
110
+ "licenseUrl": "https://github.com/lint-staged/lint-staged/raw/HEAD/LICENSE"
111
+ },
112
+ "lit-html@3.3.1": {
113
+ "licenses": "BSD-3-Clause",
114
+ "repository": "https://github.com/lit/lit",
115
+ "licenseUrl": "https://github.com/lit/lit/raw/HEAD/LICENSE"
106
116
  },
107
- "lit@2.8.0": {
117
+ "lit@3.3.1": {
108
118
  "licenses": "BSD-3-Clause",
109
119
  "repository": "https://github.com/lit/lit",
110
120
  "licenseUrl": "https://github.com/lit/lit/raw/HEAD/LICENSE"
111
121
  },
112
- "marked@11.1.1": {
122
+ "marked@16.2.1": {
113
123
  "licenses": "MIT",
114
124
  "repository": "https://github.com/markedjs/marked",
115
125
  "licenseUrl": "https://github.com/markedjs/marked/raw/HEAD/LICENSE.md"
116
126
  },
117
- "postcss-prefix-selector@1.16.0": {
127
+ "postcss-prefix-selector@2.1.1": {
118
128
  "licenses": "MIT",
119
129
  "repository": "https://github.com/RadValentin/postcss-prefix-selector",
120
130
  "licenseUrl": "https://github.com/RadValentin/postcss-prefix-selector/raw/HEAD/LICENSE"
121
131
  },
122
- "postcss@8.4.32": {
132
+ "postcss@8.5.6": {
123
133
  "licenses": "MIT",
124
134
  "repository": "https://github.com/postcss/postcss",
125
135
  "licenseUrl": "https://github.com/postcss/postcss/raw/HEAD/LICENSE"
126
136
  },
127
- "prettier@3.1.1": {
137
+ "prettier@3.6.2": {
128
138
  "licenses": "MIT",
129
139
  "repository": "https://github.com/prettier/prettier",
130
140
  "licenseUrl": "https://github.com/prettier/prettier/raw/HEAD/LICENSE"
@@ -134,62 +144,67 @@
134
144
  "repository": "https://github.com/sindresorhus/resolve-pkg",
135
145
  "licenseUrl": "https://github.com/sindresorhus/resolve-pkg/raw/HEAD/license"
136
146
  },
137
- "sass@1.69.6": {
147
+ "sass@1.91.0": {
138
148
  "licenses": "MIT",
139
149
  "repository": "https://github.com/sass/dart-sass",
140
150
  "licenseUrl": "https://github.com/sass/dart-sass/raw/HEAD/LICENSE"
141
151
  },
142
- "stylelint-config-recommended-scss@14.0.0": {
152
+ "stylelint-config-recommended-scss@16.0.0": {
143
153
  "licenses": "MIT",
144
154
  "repository": "https://github.com/stylelint-scss/stylelint-config-recommended-scss",
145
155
  "licenseUrl": "https://github.com/stylelint-scss/stylelint-config-recommended-scss/raw/HEAD/LICENSE"
146
156
  },
147
- "stylelint-config-standard@36.0.0": {
157
+ "stylelint-config-standard@39.0.0": {
148
158
  "licenses": "MIT",
149
159
  "repository": "https://github.com/stylelint/stylelint-config-standard",
150
160
  "licenseUrl": "https://github.com/stylelint/stylelint-config-standard/raw/HEAD/LICENSE"
151
161
  },
152
- "stylelint-scss@6.0.0": {
162
+ "stylelint-scss@6.12.1": {
153
163
  "licenses": "MIT",
154
164
  "repository": "https://github.com/stylelint-scss/stylelint-scss",
155
165
  "licenseUrl": "https://github.com/stylelint-scss/stylelint-scss/raw/HEAD/LICENSE"
156
166
  },
157
- "stylelint@16.1.0": {
167
+ "stylelint@16.23.1": {
158
168
  "licenses": "MIT",
159
169
  "repository": "https://github.com/stylelint/stylelint",
160
170
  "licenseUrl": "https://github.com/stylelint/stylelint/raw/HEAD/LICENSE"
161
171
  },
162
- "tsup@8.0.1": {
172
+ "tsup@8.5.0": {
163
173
  "licenses": "MIT",
164
174
  "repository": "https://github.com/egoist/tsup",
165
175
  "licenseUrl": "https://github.com/egoist/tsup/raw/HEAD/LICENSE"
166
176
  },
167
- "turbo@1.11.2": {
168
- "licenses": "MPL-2.0",
169
- "repository": "https://github.com/vercel/turbo",
170
- "licenseUrl": "https://github.com/vercel/turbo/raw/HEAD/LICENSE"
177
+ "turbo@2.5.6": {
178
+ "licenses": "MIT",
179
+ "repository": "https://github.com/vercel/turborepo",
180
+ "licenseUrl": "https://github.com/vercel/turborepo/raw/HEAD/LICENSE"
181
+ },
182
+ "typescript-eslint@8.41.0": {
183
+ "licenses": "MIT",
184
+ "repository": "https://github.com/typescript-eslint/typescript-eslint",
185
+ "licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
171
186
  },
172
- "typescript@5.3.3": {
187
+ "typescript@5.9.2": {
173
188
  "licenses": "Apache-2.0",
174
- "repository": "https://github.com/Microsoft/TypeScript",
175
- "licenseUrl": "https://github.com/Microsoft/TypeScript/raw/HEAD/LICENSE.txt"
189
+ "repository": "https://github.com/microsoft/TypeScript",
190
+ "licenseUrl": "https://github.com/microsoft/TypeScript/raw/HEAD/LICENSE.txt"
176
191
  },
177
- "vite-tsconfig-paths@4.2.3": {
192
+ "vite-tsconfig-paths@5.1.4": {
178
193
  "licenses": "MIT",
179
194
  "repository": "https://github.com/aleclarson/vite-tsconfig-paths",
180
195
  "licenseUrl": "https://github.com/aleclarson/vite-tsconfig-paths/raw/HEAD/LICENSE"
181
196
  },
182
- "vite@5.0.10": {
197
+ "vite@7.1.3": {
183
198
  "licenses": "MIT",
184
199
  "repository": "https://github.com/vitejs/vite",
185
200
  "licenseUrl": "https://github.com/vitejs/vite/raw/HEAD/LICENSE.md"
186
201
  },
187
- "vitest@1.1.1": {
202
+ "vitest@3.2.4": {
188
203
  "licenses": "MIT",
189
204
  "repository": "https://github.com/vitest-dev/vitest",
190
205
  "licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE.md"
191
206
  },
192
- "yargs@17.7.2": {
207
+ "yargs@18.0.0": {
193
208
  "licenses": "MIT",
194
209
  "repository": "https://github.com/yargs/yargs",
195
210
  "licenseUrl": "https://github.com/yargs/yargs/raw/HEAD/LICENSE"