@cas-smartdesign/list 6.5.3 → 7.0.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/list.d.ts CHANGED
@@ -9,7 +9,7 @@ export type SelectionType = "trigger-only" | "single" | "multi";
9
9
  export type ISelectionEvent = {
10
10
  index: number;
11
11
  selected: boolean;
12
- hasModifier: boolean;
12
+ originalEvent: Event;
13
13
  };
14
14
  export interface CustomEventMap extends BaseCustomEventMap {
15
15
  selection: CustomEvent<ISelectionEvent>;
package/dist/list.mjs CHANGED
@@ -23,7 +23,7 @@ const f = `<style>
23
23
  box-sizing: border-box;
24
24
  }
25
25
 
26
- .container ::slotted(:not(:last-of-type)) {
26
+ .container ::slotted(:not(:last-child)) {
27
27
  border-bottom: 1px solid #d9d9d9;
28
28
  }
29
29
  </style>
@@ -56,7 +56,7 @@ const r = class r extends h {
56
56
  case "Enter":
57
57
  case "Space":
58
58
  case " ":
59
- this.handleSelection(this.focusIndex, t.metaKey || t.ctrlKey);
59
+ this.handleSelection(this.focusIndex, t);
60
60
  break;
61
61
  case "End":
62
62
  case "PageDown":
@@ -226,10 +226,7 @@ const r = class r extends h {
226
226
  })) : (this._focusObserverCleanupTasks.forEach((t) => t.call(this)), this._focusObserverCleanupTasks = [], this.removeAttribute("aria-activedescendant"));
227
227
  }
228
228
  handleItemClick(e, t) {
229
- if (e.button !== null) {
230
- const s = e.type == "auxclick" && e.button == 1 || e.metaKey || e.ctrlKey;
231
- (e.button == 0 || e.button == 1) && this.handleSelection(t, s);
232
- }
229
+ e.button !== null && (e.button == 0 || e.button == 1) && this.handleSelection(t, e);
233
230
  }
234
231
  handleSelection(e, t) {
235
232
  const s = this.getListItem(e);
@@ -241,7 +238,7 @@ const r = class r extends h {
241
238
  detail: {
242
239
  index: e,
243
240
  selected: this.selectionType == "trigger-only" || !i,
244
- hasModifier: t
241
+ originalEvent: t
245
242
  },
246
243
  bubbles: !0,
247
244
  composed: !0
package/dist/list.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","sources":["../list.html?raw","../list.ts"],"sourcesContent":["export default \"<style>\\n\\t:host {\\n\\t\\tbackground-color: var(--sd-list-base-background-color, white);\\n\\t}\\n\\n\\t.container {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t}\\n\\n\\t:host(:focus) {\\n\\t\\toutline: none;\\n\\t}\\n\\n\\t:host(:focus-visible) ::slotted([focused]) {\\n\\t\\tbox-shadow: 0 0 0 1px #1467ba inset;\\n\\t}\\n\\n\\t.container ::slotted(*) {\\n\\t\\tdisplay: block;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\n\\t.container ::slotted(:not(:last-of-type)) {\\n\\t\\tborder-bottom: 1px solid #d9d9d9;\\n\\t}\\n</style>\\n\\n<div class=\\\"container\\\">\\n\\t<slot name=\\\"items\\\"></slot>\\n\\t<slot id=\\\"default-slot\\\"></slot>\\n</div>\\n\"","import { ElementBase, CustomEventMap as BaseCustomEventMap } from \"@cas-smartdesign/element-base\";\nimport ListItem, { generator } from \"@cas-smartdesign/list-item\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [List.ID]: List;\n }\n}\n\nimport { default as htmlTemplate } from \"./list.html?raw\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemGenerator = (data: any, index: number) => HTMLElement;\nexport type SelectionType = \"trigger-only\" | \"single\" | \"multi\";\n\nlet idCounter = 0;\n\nexport type ISelectionEvent = {\n index: number;\n selected: boolean;\n hasModifier: boolean;\n};\n\nexport interface CustomEventMap extends BaseCustomEventMap {\n selection: CustomEvent<ISelectionEvent>;\n}\n\nexport default interface List {\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 List extends ElementBase {\n public static readonly ID = \"sd-list\";\n public static ensureDefined = (): void => {\n ListItem.ensureDefined();\n if (!customElements.get(List.ID)) {\n customElements.define(List.ID, List);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _items: any[] = [];\n private _selectedIndexes: number[] = [];\n private _itemGenerator: ItemGenerator = generator;\n private _fallbackId: string;\n private _focusObserver: IntersectionObserver;\n private _focusObserverCleanupTasks: (() => void)[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get items(): any[] {\n return this._items;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set items(value: any[]) {\n this._items = value;\n this.render();\n }\n\n public get itemGenerator(): ItemGenerator {\n return this._itemGenerator;\n }\n\n public set itemGenerator(value: ItemGenerator) {\n this._itemGenerator = value;\n this.render();\n }\n\n public get selectionType(): SelectionType {\n return this.getAttribute(\"selection-type\") as SelectionType;\n }\n\n public set selectionType(type: SelectionType) {\n if (type) {\n this.setAttribute(\"selection-type\", type);\n } else {\n this.removeAttribute(\"selection-type\");\n }\n }\n\n public get focusIndex(): number {\n return this.hasAttribute(\"focus-index\") ? Number(this.getAttribute(\"focus-index\")) : -1;\n }\n\n public set focusIndex(index: number) {\n if (0 <= index && index < this.getListItems.length) {\n this.setAttribute(\"focus-index\", index.toString());\n } else {\n this.removeAttribute(\"focus-index\");\n }\n }\n\n public get focusTarget(): boolean {\n return this.hasAttribute(\"focus-target\");\n }\n\n public set focusTarget(value: boolean) {\n this.toggleAttribute(\"focus-target\", value);\n }\n\n public getListItem(index: number): HTMLElement | null {\n if (this.shadowRoot) {\n return this.getListItems[index];\n }\n return null;\n }\n\n public get getListItems(): Array<HTMLElement> {\n return Array.prototype.slice.call(this.children).filter((child) => !this.isSeparator(child));\n }\n\n public get selectedIndexes(): number[] {\n return this._selectedIndexes;\n }\n\n public set selectedIndexes(indexes: number[]) {\n const prevIndexes = this._selectedIndexes || [];\n this._selectedIndexes = indexes || [];\n prevIndexes\n .filter((index) => !this._selectedIndexes.includes(index))\n .forEach((index) => {\n this.setSelectedAttr(this.getListItem(index), false);\n });\n this._selectedIndexes\n .filter((index) => !prevIndexes.includes(index))\n .forEach((index) => {\n this.setSelectedAttr(this.getListItem(index), true);\n });\n }\n\n static get observedAttributes(): string[] {\n return [\"focus-index\", \"focus-target\"];\n }\n\n is(): string {\n return List.ID;\n }\n\n protected template(): HTMLTemplateElement {\n const template = document.createElement(\"template\");\n template.innerHTML = htmlTemplate;\n return template;\n }\n\n constructor() {\n super();\n this._fallbackId = List.ID + \"_\" + idCounter++;\n this.addEventListener(\"pointerup\", (event) => {\n this.focusIndex = this.getListItems.indexOf(event.target as HTMLElement);\n this.updateFocusedElement();\n });\n this.addEventListener(\"focus\", () => {\n if (this.matches(\":focus-visible\")) {\n if (this.focusIndex == -1) {\n if (this.selectedIndexes) {\n this.focusIndex = this.selectedIndexes[0];\n }\n if (this.focusIndex == -1 && this.childElementCount > 0) {\n this.focusIndex = 0;\n }\n } else {\n this.updateFocusedElement();\n }\n }\n });\n this.addEventListener(\"blur\", () => this.removeFocusedItemAttributes());\n\n const observerOptions = {\n root: null,\n rootMargin: \"0px\",\n threshold: [0.0, 1.0],\n };\n this._focusObserver = new IntersectionObserver((x) => this.focusIntersectionCallback(x, this), observerOptions);\n }\n\n private removeFocusedItemAttributes() {\n if (this.focusIndex != -1) {\n const focusedElement = this.getListItem(this.focusIndex);\n if (focusedElement) {\n focusedElement.removeAttribute(\"focused\");\n this._focusObserverCleanupTasks.forEach((x) => x.call(this));\n this._focusObserverCleanupTasks = [];\n this.removeAttribute(\"aria-activedescendant\");\n }\n }\n }\n\n public connectedCallback(): void {\n super.connectedCallback();\n this.defaultSlot.addEventListener(\"slotchange\", this.onDefaultSlotChange);\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"listbox\");\n }\n if (!this.id) {\n this.id = this._fallbackId;\n }\n\n this.render();\n this.addEventListener(\"keydown\", this.handleKeyDown);\n\n if (!this.selectionType) {\n this.selectionType = \"trigger-only\";\n }\n }\n\n private onDefaultSlotChange = () => {\n let index = 0;\n this.defaultSlot.assignedElements().forEach((item: HTMLElement) => {\n if (!this.isSeparator(item)) {\n this.initListItem(item, index++);\n }\n });\n this.updateFocusedElement();\n };\n\n private get defaultSlot(): HTMLSlotElement {\n return this.shadowRoot.querySelector(\"#default-slot\");\n }\n\n private isSeparator(element: Element): boolean {\n return \"HR\" == element.tagName || element.getAttribute(\"role\") == \"separator\";\n }\n\n public attributeChangedCallback(name: string, oldValue: unknown, _newValue: unknown): void {\n if (name === \"focus-index\") {\n const lastFocusedElement = this.getListItem(oldValue as number);\n if (lastFocusedElement) {\n lastFocusedElement.removeAttribute(\"focused\");\n }\n this.updateFocusedElement();\n } else if (name === \"focus-target\") {\n if (this.focusTarget) {\n this.updateFocusedElement();\n } else if (document.activeElement != this) {\n this.removeFocusedItemAttributes();\n }\n }\n }\n\n public increaseWidthIfNeeded() {\n window.requestAnimationFrame(() => {\n let remainingWidth = Number.MAX_SAFE_INTEGER;\n const maxWidth = getComputedStyle(this).maxWidth;\n const offsetWidth = this.offsetWidth;\n if (maxWidth.endsWith(\"px\")) {\n remainingWidth = Number.parseInt(maxWidth) - offsetWidth;\n }\n const styleWidth = this.style.width;\n if (remainingWidth == 0 || (styleWidth.endsWith(\"px\") && offsetWidth < Number.parseInt(styleWidth))) {\n this.enableLineClampOnItemsIfNeeded();\n } else {\n const missingWidths = [...Array.from(this.children).filter((child) => child.slot === \"items\")].map(\n (item) => {\n if (item instanceof ListItem) {\n item.enableLineClamp = false;\n const missingWidthForTexts = item.missingWidthForTexts;\n if (missingWidthForTexts > remainingWidth) {\n item.enableLineClamp = true;\n }\n return missingWidthForTexts;\n }\n },\n );\n const additionalWidth = Math.max(...missingWidths);\n if (additionalWidth > 0) {\n const requiredWidth = offsetWidth + additionalWidth;\n this.style.width = `${requiredWidth}px`;\n if (this.offsetWidth < requiredWidth) {\n this.enableLineClampOnItemsIfNeeded();\n }\n }\n }\n });\n }\n\n private enableLineClampOnItemsIfNeeded() {\n Array.from(this.children)\n .filter((child) => child.slot === \"items\")\n .forEach((item) => {\n if (item instanceof ListItem) {\n item.enableLineClamp = item.enableLineClamp || item.missingWidthForTexts > 0;\n }\n });\n }\n\n private render(): void {\n if (!this.isConnected || !this.items) {\n return;\n }\n Array.from(this.children)\n .filter((child) => child.slot === \"items\")\n .forEach((child) => child.remove());\n\n const fragment = document.createDocumentFragment();\n let indexOfRealItems = 0;\n this.items.forEach((item, index) => {\n const itemElement = this.itemGenerator(item, index);\n\n if (!this.isSeparator(itemElement)) {\n this.initListItem(itemElement, indexOfRealItems++);\n }\n\n itemElement.slot = \"items\";\n fragment.appendChild(itemElement);\n });\n this.appendChild(fragment);\n\n this.updateFocusedElement();\n }\n\n private initListItem(item: HTMLElement, index: number): void {\n this.setSelectedAttr(item, this.selectedIndexes.includes(index));\n item.addEventListener(\"click\", (event) => {\n this.handleItemClick(event, index);\n });\n item.addEventListener(\"mousedown\", (event) => {\n if (event.button == 1) {\n event.preventDefault();\n }\n });\n item.addEventListener(\"auxclick\", (event) => {\n this.handleItemClick(event, index);\n });\n if (!item.id || item.id.startsWith(this.id + \"_item_\")) {\n item.id = this.id + \"_item_\" + index;\n }\n }\n\n private focusIntersectionCallback(entries: IntersectionObserverEntry[], list: this) {\n entries.forEach((entry) => {\n const element = entry.target;\n\n if (!entry.isIntersecting || entry.intersectionRatio < 1) {\n element.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n list._focusObserver.unobserve(element);\n }\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n let shouldPrevent = true;\n const itemCount = this.getListItems.length;\n switch (event.key) {\n case \"ArrowDown\":\n case \"Down\":\n this.focusIndex = (this.focusIndex + 1) % itemCount;\n break;\n case \"ArrowUp\":\n case \"Up\":\n this.focusIndex = (this.focusIndex - 1 + itemCount) % itemCount;\n break;\n case \"Enter\":\n case \"Space\":\n case \" \":\n this.handleSelection(this.focusIndex, event.metaKey || event.ctrlKey);\n break;\n case \"End\":\n case \"PageDown\":\n this.focusIndex = this.items.length - 1;\n break;\n case \"Home\":\n case \"PageUp\":\n this.focusIndex = 0;\n break;\n default:\n shouldPrevent = false;\n break;\n }\n if (shouldPrevent) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private updateFocusedElement(): void {\n const focusedElement = this.getListItem(this.focusIndex);\n if (focusedElement && (this.focusTarget || this.matches(\":focus\"))) {\n focusedElement.setAttribute(\"focused\", \"\");\n this.setAttribute(\"aria-activedescendant\", focusedElement.id);\n this._focusObserver.observe(focusedElement);\n this._focusObserverCleanupTasks.push(() => {\n this._focusObserver.unobserve(focusedElement);\n });\n } else {\n this._focusObserverCleanupTasks.forEach((x) => x.call(this));\n this._focusObserverCleanupTasks = [];\n this.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n private handleItemClick(event: MouseEvent, index: number): void {\n if (event.button !== null) {\n const hasModifier = (event.type == \"auxclick\" && event.button == 1) || event.metaKey || event.ctrlKey;\n if (event.button == 0 || event.button == 1) {\n this.handleSelection(index, hasModifier);\n }\n }\n }\n\n private handleSelection(index: number, hasModifier: boolean): void {\n const element = this.getListItem(index);\n if (element.getAttribute(\"aria-disabled\") == \"true\" || element.hasAttribute(\"disabled\")) {\n return;\n }\n const wasSelected = this.isSelected(element);\n if (this.selectionType !== \"trigger-only\") {\n if (this.selectionType === \"single\") {\n this.selectedIndexes = wasSelected ? [] : [index];\n } else {\n const newSelectedState = this.toggleSelection(element);\n if (newSelectedState) {\n this._selectedIndexes.push(index);\n } else {\n this.removeFromSelectedIndexes(index);\n }\n }\n }\n this.focusIndex = index;\n this.dispatchEvent(\n new CustomEvent<ISelectionEvent>(\"selection\", {\n detail: {\n index,\n selected: this.selectionType == \"trigger-only\" || !wasSelected,\n hasModifier,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private removeFromSelectedIndexes(indexToRemove: number) {\n const index = this._selectedIndexes.indexOf(indexToRemove);\n if (index !== -1) {\n this._selectedIndexes.splice(index, 1);\n }\n }\n\n private toggleSelection(element: Element): boolean {\n const selected = !element.hasAttribute(\"selected\");\n this.setSelectedAttr(element, selected);\n return selected;\n }\n\n private setSelectedAttr(element: Element, selected: boolean) {\n if (element) {\n if (selected) {\n element.setAttribute(\"selected\", \"\");\n } else {\n element.removeAttribute(\"selected\");\n }\n element.setAttribute(\"aria-selected\", String(selected));\n }\n }\n\n private isSelected(element: Element): boolean {\n return element.hasAttribute(\"selected\");\n }\n}\n\nList.ensureDefined();\n"],"names":["htmlTemplate","idCounter","_List","ElementBase","generator","index","item","event","shouldPrevent","itemCount","observerOptions","x","value","type","child","indexes","prevIndexes","template","focusedElement","element","name","oldValue","_newValue","lastFocusedElement","remainingWidth","maxWidth","offsetWidth","styleWidth","missingWidths","ListItem","missingWidthForTexts","additionalWidth","requiredWidth","fragment","indexOfRealItems","itemElement","entries","list","entry","hasModifier","wasSelected","indexToRemove","selected","List"],"mappings":"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"}
1
+ {"version":3,"file":"list.mjs","sources":["../list.html?raw","../list.ts"],"sourcesContent":["export default \"<style>\\n\\t:host {\\n\\t\\tbackground-color: var(--sd-list-base-background-color, white);\\n\\t}\\n\\n\\t.container {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t}\\n\\n\\t:host(:focus) {\\n\\t\\toutline: none;\\n\\t}\\n\\n\\t:host(:focus-visible) ::slotted([focused]) {\\n\\t\\tbox-shadow: 0 0 0 1px #1467ba inset;\\n\\t}\\n\\n\\t.container ::slotted(*) {\\n\\t\\tdisplay: block;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\n\\t.container ::slotted(:not(:last-child)) {\\n\\t\\tborder-bottom: 1px solid #d9d9d9;\\n\\t}\\n</style>\\n\\n<div class=\\\"container\\\">\\n\\t<slot name=\\\"items\\\"></slot>\\n\\t<slot id=\\\"default-slot\\\"></slot>\\n</div>\\n\"","import { ElementBase, CustomEventMap as BaseCustomEventMap } from \"@cas-smartdesign/element-base\";\nimport ListItem, { generator } from \"@cas-smartdesign/list-item\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [List.ID]: List;\n }\n}\n\nimport { default as htmlTemplate } from \"./list.html?raw\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemGenerator = (data: any, index: number) => HTMLElement;\nexport type SelectionType = \"trigger-only\" | \"single\" | \"multi\";\n\nlet idCounter = 0;\n\nexport type ISelectionEvent = {\n index: number;\n selected: boolean;\n originalEvent: Event;\n};\n\nexport interface CustomEventMap extends BaseCustomEventMap {\n selection: CustomEvent<ISelectionEvent>;\n}\n\nexport default interface List {\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 List extends ElementBase {\n public static readonly ID = \"sd-list\";\n public static ensureDefined = (): void => {\n ListItem.ensureDefined();\n if (!customElements.get(List.ID)) {\n customElements.define(List.ID, List);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _items: any[] = [];\n private _selectedIndexes: number[] = [];\n private _itemGenerator: ItemGenerator = generator;\n private _fallbackId: string;\n private _focusObserver: IntersectionObserver;\n private _focusObserverCleanupTasks: (() => void)[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get items(): any[] {\n return this._items;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set items(value: any[]) {\n this._items = value;\n this.render();\n }\n\n public get itemGenerator(): ItemGenerator {\n return this._itemGenerator;\n }\n\n public set itemGenerator(value: ItemGenerator) {\n this._itemGenerator = value;\n this.render();\n }\n\n public get selectionType(): SelectionType {\n return this.getAttribute(\"selection-type\") as SelectionType;\n }\n\n public set selectionType(type: SelectionType) {\n if (type) {\n this.setAttribute(\"selection-type\", type);\n } else {\n this.removeAttribute(\"selection-type\");\n }\n }\n\n public get focusIndex(): number {\n return this.hasAttribute(\"focus-index\") ? Number(this.getAttribute(\"focus-index\")) : -1;\n }\n\n public set focusIndex(index: number) {\n if (0 <= index && index < this.getListItems.length) {\n this.setAttribute(\"focus-index\", index.toString());\n } else {\n this.removeAttribute(\"focus-index\");\n }\n }\n\n public get focusTarget(): boolean {\n return this.hasAttribute(\"focus-target\");\n }\n\n public set focusTarget(value: boolean) {\n this.toggleAttribute(\"focus-target\", value);\n }\n\n public getListItem(index: number): HTMLElement | null {\n if (this.shadowRoot) {\n return this.getListItems[index];\n }\n return null;\n }\n\n public get getListItems(): Array<HTMLElement> {\n return Array.prototype.slice.call(this.children).filter((child) => !this.isSeparator(child));\n }\n\n public get selectedIndexes(): number[] {\n return this._selectedIndexes;\n }\n\n public set selectedIndexes(indexes: number[]) {\n const prevIndexes = this._selectedIndexes || [];\n this._selectedIndexes = indexes || [];\n prevIndexes\n .filter((index) => !this._selectedIndexes.includes(index))\n .forEach((index) => {\n this.setSelectedAttr(this.getListItem(index), false);\n });\n this._selectedIndexes\n .filter((index) => !prevIndexes.includes(index))\n .forEach((index) => {\n this.setSelectedAttr(this.getListItem(index), true);\n });\n }\n\n static get observedAttributes(): string[] {\n return [\"focus-index\", \"focus-target\"];\n }\n\n is(): string {\n return List.ID;\n }\n\n protected template(): HTMLTemplateElement {\n const template = document.createElement(\"template\");\n template.innerHTML = htmlTemplate;\n return template;\n }\n\n constructor() {\n super();\n this._fallbackId = List.ID + \"_\" + idCounter++;\n this.addEventListener(\"pointerup\", (event) => {\n this.focusIndex = this.getListItems.indexOf(event.target as HTMLElement);\n this.updateFocusedElement();\n });\n this.addEventListener(\"focus\", () => {\n if (this.matches(\":focus-visible\")) {\n if (this.focusIndex == -1) {\n if (this.selectedIndexes) {\n this.focusIndex = this.selectedIndexes[0];\n }\n if (this.focusIndex == -1 && this.childElementCount > 0) {\n this.focusIndex = 0;\n }\n } else {\n this.updateFocusedElement();\n }\n }\n });\n this.addEventListener(\"blur\", () => this.removeFocusedItemAttributes());\n\n const observerOptions = {\n root: null,\n rootMargin: \"0px\",\n threshold: [0.0, 1.0],\n };\n this._focusObserver = new IntersectionObserver((x) => this.focusIntersectionCallback(x, this), observerOptions);\n }\n\n private removeFocusedItemAttributes() {\n if (this.focusIndex != -1) {\n const focusedElement = this.getListItem(this.focusIndex);\n if (focusedElement) {\n focusedElement.removeAttribute(\"focused\");\n this._focusObserverCleanupTasks.forEach((x) => x.call(this));\n this._focusObserverCleanupTasks = [];\n this.removeAttribute(\"aria-activedescendant\");\n }\n }\n }\n\n public connectedCallback(): void {\n super.connectedCallback();\n this.defaultSlot.addEventListener(\"slotchange\", this.onDefaultSlotChange);\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"listbox\");\n }\n if (!this.id) {\n this.id = this._fallbackId;\n }\n\n this.render();\n this.addEventListener(\"keydown\", this.handleKeyDown);\n\n if (!this.selectionType) {\n this.selectionType = \"trigger-only\";\n }\n }\n\n private onDefaultSlotChange = () => {\n let index = 0;\n this.defaultSlot.assignedElements().forEach((item: HTMLElement) => {\n if (!this.isSeparator(item)) {\n this.initListItem(item, index++);\n }\n });\n this.updateFocusedElement();\n };\n\n private get defaultSlot(): HTMLSlotElement {\n return this.shadowRoot.querySelector(\"#default-slot\");\n }\n\n private isSeparator(element: Element): boolean {\n return \"HR\" == element.tagName || element.getAttribute(\"role\") == \"separator\";\n }\n\n public attributeChangedCallback(name: string, oldValue: unknown, _newValue: unknown): void {\n if (name === \"focus-index\") {\n const lastFocusedElement = this.getListItem(oldValue as number);\n if (lastFocusedElement) {\n lastFocusedElement.removeAttribute(\"focused\");\n }\n this.updateFocusedElement();\n } else if (name === \"focus-target\") {\n if (this.focusTarget) {\n this.updateFocusedElement();\n } else if (document.activeElement != this) {\n this.removeFocusedItemAttributes();\n }\n }\n }\n\n public increaseWidthIfNeeded() {\n window.requestAnimationFrame(() => {\n let remainingWidth = Number.MAX_SAFE_INTEGER;\n const maxWidth = getComputedStyle(this).maxWidth;\n const offsetWidth = this.offsetWidth;\n if (maxWidth.endsWith(\"px\")) {\n remainingWidth = Number.parseInt(maxWidth) - offsetWidth;\n }\n const styleWidth = this.style.width;\n if (remainingWidth == 0 || (styleWidth.endsWith(\"px\") && offsetWidth < Number.parseInt(styleWidth))) {\n this.enableLineClampOnItemsIfNeeded();\n } else {\n const missingWidths = [...Array.from(this.children).filter((child) => child.slot === \"items\")].map(\n (item) => {\n if (item instanceof ListItem) {\n item.enableLineClamp = false;\n const missingWidthForTexts = item.missingWidthForTexts;\n if (missingWidthForTexts > remainingWidth) {\n item.enableLineClamp = true;\n }\n return missingWidthForTexts;\n }\n },\n );\n const additionalWidth = Math.max(...missingWidths);\n if (additionalWidth > 0) {\n const requiredWidth = offsetWidth + additionalWidth;\n this.style.width = `${requiredWidth}px`;\n if (this.offsetWidth < requiredWidth) {\n this.enableLineClampOnItemsIfNeeded();\n }\n }\n }\n });\n }\n\n private enableLineClampOnItemsIfNeeded() {\n Array.from(this.children)\n .filter((child) => child.slot === \"items\")\n .forEach((item) => {\n if (item instanceof ListItem) {\n item.enableLineClamp = item.enableLineClamp || item.missingWidthForTexts > 0;\n }\n });\n }\n\n private render(): void {\n if (!this.isConnected || !this.items) {\n return;\n }\n Array.from(this.children)\n .filter((child) => child.slot === \"items\")\n .forEach((child) => child.remove());\n\n const fragment = document.createDocumentFragment();\n let indexOfRealItems = 0;\n this.items.forEach((item, index) => {\n const itemElement = this.itemGenerator(item, index);\n\n if (!this.isSeparator(itemElement)) {\n this.initListItem(itemElement, indexOfRealItems++);\n }\n\n itemElement.slot = \"items\";\n fragment.appendChild(itemElement);\n });\n this.appendChild(fragment);\n\n this.updateFocusedElement();\n }\n\n private initListItem(item: HTMLElement, index: number): void {\n this.setSelectedAttr(item, this.selectedIndexes.includes(index));\n item.addEventListener(\"click\", (event) => {\n this.handleItemClick(event, index);\n });\n item.addEventListener(\"mousedown\", (event) => {\n if (event.button == 1) {\n event.preventDefault();\n }\n });\n item.addEventListener(\"auxclick\", (event) => {\n this.handleItemClick(event, index);\n });\n if (!item.id || item.id.startsWith(this.id + \"_item_\")) {\n item.id = this.id + \"_item_\" + index;\n }\n }\n\n private focusIntersectionCallback(entries: IntersectionObserverEntry[], list: this) {\n entries.forEach((entry) => {\n const element = entry.target;\n\n if (!entry.isIntersecting || entry.intersectionRatio < 1) {\n element.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n list._focusObserver.unobserve(element);\n }\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n let shouldPrevent = true;\n const itemCount = this.getListItems.length;\n switch (event.key) {\n case \"ArrowDown\":\n case \"Down\":\n this.focusIndex = (this.focusIndex + 1) % itemCount;\n break;\n case \"ArrowUp\":\n case \"Up\":\n this.focusIndex = (this.focusIndex - 1 + itemCount) % itemCount;\n break;\n case \"Enter\":\n case \"Space\":\n case \" \":\n this.handleSelection(this.focusIndex, event);\n break;\n case \"End\":\n case \"PageDown\":\n this.focusIndex = this.items.length - 1;\n break;\n case \"Home\":\n case \"PageUp\":\n this.focusIndex = 0;\n break;\n default:\n shouldPrevent = false;\n break;\n }\n if (shouldPrevent) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private updateFocusedElement(): void {\n const focusedElement = this.getListItem(this.focusIndex);\n if (focusedElement && (this.focusTarget || this.matches(\":focus\"))) {\n focusedElement.setAttribute(\"focused\", \"\");\n this.setAttribute(\"aria-activedescendant\", focusedElement.id);\n this._focusObserver.observe(focusedElement);\n this._focusObserverCleanupTasks.push(() => {\n this._focusObserver.unobserve(focusedElement);\n });\n } else {\n this._focusObserverCleanupTasks.forEach((x) => x.call(this));\n this._focusObserverCleanupTasks = [];\n this.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n private handleItemClick(event: MouseEvent, index: number): void {\n if (event.button !== null && (event.button == 0 || event.button == 1)) {\n this.handleSelection(index, event);\n }\n }\n\n private handleSelection(index: number, originalEvent: Event): void {\n const element = this.getListItem(index);\n if (element.getAttribute(\"aria-disabled\") == \"true\" || element.hasAttribute(\"disabled\")) {\n return;\n }\n const wasSelected = this.isSelected(element);\n if (this.selectionType !== \"trigger-only\") {\n if (this.selectionType === \"single\") {\n this.selectedIndexes = wasSelected ? [] : [index];\n } else {\n const newSelectedState = this.toggleSelection(element);\n if (newSelectedState) {\n this._selectedIndexes.push(index);\n } else {\n this.removeFromSelectedIndexes(index);\n }\n }\n }\n this.focusIndex = index;\n this.dispatchEvent(\n new CustomEvent<ISelectionEvent>(\"selection\", {\n detail: {\n index,\n selected: this.selectionType == \"trigger-only\" || !wasSelected,\n originalEvent,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private removeFromSelectedIndexes(indexToRemove: number) {\n const index = this._selectedIndexes.indexOf(indexToRemove);\n if (index !== -1) {\n this._selectedIndexes.splice(index, 1);\n }\n }\n\n private toggleSelection(element: Element): boolean {\n const selected = !element.hasAttribute(\"selected\");\n this.setSelectedAttr(element, selected);\n return selected;\n }\n\n private setSelectedAttr(element: Element, selected: boolean) {\n if (element) {\n if (selected) {\n element.setAttribute(\"selected\", \"\");\n } else {\n element.removeAttribute(\"selected\");\n }\n element.setAttribute(\"aria-selected\", String(selected));\n }\n }\n\n private isSelected(element: Element): boolean {\n return element.hasAttribute(\"selected\");\n }\n}\n\nList.ensureDefined();\n"],"names":["htmlTemplate","idCounter","_List","ElementBase","generator","index","item","event","shouldPrevent","itemCount","observerOptions","x","value","type","child","indexes","prevIndexes","template","focusedElement","element","name","oldValue","_newValue","lastFocusedElement","remainingWidth","maxWidth","offsetWidth","styleWidth","missingWidths","ListItem","missingWidthForTexts","additionalWidth","requiredWidth","fragment","indexOfRealItems","itemElement","entries","list","entry","originalEvent","wasSelected","indexToRemove","selected","List"],"mappings":"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"}
@@ -7,52 +7,57 @@
7
7
  "@eslint/js@9.34.0": {
8
8
  "licenses": "MIT",
9
9
  "repository": "https://github.com/eslint/eslint",
10
- "licenseUrl": "https://github.com/eslint/eslint/raw/HEAD/LICENSE"
10
+ "licenseUrl": "https://unpkg.com/@eslint/js@9.34.0/LICENSE"
11
11
  },
12
12
  "@rollup/plugin-node-resolve@16.0.1": {
13
13
  "licenses": "MIT",
14
14
  "repository": "https://github.com/rollup/plugins",
15
- "licenseUrl": "https://github.com/rollup/plugins/raw/HEAD/LICENSE"
15
+ "licenseUrl": "https://unpkg.com/@rollup/plugin-node-resolve@16.0.1/LICENSE"
16
+ },
17
+ "@types/d3-color@3.1.3": {
18
+ "licenses": "MIT",
19
+ "repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
20
+ "licenseUrl": "https://unpkg.com/@types/d3-color@3.1.3/LICENSE"
16
21
  },
17
22
  "@types/node@24.3.0": {
18
23
  "licenses": "MIT",
19
24
  "repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
20
- "licenseUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/raw/HEAD/LICENSE"
25
+ "licenseUrl": "https://unpkg.com/@types/node@24.3.0/LICENSE"
21
26
  },
22
27
  "@types/postcss-prefix-selector@1.16.3": {
23
28
  "licenses": "MIT",
24
29
  "repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
25
- "licenseUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/raw/HEAD/LICENSE"
30
+ "licenseUrl": "https://unpkg.com/@types/postcss-prefix-selector@1.16.3/LICENSE"
26
31
  },
27
32
  "@typescript-eslint/eslint-plugin@8.41.0": {
28
33
  "licenses": "MIT",
29
34
  "repository": "https://github.com/typescript-eslint/typescript-eslint",
30
- "licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
35
+ "licenseUrl": "https://unpkg.com/@typescript-eslint/eslint-plugin@8.41.0/LICENSE"
31
36
  },
32
37
  "@typescript-eslint/parser@8.41.0": {
33
38
  "licenses": "MIT",
34
39
  "repository": "https://github.com/typescript-eslint/typescript-eslint",
35
- "licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
40
+ "licenseUrl": "https://unpkg.com/@typescript-eslint/parser@8.41.0/LICENSE"
36
41
  },
37
42
  "@vitest/coverage-v8@3.2.4": {
38
43
  "licenses": "MIT",
39
44
  "repository": "https://github.com/vitest-dev/vitest",
40
- "licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE"
45
+ "licenseUrl": "https://unpkg.com/@vitest/coverage-v8@3.2.4/LICENSE"
41
46
  },
42
47
  "@vitest/ui@3.2.4": {
43
48
  "licenses": "MIT",
44
49
  "repository": "https://github.com/vitest-dev/vitest",
45
- "licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE"
50
+ "licenseUrl": "https://unpkg.com/@vitest/ui@3.2.4/LICENSE"
46
51
  },
47
52
  "axe-core@4.10.3": {
48
53
  "licenses": "MPL-2.0",
49
54
  "repository": "https://github.com/dequelabs/axe-core",
50
- "licenseUrl": "https://github.com/dequelabs/axe-core/raw/HEAD/LICENSE"
55
+ "licenseUrl": "https://unpkg.com/axe-core@4.10.3/LICENSE"
51
56
  },
52
57
  "cypress-axe@1.7.0": {
53
58
  "licenses": "MIT",
54
59
  "repository": "https://github.com/component-driven/cypress-axe",
55
- "licenseUrl": "https://github.com/component-driven/cypress-axe/raw/HEAD/License.md"
60
+ "licenseUrl": "https://unpkg.com/cypress-axe@1.7.0/License.md"
56
61
  },
57
62
  "cypress@15.0.0": {
58
63
  "licenses": "MIT",
@@ -62,146 +67,146 @@
62
67
  "d3-color@3.1.0": {
63
68
  "licenses": "ISC",
64
69
  "repository": "https://github.com/d3/d3-color",
65
- "licenseUrl": "https://github.com/d3/d3-color/raw/HEAD/LICENSE"
70
+ "licenseUrl": "https://unpkg.com/d3-color@3.1.0/LICENSE"
66
71
  },
67
72
  "esbuild@0.25.9": {
68
73
  "licenses": "MIT",
69
74
  "repository": "https://github.com/evanw/esbuild",
70
- "licenseUrl": "https://github.com/evanw/esbuild/raw/HEAD/LICENSE.md"
75
+ "licenseUrl": "https://unpkg.com/esbuild@0.25.9/LICENSE.md"
71
76
  },
72
77
  "eslint-config-google@0.14.0": {
73
78
  "licenses": "Apache-2.0",
74
79
  "repository": "https://github.com/google/eslint-config-google",
75
- "licenseUrl": "https://github.com/google/eslint-config-google/raw/HEAD/LICENSE"
80
+ "licenseUrl": "https://unpkg.com/eslint-config-google@0.14.0/LICENSE"
76
81
  },
77
82
  "eslint-config-prettier@10.1.8": {
78
83
  "licenses": "MIT",
79
84
  "repository": "https://github.com/prettier/eslint-config-prettier",
80
- "licenseUrl": "https://github.com/prettier/eslint-config-prettier/raw/HEAD/LICENSE"
85
+ "licenseUrl": "https://unpkg.com/eslint-config-prettier@10.1.8/LICENSE"
81
86
  },
82
87
  "eslint@9.34.0": {
83
88
  "licenses": "MIT",
84
89
  "repository": "https://github.com/eslint/eslint",
85
- "licenseUrl": "https://github.com/eslint/eslint/raw/HEAD/LICENSE"
90
+ "licenseUrl": "https://unpkg.com/eslint@9.34.0/LICENSE"
86
91
  },
87
92
  "github-markdown-css@5.8.1": {
88
93
  "licenses": "MIT",
89
94
  "repository": "https://github.com/sindresorhus/github-markdown-css",
90
- "licenseUrl": "https://github.com/sindresorhus/github-markdown-css/raw/HEAD/license"
95
+ "licenseUrl": "https://unpkg.com/github-markdown-css@5.8.1/license"
91
96
  },
92
97
  "highlight.js@11.11.1": {
93
98
  "licenses": "BSD-3-Clause",
94
99
  "repository": "https://github.com/highlightjs/highlight.js",
95
- "licenseUrl": "https://github.com/highlightjs/highlight.js/raw/HEAD/LICENSE"
100
+ "licenseUrl": "https://unpkg.com/highlight.js@11.11.1/LICENSE"
96
101
  },
97
102
  "junit-report-builder@5.1.1": {
98
103
  "licenses": "MIT",
99
104
  "repository": "https://github.com/davidparsson/junit-report-builder",
100
- "licenseUrl": "https://github.com/davidparsson/junit-report-builder/raw/HEAD/LICENSE"
105
+ "licenseUrl": "https://unpkg.com/junit-report-builder@5.1.1/LICENSE"
101
106
  },
102
107
  "lint-staged@16.1.5": {
103
108
  "licenses": "MIT",
104
109
  "repository": "https://github.com/lint-staged/lint-staged",
105
- "licenseUrl": "https://github.com/lint-staged/lint-staged/raw/HEAD/LICENSE"
110
+ "licenseUrl": "https://unpkg.com/lint-staged@16.1.5/LICENSE"
106
111
  },
107
112
  "lit-html@3.3.1": {
108
113
  "licenses": "BSD-3-Clause",
109
114
  "repository": "https://github.com/lit/lit",
110
- "licenseUrl": "https://github.com/lit/lit/raw/HEAD/LICENSE"
115
+ "licenseUrl": "https://unpkg.com/lit-html@3.3.1/LICENSE"
111
116
  },
112
117
  "lit@3.3.1": {
113
118
  "licenses": "BSD-3-Clause",
114
119
  "repository": "https://github.com/lit/lit",
115
- "licenseUrl": "https://github.com/lit/lit/raw/HEAD/LICENSE"
120
+ "licenseUrl": "https://unpkg.com/lit@3.3.1/LICENSE"
116
121
  },
117
122
  "marked@16.2.1": {
118
123
  "licenses": "MIT",
119
124
  "repository": "https://github.com/markedjs/marked",
120
- "licenseUrl": "https://github.com/markedjs/marked/raw/HEAD/LICENSE.md"
125
+ "licenseUrl": "https://unpkg.com/marked@16.2.1/LICENSE.md"
121
126
  },
122
127
  "postcss-prefix-selector@2.1.1": {
123
128
  "licenses": "MIT",
124
129
  "repository": "https://github.com/RadValentin/postcss-prefix-selector",
125
- "licenseUrl": "https://github.com/RadValentin/postcss-prefix-selector/raw/HEAD/LICENSE"
130
+ "licenseUrl": "https://unpkg.com/postcss-prefix-selector@2.1.1/LICENSE"
126
131
  },
127
132
  "postcss@8.5.6": {
128
133
  "licenses": "MIT",
129
134
  "repository": "https://github.com/postcss/postcss",
130
- "licenseUrl": "https://github.com/postcss/postcss/raw/HEAD/LICENSE"
135
+ "licenseUrl": "https://unpkg.com/postcss@8.5.6/LICENSE"
131
136
  },
132
137
  "prettier@3.6.2": {
133
138
  "licenses": "MIT",
134
139
  "repository": "https://github.com/prettier/prettier",
135
- "licenseUrl": "https://github.com/prettier/prettier/raw/HEAD/LICENSE"
140
+ "licenseUrl": "https://unpkg.com/prettier@3.6.2/LICENSE"
136
141
  },
137
142
  "resolve-pkg@2.0.0": {
138
143
  "licenses": "MIT",
139
144
  "repository": "https://github.com/sindresorhus/resolve-pkg",
140
- "licenseUrl": "https://github.com/sindresorhus/resolve-pkg/raw/HEAD/license"
145
+ "licenseUrl": "https://unpkg.com/resolve-pkg@2.0.0/license"
141
146
  },
142
147
  "sass@1.91.0": {
143
148
  "licenses": "MIT",
144
149
  "repository": "https://github.com/sass/dart-sass",
145
- "licenseUrl": "https://github.com/sass/dart-sass/raw/HEAD/LICENSE"
150
+ "licenseUrl": "https://unpkg.com/sass@1.91.0/LICENSE"
146
151
  },
147
152
  "stylelint-config-recommended-scss@16.0.0": {
148
153
  "licenses": "MIT",
149
154
  "repository": "https://github.com/stylelint-scss/stylelint-config-recommended-scss",
150
- "licenseUrl": "https://github.com/stylelint-scss/stylelint-config-recommended-scss/raw/HEAD/LICENSE"
155
+ "licenseUrl": "https://unpkg.com/stylelint-config-recommended-scss@16.0.0/LICENSE"
151
156
  },
152
157
  "stylelint-config-standard@39.0.0": {
153
158
  "licenses": "MIT",
154
159
  "repository": "https://github.com/stylelint/stylelint-config-standard",
155
- "licenseUrl": "https://github.com/stylelint/stylelint-config-standard/raw/HEAD/LICENSE"
160
+ "licenseUrl": "https://unpkg.com/stylelint-config-standard@39.0.0/LICENSE"
156
161
  },
157
162
  "stylelint-scss@6.12.1": {
158
163
  "licenses": "MIT",
159
164
  "repository": "https://github.com/stylelint-scss/stylelint-scss",
160
- "licenseUrl": "https://github.com/stylelint-scss/stylelint-scss/raw/HEAD/LICENSE"
165
+ "licenseUrl": "https://unpkg.com/stylelint-scss@6.12.1/LICENSE"
161
166
  },
162
167
  "stylelint@16.23.1": {
163
168
  "licenses": "MIT",
164
169
  "repository": "https://github.com/stylelint/stylelint",
165
- "licenseUrl": "https://github.com/stylelint/stylelint/raw/HEAD/LICENSE"
170
+ "licenseUrl": "https://unpkg.com/stylelint@16.23.1/LICENSE"
166
171
  },
167
172
  "tsup@8.5.0": {
168
173
  "licenses": "MIT",
169
174
  "repository": "https://github.com/egoist/tsup",
170
- "licenseUrl": "https://github.com/egoist/tsup/raw/HEAD/LICENSE"
175
+ "licenseUrl": "https://unpkg.com/tsup@8.5.0/LICENSE"
171
176
  },
172
177
  "turbo@2.5.6": {
173
178
  "licenses": "MIT",
174
179
  "repository": "https://github.com/vercel/turborepo",
175
- "licenseUrl": "https://github.com/vercel/turborepo/raw/HEAD/LICENSE"
180
+ "licenseUrl": "https://unpkg.com/turbo@2.5.6/LICENSE"
176
181
  },
177
182
  "typescript-eslint@8.41.0": {
178
183
  "licenses": "MIT",
179
184
  "repository": "https://github.com/typescript-eslint/typescript-eslint",
180
- "licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
185
+ "licenseUrl": "https://unpkg.com/typescript-eslint@8.41.0/LICENSE"
181
186
  },
182
187
  "typescript@5.9.2": {
183
188
  "licenses": "Apache-2.0",
184
189
  "repository": "https://github.com/microsoft/TypeScript",
185
- "licenseUrl": "https://github.com/microsoft/TypeScript/raw/HEAD/LICENSE.txt"
190
+ "licenseUrl": "https://unpkg.com/typescript@5.9.2/LICENSE.txt"
186
191
  },
187
192
  "vite-tsconfig-paths@5.1.4": {
188
193
  "licenses": "MIT",
189
194
  "repository": "https://github.com/aleclarson/vite-tsconfig-paths",
190
- "licenseUrl": "https://github.com/aleclarson/vite-tsconfig-paths/raw/HEAD/LICENSE"
195
+ "licenseUrl": "https://unpkg.com/vite-tsconfig-paths@5.1.4/LICENSE"
191
196
  },
192
197
  "vite@7.1.3": {
193
198
  "licenses": "MIT",
194
199
  "repository": "https://github.com/vitejs/vite",
195
- "licenseUrl": "https://github.com/vitejs/vite/raw/HEAD/LICENSE.md"
200
+ "licenseUrl": "https://unpkg.com/vite@7.1.3/LICENSE.md"
196
201
  },
197
202
  "vitest@3.2.4": {
198
203
  "licenses": "MIT",
199
204
  "repository": "https://github.com/vitest-dev/vitest",
200
- "licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE.md"
205
+ "licenseUrl": "https://unpkg.com/vitest@3.2.4/LICENSE.md"
201
206
  },
202
207
  "yargs@18.0.0": {
203
208
  "licenses": "MIT",
204
209
  "repository": "https://github.com/yargs/yargs",
205
- "licenseUrl": "https://github.com/yargs/yargs/raw/HEAD/LICENSE"
210
+ "licenseUrl": "https://unpkg.com/yargs@18.0.0/LICENSE"
206
211
  }
207
212
  }
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@cas-smartdesign/list",
3
- "version": "6.5.3",
3
+ "version": "7.0.1",
4
4
  "description": "A list element with SmartDesign look and feel.",
5
5
  "main": "dist/list-with-externals.js",
6
6
  "module": "dist/list.mjs",
7
7
  "license": "SEE LICENSE IN LICENSE",
8
8
  "types": "dist/list.d.ts",
9
9
  "dependencies": {
10
- "@cas-smartdesign/list-item": "^7.4.3",
11
- "@cas-smartdesign/element-base": "^5.1.0"
10
+ "@cas-smartdesign/list-item": "^7.4.4",
11
+ "@cas-smartdesign/element-base": "^5.1.1"
12
12
  },
13
13
  "devDependencies": {
14
- "@cas-smartdesign/license-generator": "^1.8.0",
15
- "@cas-smartdesign/element-preview": "^0.3.0",
16
- "@cas-smartdesign/element-utils": "^1.2.0"
14
+ "@cas-smartdesign/element-preview": "^0.3.1",
15
+ "@cas-smartdesign/element-utils": "^1.2.1",
16
+ "@cas-smartdesign/license-generator": "^1.8.1"
17
17
  },
18
18
  "files": [
19
19
  "dist",