@cas-smartdesign/list 6.5.1 → 6.5.3

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
@@ -28,6 +28,8 @@ export default class List extends ElementBase {
28
28
  private _selectedIndexes;
29
29
  private _itemGenerator;
30
30
  private _fallbackId;
31
+ private _focusObserver;
32
+ private _focusObserverCleanupTasks;
31
33
  get items(): any[];
32
34
  set items(value: any[]);
33
35
  get itemGenerator(): ItemGenerator;
@@ -56,7 +58,7 @@ export default class List extends ElementBase {
56
58
  private enableLineClampOnItemsIfNeeded;
57
59
  private render;
58
60
  private initListItem;
59
- private ensureItemVisible;
61
+ private focusIntersectionCallback;
60
62
  private handleKeyDown;
61
63
  private updateFocusedElement;
62
64
  private handleItemClick;
package/dist/list.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ElementBase as h } from "@cas-smartdesign/element-base";
2
- import d, { generator as u } from "@cas-smartdesign/list-item";
2
+ import l, { generator as u } from "@cas-smartdesign/list-item";
3
3
  const f = `<style>
4
4
  :host {
5
5
  background-color: var(--sd-list-base-background-color, white);
@@ -34,28 +34,29 @@ const f = `<style>
34
34
  </div>
35
35
  `;
36
36
  let m = 0;
37
- const o = class o extends h {
37
+ const r = class r extends h {
38
38
  constructor() {
39
- super(), this._items = [], this._selectedIndexes = [], this._itemGenerator = u, this.onDefaultSlotChange = () => {
40
- let e = 0;
41
- this.defaultSlot.assignedElements().forEach((t) => {
42
- this.isSeparator(t) || this.initListItem(t, e++);
39
+ super(), this._items = [], this._selectedIndexes = [], this._itemGenerator = u, this._focusObserverCleanupTasks = [], this.onDefaultSlotChange = () => {
40
+ let t = 0;
41
+ this.defaultSlot.assignedElements().forEach((s) => {
42
+ this.isSeparator(s) || this.initListItem(s, t++);
43
43
  }), this.updateFocusedElement();
44
- }, this.handleKeyDown = (e) => {
45
- let t = !0;
46
- switch (e.key) {
44
+ }, this.handleKeyDown = (t) => {
45
+ let s = !0;
46
+ const i = this.getListItems.length;
47
+ switch (t.key) {
47
48
  case "ArrowDown":
48
49
  case "Down":
49
- this.focusIndex = Math.min(this.getListItems.length - 1, this.focusIndex + 1);
50
+ this.focusIndex = (this.focusIndex + 1) % i;
50
51
  break;
51
52
  case "ArrowUp":
52
53
  case "Up":
53
- this.focusIndex = Math.max(0, this.focusIndex - 1);
54
+ this.focusIndex = (this.focusIndex - 1 + i) % i;
54
55
  break;
55
56
  case "Enter":
56
57
  case "Space":
57
58
  case " ":
58
- this.handleSelection(this.focusIndex, e.metaKey || e.ctrlKey);
59
+ this.handleSelection(this.focusIndex, t.metaKey || t.ctrlKey);
59
60
  break;
60
61
  case "End":
61
62
  case "PageDown":
@@ -66,15 +67,21 @@ const o = class o extends h {
66
67
  this.focusIndex = 0;
67
68
  break;
68
69
  default:
69
- t = !1;
70
+ s = !1;
70
71
  break;
71
72
  }
72
- t && (e.preventDefault(), e.stopPropagation());
73
- }, this._fallbackId = o.ID + "_" + m++, this.addEventListener("pointerup", (e) => {
74
- this.focusIndex = this.getListItems.indexOf(e.target), this.updateFocusedElement();
73
+ s && (t.preventDefault(), t.stopPropagation());
74
+ }, this._fallbackId = r.ID + "_" + m++, this.addEventListener("pointerup", (t) => {
75
+ this.focusIndex = this.getListItems.indexOf(t.target), this.updateFocusedElement();
75
76
  }), this.addEventListener("focus", () => {
76
77
  this.matches(":focus-visible") && (this.focusIndex == -1 ? (this.selectedIndexes && (this.focusIndex = this.selectedIndexes[0]), this.focusIndex == -1 && this.childElementCount > 0 && (this.focusIndex = 0)) : this.updateFocusedElement());
77
78
  }), this.addEventListener("blur", () => this.removeFocusedItemAttributes());
79
+ const e = {
80
+ root: null,
81
+ rootMargin: "0px",
82
+ threshold: [0, 1]
83
+ };
84
+ this._focusObserver = new IntersectionObserver((t) => this.focusIntersectionCallback(t, this), e);
78
85
  }
79
86
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
87
  get items() {
@@ -129,7 +136,7 @@ const o = class o extends h {
129
136
  return ["focus-index", "focus-target"];
130
137
  }
131
138
  is() {
132
- return o.ID;
139
+ return r.ID;
133
140
  }
134
141
  template() {
135
142
  const e = document.createElement("template");
@@ -138,7 +145,7 @@ const o = class o extends h {
138
145
  removeFocusedItemAttributes() {
139
146
  if (this.focusIndex != -1) {
140
147
  const e = this.getListItem(this.focusIndex);
141
- e && (e.removeAttribute("focused"), this.removeAttribute("aria-activedescendant"));
148
+ e && (e.removeAttribute("focused"), this._focusObserverCleanupTasks.forEach((t) => t.call(this)), this._focusObserverCleanupTasks = [], this.removeAttribute("aria-activedescendant"));
142
149
  }
143
150
  }
144
151
  connectedCallback() {
@@ -165,17 +172,17 @@ const o = class o extends h {
165
172
  if (e == 0 || i.endsWith("px") && s < Number.parseInt(i))
166
173
  this.enableLineClampOnItemsIfNeeded();
167
174
  else {
168
- const r = [...Array.from(this.children).filter((n) => n.slot === "items")].map(
175
+ const o = [...Array.from(this.children).filter((n) => n.slot === "items")].map(
169
176
  (n) => {
170
- if (n instanceof d) {
177
+ if (n instanceof l) {
171
178
  n.enableLineClamp = !1;
172
- const a = n.missingWidthForTexts;
173
- return a > e && (n.enableLineClamp = !0), a;
179
+ const d = n.missingWidthForTexts;
180
+ return d > e && (n.enableLineClamp = !0), d;
174
181
  }
175
182
  }
176
- ), c = Math.max(...r);
177
- if (c > 0) {
178
- const n = s + c;
183
+ ), a = Math.max(...o);
184
+ if (a > 0) {
185
+ const n = s + a;
179
186
  this.style.width = `${n}px`, this.offsetWidth < n && this.enableLineClampOnItemsIfNeeded();
180
187
  }
181
188
  }
@@ -183,7 +190,7 @@ const o = class o extends h {
183
190
  }
184
191
  enableLineClampOnItemsIfNeeded() {
185
192
  Array.from(this.children).filter((e) => e.slot === "items").forEach((e) => {
186
- e instanceof d && (e.enableLineClamp = e.enableLineClamp || e.missingWidthForTexts > 0);
193
+ e instanceof l && (e.enableLineClamp = e.enableLineClamp || e.missingWidthForTexts > 0);
187
194
  });
188
195
  }
189
196
  render() {
@@ -193,8 +200,8 @@ const o = class o extends h {
193
200
  const e = document.createDocumentFragment();
194
201
  let t = 0;
195
202
  this.items.forEach((s, i) => {
196
- const r = this.itemGenerator(s, i);
197
- this.isSeparator(r) || this.initListItem(r, t++), r.slot = "items", e.appendChild(r);
203
+ const o = this.itemGenerator(s, i);
204
+ this.isSeparator(o) || this.initListItem(o, t++), o.slot = "items", e.appendChild(o);
198
205
  }), this.appendChild(e), this.updateFocusedElement();
199
206
  }
200
207
  initListItem(e, t) {
@@ -206,13 +213,17 @@ const o = class o extends h {
206
213
  this.handleItemClick(s, t);
207
214
  }), (!e.id || e.id.startsWith(this.id + "_item_")) && (e.id = this.id + "_item_" + t);
208
215
  }
209
- ensureItemVisible(e) {
210
- const t = e.getBoundingClientRect(), s = this.getBoundingClientRect();
211
- t.bottom > s.bottom ? this.scrollTop += t.bottom - s.bottom : t.top < s.top && (this.scrollTop -= s.top - t.top);
216
+ focusIntersectionCallback(e, t) {
217
+ e.forEach((s) => {
218
+ const i = s.target;
219
+ (!s.isIntersecting || s.intersectionRatio < 1) && (i.scrollIntoView({ block: "nearest", inline: "nearest" }), t._focusObserver.unobserve(i));
220
+ });
212
221
  }
213
222
  updateFocusedElement() {
214
223
  const e = this.getListItem(this.focusIndex);
215
- e && (this.focusTarget || this.matches(":focus")) ? (e.setAttribute("focused", ""), this.setAttribute("aria-activedescendant", e.id), this.ensureItemVisible(e)) : this.removeAttribute("aria-activedescendant");
224
+ e && (this.focusTarget || this.matches(":focus")) ? (e.setAttribute("focused", ""), this.setAttribute("aria-activedescendant", e.id), this._focusObserver.observe(e), this._focusObserverCleanupTasks.push(() => {
225
+ this._focusObserver.unobserve(e);
226
+ })) : (this._focusObserverCleanupTasks.forEach((t) => t.call(this)), this._focusObserverCleanupTasks = [], this.removeAttribute("aria-activedescendant"));
216
227
  }
217
228
  handleItemClick(e, t) {
218
229
  if (e.button !== null) {
@@ -252,12 +263,12 @@ const o = class o extends h {
252
263
  return e.hasAttribute("selected");
253
264
  }
254
265
  };
255
- o.ID = "sd-list", o.ensureDefined = () => {
256
- d.ensureDefined(), customElements.get(o.ID) || customElements.define(o.ID, o);
266
+ r.ID = "sd-list", r.ensureDefined = () => {
267
+ l.ensureDefined(), customElements.get(r.ID) || customElements.define(r.ID, r);
257
268
  };
258
- let l = o;
259
- l.ensureDefined();
269
+ let c = r;
270
+ c.ensureDefined();
260
271
  export {
261
- l as default
272
+ c as default
262
273
  };
263
274
  //# sourceMappingURL=list.mjs.map
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\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\n private removeFocusedItemAttributes() {\n if (this.focusIndex != -1) {\n const focusedElement = this.getListItem(this.focusIndex);\n if (focusedElement) {\n focusedElement.removeAttribute(\"focused\");\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 ensureItemVisible(item: HTMLElement): void {\n const itemRect = item.getBoundingClientRect();\n const rect = this.getBoundingClientRect();\n if (itemRect.bottom > rect.bottom) {\n this.scrollTop += itemRect.bottom - rect.bottom;\n } else if (itemRect.top < rect.top) {\n this.scrollTop -= rect.top - itemRect.top;\n }\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n let shouldPrevent = true;\n switch (event.key) {\n case \"ArrowDown\":\n case \"Down\":\n this.focusIndex = Math.min(this.getListItems.length - 1, this.focusIndex + 1);\n break;\n case \"ArrowUp\":\n case \"Up\":\n this.focusIndex = Math.max(0, this.focusIndex - 1);\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.ensureItemVisible(focusedElement);\n } else {\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","value","type","child","indexes","prevIndexes","template","focusedElement","element","name","oldValue","_newValue","lastFocusedElement","remainingWidth","maxWidth","offsetWidth","styleWidth","missingWidths","ListItem","missingWidthForTexts","additionalWidth","requiredWidth","fragment","indexOfRealItems","itemElement","itemRect","rect","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-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":";;AAAA,MAAAA,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACef,IAAIC,IAAY;AAoChB,MAAqBC,IAArB,MAAqBA,UAAaC,EAAY;AAAA,EAiH1C,cAAc;AACV,UAAA,GAxGJ,KAAQ,SAAgB,CAAA,GACxB,KAAQ,mBAA6B,CAAA,GACrC,KAAQ,iBAAgCC,GAGxC,KAAQ,6BAA6C,CAAA,GA+JrD,KAAQ,sBAAsB,MAAM;AAChC,UAAIC,IAAQ;AACZ,WAAK,YAAY,iBAAA,EAAmB,QAAQ,CAACC,MAAsB;AAC/D,QAAK,KAAK,YAAYA,CAAI,KACtB,KAAK,aAAaA,GAAMD,GAAO;AAAA,MAEvC,CAAC,GACD,KAAK,qBAAA;AAAA,IACT,GA8HA,KAAQ,gBAAgB,CAACE,MAAyB;AAC9C,UAAIC,IAAgB;AACpB,YAAMC,IAAY,KAAK,aAAa;AACpC,cAAQF,EAAM,KAAA;AAAA,QACV,KAAK;AAAA,QACL,KAAK;AACD,eAAK,cAAc,KAAK,aAAa,KAAKE;AAC1C;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,eAAK,cAAc,KAAK,aAAa,IAAIA,KAAaA;AACtD;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,eAAK,gBAAgB,KAAK,YAAYF,EAAM,WAAWA,EAAM,OAAO;AACpE;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,eAAK,aAAa,KAAK,MAAM,SAAS;AACtC;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,eAAK,aAAa;AAClB;AAAA,QACJ;AACI,UAAAC,IAAgB;AAChB;AAAA,MAAA;AAER,MAAIA,MACAD,EAAM,eAAA,GACNA,EAAM,gBAAA;AAAA,IAEd,GAlOI,KAAK,cAAcL,EAAK,KAAK,MAAMD,KACnC,KAAK,iBAAiB,aAAa,CAACM,MAAU;AAC1C,WAAK,aAAa,KAAK,aAAa,QAAQA,EAAM,MAAqB,GACvE,KAAK,qBAAA;AAAA,IACT,CAAC,GACD,KAAK,iBAAiB,SAAS,MAAM;AACjC,MAAI,KAAK,QAAQ,gBAAgB,MACzB,KAAK,cAAc,MACf,KAAK,oBACL,KAAK,aAAa,KAAK,gBAAgB,CAAC,IAExC,KAAK,cAAc,MAAM,KAAK,oBAAoB,MAClD,KAAK,aAAa,MAGtB,KAAK,qBAAA;AAAA,IAGjB,CAAC,GACD,KAAK,iBAAiB,QAAQ,MAAM,KAAK,6BAA6B;AAEtE,UAAMG,IAAkB;AAAA,MACpB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAW,CAAC,GAAK,CAAG;AAAA,IAAA;AAExB,SAAK,iBAAiB,IAAI,qBAAqB,CAACC,MAAM,KAAK,0BAA0BA,GAAG,IAAI,GAAGD,CAAe;AAAA,EAClH;AAAA;AAAA,EA5HA,IAAW,QAAe;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,IAAW,MAAME,GAAc;AAC3B,SAAK,SAASA,GACd,KAAK,OAAA;AAAA,EACT;AAAA,EAEA,IAAW,gBAA+B;AACtC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,cAAcA,GAAsB;AAC3C,SAAK,iBAAiBA,GACtB,KAAK,OAAA;AAAA,EACT;AAAA,EAEA,IAAW,gBAA+B;AACtC,WAAO,KAAK,aAAa,gBAAgB;AAAA,EAC7C;AAAA,EAEA,IAAW,cAAcC,GAAqB;AAC1C,IAAIA,IACA,KAAK,aAAa,kBAAkBA,CAAI,IAExC,KAAK,gBAAgB,gBAAgB;AAAA,EAE7C;AAAA,EAEA,IAAW,aAAqB;AAC5B,WAAO,KAAK,aAAa,aAAa,IAAI,OAAO,KAAK,aAAa,aAAa,CAAC,IAAI;AAAA,EACzF;AAAA,EAEA,IAAW,WAAWR,GAAe;AACjC,IAAI,KAAKA,KAASA,IAAQ,KAAK,aAAa,SACxC,KAAK,aAAa,eAAeA,EAAM,SAAA,CAAU,IAEjD,KAAK,gBAAgB,aAAa;AAAA,EAE1C;AAAA,EAEA,IAAW,cAAuB;AAC9B,WAAO,KAAK,aAAa,cAAc;AAAA,EAC3C;AAAA,EAEA,IAAW,YAAYO,GAAgB;AACnC,SAAK,gBAAgB,gBAAgBA,CAAK;AAAA,EAC9C;AAAA,EAEO,YAAYP,GAAmC;AAClD,WAAI,KAAK,aACE,KAAK,aAAaA,CAAK,IAE3B;AAAA,EACX;AAAA,EAEA,IAAW,eAAmC;AAC1C,WAAO,MAAM,UAAU,MAAM,KAAK,KAAK,QAAQ,EAAE,OAAO,CAACS,MAAU,CAAC,KAAK,YAAYA,CAAK,CAAC;AAAA,EAC/F;AAAA,EAEA,IAAW,kBAA4B;AACnC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,gBAAgBC,GAAmB;AAC1C,UAAMC,IAAc,KAAK,oBAAoB,CAAA;AAC7C,SAAK,mBAAmBD,KAAW,CAAA,GACnCC,EACK,OAAO,CAACX,MAAU,CAAC,KAAK,iBAAiB,SAASA,CAAK,CAAC,EACxD,QAAQ,CAACA,MAAU;AAChB,WAAK,gBAAgB,KAAK,YAAYA,CAAK,GAAG,EAAK;AAAA,IACvD,CAAC,GACL,KAAK,iBACA,OAAO,CAACA,MAAU,CAACW,EAAY,SAASX,CAAK,CAAC,EAC9C,QAAQ,CAACA,MAAU;AAChB,WAAK,gBAAgB,KAAK,YAAYA,CAAK,GAAG,EAAI;AAAA,IACtD,CAAC;AAAA,EACT;AAAA,EAEA,WAAW,qBAA+B;AACtC,WAAO,CAAC,eAAe,cAAc;AAAA,EACzC;AAAA,EAEA,KAAa;AACT,WAAOH,EAAK;AAAA,EAChB;AAAA,EAEU,WAAgC;AACtC,UAAMe,IAAW,SAAS,cAAc,UAAU;AAClD,WAAAA,EAAS,YAAYjB,GACdiB;AAAA,EACX;AAAA,EAiCQ,8BAA8B;AAClC,QAAI,KAAK,cAAc,IAAI;AACvB,YAAMC,IAAiB,KAAK,YAAY,KAAK,UAAU;AACvD,MAAIA,MACAA,EAAe,gBAAgB,SAAS,GACxC,KAAK,2BAA2B,QAAQ,CAACP,MAAMA,EAAE,KAAK,IAAI,CAAC,GAC3D,KAAK,6BAA6B,CAAA,GAClC,KAAK,gBAAgB,uBAAuB;AAAA,IAEpD;AAAA,EACJ;AAAA,EAEO,oBAA0B;AAC7B,UAAM,kBAAA,GACN,KAAK,YAAY,iBAAiB,cAAc,KAAK,mBAAmB,GACnE,KAAK,aAAa,MAAM,KACzB,KAAK,aAAa,QAAQ,SAAS,GAElC,KAAK,OACN,KAAK,KAAK,KAAK,cAGnB,KAAK,OAAA,GACL,KAAK,iBAAiB,WAAW,KAAK,aAAa,GAE9C,KAAK,kBACN,KAAK,gBAAgB;AAAA,EAE7B;AAAA,EAYA,IAAY,cAA+B;AACvC,WAAO,KAAK,WAAW,cAAc,eAAe;AAAA,EACxD;AAAA,EAEQ,YAAYQ,GAA2B;AAC3C,WAAeA,EAAQ,WAAhB,QAA2BA,EAAQ,aAAa,MAAM,KAAK;AAAA,EACtE;AAAA,EAEO,yBAAyBC,GAAcC,GAAmBC,GAA0B;AACvF,QAAIF,MAAS,eAAe;AACxB,YAAMG,IAAqB,KAAK,YAAYF,CAAkB;AAC9D,MAAIE,KACAA,EAAmB,gBAAgB,SAAS,GAEhD,KAAK,qBAAA;AAAA,IACT,MAAA,CAAWH,MAAS,mBACZ,KAAK,cACL,KAAK,qBAAA,IACE,SAAS,iBAAiB,QACjC,KAAK,4BAAA;AAAA,EAGjB;AAAA,EAEO,wBAAwB;AAC3B,WAAO,sBAAsB,MAAM;AAC/B,UAAII,IAAiB,OAAO;AAC5B,YAAMC,IAAW,iBAAiB,IAAI,EAAE,UAClCC,IAAc,KAAK;AACzB,MAAID,EAAS,SAAS,IAAI,MACtBD,IAAiB,OAAO,SAASC,CAAQ,IAAIC;AAEjD,YAAMC,IAAa,KAAK,MAAM;AAC9B,UAAIH,KAAkB,KAAMG,EAAW,SAAS,IAAI,KAAKD,IAAc,OAAO,SAASC,CAAU;AAC7F,aAAK,+BAAA;AAAA,WACF;AACH,cAAMC,IAAgB,CAAC,GAAG,MAAM,KAAK,KAAK,QAAQ,EAAE,OAAO,CAACd,MAAUA,EAAM,SAAS,OAAO,CAAC,EAAE;AAAA,UAC3F,CAACR,MAAS;AACN,gBAAIA,aAAgBuB,GAAU;AAC1B,cAAAvB,EAAK,kBAAkB;AACvB,oBAAMwB,IAAuBxB,EAAK;AAClC,qBAAIwB,IAAuBN,MACvBlB,EAAK,kBAAkB,KAEpBwB;AAAA,YACX;AAAA,UACJ;AAAA,QAAA,GAEEC,IAAkB,KAAK,IAAI,GAAGH,CAAa;AACjD,YAAIG,IAAkB,GAAG;AACrB,gBAAMC,IAAgBN,IAAcK;AACpC,eAAK,MAAM,QAAQ,GAAGC,CAAa,MAC/B,KAAK,cAAcA,KACnB,KAAK,+BAAA;AAAA,QAEb;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEQ,iCAAiC;AACrC,UAAM,KAAK,KAAK,QAAQ,EACnB,OAAO,CAAClB,MAAUA,EAAM,SAAS,OAAO,EACxC,QAAQ,CAACR,MAAS;AACf,MAAIA,aAAgBuB,MAChBvB,EAAK,kBAAkBA,EAAK,mBAAmBA,EAAK,uBAAuB;AAAA,IAEnF,CAAC;AAAA,EACT;AAAA,EAEQ,SAAe;AACnB,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK;AAC3B;AAEJ,UAAM,KAAK,KAAK,QAAQ,EACnB,OAAO,CAACQ,MAAUA,EAAM,SAAS,OAAO,EACxC,QAAQ,CAACA,MAAUA,EAAM,QAAQ;AAEtC,UAAMmB,IAAW,SAAS,uBAAA;AAC1B,QAAIC,IAAmB;AACvB,SAAK,MAAM,QAAQ,CAAC5B,GAAMD,MAAU;AAChC,YAAM8B,IAAc,KAAK,cAAc7B,GAAMD,CAAK;AAElD,MAAK,KAAK,YAAY8B,CAAW,KAC7B,KAAK,aAAaA,GAAaD,GAAkB,GAGrDC,EAAY,OAAO,SACnBF,EAAS,YAAYE,CAAW;AAAA,IACpC,CAAC,GACD,KAAK,YAAYF,CAAQ,GAEzB,KAAK,qBAAA;AAAA,EACT;AAAA,EAEQ,aAAa3B,GAAmBD,GAAqB;AACzD,SAAK,gBAAgBC,GAAM,KAAK,gBAAgB,SAASD,CAAK,CAAC,GAC/DC,EAAK,iBAAiB,SAAS,CAACC,MAAU;AACtC,WAAK,gBAAgBA,GAAOF,CAAK;AAAA,IACrC,CAAC,GACDC,EAAK,iBAAiB,aAAa,CAACC,MAAU;AAC1C,MAAIA,EAAM,UAAU,KAChBA,EAAM,eAAA;AAAA,IAEd,CAAC,GACDD,EAAK,iBAAiB,YAAY,CAACC,MAAU;AACzC,WAAK,gBAAgBA,GAAOF,CAAK;AAAA,IACrC,CAAC,IACG,CAACC,EAAK,MAAMA,EAAK,GAAG,WAAW,KAAK,KAAK,QAAQ,OACjDA,EAAK,KAAK,KAAK,KAAK,WAAWD;AAAA,EAEvC;AAAA,EAEQ,0BAA0B+B,GAAsCC,GAAY;AAChF,IAAAD,EAAQ,QAAQ,CAACE,MAAU;AACvB,YAAMnB,IAAUmB,EAAM;AAEtB,OAAI,CAACA,EAAM,kBAAkBA,EAAM,oBAAoB,OACnDnB,EAAQ,eAAe,EAAE,OAAO,WAAW,QAAQ,WAAW,GAC9DkB,EAAK,eAAe,UAAUlB,CAAO;AAAA,IAE7C,CAAC;AAAA,EACL;AAAA,EAqCQ,uBAA6B;AACjC,UAAMD,IAAiB,KAAK,YAAY,KAAK,UAAU;AACvD,IAAIA,MAAmB,KAAK,eAAe,KAAK,QAAQ,QAAQ,MAC5DA,EAAe,aAAa,WAAW,EAAE,GACzC,KAAK,aAAa,yBAAyBA,EAAe,EAAE,GAC5D,KAAK,eAAe,QAAQA,CAAc,GAC1C,KAAK,2BAA2B,KAAK,MAAM;AACvC,WAAK,eAAe,UAAUA,CAAc;AAAA,IAChD,CAAC,MAED,KAAK,2BAA2B,QAAQ,CAACP,MAAMA,EAAE,KAAK,IAAI,CAAC,GAC3D,KAAK,6BAA6B,CAAA,GAClC,KAAK,gBAAgB,uBAAuB;AAAA,EAEpD;AAAA,EAEQ,gBAAgBJ,GAAmBF,GAAqB;AAC5D,QAAIE,EAAM,WAAW,MAAM;AACvB,YAAMgC,IAAehC,EAAM,QAAQ,cAAcA,EAAM,UAAU,KAAMA,EAAM,WAAWA,EAAM;AAC9F,OAAIA,EAAM,UAAU,KAAKA,EAAM,UAAU,MACrC,KAAK,gBAAgBF,GAAOkC,CAAW;AAAA,IAE/C;AAAA,EACJ;AAAA,EAEQ,gBAAgBlC,GAAekC,GAA4B;AAC/D,UAAMpB,IAAU,KAAK,YAAYd,CAAK;AACtC,QAAIc,EAAQ,aAAa,eAAe,KAAK,UAAUA,EAAQ,aAAa,UAAU;AAClF;AAEJ,UAAMqB,IAAc,KAAK,WAAWrB,CAAO;AAC3C,IAAI,KAAK,kBAAkB,mBACnB,KAAK,kBAAkB,WACvB,KAAK,kBAAkBqB,IAAc,CAAA,IAAK,CAACnC,CAAK,IAEvB,KAAK,gBAAgBc,CAAO,IAEjD,KAAK,iBAAiB,KAAKd,CAAK,IAEhC,KAAK,0BAA0BA,CAAK,IAIhD,KAAK,aAAaA,GAClB,KAAK;AAAA,MACD,IAAI,YAA6B,aAAa;AAAA,QAC1C,QAAQ;AAAA,UACJ,OAAAA;AAAA,UACA,UAAU,KAAK,iBAAiB,kBAAkB,CAACmC;AAAA,UACnD,aAAAD;AAAA,QAAA;AAAA,QAEJ,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACb;AAAA,IAAA;AAAA,EAET;AAAA,EAEQ,0BAA0BE,GAAuB;AACrD,UAAMpC,IAAQ,KAAK,iBAAiB,QAAQoC,CAAa;AACzD,IAAIpC,MAAU,MACV,KAAK,iBAAiB,OAAOA,GAAO,CAAC;AAAA,EAE7C;AAAA,EAEQ,gBAAgBc,GAA2B;AAC/C,UAAMuB,IAAW,CAACvB,EAAQ,aAAa,UAAU;AACjD,gBAAK,gBAAgBA,GAASuB,CAAQ,GAC/BA;AAAA,EACX;AAAA,EAEQ,gBAAgBvB,GAAkBuB,GAAmB;AACzD,IAAIvB,MACIuB,IACAvB,EAAQ,aAAa,YAAY,EAAE,IAEnCA,EAAQ,gBAAgB,UAAU,GAEtCA,EAAQ,aAAa,iBAAiB,OAAOuB,CAAQ,CAAC;AAAA,EAE9D;AAAA,EAEQ,WAAWvB,GAA2B;AAC1C,WAAOA,EAAQ,aAAa,UAAU;AAAA,EAC1C;AACJ;AA1aIjB,EAAuB,KAAK,WAC5BA,EAAc,gBAAgB,MAAY;AACtC,EAAA2B,EAAS,cAAA,GACJ,eAAe,IAAI3B,EAAK,EAAE,KAC3B,eAAe,OAAOA,EAAK,IAAIA,CAAI;AAE3C;AAPJ,IAAqByC,IAArBzC;AA6aAyC,EAAK,cAAA;"}
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@cas-smartdesign/list",
3
- "version": "6.5.1",
3
+ "version": "6.5.3",
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/element-base": "^5.1.0",
11
- "@cas-smartdesign/list-item": "^7.4.3"
10
+ "@cas-smartdesign/list-item": "^7.4.3",
11
+ "@cas-smartdesign/element-base": "^5.1.0"
12
12
  },
13
13
  "devDependencies": {
14
- "@cas-smartdesign/element-utils": "^1.2.0",
14
+ "@cas-smartdesign/license-generator": "^1.8.0",
15
15
  "@cas-smartdesign/element-preview": "^0.3.0",
16
- "@cas-smartdesign/license-generator": "^1.7.0"
16
+ "@cas-smartdesign/element-utils": "^1.2.0"
17
17
  },
18
18
  "files": [
19
19
  "dist",