@jblehm/super-list 1.0.35 → 1.0.37
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/README.md +1 -1
- package/dist/ListInputComponents/ItemList.vue.d.ts +3 -2
- package/dist/ListInputComponents/ListButton.vue.d.ts +3 -2
- package/dist/ListInputComponents/ListItem.vue.d.ts +2 -1
- package/dist/ListInputComponents/ListTextInput.vue.d.ts +2 -1
- package/dist/ListInputComponents/default-arrow.vue.d.ts +2 -1
- package/dist/ListInputComponents/default-tick.vue.d.ts +2 -1
- package/dist/demo-app.vue.d.ts +2 -1
- package/dist/index.css +1 -1
- package/dist/super-list.js +11 -11
- package/dist/super-list.js.map +1 -1
- package/dist/super-list.umd.cjs +2 -2
- package/dist/super-list.umd.cjs.map +1 -1
- package/dist/super-list.vue.d.ts +2 -1
- package/package.json +12 -13
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@ declare var __VLS_1: {};
|
|
|
3
3
|
type __VLS_Slots = {} & {
|
|
4
4
|
default?: (props: typeof __VLS_1) => any;
|
|
5
5
|
};
|
|
6
|
-
declare const
|
|
6
|
+
declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
7
7
|
mouseHoveringOnList: {
|
|
8
8
|
type: BooleanConstructor;
|
|
9
9
|
default: boolean;
|
|
@@ -107,7 +107,8 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
|
|
|
107
107
|
totalOptionsCount: number;
|
|
108
108
|
enableScrollClose: boolean;
|
|
109
109
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
110
|
-
declare const
|
|
110
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
111
|
+
declare const _default: typeof __VLS_export;
|
|
111
112
|
export default _default;
|
|
112
113
|
type __VLS_WithSlots<T, S> = T & {
|
|
113
114
|
new (): {
|
|
@@ -5,7 +5,7 @@ declare var __VLS_1: {};
|
|
|
5
5
|
type __VLS_Slots = {} & {
|
|
6
6
|
default?: (props: typeof __VLS_1) => any;
|
|
7
7
|
};
|
|
8
|
-
declare const
|
|
8
|
+
declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
9
9
|
parentMethods: {
|
|
10
10
|
type: ObjectConstructor;
|
|
11
11
|
required: true;
|
|
@@ -54,7 +54,8 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
|
|
|
54
54
|
}>> & Readonly<{}>, {
|
|
55
55
|
customIcon: object | Function | null;
|
|
56
56
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
57
|
-
declare const
|
|
57
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
58
|
+
declare const _default: typeof __VLS_export;
|
|
58
59
|
export default _default;
|
|
59
60
|
type __VLS_WithSlots<T, S> = T & {
|
|
60
61
|
new (): {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
2
|
mouseHoveringOnList: {
|
|
3
3
|
type: BooleanConstructor;
|
|
4
4
|
default: boolean;
|
|
@@ -73,4 +73,5 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
73
73
|
listElementOpenAndVisible: boolean;
|
|
74
74
|
totalOptionsCount: number;
|
|
75
75
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
76
|
+
declare const _default: typeof __VLS_export;
|
|
76
77
|
export default _default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type PropType } from 'vue';
|
|
2
2
|
declare function blurInput(): void;
|
|
3
3
|
declare function focusInput(): void;
|
|
4
|
-
declare const
|
|
4
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
5
5
|
enableTextFilter: {
|
|
6
6
|
type: PropType<boolean | null>;
|
|
7
7
|
required: true;
|
|
@@ -59,4 +59,5 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
59
59
|
placeholder: string | undefined;
|
|
60
60
|
enableButtonClick: boolean | null;
|
|
61
61
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
62
|
+
declare const _default: typeof __VLS_export;
|
|
62
63
|
export default _default;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
2
3
|
export default _default;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
2
3
|
export default _default;
|
package/dist/demo-app.vue.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
2
3
|
export default _default;
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.list-filter-text-input[data-v-
|
|
1
|
+
.list-filter-text-input[data-v-e7eaf23c]{color:var(--superlist-text-colour, rgb(17, 24, 39));text-align:center;padding:.125rem 2rem .125rem .5rem;width:100%;height:100%;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:transparent;border:0 none;pointer-events:auto;cursor:text}.list-filter-text-input[data-v-e7eaf23c]:focus,.list-filter-text-input[data-v-e7eaf23c]:focus-visible,.list-filter-text-input[data-v-e7eaf23c]:active{text-align:left}.click-through[data-v-e7eaf23c]{pointer-events:none}.dark-placeholder-text[data-v-e7eaf23c]::placeholder{color:var(--superlist-text-colour, rgb(17, 24, 39))}.light-placeholder-text[data-v-e7eaf23c]::placeholder{color:var(--superlist-disabled-text-colour, rgb(120, 125, 130))}.text-filter-disabled[data-v-e7eaf23c]{background-color:transparent;border:none;outline:none;box-shadow:none;filter:none}@media (min-width: 640px){.list-filter-text-input[data-v-e7eaf23c]{font-size:.875rem;line-height:1.5rem}}.list-option[data-v-e4eeb2f7]{text-transform:capitalize;display:inline-flex;width:100%;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;color:var(--superlist-text-colour, rgb(55, 60, 65));transition-property:font-weight,background-color,color,text-shadow;transition-duration:.5s;transition-timing-function:ease;font-weight:400;text-shadow:1px 1px 3px var(--superlist-background-colour, white)}.list-option[data-v-e4eeb2f7]:focus-visible,.list-option>span[data-v-e4eeb2f7]:focus-visible{outline:none}.list-option-selected[data-v-e4eeb2f7]{font-weight:600}.list-option-message[data-v-e4eeb2f7]{text-shadow:1px 1px 3px var(--superlist-background-colour, white);text-transform:capitalize;display:inline-flex;width:100%;position:relative;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;color:var(--superlist-disabled-text-colour, rgb(120, 125, 130))}.list-option-active[data-v-e4eeb2f7]:hover,.list-option-active[data-v-e4eeb2f7],.list-option-selected[data-v-e4eeb2f7]:hover,.list-option[data-v-e4eeb2f7]:hover{font-weight:600;background-color:var(--superlist-theme-colour, rgb(77, 168, 11, .8));color:var(--superlist-background-colour, white);text-shadow:1px 1px 3px var(--superlist-theme-colour, rgb(77, 168, 11, .8));transition-duration:0s!important}.list-item-icon[data-v-e4eeb2f7]{display:flex;height:1rem;width:1rem;position:absolute;right:.7rem;margin-top:-.1rem;align-self:center}.list-item-span[data-v-e4eeb2f7]{padding:.5rem 1.75rem .5rem .75rem;width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-normal[data-v-e58cd48c]{top:var(--parent-y)}.list-reverse[data-v-e58cd48c]{bottom:var(--parent-y)}.select-list[data-v-e58cd48c]{--parent-width: var(--v8d801350);--parent-x: var(--v2724698a);--parent-y: var(--v27246d4b);--duration: var(--ffcaa9a8);--border-radius: var(--superlist-list-border-radius, 0);border-radius:var(--border-radius);width:var(--parent-width);min-width:var(--parent-width);left:var(--parent-x);display:block;transition-property:max-height,opacity,visibility,box-shadow;transition-duration:var(--duration, .3s);transition-timing-function:cubic-bezier(.1,.9,.35,.98);position:absolute;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);background-color:#ffffffb3;align-items:baseline;opacity:.25;z-index:999;visibility:collapse;overflow:auto;max-height:0;border:none!important}.select-list[data-v-e58cd48c]:focus-visible,.select-list>ul[data-v-e58cd48c]:focus-visible,.super-list-button-container[data-v-e58cd48c]:focus-visible{outline:none}.super-list-button-container[data-v-e58cd48c]{height:100%;width:100%}.select-list.select-list-open[data-v-e58cd48c]{z-index:999999;--max-height: var(--v414dd276);max-height:var(--max-height, 0)}.select-list.no-scroll[data-v-e58cd48c]{overflow:hidden}.select-list-fixed[data-v-e58cd48c]{position:fixed;opacity:1;visibility:visible}.list-content[data-v-e58cd48c]{--duration: var(--ffcaa9a8);overflow:visible;margin:0;padding:0;border-style:none;color:var(--superlist-text-colour, rgb(55, 60, 65));list-style:none;max-width:100%}.select-list.select-list-scrollable[data-v-e58cd48c]{border-radius:var(--border-radius)}.select-list[data-v-e58cd48c]:not(.select-list-fixed){transition:none;box-shadow:none!important}@media (min-width: 640px){.select-list.select-list-scrollable[data-v-e58cd48c]{border-radius:var(--border-radius) 0 0 var(--border-radius)}.list-content[data-v-e58cd48c]{font-size:.875rem;line-height:1.25rem}}.list-button-icon[data-v-01ef8e37]{display:flex;transition-timing-function:ease-in-out;transition-duration:.2s;transition-property:transform;width:.6rem;transform:rotate(0);color:var(--superlist-text-colour, rgb(17, 24, 39));justify-content:center;max-height:18%}.list-button-icon.custom-icon[data-v-01ef8e37]{max-height:100%;width:1.25rem}.list-button-icon.rotate-180[data-v-01ef8e37]{transform:rotate(180deg)}.list-button[data-v-01ef8e37]{position:relative;padding:0;margin:0;width:100%;max-height:100%;height:100%;background-color:var(--superlist-background-colour, white);align-items:center;pointer-events:auto;cursor:pointer}.list-button[data-v-01ef8e37]:focus,.list-button[data-v-01ef8e37]:focus-visible,.list-button[data-v-01ef8e37]:active{text-align:left}.list-button-icon-div[data-v-01ef8e37]{pointer-events:none;position:absolute;top:0;bottom:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding-right:.75rem;max-height:100%;height:100%;gap:max(.15rem,calc(6.25% + .075rem));transition:gap .2s}.list-button-icon-div.bigger-gap[data-v-01ef8e37]{gap:calc(40% - .25rem)}.click-through[data-v-01ef8e37]{pointer-events:none}[data-v-cc38ced5]{box-sizing:border-box}
|
package/dist/super-list.js
CHANGED
|
@@ -172,7 +172,7 @@ const qe = ["tabindex", "placeholder", "size"], je = /* @__PURE__ */ G({
|
|
|
172
172
|
for (const [m, o] of i)
|
|
173
173
|
d[m] = o;
|
|
174
174
|
return d;
|
|
175
|
-
}, be = /* @__PURE__ */ V(je, [["__scopeId", "data-v-
|
|
175
|
+
}, be = /* @__PURE__ */ V(je, [["__scopeId", "data-v-e7eaf23c"]]), $e = {}, Ke = {
|
|
176
176
|
xmlns: "http://www.w3.org/2000/svg",
|
|
177
177
|
fill: "currentColor",
|
|
178
178
|
"aria-hidden": "true",
|
|
@@ -180,12 +180,12 @@ const qe = ["tabindex", "placeholder", "size"], je = /* @__PURE__ */ G({
|
|
|
180
180
|
viewBox: "0 -16 16 17"
|
|
181
181
|
};
|
|
182
182
|
function Ve(e, i) {
|
|
183
|
-
return T(), M("svg", Ke, i[0] || (i[0] = [
|
|
183
|
+
return T(), M("svg", Ke, [...i[0] || (i[0] = [
|
|
184
184
|
N("path", {
|
|
185
185
|
"shape-rendering": "geometricPrecision",
|
|
186
186
|
d: "M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z"
|
|
187
187
|
}, null, -1)
|
|
188
|
-
]));
|
|
188
|
+
])]);
|
|
189
189
|
}
|
|
190
190
|
const ze = /* @__PURE__ */ V($e, [["render", Ve]]), Xe = ["onMousedown"], Ue = { class: "list-item-span" }, Je = { class: "list-item-span" }, We = /* @__PURE__ */ G({
|
|
191
191
|
__name: "ListItem",
|
|
@@ -295,9 +295,9 @@ const ze = /* @__PURE__ */ V($e, [["render", Ve]]), Xe = ["onMousedown"], Ue = {
|
|
|
295
295
|
onMousedown: t[12] || (t[12] = Z((s) => e.parentMethods.closeList(s), ["left"])),
|
|
296
296
|
tabindex: "-1",
|
|
297
297
|
class: "list-option-message"
|
|
298
|
-
}, t[20] || (t[20] = [
|
|
298
|
+
}, [...t[20] || (t[20] = [
|
|
299
299
|
N("span", { class: "list-item-span" }, "No Items To Display.", -1)
|
|
300
|
-
]), 32)) : K("", !0),
|
|
300
|
+
])], 32)) : K("", !0),
|
|
301
301
|
e.totalOptionsCount && e.totalOptionsCount > (e.filteredListItems?.length || 0) ? (T(), M("li", {
|
|
302
302
|
key: 1,
|
|
303
303
|
onKeyup: [
|
|
@@ -369,11 +369,11 @@ const ze = /* @__PURE__ */ V($e, [["render", Ve]]), Xe = ["onMousedown"], Ue = {
|
|
|
369
369
|
emits: ["reverseDropDownList"],
|
|
370
370
|
setup(e, { expose: i, emit: d }) {
|
|
371
371
|
Se((u) => ({
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
372
|
+
v8d801350: k.value,
|
|
373
|
+
v2724698a: B.value,
|
|
374
|
+
v27246d4b: se.value,
|
|
375
375
|
ffcaa9a8: $.value,
|
|
376
|
-
|
|
376
|
+
v414dd276: _.value
|
|
377
377
|
}));
|
|
378
378
|
const m = d, o = e, v = p(null), w = p(null), t = p(null), s = p(0), c = p(0), r = p(0), y = p(0), k = p("0px"), I = p(!1), E = p([]), g = p(0), a = O(() => !I.value || window?.innerHeight == null ? !1 : U() && le()), h = O(() => o.maxListHeightPX >= g.value);
|
|
379
379
|
F(
|
|
@@ -516,12 +516,12 @@ const ze = /* @__PURE__ */ V($e, [["render", Ve]]), Xe = ["onMousedown"], Ue = {
|
|
|
516
516
|
viewBox: "0 0 12 6"
|
|
517
517
|
};
|
|
518
518
|
function _e(e, i) {
|
|
519
|
-
return T(), M("svg", Ge, i[0] || (i[0] = [
|
|
519
|
+
return T(), M("svg", Ge, [...i[0] || (i[0] = [
|
|
520
520
|
N("path", {
|
|
521
521
|
"shape-rendering": "geometricPrecision",
|
|
522
522
|
d: "M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z"
|
|
523
523
|
}, null, -1)
|
|
524
|
-
]));
|
|
524
|
+
])]);
|
|
525
525
|
}
|
|
526
526
|
const ge = /* @__PURE__ */ V(Ye, [["render", _e]]), et = ["tabindex"], tt = {
|
|
527
527
|
key: 2,
|
package/dist/super-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"super-list.js","sources":["../src/DropDownLibrary.ts","../src/ListInputComponents/ListTextInput.vue","../src/ListInputComponents/default-tick.vue","../src/ListInputComponents/ListItem.vue","../src/ListInputComponents/ItemList.vue","../src/ListInputComponents/default-arrow.vue","../src/ListInputComponents/ListButton.vue","../src/super-list.vue"],"sourcesContent":["export interface DocumentViewChangeListener {\n targetNode: HTMLElement\n observe(): void\n unobserve(): void\n pauseMutationObserver(): void\n unpauseMutationObserver(): void\n}\n\nexport class DocumentViewChangeListener implements DocumentViewChangeListener {\n private readonly eventsTypes: string[] = ['resize', 'load', 'scroll', 'wheel', 'touchmove']\n private readonly config: MutationObserverInit = {\n attributes: true,\n childList: true,\n subtree: true\n }\n private mutationObserver: MutationObserver\n private callbackFunction: EventListenerOrEventListenerObject\n\n constructor(targetFunction: Function, targetNode: any = document.body) {\n this.targetNode = targetNode\n this.callbackFunction = ((event: any) =>\n targetFunction(event)) as EventListenerOrEventListenerObject\n this.mutationObserver = new MutationObserver((() => targetFunction()) as MutationCallback)\n }\n\n public observe(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n for (const eventType of this.eventsTypes) this.addListener(eventType)\n this.addResizeListener()\n this.addTransitionEndListener()\n }\n\n pauseMutationObserver(): void {\n this.mutationObserver.disconnect()\n }\n\n unpauseMutationObserver(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n }\n\n public unobserve(): void {\n this.mutationObserver.disconnect()\n for (const eventType of this.eventsTypes) this.removeListener(eventType)\n this.removeResizeListener()\n this.removeTransitionEndListener()\n }\n\n private addListener(eventType: string): void {\n document.addEventListener(eventType, this.callbackFunction, true)\n }\n\n private removeListener(eventType: string): void {\n document.removeEventListener(eventType, this.callbackFunction, true)\n }\n\n private addTransitionEndListener(): void {\n this.targetNode.addEventListener('transitionend', this.callbackFunction)\n }\n\n private removeTransitionEndListener(): void {\n this.targetNode.removeEventListener('transitionend', this.callbackFunction)\n }\n\n private addResizeListener(): void {\n window.addEventListener('resize', this.callbackFunction)\n }\n\n private removeResizeListener(): void {\n window.removeEventListener('resize', this.callbackFunction)\n }\n}\n\nexport function getLabelString(\n value: string | number | object | null | undefined,\n customLabelGetFunction: Function | null | undefined,\n objectLabelKeyName: string | null,\n enumKeyToLabelObjectArray?: EnumType[]\n): string {\n if (customLabelGetFunction != null) return customLabelGetFunction(value)\n if (value == null) return ''\n if (typeof value === 'object') return value[objectLabelKeyName as keyof typeof value]\n if (enumKeyToLabelObjectArray) return getEnumLabel(value, enumKeyToLabelObjectArray)\n return '' + value\n}\n\nfunction getEnumLabel(value: string | number, enumKeyArray: EnumType[]): string {\n return (enumKeyArray.find((eT: EnumType): boolean => eT.type === value)?.label ?? '') as string\n}\n\nexport type ListRequest = (maxNumItems: number, stringFilter?: string) => Promise<DataSet<any>>\n\nexport type EnumType = { type: string; label: string }\n\nexport type DataSet<T> = { data: T[]; totalNum: number; modelName?: string }\n\nexport interface AbortablePromise {\n abortController: AbortController\n func: Function\n then: Function\n}\n\nexport class AbortablePromise implements AbortablePromise {\n constructor() {\n this.abortController = new AbortController()\n this.func = (): void => {}\n this.then = (): void => {}\n }\n\n async abortablePromise(signal: AbortSignal, asyncFunc: Function, then: Function): Promise<any> {\n const response = await asyncFunc()\n if (signal.aborted) return\n return then(response)\n }\n\n setFunc(func: Function): void {\n this.func = func\n }\n\n setThen(then: Function): void {\n this.then = then\n }\n\n execute(): Promise<any> {\n return this.abortablePromise(this.abortController.signal, this.func, this.then)\n }\n\n abort(reason?: string): void {\n this.abortController.abort(reason || 'Aborted By Controller.')\n this.abortController = new AbortController()\n }\n\n resetAndExecute(func: Function, then: Function): Promise<any> {\n this.abort('New Request From Controller.')\n this.setFunc(func)\n this.setThen(then)\n return this.execute()\n }\n}\n","<template>\n <form @submit.prevent style=\"display: contents !important;\">\n <!-- Forces virtual keyboard to display return/enter key when list exists in external form -->\n <input\n ref=\"textInputRef\"\n :tabindex=\"enableTextFilter ? 0 : -1\"\n @keydown.enter=\"parentMethods.press($event)\"\n @keydown.space=\"parentMethods.press()\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusin=\"focusInHandler($event)\"\n @focusout=\"focusOutHandler($event)\"\n @input=\"updateQuery($event as InputEvent)\"\n @change=\"updateQuery($event as InputEvent)\"\n @paste=\"updateQuery($event as ClipboardEvent)\"\n type=\"text\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n :placeholder=\"placeholder\"\n :size=\"textInputSize\"\n :class=\"[\n pointerEventsClass,\n textInputColourClass,\n { 'text-filter-disabled': !enableTextFilter }\n ]\"\n class=\"list-filter-text-input\"\n />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType, ref } from 'vue'\n\nconst emit = defineEmits({\n 'update:selected': null,\n 'update:query': null,\n 'update:press': null\n})\n\nconst props = defineProps({\n enableTextFilter: {\n type: Boolean as PropType<boolean | null>,\n required: true\n },\n placeholder: {\n type: String as PropType<string | undefined>,\n default: undefined\n },\n enableButtonClick: {\n type: Boolean as PropType<boolean | null>,\n default: true\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n }\n})\nconst textInputRef = ref(null)\n\nfunction focusInHandler(e: FocusEvent) {\n if ('sourceCapabilities' in e && e.sourceCapabilities == null) props.parentMethods.closeList()\n else props.parentMethods.openList()\n}\n\nfunction focusOutHandler(event: FocusEvent) {\n props.parentMethods.unfocus(event)\n}\n\nlet lastQuery: string = ''\n\nfunction updateQuery(event: any) {\n if (event?.target?.value != undefined && event?.target?.value !== lastQuery) emit('update:query', event.target.value)\n lastQuery = event?.target?.value ?? ''\n}\n\nconst textInputSize = computed(() => {\n const refLength: number = textInputRef?.value ? (textInputRef.value as string).length : 0\n const placeHolderLength: number = props.placeholder?.length || 0\n return refLength > 0 ? refLength : placeHolderLength > 0 ? placeHolderLength : 5\n})\n\nconst pointerEventsClass = computed(() => {\n const enable: boolean = props.enableButtonClick === true && props.enableTextFilter === true\n return enable ? '' : 'click-through'\n})\n\nconst textInputColourClass = computed(() => {\n const dark: boolean = (props.showDropDown && !props.enableTextFilter) || !props.showDropDown\n return dark ? 'dark-placeholder-text' : 'light-placeholder-text'\n})\n\nfunction blurInput() {\n if (textInputRef?.value) {\n const input: HTMLInputElement = textInputRef.value\n input.blur()\n input.value = ''\n }\n}\n\nfunction focusInput() {\n if (textInputRef?.value) (textInputRef.value as HTMLInputElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, textInputRef })\n</script>\n\n<style scoped>\n.list-filter-text-input {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n text-align: center;\n padding: 0.125rem 2rem 0.125rem 0.5rem;\n width: 100%;\n height: 100%;\n margin: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n background-color: transparent;\n border: 0 none;\n pointer-events: auto;\n cursor: text;\n}\n\n.list-filter-text-input:focus,\n.list-filter-text-input:focus-visible,\n.list-filter-text-input:active {\n text-align: left;\n}\n\n.click-through {\n pointer-events: none;\n}\n\n.dark-placeholder-text::placeholder {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n}\n\n.light-placeholder-text::placeholder {\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.text-filter-disabled {\n background-color: transparent;\n border: none;\n outline: none;\n box-shadow: none;\n filter: none;\n}\n\n@media (min-width: 640px) {\n .list-filter-text-input {\n font-size: 0.875rem;\n line-height: 1.5rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 -16 16 17\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z\"\n />\n </svg>\n</template>\n","<template>\n <li\n v-for=\"(listItem, index) in filteredListItems\"\n :key=\"index\"\n ref=\"items\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n tabindex=\"-1\"\n @mousedown.left=\"parentMethods.updatedSelected(listItem)\"\n :class=\"[\n { 'list-option-selected': selectedIndex === index },\n {\n 'list-option-active':\n filteredListItems.length === 1 || (focusedIndex === index && !mouseHoveringOnList)\n },\n 'list-option'\n ]\"\n >\n <span class=\"list-item-span\">{{ parentMethods.getLabel(listItem) }}</span>\n <default-tick v-if=\"selectedIndex === index\" class=\"list-item-icon\" aria-hidden=\"true\" />\n </li>\n <li\n v-if=\"filteredListItems.length === 0\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">No Items To Display.</span>\n </li>\n <li\n v-if=\"totalOptionsCount && totalOptionsCount > (filteredListItems?.length || 0)\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">\n +{{ totalOptionsCount - filteredListItems?.length || 0 }} More Items...</span\n >\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type ShallowRef, useTemplateRef, watch } from 'vue'\nimport DefaultTick from './default-tick.vue'\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n listElementOpenAndVisible: {\n type: Boolean,\n default: false\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n default: false\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n }\n})\ntype HTMLLIElementOrArray = HTMLLIElement | HTMLLIElement[] | null\nconst iRefs: Readonly<ShallowRef<HTMLLIElementOrArray>> = useTemplateRef('items')\n\nconst focusedLi = computed((): HTMLElement | null => {\n if (!iRefs?.value) return null\n const refs: Array<HTMLLIElement | null> = Array.isArray(iRefs.value) ? iRefs.value : [iRefs.value]\n const focused = refs[props.focusedIndex]\n if (!focused) return null\n const isObject: boolean = typeof focused == 'object'\n const hasScrollIntoView: boolean = isObject && 'scrollIntoView' in focused\n const hasScrollFunc: boolean = hasScrollIntoView && typeof focused['scrollIntoView'] == 'function'\n return hasScrollFunc ? focused : null\n})\n\nwatch(\n () => props.showDropDown,\n () => scrollHighlightedListItemToTop()\n)\nwatch(\n () => props.listElementOpenAndVisible,\n () => scrollHighlightedListItemIntoView()\n)\nwatch(\n () => focusedLi.value,\n () => scrollHighlightedListItemIntoView()\n)\n\nfunction scrollHighlightedListItemToTop(): void {\n if (!props.showDropDown || !focusedLi?.value?.parentElement?.parentElement) return\n focusedLi.value.parentElement.parentElement.scrollTop = focusedLi.value.offsetTop\n}\n\nfunction scrollHighlightedListItemIntoView(): void {\n const li = focusedLi.value\n const liParent = li?.parentElement?.parentElement\n if (!props.showDropDown || !li || !liParent) return\n const aboveTop = li.offsetTop - liParent.scrollTop < 0\n const belowBottom = li.offsetTop + li.offsetHeight - liParent.scrollTop > liParent.clientHeight\n if (aboveTop) liParent.scrollTop = li.offsetTop\n if (belowBottom) liParent.scrollTop = li.offsetTop + li.clientHeight - liParent.clientHeight\n}\n</script>\n\n<style scoped>\n.list-option {\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n transition-property: font-weight, background-color, color, text-shadow;\n transition-duration: 500ms;\n transition-timing-function: ease;\n font-weight: 400;\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n}\n\n.list-option:focus-visible,\n.list-option > span:focus-visible {\n outline: none;\n}\n\n.list-option-selected {\n font-weight: 600;\n}\n\n.list-option-message {\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.list-option-active:hover,\n.list-option-active,\n.list-option-selected:hover,\n.list-option:hover {\n font-weight: 600;\n background-color: var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n color: var(--superlist-background-colour, white);\n text-shadow: 1px 1px 3px var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n transition-duration: 0s !important;\n}\n\n.list-item-icon {\n display: flex;\n height: 1rem;\n width: 1rem;\n position: absolute;\n right: 0.7rem;\n margin-top: -0.1rem;\n align-self: center;\n}\n\n.list-item-span {\n padding: 0.5rem 1.75rem 0.5rem 0.75rem;\n width: 100%;\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n</style>\n","<template>\n <div ref=\"dropDownButtonContainer\" class=\"super-list-button-container\">\n <slot></slot>\n </div>\n <div\n id=\"super-list-select-list\"\n ref=\"listContainerRef\"\n @mouseenter=\"parentMethods.mouseOverList()\"\n tabindex=\"-1\"\n :class=\"[\n 'select-list',\n reverseList ? 'list-reverse' : 'list-normal',\n { 'select-list-open': showDropDown },\n { 'no-scroll': noScroll && listElementOpenAndVisible },\n { 'select-list-fixed': listElementOpenAndVisible },\n { 'select-list-scrollable': !noScroll }\n ]\"\n @keydown.space=\"preventSpaceScrollingList($event)\"\n @mouseup.left=\"refocusTextInput($event)\"\n >\n <ul tabindex=\"-1\" ref=\"dropDownListUL\" class=\"list-content\">\n <list-item\n :filteredListItems=\"listItemsToDisplay\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"focusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :listElementOpenAndVisible=\"listElementOpenAndVisible\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :total-options-count=\"totalOptionsCount\"\n />\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n type ComputedRef,\n nextTick,\n onMounted,\n onUnmounted,\n type PropType,\n ref,\n watch\n} from 'vue'\nimport ListItem from '../ListInputComponents/ListItem.vue'\nimport { DocumentViewChangeListener } from '../DropDownLibrary'\n\nconst emit = defineEmits(['reverseDropDownList'])\n\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n maxListHeightPX: {\n type: Number,\n required: true\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n required: true\n },\n blockListChange: {\n type: Boolean,\n required: true\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n },\n enableScrollClose: {\n type: Boolean,\n default: true\n }\n})\n\nconst dropDownButtonContainer = ref<HTMLElement | null>(null)\nconst dropDownListUL = ref<HTMLElement | null>(null)\nconst listContainerRef = ref<HTMLElement | null>(null)\nconst offsetLeft = ref<number>(0)\nconst offsetTop = ref<number>(0)\nconst offsetBottom = ref<number>(0)\nconst listOffset = ref<number>(0)\nconst parentWidthPx = ref<string>('0px')\nconst listElementOpenAndVisible = ref<boolean>(false)\nconst listItemsToDisplay = ref<any[]>([])\nconst listHeightPx = ref<number>(0)\n\nconst reverseList = computed((): boolean => {\n if (!listElementOpenAndVisible.value || window?.innerHeight == null) return false\n return sufficientRoomAbove() && insufficientRoomBelow()\n})\n\nconst noScroll = computed((): boolean => {\n return props.maxListHeightPX >= listHeightPx.value\n})\n\nwatch(\n () => reverseList.value,\n (reverse: boolean) => emit('reverseDropDownList', reverse),\n { immediate: true }\n)\n\nconst parentXPx = computed((): string => offsetLeft.value + 'px')\nconst parentYPx = computed((): string => listOffset.value + 'px')\n\ndefineExpose({ listContainerRef })\n\nconst preventSpaceScrollingList = (event: any) => {\n if (event?.key && event.key === ' ') event.preventDefault()\n}\n\nconst refocusTextInput = (event: MouseEvent) => {\n const list = listContainerRef?.value as HTMLElement | null\n const target = event.target as HTMLElement | null\n if (!(list && target && list.contains(target)) || list.isEqualNode(target))\n props.parentMethods.focusInput()\n}\n\nfunction getListULHeight(): number {\n return dropDownListUL?.value ? (dropDownListUL?.value as HTMLElement).clientHeight : 0\n}\n\nfunction displayableListHeight(): number {\n if (!listElementOpenAndVisible.value || getListULHeight() === 0) return props.maxListHeightPX\n const ulHt: number = getListULHeight() === 0 ? props.maxListHeightPX : +getListULHeight()\n return props.maxListHeightPX && props.maxListHeightPX > ulHt ? ulHt : props.maxListHeightPX\n}\n\nfunction sufficientRoomAbove(): boolean {\n return offsetTop.value > displayableListHeight()\n}\n\nfunction insufficientRoomBelow(): boolean {\n return offsetBottom.value < displayableListHeight()\n}\n\nconst maxListHeightPx = computed((): string => (props.maxListHeightPX || 0) + 'px')\n\nconst animationDuration = computed((): string => (props.listAnimationDurationMs || 0) + 'ms')\n\nconst updatedListItemsToDisplay = computed((): any[] => {\n return !props.blockListChange ? props.filteredListItems : listItemsToDisplay.value\n})\n\nwatch(\n () => updatedListItemsToDisplay,\n (newVal: ComputedRef<any[]>) => {\n if (newVal) listItemsToDisplay.value = newVal.value\n },\n { immediate: false, deep: true }\n)\n\nlet unobserveTimeout = setTimeout(() => {}, 0)\n\nlet changeListener: DocumentViewChangeListener | null = null\n\nfunction openAndObserveChangeListener() {\n listHeightPx.value = getListULHeight()\n clearTimeout(unobserveTimeout)\n if (changeListener) changeListener.observe()\n listElementOpenAndVisible.value = true\n buttonRePositionCallback(undefined)\n}\n\nfunction closeAndUnobserveChangeListener() {\n clearTimeout(unobserveTimeout)\n unobserveTimeout = setTimeout(() => {\n if (!props.showDropDown) {\n listElementOpenAndVisible.value = false\n if (changeListener) changeListener.unobserve()\n }\n }, props.listAnimationDurationMs + 50)\n}\n\nwatch(\n () => props.showDropDown,\n (newV, oldV) => {\n if (newV !== oldV) {\n setOffsets()\n if (newV) openAndObserveChangeListener()\n else closeAndUnobserveChangeListener()\n }\n },\n { immediate: true }\n)\n\nfunction buttonRePositionCallback(e: any): void {\n setOffsets()\n nextTick(() => setOffsets())\n closeListOnScrollIfNecessary(e)\n}\n\nfunction closeListOnScrollIfNecessary(e: any) {\n if (!props.enableScrollClose || !props.showDropDown) return\n const notInitialized: boolean = typeof listContainerRef?.value?.contains !== 'function'\n if (notInitialized || e?.target?.nodeType == null || insideListOrOtherList(e)) return\n const isScrollEvent: boolean = ['scroll', 'wheel', 'touchmove'].includes(e?.type)\n if (props.showDropDown && isScrollEvent) props.parentMethods.closeList()\n}\n\nfunction insideListOrOtherList(e: any): boolean {\n const insideButton: boolean = !!dropDownButtonContainer.value?.contains(e?.target as Node)\n const insideList: boolean = !!listContainerRef.value?.contains(e.target as Node)\n const otherList: boolean = [e?.srcElement?.id, e?.target?.id].includes('super-list-select-list')\n return insideButton || insideList || otherList\n}\n\nfunction setOffsets(): void {\n setButtonOffset()\n setListOffset()\n}\n\nfunction setButtonOffset(): void {\n if (dropDownButtonContainer?.value == null) return\n const brc: DOMRect = (dropDownButtonContainer.value as HTMLElement).getBoundingClientRect()\n offsetTop.value = brc.top\n offsetBottom.value = window.innerHeight - brc.bottom\n parentWidthPx.value = brc.width + 'px'\n}\n\nfunction setListOffset(): void {\n /**\n * List container must be used when calculating position and not \"dropDownListUL\".\n * Position must be calculated as window viewport might not match list container viewport.\n **/\n if (dropDownButtonContainer?.value == null || listContainerRef?.value == null) return\n const brc: DOMRect = getButtonContainerElement().getBoundingClientRect()\n const slrc: DOMRect = (listContainerRef.value as HTMLElement).getBoundingClientRect()\n const currentListOffset: number = listOffset.value\n const currentOffsetLeft: number = offsetLeft.value\n if (reverseList.value) listOffset.value = currentListOffset - (brc.top - slrc.bottom)\n else listOffset.value = currentListOffset - (slrc.top - brc.bottom)\n offsetLeft.value = currentOffsetLeft - (slrc.left - brc.left)\n}\n\nfunction getButtonElement(): HTMLButtonElement {\n return (dropDownButtonContainer?.value as HTMLElement).getElementsByTagName('button')[0]\n}\n\nfunction getButtonContainerElement(): HTMLDivElement {\n return dropDownButtonContainer?.value as HTMLDivElement\n}\n\nonMounted(() => {\n changeListener = new DocumentViewChangeListener(buttonRePositionCallback, getButtonElement())\n setTimeout(() => buttonRePositionCallback(undefined), 250)\n})\n\nonUnmounted(() => {\n changeListener?.unobserve()\n})\n</script>\n\n<style scoped>\n.list-normal {\n top: var(--parent-y);\n}\n\n.list-reverse {\n bottom: var(--parent-y);\n}\n\n.select-list {\n --parent-width: v-bind(parentWidthPx);\n --parent-x: v-bind(parentXPx);\n --parent-y: v-bind(parentYPx);\n --duration: v-bind(animationDuration);\n --border-radius: var(--superlist-list-border-radius, 0);\n border-radius: var(--border-radius);\n width: var(--parent-width);\n min-width: var(--parent-width);\n left: var(--parent-x);\n display: block;\n transition-property: max-height, opacity, visibility, box-shadow;\n transition-duration: var(--duration, 300ms);\n transition-timing-function: cubic-bezier(0.1, 0.9, 0.35, 0.98);\n position: absolute;\n backdrop-filter: blur(3px);\n -webkit-backdrop-filter: blur(3px);\n background-color: rgb(255, 255, 255, 0.7);\n align-items: baseline;\n opacity: 0.25;\n z-index: 999;\n visibility: collapse;\n overflow: auto;\n max-height: 0;\n border: none !important; /* can't transition border */\n}\n\n.select-list:focus-visible,\n.select-list > ul:focus-visible,\n.super-list-button-container:focus-visible {\n outline: none;\n}\n\n.super-list-button-container {\n height: 100%;\n width: 100%;\n}\n\n.select-list.select-list-open {\n z-index: 999999;\n --max-height: v-bind(maxListHeightPx);\n max-height: var(--max-height, 0);\n}\n\n.select-list.no-scroll {\n overflow: hidden;\n}\n\n.select-list-fixed {\n position: fixed;\n opacity: 1;\n visibility: visible;\n}\n\n.list-content {\n --duration: v-bind(animationDuration);\n overflow: visible;\n margin: 0;\n padding: 0;\n border-style: none;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n list-style: none;\n max-width: 100%;\n}\n\n.select-list.select-list-scrollable {\n border-radius: var(--border-radius);\n}\n\n.select-list:not(.select-list-fixed) {\n transition: none;\n box-shadow: none !important;\n}\n\n@media (min-width: 640px) {\n .select-list.select-list-scrollable {\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n }\n .list-content {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 0 12 6\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z\"\n />\n </svg>\n</template>\n","<template>\n <button\n ref=\"buttonRef\"\n :tabindex=\"enableTextFilter ? -1 : 0\"\n @keydown.enter=\"enterHandler($event)\"\n @keydown.space=\"spaceHandler($event)\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @click=\"clickHandler()\"\n type=\"button\"\n :class=\"[{ 'click-through': props.enableTextFilter || props.showDropDown }]\"\n class=\"list-button\"\n >\n <slot></slot>\n <span class=\"list-button-icon-div\" :class=\"{ 'bigger-gap': props.showDropDown }\">\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': !props.showDropDown }]\"\n >\n <default-arrow aria-hidden=\"true\" />\n </span>\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': props.showDropDown }]\"\n >\n <default-arrow v-if=\"customIcon == null\" aria-hidden=\"true\" />\n </span>\n <span v-if=\"customIcon\" class=\"list-button-icon custom-icon\">\n <component aria-hidden=\"true\" :is=\"customIcon as object\" />\n </span>\n </span>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { type PropType, ref } from 'vue'\nimport DefaultArrow from './default-arrow.vue'\n\n// prettier-ignore\nconst props = defineProps({ // eslint-disable-line\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n enableTextFilter: {\n type: Boolean,\n required: true\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n reverseDropDownList: {\n type: Boolean,\n required: true\n }\n})\n\nconst buttonRef = ref(null)\n\nfunction clickHandler() {\n if (props.enableTextFilter) return\n else props.parentMethods.openList()\n}\n\nfunction enterHandler(event: KeyboardEvent) {\n if (props.enableTextFilter) {\n props.parentMethods.focusInput()\n event.stopPropagation()\n event.preventDefault()\n } else {\n props.parentMethods.press(event)\n }\n}\n\nfunction spaceHandler(event: KeyboardEvent) {\n if (!props.enableTextFilter) props.parentMethods.press(event)\n}\n\nfunction blurInput() {\n if (buttonRef?.value) {\n const button: HTMLButtonElement = buttonRef.value\n button.blur()\n }\n}\n\nfunction focusInput() {\n if (buttonRef?.value) (buttonRef.value as HTMLButtonElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, buttonRef })\n</script>\n\n<style scoped>\n.list-button-icon {\n display: flex;\n transition-timing-function: ease-in-out;\n transition-duration: 200ms;\n transition-property: transform;\n width: 0.6rem;\n transform: rotate(0deg);\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n justify-content: center;\n max-height: 18%;\n}\n\n.list-button-icon.custom-icon {\n max-height: 100%;\n width: 1.25rem;\n}\n\n.list-button-icon.rotate-180 {\n transform: rotate(180deg);\n}\n\n.list-button {\n position: relative;\n padding: 0;\n margin: 0;\n width: 100%;\n max-height: 100%;\n height: 100%;\n background-color: var(--superlist-background-colour, white);\n align-items: center;\n pointer-events: auto;\n cursor: pointer;\n}\n\n.list-button:focus,\n.list-button:focus-visible,\n.list-button:active {\n text-align: left;\n}\n\n.list-button-icon-div {\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-right: 0.75rem;\n max-height: 100%;\n height: 100%;\n gap: max(0.15rem, calc(6.25% + 0.075rem));\n transition: gap 200ms;\n}\n\n.list-button-icon-div.bigger-gap {\n gap: calc(40% - 0.25rem);\n}\n\n.click-through {\n pointer-events: none;\n}\n</style>\n","<template>\n <div style=\"position: relative\" :class=\"$attrs.class\">\n <item-list\n ref=\"itemListRef\"\n :show-drop-down=\"showDropDown\"\n :filteredListItems=\"filteredListItems\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"activeFocusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :max-list-height-p-x=\"maxListHeightPX\"\n :list-animation-duration-ms=\"listAnimationDurationMs\"\n :parent-methods=\"parentMethods\"\n v-model:blockListChange=\"blockListUpdates\"\n :total-options-count=\"totalOptionsCount\"\n @reverseDropDownList=\"reverseDropDownList = $event\"\n :enableScrollClose=\"enableScrollClose\"\n >\n <list-button\n ref=\"dropDownButtonInput\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :enable-text-filter=\"enableTextFilter\"\n :custom-icon=\"customIcon\"\n :reverse-drop-down-list=\"reverseDropDownList\"\n >\n <text-input\n ref=\"dropDownTextInput\"\n :enable-text-filter=\"enableTextFilter\"\n :show-drop-down=\"showDropDown\"\n :placeholder=\"placeholder\"\n :enable-button-click=\"enableButtonClick\"\n :parent-methods=\"parentMethods\"\n @update:query=\"query = $event\"\n />\n </list-button>\n </item-list>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, type PropType, ref, watch } from 'vue'\nimport {\n getLabelString,\n AbortablePromise,\n type DataSet,\n type EnumType,\n type ListRequest\n} from './DropDownLibrary'\nimport TextInput from './ListInputComponents/ListTextInput.vue'\nimport ItemList from './ListInputComponents/ItemList.vue'\nimport ListButton from './ListInputComponents/ListButton.vue'\n\nconst emit = defineEmits({ 'update:selected': null })\nconst props = defineProps({\n selected: {\n type: [String, Number, Object, null, undefined] as PropType<\n string | number | object | null | undefined\n >\n },\n options: {\n type: [Function, Array<string | number | object>] as PropType<\n ListRequest | Array<string | number | object>\n >,\n required: true\n },\n maxListOptions: {\n type: Number as PropType<number>,\n default: 50\n },\n maxListHeightPX: {\n type: Number as PropType<number>,\n default: 200\n },\n tooltip: {\n type: String,\n required: false\n },\n objectLabelKeyName: {\n type: String as PropType<string | null>,\n default: ''\n },\n enumKeyToLabelObjectArray: {\n type: Object as PropType<EnumType[]>,\n default: undefined\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n default: 300\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n forceTextFilterVisibilityTo: {\n type: Boolean as PropType<boolean>,\n default: undefined\n },\n customPlaceHolderFunction: {\n type: Function as PropType<Function | null>,\n default: null\n },\n colour: {\n type: String as PropType<string>,\n default: 'black'\n },\n scrollTextInputToTopOnMobile: {\n type: Boolean as PropType<boolean>,\n default: true\n }\n})\n\nconst listOptions = ref([] as Array<string | number | object>)\n\nconst abortablePromise = new AbortablePromise()\n\nconst totalOptionsCount = ref(0)\n\nconst enableTextFilter = computed((): boolean => {\n if (props.forceTextFilterVisibilityTo != undefined) return props.forceTextFilterVisibilityTo\n return totalOptionsCount.value > props.maxListOptions\n})\n\nconst showDropDown = ref<boolean>(false)\n\nconst blockListUpdates = ref<boolean>(false)\n\nconst reverseDropDownList = ref<boolean>(false)\n\nconst enableButtonClick = ref(true)\n\nconst loadingData = ref(false)\nconst errorState = ref(false)\n\nconst itemListRef = ref(ItemList)\nconst dropDownTextInput = ref(TextInput)\nconst dropDownButtonInput = ref(ListButton)\n\nconst query = ref('')\n\nwatch(\n () => query.value,\n (newV, oldV) => {\n if (newV !== oldV && typeof props.options === 'function') loadData(newV)\n }\n)\n\nconst blurInputIfNecessary = () => {\n if (enableTextFilter.value) dropDownTextInput?.value?.blurInput()\n}\n\nconst closeList = () => {\n clearTimeout(blockScrollCloseTimeout)\n blurInputIfNecessary()\n query.value = ''\n showDropDown.value = false\n enableButtonClick.value = true\n}\n\nconst placeholder = computed((): string => {\n if (errorState?.value === true) return 'Error loading data'\n if (loadingData?.value === true) return 'Loading...'\n return getLabel(props.selected)\n})\n\nconst updatedSelected = (newValue: any) => {\n if (newValue) emit('update:selected', newValue)\n closeList()\n}\n\nconst getLabel = (value?: string | number | object | null): string => {\n return getLabelString(\n value,\n props.customPlaceHolderFunction,\n props.objectLabelKeyName,\n props.enumKeyToLabelObjectArray\n )\n}\n\nfunction invalidArgumentError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid options argument provided to ListInputComponent`)\n}\n\nfunction invalidResponseError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid response provided to ListInputComponent, no total count key found`)\n}\n\nfunction invalidListValueKeyError() {\n loadingData.value = true\n errorState.value = true\n throw new Error('Invalid objectLabelKeyName for provided Dropdown list value.')\n}\n\nonMounted(() => {\n if (typeof props.options !== 'function' && !Array.isArray(props.options)) invalidArgumentError()\n else initializeOptions()\n})\n\nconst mouseHoveringOnList = ref(false)\n\nconst selectedIndex = ref(0)\nconst focusedIndex = ref(0)\nconst activeFocusedIndex = ref(0)\n\nwatch(\n () => focusedIndex.value,\n (newV, oldV) => {\n if (newV != oldV && !blockListUpdates.value) {\n activeFocusedIndex.value = newV\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => blockListUpdates.value,\n (newV) => {\n if (!newV) {\n activeFocusedIndex.value = focusedIndex.value\n }\n },\n { immediate: true }\n)\n\nconst filteredListItems = computed(() => {\n // if is function, return listOptions variable which is set by function\n if (typeof props.options === 'function' && !Array.isArray(props.options)) return listOptions.value\n const qry = query.value\n const lo = listOptions.value\n // else, is array, return filtered array\n return qry === '' ? lo : lo.filter((v) => getLabel(v).toLowerCase().includes(qry.toLowerCase()))\n})\n\nwatch(\n () => filteredListItems.value,\n (newV, oldV) => {\n if (JSON.stringify(newV) !== JSON.stringify(oldV)) focusSelectedOrFirstListItem()\n },\n { immediate: false, deep: true }\n)\n\nconst mouseOverList = () => {\n mouseHoveringOnList.value = true\n}\n\nconst focusSelectedOrFirstListItem = () => {\n const existingIndex = getSelectedValueIndex()\n selectedIndex.value = existingIndex /* may not be in the filtered list, allowed to be -1 */\n focusedIndex.value = existingIndex > -1 ? existingIndex : 0 /* default to first value */\n}\n\nfunction getSelectedValueIndex() {\n if (props.selected == null) return -1\n const labelsArray = filteredListItems.value.map((v) => getLabel(v))\n const matchingLabelsArray = labelsArray.filter((v) => v === getLabel(props.selected))\n if (matchingLabelsArray.length > 1) {\n const matchingIndexes = matchingLabelsArray.map((v) => labelsArray.indexOf(v))\n for (let i = 0; i < matchingIndexes.length; i++) {\n const currentMatchingOptionString = JSON.stringify(\n filteredListItems.value[matchingIndexes[i]]\n )\n const selectedOptionString = JSON.stringify(props.selected)\n if (currentMatchingOptionString === selectedOptionString) return matchingIndexes[i]\n }\n return -1\n }\n return labelsArray.indexOf(getLabel(props.selected))\n}\n\nconst openList = () => {\n if (loadingData.value) return\n if (!showDropDown.value) {\n blockListUpdates.value = false\n focusSelectedOrFirstListItem()\n scrollMobileTextInputToTop()\n showDropDown.value = true\n }\n mouseHoveringOnList.value = false\n enableButtonClick.value = false\n}\n\nconst scrollMobileTextInputToTop = () => {\n const mobileWindow: boolean = window?.innerWidth != null && window.innerWidth < 640\n const mobileScreen: boolean = screen?.width != null && screen.width < 640\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if ((mobileWindow || mobileScreen) && enableTextFilter.value) {\n preventScrollClose()\n if (props.scrollTextInputToTopOnMobile)\n textInput?.scrollIntoView({ block: 'start', inline: 'center' })\n }\n}\n\nconst enableScrollClose = ref<boolean>(true)\nlet blockScrollCloseTimeout = setTimeout(() => {}, 0)\n\nfunction preventScrollClose() {\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if (!textInput) return\n enableScrollClose.value = false\n let preventingScrollCloseInterval: NodeJS.Timeout | null = null\n\n const clearAll = () => {\n if (preventingScrollCloseInterval) clearInterval(preventingScrollCloseInterval)\n clearTimeout(blockScrollCloseTimeout)\n setTimeout(() => {\n enableScrollClose.value = true\n }, 100)\n }\n\n blockScrollCloseTimeout = setTimeout(clearAll, 5000)\n\n preventingScrollCloseInterval = setInterval(() => {\n if (\n showDropDown.value === false ||\n (textInput?.scrollTop === 0 && document.readyState === 'complete')\n )\n clearAll()\n }, 100)\n}\n\nconst focusInput = () => {\n if (enableTextFilter?.value == true) dropDownTextInput.value.focusInput()\n else if (dropDownButtonInput?.value?.focusInput) dropDownButtonInput?.value?.focusInput()\n}\n\nasync function initializeOptions(): Promise<void> {\n if (typeof props.options === 'function') {\n await loadData(query.value ? query.value : undefined, true)\n } else {\n validateListOptions(props.options as Array<string | number | object>)\n totalOptionsCount.value = listOptions.value.length\n }\n initializeSelected()\n}\n\ndefineExpose({ initializeOptions, getLabel })\n\nfunction initializeSelected() {\n const invalidSelection = getSelectedValueIndex() == -1\n const existingOptionNotSelected = invalidSelection && listOptions.value && !!listOptions.value[0]\n if (existingOptionNotSelected) updatedSelected(listOptions.value[0])\n}\n\nasync function loadData(stringFilter?: string, disableOnLoad: boolean = true) {\n loadingData.value = disableOnLoad\n const func = async () => (props.options as Function)(props.maxListOptions, stringFilter || '')\n const next = (response: DataSet<any>) => {\n if (!response || !('data' in response)) invalidArgumentError()\n validateListOptions(response.data)\n getOptionsCount(response?.data?.length ?? 0).then(() => {\n loadingData.value = false\n })\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nfunction validateListOptions(optns: Array<string | number | object>) {\n if (!Array.isArray(optns)) invalidArgumentError()\n if (optns.length > 0 && typeof optns[0] === 'object') validateObjectList(optns as Array<object>)\n listOptions.value = optns as Array<string | number | object>\n}\n\nfunction validateObjectList(values: Array<object>) {\n if (!props.objectLabelKeyName || props.objectLabelKeyName.length === 0) invalidListValueKeyError()\n const key: string = props.objectLabelKeyName as string\n for (let i = 0; i < values.length; i++) {\n if (typeof values[i] !== 'object' || !(key in values[i])) invalidListValueKeyError()\n }\n}\n\nasync function getOptionsCount(dataLength: number): Promise<void> {\n const func = async () => (props.options as Function)(1, '')\n const next = (response: DataSet<any>) => {\n if (!response || !('totalNum' in response)) invalidResponseError()\n totalOptionsCount.value = response.totalNum ?? dataLength\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nconst getCurrentlyFocusedListItemElement = (): HTMLElement | null => {\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n return listInput?.getElementsByTagName('li')[focusedIndex.value] ?? null\n}\n\nconst press = (event?: any) => {\n if (showDropDown.value == false) {\n openList()\n } else if (event) {\n keypress(event)\n }\n}\n\nconst keypress = (event: any) => {\n const key: string = event.key || event.code\n if (key === 'Tab' || key === 'Escape') closeList()\n if (key === 'ArrowDown') down(event)\n if (key === 'ArrowUp') up(event)\n if (key === 'Enter' || key === ' ') updateSelectedFromTextQuery()\n event.preventDefault()\n event.stopPropagation()\n}\n\nconst updateSelectedFromTextQuery = () => {\n if (filteredListItems.value.length > 0) {\n blockListUpdates.value = true\n updatedSelected(filteredListItems.value[focusedIndex.value])\n } else {\n closeList()\n }\n}\n\nconst down = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value < filteredListItems.value.length - 1) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value++\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst up = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value > 0) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value--\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst unfocus = (event: any) => {\n if (showDropDown?.value === false) return\n if (query.value.length > 0) blockListUpdates.value = true\n const list: HTMLElement | null = itemListRef?.value?.listContainerRef as HTMLElement | null\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n const isListInput = event?.relatedTarget && listInput?.isEqualNode(event?.relatedTarget)\n const isList = event?.relatedTarget && list && list.contains(event?.relatedTarget)\n const isListItem = event?.relatedTarget && list && list.isEqualNode(event?.relatedTarget)\n if (isList || isListInput) return\n if (isListItem) {\n focusInput()\n return\n }\n closeList()\n}\n\nconst parentMethods = {\n openList: openList,\n unfocus: unfocus,\n press: press,\n mouseOverList: mouseOverList,\n getLabel: getLabel,\n updatedSelected: updatedSelected,\n focusInput: focusInput,\n closeList: closeList\n}\n</script>\n\n<style scoped>\n* {\n box-sizing: border-box;\n}\n</style>\n"],"names":["DocumentViewChangeListener","targetFunction","targetNode","event","eventType","getLabelString","value","customLabelGetFunction","objectLabelKeyName","enumKeyToLabelObjectArray","getEnumLabel","enumKeyArray","eT","AbortablePromise","signal","asyncFunc","then","response","func","reason","emit","__emit","props","__props","textInputRef","ref","focusInHandler","e","focusOutHandler","lastQuery","updateQuery","textInputSize","computed","refLength","placeHolderLength","pointerEventsClass","textInputColourClass","blurInput","input","focusInput","__expose","_createElementBlock","_createElementVNode","$event","_cache","_withKeys","_normalizeClass","_openBlock","_hoisted_1","iRefs","useTemplateRef","focusedLi","focused","watch","scrollHighlightedListItemToTop","scrollHighlightedListItemIntoView","li","liParent","aboveTop","belowBottom","_Fragment","_renderList","listItem","index","_withModifiers","_hoisted_2","_toDisplayString","_createBlock","DefaultTick","_hoisted_3","dropDownButtonContainer","dropDownListUL","listContainerRef","offsetLeft","offsetTop","offsetBottom","listOffset","parentWidthPx","listElementOpenAndVisible","listItemsToDisplay","listHeightPx","reverseList","sufficientRoomAbove","insufficientRoomBelow","noScroll","reverse","parentXPx","parentYPx","preventSpaceScrollingList","refocusTextInput","list","target","getListULHeight","displayableListHeight","ulHt","maxListHeightPx","animationDuration","updatedListItemsToDisplay","newVal","unobserveTimeout","changeListener","openAndObserveChangeListener","buttonRePositionCallback","closeAndUnobserveChangeListener","newV","oldV","setOffsets","nextTick","closeListOnScrollIfNecessary","insideListOrOtherList","isScrollEvent","insideButton","insideList","otherList","setButtonOffset","setListOffset","brc","getButtonContainerElement","slrc","currentListOffset","currentOffsetLeft","getButtonElement","onMounted","onUnmounted","_renderSlot","_ctx","_createVNode","ListItem","buttonRef","clickHandler","enterHandler","spaceHandler","DefaultArrow","_resolveDynamicComponent","listOptions","abortablePromise","totalOptionsCount","enableTextFilter","showDropDown","blockListUpdates","reverseDropDownList","enableButtonClick","loadingData","errorState","itemListRef","ItemList","dropDownTextInput","TextInput","dropDownButtonInput","ListButton","query","blurInputIfNecessary","closeList","blockScrollCloseTimeout","placeholder","getLabel","updatedSelected","newValue","invalidArgumentError","invalidResponseError","invalidListValueKeyError","initializeOptions","mouseHoveringOnList","selectedIndex","focusedIndex","activeFocusedIndex","filteredListItems","qry","lo","v","focusSelectedOrFirstListItem","mouseOverList","existingIndex","getSelectedValueIndex","labelsArray","matchingLabelsArray","matchingIndexes","i","currentMatchingOptionString","selectedOptionString","openList","scrollMobileTextInputToTop","mobileWindow","mobileScreen","textInput","preventScrollClose","enableScrollClose","preventingScrollCloseInterval","clearAll","loadData","validateListOptions","initializeSelected","stringFilter","disableOnLoad","next","getOptionsCount","optns","validateObjectList","values","key","dataLength","getCurrentlyFocusedListItemElement","press","keypress","down","up","updateSelectedFromTextQuery","parentMethods","listInput","isListInput","isList","isListItem","$attrs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"super-list.js","sources":["../src/DropDownLibrary.ts","../src/ListInputComponents/ListTextInput.vue","../src/ListInputComponents/default-tick.vue","../src/ListInputComponents/ListItem.vue","../src/ListInputComponents/ItemList.vue","../src/ListInputComponents/default-arrow.vue","../src/ListInputComponents/ListButton.vue","../src/super-list.vue"],"sourcesContent":["export interface DocumentViewChangeListener {\n targetNode: HTMLElement\n observe(): void\n unobserve(): void\n pauseMutationObserver(): void\n unpauseMutationObserver(): void\n}\n\nexport class DocumentViewChangeListener implements DocumentViewChangeListener {\n private readonly eventsTypes: string[] = ['resize', 'load', 'scroll', 'wheel', 'touchmove']\n private readonly config: MutationObserverInit = {\n attributes: true,\n childList: true,\n subtree: true\n }\n private mutationObserver: MutationObserver\n private callbackFunction: EventListenerOrEventListenerObject\n\n constructor(targetFunction: Function, targetNode: any = document.body) {\n this.targetNode = targetNode\n this.callbackFunction = ((event: any) =>\n targetFunction(event)) as EventListenerOrEventListenerObject\n this.mutationObserver = new MutationObserver((() => targetFunction()) as MutationCallback)\n }\n\n public observe(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n for (const eventType of this.eventsTypes) this.addListener(eventType)\n this.addResizeListener()\n this.addTransitionEndListener()\n }\n\n pauseMutationObserver(): void {\n this.mutationObserver.disconnect()\n }\n\n unpauseMutationObserver(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n }\n\n public unobserve(): void {\n this.mutationObserver.disconnect()\n for (const eventType of this.eventsTypes) this.removeListener(eventType)\n this.removeResizeListener()\n this.removeTransitionEndListener()\n }\n\n private addListener(eventType: string): void {\n document.addEventListener(eventType, this.callbackFunction, true)\n }\n\n private removeListener(eventType: string): void {\n document.removeEventListener(eventType, this.callbackFunction, true)\n }\n\n private addTransitionEndListener(): void {\n this.targetNode.addEventListener('transitionend', this.callbackFunction)\n }\n\n private removeTransitionEndListener(): void {\n this.targetNode.removeEventListener('transitionend', this.callbackFunction)\n }\n\n private addResizeListener(): void {\n window.addEventListener('resize', this.callbackFunction)\n }\n\n private removeResizeListener(): void {\n window.removeEventListener('resize', this.callbackFunction)\n }\n}\n\nexport function getLabelString(\n value: string | number | object | null | undefined,\n customLabelGetFunction: Function | null | undefined,\n objectLabelKeyName: string | null,\n enumKeyToLabelObjectArray?: EnumType[]\n): string {\n if (customLabelGetFunction != null) return customLabelGetFunction(value)\n if (value == null) return ''\n if (typeof value === 'object') return value[objectLabelKeyName as keyof typeof value]\n if (enumKeyToLabelObjectArray) return getEnumLabel(value, enumKeyToLabelObjectArray)\n return '' + value\n}\n\nfunction getEnumLabel(value: string | number, enumKeyArray: EnumType[]): string {\n return (enumKeyArray.find((eT: EnumType): boolean => eT.type === value)?.label ?? '') as string\n}\n\nexport type ListRequest = (maxNumItems: number, stringFilter?: string) => Promise<DataSet<any>>\n\nexport type EnumType = { type: string; label: string }\n\nexport type DataSet<T> = { data: T[]; totalNum: number; modelName?: string }\n\nexport interface AbortablePromise {\n abortController: AbortController\n func: Function\n then: Function\n}\n\nexport class AbortablePromise implements AbortablePromise {\n constructor() {\n this.abortController = new AbortController()\n this.func = (): void => {}\n this.then = (): void => {}\n }\n\n async abortablePromise(signal: AbortSignal, asyncFunc: Function, then: Function): Promise<any> {\n const response = await asyncFunc()\n if (signal.aborted) return\n return then(response)\n }\n\n setFunc(func: Function): void {\n this.func = func\n }\n\n setThen(then: Function): void {\n this.then = then\n }\n\n execute(): Promise<any> {\n return this.abortablePromise(this.abortController.signal, this.func, this.then)\n }\n\n abort(reason?: string): void {\n this.abortController.abort(reason || 'Aborted By Controller.')\n this.abortController = new AbortController()\n }\n\n resetAndExecute(func: Function, then: Function): Promise<any> {\n this.abort('New Request From Controller.')\n this.setFunc(func)\n this.setThen(then)\n return this.execute()\n }\n}\n","<template>\n <form @submit.prevent style=\"display: contents !important\">\n <!-- Forces virtual keyboard to display return/enter key when list exists in external form -->\n <input\n ref=\"textInputRef\"\n :tabindex=\"enableTextFilter ? 0 : -1\"\n @keydown.enter=\"parentMethods.press($event)\"\n @keydown.space=\"parentMethods.press()\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusin=\"focusInHandler($event)\"\n @focusout=\"focusOutHandler($event)\"\n @input=\"updateQuery($event as InputEvent)\"\n @change=\"updateQuery($event as InputEvent)\"\n @paste=\"updateQuery($event as ClipboardEvent)\"\n type=\"text\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n :placeholder=\"placeholder\"\n :size=\"textInputSize\"\n :class=\"[\n pointerEventsClass,\n textInputColourClass,\n { 'text-filter-disabled': !enableTextFilter }\n ]\"\n class=\"list-filter-text-input\"\n />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType, ref } from 'vue'\n\nconst emit = defineEmits({\n 'update:selected': null,\n 'update:query': null,\n 'update:press': null\n})\n\nconst props = defineProps({\n enableTextFilter: {\n type: Boolean as PropType<boolean | null>,\n required: true\n },\n placeholder: {\n type: String as PropType<string | undefined>,\n default: undefined\n },\n enableButtonClick: {\n type: Boolean as PropType<boolean | null>,\n default: true\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n }\n})\nconst textInputRef = ref(null)\n\nfunction focusInHandler(e: FocusEvent) {\n if ('sourceCapabilities' in e && e.sourceCapabilities == null) props.parentMethods.closeList()\n else props.parentMethods.openList()\n}\n\nfunction focusOutHandler(event: FocusEvent) {\n props.parentMethods.unfocus(event)\n}\n\nlet lastQuery: string = ''\n\nfunction updateQuery(event: any) {\n if (event?.target?.value != undefined && event?.target?.value !== lastQuery)\n emit('update:query', event.target.value)\n lastQuery = event?.target?.value ?? ''\n}\n\nconst textInputSize = computed(() => {\n const refLength: number = textInputRef?.value ? (textInputRef.value as string).length : 0\n const placeHolderLength: number = props.placeholder?.length || 0\n return refLength > 0 ? refLength : placeHolderLength > 0 ? placeHolderLength : 5\n})\n\nconst pointerEventsClass = computed(() => {\n const enable: boolean = props.enableButtonClick === true && props.enableTextFilter === true\n return enable ? '' : 'click-through'\n})\n\nconst textInputColourClass = computed(() => {\n const dark: boolean = (props.showDropDown && !props.enableTextFilter) || !props.showDropDown\n return dark ? 'dark-placeholder-text' : 'light-placeholder-text'\n})\n\nfunction blurInput() {\n if (textInputRef?.value) {\n const input: HTMLInputElement = textInputRef.value\n input.blur()\n input.value = ''\n }\n}\n\nfunction focusInput() {\n if (textInputRef?.value) (textInputRef.value as HTMLInputElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, textInputRef })\n</script>\n\n<style scoped>\n.list-filter-text-input {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n text-align: center;\n padding: 0.125rem 2rem 0.125rem 0.5rem;\n width: 100%;\n height: 100%;\n margin: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n background-color: transparent;\n border: 0 none;\n pointer-events: auto;\n cursor: text;\n}\n\n.list-filter-text-input:focus,\n.list-filter-text-input:focus-visible,\n.list-filter-text-input:active {\n text-align: left;\n}\n\n.click-through {\n pointer-events: none;\n}\n\n.dark-placeholder-text::placeholder {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n}\n\n.light-placeholder-text::placeholder {\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.text-filter-disabled {\n background-color: transparent;\n border: none;\n outline: none;\n box-shadow: none;\n filter: none;\n}\n\n@media (min-width: 640px) {\n .list-filter-text-input {\n font-size: 0.875rem;\n line-height: 1.5rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 -16 16 17\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z\"\n />\n </svg>\n</template>\n","<template>\n <li\n v-for=\"(listItem, index) in filteredListItems\"\n :key=\"index\"\n ref=\"items\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n tabindex=\"-1\"\n @mousedown.left=\"parentMethods.updatedSelected(listItem)\"\n :class=\"[\n { 'list-option-selected': selectedIndex === index },\n {\n 'list-option-active':\n filteredListItems.length === 1 || (focusedIndex === index && !mouseHoveringOnList)\n },\n 'list-option'\n ]\"\n >\n <span class=\"list-item-span\">{{ parentMethods.getLabel(listItem) }}</span>\n <default-tick v-if=\"selectedIndex === index\" class=\"list-item-icon\" aria-hidden=\"true\" />\n </li>\n <li\n v-if=\"filteredListItems.length === 0\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">No Items To Display.</span>\n </li>\n <li\n v-if=\"totalOptionsCount && totalOptionsCount > (filteredListItems?.length || 0)\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">\n +{{ totalOptionsCount - filteredListItems?.length || 0 }} More Items...</span\n >\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type ShallowRef, useTemplateRef, watch } from 'vue'\nimport DefaultTick from './default-tick.vue'\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n listElementOpenAndVisible: {\n type: Boolean,\n default: false\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n default: false\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n }\n})\ntype HTMLLIElementOrArray = HTMLLIElement | HTMLLIElement[] | null\nconst iRefs: Readonly<ShallowRef<HTMLLIElementOrArray>> = useTemplateRef('items')\n\nconst focusedLi = computed((): HTMLElement | null => {\n if (!iRefs?.value) return null\n const refs: Array<HTMLLIElement | null> = Array.isArray(iRefs.value) ? iRefs.value : [iRefs.value]\n const focused = refs[props.focusedIndex]\n if (!focused) return null\n const isObject: boolean = typeof focused == 'object'\n const hasScrollIntoView: boolean = isObject && 'scrollIntoView' in focused\n const hasScrollFunc: boolean = hasScrollIntoView && typeof focused['scrollIntoView'] == 'function'\n return hasScrollFunc ? focused : null\n})\n\nwatch(\n () => props.showDropDown,\n () => scrollHighlightedListItemToTop()\n)\nwatch(\n () => props.listElementOpenAndVisible,\n () => scrollHighlightedListItemIntoView()\n)\nwatch(\n () => focusedLi.value,\n () => scrollHighlightedListItemIntoView()\n)\n\nfunction scrollHighlightedListItemToTop(): void {\n if (!props.showDropDown || !focusedLi?.value?.parentElement?.parentElement) return\n focusedLi.value.parentElement.parentElement.scrollTop = focusedLi.value.offsetTop\n}\n\nfunction scrollHighlightedListItemIntoView(): void {\n const li = focusedLi.value\n const liParent = li?.parentElement?.parentElement\n if (!props.showDropDown || !li || !liParent) return\n const aboveTop = li.offsetTop - liParent.scrollTop < 0\n const belowBottom = li.offsetTop + li.offsetHeight - liParent.scrollTop > liParent.clientHeight\n if (aboveTop) liParent.scrollTop = li.offsetTop\n if (belowBottom) liParent.scrollTop = li.offsetTop + li.clientHeight - liParent.clientHeight\n}\n</script>\n\n<style scoped>\n.list-option {\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n transition-property: font-weight, background-color, color, text-shadow;\n transition-duration: 500ms;\n transition-timing-function: ease;\n font-weight: 400;\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n}\n\n.list-option:focus-visible,\n.list-option > span:focus-visible {\n outline: none;\n}\n\n.list-option-selected {\n font-weight: 600;\n}\n\n.list-option-message {\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.list-option-active:hover,\n.list-option-active,\n.list-option-selected:hover,\n.list-option:hover {\n font-weight: 600;\n background-color: var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n color: var(--superlist-background-colour, white);\n text-shadow: 1px 1px 3px var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n transition-duration: 0s !important;\n}\n\n.list-item-icon {\n display: flex;\n height: 1rem;\n width: 1rem;\n position: absolute;\n right: 0.7rem;\n margin-top: -0.1rem;\n align-self: center;\n}\n\n.list-item-span {\n padding: 0.5rem 1.75rem 0.5rem 0.75rem;\n width: 100%;\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n</style>\n","<template>\n <div ref=\"dropDownButtonContainer\" class=\"super-list-button-container\">\n <slot></slot>\n </div>\n <div\n id=\"super-list-select-list\"\n ref=\"listContainerRef\"\n @mouseenter=\"parentMethods.mouseOverList()\"\n tabindex=\"-1\"\n :class=\"[\n 'select-list',\n reverseList ? 'list-reverse' : 'list-normal',\n { 'select-list-open': showDropDown },\n { 'no-scroll': noScroll && listElementOpenAndVisible },\n { 'select-list-fixed': listElementOpenAndVisible },\n { 'select-list-scrollable': !noScroll }\n ]\"\n @keydown.space=\"preventSpaceScrollingList($event)\"\n @mouseup.left=\"refocusTextInput($event)\"\n >\n <ul tabindex=\"-1\" ref=\"dropDownListUL\" class=\"list-content\">\n <list-item\n :filteredListItems=\"listItemsToDisplay\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"focusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :listElementOpenAndVisible=\"listElementOpenAndVisible\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :total-options-count=\"totalOptionsCount\"\n />\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n type ComputedRef,\n nextTick,\n onMounted,\n onUnmounted,\n type PropType,\n ref,\n watch\n} from 'vue'\nimport ListItem from '../ListInputComponents/ListItem.vue'\nimport { DocumentViewChangeListener } from '../DropDownLibrary'\n\nconst emit = defineEmits(['reverseDropDownList'])\n\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n maxListHeightPX: {\n type: Number,\n required: true\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n required: true\n },\n blockListChange: {\n type: Boolean,\n required: true\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n },\n enableScrollClose: {\n type: Boolean,\n default: true\n }\n})\n\nconst dropDownButtonContainer = ref<HTMLElement | null>(null)\nconst dropDownListUL = ref<HTMLElement | null>(null)\nconst listContainerRef = ref<HTMLElement | null>(null)\nconst offsetLeft = ref<number>(0)\nconst offsetTop = ref<number>(0)\nconst offsetBottom = ref<number>(0)\nconst listOffset = ref<number>(0)\nconst parentWidthPx = ref<string>('0px')\nconst listElementOpenAndVisible = ref<boolean>(false)\nconst listItemsToDisplay = ref<any[]>([])\nconst listHeightPx = ref<number>(0)\n\nconst reverseList = computed((): boolean => {\n if (!listElementOpenAndVisible.value || window?.innerHeight == null) return false\n return sufficientRoomAbove() && insufficientRoomBelow()\n})\n\nconst noScroll = computed((): boolean => {\n return props.maxListHeightPX >= listHeightPx.value\n})\n\nwatch(\n () => reverseList.value,\n (reverse: boolean) => emit('reverseDropDownList', reverse),\n { immediate: true }\n)\n\nconst parentXPx = computed((): string => offsetLeft.value + 'px')\nconst parentYPx = computed((): string => listOffset.value + 'px')\n\ndefineExpose({ listContainerRef })\n\nconst preventSpaceScrollingList = (event: any) => {\n if (event?.key && event.key === ' ') event.preventDefault()\n}\n\nconst refocusTextInput = (event: MouseEvent) => {\n const list = listContainerRef?.value as HTMLElement | null\n const target = event.target as HTMLElement | null\n if (!(list && target && list.contains(target)) || list.isEqualNode(target))\n props.parentMethods.focusInput()\n}\n\nfunction getListULHeight(): number {\n return dropDownListUL?.value ? (dropDownListUL?.value as HTMLElement).clientHeight : 0\n}\n\nfunction displayableListHeight(): number {\n if (!listElementOpenAndVisible.value || getListULHeight() === 0) return props.maxListHeightPX\n const ulHt: number = getListULHeight() === 0 ? props.maxListHeightPX : +getListULHeight()\n return props.maxListHeightPX && props.maxListHeightPX > ulHt ? ulHt : props.maxListHeightPX\n}\n\nfunction sufficientRoomAbove(): boolean {\n return offsetTop.value > displayableListHeight()\n}\n\nfunction insufficientRoomBelow(): boolean {\n return offsetBottom.value < displayableListHeight()\n}\n\nconst maxListHeightPx = computed((): string => (props.maxListHeightPX || 0) + 'px')\n\nconst animationDuration = computed((): string => (props.listAnimationDurationMs || 0) + 'ms')\n\nconst updatedListItemsToDisplay = computed((): any[] => {\n return !props.blockListChange ? props.filteredListItems : listItemsToDisplay.value\n})\n\nwatch(\n () => updatedListItemsToDisplay,\n (newVal: ComputedRef<any[]>) => {\n if (newVal) listItemsToDisplay.value = newVal.value\n },\n { immediate: false, deep: true }\n)\n\nlet unobserveTimeout = setTimeout(() => {}, 0)\n\nlet changeListener: DocumentViewChangeListener | null = null\n\nfunction openAndObserveChangeListener() {\n listHeightPx.value = getListULHeight()\n clearTimeout(unobserveTimeout)\n if (changeListener) changeListener.observe()\n listElementOpenAndVisible.value = true\n buttonRePositionCallback(undefined)\n}\n\nfunction closeAndUnobserveChangeListener() {\n clearTimeout(unobserveTimeout)\n unobserveTimeout = setTimeout(() => {\n if (!props.showDropDown) {\n listElementOpenAndVisible.value = false\n if (changeListener) changeListener.unobserve()\n }\n }, props.listAnimationDurationMs + 50)\n}\n\nwatch(\n () => props.showDropDown,\n (newV, oldV) => {\n if (newV !== oldV) {\n setOffsets()\n if (newV) openAndObserveChangeListener()\n else closeAndUnobserveChangeListener()\n }\n },\n { immediate: true }\n)\n\nfunction buttonRePositionCallback(e: any): void {\n setOffsets()\n nextTick(() => setOffsets())\n closeListOnScrollIfNecessary(e)\n}\n\nfunction closeListOnScrollIfNecessary(e: any) {\n if (!props.enableScrollClose || !props.showDropDown) return\n const notInitialized: boolean = typeof listContainerRef?.value?.contains !== 'function'\n if (notInitialized || e?.target?.nodeType == null || insideListOrOtherList(e)) return\n const isScrollEvent: boolean = ['scroll', 'wheel', 'touchmove'].includes(e?.type)\n if (props.showDropDown && isScrollEvent) props.parentMethods.closeList()\n}\n\nfunction insideListOrOtherList(e: any): boolean {\n const insideButton: boolean = !!dropDownButtonContainer.value?.contains(e?.target as Node)\n const insideList: boolean = !!listContainerRef.value?.contains(e.target as Node)\n const otherList: boolean = [e?.srcElement?.id, e?.target?.id].includes('super-list-select-list')\n return insideButton || insideList || otherList\n}\n\nfunction setOffsets(): void {\n setButtonOffset()\n setListOffset()\n}\n\nfunction setButtonOffset(): void {\n if (dropDownButtonContainer?.value == null) return\n const brc: DOMRect = (dropDownButtonContainer.value as HTMLElement).getBoundingClientRect()\n offsetTop.value = brc.top\n offsetBottom.value = window.innerHeight - brc.bottom\n parentWidthPx.value = brc.width + 'px'\n}\n\nfunction setListOffset(): void {\n /**\n * List container must be used when calculating position and not \"dropDownListUL\".\n * Position must be calculated as window viewport might not match list container viewport.\n **/\n if (dropDownButtonContainer?.value == null || listContainerRef?.value == null) return\n const brc: DOMRect = getButtonContainerElement().getBoundingClientRect()\n const slrc: DOMRect = (listContainerRef.value as HTMLElement).getBoundingClientRect()\n const currentListOffset: number = listOffset.value\n const currentOffsetLeft: number = offsetLeft.value\n if (reverseList.value) listOffset.value = currentListOffset - (brc.top - slrc.bottom)\n else listOffset.value = currentListOffset - (slrc.top - brc.bottom)\n offsetLeft.value = currentOffsetLeft - (slrc.left - brc.left)\n}\n\nfunction getButtonElement(): HTMLButtonElement {\n return (dropDownButtonContainer?.value as HTMLElement).getElementsByTagName('button')[0]\n}\n\nfunction getButtonContainerElement(): HTMLDivElement {\n return dropDownButtonContainer?.value as HTMLDivElement\n}\n\nonMounted(() => {\n changeListener = new DocumentViewChangeListener(buttonRePositionCallback, getButtonElement())\n setTimeout(() => buttonRePositionCallback(undefined), 250)\n})\n\nonUnmounted(() => {\n changeListener?.unobserve()\n})\n</script>\n\n<style scoped>\n.list-normal {\n top: var(--parent-y);\n}\n\n.list-reverse {\n bottom: var(--parent-y);\n}\n\n.select-list {\n --parent-width: v-bind(parentWidthPx);\n --parent-x: v-bind(parentXPx);\n --parent-y: v-bind(parentYPx);\n --duration: v-bind(animationDuration);\n --border-radius: var(--superlist-list-border-radius, 0);\n border-radius: var(--border-radius);\n width: var(--parent-width);\n min-width: var(--parent-width);\n left: var(--parent-x);\n display: block;\n transition-property: max-height, opacity, visibility, box-shadow;\n transition-duration: var(--duration, 300ms);\n transition-timing-function: cubic-bezier(0.1, 0.9, 0.35, 0.98);\n position: absolute;\n backdrop-filter: blur(3px);\n -webkit-backdrop-filter: blur(3px);\n background-color: rgb(255, 255, 255, 0.7);\n align-items: baseline;\n opacity: 0.25;\n z-index: 999;\n visibility: collapse;\n overflow: auto;\n max-height: 0;\n border: none !important; /* can't transition border */\n}\n\n.select-list:focus-visible,\n.select-list > ul:focus-visible,\n.super-list-button-container:focus-visible {\n outline: none;\n}\n\n.super-list-button-container {\n height: 100%;\n width: 100%;\n}\n\n.select-list.select-list-open {\n z-index: 999999;\n --max-height: v-bind(maxListHeightPx);\n max-height: var(--max-height, 0);\n}\n\n.select-list.no-scroll {\n overflow: hidden;\n}\n\n.select-list-fixed {\n position: fixed;\n opacity: 1;\n visibility: visible;\n}\n\n.list-content {\n --duration: v-bind(animationDuration);\n overflow: visible;\n margin: 0;\n padding: 0;\n border-style: none;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n list-style: none;\n max-width: 100%;\n}\n\n.select-list.select-list-scrollable {\n border-radius: var(--border-radius);\n}\n\n.select-list:not(.select-list-fixed) {\n transition: none;\n box-shadow: none !important;\n}\n\n@media (min-width: 640px) {\n .select-list.select-list-scrollable {\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n }\n .list-content {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 0 12 6\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z\"\n />\n </svg>\n</template>\n","<template>\n <button\n ref=\"buttonRef\"\n :tabindex=\"enableTextFilter ? -1 : 0\"\n @keydown.enter=\"enterHandler($event)\"\n @keydown.space=\"spaceHandler($event)\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @click=\"clickHandler()\"\n type=\"button\"\n :class=\"[{ 'click-through': props.enableTextFilter || props.showDropDown }]\"\n class=\"list-button\"\n >\n <slot></slot>\n <span class=\"list-button-icon-div\" :class=\"{ 'bigger-gap': props.showDropDown }\">\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': !props.showDropDown }]\"\n >\n <default-arrow aria-hidden=\"true\" />\n </span>\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': props.showDropDown }]\"\n >\n <default-arrow v-if=\"customIcon == null\" aria-hidden=\"true\" />\n </span>\n <span v-if=\"customIcon\" class=\"list-button-icon custom-icon\">\n <component aria-hidden=\"true\" :is=\"customIcon as object\" />\n </span>\n </span>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { type PropType, ref } from 'vue'\nimport DefaultArrow from './default-arrow.vue'\n\n// prettier-ignore\nconst props = defineProps({ // eslint-disable-line\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n enableTextFilter: {\n type: Boolean,\n required: true\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n reverseDropDownList: {\n type: Boolean,\n required: true\n }\n})\n\nconst buttonRef = ref(null)\n\nfunction clickHandler() {\n if (props.enableTextFilter) return\n else props.parentMethods.openList()\n}\n\nfunction enterHandler(event: KeyboardEvent) {\n if (props.enableTextFilter) {\n props.parentMethods.focusInput()\n event.stopPropagation()\n event.preventDefault()\n } else {\n props.parentMethods.press(event)\n }\n}\n\nfunction spaceHandler(event: KeyboardEvent) {\n if (!props.enableTextFilter) props.parentMethods.press(event)\n}\n\nfunction blurInput() {\n if (buttonRef?.value) {\n const button: HTMLButtonElement = buttonRef.value\n button.blur()\n }\n}\n\nfunction focusInput() {\n if (buttonRef?.value) (buttonRef.value as HTMLButtonElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, buttonRef })\n</script>\n\n<style scoped>\n.list-button-icon {\n display: flex;\n transition-timing-function: ease-in-out;\n transition-duration: 200ms;\n transition-property: transform;\n width: 0.6rem;\n transform: rotate(0deg);\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n justify-content: center;\n max-height: 18%;\n}\n\n.list-button-icon.custom-icon {\n max-height: 100%;\n width: 1.25rem;\n}\n\n.list-button-icon.rotate-180 {\n transform: rotate(180deg);\n}\n\n.list-button {\n position: relative;\n padding: 0;\n margin: 0;\n width: 100%;\n max-height: 100%;\n height: 100%;\n background-color: var(--superlist-background-colour, white);\n align-items: center;\n pointer-events: auto;\n cursor: pointer;\n}\n\n.list-button:focus,\n.list-button:focus-visible,\n.list-button:active {\n text-align: left;\n}\n\n.list-button-icon-div {\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-right: 0.75rem;\n max-height: 100%;\n height: 100%;\n gap: max(0.15rem, calc(6.25% + 0.075rem));\n transition: gap 200ms;\n}\n\n.list-button-icon-div.bigger-gap {\n gap: calc(40% - 0.25rem);\n}\n\n.click-through {\n pointer-events: none;\n}\n</style>\n","<template>\n <div style=\"position: relative\" :class=\"$attrs.class\">\n <item-list\n ref=\"itemListRef\"\n :show-drop-down=\"showDropDown\"\n :filteredListItems=\"filteredListItems\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"activeFocusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :max-list-height-p-x=\"maxListHeightPX\"\n :list-animation-duration-ms=\"listAnimationDurationMs\"\n :parent-methods=\"parentMethods\"\n v-model:blockListChange=\"blockListUpdates\"\n :total-options-count=\"totalOptionsCount\"\n @reverseDropDownList=\"reverseDropDownList = $event\"\n :enableScrollClose=\"enableScrollClose\"\n >\n <list-button\n ref=\"dropDownButtonInput\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :enable-text-filter=\"enableTextFilter\"\n :custom-icon=\"customIcon\"\n :reverse-drop-down-list=\"reverseDropDownList\"\n >\n <text-input\n ref=\"dropDownTextInput\"\n :enable-text-filter=\"enableTextFilter\"\n :show-drop-down=\"showDropDown\"\n :placeholder=\"placeholder\"\n :enable-button-click=\"enableButtonClick\"\n :parent-methods=\"parentMethods\"\n @update:query=\"query = $event\"\n />\n </list-button>\n </item-list>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, type PropType, ref, watch } from 'vue'\nimport {\n getLabelString,\n AbortablePromise,\n type DataSet,\n type EnumType,\n type ListRequest\n} from './DropDownLibrary'\nimport TextInput from './ListInputComponents/ListTextInput.vue'\nimport ItemList from './ListInputComponents/ItemList.vue'\nimport ListButton from './ListInputComponents/ListButton.vue'\n\nconst emit = defineEmits({ 'update:selected': null })\nconst props = defineProps({\n selected: {\n type: [String, Number, Object, null, undefined] as PropType<\n string | number | object | null | undefined\n >\n },\n options: {\n type: [Function, Array<string | number | object>] as PropType<\n ListRequest | Array<string | number | object>\n >,\n required: true\n },\n maxListOptions: {\n type: Number as PropType<number>,\n default: 50\n },\n maxListHeightPX: {\n type: Number as PropType<number>,\n default: 200\n },\n tooltip: {\n type: String,\n required: false\n },\n objectLabelKeyName: {\n type: String as PropType<string | null>,\n default: ''\n },\n enumKeyToLabelObjectArray: {\n type: Object as PropType<EnumType[]>,\n default: undefined\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n default: 300\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n forceTextFilterVisibilityTo: {\n type: Boolean as PropType<boolean>,\n default: undefined\n },\n customPlaceHolderFunction: {\n type: Function as PropType<Function | null>,\n default: null\n },\n colour: {\n type: String as PropType<string>,\n default: 'black'\n },\n scrollTextInputToTopOnMobile: {\n type: Boolean as PropType<boolean>,\n default: true\n }\n})\n\nconst listOptions = ref([] as Array<string | number | object>)\n\nconst abortablePromise = new AbortablePromise()\n\nconst totalOptionsCount = ref(0)\n\nconst enableTextFilter = computed((): boolean => {\n if (props.forceTextFilterVisibilityTo != undefined) return props.forceTextFilterVisibilityTo\n return totalOptionsCount.value > props.maxListOptions\n})\n\nconst showDropDown = ref<boolean>(false)\n\nconst blockListUpdates = ref<boolean>(false)\n\nconst reverseDropDownList = ref<boolean>(false)\n\nconst enableButtonClick = ref(true)\n\nconst loadingData = ref(false)\nconst errorState = ref(false)\n\nconst itemListRef = ref(ItemList)\nconst dropDownTextInput = ref(TextInput)\nconst dropDownButtonInput = ref(ListButton)\n\nconst query = ref('')\n\nwatch(\n () => query.value,\n (newV, oldV) => {\n if (newV !== oldV && typeof props.options === 'function') loadData(newV)\n }\n)\n\nconst blurInputIfNecessary = () => {\n if (enableTextFilter.value) dropDownTextInput?.value?.blurInput()\n}\n\nconst closeList = () => {\n clearTimeout(blockScrollCloseTimeout)\n blurInputIfNecessary()\n query.value = ''\n showDropDown.value = false\n enableButtonClick.value = true\n}\n\nconst placeholder = computed((): string => {\n if (errorState?.value === true) return 'Error loading data'\n if (loadingData?.value === true) return 'Loading...'\n return getLabel(props.selected)\n})\n\nconst updatedSelected = (newValue: any) => {\n if (newValue) emit('update:selected', newValue)\n closeList()\n}\n\nconst getLabel = (value?: string | number | object | null): string => {\n return getLabelString(\n value,\n props.customPlaceHolderFunction,\n props.objectLabelKeyName,\n props.enumKeyToLabelObjectArray\n )\n}\n\nfunction invalidArgumentError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid options argument provided to ListInputComponent`)\n}\n\nfunction invalidResponseError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid response provided to ListInputComponent, no total count key found`)\n}\n\nfunction invalidListValueKeyError() {\n loadingData.value = true\n errorState.value = true\n throw new Error('Invalid objectLabelKeyName for provided Dropdown list value.')\n}\n\nonMounted(() => {\n if (typeof props.options !== 'function' && !Array.isArray(props.options)) invalidArgumentError()\n else initializeOptions()\n})\n\nconst mouseHoveringOnList = ref(false)\n\nconst selectedIndex = ref(0)\nconst focusedIndex = ref(0)\nconst activeFocusedIndex = ref(0)\n\nwatch(\n () => focusedIndex.value,\n (newV, oldV) => {\n if (newV != oldV && !blockListUpdates.value) {\n activeFocusedIndex.value = newV\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => blockListUpdates.value,\n (newV) => {\n if (!newV) {\n activeFocusedIndex.value = focusedIndex.value\n }\n },\n { immediate: true }\n)\n\nconst filteredListItems = computed(() => {\n // if is function, return listOptions variable which is set by function\n if (typeof props.options === 'function' && !Array.isArray(props.options)) return listOptions.value\n const qry = query.value\n const lo = listOptions.value\n // else, is array, return filtered array\n return qry === '' ? lo : lo.filter((v) => getLabel(v).toLowerCase().includes(qry.toLowerCase()))\n})\n\nwatch(\n () => filteredListItems.value,\n (newV, oldV) => {\n if (JSON.stringify(newV) !== JSON.stringify(oldV)) focusSelectedOrFirstListItem()\n },\n { immediate: false, deep: true }\n)\n\nconst mouseOverList = () => {\n mouseHoveringOnList.value = true\n}\n\nconst focusSelectedOrFirstListItem = () => {\n const existingIndex = getSelectedValueIndex()\n selectedIndex.value = existingIndex /* may not be in the filtered list, allowed to be -1 */\n focusedIndex.value = existingIndex > -1 ? existingIndex : 0 /* default to first value */\n}\n\nfunction getSelectedValueIndex() {\n if (props.selected == null) return -1\n const labelsArray = filteredListItems.value.map((v) => getLabel(v))\n const matchingLabelsArray = labelsArray.filter((v) => v === getLabel(props.selected))\n if (matchingLabelsArray.length > 1) {\n const matchingIndexes = matchingLabelsArray.map((v) => labelsArray.indexOf(v))\n for (let i = 0; i < matchingIndexes.length; i++) {\n const currentMatchingOptionString = JSON.stringify(\n filteredListItems.value[matchingIndexes[i]]\n )\n const selectedOptionString = JSON.stringify(props.selected)\n if (currentMatchingOptionString === selectedOptionString) return matchingIndexes[i]\n }\n return -1\n }\n return labelsArray.indexOf(getLabel(props.selected))\n}\n\nconst openList = () => {\n if (loadingData.value) return\n if (!showDropDown.value) {\n blockListUpdates.value = false\n focusSelectedOrFirstListItem()\n scrollMobileTextInputToTop()\n showDropDown.value = true\n }\n mouseHoveringOnList.value = false\n enableButtonClick.value = false\n}\n\nconst scrollMobileTextInputToTop = () => {\n const mobileWindow: boolean = window?.innerWidth != null && window.innerWidth < 640\n const mobileScreen: boolean = screen?.width != null && screen.width < 640\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if ((mobileWindow || mobileScreen) && enableTextFilter.value) {\n preventScrollClose()\n if (props.scrollTextInputToTopOnMobile)\n textInput?.scrollIntoView({ block: 'start', inline: 'center' })\n }\n}\n\nconst enableScrollClose = ref<boolean>(true)\nlet blockScrollCloseTimeout = setTimeout(() => {}, 0)\n\nfunction preventScrollClose() {\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if (!textInput) return\n enableScrollClose.value = false\n let preventingScrollCloseInterval: NodeJS.Timeout | null = null\n\n const clearAll = () => {\n if (preventingScrollCloseInterval) clearInterval(preventingScrollCloseInterval)\n clearTimeout(blockScrollCloseTimeout)\n setTimeout(() => {\n enableScrollClose.value = true\n }, 100)\n }\n\n blockScrollCloseTimeout = setTimeout(clearAll, 5000)\n\n preventingScrollCloseInterval = setInterval(() => {\n if (\n showDropDown.value === false ||\n (textInput?.scrollTop === 0 && document.readyState === 'complete')\n )\n clearAll()\n }, 100)\n}\n\nconst focusInput = () => {\n if (enableTextFilter?.value == true) dropDownTextInput.value.focusInput()\n else if (dropDownButtonInput?.value?.focusInput) dropDownButtonInput?.value?.focusInput()\n}\n\nasync function initializeOptions(): Promise<void> {\n if (typeof props.options === 'function') {\n await loadData(query.value ? query.value : undefined, true)\n } else {\n validateListOptions(props.options as Array<string | number | object>)\n totalOptionsCount.value = listOptions.value.length\n }\n initializeSelected()\n}\n\ndefineExpose({ initializeOptions, getLabel })\n\nfunction initializeSelected() {\n const invalidSelection = getSelectedValueIndex() == -1\n const existingOptionNotSelected = invalidSelection && listOptions.value && !!listOptions.value[0]\n if (existingOptionNotSelected) updatedSelected(listOptions.value[0])\n}\n\nasync function loadData(stringFilter?: string, disableOnLoad: boolean = true) {\n loadingData.value = disableOnLoad\n const func = async () => (props.options as Function)(props.maxListOptions, stringFilter || '')\n const next = (response: DataSet<any>) => {\n if (!response || !('data' in response)) invalidArgumentError()\n validateListOptions(response.data)\n getOptionsCount(response?.data?.length ?? 0).then(() => {\n loadingData.value = false\n })\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nfunction validateListOptions(optns: Array<string | number | object>) {\n if (!Array.isArray(optns)) invalidArgumentError()\n if (optns.length > 0 && typeof optns[0] === 'object') validateObjectList(optns as Array<object>)\n listOptions.value = optns as Array<string | number | object>\n}\n\nfunction validateObjectList(values: Array<object>) {\n if (!props.objectLabelKeyName || props.objectLabelKeyName.length === 0) invalidListValueKeyError()\n const key: string = props.objectLabelKeyName as string\n for (let i = 0; i < values.length; i++) {\n if (typeof values[i] !== 'object' || !(key in values[i])) invalidListValueKeyError()\n }\n}\n\nasync function getOptionsCount(dataLength: number): Promise<void> {\n const func = async () => (props.options as Function)(1, '')\n const next = (response: DataSet<any>) => {\n if (!response || !('totalNum' in response)) invalidResponseError()\n totalOptionsCount.value = response.totalNum ?? dataLength\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nconst getCurrentlyFocusedListItemElement = (): HTMLElement | null => {\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n return listInput?.getElementsByTagName('li')[focusedIndex.value] ?? null\n}\n\nconst press = (event?: any) => {\n if (showDropDown.value == false) {\n openList()\n } else if (event) {\n keypress(event)\n }\n}\n\nconst keypress = (event: any) => {\n const key: string = event.key || event.code\n if (key === 'Tab' || key === 'Escape') closeList()\n if (key === 'ArrowDown') down(event)\n if (key === 'ArrowUp') up(event)\n if (key === 'Enter' || key === ' ') updateSelectedFromTextQuery()\n event.preventDefault()\n event.stopPropagation()\n}\n\nconst updateSelectedFromTextQuery = () => {\n if (filteredListItems.value.length > 0) {\n blockListUpdates.value = true\n updatedSelected(filteredListItems.value[focusedIndex.value])\n } else {\n closeList()\n }\n}\n\nconst down = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value < filteredListItems.value.length - 1) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value++\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst up = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value > 0) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value--\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst unfocus = (event: any) => {\n if (showDropDown?.value === false) return\n if (query.value.length > 0) blockListUpdates.value = true\n const list: HTMLElement | null = itemListRef?.value?.listContainerRef as HTMLElement | null\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n const isListInput = event?.relatedTarget && listInput?.isEqualNode(event?.relatedTarget)\n const isList = event?.relatedTarget && list && list.contains(event?.relatedTarget)\n const isListItem = event?.relatedTarget && list && list.isEqualNode(event?.relatedTarget)\n if (isList || isListInput) return\n if (isListItem) {\n focusInput()\n return\n }\n closeList()\n}\n\nconst parentMethods = {\n openList: openList,\n unfocus: unfocus,\n press: press,\n mouseOverList: mouseOverList,\n getLabel: getLabel,\n updatedSelected: updatedSelected,\n focusInput: focusInput,\n closeList: closeList\n}\n</script>\n\n<style scoped>\n* {\n box-sizing: border-box;\n}\n</style>\n"],"names":["DocumentViewChangeListener","targetFunction","targetNode","event","eventType","getLabelString","value","customLabelGetFunction","objectLabelKeyName","enumKeyToLabelObjectArray","getEnumLabel","enumKeyArray","eT","AbortablePromise","signal","asyncFunc","then","response","func","reason","emit","__emit","props","__props","textInputRef","ref","focusInHandler","e","focusOutHandler","lastQuery","updateQuery","textInputSize","computed","refLength","placeHolderLength","pointerEventsClass","textInputColourClass","blurInput","input","focusInput","__expose","_createElementBlock","_createElementVNode","$event","_cache","_withKeys","_normalizeClass","_openBlock","_hoisted_1","iRefs","useTemplateRef","focusedLi","focused","watch","scrollHighlightedListItemToTop","scrollHighlightedListItemIntoView","li","liParent","aboveTop","belowBottom","_Fragment","_renderList","listItem","index","_withModifiers","_hoisted_2","_toDisplayString","_createBlock","DefaultTick","_hoisted_3","dropDownButtonContainer","dropDownListUL","listContainerRef","offsetLeft","offsetTop","offsetBottom","listOffset","parentWidthPx","listElementOpenAndVisible","listItemsToDisplay","listHeightPx","reverseList","sufficientRoomAbove","insufficientRoomBelow","noScroll","reverse","parentXPx","parentYPx","preventSpaceScrollingList","refocusTextInput","list","target","getListULHeight","displayableListHeight","ulHt","maxListHeightPx","animationDuration","updatedListItemsToDisplay","newVal","unobserveTimeout","changeListener","openAndObserveChangeListener","buttonRePositionCallback","closeAndUnobserveChangeListener","newV","oldV","setOffsets","nextTick","closeListOnScrollIfNecessary","insideListOrOtherList","isScrollEvent","insideButton","insideList","otherList","setButtonOffset","setListOffset","brc","getButtonContainerElement","slrc","currentListOffset","currentOffsetLeft","getButtonElement","onMounted","onUnmounted","_renderSlot","_ctx","_createVNode","ListItem","buttonRef","clickHandler","enterHandler","spaceHandler","DefaultArrow","_resolveDynamicComponent","listOptions","abortablePromise","totalOptionsCount","enableTextFilter","showDropDown","blockListUpdates","reverseDropDownList","enableButtonClick","loadingData","errorState","itemListRef","ItemList","dropDownTextInput","TextInput","dropDownButtonInput","ListButton","query","blurInputIfNecessary","closeList","blockScrollCloseTimeout","placeholder","getLabel","updatedSelected","newValue","invalidArgumentError","invalidResponseError","invalidListValueKeyError","initializeOptions","mouseHoveringOnList","selectedIndex","focusedIndex","activeFocusedIndex","filteredListItems","qry","lo","v","focusSelectedOrFirstListItem","mouseOverList","existingIndex","getSelectedValueIndex","labelsArray","matchingLabelsArray","matchingIndexes","i","currentMatchingOptionString","selectedOptionString","openList","scrollMobileTextInputToTop","mobileWindow","mobileScreen","textInput","preventScrollClose","enableScrollClose","preventingScrollCloseInterval","clearAll","loadData","validateListOptions","initializeSelected","stringFilter","disableOnLoad","next","getOptionsCount","optns","validateObjectList","values","key","dataLength","getCurrentlyFocusedListItemElement","press","keypress","down","up","updateSelectedFromTextQuery","parentMethods","listInput","isListInput","isList","isListItem","$attrs"],"mappings":";AAQO,MAAMA,GAAiE;AAAA,EAC3D,cAAwB,CAAC,UAAU,QAAQ,UAAU,SAAS,WAAW;AAAA,EACzE,SAA+B;AAAA,IAC9C,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAAA,EAEH;AAAA,EACA;AAAA,EAER,YAAYC,GAA0BC,IAAkB,SAAS,MAAM;AACrE,SAAK,aAAaA,GAClB,KAAK,mBAAoB,CAACC,MACxBF,EAAeE,CAAK,GACtB,KAAK,mBAAmB,IAAI,iBAAkB,MAAMF,GAAqC;AAAA,EAC3F;AAAA,EAEO,UAAgB;AACrB,SAAK,iBAAiB,QAAQ,KAAK,YAAY,KAAK,MAAM;AAC1D,eAAWG,KAAa,KAAK,YAAa,MAAK,YAAYA,CAAS;AACpE,SAAK,kBAAA,GACL,KAAK,yBAAA;AAAA,EACP;AAAA,EAEA,wBAA8B;AAC5B,SAAK,iBAAiB,WAAA;AAAA,EACxB;AAAA,EAEA,0BAAgC;AAC9B,SAAK,iBAAiB,QAAQ,KAAK,YAAY,KAAK,MAAM;AAAA,EAC5D;AAAA,EAEO,YAAkB;AACvB,SAAK,iBAAiB,WAAA;AACtB,eAAWA,KAAa,KAAK,YAAa,MAAK,eAAeA,CAAS;AACvE,SAAK,qBAAA,GACL,KAAK,4BAAA;AAAA,EACP;AAAA,EAEQ,YAAYA,GAAyB;AAC3C,aAAS,iBAAiBA,GAAW,KAAK,kBAAkB,EAAI;AAAA,EAClE;AAAA,EAEQ,eAAeA,GAAyB;AAC9C,aAAS,oBAAoBA,GAAW,KAAK,kBAAkB,EAAI;AAAA,EACrE;AAAA,EAEQ,2BAAiC;AACvC,SAAK,WAAW,iBAAiB,iBAAiB,KAAK,gBAAgB;AAAA,EACzE;AAAA,EAEQ,8BAAoC;AAC1C,SAAK,WAAW,oBAAoB,iBAAiB,KAAK,gBAAgB;AAAA,EAC5E;AAAA,EAEQ,oBAA0B;AAChC,WAAO,iBAAiB,UAAU,KAAK,gBAAgB;AAAA,EACzD;AAAA,EAEQ,uBAA6B;AACnC,WAAO,oBAAoB,UAAU,KAAK,gBAAgB;AAAA,EAC5D;AACF;AAEO,SAASC,GACdC,GACAC,GACAC,GACAC,GACQ;AACR,SAAIF,KAA0B,OAAaA,EAAuBD,CAAK,IACnEA,KAAS,OAAa,KACtB,OAAOA,KAAU,WAAiBA,EAAME,CAAwC,IAChFC,IAAkCC,GAAaJ,GAAOG,CAAyB,IAC5E,KAAKH;AACd;AAEA,SAASI,GAAaJ,GAAwBK,GAAkC;AAC9E,SAAQA,EAAa,KAAK,CAACC,MAA0BA,EAAG,SAASN,CAAK,GAAG,SAAS;AACpF;AAcO,MAAMO,GAA6C;AAAA,EACxD,cAAc;AACZ,SAAK,kBAAkB,IAAI,gBAAA,GAC3B,KAAK,OAAO,MAAY;AAAA,IAAC,GACzB,KAAK,OAAO,MAAY;AAAA,IAAC;AAAA,EAC3B;AAAA,EAEA,MAAM,iBAAiBC,GAAqBC,GAAqBC,GAA8B;AAC7F,UAAMC,IAAW,MAAMF,EAAA;AACvB,QAAI,CAAAD,EAAO;AACX,aAAOE,EAAKC,CAAQ;AAAA,EACtB;AAAA,EAEA,QAAQC,GAAsB;AAC5B,SAAK,OAAOA;AAAA,EACd;AAAA,EAEA,QAAQF,GAAsB;AAC5B,SAAK,OAAOA;AAAA,EACd;AAAA,EAEA,UAAwB;AACtB,WAAO,KAAK,iBAAiB,KAAK,gBAAgB,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EAChF;AAAA,EAEA,MAAMG,GAAuB;AAC3B,SAAK,gBAAgB,MAAMA,KAAU,wBAAwB,GAC7D,KAAK,kBAAkB,IAAI,gBAAA;AAAA,EAC7B;AAAA,EAEA,gBAAgBD,GAAgBF,GAA8B;AAC5D,gBAAK,MAAM,8BAA8B,GACzC,KAAK,QAAQE,CAAI,GACjB,KAAK,QAAQF,CAAI,GACV,KAAK,QAAA;AAAA,EACd;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvGA,UAAMI,IAAOC,GAMPC,IAAQC,GAsBRC,IAAeC,EAAI,IAAI;AAE7B,aAASC,EAAeC,GAAe;AACrC,MAAI,wBAAwBA,KAAKA,EAAE,sBAAsB,OAAML,EAAM,cAAc,UAAA,IAC9EA,EAAM,cAAc,SAAA;AAAA,IAC3B;AAEA,aAASM,EAAgBzB,GAAmB;AAC1C,MAAAmB,EAAM,cAAc,QAAQnB,CAAK;AAAA,IACnC;AAEA,QAAI0B,IAAoB;AAExB,aAASC,EAAY3B,GAAY;AAC/B,MAAIA,GAAO,QAAQ,SAAS,QAAaA,GAAO,QAAQ,UAAU0B,KAChET,EAAK,gBAAgBjB,EAAM,OAAO,KAAK,GACzC0B,IAAY1B,GAAO,QAAQ,SAAS;AAAA,IACtC;AAEA,UAAM4B,IAAgBC,EAAS,MAAM;AACnC,YAAMC,IAAoBT,GAAc,QAASA,EAAa,MAAiB,SAAS,GAClFU,IAA4BZ,EAAM,aAAa,UAAU;AAC/D,aAAOW,IAAY,IAAIA,IAAYC,IAAoB,IAAIA,IAAoB;AAAA,IACjF,CAAC,GAEKC,IAAqBH,EAAS,MACVV,EAAM,sBAAsB,MAAQA,EAAM,qBAAqB,KACvE,KAAK,eACtB,GAEKc,IAAuBJ,EAAS,MACbV,EAAM,gBAAgB,CAACA,EAAM,oBAAqB,CAACA,EAAM,eAClE,0BAA0B,wBACzC;AAED,aAASe,IAAY;AACnB,UAAIb,GAAc,OAAO;AACvB,cAAMc,IAA0Bd,EAAa;AAC7C,QAAAc,EAAM,KAAA,GACNA,EAAM,QAAQ;AAAA,MAChB;AAAA,IACF;AAEA,aAASC,IAAa;AACpB,MAAIf,GAAc,SAAQA,EAAa,MAA2B,MAAA;AAAA,IACpE;AAEA,WAAAgB,EAAa,EAAE,WAAAH,GAAW,YAAAE,GAAY,cAAAf,EAAA,CAAc,mBA5GlDiB,EA2BO,QAAA;AAAA,MA3BA,8BAAD,MAAA;AAAA,MAAA,GAAe,CAAA,SAAA,CAAA;AAAA,MAAC,OAAA,EAAA,SAAA,sBAAA;AAAA,IAAA;MAEpBC,EAwBE,SAAA;AAAA,iBAvBI;AAAA,QAAJ,KAAIlB;AAAA,QACH,UAAUD,EAAA,mBAAgB,IAAA;AAAA,QAC1B,WAAO;AAAA,mCAAQA,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,UAC1BC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAAA,CAAAF,MAAApB,EAAA,cAAc,MAAA,GAAK,CAAA,OAAA,CAAA;AAAA,mCACrBA,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,KAAA,CAAA;AAAA,mCAC3BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,IAAA,CAAA;AAAA,mCACxBpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;AAAA,QACxC,WAAOC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEjB,EAAeiB,CAAM;AAAA,QAC9B,YAAQC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEf,EAAgBe,CAAM;AAAA,QAChC,SAAKC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEb,EAAYa,CAAM;AAAA,QACzB,UAAMC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEb,EAAYa,CAAM;AAAA,QAC1B,SAAKC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEb,EAAYa,CAAM;AAAA,QAC1B,MAAK;AAAA,QACL,qBAAkB;AAAA,QAClB,cAAa;AAAA,QACZ,aAAapB,EAAA;AAAA,QACb,MAAMQ,EAAA;AAAA,QACN,OAAKe,EAAA,CAAA;AAAA,UAAYX,EAAA;AAAA,UAA4BC,EAAA;AAAA,qCAAyDb,EAAA,iBAAA;AAAA,QAAgB,GAKjH,wBAAwB,CAAA;AAAA,MAAA;;;;;;;;;ECxBhC,OAAM;AAAA,EACN,MAAK;AAAA,EACL,eAAY;AAAA,EACZ,aAAU;AAAA,EACV,SAAQ;;;AALV,SAAAwB,EAAA,GAAAN,EAWM,OAXNO,IAWM,CAAA,GAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,IAJJF,EAGE,QAAA;AAAA,MAFA,mBAAgB;AAAA,MAChB,GAAE;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkDR,UAAMpB,IAAQC,GAmCR0B,IAAoDC,GAAe,OAAO,GAE1EC,IAAYnB,EAAS,MAA0B;AACnD,UAAI,CAACiB,GAAO,MAAO,QAAO;AAE1B,YAAMG,KADoC,MAAM,QAAQH,EAAM,KAAK,IAAIA,EAAM,QAAQ,CAACA,EAAM,KAAK,GAC5E3B,EAAM,YAAY;AACvC,aAAK8B,KACqB,OAAOA,KAAW,YACG,oBAAoBA,KACf,OAAOA,EAAQ,kBAAqB,aACjEA,IAJF;AAAA,IAKvB,CAAC;AAED,IAAAC;AAAA,MACE,MAAM/B,EAAM;AAAA,MACZ,MAAMgC,EAAA;AAAA,IAA+B,GAEvCD;AAAA,MACE,MAAM/B,EAAM;AAAA,MACZ,MAAMiC,EAAA;AAAA,IAAkC,GAE1CF;AAAA,MACE,MAAMF,EAAU;AAAA,MAChB,MAAMI,EAAA;AAAA,IAAkC;AAG1C,aAASD,IAAuC;AAC9C,MAAI,CAAChC,EAAM,gBAAgB,CAAC6B,GAAW,OAAO,eAAe,kBAC7DA,EAAU,MAAM,cAAc,cAAc,YAAYA,EAAU,MAAM;AAAA,IAC1E;AAEA,aAASI,IAA0C;AACjD,YAAMC,IAAKL,EAAU,OACfM,IAAWD,GAAI,eAAe;AACpC,UAAI,CAAClC,EAAM,gBAAgB,CAACkC,KAAM,CAACC,EAAU;AAC7C,YAAMC,IAAWF,EAAG,YAAYC,EAAS,YAAY,GAC/CE,IAAcH,EAAG,YAAYA,EAAG,eAAeC,EAAS,YAAYA,EAAS;AACnF,MAAIC,MAAUD,EAAS,YAAYD,EAAG,YAClCG,MAAaF,EAAS,YAAYD,EAAG,YAAYA,EAAG,eAAeC,EAAS;AAAA,IAClF;;OArIEV,EAAA,EAAA,GAAAN,EAuBKmB,IAAA,MAAAC,GAtByBtC,EAAA,mBAAiB,CAArCuC,GAAUC,YADpBtB,EAuBK,MAAA;AAAA,QArBF,KAAKsB;AAAA;QACN,KAAI;AAAA,QACH,SAAK;AAAA,mCAAQxC,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,mCAC1BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,mCAC5BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,KAAA,CAAA;AAAA,QAAA;AAAA,QACrC,WAAO;AAAA,mCAAKpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,IAAA,CAAA;AAAA,mCACxBpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;AAAA,QACxC,YAAQC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEpB,EAAA,cAAc,QAAQoB,CAAM;AAAA,QACvC,UAAS;AAAA,QACR,aAASqB,EAAA,CAAArB,MAAOpB,EAAA,cAAc,gBAAgBuC,CAAQ,GAAA,CAAA,MAAA,CAAA;AAAA,QACtD,OAAKhB,EAAA;AAAA,UAAoC,EAAA,wBAAAvB,EAAA,kBAAkBwC,EAAA;AAAA;kCAAyDxC,EAAA,kBAAkB,WAAM,KAAWA,mBAAiBwC,MAAUxC,EAAA;AAAA,UAAA;AAAA;;;QASnLmB,EAA0E,QAA1EuB,IAA0EC,GAA1C3C,gBAAc,SAASuC,CAAQ,CAAA,GAAA,CAAA;AAAA,QAC3CvC,EAAA,kBAAkBwC,UAAtCI,GAAyFC,IAAA;AAAA;UAA5C,OAAM;AAAA,UAAiB,eAAY;AAAA,QAAA;;MAG1E7C,EAAA,kBAAkB,WAAM,UADhCkB,EAaK,MAAA;AAAA;QAXF,SAAK;AAAA,mCAAQlB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,mCAC1BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,mCAC5BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,KAAA,CAAA;AAAA,QAAA;AAAA,QACrC,WAAO;AAAA,mCAAKpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,IAAA,CAAA;AAAA,qCACxBpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;AAAA,QACxC,YAAQC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAD,MAAEpB,EAAA,cAAc,QAAQoB,CAAM;AAAA,QACtC,aAASC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAoB,EAAA,CAAArB,MAAOpB,EAAA,cAAc,UAAUoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAC/C,UAAS;AAAA,QACT,OAAM;AAAA,MAAA;QAEND,EAAwD,QAAA,EAAlD,OAAM,iBAAA,GAAiB,wBAAoB,EAAA;AAAA,MAAA;MAG3CnB,EAAA,qBAAqBA,EAAA,qBAAqBA,EAAA,mBAAmB,UAAM,WAD3EkB,EAeK,MAAA;AAAA;QAbF,SAAK;AAAA,qCAAQlB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,qCAC1BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,qCAC5BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,KAAA,CAAA;AAAA,QAAA;AAAA,QACrC,WAAO;AAAA,qCAAKpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,IAAA,CAAA;AAAA,qCACxBpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;AAAA,QACxC,YAAQC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAD,MAAEpB,EAAA,cAAc,QAAQoB,CAAM;AAAA,QACtC,aAASC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAoB,EAAA,CAAArB,MAAOpB,EAAA,cAAc,UAAUoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAC/C,UAAS;AAAA,QACT,OAAM;AAAA,MAAA;QAEND,EAEC,QAFD2B,IAA6B,OAC1BH,GAAG3C,EAAA,oBAAoBA,EAAA,mBAAmB,UAAM,CAAA,IAAQ,kBAAc,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACH7E,UAAMH,IAAOC,GAEPC,IAAQC,GA+CR+C,IAA0B7C,EAAwB,IAAI,GACtD8C,IAAiB9C,EAAwB,IAAI,GAC7C+C,IAAmB/C,EAAwB,IAAI,GAC/CgD,IAAahD,EAAY,CAAC,GAC1BiD,IAAYjD,EAAY,CAAC,GACzBkD,IAAelD,EAAY,CAAC,GAC5BmD,IAAanD,EAAY,CAAC,GAC1BoD,IAAgBpD,EAAY,KAAK,GACjCqD,IAA4BrD,EAAa,EAAK,GAC9CsD,IAAqBtD,EAAW,EAAE,GAClCuD,IAAevD,EAAY,CAAC,GAE5BwD,IAAcjD,EAAS,MACvB,CAAC8C,EAA0B,SAAS,QAAQ,eAAe,OAAa,KACrEI,EAAA,KAAyBC,GAAA,CACjC,GAEKC,IAAWpD,EAAS,MACjBV,EAAM,mBAAmB0D,EAAa,KAC9C;AAED,IAAA3B;AAAA,MACE,MAAM4B,EAAY;AAAA,MAClB,CAACI,MAAqBjE,EAAK,uBAAuBiE,CAAO;AAAA,MACzD,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMC,IAAYtD,EAAS,MAAcyC,EAAW,QAAQ,IAAI,GAC1Dc,KAAYvD,EAAS,MAAc4C,EAAW,QAAQ,IAAI;AAEhE,IAAApC,EAAa,EAAE,kBAAAgC,GAAkB;AAEjC,UAAMgB,IAA4B,CAACrF,MAAe;AAChD,MAAIA,GAAO,OAAOA,EAAM,QAAQ,SAAW,eAAA;AAAA,IAC7C,GAEMsF,KAAmB,CAACtF,MAAsB;AAC9C,YAAMuF,IAAOlB,GAAkB,OACzBmB,IAASxF,EAAM;AACrB,OAAI,EAAEuF,KAAQC,KAAUD,EAAK,SAASC,CAAM,MAAMD,EAAK,YAAYC,CAAM,MACvErE,EAAM,cAAc,WAAA;AAAA,IACxB;AAEA,aAASsE,IAA0B;AACjC,aAAOrB,GAAgB,SAASA,GAAgB,OAAsB,eAAe;AAAA,IACvF;AAEA,aAASsB,IAAgC;AACvC,UAAI,CAACf,EAA0B,SAASc,QAAsB,UAAUtE,EAAM;AAC9E,YAAMwE,IAAeF,QAAsB,IAAItE,EAAM,kBAAkB,CAACsE,EAAA;AACxE,aAAOtE,EAAM,mBAAmBA,EAAM,kBAAkBwE,IAAOA,IAAOxE,EAAM;AAAA,IAC9E;AAEA,aAAS4D,IAA+B;AACtC,aAAOR,EAAU,QAAQmB,EAAA;AAAA,IAC3B;AAEA,aAASV,KAAiC;AACxC,aAAOR,EAAa,QAAQkB,EAAA;AAAA,IAC9B;AAEA,UAAME,IAAkB/D,EAAS,OAAeV,EAAM,mBAAmB,KAAK,IAAI,GAE5E0E,IAAoBhE,EAAS,OAAeV,EAAM,2BAA2B,KAAK,IAAI,GAEtF2E,KAA4BjE,EAAS,MACjCV,EAAM,kBAA4CyD,EAAmB,QAA7CzD,EAAM,iBACvC;AAED,IAAA+B;AAAA,MACE,MAAM4C;AAAA,MACN,CAACC,MAA+B;AAC9B,QAAIA,MAAQnB,EAAmB,QAAQmB,EAAO;AAAA,MAChD;AAAA,MACA,EAAE,WAAW,IAAO,MAAM,GAAA;AAAA,IAAK;AAGjC,QAAIC,IAAmB,WAAW,MAAM;AAAA,IAAC,GAAG,CAAC,GAEzCC,IAAoD;AAExD,aAASC,IAA+B;AACtC,MAAArB,EAAa,QAAQY,EAAA,GACrB,aAAaO,CAAgB,GACzBC,OAA+B,QAAA,GACnCtB,EAA0B,QAAQ,IAClCwB,EAAyB,MAAS;AAAA,IACpC;AAEA,aAASC,KAAkC;AACzC,mBAAaJ,CAAgB,GAC7BA,IAAmB,WAAW,MAAM;AAClC,QAAK7E,EAAM,iBACTwD,EAA0B,QAAQ,IAC9BsB,OAA+B,UAAA;AAAA,MAEvC,GAAG9E,EAAM,0BAA0B,EAAE;AAAA,IACvC;AAEA,IAAA+B;AAAA,MACE,MAAM/B,EAAM;AAAA,MACZ,CAACkF,GAAMC,MAAS;AACd,QAAID,MAASC,MACXC,EAAA,GACIF,IAAMH,EAAA,IACLE,GAAA;AAAA,MAET;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,aAASD,EAAyB3E,GAAc;AAC9C,MAAA+E,EAAA,GACAC,GAAS,MAAMD,GAAY,GAC3BE,GAA6BjF,CAAC;AAAA,IAChC;AAEA,aAASiF,GAA6BjF,GAAQ;AAG5C,UAFI,CAACL,EAAM,qBAAqB,CAACA,EAAM,gBACP,OAAOkD,GAAkB,OAAO,YAAa,cACvD7C,GAAG,QAAQ,YAAY,QAAQkF,GAAsBlF,CAAC,EAAG;AAC/E,YAAMmF,IAAyB,CAAC,UAAU,SAAS,WAAW,EAAE,SAASnF,GAAG,IAAI;AAChF,MAAIL,EAAM,gBAAgBwF,KAAexF,EAAM,cAAc,UAAA;AAAA,IAC/D;AAEA,aAASuF,GAAsBlF,GAAiB;AAC9C,YAAMoF,IAAwB,CAAC,CAACzC,EAAwB,OAAO,SAAS3C,GAAG,MAAc,GACnFqF,IAAsB,CAAC,CAACxC,EAAiB,OAAO,SAAS7C,EAAE,MAAc,GACzEsF,IAAqB,CAACtF,GAAG,YAAY,IAAIA,GAAG,QAAQ,EAAE,EAAE,SAAS,wBAAwB;AAC/F,aAAOoF,KAAgBC,KAAcC;AAAA,IACvC;AAEA,aAASP,IAAmB;AAC1B,MAAAQ,EAAA,GACAC,EAAA;AAAA,IACF;AAEA,aAASD,IAAwB;AAC/B,UAAI5C,GAAyB,SAAS,KAAM;AAC5C,YAAM8C,IAAgB9C,EAAwB,MAAsB,sBAAA;AACpE,MAAAI,EAAU,QAAQ0C,EAAI,KACtBzC,EAAa,QAAQ,OAAO,cAAcyC,EAAI,QAC9CvC,EAAc,QAAQuC,EAAI,QAAQ;AAAA,IACpC;AAEA,aAASD,IAAsB;AAK7B,UAAI7C,GAAyB,SAAS,QAAQE,GAAkB,SAAS,KAAM;AAC/E,YAAM4C,IAAeC,GAAA,EAA4B,sBAAA,GAC3CC,IAAiB9C,EAAiB,MAAsB,sBAAA,GACxD+C,IAA4B3C,EAAW,OACvC4C,IAA4B/C,EAAW;AAC7C,MAAIQ,EAAY,QAAOL,EAAW,QAAQ2C,KAAqBH,EAAI,MAAME,EAAK,UACzE1C,EAAW,QAAQ2C,KAAqBD,EAAK,MAAMF,EAAI,SAC5D3C,EAAW,QAAQ+C,KAAqBF,EAAK,OAAOF,EAAI;AAAA,IAC1D;AAEA,aAASK,KAAsC;AAC7C,cAAQnD,GAAyB,OAAsB,qBAAqB,QAAQ,EAAE,CAAC;AAAA,IACzF;AAEA,aAAS+C,KAA4C;AACnD,aAAO/C,GAAyB;AAAA,IAClC;AAEA,WAAAoD,GAAU,MAAM;AACd,MAAAtB,IAAiB,IAAIpG,GAA2BsG,GAA0BmB,GAAA,CAAkB,GAC5F,WAAW,MAAMnB,EAAyB,MAAS,GAAG,GAAG;AAAA,IAC3D,CAAC,GAEDqB,GAAY,MAAM;AAChB,MAAAvB,GAAgB,UAAA;AAAA,IAClB,CAAC;MAhRC1D,EAEM,OAAA;AAAA,iBAFG;AAAA,QAAJ,KAAI4B;AAAA,QAA0B,OAAM;AAAA,MAAA;QACvCsD,GAAaC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;MAEfnF,EA4BM,OAAA;AAAA,QA3BJ,IAAG;AAAA,iBACC;AAAA,QAAJ,KAAI8B;AAAA,QACH,cAAU5B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEpB,EAAA,cAAc,cAAA;AAAA,QAC3B,UAAS;AAAA,QACR,OAAKuB,EAAA;AAAA;UAA+BmC,EAAA,QAAW,iBAAA;AAAA,gCAA+D1D,EAAA,aAAA;AAAA,UAAqC,EAAA,aAAA6D,EAAA,SAAYN,EAAA,MAAA;AAAA,iCAA0DA,EAAA,MAAA;AAAA,uCAAgEM,EAAA,MAAA;AAAA,QAAQ;QAQjS,WAAOxC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAAA,CAAAF,MAAQ6C,EAA0B7C,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,QAC/C,WAAOC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAoB,EAAA,CAAArB,MAAO8C,GAAiB9C,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,MAAA;QAEtCD,EAWK,MAAA;AAAA,UAXD,UAAS;AAAA,mBAAS;AAAA,UAAJ,KAAI6B;AAAA,UAAiB,OAAM;AAAA,QAAA;UAC3CuD,EASEC,IAAA;AAAA,YARC,mBAAmBhD,EAAA;AAAA,YACnB,qBAAqBxD,EAAA;AAAA,YACrB,cAAcA,EAAA;AAAA,YACd,eAAeA,EAAA;AAAA,YACf,2BAA2BuD,EAAA;AAAA,YAC3B,kBAAgBvD,EAAA;AAAA,YAChB,kBAAgBA,EAAA;AAAA,YAChB,uBAAqBA,EAAA;AAAA,UAAA;;;;;;EC3B1B,OAAM;AAAA,EACN,MAAK;AAAA,EACL,eAAY;AAAA,EACZ,aAAU;AAAA,EACV,SAAQ;;;AALV,SAAAwB,EAAA,GAAAN,EAWM,OAXNO,IAWM,CAAA,GAAAJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,IAJJF,EAGE,QAAA;AAAA,MAFA,mBAAgB;AAAA,MAChB,GAAE;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiCR,UAAMpB,IAAQC,GAuBRyG,IAAYvG,EAAI,IAAI;AAE1B,aAASwG,IAAe;AACtB,MAAI3G,EAAM,oBACLA,EAAM,cAAc,SAAA;AAAA,IAC3B;AAEA,aAAS4G,EAAa/H,GAAsB;AAC1C,MAAImB,EAAM,oBACRA,EAAM,cAAc,WAAA,GACpBnB,EAAM,gBAAA,GACNA,EAAM,eAAA,KAENmB,EAAM,cAAc,MAAMnB,CAAK;AAAA,IAEnC;AAEA,aAASgI,EAAahI,GAAsB;AAC1C,MAAKmB,EAAM,oBAAkBA,EAAM,cAAc,MAAMnB,CAAK;AAAA,IAC9D;AAEA,aAASkC,IAAY;AACnB,MAAI2F,GAAW,SACqBA,EAAU,MACrC,KAAA;AAAA,IAEX;AAEA,aAASzF,IAAa;AACpB,MAAIyF,GAAW,SAAQA,EAAU,MAA4B,MAAA;AAAA,IAC/D;AAEA,WAAAxF,EAAa,EAAE,WAAAH,GAAW,YAAAE,GAAY,WAAAyF,EAAA,CAAW,mBAjG/CvF,EAkCS,UAAA;AAAA,eAjCH;AAAA,MAAJ,KAAIuF;AAAA,MACH,UAAUzG,EAAA,mBAAgB,KAAA;AAAA,MAC1B,WAAO;AAAA,QAAQqB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAAA,CAAAF,MAAAuF,EAAavF,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,QACnBC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAAA,CAAAF,MAAAwF,EAAaxF,CAAM,GAAA,CAAA,OAAA,CAAA;AAAA,iCACrBpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,KAAA,CAAA;AAAA,iCAC3BpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,IAAA,CAAA;AAAA,iCACxBpB,EAAA,cAAc,MAAMoB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,MAAA;AAAA,MACxC,YAAQC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEpB,EAAA,cAAc,QAAQoB,CAAM;AAAA,MACtC,gCAAOsF;MACR,MAAK;AAAA,MACJ,OAAKnF,EAAA,CAAA,CAAA,EAAA,iBAAsBxB,EAAM,oBAAoBA,EAAM,cAAY,GAClE,aAAa,CAAA;AAAA,IAAA;MAEnBsG,GAAaC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MACbnF,EAkBO,QAAA;AAAA,QAlBD,OAAKI,EAAA,CAAC,wBAAsB,EAAA,cAAyBxB,EAAM,cAAY,CAAA;AAAA,MAAA;QAElEC,EAAA,+BADTkB,EAMO,QAAA;AAAA;UAJL,OAAKK,EAAA,CAAC,oBAAkB,CAAA,EAAA,cAAA,CACExB,EAAM,aAAA,CAAY,CAAA,CAAA;AAAA,QAAA;UAE5CwG,EAAoCM,IAAA,EAArB,eAAY,QAAM;AAAA,QAAA;QAG1B7G,EAAA,+BADTkB,EAMO,QAAA;AAAA;UAJL,OAAKK,EAAA,CAAC,oBAAkB,CAAA,EAAA,cACCxB,EAAM,aAAA,CAAY,CAAA,CAAA;AAAA,QAAA;UAEtBC,EAAA,cAAU,aAA/B4C,GAA8DiE,IAAA;AAAA;YAArB,eAAY;AAAA,UAAA;;QAE3C7G,EAAA,cAAZwB,EAAA,GAAAN,EAEO,QAFPwB,IAEO;AAAA,WADLlB,EAAA,GAAAoB,GAA2DkE,GAAxB9G,EAAA,UAAU,GAAA,EAAlC,eAAY,QAAM;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoBrC,UAAMH,IAAOC,GACPC,IAAQC,GA0DR+G,IAAc7G,EAAI,EAAqC,GAEvD8G,IAAmB,IAAI1H,GAAA,GAEvB2H,IAAoB/G,EAAI,CAAC,GAEzBgH,IAAmBzG,EAAS,MAC5BV,EAAM,+BAA+B,OAAkBA,EAAM,8BAC1DkH,EAAkB,QAAQlH,EAAM,cACxC,GAEKoH,IAAejH,EAAa,EAAK,GAEjCkH,IAAmBlH,EAAa,EAAK,GAErCmH,IAAsBnH,EAAa,EAAK,GAExCoH,IAAoBpH,EAAI,EAAI,GAE5BqH,IAAcrH,EAAI,EAAK,GACvBsH,IAAatH,EAAI,EAAK,GAEtBuH,IAAcvH,EAAIwH,EAAQ,GAC1BC,IAAoBzH,EAAI0H,EAAS,GACjCC,IAAsB3H,EAAI4H,EAAU,GAEpCC,IAAQ7H,EAAI,EAAE;AAEpB,IAAA4B;AAAA,MACE,MAAMiG,EAAM;AAAA,MACZ,CAAC9C,GAAMC,MAAS;AACd,QAAID,MAASC,KAAQ,OAAOnF,EAAM,WAAY,gBAAqBkF,CAAI;AAAA,MACzE;AAAA,IAAA;AAGF,UAAM+C,KAAuB,MAAM;AACjC,MAAId,EAAiB,SAAOS,GAAmB,OAAO,UAAA;AAAA,IACxD,GAEMM,IAAY,MAAM;AACtB,mBAAaC,CAAuB,GACpCF,GAAA,GACAD,EAAM,QAAQ,IACdZ,EAAa,QAAQ,IACrBG,EAAkB,QAAQ;AAAA,IAC5B,GAEMa,KAAc1H,EAAS,MACvB+G,GAAY,UAAU,KAAa,uBACnCD,GAAa,UAAU,KAAa,eACjCa,EAASrI,EAAM,QAAQ,CAC/B,GAEKsI,IAAkB,CAACC,MAAkB;AACzC,MAAIA,KAAUzI,EAAK,mBAAmByI,CAAQ,GAC9CL,EAAA;AAAA,IACF,GAEMG,IAAW,CAACrJ,MACTD;AAAA,MACLC;AAAA,MACAgB,EAAM;AAAA,MACNA,EAAM;AAAA,MACNA,EAAM;AAAA,IAAA;AAIV,aAASwI,IAAuB;AAC9B,YAAAhB,EAAY,QAAQ,IACpBC,EAAW,QAAQ,IACb,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AAEA,aAASgB,KAAuB;AAC9B,YAAAjB,EAAY,QAAQ,IACpBC,EAAW,QAAQ,IACb,IAAI,MAAM,2EAA2E;AAAA,IAC7F;AAEA,aAASiB,IAA2B;AAClC,YAAAlB,EAAY,QAAQ,IACpBC,EAAW,QAAQ,IACb,IAAI,MAAM,8DAA8D;AAAA,IAChF;AAEA,IAAArB,GAAU,MAAM;AACd,MAAI,OAAOpG,EAAM,WAAY,cAAc,CAAC,MAAM,QAAQA,EAAM,OAAO,IAAGwI,EAAA,IACrEG,EAAA;AAAA,IACP,CAAC;AAED,UAAMC,IAAsBzI,EAAI,EAAK,GAE/B0I,KAAgB1I,EAAI,CAAC,GACrB2I,IAAe3I,EAAI,CAAC,GACpB4I,IAAqB5I,EAAI,CAAC;AAEhC,IAAA4B;AAAA,MACE,MAAM+G,EAAa;AAAA,MACnB,CAAC5D,GAAMC,MAAS;AACd,QAAID,KAAQC,KAAQ,CAACkC,EAAiB,UACpC0B,EAAmB,QAAQ7D;AAAA,MAE/B;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBnD;AAAA,MACE,MAAMsF,EAAiB;AAAA,MACvB,CAACnC,MAAS;AACR,QAAKA,MACH6D,EAAmB,QAAQD,EAAa;AAAA,MAE5C;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAME,IAAoBtI,EAAS,MAAM;AAEvC,UAAI,OAAOV,EAAM,WAAY,cAAc,CAAC,MAAM,QAAQA,EAAM,OAAO,EAAG,QAAOgH,EAAY;AAC7F,YAAMiC,IAAMjB,EAAM,OACZkB,IAAKlC,EAAY;AAEvB,aAAOiC,MAAQ,KAAKC,IAAKA,EAAG,OAAO,CAACC,MAAMd,EAASc,CAAC,EAAE,cAAc,SAASF,EAAI,YAAA,CAAa,CAAC;AAAA,IACjG,CAAC;AAED,IAAAlH;AAAA,MACE,MAAMiH,EAAkB;AAAA,MACxB,CAAC9D,GAAMC,MAAS;AACd,QAAI,KAAK,UAAUD,CAAI,MAAM,KAAK,UAAUC,CAAI,KAAGiE,EAAA;AAAA,MACrD;AAAA,MACA,EAAE,WAAW,IAAO,MAAM,GAAA;AAAA,IAAK;AAGjC,UAAMC,KAAgB,MAAM;AAC1B,MAAAT,EAAoB,QAAQ;AAAA,IAC9B,GAEMQ,IAA+B,MAAM;AACzC,YAAME,IAAgBC,GAAA;AACtB,MAAAV,GAAc,QAAQS,GACtBR,EAAa,QAAQQ,IAAgB,KAAKA,IAAgB;AAAA,IAC5D;AAEA,aAASC,KAAwB;AAC/B,UAAIvJ,EAAM,YAAY,KAAM,QAAO;AACnC,YAAMwJ,IAAcR,EAAkB,MAAM,IAAI,CAACG,MAAMd,EAASc,CAAC,CAAC,GAC5DM,IAAsBD,EAAY,OAAO,CAACL,MAAMA,MAAMd,EAASrI,EAAM,QAAQ,CAAC;AACpF,UAAIyJ,EAAoB,SAAS,GAAG;AAClC,cAAMC,IAAkBD,EAAoB,IAAI,CAACN,MAAMK,EAAY,QAAQL,CAAC,CAAC;AAC7E,iBAASQ,IAAI,GAAGA,IAAID,EAAgB,QAAQC,KAAK;AAC/C,gBAAMC,IAA8B,KAAK;AAAA,YACvCZ,EAAkB,MAAMU,EAAgBC,CAAC,CAAC;AAAA,UAAA,GAEtCE,KAAuB,KAAK,UAAU7J,EAAM,QAAQ;AAC1D,cAAI4J,MAAgCC,GAAsB,QAAOH,EAAgBC,CAAC;AAAA,QACpF;AACA,eAAO;AAAA,MACT;AACA,aAAOH,EAAY,QAAQnB,EAASrI,EAAM,QAAQ,CAAC;AAAA,IACrD;AAEA,UAAM8J,KAAW,MAAM;AACrB,MAAItC,EAAY,UACXJ,EAAa,UAChBC,EAAiB,QAAQ,IACzB+B,EAAA,GACAW,EAAA,GACA3C,EAAa,QAAQ,KAEvBwB,EAAoB,QAAQ,IAC5BrB,EAAkB,QAAQ;AAAA,IAC5B,GAEMwC,IAA6B,MAAM;AACvC,YAAMC,IAAwB,QAAQ,cAAc,QAAQ,OAAO,aAAa,KAC1EC,IAAwB,QAAQ,SAAS,QAAQ,OAAO,QAAQ,KAChEC,IAAgCtC,EAAkB,MAAM;AAC9D,OAAKoC,KAAgBC,MAAiB9C,EAAiB,UACrDgD,GAAA,GACInK,EAAM,gCACRkK,GAAW,eAAe,EAAE,OAAO,SAAS,QAAQ,UAAU;AAAA,IAEpE,GAEME,IAAoBjK,EAAa,EAAI;AAC3C,QAAIgI,IAA0B,WAAW,MAAM;AAAA,IAAC,GAAG,CAAC;AAEpD,aAASgC,KAAqB;AAC5B,YAAMD,IAAgCtC,EAAkB,MAAM;AAC9D,UAAI,CAACsC,EAAW;AAChB,MAAAE,EAAkB,QAAQ;AAC1B,UAAIC,IAAuD;AAE3D,YAAMC,IAAW,MAAM;AACrB,QAAID,mBAA6CA,CAA6B,GAC9E,aAAalC,CAAuB,GACpC,WAAW,MAAM;AACf,UAAAiC,EAAkB,QAAQ;AAAA,QAC5B,GAAG,GAAG;AAAA,MACR;AAEA,MAAAjC,IAA0B,WAAWmC,GAAU,GAAI,GAEnDD,IAAgC,YAAY,MAAM;AAChD,SACEjD,EAAa,UAAU,MACtB8C,GAAW,cAAc,KAAK,SAAS,eAAe,eAEvDI,EAAA;AAAA,MACJ,GAAG,GAAG;AAAA,IACR;AAEA,UAAMrJ,KAAa,MAAM;AACvB,MAAIkG,GAAkB,SAAS,KAAMS,EAAkB,MAAM,WAAA,IACpDE,GAAqB,OAAO,cAAYA,GAAqB,OAAO,WAAA;AAAA,IAC/E;AAEA,mBAAea,IAAmC;AAChD,MAAI,OAAO3I,EAAM,WAAY,aAC3B,MAAMuK,EAASvC,EAAM,QAAQA,EAAM,QAAQ,QAAW,EAAI,KAE1DwC,EAAoBxK,EAAM,OAA0C,GACpEkH,EAAkB,QAAQF,EAAY,MAAM,SAE9CyD,EAAA;AAAA,IACF;AAEA,IAAAvJ,EAAa,EAAE,mBAAAyH,GAAmB,UAAAN,GAAU;AAE5C,aAASoC,IAAqB;AAG5B,MAFyBlB,QAA2B,MACEvC,EAAY,SAAS,CAAC,CAACA,EAAY,MAAM,CAAC,KACjEsB,EAAgBtB,EAAY,MAAM,CAAC,CAAC;AAAA,IACrE;AAEA,mBAAeuD,EAASG,GAAuBC,IAAyB,IAAM;AAC5E,MAAAnD,EAAY,QAAQmD;AACpB,YAAM/K,IAAO,YAAaI,EAAM,QAAqBA,EAAM,gBAAgB0K,KAAgB,EAAE,GACvFE,IAAO,CAACjL,MAA2B;AACvC,SAAI,CAACA,KAAY,EAAE,UAAUA,OAAW6I,EAAA,GACxCgC,EAAoB7K,EAAS,IAAI,GACjCkL,GAAgBlL,GAAU,MAAM,UAAU,CAAC,EAAE,KAAK,MAAM;AACtD,UAAA6H,EAAY,QAAQ;AAAA,QACtB,CAAC;AAAA,MACH;AACA,YAAMP,EAAiB,gBAAgBrH,GAAMgL,CAAI;AAAA,IACnD;AAEA,aAASJ,EAAoBM,GAAwC;AACnE,MAAK,MAAM,QAAQA,CAAK,KAAGtC,EAAA,GACvBsC,EAAM,SAAS,KAAK,OAAOA,EAAM,CAAC,KAAM,YAAUC,GAAmBD,CAAsB,GAC/F9D,EAAY,QAAQ8D;AAAA,IACtB;AAEA,aAASC,GAAmBC,GAAuB;AACjD,OAAI,CAAChL,EAAM,sBAAsBA,EAAM,mBAAmB,WAAW,MAAG0I,EAAA;AACxE,YAAMuC,IAAcjL,EAAM;AAC1B,eAAS2J,IAAI,GAAGA,IAAIqB,EAAO,QAAQrB;AACjC,SAAI,OAAOqB,EAAOrB,CAAC,KAAM,YAAY,EAAEsB,KAAOD,EAAOrB,CAAC,OAAIjB,EAAA;AAAA,IAE9D;AAEA,mBAAemC,GAAgBK,GAAmC;AAChE,YAAMtL,IAAO,YAAaI,EAAM,QAAqB,GAAG,EAAE,GACpD4K,IAAO,CAACjL,MAA2B;AACvC,SAAI,CAACA,KAAY,EAAE,cAAcA,OAAW8I,GAAA,GAC5CvB,EAAkB,QAAQvH,EAAS,YAAYuL;AAAA,MACjD;AACA,YAAMjE,EAAiB,gBAAgBrH,GAAMgL,CAAI;AAAA,IACnD;AAEA,UAAMO,KAAqC,MACHvD,GAAmB,OAAO,cAC9C,qBAAqB,IAAI,EAAEkB,EAAa,KAAK,KAAK,MAGhEsC,KAAQ,CAACvM,MAAgB;AAC7B,MAAIuI,EAAa,SAAS,KACxB0C,GAAA,IACSjL,KACTwM,GAASxM,CAAK;AAAA,IAElB,GAEMwM,KAAW,CAACxM,MAAe;AAC/B,YAAMoM,IAAcpM,EAAM,OAAOA,EAAM;AACvC,OAAIoM,MAAQ,SAASA,MAAQ,aAAU/C,EAAA,GACnC+C,MAAQ,eAAaK,GAAKzM,CAAK,GAC/BoM,MAAQ,aAAWM,GAAG1M,CAAK,IAC3BoM,MAAQ,WAAWA,MAAQ,QAAKO,GAAA,GACpC3M,EAAM,eAAA,GACNA,EAAM,gBAAA;AAAA,IACR,GAEM2M,KAA8B,MAAM;AACxC,MAAIxC,EAAkB,MAAM,SAAS,KACnC3B,EAAiB,QAAQ,IACzBiB,EAAgBU,EAAkB,MAAMF,EAAa,KAAK,CAAC,KAE3DZ,EAAA;AAAA,IAEJ,GAEMoD,KAAO,CAACzM,MAAe;AAC3B,MAAA0I,EAAkB,QAAQ,IACtBuB,EAAa,QAAQE,EAAkB,MAAM,SAAS,MACxDnK,EAAM,eAAA,GACN+J,EAAoB,QAAQ,IAC5BE,EAAa,SACbqC,GAAA,GAAsC,MAAA;AAAA,IAE1C,GAEMI,KAAK,CAAC1M,MAAe;AACzB,MAAA0I,EAAkB,QAAQ,IACtBuB,EAAa,QAAQ,MACvBjK,EAAM,eAAA,GACN+J,EAAoB,QAAQ,IAC5BE,EAAa,SACbqC,GAAA,GAAsC,MAAA;AAAA,IAE1C,GAkBMM,KAAgB;AAAA,MACpB,UAAA3B;AAAA,MACA,SAlBc,CAACjL,MAAe;AAC9B,YAAIuI,GAAc,UAAU,GAAO;AACnC,QAAIY,EAAM,MAAM,SAAS,QAAoB,QAAQ;AACrD,cAAM5D,IAA2BsD,GAAa,OAAO,kBAC/CgE,IAAgC9D,GAAmB,OAAO,cAC1D+D,IAAc9M,GAAO,iBAAiB6M,GAAW,YAAY7M,GAAO,aAAa,GACjF+M,IAAS/M,GAAO,iBAAiBuF,KAAQA,EAAK,SAASvF,GAAO,aAAa,GAC3EgN,KAAahN,GAAO,iBAAiBuF,KAAQA,EAAK,YAAYvF,GAAO,aAAa;AACxF,YAAI,EAAA+M,KAAUD,IACd;AAAA,cAAIE,IAAY;AACd,YAAA5K,GAAA;AACA;AAAA,UACF;AACA,UAAAiH,EAAA;AAAA;AAAA,MACF;AAAA,MAKE,OAAAkD;AAAA,MACA,eAAA/B;AAAA,MACA,UAAAhB;AAAA,MACA,iBAAAC;AAAA,MACA,YAAArH;AAAA,MACA,WAAAiH;AAAA,IAAA;2BAzcA/G,EAmCM,OAAA;AAAA,MAnCD,OAAA,EAAA,UAAA,WAAA;AAAA,MAA4B,OAAKK,EAAEsK,EAAAA,OAAO,KAAK;AAAA,IAAA;MAClDtF,EAiCYmB,IAAA;AAAA,iBAhCN;AAAA,QAAJ,KAAID;AAAA,QACH,kBAAgBN,EAAA;AAAA,QAChB,mBAAmB4B,EAAA;AAAA,QACnB,qBAAqBJ,EAAA;AAAA,QACrB,cAAcG,EAAA;AAAA,QACd,eAAeF,GAAA;AAAA,QACf,uBAAqB5I,EAAA;AAAA,QACrB,8BAA4BA,EAAA;AAAA,QAC5B,kBAAgBwL;AAAA,QACT,iBAAiBpE,EAAA;AAAA,2DAAAA,EAAgB,QAAAhG;AAAA,QACxC,uBAAqB6F,EAAA;AAAA,QACrB,uBAAmB5F,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAEiG,EAAA,QAAsBjG;AAAA,QAC3C,mBAAmB+I,EAAA;AAAA,MAAA;oBAEpB,MAiBc;AAAA,UAjBd5D,EAiBcuB,IAAA;AAAA,qBAhBR;AAAA,YAAJ,KAAID;AAAA,YACH,kBAAgB2D;AAAA,YAChB,kBAAgBrE,EAAA;AAAA,YAChB,sBAAoBD,EAAA;AAAA,YACpB,eAAalH,EAAA;AAAA,YACb,0BAAwBqH,EAAA;AAAA,UAAA;wBAEzB,MAQE;AAAA,cARFd,EAQEqB,IAAA;AAAA,yBAPI;AAAA,gBAAJ,KAAID;AAAA,gBACH,sBAAoBT,EAAA;AAAA,gBACpB,kBAAgBC,EAAA;AAAA,gBAChB,aAAagB,GAAA;AAAA,gBACb,uBAAqBb,EAAA;AAAA,gBACrB,kBAAgBkE;AAAA,gBAChB,kBAAYnK,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAD,MAAE2G,EAAA,QAAQ3G;AAAA,cAAA;;;;;;;;;;"}
|
package/dist/super-list.umd.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(function(e,K){typeof exports=="object"&&typeof module<"u"?module.exports=K(require("vue")):typeof define=="function"&&define.amd?define(["vue"],K):(e=typeof globalThis<"u"?globalThis:e||self,e.SuperList=K(e.Vue))})(this,function(e){"use strict";var K=document.createElement("style");K.textContent=`.list-filter-text-input[data-v-
|
|
2
|
-
/*$vite$:1*/`,document.head.appendChild(K);class re{eventsTypes=["resize","load","scroll","wheel","touchmove"];config={attributes:!0,childList:!0,subtree:!0};mutationObserver;callbackFunction;constructor(r,d=document.body){this.targetNode=d,this.callbackFunction=b=>r(b),this.mutationObserver=new MutationObserver(()=>r())}observe(){this.mutationObserver.observe(this.targetNode,this.config);for(const r of this.eventsTypes)this.addListener(r);this.addResizeListener(),this.addTransitionEndListener()}pauseMutationObserver(){this.mutationObserver.disconnect()}unpauseMutationObserver(){this.mutationObserver.observe(this.targetNode,this.config)}unobserve(){this.mutationObserver.disconnect();for(const r of this.eventsTypes)this.removeListener(r);this.removeResizeListener(),this.removeTransitionEndListener()}addListener(r){document.addEventListener(r,this.callbackFunction,!0)}removeListener(r){document.removeEventListener(r,this.callbackFunction,!0)}addTransitionEndListener(){this.targetNode.addEventListener("transitionend",this.callbackFunction)}removeTransitionEndListener(){this.targetNode.removeEventListener("transitionend",this.callbackFunction)}addResizeListener(){window.addEventListener("resize",this.callbackFunction)}removeResizeListener(){window.removeEventListener("resize",this.callbackFunction)}}function le(t,r,d,b){return r!=null?r(t):t==null?"":typeof t=="object"?t[d]:b?ae(t,b):""+t}function ae(t,r){return r.find(d=>d.type===t)?.label??""}class ue{constructor(){this.abortController=new AbortController,this.func=()=>{},this.then=()=>{}}async abortablePromise(r,d,b){const i=await d();if(!r.aborted)return b(i)}setFunc(r){this.func=r}setThen(r){this.then=r}execute(){return this.abortablePromise(this.abortController.signal,this.func,this.then)}abort(r){this.abortController.abort(r||"Aborted By Controller."),this.abortController=new AbortController}resetAndExecute(r,d){return this.abort("New Request From Controller."),this.setFunc(r),this.setThen(d),this.execute()}}const ce=["tabindex","placeholder","size"],de=e.defineComponent({__name:"ListTextInput",props:{enableTextFilter:{type:Boolean,required:!0},placeholder:{type:String,default:void 0},enableButtonClick:{type:Boolean,default:!0},parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,required:!0}},emits:{"update:selected":null,"update:query":null,"update:press":null},setup(t,{expose:r,emit:d}){const b=d,i=t,m=e.ref(null);function v(g){"sourceCapabilities"in g&&g.sourceCapabilities==null?i.parentMethods.closeList():i.parentMethods.openList()}function n(g){i.parentMethods.unfocus(g)}let s="";function f(g){g?.target?.value!=null&&g?.target?.value!==s&&b("update:query",g.target.value),s=g?.target?.value??""}const a=e.computed(()=>{const g=m?.value?m.value.length:0,c=i.placeholder?.length||0;return g>0?g:c>0?c:5}),w=e.computed(()=>i.enableButtonClick===!0&&i.enableTextFilter===!0?"":"click-through"),T=e.computed(()=>i.showDropDown&&!i.enableTextFilter||!i.showDropDown?"dark-placeholder-text":"light-placeholder-text");function L(){if(m?.value){const g=m.value;g.blur(),g.value=""}}function C(){m?.value&&m.value.focus()}return r({blurInput:L,focusInput:C,textInputRef:m}),(g,c)=>(e.openBlock(),e.createElementBlock("form",{onSubmit:c[10]||(c[10]=e.withModifiers(()=>{},["prevent"])),style:{display:"contents !important"}},[e.createElementVNode("input",{ref_key:"textInputRef",ref:m,tabindex:t.enableTextFilter?0:-1,onKeydown:[c[0]||(c[0]=e.withKeys(h=>t.parentMethods.press(h),["enter"])),c[1]||(c[1]=e.withKeys(h=>t.parentMethods.press(),["space"])),c[2]||(c[2]=e.withKeys(h=>t.parentMethods.press(h),["esc"])),c[3]||(c[3]=e.withKeys(h=>t.parentMethods.press(h),["up"])),c[4]||(c[4]=e.withKeys(h=>t.parentMethods.press(h),["down"]))],onFocusin:c[5]||(c[5]=h=>v(h)),onFocusout:c[6]||(c[6]=h=>n(h)),onInput:c[7]||(c[7]=h=>f(h)),onChange:c[8]||(c[8]=h=>f(h)),onPaste:c[9]||(c[9]=h=>f(h)),type:"text","aria-autocomplete":"none",autocomplete:"off",placeholder:t.placeholder,size:a.value,class:e.normalizeClass([[w.value,T.value,{"text-filter-disabled":!t.enableTextFilter}],"list-filter-text-input"])},null,42,ce)],32))}}),S=(t,r)=>{const d=t.__vccOpts||t;for(const[b,i]of r)d[b]=i;return d},te=S(de,[["__scopeId","data-v-6b9f6134"]]),fe={},pe={xmlns:"http://www.w3.org/2000/svg",fill:"currentColor","aria-hidden":"true","data-slot":"icon",viewBox:"0 -16 16 17"};function me(t,r){return e.openBlock(),e.createElementBlock("svg",pe,r[0]||(r[0]=[e.createElementVNode("path",{"shape-rendering":"geometricPrecision",d:"M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z"},null,-1)]))}const be=S(fe,[["render",me]]),he=["onMousedown"],ge={class:"list-item-span"},we={class:"list-item-span"},ve=S(e.defineComponent({__name:"ListItem",props:{mouseHoveringOnList:{type:Boolean,default:!1},filteredListItems:{type:Array,default:()=>[]},focusedIndex:{type:Number,default:null},selectedIndex:{type:Number,default:null},listElementOpenAndVisible:{type:Boolean,default:!1},parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,default:!1},totalOptionsCount:{type:Number,default:0}},setup(t){const r=t,d=e.useTemplateRef("items"),b=e.computed(()=>{if(!d?.value)return null;const n=(Array.isArray(d.value)?d.value:[d.value])[r.focusedIndex];return n&&typeof n=="object"&&"scrollIntoView"in n&&typeof n.scrollIntoView=="function"?n:null});e.watch(()=>r.showDropDown,()=>i()),e.watch(()=>r.listElementOpenAndVisible,()=>m()),e.watch(()=>b.value,()=>m());function i(){!r.showDropDown||!b?.value?.parentElement?.parentElement||(b.value.parentElement.parentElement.scrollTop=b.value.offsetTop)}function m(){const v=b.value,n=v?.parentElement?.parentElement;if(!r.showDropDown||!v||!n)return;const s=v.offsetTop-n.scrollTop<0,f=v.offsetTop+v.offsetHeight-n.scrollTop>n.clientHeight;s&&(n.scrollTop=v.offsetTop),f&&(n.scrollTop=v.offsetTop+v.clientHeight-n.clientHeight)}return(v,n)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.filteredListItems,(s,f)=>(e.openBlock(),e.createElementBlock("li",{key:f,ref_for:!0,ref:"items",onKeyup:[n[0]||(n[0]=e.withKeys(a=>t.parentMethods.press(a),["enter"])),n[1]||(n[1]=e.withKeys(a=>t.parentMethods.press(a),["space"])),n[2]||(n[2]=e.withKeys(a=>t.parentMethods.press(a),["esc"]))],onKeydown:[n[3]||(n[3]=e.withKeys(a=>t.parentMethods.press(a),["up"])),n[4]||(n[4]=e.withKeys(a=>t.parentMethods.press(a),["down"]))],onFocusout:n[5]||(n[5]=a=>t.parentMethods.unfocus(a)),tabindex:"-1",onMousedown:e.withModifiers(a=>t.parentMethods.updatedSelected(s),["left"]),class:e.normalizeClass([{"list-option-selected":t.selectedIndex===f},{"list-option-active":t.filteredListItems.length===1||t.focusedIndex===f&&!t.mouseHoveringOnList},"list-option"])},[e.createElementVNode("span",ge,e.toDisplayString(t.parentMethods.getLabel(s)),1),t.selectedIndex===f?(e.openBlock(),e.createBlock(be,{key:0,class:"list-item-icon","aria-hidden":"true"})):e.createCommentVNode("",!0)],42,he))),128)),t.filteredListItems.length===0?(e.openBlock(),e.createElementBlock("li",{key:0,onKeyup:[n[6]||(n[6]=e.withKeys(s=>t.parentMethods.press(s),["enter"])),n[7]||(n[7]=e.withKeys(s=>t.parentMethods.press(s),["space"])),n[8]||(n[8]=e.withKeys(s=>t.parentMethods.press(s),["esc"]))],onKeydown:[n[9]||(n[9]=e.withKeys(s=>t.parentMethods.press(s),["up"])),n[10]||(n[10]=e.withKeys(s=>t.parentMethods.press(s),["down"]))],onFocusout:n[11]||(n[11]=s=>t.parentMethods.unfocus(s)),onMousedown:n[12]||(n[12]=e.withModifiers(s=>t.parentMethods.closeList(s),["left"])),tabindex:"-1",class:"list-option-message"},n[20]||(n[20]=[e.createElementVNode("span",{class:"list-item-span"},"No Items To Display.",-1)]),32)):e.createCommentVNode("",!0),t.totalOptionsCount&&t.totalOptionsCount>(t.filteredListItems?.length||0)?(e.openBlock(),e.createElementBlock("li",{key:1,onKeyup:[n[13]||(n[13]=e.withKeys(s=>t.parentMethods.press(s),["enter"])),n[14]||(n[14]=e.withKeys(s=>t.parentMethods.press(s),["space"])),n[15]||(n[15]=e.withKeys(s=>t.parentMethods.press(s),["esc"]))],onKeydown:[n[16]||(n[16]=e.withKeys(s=>t.parentMethods.press(s),["up"])),n[17]||(n[17]=e.withKeys(s=>t.parentMethods.press(s),["down"]))],onFocusout:n[18]||(n[18]=s=>t.parentMethods.unfocus(s)),onMousedown:n[19]||(n[19]=e.withModifiers(s=>t.parentMethods.closeList(s),["left"])),tabindex:"-1",class:"list-option-message"},[e.createElementVNode("span",we," +"+e.toDisplayString(t.totalOptionsCount-t.filteredListItems?.length||0)+" More Items...",1)],32)):e.createCommentVNode("",!0)],64))}}),[["__scopeId","data-v-e4eeb2f7"]]),ne=S(e.defineComponent({__name:"ItemList",props:{mouseHoveringOnList:{type:Boolean,default:!1},filteredListItems:{type:Array,default:()=>[]},focusedIndex:{type:Number,default:null},selectedIndex:{type:Number,default:null},parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,required:!0},maxListHeightPX:{type:Number,required:!0},listAnimationDurationMs:{type:Number,required:!0},blockListChange:{type:Boolean,required:!0},totalOptionsCount:{type:Number,default:0},enableScrollClose:{type:Boolean,default:!0}},emits:["reverseDropDownList"],setup(t,{expose:r,emit:d}){e.useCssVars(u=>({"8d801350":T.value,"2724698a":M.value,"27246d4b":W.value,ffcaa9a8:F.value,"414dd276":q.value}));const b=d,i=t,m=e.ref(null),v=e.ref(null),n=e.ref(null),s=e.ref(0),f=e.ref(0),a=e.ref(0),w=e.ref(0),T=e.ref("0px"),L=e.ref(!1),C=e.ref([]),g=e.ref(0),c=e.computed(()=>!L.value||window?.innerHeight==null?!1:z()&&Z()),h=e.computed(()=>i.maxListHeightPX>=g.value);e.watch(()=>c.value,u=>b("reverseDropDownList",u),{immediate:!0});const M=e.computed(()=>s.value+"px"),W=e.computed(()=>w.value+"px");r({listContainerRef:n});const A=u=>{u?.key&&u.key===" "&&u.preventDefault()},Q=u=>{const y=n?.value,x=u.target;(!(y&&x&&y.contains(x))||y.isEqualNode(x))&&i.parentMethods.focusInput()};function E(){return v?.value?(v?.value).clientHeight:0}function D(){if(!L.value||E()===0)return i.maxListHeightPX;const u=E()===0?i.maxListHeightPX:+E();return i.maxListHeightPX&&i.maxListHeightPX>u?u:i.maxListHeightPX}function z(){return f.value>D()}function Z(){return a.value<D()}const q=e.computed(()=>(i.maxListHeightPX||0)+"px"),F=e.computed(()=>(i.listAnimationDurationMs||0)+"ms"),$=e.computed(()=>i.blockListChange?C.value:i.filteredListItems);e.watch(()=>$,u=>{u&&(C.value=u.value)},{immediate:!1,deep:!0});let k=setTimeout(()=>{},0),O=null;function B(){g.value=E(),clearTimeout(k),O&&O.observe(),L.value=!0,H(void 0)}function Y(){clearTimeout(k),k=setTimeout(()=>{i.showDropDown||(L.value=!1,O&&O.unobserve())},i.listAnimationDurationMs+50)}e.watch(()=>i.showDropDown,(u,y)=>{u!==y&&(P(),u?B():Y())},{immediate:!0});function H(u){P(),e.nextTick(()=>P()),X(u)}function X(u){if(!i.enableScrollClose||!i.showDropDown||typeof n?.value?.contains!="function"||u?.target?.nodeType==null||U(u))return;const x=["scroll","wheel","touchmove"].includes(u?.type);i.showDropDown&&x&&i.parentMethods.closeList()}function U(u){const y=!!m.value?.contains(u?.target),x=!!n.value?.contains(u.target),V=[u?.srcElement?.id,u?.target?.id].includes("super-list-select-list");return y||x||V}function P(){R(),j()}function R(){if(m?.value==null)return;const u=m.value.getBoundingClientRect();f.value=u.top,a.value=window.innerHeight-u.bottom,T.value=u.width+"px"}function j(){if(m?.value==null||n?.value==null)return;const u=J().getBoundingClientRect(),y=n.value.getBoundingClientRect(),x=w.value,V=s.value;c.value?w.value=x-(u.top-y.bottom):w.value=x-(y.top-u.bottom),s.value=V-(y.left-u.left)}function G(){return(m?.value).getElementsByTagName("button")[0]}function J(){return m?.value}return e.onMounted(()=>{O=new re(H,G()),setTimeout(()=>H(void 0),250)}),e.onUnmounted(()=>{O?.unobserve()}),(u,y)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",{ref_key:"dropDownButtonContainer",ref:m,class:"super-list-button-container"},[e.renderSlot(u.$slots,"default",{},void 0,!0)],512),e.createElementVNode("div",{id:"super-list-select-list",ref_key:"listContainerRef",ref:n,onMouseenter:y[0]||(y[0]=x=>t.parentMethods.mouseOverList()),tabindex:"-1",class:e.normalizeClass(["select-list",c.value?"list-reverse":"list-normal",{"select-list-open":t.showDropDown},{"no-scroll":h.value&&L.value},{"select-list-fixed":L.value},{"select-list-scrollable":!h.value}]),onKeydown:y[1]||(y[1]=e.withKeys(x=>A(x),["space"])),onMouseup:y[2]||(y[2]=e.withModifiers(x=>Q(x),["left"]))},[e.createElementVNode("ul",{tabindex:"-1",ref_key:"dropDownListUL",ref:v,class:"list-content"},[e.createVNode(ve,{filteredListItems:C.value,mouseHoveringOnList:t.mouseHoveringOnList,focusedIndex:t.focusedIndex,selectedIndex:t.selectedIndex,listElementOpenAndVisible:L.value,"parent-methods":t.parentMethods,"show-drop-down":t.showDropDown,"total-options-count":t.totalOptionsCount},null,8,["filteredListItems","mouseHoveringOnList","focusedIndex","selectedIndex","listElementOpenAndVisible","parent-methods","show-drop-down","total-options-count"])],512)],34)],64))}}),[["__scopeId","data-v-e58cd48c"]]),ye={},xe={xmlns:"http://www.w3.org/2000/svg",fill:"currentColor","aria-hidden":"true","data-slot":"icon",viewBox:"0 0 12 6"};function Le(t,r){return e.openBlock(),e.createElementBlock("svg",xe,r[0]||(r[0]=[e.createElementVNode("path",{"shape-rendering":"geometricPrecision",d:"M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z"},null,-1)]))}const oe=S(ye,[["render",Le]]),Ie=["tabindex"],ke={key:2,class:"list-button-icon custom-icon"},ie=S(e.defineComponent({__name:"ListButton",props:{parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,required:!0},enableTextFilter:{type:Boolean,required:!0},customIcon:{default:null,type:[Object,Function]},reverseDropDownList:{type:Boolean,required:!0}},setup(t,{expose:r}){const d=t,b=e.ref(null);function i(){d.enableTextFilter||d.parentMethods.openList()}function m(f){d.enableTextFilter?(d.parentMethods.focusInput(),f.stopPropagation(),f.preventDefault()):d.parentMethods.press(f)}function v(f){d.enableTextFilter||d.parentMethods.press(f)}function n(){b?.value&&b.value.blur()}function s(){b?.value&&b.value.focus()}return r({blurInput:n,focusInput:s,buttonRef:b}),(f,a)=>(e.openBlock(),e.createElementBlock("button",{ref_key:"buttonRef",ref:b,tabindex:t.enableTextFilter?-1:0,onKeydown:[a[0]||(a[0]=e.withKeys(w=>m(w),["enter"])),a[1]||(a[1]=e.withKeys(w=>v(w),["space"])),a[2]||(a[2]=e.withKeys(w=>t.parentMethods.press(w),["esc"])),a[3]||(a[3]=e.withKeys(w=>t.parentMethods.press(w),["up"])),a[4]||(a[4]=e.withKeys(w=>t.parentMethods.press(w),["down"]))],onFocusout:a[5]||(a[5]=w=>t.parentMethods.unfocus(w)),onClick:a[6]||(a[6]=w=>i()),type:"button",class:e.normalizeClass([[{"click-through":d.enableTextFilter||d.showDropDown}],"list-button"])},[e.renderSlot(f.$slots,"default",{},void 0,!0),e.createElementVNode("span",{class:e.normalizeClass(["list-button-icon-div",{"bigger-gap":d.showDropDown}])},[t.customIcon?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["list-button-icon",[{"rotate-180":!d.showDropDown}]])},[e.createVNode(oe,{"aria-hidden":"true"})],2)),t.customIcon?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:1,class:e.normalizeClass(["list-button-icon",[{"rotate-180":d.showDropDown}]])},[t.customIcon==null?(e.openBlock(),e.createBlock(oe,{key:0,"aria-hidden":"true"})):e.createCommentVNode("",!0)],2)),t.customIcon?(e.openBlock(),e.createElementBlock("span",ke,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.customIcon),{"aria-hidden":"true"}))])):e.createCommentVNode("",!0)],2)],42,Ie))}}),[["__scopeId","data-v-01ef8e37"]]);return S(e.defineComponent({__name:"super-list",props:{selected:{type:[String,Number,Object,null,void 0]},options:{type:[Function,Array],required:!0},maxListOptions:{type:Number,default:50},maxListHeightPX:{type:Number,default:200},tooltip:{type:String,required:!1},objectLabelKeyName:{type:String,default:""},enumKeyToLabelObjectArray:{type:Object,default:void 0},listAnimationDurationMs:{type:Number,default:300},customIcon:{default:null,type:[Object,Function]},forceTextFilterVisibilityTo:{type:Boolean,default:void 0},customPlaceHolderFunction:{type:Function,default:null},colour:{type:String,default:"black"},scrollTextInputToTopOnMobile:{type:Boolean,default:!0}},emits:{"update:selected":null},setup(t,{expose:r,emit:d}){const b=d,i=t,m=e.ref([]),v=new ue,n=e.ref(0),s=e.computed(()=>i.forceTextFilterVisibilityTo!=null?i.forceTextFilterVisibilityTo:n.value>i.maxListOptions),f=e.ref(!1),a=e.ref(!1),w=e.ref(!1),T=e.ref(!0),L=e.ref(!1),C=e.ref(!1),g=e.ref(ne),c=e.ref(te),h=e.ref(ie),M=e.ref("");e.watch(()=>M.value,(o,l)=>{o!==l&&typeof i.options=="function"&&x(o)});const W=()=>{s.value&&c?.value?.blurInput()},A=()=>{clearTimeout(j),W(),M.value="",f.value=!1,T.value=!0},Q=e.computed(()=>C?.value===!0?"Error loading data":L?.value===!0?"Loading...":D(i.selected)),E=o=>{o&&b("update:selected",o),A()},D=o=>le(o,i.customPlaceHolderFunction,i.objectLabelKeyName,i.enumKeyToLabelObjectArray);function z(){throw L.value=!0,C.value=!0,new Error("Invalid options argument provided to ListInputComponent")}function Z(){throw L.value=!0,C.value=!0,new Error("Invalid response provided to ListInputComponent, no total count key found")}function q(){throw L.value=!0,C.value=!0,new Error("Invalid objectLabelKeyName for provided Dropdown list value.")}e.onMounted(()=>{typeof i.options!="function"&&!Array.isArray(i.options)?z():u()});const F=e.ref(!1),$=e.ref(0),k=e.ref(0),O=e.ref(0);e.watch(()=>k.value,(o,l)=>{o!=l&&!a.value&&(O.value=o)},{immediate:!0}),e.watch(()=>a.value,o=>{o||(O.value=k.value)},{immediate:!0});const B=e.computed(()=>{if(typeof i.options=="function"&&!Array.isArray(i.options))return m.value;const o=M.value,l=m.value;return o===""?l:l.filter(p=>D(p).toLowerCase().includes(o.toLowerCase()))});e.watch(()=>B.value,(o,l)=>{JSON.stringify(o)!==JSON.stringify(l)&&H()},{immediate:!1,deep:!0});const Y=()=>{F.value=!0},H=()=>{const o=X();$.value=o,k.value=o>-1?o:0};function X(){if(i.selected==null)return-1;const o=B.value.map(p=>D(p)),l=o.filter(p=>p===D(i.selected));if(l.length>1){const p=l.map(I=>o.indexOf(I));for(let I=0;I<p.length;I++){const N=JSON.stringify(B.value[p[I]]),ee=JSON.stringify(i.selected);if(N===ee)return p[I]}return-1}return o.indexOf(D(i.selected))}const U=()=>{L.value||(f.value||(a.value=!1,H(),P(),f.value=!0),F.value=!1,T.value=!1)},P=()=>{const o=window?.innerWidth!=null&&window.innerWidth<640,l=screen?.width!=null&&screen.width<640,p=c.value.textInputRef;(o||l)&&s.value&&(G(),i.scrollTextInputToTopOnMobile&&p?.scrollIntoView({block:"start",inline:"center"}))},R=e.ref(!0);let j=setTimeout(()=>{},0);function G(){const o=c.value.textInputRef;if(!o)return;R.value=!1;let l=null;const p=()=>{l&&clearInterval(l),clearTimeout(j),setTimeout(()=>{R.value=!0},100)};j=setTimeout(p,5e3),l=setInterval(()=>{(f.value===!1||o?.scrollTop===0&&document.readyState==="complete")&&p()},100)}const J=()=>{s?.value==!0?c.value.focusInput():h?.value?.focusInput&&h?.value?.focusInput()};async function u(){typeof i.options=="function"?await x(M.value?M.value:void 0,!0):(V(i.options),n.value=m.value.length),y()}r({initializeOptions:u,getLabel:D});function y(){X()==-1&&m.value&&!!m.value[0]&&E(m.value[0])}async function x(o,l=!0){L.value=l;const p=async()=>i.options(i.maxListOptions,o||""),I=N=>{(!N||!("data"in N))&&z(),V(N.data),Ce(N?.data?.length??0).then(()=>{L.value=!1})};await v.resetAndExecute(p,I)}function V(o){Array.isArray(o)||z(),o.length>0&&typeof o[0]=="object"&&Te(o),m.value=o}function Te(o){(!i.objectLabelKeyName||i.objectLabelKeyName.length===0)&&q();const l=i.objectLabelKeyName;for(let p=0;p<o.length;p++)(typeof o[p]!="object"||!(l in o[p]))&&q()}async function Ce(o){const l=async()=>i.options(1,""),p=I=>{(!I||!("totalNum"in I))&&Z(),n.value=I.totalNum??o};await v.resetAndExecute(l,p)}const se=()=>c?.value?.textInputRef?.getElementsByTagName("li")[k.value]??null,De=o=>{f.value==!1?U():o&&Oe(o)},Oe=o=>{const l=o.key||o.code;(l==="Tab"||l==="Escape")&&A(),l==="ArrowDown"&&Be(o),l==="ArrowUp"&&Ee(o),(l==="Enter"||l===" ")&&Me(),o.preventDefault(),o.stopPropagation()},Me=()=>{B.value.length>0?(a.value=!0,E(B.value[k.value])):A()},Be=o=>{T.value=!0,k.value<B.value.length-1&&(o.preventDefault(),F.value=!1,k.value++,se()?.focus())},Ee=o=>{T.value=!0,k.value>0&&(o.preventDefault(),F.value=!1,k.value--,se()?.focus())},_={openList:U,unfocus:o=>{if(f?.value===!1)return;M.value.length>0&&(a.value=!0);const l=g?.value?.listContainerRef,p=c?.value?.textInputRef,I=o?.relatedTarget&&p?.isEqualNode(o?.relatedTarget),N=o?.relatedTarget&&l&&l.contains(o?.relatedTarget),ee=o?.relatedTarget&&l&&l.isEqualNode(o?.relatedTarget);if(!(N||I)){if(ee){J();return}A()}},press:De,mouseOverList:Y,getLabel:D,updatedSelected:E,focusInput:J,closeList:A};return(o,l)=>(e.openBlock(),e.createElementBlock("div",{style:{position:"relative"},class:e.normalizeClass(o.$attrs.class)},[e.createVNode(ne,{ref_key:"itemListRef",ref:g,"show-drop-down":f.value,filteredListItems:B.value,mouseHoveringOnList:F.value,focusedIndex:O.value,selectedIndex:$.value,"max-list-height-p-x":t.maxListHeightPX,"list-animation-duration-ms":t.listAnimationDurationMs,"parent-methods":_,blockListChange:a.value,"onUpdate:blockListChange":l[1]||(l[1]=p=>a.value=p),"total-options-count":n.value,onReverseDropDownList:l[2]||(l[2]=p=>w.value=p),enableScrollClose:R.value},{default:e.withCtx(()=>[e.createVNode(ie,{ref_key:"dropDownButtonInput",ref:h,"parent-methods":_,"show-drop-down":f.value,"enable-text-filter":s.value,"custom-icon":t.customIcon,"reverse-drop-down-list":w.value},{default:e.withCtx(()=>[e.createVNode(te,{ref_key:"dropDownTextInput",ref:c,"enable-text-filter":s.value,"show-drop-down":f.value,placeholder:Q.value,"enable-button-click":T.value,"parent-methods":_,"onUpdate:query":l[0]||(l[0]=p=>M.value=p)},null,8,["enable-text-filter","show-drop-down","placeholder","enable-button-click"])]),_:1},8,["show-drop-down","enable-text-filter","custom-icon","reverse-drop-down-list"])]),_:1},8,["show-drop-down","filteredListItems","mouseHoveringOnList","focusedIndex","selectedIndex","max-list-height-p-x","list-animation-duration-ms","blockListChange","total-options-count","enableScrollClose"])],2))}}),[["__scopeId","data-v-cc38ced5"]])});
|
|
1
|
+
(function(e,K){typeof exports=="object"&&typeof module<"u"?module.exports=K(require("vue")):typeof define=="function"&&define.amd?define(["vue"],K):(e=typeof globalThis<"u"?globalThis:e||self,e.SuperList=K(e.Vue))})(this,function(e){"use strict";var K=document.createElement("style");K.textContent=`.list-filter-text-input[data-v-e7eaf23c]{color:var(--superlist-text-colour, rgb(17, 24, 39));text-align:center;padding:.125rem 2rem .125rem .5rem;width:100%;height:100%;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:transparent;border:0 none;pointer-events:auto;cursor:text}.list-filter-text-input[data-v-e7eaf23c]:focus,.list-filter-text-input[data-v-e7eaf23c]:focus-visible,.list-filter-text-input[data-v-e7eaf23c]:active{text-align:left}.click-through[data-v-e7eaf23c]{pointer-events:none}.dark-placeholder-text[data-v-e7eaf23c]::placeholder{color:var(--superlist-text-colour, rgb(17, 24, 39))}.light-placeholder-text[data-v-e7eaf23c]::placeholder{color:var(--superlist-disabled-text-colour, rgb(120, 125, 130))}.text-filter-disabled[data-v-e7eaf23c]{background-color:transparent;border:none;outline:none;box-shadow:none;filter:none}@media (min-width: 640px){.list-filter-text-input[data-v-e7eaf23c]{font-size:.875rem;line-height:1.5rem}}.list-option[data-v-e4eeb2f7]{text-transform:capitalize;display:inline-flex;width:100%;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;color:var(--superlist-text-colour, rgb(55, 60, 65));transition-property:font-weight,background-color,color,text-shadow;transition-duration:.5s;transition-timing-function:ease;font-weight:400;text-shadow:1px 1px 3px var(--superlist-background-colour, white)}.list-option[data-v-e4eeb2f7]:focus-visible,.list-option>span[data-v-e4eeb2f7]:focus-visible{outline:none}.list-option-selected[data-v-e4eeb2f7]{font-weight:600}.list-option-message[data-v-e4eeb2f7]{text-shadow:1px 1px 3px var(--superlist-background-colour, white);text-transform:capitalize;display:inline-flex;width:100%;position:relative;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;color:var(--superlist-disabled-text-colour, rgb(120, 125, 130))}.list-option-active[data-v-e4eeb2f7]:hover,.list-option-active[data-v-e4eeb2f7],.list-option-selected[data-v-e4eeb2f7]:hover,.list-option[data-v-e4eeb2f7]:hover{font-weight:600;background-color:var(--superlist-theme-colour, rgb(77, 168, 11, .8));color:var(--superlist-background-colour, white);text-shadow:1px 1px 3px var(--superlist-theme-colour, rgb(77, 168, 11, .8));transition-duration:0s!important}.list-item-icon[data-v-e4eeb2f7]{display:flex;height:1rem;width:1rem;position:absolute;right:.7rem;margin-top:-.1rem;align-self:center}.list-item-span[data-v-e4eeb2f7]{padding:.5rem 1.75rem .5rem .75rem;width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-normal[data-v-e58cd48c]{top:var(--parent-y)}.list-reverse[data-v-e58cd48c]{bottom:var(--parent-y)}.select-list[data-v-e58cd48c]{--parent-width: var(--v8d801350);--parent-x: var(--v2724698a);--parent-y: var(--v27246d4b);--duration: var(--ffcaa9a8);--border-radius: var(--superlist-list-border-radius, 0);border-radius:var(--border-radius);width:var(--parent-width);min-width:var(--parent-width);left:var(--parent-x);display:block;transition-property:max-height,opacity,visibility,box-shadow;transition-duration:var(--duration, .3s);transition-timing-function:cubic-bezier(.1,.9,.35,.98);position:absolute;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);background-color:#ffffffb3;align-items:baseline;opacity:.25;z-index:999;visibility:collapse;overflow:auto;max-height:0;border:none!important}.select-list[data-v-e58cd48c]:focus-visible,.select-list>ul[data-v-e58cd48c]:focus-visible,.super-list-button-container[data-v-e58cd48c]:focus-visible{outline:none}.super-list-button-container[data-v-e58cd48c]{height:100%;width:100%}.select-list.select-list-open[data-v-e58cd48c]{z-index:999999;--max-height: var(--v414dd276);max-height:var(--max-height, 0)}.select-list.no-scroll[data-v-e58cd48c]{overflow:hidden}.select-list-fixed[data-v-e58cd48c]{position:fixed;opacity:1;visibility:visible}.list-content[data-v-e58cd48c]{--duration: var(--ffcaa9a8);overflow:visible;margin:0;padding:0;border-style:none;color:var(--superlist-text-colour, rgb(55, 60, 65));list-style:none;max-width:100%}.select-list.select-list-scrollable[data-v-e58cd48c]{border-radius:var(--border-radius)}.select-list[data-v-e58cd48c]:not(.select-list-fixed){transition:none;box-shadow:none!important}@media (min-width: 640px){.select-list.select-list-scrollable[data-v-e58cd48c]{border-radius:var(--border-radius) 0 0 var(--border-radius)}.list-content[data-v-e58cd48c]{font-size:.875rem;line-height:1.25rem}}.list-button-icon[data-v-01ef8e37]{display:flex;transition-timing-function:ease-in-out;transition-duration:.2s;transition-property:transform;width:.6rem;transform:rotate(0);color:var(--superlist-text-colour, rgb(17, 24, 39));justify-content:center;max-height:18%}.list-button-icon.custom-icon[data-v-01ef8e37]{max-height:100%;width:1.25rem}.list-button-icon.rotate-180[data-v-01ef8e37]{transform:rotate(180deg)}.list-button[data-v-01ef8e37]{position:relative;padding:0;margin:0;width:100%;max-height:100%;height:100%;background-color:var(--superlist-background-colour, white);align-items:center;pointer-events:auto;cursor:pointer}.list-button[data-v-01ef8e37]:focus,.list-button[data-v-01ef8e37]:focus-visible,.list-button[data-v-01ef8e37]:active{text-align:left}.list-button-icon-div[data-v-01ef8e37]{pointer-events:none;position:absolute;top:0;bottom:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding-right:.75rem;max-height:100%;height:100%;gap:max(.15rem,calc(6.25% + .075rem));transition:gap .2s}.list-button-icon-div.bigger-gap[data-v-01ef8e37]{gap:calc(40% - .25rem)}.click-through[data-v-01ef8e37]{pointer-events:none}[data-v-cc38ced5]{box-sizing:border-box}
|
|
2
|
+
/*$vite$:1*/`,document.head.appendChild(K);class re{eventsTypes=["resize","load","scroll","wheel","touchmove"];config={attributes:!0,childList:!0,subtree:!0};mutationObserver;callbackFunction;constructor(r,d=document.body){this.targetNode=d,this.callbackFunction=b=>r(b),this.mutationObserver=new MutationObserver(()=>r())}observe(){this.mutationObserver.observe(this.targetNode,this.config);for(const r of this.eventsTypes)this.addListener(r);this.addResizeListener(),this.addTransitionEndListener()}pauseMutationObserver(){this.mutationObserver.disconnect()}unpauseMutationObserver(){this.mutationObserver.observe(this.targetNode,this.config)}unobserve(){this.mutationObserver.disconnect();for(const r of this.eventsTypes)this.removeListener(r);this.removeResizeListener(),this.removeTransitionEndListener()}addListener(r){document.addEventListener(r,this.callbackFunction,!0)}removeListener(r){document.removeEventListener(r,this.callbackFunction,!0)}addTransitionEndListener(){this.targetNode.addEventListener("transitionend",this.callbackFunction)}removeTransitionEndListener(){this.targetNode.removeEventListener("transitionend",this.callbackFunction)}addResizeListener(){window.addEventListener("resize",this.callbackFunction)}removeResizeListener(){window.removeEventListener("resize",this.callbackFunction)}}function le(t,r,d,b){return r!=null?r(t):t==null?"":typeof t=="object"?t[d]:b?ae(t,b):""+t}function ae(t,r){return r.find(d=>d.type===t)?.label??""}class ue{constructor(){this.abortController=new AbortController,this.func=()=>{},this.then=()=>{}}async abortablePromise(r,d,b){const i=await d();if(!r.aborted)return b(i)}setFunc(r){this.func=r}setThen(r){this.then=r}execute(){return this.abortablePromise(this.abortController.signal,this.func,this.then)}abort(r){this.abortController.abort(r||"Aborted By Controller."),this.abortController=new AbortController}resetAndExecute(r,d){return this.abort("New Request From Controller."),this.setFunc(r),this.setThen(d),this.execute()}}const ce=["tabindex","placeholder","size"],de=e.defineComponent({__name:"ListTextInput",props:{enableTextFilter:{type:Boolean,required:!0},placeholder:{type:String,default:void 0},enableButtonClick:{type:Boolean,default:!0},parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,required:!0}},emits:{"update:selected":null,"update:query":null,"update:press":null},setup(t,{expose:r,emit:d}){const b=d,i=t,m=e.ref(null);function v(g){"sourceCapabilities"in g&&g.sourceCapabilities==null?i.parentMethods.closeList():i.parentMethods.openList()}function n(g){i.parentMethods.unfocus(g)}let s="";function f(g){g?.target?.value!=null&&g?.target?.value!==s&&b("update:query",g.target.value),s=g?.target?.value??""}const a=e.computed(()=>{const g=m?.value?m.value.length:0,c=i.placeholder?.length||0;return g>0?g:c>0?c:5}),w=e.computed(()=>i.enableButtonClick===!0&&i.enableTextFilter===!0?"":"click-through"),T=e.computed(()=>i.showDropDown&&!i.enableTextFilter||!i.showDropDown?"dark-placeholder-text":"light-placeholder-text");function L(){if(m?.value){const g=m.value;g.blur(),g.value=""}}function C(){m?.value&&m.value.focus()}return r({blurInput:L,focusInput:C,textInputRef:m}),(g,c)=>(e.openBlock(),e.createElementBlock("form",{onSubmit:c[10]||(c[10]=e.withModifiers(()=>{},["prevent"])),style:{display:"contents !important"}},[e.createElementVNode("input",{ref_key:"textInputRef",ref:m,tabindex:t.enableTextFilter?0:-1,onKeydown:[c[0]||(c[0]=e.withKeys(h=>t.parentMethods.press(h),["enter"])),c[1]||(c[1]=e.withKeys(h=>t.parentMethods.press(),["space"])),c[2]||(c[2]=e.withKeys(h=>t.parentMethods.press(h),["esc"])),c[3]||(c[3]=e.withKeys(h=>t.parentMethods.press(h),["up"])),c[4]||(c[4]=e.withKeys(h=>t.parentMethods.press(h),["down"]))],onFocusin:c[5]||(c[5]=h=>v(h)),onFocusout:c[6]||(c[6]=h=>n(h)),onInput:c[7]||(c[7]=h=>f(h)),onChange:c[8]||(c[8]=h=>f(h)),onPaste:c[9]||(c[9]=h=>f(h)),type:"text","aria-autocomplete":"none",autocomplete:"off",placeholder:t.placeholder,size:a.value,class:e.normalizeClass([[w.value,T.value,{"text-filter-disabled":!t.enableTextFilter}],"list-filter-text-input"])},null,42,ce)],32))}}),S=(t,r)=>{const d=t.__vccOpts||t;for(const[b,i]of r)d[b]=i;return d},te=S(de,[["__scopeId","data-v-e7eaf23c"]]),fe={},pe={xmlns:"http://www.w3.org/2000/svg",fill:"currentColor","aria-hidden":"true","data-slot":"icon",viewBox:"0 -16 16 17"};function me(t,r){return e.openBlock(),e.createElementBlock("svg",pe,[...r[0]||(r[0]=[e.createElementVNode("path",{"shape-rendering":"geometricPrecision",d:"M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z"},null,-1)])])}const be=S(fe,[["render",me]]),he=["onMousedown"],ge={class:"list-item-span"},we={class:"list-item-span"},ve=S(e.defineComponent({__name:"ListItem",props:{mouseHoveringOnList:{type:Boolean,default:!1},filteredListItems:{type:Array,default:()=>[]},focusedIndex:{type:Number,default:null},selectedIndex:{type:Number,default:null},listElementOpenAndVisible:{type:Boolean,default:!1},parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,default:!1},totalOptionsCount:{type:Number,default:0}},setup(t){const r=t,d=e.useTemplateRef("items"),b=e.computed(()=>{if(!d?.value)return null;const n=(Array.isArray(d.value)?d.value:[d.value])[r.focusedIndex];return n&&typeof n=="object"&&"scrollIntoView"in n&&typeof n.scrollIntoView=="function"?n:null});e.watch(()=>r.showDropDown,()=>i()),e.watch(()=>r.listElementOpenAndVisible,()=>m()),e.watch(()=>b.value,()=>m());function i(){!r.showDropDown||!b?.value?.parentElement?.parentElement||(b.value.parentElement.parentElement.scrollTop=b.value.offsetTop)}function m(){const v=b.value,n=v?.parentElement?.parentElement;if(!r.showDropDown||!v||!n)return;const s=v.offsetTop-n.scrollTop<0,f=v.offsetTop+v.offsetHeight-n.scrollTop>n.clientHeight;s&&(n.scrollTop=v.offsetTop),f&&(n.scrollTop=v.offsetTop+v.clientHeight-n.clientHeight)}return(v,n)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.filteredListItems,(s,f)=>(e.openBlock(),e.createElementBlock("li",{key:f,ref_for:!0,ref:"items",onKeyup:[n[0]||(n[0]=e.withKeys(a=>t.parentMethods.press(a),["enter"])),n[1]||(n[1]=e.withKeys(a=>t.parentMethods.press(a),["space"])),n[2]||(n[2]=e.withKeys(a=>t.parentMethods.press(a),["esc"]))],onKeydown:[n[3]||(n[3]=e.withKeys(a=>t.parentMethods.press(a),["up"])),n[4]||(n[4]=e.withKeys(a=>t.parentMethods.press(a),["down"]))],onFocusout:n[5]||(n[5]=a=>t.parentMethods.unfocus(a)),tabindex:"-1",onMousedown:e.withModifiers(a=>t.parentMethods.updatedSelected(s),["left"]),class:e.normalizeClass([{"list-option-selected":t.selectedIndex===f},{"list-option-active":t.filteredListItems.length===1||t.focusedIndex===f&&!t.mouseHoveringOnList},"list-option"])},[e.createElementVNode("span",ge,e.toDisplayString(t.parentMethods.getLabel(s)),1),t.selectedIndex===f?(e.openBlock(),e.createBlock(be,{key:0,class:"list-item-icon","aria-hidden":"true"})):e.createCommentVNode("",!0)],42,he))),128)),t.filteredListItems.length===0?(e.openBlock(),e.createElementBlock("li",{key:0,onKeyup:[n[6]||(n[6]=e.withKeys(s=>t.parentMethods.press(s),["enter"])),n[7]||(n[7]=e.withKeys(s=>t.parentMethods.press(s),["space"])),n[8]||(n[8]=e.withKeys(s=>t.parentMethods.press(s),["esc"]))],onKeydown:[n[9]||(n[9]=e.withKeys(s=>t.parentMethods.press(s),["up"])),n[10]||(n[10]=e.withKeys(s=>t.parentMethods.press(s),["down"]))],onFocusout:n[11]||(n[11]=s=>t.parentMethods.unfocus(s)),onMousedown:n[12]||(n[12]=e.withModifiers(s=>t.parentMethods.closeList(s),["left"])),tabindex:"-1",class:"list-option-message"},[...n[20]||(n[20]=[e.createElementVNode("span",{class:"list-item-span"},"No Items To Display.",-1)])],32)):e.createCommentVNode("",!0),t.totalOptionsCount&&t.totalOptionsCount>(t.filteredListItems?.length||0)?(e.openBlock(),e.createElementBlock("li",{key:1,onKeyup:[n[13]||(n[13]=e.withKeys(s=>t.parentMethods.press(s),["enter"])),n[14]||(n[14]=e.withKeys(s=>t.parentMethods.press(s),["space"])),n[15]||(n[15]=e.withKeys(s=>t.parentMethods.press(s),["esc"]))],onKeydown:[n[16]||(n[16]=e.withKeys(s=>t.parentMethods.press(s),["up"])),n[17]||(n[17]=e.withKeys(s=>t.parentMethods.press(s),["down"]))],onFocusout:n[18]||(n[18]=s=>t.parentMethods.unfocus(s)),onMousedown:n[19]||(n[19]=e.withModifiers(s=>t.parentMethods.closeList(s),["left"])),tabindex:"-1",class:"list-option-message"},[e.createElementVNode("span",we," +"+e.toDisplayString(t.totalOptionsCount-t.filteredListItems?.length||0)+" More Items...",1)],32)):e.createCommentVNode("",!0)],64))}}),[["__scopeId","data-v-e4eeb2f7"]]),ne=S(e.defineComponent({__name:"ItemList",props:{mouseHoveringOnList:{type:Boolean,default:!1},filteredListItems:{type:Array,default:()=>[]},focusedIndex:{type:Number,default:null},selectedIndex:{type:Number,default:null},parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,required:!0},maxListHeightPX:{type:Number,required:!0},listAnimationDurationMs:{type:Number,required:!0},blockListChange:{type:Boolean,required:!0},totalOptionsCount:{type:Number,default:0},enableScrollClose:{type:Boolean,default:!0}},emits:["reverseDropDownList"],setup(t,{expose:r,emit:d}){e.useCssVars(u=>({v8d801350:T.value,v2724698a:M.value,v27246d4b:W.value,ffcaa9a8:F.value,v414dd276:q.value}));const b=d,i=t,m=e.ref(null),v=e.ref(null),n=e.ref(null),s=e.ref(0),f=e.ref(0),a=e.ref(0),w=e.ref(0),T=e.ref("0px"),L=e.ref(!1),C=e.ref([]),g=e.ref(0),c=e.computed(()=>!L.value||window?.innerHeight==null?!1:z()&&Z()),h=e.computed(()=>i.maxListHeightPX>=g.value);e.watch(()=>c.value,u=>b("reverseDropDownList",u),{immediate:!0});const M=e.computed(()=>s.value+"px"),W=e.computed(()=>w.value+"px");r({listContainerRef:n});const A=u=>{u?.key&&u.key===" "&&u.preventDefault()},Q=u=>{const y=n?.value,x=u.target;(!(y&&x&&y.contains(x))||y.isEqualNode(x))&&i.parentMethods.focusInput()};function E(){return v?.value?(v?.value).clientHeight:0}function D(){if(!L.value||E()===0)return i.maxListHeightPX;const u=E()===0?i.maxListHeightPX:+E();return i.maxListHeightPX&&i.maxListHeightPX>u?u:i.maxListHeightPX}function z(){return f.value>D()}function Z(){return a.value<D()}const q=e.computed(()=>(i.maxListHeightPX||0)+"px"),F=e.computed(()=>(i.listAnimationDurationMs||0)+"ms"),$=e.computed(()=>i.blockListChange?C.value:i.filteredListItems);e.watch(()=>$,u=>{u&&(C.value=u.value)},{immediate:!1,deep:!0});let k=setTimeout(()=>{},0),O=null;function B(){g.value=E(),clearTimeout(k),O&&O.observe(),L.value=!0,H(void 0)}function Y(){clearTimeout(k),k=setTimeout(()=>{i.showDropDown||(L.value=!1,O&&O.unobserve())},i.listAnimationDurationMs+50)}e.watch(()=>i.showDropDown,(u,y)=>{u!==y&&(P(),u?B():Y())},{immediate:!0});function H(u){P(),e.nextTick(()=>P()),X(u)}function X(u){if(!i.enableScrollClose||!i.showDropDown||typeof n?.value?.contains!="function"||u?.target?.nodeType==null||U(u))return;const x=["scroll","wheel","touchmove"].includes(u?.type);i.showDropDown&&x&&i.parentMethods.closeList()}function U(u){const y=!!m.value?.contains(u?.target),x=!!n.value?.contains(u.target),V=[u?.srcElement?.id,u?.target?.id].includes("super-list-select-list");return y||x||V}function P(){R(),j()}function R(){if(m?.value==null)return;const u=m.value.getBoundingClientRect();f.value=u.top,a.value=window.innerHeight-u.bottom,T.value=u.width+"px"}function j(){if(m?.value==null||n?.value==null)return;const u=J().getBoundingClientRect(),y=n.value.getBoundingClientRect(),x=w.value,V=s.value;c.value?w.value=x-(u.top-y.bottom):w.value=x-(y.top-u.bottom),s.value=V-(y.left-u.left)}function G(){return(m?.value).getElementsByTagName("button")[0]}function J(){return m?.value}return e.onMounted(()=>{O=new re(H,G()),setTimeout(()=>H(void 0),250)}),e.onUnmounted(()=>{O?.unobserve()}),(u,y)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",{ref_key:"dropDownButtonContainer",ref:m,class:"super-list-button-container"},[e.renderSlot(u.$slots,"default",{},void 0,!0)],512),e.createElementVNode("div",{id:"super-list-select-list",ref_key:"listContainerRef",ref:n,onMouseenter:y[0]||(y[0]=x=>t.parentMethods.mouseOverList()),tabindex:"-1",class:e.normalizeClass(["select-list",c.value?"list-reverse":"list-normal",{"select-list-open":t.showDropDown},{"no-scroll":h.value&&L.value},{"select-list-fixed":L.value},{"select-list-scrollable":!h.value}]),onKeydown:y[1]||(y[1]=e.withKeys(x=>A(x),["space"])),onMouseup:y[2]||(y[2]=e.withModifiers(x=>Q(x),["left"]))},[e.createElementVNode("ul",{tabindex:"-1",ref_key:"dropDownListUL",ref:v,class:"list-content"},[e.createVNode(ve,{filteredListItems:C.value,mouseHoveringOnList:t.mouseHoveringOnList,focusedIndex:t.focusedIndex,selectedIndex:t.selectedIndex,listElementOpenAndVisible:L.value,"parent-methods":t.parentMethods,"show-drop-down":t.showDropDown,"total-options-count":t.totalOptionsCount},null,8,["filteredListItems","mouseHoveringOnList","focusedIndex","selectedIndex","listElementOpenAndVisible","parent-methods","show-drop-down","total-options-count"])],512)],34)],64))}}),[["__scopeId","data-v-e58cd48c"]]),ye={},xe={xmlns:"http://www.w3.org/2000/svg",fill:"currentColor","aria-hidden":"true","data-slot":"icon",viewBox:"0 0 12 6"};function Le(t,r){return e.openBlock(),e.createElementBlock("svg",xe,[...r[0]||(r[0]=[e.createElementVNode("path",{"shape-rendering":"geometricPrecision",d:"M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z"},null,-1)])])}const oe=S(ye,[["render",Le]]),Ie=["tabindex"],ke={key:2,class:"list-button-icon custom-icon"},ie=S(e.defineComponent({__name:"ListButton",props:{parentMethods:{type:Object,required:!0},showDropDown:{type:Boolean,required:!0},enableTextFilter:{type:Boolean,required:!0},customIcon:{default:null,type:[Object,Function]},reverseDropDownList:{type:Boolean,required:!0}},setup(t,{expose:r}){const d=t,b=e.ref(null);function i(){d.enableTextFilter||d.parentMethods.openList()}function m(f){d.enableTextFilter?(d.parentMethods.focusInput(),f.stopPropagation(),f.preventDefault()):d.parentMethods.press(f)}function v(f){d.enableTextFilter||d.parentMethods.press(f)}function n(){b?.value&&b.value.blur()}function s(){b?.value&&b.value.focus()}return r({blurInput:n,focusInput:s,buttonRef:b}),(f,a)=>(e.openBlock(),e.createElementBlock("button",{ref_key:"buttonRef",ref:b,tabindex:t.enableTextFilter?-1:0,onKeydown:[a[0]||(a[0]=e.withKeys(w=>m(w),["enter"])),a[1]||(a[1]=e.withKeys(w=>v(w),["space"])),a[2]||(a[2]=e.withKeys(w=>t.parentMethods.press(w),["esc"])),a[3]||(a[3]=e.withKeys(w=>t.parentMethods.press(w),["up"])),a[4]||(a[4]=e.withKeys(w=>t.parentMethods.press(w),["down"]))],onFocusout:a[5]||(a[5]=w=>t.parentMethods.unfocus(w)),onClick:a[6]||(a[6]=w=>i()),type:"button",class:e.normalizeClass([[{"click-through":d.enableTextFilter||d.showDropDown}],"list-button"])},[e.renderSlot(f.$slots,"default",{},void 0,!0),e.createElementVNode("span",{class:e.normalizeClass(["list-button-icon-div",{"bigger-gap":d.showDropDown}])},[t.customIcon?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["list-button-icon",[{"rotate-180":!d.showDropDown}]])},[e.createVNode(oe,{"aria-hidden":"true"})],2)),t.customIcon?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:1,class:e.normalizeClass(["list-button-icon",[{"rotate-180":d.showDropDown}]])},[t.customIcon==null?(e.openBlock(),e.createBlock(oe,{key:0,"aria-hidden":"true"})):e.createCommentVNode("",!0)],2)),t.customIcon?(e.openBlock(),e.createElementBlock("span",ke,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.customIcon),{"aria-hidden":"true"}))])):e.createCommentVNode("",!0)],2)],42,Ie))}}),[["__scopeId","data-v-01ef8e37"]]);return S(e.defineComponent({__name:"super-list",props:{selected:{type:[String,Number,Object,null,void 0]},options:{type:[Function,Array],required:!0},maxListOptions:{type:Number,default:50},maxListHeightPX:{type:Number,default:200},tooltip:{type:String,required:!1},objectLabelKeyName:{type:String,default:""},enumKeyToLabelObjectArray:{type:Object,default:void 0},listAnimationDurationMs:{type:Number,default:300},customIcon:{default:null,type:[Object,Function]},forceTextFilterVisibilityTo:{type:Boolean,default:void 0},customPlaceHolderFunction:{type:Function,default:null},colour:{type:String,default:"black"},scrollTextInputToTopOnMobile:{type:Boolean,default:!0}},emits:{"update:selected":null},setup(t,{expose:r,emit:d}){const b=d,i=t,m=e.ref([]),v=new ue,n=e.ref(0),s=e.computed(()=>i.forceTextFilterVisibilityTo!=null?i.forceTextFilterVisibilityTo:n.value>i.maxListOptions),f=e.ref(!1),a=e.ref(!1),w=e.ref(!1),T=e.ref(!0),L=e.ref(!1),C=e.ref(!1),g=e.ref(ne),c=e.ref(te),h=e.ref(ie),M=e.ref("");e.watch(()=>M.value,(o,l)=>{o!==l&&typeof i.options=="function"&&x(o)});const W=()=>{s.value&&c?.value?.blurInput()},A=()=>{clearTimeout(j),W(),M.value="",f.value=!1,T.value=!0},Q=e.computed(()=>C?.value===!0?"Error loading data":L?.value===!0?"Loading...":D(i.selected)),E=o=>{o&&b("update:selected",o),A()},D=o=>le(o,i.customPlaceHolderFunction,i.objectLabelKeyName,i.enumKeyToLabelObjectArray);function z(){throw L.value=!0,C.value=!0,new Error("Invalid options argument provided to ListInputComponent")}function Z(){throw L.value=!0,C.value=!0,new Error("Invalid response provided to ListInputComponent, no total count key found")}function q(){throw L.value=!0,C.value=!0,new Error("Invalid objectLabelKeyName for provided Dropdown list value.")}e.onMounted(()=>{typeof i.options!="function"&&!Array.isArray(i.options)?z():u()});const F=e.ref(!1),$=e.ref(0),k=e.ref(0),O=e.ref(0);e.watch(()=>k.value,(o,l)=>{o!=l&&!a.value&&(O.value=o)},{immediate:!0}),e.watch(()=>a.value,o=>{o||(O.value=k.value)},{immediate:!0});const B=e.computed(()=>{if(typeof i.options=="function"&&!Array.isArray(i.options))return m.value;const o=M.value,l=m.value;return o===""?l:l.filter(p=>D(p).toLowerCase().includes(o.toLowerCase()))});e.watch(()=>B.value,(o,l)=>{JSON.stringify(o)!==JSON.stringify(l)&&H()},{immediate:!1,deep:!0});const Y=()=>{F.value=!0},H=()=>{const o=X();$.value=o,k.value=o>-1?o:0};function X(){if(i.selected==null)return-1;const o=B.value.map(p=>D(p)),l=o.filter(p=>p===D(i.selected));if(l.length>1){const p=l.map(I=>o.indexOf(I));for(let I=0;I<p.length;I++){const N=JSON.stringify(B.value[p[I]]),ee=JSON.stringify(i.selected);if(N===ee)return p[I]}return-1}return o.indexOf(D(i.selected))}const U=()=>{L.value||(f.value||(a.value=!1,H(),P(),f.value=!0),F.value=!1,T.value=!1)},P=()=>{const o=window?.innerWidth!=null&&window.innerWidth<640,l=screen?.width!=null&&screen.width<640,p=c.value.textInputRef;(o||l)&&s.value&&(G(),i.scrollTextInputToTopOnMobile&&p?.scrollIntoView({block:"start",inline:"center"}))},R=e.ref(!0);let j=setTimeout(()=>{},0);function G(){const o=c.value.textInputRef;if(!o)return;R.value=!1;let l=null;const p=()=>{l&&clearInterval(l),clearTimeout(j),setTimeout(()=>{R.value=!0},100)};j=setTimeout(p,5e3),l=setInterval(()=>{(f.value===!1||o?.scrollTop===0&&document.readyState==="complete")&&p()},100)}const J=()=>{s?.value==!0?c.value.focusInput():h?.value?.focusInput&&h?.value?.focusInput()};async function u(){typeof i.options=="function"?await x(M.value?M.value:void 0,!0):(V(i.options),n.value=m.value.length),y()}r({initializeOptions:u,getLabel:D});function y(){X()==-1&&m.value&&!!m.value[0]&&E(m.value[0])}async function x(o,l=!0){L.value=l;const p=async()=>i.options(i.maxListOptions,o||""),I=N=>{(!N||!("data"in N))&&z(),V(N.data),Ce(N?.data?.length??0).then(()=>{L.value=!1})};await v.resetAndExecute(p,I)}function V(o){Array.isArray(o)||z(),o.length>0&&typeof o[0]=="object"&&Te(o),m.value=o}function Te(o){(!i.objectLabelKeyName||i.objectLabelKeyName.length===0)&&q();const l=i.objectLabelKeyName;for(let p=0;p<o.length;p++)(typeof o[p]!="object"||!(l in o[p]))&&q()}async function Ce(o){const l=async()=>i.options(1,""),p=I=>{(!I||!("totalNum"in I))&&Z(),n.value=I.totalNum??o};await v.resetAndExecute(l,p)}const se=()=>c?.value?.textInputRef?.getElementsByTagName("li")[k.value]??null,De=o=>{f.value==!1?U():o&&Oe(o)},Oe=o=>{const l=o.key||o.code;(l==="Tab"||l==="Escape")&&A(),l==="ArrowDown"&&Be(o),l==="ArrowUp"&&Ee(o),(l==="Enter"||l===" ")&&Me(),o.preventDefault(),o.stopPropagation()},Me=()=>{B.value.length>0?(a.value=!0,E(B.value[k.value])):A()},Be=o=>{T.value=!0,k.value<B.value.length-1&&(o.preventDefault(),F.value=!1,k.value++,se()?.focus())},Ee=o=>{T.value=!0,k.value>0&&(o.preventDefault(),F.value=!1,k.value--,se()?.focus())},_={openList:U,unfocus:o=>{if(f?.value===!1)return;M.value.length>0&&(a.value=!0);const l=g?.value?.listContainerRef,p=c?.value?.textInputRef,I=o?.relatedTarget&&p?.isEqualNode(o?.relatedTarget),N=o?.relatedTarget&&l&&l.contains(o?.relatedTarget),ee=o?.relatedTarget&&l&&l.isEqualNode(o?.relatedTarget);if(!(N||I)){if(ee){J();return}A()}},press:De,mouseOverList:Y,getLabel:D,updatedSelected:E,focusInput:J,closeList:A};return(o,l)=>(e.openBlock(),e.createElementBlock("div",{style:{position:"relative"},class:e.normalizeClass(o.$attrs.class)},[e.createVNode(ne,{ref_key:"itemListRef",ref:g,"show-drop-down":f.value,filteredListItems:B.value,mouseHoveringOnList:F.value,focusedIndex:O.value,selectedIndex:$.value,"max-list-height-p-x":t.maxListHeightPX,"list-animation-duration-ms":t.listAnimationDurationMs,"parent-methods":_,blockListChange:a.value,"onUpdate:blockListChange":l[1]||(l[1]=p=>a.value=p),"total-options-count":n.value,onReverseDropDownList:l[2]||(l[2]=p=>w.value=p),enableScrollClose:R.value},{default:e.withCtx(()=>[e.createVNode(ie,{ref_key:"dropDownButtonInput",ref:h,"parent-methods":_,"show-drop-down":f.value,"enable-text-filter":s.value,"custom-icon":t.customIcon,"reverse-drop-down-list":w.value},{default:e.withCtx(()=>[e.createVNode(te,{ref_key:"dropDownTextInput",ref:c,"enable-text-filter":s.value,"show-drop-down":f.value,placeholder:Q.value,"enable-button-click":T.value,"parent-methods":_,"onUpdate:query":l[0]||(l[0]=p=>M.value=p)},null,8,["enable-text-filter","show-drop-down","placeholder","enable-button-click"])]),_:1},8,["show-drop-down","enable-text-filter","custom-icon","reverse-drop-down-list"])]),_:1},8,["show-drop-down","filteredListItems","mouseHoveringOnList","focusedIndex","selectedIndex","max-list-height-p-x","list-animation-duration-ms","blockListChange","total-options-count","enableScrollClose"])],2))}}),[["__scopeId","data-v-cc38ced5"]])});
|
|
3
3
|
//# sourceMappingURL=super-list.umd.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"super-list.umd.cjs","sources":["../src/DropDownLibrary.ts","../src/ListInputComponents/ListTextInput.vue","../src/ListInputComponents/default-tick.vue","../src/ListInputComponents/ListItem.vue","../src/ListInputComponents/ItemList.vue","../src/ListInputComponents/default-arrow.vue","../src/ListInputComponents/ListButton.vue","../src/super-list.vue"],"sourcesContent":["export interface DocumentViewChangeListener {\n targetNode: HTMLElement\n observe(): void\n unobserve(): void\n pauseMutationObserver(): void\n unpauseMutationObserver(): void\n}\n\nexport class DocumentViewChangeListener implements DocumentViewChangeListener {\n private readonly eventsTypes: string[] = ['resize', 'load', 'scroll', 'wheel', 'touchmove']\n private readonly config: MutationObserverInit = {\n attributes: true,\n childList: true,\n subtree: true\n }\n private mutationObserver: MutationObserver\n private callbackFunction: EventListenerOrEventListenerObject\n\n constructor(targetFunction: Function, targetNode: any = document.body) {\n this.targetNode = targetNode\n this.callbackFunction = ((event: any) =>\n targetFunction(event)) as EventListenerOrEventListenerObject\n this.mutationObserver = new MutationObserver((() => targetFunction()) as MutationCallback)\n }\n\n public observe(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n for (const eventType of this.eventsTypes) this.addListener(eventType)\n this.addResizeListener()\n this.addTransitionEndListener()\n }\n\n pauseMutationObserver(): void {\n this.mutationObserver.disconnect()\n }\n\n unpauseMutationObserver(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n }\n\n public unobserve(): void {\n this.mutationObserver.disconnect()\n for (const eventType of this.eventsTypes) this.removeListener(eventType)\n this.removeResizeListener()\n this.removeTransitionEndListener()\n }\n\n private addListener(eventType: string): void {\n document.addEventListener(eventType, this.callbackFunction, true)\n }\n\n private removeListener(eventType: string): void {\n document.removeEventListener(eventType, this.callbackFunction, true)\n }\n\n private addTransitionEndListener(): void {\n this.targetNode.addEventListener('transitionend', this.callbackFunction)\n }\n\n private removeTransitionEndListener(): void {\n this.targetNode.removeEventListener('transitionend', this.callbackFunction)\n }\n\n private addResizeListener(): void {\n window.addEventListener('resize', this.callbackFunction)\n }\n\n private removeResizeListener(): void {\n window.removeEventListener('resize', this.callbackFunction)\n }\n}\n\nexport function getLabelString(\n value: string | number | object | null | undefined,\n customLabelGetFunction: Function | null | undefined,\n objectLabelKeyName: string | null,\n enumKeyToLabelObjectArray?: EnumType[]\n): string {\n if (customLabelGetFunction != null) return customLabelGetFunction(value)\n if (value == null) return ''\n if (typeof value === 'object') return value[objectLabelKeyName as keyof typeof value]\n if (enumKeyToLabelObjectArray) return getEnumLabel(value, enumKeyToLabelObjectArray)\n return '' + value\n}\n\nfunction getEnumLabel(value: string | number, enumKeyArray: EnumType[]): string {\n return (enumKeyArray.find((eT: EnumType): boolean => eT.type === value)?.label ?? '') as string\n}\n\nexport type ListRequest = (maxNumItems: number, stringFilter?: string) => Promise<DataSet<any>>\n\nexport type EnumType = { type: string; label: string }\n\nexport type DataSet<T> = { data: T[]; totalNum: number; modelName?: string }\n\nexport interface AbortablePromise {\n abortController: AbortController\n func: Function\n then: Function\n}\n\nexport class AbortablePromise implements AbortablePromise {\n constructor() {\n this.abortController = new AbortController()\n this.func = (): void => {}\n this.then = (): void => {}\n }\n\n async abortablePromise(signal: AbortSignal, asyncFunc: Function, then: Function): Promise<any> {\n const response = await asyncFunc()\n if (signal.aborted) return\n return then(response)\n }\n\n setFunc(func: Function): void {\n this.func = func\n }\n\n setThen(then: Function): void {\n this.then = then\n }\n\n execute(): Promise<any> {\n return this.abortablePromise(this.abortController.signal, this.func, this.then)\n }\n\n abort(reason?: string): void {\n this.abortController.abort(reason || 'Aborted By Controller.')\n this.abortController = new AbortController()\n }\n\n resetAndExecute(func: Function, then: Function): Promise<any> {\n this.abort('New Request From Controller.')\n this.setFunc(func)\n this.setThen(then)\n return this.execute()\n }\n}\n","<template>\n <form @submit.prevent style=\"display: contents !important;\">\n <!-- Forces virtual keyboard to display return/enter key when list exists in external form -->\n <input\n ref=\"textInputRef\"\n :tabindex=\"enableTextFilter ? 0 : -1\"\n @keydown.enter=\"parentMethods.press($event)\"\n @keydown.space=\"parentMethods.press()\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusin=\"focusInHandler($event)\"\n @focusout=\"focusOutHandler($event)\"\n @input=\"updateQuery($event as InputEvent)\"\n @change=\"updateQuery($event as InputEvent)\"\n @paste=\"updateQuery($event as ClipboardEvent)\"\n type=\"text\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n :placeholder=\"placeholder\"\n :size=\"textInputSize\"\n :class=\"[\n pointerEventsClass,\n textInputColourClass,\n { 'text-filter-disabled': !enableTextFilter }\n ]\"\n class=\"list-filter-text-input\"\n />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType, ref } from 'vue'\n\nconst emit = defineEmits({\n 'update:selected': null,\n 'update:query': null,\n 'update:press': null\n})\n\nconst props = defineProps({\n enableTextFilter: {\n type: Boolean as PropType<boolean | null>,\n required: true\n },\n placeholder: {\n type: String as PropType<string | undefined>,\n default: undefined\n },\n enableButtonClick: {\n type: Boolean as PropType<boolean | null>,\n default: true\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n }\n})\nconst textInputRef = ref(null)\n\nfunction focusInHandler(e: FocusEvent) {\n if ('sourceCapabilities' in e && e.sourceCapabilities == null) props.parentMethods.closeList()\n else props.parentMethods.openList()\n}\n\nfunction focusOutHandler(event: FocusEvent) {\n props.parentMethods.unfocus(event)\n}\n\nlet lastQuery: string = ''\n\nfunction updateQuery(event: any) {\n if (event?.target?.value != undefined && event?.target?.value !== lastQuery) emit('update:query', event.target.value)\n lastQuery = event?.target?.value ?? ''\n}\n\nconst textInputSize = computed(() => {\n const refLength: number = textInputRef?.value ? (textInputRef.value as string).length : 0\n const placeHolderLength: number = props.placeholder?.length || 0\n return refLength > 0 ? refLength : placeHolderLength > 0 ? placeHolderLength : 5\n})\n\nconst pointerEventsClass = computed(() => {\n const enable: boolean = props.enableButtonClick === true && props.enableTextFilter === true\n return enable ? '' : 'click-through'\n})\n\nconst textInputColourClass = computed(() => {\n const dark: boolean = (props.showDropDown && !props.enableTextFilter) || !props.showDropDown\n return dark ? 'dark-placeholder-text' : 'light-placeholder-text'\n})\n\nfunction blurInput() {\n if (textInputRef?.value) {\n const input: HTMLInputElement = textInputRef.value\n input.blur()\n input.value = ''\n }\n}\n\nfunction focusInput() {\n if (textInputRef?.value) (textInputRef.value as HTMLInputElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, textInputRef })\n</script>\n\n<style scoped>\n.list-filter-text-input {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n text-align: center;\n padding: 0.125rem 2rem 0.125rem 0.5rem;\n width: 100%;\n height: 100%;\n margin: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n background-color: transparent;\n border: 0 none;\n pointer-events: auto;\n cursor: text;\n}\n\n.list-filter-text-input:focus,\n.list-filter-text-input:focus-visible,\n.list-filter-text-input:active {\n text-align: left;\n}\n\n.click-through {\n pointer-events: none;\n}\n\n.dark-placeholder-text::placeholder {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n}\n\n.light-placeholder-text::placeholder {\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.text-filter-disabled {\n background-color: transparent;\n border: none;\n outline: none;\n box-shadow: none;\n filter: none;\n}\n\n@media (min-width: 640px) {\n .list-filter-text-input {\n font-size: 0.875rem;\n line-height: 1.5rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 -16 16 17\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z\"\n />\n </svg>\n</template>\n","<template>\n <li\n v-for=\"(listItem, index) in filteredListItems\"\n :key=\"index\"\n ref=\"items\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n tabindex=\"-1\"\n @mousedown.left=\"parentMethods.updatedSelected(listItem)\"\n :class=\"[\n { 'list-option-selected': selectedIndex === index },\n {\n 'list-option-active':\n filteredListItems.length === 1 || (focusedIndex === index && !mouseHoveringOnList)\n },\n 'list-option'\n ]\"\n >\n <span class=\"list-item-span\">{{ parentMethods.getLabel(listItem) }}</span>\n <default-tick v-if=\"selectedIndex === index\" class=\"list-item-icon\" aria-hidden=\"true\" />\n </li>\n <li\n v-if=\"filteredListItems.length === 0\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">No Items To Display.</span>\n </li>\n <li\n v-if=\"totalOptionsCount && totalOptionsCount > (filteredListItems?.length || 0)\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">\n +{{ totalOptionsCount - filteredListItems?.length || 0 }} More Items...</span\n >\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type ShallowRef, useTemplateRef, watch } from 'vue'\nimport DefaultTick from './default-tick.vue'\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n listElementOpenAndVisible: {\n type: Boolean,\n default: false\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n default: false\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n }\n})\ntype HTMLLIElementOrArray = HTMLLIElement | HTMLLIElement[] | null\nconst iRefs: Readonly<ShallowRef<HTMLLIElementOrArray>> = useTemplateRef('items')\n\nconst focusedLi = computed((): HTMLElement | null => {\n if (!iRefs?.value) return null\n const refs: Array<HTMLLIElement | null> = Array.isArray(iRefs.value) ? iRefs.value : [iRefs.value]\n const focused = refs[props.focusedIndex]\n if (!focused) return null\n const isObject: boolean = typeof focused == 'object'\n const hasScrollIntoView: boolean = isObject && 'scrollIntoView' in focused\n const hasScrollFunc: boolean = hasScrollIntoView && typeof focused['scrollIntoView'] == 'function'\n return hasScrollFunc ? focused : null\n})\n\nwatch(\n () => props.showDropDown,\n () => scrollHighlightedListItemToTop()\n)\nwatch(\n () => props.listElementOpenAndVisible,\n () => scrollHighlightedListItemIntoView()\n)\nwatch(\n () => focusedLi.value,\n () => scrollHighlightedListItemIntoView()\n)\n\nfunction scrollHighlightedListItemToTop(): void {\n if (!props.showDropDown || !focusedLi?.value?.parentElement?.parentElement) return\n focusedLi.value.parentElement.parentElement.scrollTop = focusedLi.value.offsetTop\n}\n\nfunction scrollHighlightedListItemIntoView(): void {\n const li = focusedLi.value\n const liParent = li?.parentElement?.parentElement\n if (!props.showDropDown || !li || !liParent) return\n const aboveTop = li.offsetTop - liParent.scrollTop < 0\n const belowBottom = li.offsetTop + li.offsetHeight - liParent.scrollTop > liParent.clientHeight\n if (aboveTop) liParent.scrollTop = li.offsetTop\n if (belowBottom) liParent.scrollTop = li.offsetTop + li.clientHeight - liParent.clientHeight\n}\n</script>\n\n<style scoped>\n.list-option {\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n transition-property: font-weight, background-color, color, text-shadow;\n transition-duration: 500ms;\n transition-timing-function: ease;\n font-weight: 400;\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n}\n\n.list-option:focus-visible,\n.list-option > span:focus-visible {\n outline: none;\n}\n\n.list-option-selected {\n font-weight: 600;\n}\n\n.list-option-message {\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.list-option-active:hover,\n.list-option-active,\n.list-option-selected:hover,\n.list-option:hover {\n font-weight: 600;\n background-color: var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n color: var(--superlist-background-colour, white);\n text-shadow: 1px 1px 3px var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n transition-duration: 0s !important;\n}\n\n.list-item-icon {\n display: flex;\n height: 1rem;\n width: 1rem;\n position: absolute;\n right: 0.7rem;\n margin-top: -0.1rem;\n align-self: center;\n}\n\n.list-item-span {\n padding: 0.5rem 1.75rem 0.5rem 0.75rem;\n width: 100%;\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n</style>\n","<template>\n <div ref=\"dropDownButtonContainer\" class=\"super-list-button-container\">\n <slot></slot>\n </div>\n <div\n id=\"super-list-select-list\"\n ref=\"listContainerRef\"\n @mouseenter=\"parentMethods.mouseOverList()\"\n tabindex=\"-1\"\n :class=\"[\n 'select-list',\n reverseList ? 'list-reverse' : 'list-normal',\n { 'select-list-open': showDropDown },\n { 'no-scroll': noScroll && listElementOpenAndVisible },\n { 'select-list-fixed': listElementOpenAndVisible },\n { 'select-list-scrollable': !noScroll }\n ]\"\n @keydown.space=\"preventSpaceScrollingList($event)\"\n @mouseup.left=\"refocusTextInput($event)\"\n >\n <ul tabindex=\"-1\" ref=\"dropDownListUL\" class=\"list-content\">\n <list-item\n :filteredListItems=\"listItemsToDisplay\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"focusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :listElementOpenAndVisible=\"listElementOpenAndVisible\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :total-options-count=\"totalOptionsCount\"\n />\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n type ComputedRef,\n nextTick,\n onMounted,\n onUnmounted,\n type PropType,\n ref,\n watch\n} from 'vue'\nimport ListItem from '../ListInputComponents/ListItem.vue'\nimport { DocumentViewChangeListener } from '../DropDownLibrary'\n\nconst emit = defineEmits(['reverseDropDownList'])\n\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n maxListHeightPX: {\n type: Number,\n required: true\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n required: true\n },\n blockListChange: {\n type: Boolean,\n required: true\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n },\n enableScrollClose: {\n type: Boolean,\n default: true\n }\n})\n\nconst dropDownButtonContainer = ref<HTMLElement | null>(null)\nconst dropDownListUL = ref<HTMLElement | null>(null)\nconst listContainerRef = ref<HTMLElement | null>(null)\nconst offsetLeft = ref<number>(0)\nconst offsetTop = ref<number>(0)\nconst offsetBottom = ref<number>(0)\nconst listOffset = ref<number>(0)\nconst parentWidthPx = ref<string>('0px')\nconst listElementOpenAndVisible = ref<boolean>(false)\nconst listItemsToDisplay = ref<any[]>([])\nconst listHeightPx = ref<number>(0)\n\nconst reverseList = computed((): boolean => {\n if (!listElementOpenAndVisible.value || window?.innerHeight == null) return false\n return sufficientRoomAbove() && insufficientRoomBelow()\n})\n\nconst noScroll = computed((): boolean => {\n return props.maxListHeightPX >= listHeightPx.value\n})\n\nwatch(\n () => reverseList.value,\n (reverse: boolean) => emit('reverseDropDownList', reverse),\n { immediate: true }\n)\n\nconst parentXPx = computed((): string => offsetLeft.value + 'px')\nconst parentYPx = computed((): string => listOffset.value + 'px')\n\ndefineExpose({ listContainerRef })\n\nconst preventSpaceScrollingList = (event: any) => {\n if (event?.key && event.key === ' ') event.preventDefault()\n}\n\nconst refocusTextInput = (event: MouseEvent) => {\n const list = listContainerRef?.value as HTMLElement | null\n const target = event.target as HTMLElement | null\n if (!(list && target && list.contains(target)) || list.isEqualNode(target))\n props.parentMethods.focusInput()\n}\n\nfunction getListULHeight(): number {\n return dropDownListUL?.value ? (dropDownListUL?.value as HTMLElement).clientHeight : 0\n}\n\nfunction displayableListHeight(): number {\n if (!listElementOpenAndVisible.value || getListULHeight() === 0) return props.maxListHeightPX\n const ulHt: number = getListULHeight() === 0 ? props.maxListHeightPX : +getListULHeight()\n return props.maxListHeightPX && props.maxListHeightPX > ulHt ? ulHt : props.maxListHeightPX\n}\n\nfunction sufficientRoomAbove(): boolean {\n return offsetTop.value > displayableListHeight()\n}\n\nfunction insufficientRoomBelow(): boolean {\n return offsetBottom.value < displayableListHeight()\n}\n\nconst maxListHeightPx = computed((): string => (props.maxListHeightPX || 0) + 'px')\n\nconst animationDuration = computed((): string => (props.listAnimationDurationMs || 0) + 'ms')\n\nconst updatedListItemsToDisplay = computed((): any[] => {\n return !props.blockListChange ? props.filteredListItems : listItemsToDisplay.value\n})\n\nwatch(\n () => updatedListItemsToDisplay,\n (newVal: ComputedRef<any[]>) => {\n if (newVal) listItemsToDisplay.value = newVal.value\n },\n { immediate: false, deep: true }\n)\n\nlet unobserveTimeout = setTimeout(() => {}, 0)\n\nlet changeListener: DocumentViewChangeListener | null = null\n\nfunction openAndObserveChangeListener() {\n listHeightPx.value = getListULHeight()\n clearTimeout(unobserveTimeout)\n if (changeListener) changeListener.observe()\n listElementOpenAndVisible.value = true\n buttonRePositionCallback(undefined)\n}\n\nfunction closeAndUnobserveChangeListener() {\n clearTimeout(unobserveTimeout)\n unobserveTimeout = setTimeout(() => {\n if (!props.showDropDown) {\n listElementOpenAndVisible.value = false\n if (changeListener) changeListener.unobserve()\n }\n }, props.listAnimationDurationMs + 50)\n}\n\nwatch(\n () => props.showDropDown,\n (newV, oldV) => {\n if (newV !== oldV) {\n setOffsets()\n if (newV) openAndObserveChangeListener()\n else closeAndUnobserveChangeListener()\n }\n },\n { immediate: true }\n)\n\nfunction buttonRePositionCallback(e: any): void {\n setOffsets()\n nextTick(() => setOffsets())\n closeListOnScrollIfNecessary(e)\n}\n\nfunction closeListOnScrollIfNecessary(e: any) {\n if (!props.enableScrollClose || !props.showDropDown) return\n const notInitialized: boolean = typeof listContainerRef?.value?.contains !== 'function'\n if (notInitialized || e?.target?.nodeType == null || insideListOrOtherList(e)) return\n const isScrollEvent: boolean = ['scroll', 'wheel', 'touchmove'].includes(e?.type)\n if (props.showDropDown && isScrollEvent) props.parentMethods.closeList()\n}\n\nfunction insideListOrOtherList(e: any): boolean {\n const insideButton: boolean = !!dropDownButtonContainer.value?.contains(e?.target as Node)\n const insideList: boolean = !!listContainerRef.value?.contains(e.target as Node)\n const otherList: boolean = [e?.srcElement?.id, e?.target?.id].includes('super-list-select-list')\n return insideButton || insideList || otherList\n}\n\nfunction setOffsets(): void {\n setButtonOffset()\n setListOffset()\n}\n\nfunction setButtonOffset(): void {\n if (dropDownButtonContainer?.value == null) return\n const brc: DOMRect = (dropDownButtonContainer.value as HTMLElement).getBoundingClientRect()\n offsetTop.value = brc.top\n offsetBottom.value = window.innerHeight - brc.bottom\n parentWidthPx.value = brc.width + 'px'\n}\n\nfunction setListOffset(): void {\n /**\n * List container must be used when calculating position and not \"dropDownListUL\".\n * Position must be calculated as window viewport might not match list container viewport.\n **/\n if (dropDownButtonContainer?.value == null || listContainerRef?.value == null) return\n const brc: DOMRect = getButtonContainerElement().getBoundingClientRect()\n const slrc: DOMRect = (listContainerRef.value as HTMLElement).getBoundingClientRect()\n const currentListOffset: number = listOffset.value\n const currentOffsetLeft: number = offsetLeft.value\n if (reverseList.value) listOffset.value = currentListOffset - (brc.top - slrc.bottom)\n else listOffset.value = currentListOffset - (slrc.top - brc.bottom)\n offsetLeft.value = currentOffsetLeft - (slrc.left - brc.left)\n}\n\nfunction getButtonElement(): HTMLButtonElement {\n return (dropDownButtonContainer?.value as HTMLElement).getElementsByTagName('button')[0]\n}\n\nfunction getButtonContainerElement(): HTMLDivElement {\n return dropDownButtonContainer?.value as HTMLDivElement\n}\n\nonMounted(() => {\n changeListener = new DocumentViewChangeListener(buttonRePositionCallback, getButtonElement())\n setTimeout(() => buttonRePositionCallback(undefined), 250)\n})\n\nonUnmounted(() => {\n changeListener?.unobserve()\n})\n</script>\n\n<style scoped>\n.list-normal {\n top: var(--parent-y);\n}\n\n.list-reverse {\n bottom: var(--parent-y);\n}\n\n.select-list {\n --parent-width: v-bind(parentWidthPx);\n --parent-x: v-bind(parentXPx);\n --parent-y: v-bind(parentYPx);\n --duration: v-bind(animationDuration);\n --border-radius: var(--superlist-list-border-radius, 0);\n border-radius: var(--border-radius);\n width: var(--parent-width);\n min-width: var(--parent-width);\n left: var(--parent-x);\n display: block;\n transition-property: max-height, opacity, visibility, box-shadow;\n transition-duration: var(--duration, 300ms);\n transition-timing-function: cubic-bezier(0.1, 0.9, 0.35, 0.98);\n position: absolute;\n backdrop-filter: blur(3px);\n -webkit-backdrop-filter: blur(3px);\n background-color: rgb(255, 255, 255, 0.7);\n align-items: baseline;\n opacity: 0.25;\n z-index: 999;\n visibility: collapse;\n overflow: auto;\n max-height: 0;\n border: none !important; /* can't transition border */\n}\n\n.select-list:focus-visible,\n.select-list > ul:focus-visible,\n.super-list-button-container:focus-visible {\n outline: none;\n}\n\n.super-list-button-container {\n height: 100%;\n width: 100%;\n}\n\n.select-list.select-list-open {\n z-index: 999999;\n --max-height: v-bind(maxListHeightPx);\n max-height: var(--max-height, 0);\n}\n\n.select-list.no-scroll {\n overflow: hidden;\n}\n\n.select-list-fixed {\n position: fixed;\n opacity: 1;\n visibility: visible;\n}\n\n.list-content {\n --duration: v-bind(animationDuration);\n overflow: visible;\n margin: 0;\n padding: 0;\n border-style: none;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n list-style: none;\n max-width: 100%;\n}\n\n.select-list.select-list-scrollable {\n border-radius: var(--border-radius);\n}\n\n.select-list:not(.select-list-fixed) {\n transition: none;\n box-shadow: none !important;\n}\n\n@media (min-width: 640px) {\n .select-list.select-list-scrollable {\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n }\n .list-content {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 0 12 6\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z\"\n />\n </svg>\n</template>\n","<template>\n <button\n ref=\"buttonRef\"\n :tabindex=\"enableTextFilter ? -1 : 0\"\n @keydown.enter=\"enterHandler($event)\"\n @keydown.space=\"spaceHandler($event)\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @click=\"clickHandler()\"\n type=\"button\"\n :class=\"[{ 'click-through': props.enableTextFilter || props.showDropDown }]\"\n class=\"list-button\"\n >\n <slot></slot>\n <span class=\"list-button-icon-div\" :class=\"{ 'bigger-gap': props.showDropDown }\">\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': !props.showDropDown }]\"\n >\n <default-arrow aria-hidden=\"true\" />\n </span>\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': props.showDropDown }]\"\n >\n <default-arrow v-if=\"customIcon == null\" aria-hidden=\"true\" />\n </span>\n <span v-if=\"customIcon\" class=\"list-button-icon custom-icon\">\n <component aria-hidden=\"true\" :is=\"customIcon as object\" />\n </span>\n </span>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { type PropType, ref } from 'vue'\nimport DefaultArrow from './default-arrow.vue'\n\n// prettier-ignore\nconst props = defineProps({ // eslint-disable-line\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n enableTextFilter: {\n type: Boolean,\n required: true\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n reverseDropDownList: {\n type: Boolean,\n required: true\n }\n})\n\nconst buttonRef = ref(null)\n\nfunction clickHandler() {\n if (props.enableTextFilter) return\n else props.parentMethods.openList()\n}\n\nfunction enterHandler(event: KeyboardEvent) {\n if (props.enableTextFilter) {\n props.parentMethods.focusInput()\n event.stopPropagation()\n event.preventDefault()\n } else {\n props.parentMethods.press(event)\n }\n}\n\nfunction spaceHandler(event: KeyboardEvent) {\n if (!props.enableTextFilter) props.parentMethods.press(event)\n}\n\nfunction blurInput() {\n if (buttonRef?.value) {\n const button: HTMLButtonElement = buttonRef.value\n button.blur()\n }\n}\n\nfunction focusInput() {\n if (buttonRef?.value) (buttonRef.value as HTMLButtonElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, buttonRef })\n</script>\n\n<style scoped>\n.list-button-icon {\n display: flex;\n transition-timing-function: ease-in-out;\n transition-duration: 200ms;\n transition-property: transform;\n width: 0.6rem;\n transform: rotate(0deg);\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n justify-content: center;\n max-height: 18%;\n}\n\n.list-button-icon.custom-icon {\n max-height: 100%;\n width: 1.25rem;\n}\n\n.list-button-icon.rotate-180 {\n transform: rotate(180deg);\n}\n\n.list-button {\n position: relative;\n padding: 0;\n margin: 0;\n width: 100%;\n max-height: 100%;\n height: 100%;\n background-color: var(--superlist-background-colour, white);\n align-items: center;\n pointer-events: auto;\n cursor: pointer;\n}\n\n.list-button:focus,\n.list-button:focus-visible,\n.list-button:active {\n text-align: left;\n}\n\n.list-button-icon-div {\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-right: 0.75rem;\n max-height: 100%;\n height: 100%;\n gap: max(0.15rem, calc(6.25% + 0.075rem));\n transition: gap 200ms;\n}\n\n.list-button-icon-div.bigger-gap {\n gap: calc(40% - 0.25rem);\n}\n\n.click-through {\n pointer-events: none;\n}\n</style>\n","<template>\n <div style=\"position: relative\" :class=\"$attrs.class\">\n <item-list\n ref=\"itemListRef\"\n :show-drop-down=\"showDropDown\"\n :filteredListItems=\"filteredListItems\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"activeFocusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :max-list-height-p-x=\"maxListHeightPX\"\n :list-animation-duration-ms=\"listAnimationDurationMs\"\n :parent-methods=\"parentMethods\"\n v-model:blockListChange=\"blockListUpdates\"\n :total-options-count=\"totalOptionsCount\"\n @reverseDropDownList=\"reverseDropDownList = $event\"\n :enableScrollClose=\"enableScrollClose\"\n >\n <list-button\n ref=\"dropDownButtonInput\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :enable-text-filter=\"enableTextFilter\"\n :custom-icon=\"customIcon\"\n :reverse-drop-down-list=\"reverseDropDownList\"\n >\n <text-input\n ref=\"dropDownTextInput\"\n :enable-text-filter=\"enableTextFilter\"\n :show-drop-down=\"showDropDown\"\n :placeholder=\"placeholder\"\n :enable-button-click=\"enableButtonClick\"\n :parent-methods=\"parentMethods\"\n @update:query=\"query = $event\"\n />\n </list-button>\n </item-list>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, type PropType, ref, watch } from 'vue'\nimport {\n getLabelString,\n AbortablePromise,\n type DataSet,\n type EnumType,\n type ListRequest\n} from './DropDownLibrary'\nimport TextInput from './ListInputComponents/ListTextInput.vue'\nimport ItemList from './ListInputComponents/ItemList.vue'\nimport ListButton from './ListInputComponents/ListButton.vue'\n\nconst emit = defineEmits({ 'update:selected': null })\nconst props = defineProps({\n selected: {\n type: [String, Number, Object, null, undefined] as PropType<\n string | number | object | null | undefined\n >\n },\n options: {\n type: [Function, Array<string | number | object>] as PropType<\n ListRequest | Array<string | number | object>\n >,\n required: true\n },\n maxListOptions: {\n type: Number as PropType<number>,\n default: 50\n },\n maxListHeightPX: {\n type: Number as PropType<number>,\n default: 200\n },\n tooltip: {\n type: String,\n required: false\n },\n objectLabelKeyName: {\n type: String as PropType<string | null>,\n default: ''\n },\n enumKeyToLabelObjectArray: {\n type: Object as PropType<EnumType[]>,\n default: undefined\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n default: 300\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n forceTextFilterVisibilityTo: {\n type: Boolean as PropType<boolean>,\n default: undefined\n },\n customPlaceHolderFunction: {\n type: Function as PropType<Function | null>,\n default: null\n },\n colour: {\n type: String as PropType<string>,\n default: 'black'\n },\n scrollTextInputToTopOnMobile: {\n type: Boolean as PropType<boolean>,\n default: true\n }\n})\n\nconst listOptions = ref([] as Array<string | number | object>)\n\nconst abortablePromise = new AbortablePromise()\n\nconst totalOptionsCount = ref(0)\n\nconst enableTextFilter = computed((): boolean => {\n if (props.forceTextFilterVisibilityTo != undefined) return props.forceTextFilterVisibilityTo\n return totalOptionsCount.value > props.maxListOptions\n})\n\nconst showDropDown = ref<boolean>(false)\n\nconst blockListUpdates = ref<boolean>(false)\n\nconst reverseDropDownList = ref<boolean>(false)\n\nconst enableButtonClick = ref(true)\n\nconst loadingData = ref(false)\nconst errorState = ref(false)\n\nconst itemListRef = ref(ItemList)\nconst dropDownTextInput = ref(TextInput)\nconst dropDownButtonInput = ref(ListButton)\n\nconst query = ref('')\n\nwatch(\n () => query.value,\n (newV, oldV) => {\n if (newV !== oldV && typeof props.options === 'function') loadData(newV)\n }\n)\n\nconst blurInputIfNecessary = () => {\n if (enableTextFilter.value) dropDownTextInput?.value?.blurInput()\n}\n\nconst closeList = () => {\n clearTimeout(blockScrollCloseTimeout)\n blurInputIfNecessary()\n query.value = ''\n showDropDown.value = false\n enableButtonClick.value = true\n}\n\nconst placeholder = computed((): string => {\n if (errorState?.value === true) return 'Error loading data'\n if (loadingData?.value === true) return 'Loading...'\n return getLabel(props.selected)\n})\n\nconst updatedSelected = (newValue: any) => {\n if (newValue) emit('update:selected', newValue)\n closeList()\n}\n\nconst getLabel = (value?: string | number | object | null): string => {\n return getLabelString(\n value,\n props.customPlaceHolderFunction,\n props.objectLabelKeyName,\n props.enumKeyToLabelObjectArray\n )\n}\n\nfunction invalidArgumentError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid options argument provided to ListInputComponent`)\n}\n\nfunction invalidResponseError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid response provided to ListInputComponent, no total count key found`)\n}\n\nfunction invalidListValueKeyError() {\n loadingData.value = true\n errorState.value = true\n throw new Error('Invalid objectLabelKeyName for provided Dropdown list value.')\n}\n\nonMounted(() => {\n if (typeof props.options !== 'function' && !Array.isArray(props.options)) invalidArgumentError()\n else initializeOptions()\n})\n\nconst mouseHoveringOnList = ref(false)\n\nconst selectedIndex = ref(0)\nconst focusedIndex = ref(0)\nconst activeFocusedIndex = ref(0)\n\nwatch(\n () => focusedIndex.value,\n (newV, oldV) => {\n if (newV != oldV && !blockListUpdates.value) {\n activeFocusedIndex.value = newV\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => blockListUpdates.value,\n (newV) => {\n if (!newV) {\n activeFocusedIndex.value = focusedIndex.value\n }\n },\n { immediate: true }\n)\n\nconst filteredListItems = computed(() => {\n // if is function, return listOptions variable which is set by function\n if (typeof props.options === 'function' && !Array.isArray(props.options)) return listOptions.value\n const qry = query.value\n const lo = listOptions.value\n // else, is array, return filtered array\n return qry === '' ? lo : lo.filter((v) => getLabel(v).toLowerCase().includes(qry.toLowerCase()))\n})\n\nwatch(\n () => filteredListItems.value,\n (newV, oldV) => {\n if (JSON.stringify(newV) !== JSON.stringify(oldV)) focusSelectedOrFirstListItem()\n },\n { immediate: false, deep: true }\n)\n\nconst mouseOverList = () => {\n mouseHoveringOnList.value = true\n}\n\nconst focusSelectedOrFirstListItem = () => {\n const existingIndex = getSelectedValueIndex()\n selectedIndex.value = existingIndex /* may not be in the filtered list, allowed to be -1 */\n focusedIndex.value = existingIndex > -1 ? existingIndex : 0 /* default to first value */\n}\n\nfunction getSelectedValueIndex() {\n if (props.selected == null) return -1\n const labelsArray = filteredListItems.value.map((v) => getLabel(v))\n const matchingLabelsArray = labelsArray.filter((v) => v === getLabel(props.selected))\n if (matchingLabelsArray.length > 1) {\n const matchingIndexes = matchingLabelsArray.map((v) => labelsArray.indexOf(v))\n for (let i = 0; i < matchingIndexes.length; i++) {\n const currentMatchingOptionString = JSON.stringify(\n filteredListItems.value[matchingIndexes[i]]\n )\n const selectedOptionString = JSON.stringify(props.selected)\n if (currentMatchingOptionString === selectedOptionString) return matchingIndexes[i]\n }\n return -1\n }\n return labelsArray.indexOf(getLabel(props.selected))\n}\n\nconst openList = () => {\n if (loadingData.value) return\n if (!showDropDown.value) {\n blockListUpdates.value = false\n focusSelectedOrFirstListItem()\n scrollMobileTextInputToTop()\n showDropDown.value = true\n }\n mouseHoveringOnList.value = false\n enableButtonClick.value = false\n}\n\nconst scrollMobileTextInputToTop = () => {\n const mobileWindow: boolean = window?.innerWidth != null && window.innerWidth < 640\n const mobileScreen: boolean = screen?.width != null && screen.width < 640\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if ((mobileWindow || mobileScreen) && enableTextFilter.value) {\n preventScrollClose()\n if (props.scrollTextInputToTopOnMobile)\n textInput?.scrollIntoView({ block: 'start', inline: 'center' })\n }\n}\n\nconst enableScrollClose = ref<boolean>(true)\nlet blockScrollCloseTimeout = setTimeout(() => {}, 0)\n\nfunction preventScrollClose() {\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if (!textInput) return\n enableScrollClose.value = false\n let preventingScrollCloseInterval: NodeJS.Timeout | null = null\n\n const clearAll = () => {\n if (preventingScrollCloseInterval) clearInterval(preventingScrollCloseInterval)\n clearTimeout(blockScrollCloseTimeout)\n setTimeout(() => {\n enableScrollClose.value = true\n }, 100)\n }\n\n blockScrollCloseTimeout = setTimeout(clearAll, 5000)\n\n preventingScrollCloseInterval = setInterval(() => {\n if (\n showDropDown.value === false ||\n (textInput?.scrollTop === 0 && document.readyState === 'complete')\n )\n clearAll()\n }, 100)\n}\n\nconst focusInput = () => {\n if (enableTextFilter?.value == true) dropDownTextInput.value.focusInput()\n else if (dropDownButtonInput?.value?.focusInput) dropDownButtonInput?.value?.focusInput()\n}\n\nasync function initializeOptions(): Promise<void> {\n if (typeof props.options === 'function') {\n await loadData(query.value ? query.value : undefined, true)\n } else {\n validateListOptions(props.options as Array<string | number | object>)\n totalOptionsCount.value = listOptions.value.length\n }\n initializeSelected()\n}\n\ndefineExpose({ initializeOptions, getLabel })\n\nfunction initializeSelected() {\n const invalidSelection = getSelectedValueIndex() == -1\n const existingOptionNotSelected = invalidSelection && listOptions.value && !!listOptions.value[0]\n if (existingOptionNotSelected) updatedSelected(listOptions.value[0])\n}\n\nasync function loadData(stringFilter?: string, disableOnLoad: boolean = true) {\n loadingData.value = disableOnLoad\n const func = async () => (props.options as Function)(props.maxListOptions, stringFilter || '')\n const next = (response: DataSet<any>) => {\n if (!response || !('data' in response)) invalidArgumentError()\n validateListOptions(response.data)\n getOptionsCount(response?.data?.length ?? 0).then(() => {\n loadingData.value = false\n })\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nfunction validateListOptions(optns: Array<string | number | object>) {\n if (!Array.isArray(optns)) invalidArgumentError()\n if (optns.length > 0 && typeof optns[0] === 'object') validateObjectList(optns as Array<object>)\n listOptions.value = optns as Array<string | number | object>\n}\n\nfunction validateObjectList(values: Array<object>) {\n if (!props.objectLabelKeyName || props.objectLabelKeyName.length === 0) invalidListValueKeyError()\n const key: string = props.objectLabelKeyName as string\n for (let i = 0; i < values.length; i++) {\n if (typeof values[i] !== 'object' || !(key in values[i])) invalidListValueKeyError()\n }\n}\n\nasync function getOptionsCount(dataLength: number): Promise<void> {\n const func = async () => (props.options as Function)(1, '')\n const next = (response: DataSet<any>) => {\n if (!response || !('totalNum' in response)) invalidResponseError()\n totalOptionsCount.value = response.totalNum ?? dataLength\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nconst getCurrentlyFocusedListItemElement = (): HTMLElement | null => {\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n return listInput?.getElementsByTagName('li')[focusedIndex.value] ?? null\n}\n\nconst press = (event?: any) => {\n if (showDropDown.value == false) {\n openList()\n } else if (event) {\n keypress(event)\n }\n}\n\nconst keypress = (event: any) => {\n const key: string = event.key || event.code\n if (key === 'Tab' || key === 'Escape') closeList()\n if (key === 'ArrowDown') down(event)\n if (key === 'ArrowUp') up(event)\n if (key === 'Enter' || key === ' ') updateSelectedFromTextQuery()\n event.preventDefault()\n event.stopPropagation()\n}\n\nconst updateSelectedFromTextQuery = () => {\n if (filteredListItems.value.length > 0) {\n blockListUpdates.value = true\n updatedSelected(filteredListItems.value[focusedIndex.value])\n } else {\n closeList()\n }\n}\n\nconst down = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value < filteredListItems.value.length - 1) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value++\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst up = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value > 0) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value--\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst unfocus = (event: any) => {\n if (showDropDown?.value === false) return\n if (query.value.length > 0) blockListUpdates.value = true\n const list: HTMLElement | null = itemListRef?.value?.listContainerRef as HTMLElement | null\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n const isListInput = event?.relatedTarget && listInput?.isEqualNode(event?.relatedTarget)\n const isList = event?.relatedTarget && list && list.contains(event?.relatedTarget)\n const isListItem = event?.relatedTarget && list && list.isEqualNode(event?.relatedTarget)\n if (isList || isListInput) return\n if (isListItem) {\n focusInput()\n return\n }\n closeList()\n}\n\nconst parentMethods = {\n openList: openList,\n unfocus: unfocus,\n press: press,\n mouseOverList: mouseOverList,\n getLabel: getLabel,\n updatedSelected: updatedSelected,\n focusInput: focusInput,\n closeList: closeList\n}\n</script>\n\n<style scoped>\n* {\n box-sizing: border-box;\n}\n</style>\n"],"names":["DocumentViewChangeListener","targetFunction","targetNode","event","eventType","getLabelString","value","customLabelGetFunction","objectLabelKeyName","enumKeyToLabelObjectArray","getEnumLabel","enumKeyArray","eT","AbortablePromise","signal","asyncFunc","then","response","func","reason","emit","__emit","props","__props","textInputRef","ref","focusInHandler","e","focusOutHandler","lastQuery","updateQuery","textInputSize","computed","refLength","placeHolderLength","pointerEventsClass","textInputColourClass","blurInput","input","focusInput","__expose","_createElementBlock","_createElementVNode","$event","_cache","_withKeys","_normalizeClass","_openBlock","_hoisted_1","iRefs","useTemplateRef","focusedLi","focused","watch","scrollHighlightedListItemToTop","scrollHighlightedListItemIntoView","li","liParent","aboveTop","belowBottom","_Fragment","_renderList","listItem","index","_withModifiers","_hoisted_2","_toDisplayString","_createBlock","DefaultTick","_hoisted_3","dropDownButtonContainer","dropDownListUL","listContainerRef","offsetLeft","offsetTop","offsetBottom","listOffset","parentWidthPx","listElementOpenAndVisible","listItemsToDisplay","listHeightPx","reverseList","sufficientRoomAbove","insufficientRoomBelow","noScroll","reverse","parentXPx","parentYPx","preventSpaceScrollingList","refocusTextInput","list","target","getListULHeight","displayableListHeight","ulHt","maxListHeightPx","animationDuration","updatedListItemsToDisplay","newVal","unobserveTimeout","changeListener","openAndObserveChangeListener","buttonRePositionCallback","closeAndUnobserveChangeListener","newV","oldV","setOffsets","nextTick","closeListOnScrollIfNecessary","insideListOrOtherList","isScrollEvent","insideButton","insideList","otherList","setButtonOffset","setListOffset","brc","getButtonContainerElement","slrc","currentListOffset","currentOffsetLeft","getButtonElement","onMounted","onUnmounted","_renderSlot","_ctx","_createVNode","ListItem","buttonRef","clickHandler","enterHandler","spaceHandler","DefaultArrow","_resolveDynamicComponent","listOptions","abortablePromise","totalOptionsCount","enableTextFilter","showDropDown","blockListUpdates","reverseDropDownList","enableButtonClick","loadingData","errorState","itemListRef","ItemList","dropDownTextInput","TextInput","dropDownButtonInput","ListButton","query","blurInputIfNecessary","closeList","blockScrollCloseTimeout","placeholder","getLabel","updatedSelected","newValue","invalidArgumentError","invalidResponseError","invalidListValueKeyError","initializeOptions","mouseHoveringOnList","selectedIndex","focusedIndex","activeFocusedIndex","filteredListItems","qry","lo","v","focusSelectedOrFirstListItem","mouseOverList","existingIndex","getSelectedValueIndex","labelsArray","matchingLabelsArray","matchingIndexes","i","currentMatchingOptionString","selectedOptionString","openList","scrollMobileTextInputToTop","mobileWindow","mobileScreen","textInput","preventScrollClose","enableScrollClose","preventingScrollCloseInterval","clearAll","loadData","validateListOptions","initializeSelected","stringFilter","disableOnLoad","next","getOptionsCount","optns","validateObjectList","values","key","dataLength","getCurrentlyFocusedListItemElement","press","keypress","down","up","updateSelectedFromTextQuery","parentMethods","listInput","isListInput","isList","isListItem","$attrs"],"mappings":";2CAQO,MAAMA,EAAiE,CAC3D,YAAwB,CAAC,SAAU,OAAQ,SAAU,QAAS,WAAW,EACzE,OAA+B,CAC9C,WAAY,GACZ,UAAW,GACX,QAAS,EACX,EACQ,iBACA,iBAER,YAAYC,EAA0BC,EAAkB,SAAS,KAAM,CACrE,KAAK,WAAaA,EAClB,KAAK,iBAAqBC,GACxBF,EAAeE,CAAK,EACtB,KAAK,iBAAmB,IAAI,iBAAkB,IAAMF,GAAqC,CAAA,CAGpF,SAAgB,CACrB,KAAK,iBAAiB,QAAQ,KAAK,WAAY,KAAK,MAAM,EAC1D,UAAWG,KAAa,KAAK,YAAa,KAAK,YAAYA,CAAS,EACpE,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,CAAA,CAGhC,uBAA8B,CAC5B,KAAK,iBAAiB,WAAW,CAAA,CAGnC,yBAAgC,CAC9B,KAAK,iBAAiB,QAAQ,KAAK,WAAY,KAAK,MAAM,CAAA,CAGrD,WAAkB,CACvB,KAAK,iBAAiB,WAAW,EACjC,UAAWA,KAAa,KAAK,YAAa,KAAK,eAAeA,CAAS,EACvE,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,CAAA,CAG3B,YAAYA,EAAyB,CAC3C,SAAS,iBAAiBA,EAAW,KAAK,iBAAkB,EAAI,CAAA,CAG1D,eAAeA,EAAyB,CAC9C,SAAS,oBAAoBA,EAAW,KAAK,iBAAkB,EAAI,CAAA,CAG7D,0BAAiC,CACvC,KAAK,WAAW,iBAAiB,gBAAiB,KAAK,gBAAgB,CAAA,CAGjE,6BAAoC,CAC1C,KAAK,WAAW,oBAAoB,gBAAiB,KAAK,gBAAgB,CAAA,CAGpE,mBAA0B,CACzB,OAAA,iBAAiB,SAAU,KAAK,gBAAgB,CAAA,CAGjD,sBAA6B,CAC5B,OAAA,oBAAoB,SAAU,KAAK,gBAAgB,CAAA,CAE9D,CAEO,SAASC,GACdC,EACAC,EACAC,EACAC,EACQ,CACR,OAAIF,GAA0B,KAAaA,EAAuBD,CAAK,EACnEA,GAAS,KAAa,GACtB,OAAOA,GAAU,SAAiBA,EAAME,CAAwC,EAChFC,EAAkCC,GAAaJ,EAAOG,CAAyB,EAC5E,GAAKH,CACd,CAEA,SAASI,GAAaJ,EAAwBK,EAAkC,CACtE,OAAAA,EAAa,KAAMC,GAA0BA,EAAG,OAASN,CAAK,GAAG,OAAS,EACpF,CAcO,MAAMO,EAA6C,CACxD,aAAc,CACP,KAAA,gBAAkB,IAAI,gBAC3B,KAAK,KAAO,IAAY,CAAC,EACzB,KAAK,KAAO,IAAY,CAAC,CAAA,CAG3B,MAAM,iBAAiBC,EAAqBC,EAAqBC,EAA8B,CACvF,MAAAC,EAAW,MAAMF,EAAU,EACjC,GAAI,CAAAD,EAAO,QACX,OAAOE,EAAKC,CAAQ,CAAA,CAGtB,QAAQC,EAAsB,CAC5B,KAAK,KAAOA,CAAA,CAGd,QAAQF,EAAsB,CAC5B,KAAK,KAAOA,CAAA,CAGd,SAAwB,CACf,OAAA,KAAK,iBAAiB,KAAK,gBAAgB,OAAQ,KAAK,KAAM,KAAK,IAAI,CAAA,CAGhF,MAAMG,EAAuB,CACtB,KAAA,gBAAgB,MAAMA,GAAU,wBAAwB,EACxD,KAAA,gBAAkB,IAAI,eAAgB,CAG7C,gBAAgBD,EAAgBF,EAA8B,CAC5D,YAAK,MAAM,8BAA8B,EACzC,KAAK,QAAQE,CAAI,EACjB,KAAK,QAAQF,CAAI,EACV,KAAK,QAAQ,CAAA,CAExB,oZCvGA,MAAMI,EAAOC,EAMPC,EAAQC,EAsBRC,EAAeC,MAAI,IAAI,EAE7B,SAASC,EAAeC,EAAe,CACjC,uBAAwBA,GAAKA,EAAE,oBAAsB,KAAML,EAAM,cAAc,UAAU,EACxFA,EAAM,cAAc,SAAS,CAAA,CAGpC,SAASM,EAAgBzB,EAAmB,CACpCmB,EAAA,cAAc,QAAQnB,CAAK,CAAA,CAGnC,IAAI0B,EAAoB,GAExB,SAASC,EAAY3B,EAAY,CAC3BA,GAAO,QAAQ,OAAS,MAAaA,GAAO,QAAQ,QAAU0B,GAAgBT,EAAA,eAAgBjB,EAAM,OAAO,KAAK,EACxG0B,EAAA1B,GAAO,QAAQ,OAAS,EAAA,CAGhC,MAAA4B,EAAgBC,EAAAA,SAAS,IAAM,CACnC,MAAMC,EAAoBT,GAAc,MAASA,EAAa,MAAiB,OAAS,EAClFU,EAA4BZ,EAAM,aAAa,QAAU,EAC/D,OAAOW,EAAY,EAAIA,EAAYC,EAAoB,EAAIA,EAAoB,CAAA,CAChF,EAEKC,EAAqBH,EAAAA,SAAS,IACVV,EAAM,oBAAsB,IAAQA,EAAM,mBAAqB,GACvE,GAAK,eACtB,EAEKc,EAAuBJ,EAAAA,SAAS,IACbV,EAAM,cAAgB,CAACA,EAAM,kBAAqB,CAACA,EAAM,aAClE,wBAA0B,wBACzC,EAED,SAASe,GAAY,CACnB,GAAIb,GAAc,MAAO,CACvB,MAAMc,EAA0Bd,EAAa,MAC7Cc,EAAM,KAAK,EACXA,EAAM,MAAQ,EAAA,CAChB,CAGF,SAASC,GAAa,CAChBf,GAAc,OAAQA,EAAa,MAA2B,MAAM,CAAA,CAG1E,OAAAgB,EAAa,CAAE,UAAAH,EAAW,WAAAE,EAAY,aAAAf,CAAA,CAAc,wBA3GlDiB,EAAA,mBA2BO,OAAA,CA3BA,uCAAD,IAAe,CAAA,EAAA,CAAA,SAAA,CAAA,GAAC,MAAA,CAAqC,QAAA,qBAAA,CAAA,GAEzDC,EAAAA,mBAwBE,QAAA,SAvBI,eAAJ,IAAIlB,EACH,SAAUD,EAAgB,iBAAA,EAAA,GAC1B,UAAO,2BAAQA,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,GAC1BC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,SAAAF,GAAApB,EAAA,cAAc,MAAK,EAAA,CAAA,OAAA,CAAA,6BACrBA,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,KAAA,CAAA,6BAC3BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,IAAA,CAAA,6BACxBpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,MAAA,CAAA,IACxC,UAAOC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEjB,EAAeiB,CAAM,GAC9B,WAAQC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEf,EAAgBe,CAAM,GAChC,QAAKC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEb,EAAYa,CAAM,GACzB,SAAMC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEb,EAAYa,CAAM,GAC1B,QAAKC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEb,EAAYa,CAAM,GAC1B,KAAK,OACL,oBAAkB,OAClB,aAAa,MACZ,YAAapB,EAAW,YACxB,KAAMQ,EAAa,MACnB,MAAKe,iBAAA,CAAA,CAAYX,EAAkB,MAAUC,EAAoB,+BAAqCb,EAAgB,gBAAA,GAKjH,wBAAwB,CAAA,CAAA,iJCxBhC,MAAM,6BACN,KAAK,eACL,cAAY,OACZ,YAAU,OACV,QAAQ,gCALV,OAAAwB,EAAA,UAAA,EAAAN,EAAA,mBAWM,MAXNO,GAWMJ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAJJF,EAAAA,mBAGE,OAAA,CAFA,kBAAgB,qBAChB,EAAE,+nBCkDR,MAAMpB,EAAQC,EAmCR0B,EAAoDC,iBAAe,OAAO,EAE1EC,EAAYnB,EAAAA,SAAS,IAA0B,CAC/C,GAAA,CAACiB,GAAO,MAAc,OAAA,KAEpB,MAAAG,GADoC,MAAM,QAAQH,EAAM,KAAK,EAAIA,EAAM,MAAQ,CAACA,EAAM,KAAK,GAC5E3B,EAAM,YAAY,EACnC,OAAC8B,GACqB,OAAOA,GAAW,UACG,mBAAoBA,GACf,OAAOA,EAAQ,gBAAqB,WACjEA,EAJF,IAIY,CAClC,EAEDC,EAAA,MACE,IAAM/B,EAAM,aACZ,IAAMgC,EAA+B,CACvC,EACAD,EAAA,MACE,IAAM/B,EAAM,0BACZ,IAAMiC,EAAkC,CAC1C,EACAF,EAAA,MACE,IAAMF,EAAU,MAChB,IAAMI,EAAkC,CAC1C,EAEA,SAASD,GAAuC,CAC1C,CAAChC,EAAM,cAAgB,CAAC6B,GAAW,OAAO,eAAe,gBAC7DA,EAAU,MAAM,cAAc,cAAc,UAAYA,EAAU,MAAM,UAAA,CAG1E,SAASI,GAA0C,CACjD,MAAMC,EAAKL,EAAU,MACfM,EAAWD,GAAI,eAAe,cACpC,GAAI,CAAClC,EAAM,cAAgB,CAACkC,GAAM,CAACC,EAAU,OAC7C,MAAMC,EAAWF,EAAG,UAAYC,EAAS,UAAY,EAC/CE,EAAcH,EAAG,UAAYA,EAAG,aAAeC,EAAS,UAAYA,EAAS,aAC/EC,IAAmBD,EAAA,UAAYD,EAAG,WAClCG,IAAsBF,EAAA,UAAYD,EAAG,UAAYA,EAAG,aAAeC,EAAS,aAAA,oEApIhFV,EAAAA,UAAA,EAAA,EAAAN,EAuBK,mBAAAmB,WAtByB,KAAAC,EAAA,WAAAtC,EAAA,kBAApB,CAAAuC,EAAUC,mBADpBtB,EAAA,mBAuBK,KAAA,CArBF,IAAKsB,aACN,IAAI,QACH,QAAK,2BAAQxC,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,6BAC1BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,6BAC5BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,KAAA,CAAA,IACrC,UAAO,2BAAKpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,IAAA,CAAA,6BACxBpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,MAAA,CAAA,IACxC,WAAUC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAApB,EAAA,cAAc,QAAQoB,CAAM,GACvC,SAAS,KACR,YAAgBqB,EAAAA,cAAArB,GAAApB,EAAA,cAAc,gBAAgBuC,CAAQ,EAAA,CAAA,MAAA,CAAA,EACtD,MAAKhB,EAAAA,eAAA,CAAoC,CAAA,uBAAAvB,EAAA,gBAAkBwC,CAAK,wBAAoDxC,EAAA,kBAAkB,SAAM,GAAWA,iBAAiBwC,IAAUxC,EAAmB,uCAStMmB,qBAA0E,OAA1EuB,GAA0EC,kBAA1C3C,gBAAc,SAASuC,CAAQ,CAAA,EAAA,CAAA,EAC3CvC,EAAA,gBAAkBwC,iBAAtCI,EAAAA,YAAyFC,GAAA,OAA5C,MAAM,iBAAiB,cAAY,MAAA,gDAG1E7C,EAAA,kBAAkB,SAAM,iBADhCkB,qBAaK,KAAA,OAXF,QAAK,2BAAQlB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,6BAC1BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,6BAC5BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,KAAA,CAAA,IACrC,UAAO,2BAAKpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,IAAA,CAAA,+BACxBpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,MAAA,CAAA,IACxC,WAAUC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAD,GAAApB,EAAA,cAAc,QAAQoB,CAAM,GACtC,YAAgBC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAoB,gBAAArB,GAAApB,EAAA,cAAc,UAAUoB,CAAM,EAAA,CAAA,MAAA,CAAA,GAC/C,SAAS,KACT,MAAM,sCAEND,qBAAwD,OAAlD,CAAA,MAAM,kBAAiB,uBAAoB,EAAA,qCAG3CnB,EAAA,mBAAqBA,EAAA,mBAAqBA,EAAA,mBAAmB,QAAM,kBAD3EkB,EAAAA,mBAeK,KAAA,OAbF,QAAK,6BAAQlB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,+BAC1BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,OAAA,CAAA,+BAC5BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,KAAA,CAAA,IACrC,UAAO,6BAAKpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,IAAA,CAAA,+BACxBpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,MAAA,CAAA,IACxC,WAAUC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAD,GAAApB,EAAA,cAAc,QAAQoB,CAAM,GACtC,YAAgBC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAoB,gBAAArB,GAAApB,EAAA,cAAc,UAAUoB,CAAM,EAAA,CAAA,MAAA,CAAA,GAC/C,SAAS,KACT,MAAM,qBAAA,GAEND,EAAAA,mBAEC,OAFD2B,GAA6B,KAC1BH,EAAG,gBAAA3C,EAAiB,kBAAGA,EAAiB,mBAAE,QAAM,CAAA,EAAQ,iBAAc,CAAA,uwBCH7E,MAAMH,EAAOC,EAEPC,EAAQC,EA+CR+C,EAA0B7C,MAAwB,IAAI,EACtD8C,EAAiB9C,MAAwB,IAAI,EAC7C+C,EAAmB/C,MAAwB,IAAI,EAC/CgD,EAAahD,MAAY,CAAC,EAC1BiD,EAAYjD,MAAY,CAAC,EACzBkD,EAAelD,MAAY,CAAC,EAC5BmD,EAAanD,MAAY,CAAC,EAC1BoD,EAAgBpD,MAAY,KAAK,EACjCqD,EAA4BrD,MAAa,EAAK,EAC9CsD,EAAqBtD,EAAW,IAAA,EAAE,EAClCuD,EAAevD,MAAY,CAAC,EAE5BwD,EAAcjD,EAAAA,SAAS,IACvB,CAAC8C,EAA0B,OAAS,QAAQ,aAAe,KAAa,GACrEI,KAAyBC,EAAsB,CACvD,EAEKC,EAAWpD,EAAAA,SAAS,IACjBV,EAAM,iBAAmB0D,EAAa,KAC9C,EAED3B,EAAA,MACE,IAAM4B,EAAY,MACjBI,GAAqBjE,EAAK,sBAAuBiE,CAAO,EACzD,CAAE,UAAW,EAAK,CACpB,EAEA,MAAMC,EAAYtD,EAAA,SAAS,IAAcyC,EAAW,MAAQ,IAAI,EAC1Dc,EAAYvD,EAAA,SAAS,IAAc4C,EAAW,MAAQ,IAAI,EAEnDpC,EAAA,CAAE,iBAAAgC,EAAkB,EAE3B,MAAAgB,EAA6BrF,GAAe,CAC5CA,GAAO,KAAOA,EAAM,MAAQ,OAAW,eAAe,CAC5D,EAEMsF,EAAoBtF,GAAsB,CAC9C,MAAMuF,EAAOlB,GAAkB,MACzBmB,EAASxF,EAAM,QACjB,EAAEuF,GAAQC,GAAUD,EAAK,SAASC,CAAM,IAAMD,EAAK,YAAYC,CAAM,IACvErE,EAAM,cAAc,WAAW,CACnC,EAEA,SAASsE,GAA0B,CACjC,OAAOrB,GAAgB,OAASA,GAAgB,OAAsB,aAAe,CAAA,CAGvF,SAASsB,GAAgC,CACvC,GAAI,CAACf,EAA0B,OAASc,EAAsB,IAAA,SAAUtE,EAAM,gBAC9E,MAAMwE,EAAeF,MAAsB,EAAItE,EAAM,gBAAkB,CAACsE,EAAgB,EACxF,OAAOtE,EAAM,iBAAmBA,EAAM,gBAAkBwE,EAAOA,EAAOxE,EAAM,eAAA,CAG9E,SAAS4D,GAA+B,CAC/B,OAAAR,EAAU,MAAQmB,EAAsB,CAAA,CAGjD,SAASV,GAAiC,CACjC,OAAAR,EAAa,MAAQkB,EAAsB,CAAA,CAGpD,MAAME,EAAkB/D,EAAAA,SAAS,KAAeV,EAAM,iBAAmB,GAAK,IAAI,EAE5E0E,EAAoBhE,EAAAA,SAAS,KAAeV,EAAM,yBAA2B,GAAK,IAAI,EAEtF2E,EAA4BjE,EAAAA,SAAS,IACjCV,EAAM,gBAA4CyD,EAAmB,MAA7CzD,EAAM,iBACvC,EAED+B,EAAA,MACE,IAAM4C,EACLC,GAA+B,CAC1BA,IAA2BnB,EAAA,MAAQmB,EAAO,MAChD,EACA,CAAE,UAAW,GAAO,KAAM,EAAK,CACjC,EAEI,IAAAC,EAAmB,WAAW,IAAM,GAAI,CAAC,EAEzCC,EAAoD,KAExD,SAASC,GAA+B,CACtCrB,EAAa,MAAQY,EAAgB,EACrC,aAAaO,CAAgB,EACzBC,KAA+B,QAAQ,EAC3CtB,EAA0B,MAAQ,GAClCwB,EAAyB,MAAS,CAAA,CAGpC,SAASC,GAAkC,CACzC,aAAaJ,CAAgB,EAC7BA,EAAmB,WAAW,IAAM,CAC7B7E,EAAM,eACTwD,EAA0B,MAAQ,GAC9BsB,KAA+B,UAAU,EAC/C,EACC9E,EAAM,wBAA0B,EAAE,CAAA,CAGvC+B,EAAA,MACE,IAAM/B,EAAM,aACZ,CAACkF,EAAMC,IAAS,CACVD,IAASC,IACAC,EAAA,EACPF,EAAmCH,EAAA,EACFE,EAAA,EAEzC,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,SAASD,EAAyB3E,EAAc,CACnC+E,EAAA,EACFC,EAAA,SAAA,IAAMD,GAAY,EAC3BE,EAA6BjF,CAAC,CAAA,CAGhC,SAASiF,EAA6BjF,EAAQ,CAG5C,GAFI,CAACL,EAAM,mBAAqB,CAACA,EAAM,cACP,OAAOkD,GAAkB,OAAO,UAAa,YACvD7C,GAAG,QAAQ,UAAY,MAAQkF,EAAsBlF,CAAC,EAAG,OACzE,MAAAmF,EAAyB,CAAC,SAAU,QAAS,WAAW,EAAE,SAASnF,GAAG,IAAI,EAC5EL,EAAM,cAAgBwF,GAAexF,EAAM,cAAc,UAAU,CAAA,CAGzE,SAASuF,EAAsBlF,EAAiB,CAC9C,MAAMoF,EAAwB,CAAC,CAACzC,EAAwB,OAAO,SAAS3C,GAAG,MAAc,EACnFqF,EAAsB,CAAC,CAACxC,EAAiB,OAAO,SAAS7C,EAAE,MAAc,EACzEsF,EAAqB,CAACtF,GAAG,YAAY,GAAIA,GAAG,QAAQ,EAAE,EAAE,SAAS,wBAAwB,EAC/F,OAAOoF,GAAgBC,GAAcC,CAAA,CAGvC,SAASP,GAAmB,CACVQ,EAAA,EACFC,EAAA,CAAA,CAGhB,SAASD,GAAwB,CAC3B,GAAA5C,GAAyB,OAAS,KAAM,OACtC,MAAA8C,EAAgB9C,EAAwB,MAAsB,sBAAsB,EAC1FI,EAAU,MAAQ0C,EAAI,IACTzC,EAAA,MAAQ,OAAO,YAAcyC,EAAI,OAChCvC,EAAA,MAAQuC,EAAI,MAAQ,IAAA,CAGpC,SAASD,GAAsB,CAK7B,GAAI7C,GAAyB,OAAS,MAAQE,GAAkB,OAAS,KAAM,OACzE,MAAA4C,EAAeC,EAA0B,EAAE,sBAAsB,EACjEC,EAAiB9C,EAAiB,MAAsB,sBAAsB,EAC9E+C,EAA4B3C,EAAW,MACvC4C,EAA4B/C,EAAW,MACzCQ,EAAY,MAAOL,EAAW,MAAQ2C,GAAqBH,EAAI,IAAME,EAAK,QAC9D1C,EAAA,MAAQ2C,GAAqBD,EAAK,IAAMF,EAAI,QAC5D3C,EAAW,MAAQ+C,GAAqBF,EAAK,KAAOF,EAAI,KAAA,CAG1D,SAASK,GAAsC,CAC7C,OAAQnD,GAAyB,OAAsB,qBAAqB,QAAQ,EAAE,CAAC,CAAA,CAGzF,SAAS+C,GAA4C,CACnD,OAAO/C,GAAyB,KAAA,CAGlCoD,OAAAA,EAAAA,UAAU,IAAM,CACdtB,EAAiB,IAAIpG,GAA2BsG,EAA0BmB,EAAA,CAAkB,EAC5F,WAAW,IAAMnB,EAAyB,MAAS,EAAG,GAAG,CAAA,CAC1D,EAEDqB,EAAAA,YAAY,IAAM,CAChBvB,GAAgB,UAAU,CAAA,CAC3B,8DAhRC1D,EAAAA,mBAEM,MAAA,SAFG,0BAAJ,IAAI4B,EAA0B,MAAM,6BAAA,GACvCsD,aAAaC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,QAEfnF,EAAAA,mBA4BM,MAAA,CA3BJ,GAAG,iCACC,mBAAJ,IAAI8B,EACH,aAAU5B,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEpB,EAAa,cAAC,cAAa,GACxC,SAAS,KACR,MAAKuB,EAAAA,eAAA,eAA+BmC,EAAW,MAAA,eAAA,kCAA+D1D,EAAY,YAAA,EAAyB,CAAA,YAAA6D,EAAA,OAAYN,EAAyB,KAAA,uBAAiCA,EAAyB,KAAA,6BAAuCM,EAAQ,KAAA,CAAA,GAQjS,UAAOxC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,SAAAF,GAAQ6C,EAA0B7C,CAAM,EAAA,CAAA,OAAA,CAAA,GAC/C,UAAOC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAoB,gBAAArB,GAAO8C,EAAiB9C,CAAM,EAAA,CAAA,MAAA,CAAA,EAAA,GAEtCD,EAAAA,mBAWK,KAAA,CAXD,SAAS,aAAS,iBAAJ,IAAI6B,EAAiB,MAAM,cAAA,GAC3CuD,EAAAA,YASEC,GAAA,CARC,kBAAmBhD,EAAkB,MACrC,oBAAqBxD,EAAmB,oBACxC,aAAcA,EAAY,aAC1B,cAAeA,EAAa,cAC5B,0BAA2BuD,EAAyB,MACpD,iBAAgBvD,EAAa,cAC7B,iBAAgBA,EAAY,aAC5B,sBAAqBA,EAAiB,2PC3B3C,MAAM,6BACN,KAAK,eACL,cAAY,OACZ,YAAU,OACV,QAAQ,6BALV,OAAAwB,EAAA,UAAA,EAAAN,EAAA,mBAWM,MAXNO,GAWMJ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAJJF,EAAAA,mBAGE,OAAA,CAFA,kBAAgB,qBAChB,EAAE,ggBCiCR,MAAMpB,EAAQC,EAuBRyG,EAAYvG,MAAI,IAAI,EAE1B,SAASwG,GAAe,CAClB3G,EAAM,kBACLA,EAAM,cAAc,SAAS,CAAA,CAGpC,SAAS4G,EAAa/H,EAAsB,CACtCmB,EAAM,kBACRA,EAAM,cAAc,WAAW,EAC/BnB,EAAM,gBAAgB,EACtBA,EAAM,eAAe,GAEfmB,EAAA,cAAc,MAAMnB,CAAK,CACjC,CAGF,SAASgI,EAAahI,EAAsB,CACrCmB,EAAM,kBAAwBA,EAAA,cAAc,MAAMnB,CAAK,CAAA,CAG9D,SAASkC,GAAY,CACf2F,GAAW,OACqBA,EAAU,MACrC,KAAK,CACd,CAGF,SAASzF,GAAa,CAChByF,GAAW,OAAQA,EAAU,MAA4B,MAAM,CAAA,CAGrE,OAAAxF,EAAa,CAAE,UAAAH,EAAW,WAAAE,EAAY,UAAAyF,CAAA,CAAW,wBAjG/CvF,EAAA,mBAkCS,SAAA,SAjCH,YAAJ,IAAIuF,EACH,SAAUzG,EAAgB,iBAAA,GAAA,EAC1B,UAAO,CAAQqB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAA,SAAAF,GAAAuF,EAAavF,CAAM,EAAA,CAAA,OAAA,CAAA,GACnBC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAA,SAAAF,GAAAwF,EAAaxF,CAAM,EAAA,CAAA,OAAA,CAAA,6BACrBpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,KAAA,CAAA,6BAC3BpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,IAAA,CAAA,6BACxBpB,EAAa,cAAC,MAAMoB,CAAM,EAAA,CAAA,MAAA,CAAA,IACxC,WAAUC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAApB,EAAA,cAAc,QAAQoB,CAAM,GACtC,uBAAOsF,KACR,KAAK,SACJ,MAAKnF,EAAA,eAAA,CAAA,CAAA,CAAA,gBAAsBxB,EAAM,kBAAoBA,EAAM,aAAY,EAClE,aAAa,CAAA,CAAA,GAEnBsG,aAAaC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,EACbnF,EAAAA,mBAkBO,OAAA,CAlBD,MAAMI,iBAAA,CAAA,uBAA+C,CAAA,aAAAxB,EAAM,aAAY,CAAA,CAAA,GAElEC,EAAU,sDADnBkB,EAAAA,mBAMO,OAAA,OAJL,MAAMK,EAAAA,eAAA,CAAA,mBACoB,CAAA,CAAA,aAAA,CAAAxB,EAAM,YAAA,CAAY,CAAA,CAAA,CAAA,GAE5CwG,EAAAA,YAAoCM,GAAA,CAArB,cAAY,MAAM,CAAA,OAG1B7G,EAAU,sDADnBkB,EAAAA,mBAMO,OAAA,OAJL,MAAMK,EAAAA,eAAA,CAAA,mBACmB,CAAA,CAAA,aAAAxB,EAAM,YAAA,CAAY,CAAA,CAAA,CAAA,GAEtBC,EAAU,YAAA,oBAA/B4C,EAAAA,YAA8DiE,GAAA,OAArB,cAAY,MAAA,qCAE3C7G,EAAU,YAAtBwB,EAAA,UAAA,EAAAN,EAAAA,mBAEO,OAFPwB,GAEO,EADLlB,YAAA,EAAAoB,EAAA,YAA2DkE,0BAAxB9G,EAAA,UAAxB,EAAA,CAAA,cAAY,OAAM,EAAA,2yBCoBrC,MAAMH,EAAOC,EACPC,EAAQC,EA0DR+G,EAAc7G,EAAI,IAAA,EAAqC,EAEvD8G,EAAmB,IAAI1H,GAEvB2H,EAAoB/G,MAAI,CAAC,EAEzBgH,EAAmBzG,EAAAA,SAAS,IAC5BV,EAAM,6BAA+B,KAAkBA,EAAM,4BAC1DkH,EAAkB,MAAQlH,EAAM,cACxC,EAEKoH,EAAejH,MAAa,EAAK,EAEjCkH,EAAmBlH,MAAa,EAAK,EAErCmH,EAAsBnH,MAAa,EAAK,EAExCoH,EAAoBpH,MAAI,EAAI,EAE5BqH,EAAcrH,MAAI,EAAK,EACvBsH,EAAatH,MAAI,EAAK,EAEtBuH,EAAcvH,MAAIwH,EAAQ,EAC1BC,EAAoBzH,MAAI0H,EAAS,EACjCC,EAAsB3H,MAAI4H,EAAU,EAEpCC,EAAQ7H,MAAI,EAAE,EAEpB4B,EAAA,MACE,IAAMiG,EAAM,MACZ,CAAC9C,EAAMC,IAAS,CACVD,IAASC,GAAQ,OAAOnF,EAAM,SAAY,cAAqBkF,CAAI,CAAA,CAE3E,EAEA,MAAM+C,EAAuB,IAAM,CAC7Bd,EAAiB,OAA0BS,GAAA,OAAO,UAAU,CAClE,EAEMM,EAAY,IAAM,CACtB,aAAaC,CAAuB,EACfF,EAAA,EACrBD,EAAM,MAAQ,GACdZ,EAAa,MAAQ,GACrBG,EAAkB,MAAQ,EAC5B,EAEMa,EAAc1H,EAAAA,SAAS,IACvB+G,GAAY,QAAU,GAAa,qBACnCD,GAAa,QAAU,GAAa,aACjCa,EAASrI,EAAM,QAAQ,CAC/B,EAEKsI,EAAmBC,GAAkB,CACrCA,GAAezI,EAAA,kBAAmByI,CAAQ,EACpCL,EAAA,CACZ,EAEMG,EAAYrJ,GACTD,GACLC,EACAgB,EAAM,0BACNA,EAAM,mBACNA,EAAM,yBACR,EAGF,SAASwI,GAAuB,CAC9B,MAAAhB,EAAY,MAAQ,GACpBC,EAAW,MAAQ,GACb,IAAI,MAAM,yDAAyD,CAAA,CAG3E,SAASgB,GAAuB,CAC9B,MAAAjB,EAAY,MAAQ,GACpBC,EAAW,MAAQ,GACb,IAAI,MAAM,2EAA2E,CAAA,CAG7F,SAASiB,GAA2B,CAClC,MAAAlB,EAAY,MAAQ,GACpBC,EAAW,MAAQ,GACb,IAAI,MAAM,8DAA8D,CAAA,CAGhFrB,EAAAA,UAAU,IAAM,CACV,OAAOpG,EAAM,SAAY,YAAc,CAAC,MAAM,QAAQA,EAAM,OAAO,EAAwBwI,EAAA,EACxEG,EAAA,CAAA,CACxB,EAEK,MAAAC,EAAsBzI,MAAI,EAAK,EAE/B0I,EAAgB1I,MAAI,CAAC,EACrB2I,EAAe3I,MAAI,CAAC,EACpB4I,EAAqB5I,MAAI,CAAC,EAEhC4B,EAAA,MACE,IAAM+G,EAAa,MACnB,CAAC5D,EAAMC,IAAS,CACVD,GAAQC,GAAQ,CAACkC,EAAiB,QACpC0B,EAAmB,MAAQ7D,EAE/B,EACA,CAAE,UAAW,EAAK,CACpB,EAEAnD,EAAA,MACE,IAAMsF,EAAiB,MACtBnC,GAAS,CACHA,IACH6D,EAAmB,MAAQD,EAAa,MAE5C,EACA,CAAE,UAAW,EAAK,CACpB,EAEM,MAAAE,EAAoBtI,EAAAA,SAAS,IAAM,CAEnC,GAAA,OAAOV,EAAM,SAAY,YAAc,CAAC,MAAM,QAAQA,EAAM,OAAO,EAAG,OAAOgH,EAAY,MAC7F,MAAMiC,EAAMjB,EAAM,MACZkB,EAAKlC,EAAY,MAEvB,OAAOiC,IAAQ,GAAKC,EAAKA,EAAG,OAAQC,GAAMd,EAASc,CAAC,EAAE,YAAc,EAAA,SAASF,EAAI,YAAA,CAAa,CAAC,CAAA,CAChG,EAEDlH,EAAA,MACE,IAAMiH,EAAkB,MACxB,CAAC9D,EAAMC,IAAS,CACV,KAAK,UAAUD,CAAI,IAAM,KAAK,UAAUC,CAAI,GAAgCiE,EAAA,CAClF,EACA,CAAE,UAAW,GAAO,KAAM,EAAK,CACjC,EAEA,MAAMC,EAAgB,IAAM,CAC1BT,EAAoB,MAAQ,EAC9B,EAEMQ,EAA+B,IAAM,CACzC,MAAME,EAAgBC,EAAsB,EAC5CV,EAAc,MAAQS,EACTR,EAAA,MAAQQ,EAAgB,GAAKA,EAAgB,CAC5D,EAEA,SAASC,GAAwB,CAC3B,GAAAvJ,EAAM,UAAY,KAAa,MAAA,GAC7B,MAAAwJ,EAAcR,EAAkB,MAAM,IAAKG,GAAMd,EAASc,CAAC,CAAC,EAC5DM,EAAsBD,EAAY,OAAQL,GAAMA,IAAMd,EAASrI,EAAM,QAAQ,CAAC,EAChF,GAAAyJ,EAAoB,OAAS,EAAG,CAC5B,MAAAC,EAAkBD,EAAoB,IAAKN,GAAMK,EAAY,QAAQL,CAAC,CAAC,EAC7E,QAASQ,EAAI,EAAGA,EAAID,EAAgB,OAAQC,IAAK,CAC/C,MAAMC,EAA8B,KAAK,UACvCZ,EAAkB,MAAMU,EAAgBC,CAAC,CAAC,CAC5C,EACME,GAAuB,KAAK,UAAU7J,EAAM,QAAQ,EAC1D,GAAI4J,IAAgCC,GAA6B,OAAAH,EAAgBC,CAAC,CAAA,CAE7E,MAAA,EAAA,CAET,OAAOH,EAAY,QAAQnB,EAASrI,EAAM,QAAQ,CAAC,CAAA,CAGrD,MAAM8J,EAAW,IAAM,CACjBtC,EAAY,QACXJ,EAAa,QAChBC,EAAiB,MAAQ,GACI+B,EAAA,EACFW,EAAA,EAC3B3C,EAAa,MAAQ,IAEvBwB,EAAoB,MAAQ,GAC5BrB,EAAkB,MAAQ,GAC5B,EAEMwC,EAA6B,IAAM,CACvC,MAAMC,EAAwB,QAAQ,YAAc,MAAQ,OAAO,WAAa,IAC1EC,EAAwB,QAAQ,OAAS,MAAQ,OAAO,MAAQ,IAChEC,EAAgCtC,EAAkB,MAAM,cACzDoC,GAAgBC,IAAiB9C,EAAiB,QAClCgD,EAAA,EACfnK,EAAM,8BACRkK,GAAW,eAAe,CAAE,MAAO,QAAS,OAAQ,SAAU,EAEpE,EAEME,EAAoBjK,MAAa,EAAI,EACvC,IAAAgI,EAA0B,WAAW,IAAM,GAAI,CAAC,EAEpD,SAASgC,GAAqB,CACtB,MAAAD,EAAgCtC,EAAkB,MAAM,aAC9D,GAAI,CAACsC,EAAW,OAChBE,EAAkB,MAAQ,GAC1B,IAAIC,EAAuD,KAE3D,MAAMC,EAAW,IAAM,CACjBD,iBAA6CA,CAA6B,EAC9E,aAAalC,CAAuB,EACpC,WAAW,IAAM,CACfiC,EAAkB,MAAQ,IACzB,GAAG,CACR,EAE0BjC,EAAA,WAAWmC,EAAU,GAAI,EAEnDD,EAAgC,YAAY,IAAM,EAE9CjD,EAAa,QAAU,IACtB8C,GAAW,YAAc,GAAK,SAAS,aAAe,aAE9CI,EAAA,GACV,GAAG,CAAA,CAGR,MAAMrJ,EAAa,IAAM,CACnBkG,GAAkB,OAAS,GAAMS,EAAkB,MAAM,WAAW,EAC/DE,GAAqB,OAAO,YAAYA,GAAqB,OAAO,WAAW,CAC1F,EAEA,eAAea,GAAmC,CAC5C,OAAO3I,EAAM,SAAY,WAC3B,MAAMuK,EAASvC,EAAM,MAAQA,EAAM,MAAQ,OAAW,EAAI,GAE1DwC,EAAoBxK,EAAM,OAA0C,EAClDkH,EAAA,MAAQF,EAAY,MAAM,QAE3ByD,EAAA,CAAA,CAGRvJ,EAAA,CAAE,kBAAAyH,EAAmB,SAAAN,EAAU,EAE5C,SAASoC,GAAqB,CACHlB,KAA2B,IACEvC,EAAY,OAAS,CAAC,CAACA,EAAY,MAAM,CAAC,GACjEsB,EAAgBtB,EAAY,MAAM,CAAC,CAAC,CAAA,CAGtD,eAAAuD,EAASG,EAAuBC,EAAyB,GAAM,CAC5EnD,EAAY,MAAQmD,EACpB,MAAM/K,EAAO,SAAaI,EAAM,QAAqBA,EAAM,eAAgB0K,GAAgB,EAAE,EACvFE,EAAQjL,GAA2B,EACnC,CAACA,GAAY,EAAE,SAAUA,KAAgC6I,EAAA,EAC7DgC,EAAoB7K,EAAS,IAAI,EACjCkL,GAAgBlL,GAAU,MAAM,QAAU,CAAC,EAAE,KAAK,IAAM,CACtD6H,EAAY,MAAQ,EAAA,CACrB,CACH,EACM,MAAAP,EAAiB,gBAAgBrH,EAAMgL,CAAI,CAAA,CAGnD,SAASJ,EAAoBM,EAAwC,CAC9D,MAAM,QAAQA,CAAK,GAAwBtC,EAAA,EAC5CsC,EAAM,OAAS,GAAK,OAAOA,EAAM,CAAC,GAAM,UAAUC,GAAmBD,CAAsB,EAC/F9D,EAAY,MAAQ8D,CAAA,CAGtB,SAASC,GAAmBC,EAAuB,EAC7C,CAAChL,EAAM,oBAAsBA,EAAM,mBAAmB,SAAW,IAA4B0I,EAAA,EACjG,MAAMuC,EAAcjL,EAAM,mBAC1B,QAAS2J,EAAI,EAAGA,EAAIqB,EAAO,OAAQrB,KAC7B,OAAOqB,EAAOrB,CAAC,GAAM,UAAY,EAAEsB,KAAOD,EAAOrB,CAAC,KAA6BjB,EAAA,CACrF,CAGF,eAAemC,GAAgBK,EAAmC,CAChE,MAAMtL,EAAO,SAAaI,EAAM,QAAqB,EAAG,EAAE,EACpD4K,EAAQjL,GAA2B,EACnC,CAACA,GAAY,EAAE,aAAcA,KAAgC8I,EAAA,EAC/CvB,EAAA,MAAQvH,EAAS,UAAYuL,CACjD,EACM,MAAAjE,EAAiB,gBAAgBrH,EAAMgL,CAAI,CAAA,CAGnD,MAAMO,GAAqC,IACHvD,GAAmB,OAAO,cAC9C,qBAAqB,IAAI,EAAEkB,EAAa,KAAK,GAAK,KAGhEsC,GAASvM,GAAgB,CACzBuI,EAAa,OAAS,GACf0C,EAAA,EACAjL,GACTwM,GAASxM,CAAK,CAElB,EAEMwM,GAAYxM,GAAe,CACzB,MAAAoM,EAAcpM,EAAM,KAAOA,EAAM,MACnCoM,IAAQ,OAASA,IAAQ,WAAoB/C,EAAA,EAC7C+C,IAAQ,aAAaK,GAAKzM,CAAK,EAC/BoM,IAAQ,WAAWM,GAAG1M,CAAK,GAC3BoM,IAAQ,SAAWA,IAAQ,MAAiCO,GAAA,EAChE3M,EAAM,eAAe,EACrBA,EAAM,gBAAgB,CACxB,EAEM2M,GAA8B,IAAM,CACpCxC,EAAkB,MAAM,OAAS,GACnC3B,EAAiB,MAAQ,GACzBiB,EAAgBU,EAAkB,MAAMF,EAAa,KAAK,CAAC,GAEjDZ,EAAA,CAEd,EAEMoD,GAAQzM,GAAe,CAC3B0I,EAAkB,MAAQ,GACtBuB,EAAa,MAAQE,EAAkB,MAAM,OAAS,IACxDnK,EAAM,eAAe,EACrB+J,EAAoB,MAAQ,GACfE,EAAA,QACbqC,GAAA,GAAsC,MAAM,EAEhD,EAEMI,GAAM1M,GAAe,CACzB0I,EAAkB,MAAQ,GACtBuB,EAAa,MAAQ,IACvBjK,EAAM,eAAe,EACrB+J,EAAoB,MAAQ,GACfE,EAAA,QACbqC,GAAA,GAAsC,MAAM,EAEhD,EAkBMM,EAAgB,CACpB,SAAA3B,EACA,QAlBejL,GAAe,CAC1B,GAAAuI,GAAc,QAAU,GAAO,OAC/BY,EAAM,MAAM,OAAS,MAAoB,MAAQ,IAC/C,MAAA5D,EAA2BsD,GAAa,OAAO,iBAC/CgE,EAAgC9D,GAAmB,OAAO,aAC1D+D,EAAc9M,GAAO,eAAiB6M,GAAW,YAAY7M,GAAO,aAAa,EACjF+M,EAAS/M,GAAO,eAAiBuF,GAAQA,EAAK,SAASvF,GAAO,aAAa,EAC3EgN,GAAahN,GAAO,eAAiBuF,GAAQA,EAAK,YAAYvF,GAAO,aAAa,EACxF,GAAI,EAAA+M,GAAUD,GACd,IAAIE,GAAY,CACH5K,EAAA,EACX,MAAA,CAEQiH,EAAA,EACZ,EAKE,MAAAkD,GACA,cAAA/B,EACA,SAAAhB,EACA,gBAAAC,EACA,WAAArH,EACA,UAAAiH,CACF,8BA1cE/G,EAAA,mBAmCM,MAAA,CAnCD,MAAA,CAA0B,SAAA,UAAA,EAAE,MAAKK,EAAA,eAAEsK,EAAM,OAAC,KAAK,CAAA,GAClDtF,EAAAA,YAiCYmB,GAAA,SAhCN,cAAJ,IAAID,EACH,iBAAgBN,EAAY,MAC5B,kBAAmB4B,EAAiB,MACpC,oBAAqBJ,EAAmB,MACxC,aAAcG,EAAkB,MAChC,cAAeF,EAAa,MAC5B,sBAAqB5I,EAAe,gBACpC,6BAA4BA,EAAuB,wBACnD,iBAAgBwL,EACT,gBAAiBpE,EAAgB,gDAAhBA,EAAgB,MAAAhG,GACxC,sBAAqB6F,EAAiB,MACtC,sBAAmB5F,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAEiG,EAAmB,MAAGjG,GAC3C,kBAAmB+I,EAAiB,KAAA,qBAErC,IAiBc,CAjBd5D,EAAAA,YAiBcuB,GAAA,SAhBR,sBAAJ,IAAID,EACH,iBAAgB2D,EAChB,iBAAgBrE,EAAY,MAC5B,qBAAoBD,EAAgB,MACpC,cAAalH,EAAU,WACvB,yBAAwBqH,EAAmB,KAAA,qBAE5C,IAQE,CARFd,EAAAA,YAQEqB,GAAA,SAPI,oBAAJ,IAAID,EACH,qBAAoBT,EAAgB,MACpC,iBAAgBC,EAAY,MAC5B,YAAagB,EAAW,MACxB,sBAAqBb,EAAiB,MACtC,iBAAgBkE,EAChB,iBAAYnK,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,GAAE2G,EAAK,MAAG3G,EAAA"}
|
|
1
|
+
{"version":3,"file":"super-list.umd.cjs","sources":["../src/DropDownLibrary.ts","../src/ListInputComponents/ListTextInput.vue","../src/ListInputComponents/default-tick.vue","../src/ListInputComponents/ListItem.vue","../src/ListInputComponents/ItemList.vue","../src/ListInputComponents/default-arrow.vue","../src/ListInputComponents/ListButton.vue","../src/super-list.vue"],"sourcesContent":["export interface DocumentViewChangeListener {\n targetNode: HTMLElement\n observe(): void\n unobserve(): void\n pauseMutationObserver(): void\n unpauseMutationObserver(): void\n}\n\nexport class DocumentViewChangeListener implements DocumentViewChangeListener {\n private readonly eventsTypes: string[] = ['resize', 'load', 'scroll', 'wheel', 'touchmove']\n private readonly config: MutationObserverInit = {\n attributes: true,\n childList: true,\n subtree: true\n }\n private mutationObserver: MutationObserver\n private callbackFunction: EventListenerOrEventListenerObject\n\n constructor(targetFunction: Function, targetNode: any = document.body) {\n this.targetNode = targetNode\n this.callbackFunction = ((event: any) =>\n targetFunction(event)) as EventListenerOrEventListenerObject\n this.mutationObserver = new MutationObserver((() => targetFunction()) as MutationCallback)\n }\n\n public observe(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n for (const eventType of this.eventsTypes) this.addListener(eventType)\n this.addResizeListener()\n this.addTransitionEndListener()\n }\n\n pauseMutationObserver(): void {\n this.mutationObserver.disconnect()\n }\n\n unpauseMutationObserver(): void {\n this.mutationObserver.observe(this.targetNode, this.config)\n }\n\n public unobserve(): void {\n this.mutationObserver.disconnect()\n for (const eventType of this.eventsTypes) this.removeListener(eventType)\n this.removeResizeListener()\n this.removeTransitionEndListener()\n }\n\n private addListener(eventType: string): void {\n document.addEventListener(eventType, this.callbackFunction, true)\n }\n\n private removeListener(eventType: string): void {\n document.removeEventListener(eventType, this.callbackFunction, true)\n }\n\n private addTransitionEndListener(): void {\n this.targetNode.addEventListener('transitionend', this.callbackFunction)\n }\n\n private removeTransitionEndListener(): void {\n this.targetNode.removeEventListener('transitionend', this.callbackFunction)\n }\n\n private addResizeListener(): void {\n window.addEventListener('resize', this.callbackFunction)\n }\n\n private removeResizeListener(): void {\n window.removeEventListener('resize', this.callbackFunction)\n }\n}\n\nexport function getLabelString(\n value: string | number | object | null | undefined,\n customLabelGetFunction: Function | null | undefined,\n objectLabelKeyName: string | null,\n enumKeyToLabelObjectArray?: EnumType[]\n): string {\n if (customLabelGetFunction != null) return customLabelGetFunction(value)\n if (value == null) return ''\n if (typeof value === 'object') return value[objectLabelKeyName as keyof typeof value]\n if (enumKeyToLabelObjectArray) return getEnumLabel(value, enumKeyToLabelObjectArray)\n return '' + value\n}\n\nfunction getEnumLabel(value: string | number, enumKeyArray: EnumType[]): string {\n return (enumKeyArray.find((eT: EnumType): boolean => eT.type === value)?.label ?? '') as string\n}\n\nexport type ListRequest = (maxNumItems: number, stringFilter?: string) => Promise<DataSet<any>>\n\nexport type EnumType = { type: string; label: string }\n\nexport type DataSet<T> = { data: T[]; totalNum: number; modelName?: string }\n\nexport interface AbortablePromise {\n abortController: AbortController\n func: Function\n then: Function\n}\n\nexport class AbortablePromise implements AbortablePromise {\n constructor() {\n this.abortController = new AbortController()\n this.func = (): void => {}\n this.then = (): void => {}\n }\n\n async abortablePromise(signal: AbortSignal, asyncFunc: Function, then: Function): Promise<any> {\n const response = await asyncFunc()\n if (signal.aborted) return\n return then(response)\n }\n\n setFunc(func: Function): void {\n this.func = func\n }\n\n setThen(then: Function): void {\n this.then = then\n }\n\n execute(): Promise<any> {\n return this.abortablePromise(this.abortController.signal, this.func, this.then)\n }\n\n abort(reason?: string): void {\n this.abortController.abort(reason || 'Aborted By Controller.')\n this.abortController = new AbortController()\n }\n\n resetAndExecute(func: Function, then: Function): Promise<any> {\n this.abort('New Request From Controller.')\n this.setFunc(func)\n this.setThen(then)\n return this.execute()\n }\n}\n","<template>\n <form @submit.prevent style=\"display: contents !important\">\n <!-- Forces virtual keyboard to display return/enter key when list exists in external form -->\n <input\n ref=\"textInputRef\"\n :tabindex=\"enableTextFilter ? 0 : -1\"\n @keydown.enter=\"parentMethods.press($event)\"\n @keydown.space=\"parentMethods.press()\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusin=\"focusInHandler($event)\"\n @focusout=\"focusOutHandler($event)\"\n @input=\"updateQuery($event as InputEvent)\"\n @change=\"updateQuery($event as InputEvent)\"\n @paste=\"updateQuery($event as ClipboardEvent)\"\n type=\"text\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n :placeholder=\"placeholder\"\n :size=\"textInputSize\"\n :class=\"[\n pointerEventsClass,\n textInputColourClass,\n { 'text-filter-disabled': !enableTextFilter }\n ]\"\n class=\"list-filter-text-input\"\n />\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType, ref } from 'vue'\n\nconst emit = defineEmits({\n 'update:selected': null,\n 'update:query': null,\n 'update:press': null\n})\n\nconst props = defineProps({\n enableTextFilter: {\n type: Boolean as PropType<boolean | null>,\n required: true\n },\n placeholder: {\n type: String as PropType<string | undefined>,\n default: undefined\n },\n enableButtonClick: {\n type: Boolean as PropType<boolean | null>,\n default: true\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n }\n})\nconst textInputRef = ref(null)\n\nfunction focusInHandler(e: FocusEvent) {\n if ('sourceCapabilities' in e && e.sourceCapabilities == null) props.parentMethods.closeList()\n else props.parentMethods.openList()\n}\n\nfunction focusOutHandler(event: FocusEvent) {\n props.parentMethods.unfocus(event)\n}\n\nlet lastQuery: string = ''\n\nfunction updateQuery(event: any) {\n if (event?.target?.value != undefined && event?.target?.value !== lastQuery)\n emit('update:query', event.target.value)\n lastQuery = event?.target?.value ?? ''\n}\n\nconst textInputSize = computed(() => {\n const refLength: number = textInputRef?.value ? (textInputRef.value as string).length : 0\n const placeHolderLength: number = props.placeholder?.length || 0\n return refLength > 0 ? refLength : placeHolderLength > 0 ? placeHolderLength : 5\n})\n\nconst pointerEventsClass = computed(() => {\n const enable: boolean = props.enableButtonClick === true && props.enableTextFilter === true\n return enable ? '' : 'click-through'\n})\n\nconst textInputColourClass = computed(() => {\n const dark: boolean = (props.showDropDown && !props.enableTextFilter) || !props.showDropDown\n return dark ? 'dark-placeholder-text' : 'light-placeholder-text'\n})\n\nfunction blurInput() {\n if (textInputRef?.value) {\n const input: HTMLInputElement = textInputRef.value\n input.blur()\n input.value = ''\n }\n}\n\nfunction focusInput() {\n if (textInputRef?.value) (textInputRef.value as HTMLInputElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, textInputRef })\n</script>\n\n<style scoped>\n.list-filter-text-input {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n text-align: center;\n padding: 0.125rem 2rem 0.125rem 0.5rem;\n width: 100%;\n height: 100%;\n margin: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n background-color: transparent;\n border: 0 none;\n pointer-events: auto;\n cursor: text;\n}\n\n.list-filter-text-input:focus,\n.list-filter-text-input:focus-visible,\n.list-filter-text-input:active {\n text-align: left;\n}\n\n.click-through {\n pointer-events: none;\n}\n\n.dark-placeholder-text::placeholder {\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n}\n\n.light-placeholder-text::placeholder {\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.text-filter-disabled {\n background-color: transparent;\n border: none;\n outline: none;\n box-shadow: none;\n filter: none;\n}\n\n@media (min-width: 640px) {\n .list-filter-text-input {\n font-size: 0.875rem;\n line-height: 1.5rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 -16 16 17\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 -2.25 L 13.75 -14 A 0.5 0.5 90 0 1 15 -13 L 6.5 -0.5 A 2 1 90 0 1 5.5 -0.5 L 1 -6 A 0.5 0.5 90 0 1 2.25 -7 Z\"\n />\n </svg>\n</template>\n","<template>\n <li\n v-for=\"(listItem, index) in filteredListItems\"\n :key=\"index\"\n ref=\"items\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n tabindex=\"-1\"\n @mousedown.left=\"parentMethods.updatedSelected(listItem)\"\n :class=\"[\n { 'list-option-selected': selectedIndex === index },\n {\n 'list-option-active':\n filteredListItems.length === 1 || (focusedIndex === index && !mouseHoveringOnList)\n },\n 'list-option'\n ]\"\n >\n <span class=\"list-item-span\">{{ parentMethods.getLabel(listItem) }}</span>\n <default-tick v-if=\"selectedIndex === index\" class=\"list-item-icon\" aria-hidden=\"true\" />\n </li>\n <li\n v-if=\"filteredListItems.length === 0\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">No Items To Display.</span>\n </li>\n <li\n v-if=\"totalOptionsCount && totalOptionsCount > (filteredListItems?.length || 0)\"\n @keyup.enter=\"parentMethods.press($event)\"\n @keyup.space=\"parentMethods.press($event)\"\n @keyup.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @mousedown.left=\"parentMethods.closeList($event)\"\n tabindex=\"-1\"\n class=\"list-option-message\"\n >\n <span class=\"list-item-span\">\n +{{ totalOptionsCount - filteredListItems?.length || 0 }} More Items...</span\n >\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type ShallowRef, useTemplateRef, watch } from 'vue'\nimport DefaultTick from './default-tick.vue'\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n listElementOpenAndVisible: {\n type: Boolean,\n default: false\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n default: false\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n }\n})\ntype HTMLLIElementOrArray = HTMLLIElement | HTMLLIElement[] | null\nconst iRefs: Readonly<ShallowRef<HTMLLIElementOrArray>> = useTemplateRef('items')\n\nconst focusedLi = computed((): HTMLElement | null => {\n if (!iRefs?.value) return null\n const refs: Array<HTMLLIElement | null> = Array.isArray(iRefs.value) ? iRefs.value : [iRefs.value]\n const focused = refs[props.focusedIndex]\n if (!focused) return null\n const isObject: boolean = typeof focused == 'object'\n const hasScrollIntoView: boolean = isObject && 'scrollIntoView' in focused\n const hasScrollFunc: boolean = hasScrollIntoView && typeof focused['scrollIntoView'] == 'function'\n return hasScrollFunc ? focused : null\n})\n\nwatch(\n () => props.showDropDown,\n () => scrollHighlightedListItemToTop()\n)\nwatch(\n () => props.listElementOpenAndVisible,\n () => scrollHighlightedListItemIntoView()\n)\nwatch(\n () => focusedLi.value,\n () => scrollHighlightedListItemIntoView()\n)\n\nfunction scrollHighlightedListItemToTop(): void {\n if (!props.showDropDown || !focusedLi?.value?.parentElement?.parentElement) return\n focusedLi.value.parentElement.parentElement.scrollTop = focusedLi.value.offsetTop\n}\n\nfunction scrollHighlightedListItemIntoView(): void {\n const li = focusedLi.value\n const liParent = li?.parentElement?.parentElement\n if (!props.showDropDown || !li || !liParent) return\n const aboveTop = li.offsetTop - liParent.scrollTop < 0\n const belowBottom = li.offsetTop + li.offsetHeight - liParent.scrollTop > liParent.clientHeight\n if (aboveTop) liParent.scrollTop = li.offsetTop\n if (belowBottom) liParent.scrollTop = li.offsetTop + li.clientHeight - liParent.clientHeight\n}\n</script>\n\n<style scoped>\n.list-option {\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n transition-property: font-weight, background-color, color, text-shadow;\n transition-duration: 500ms;\n transition-timing-function: ease;\n font-weight: 400;\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n}\n\n.list-option:focus-visible,\n.list-option > span:focus-visible {\n outline: none;\n}\n\n.list-option-selected {\n font-weight: 600;\n}\n\n.list-option-message {\n text-shadow: 1px 1px 3px var(--superlist-background-colour, white);\n text-transform: capitalize;\n display: inline-flex;\n width: 100%;\n position: relative;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n color: var(--superlist-disabled-text-colour, rgb(120, 125, 130));\n}\n\n.list-option-active:hover,\n.list-option-active,\n.list-option-selected:hover,\n.list-option:hover {\n font-weight: 600;\n background-color: var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n color: var(--superlist-background-colour, white);\n text-shadow: 1px 1px 3px var(--superlist-theme-colour, rgb(77, 168, 11, 0.8));\n transition-duration: 0s !important;\n}\n\n.list-item-icon {\n display: flex;\n height: 1rem;\n width: 1rem;\n position: absolute;\n right: 0.7rem;\n margin-top: -0.1rem;\n align-self: center;\n}\n\n.list-item-span {\n padding: 0.5rem 1.75rem 0.5rem 0.75rem;\n width: 100%;\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n</style>\n","<template>\n <div ref=\"dropDownButtonContainer\" class=\"super-list-button-container\">\n <slot></slot>\n </div>\n <div\n id=\"super-list-select-list\"\n ref=\"listContainerRef\"\n @mouseenter=\"parentMethods.mouseOverList()\"\n tabindex=\"-1\"\n :class=\"[\n 'select-list',\n reverseList ? 'list-reverse' : 'list-normal',\n { 'select-list-open': showDropDown },\n { 'no-scroll': noScroll && listElementOpenAndVisible },\n { 'select-list-fixed': listElementOpenAndVisible },\n { 'select-list-scrollable': !noScroll }\n ]\"\n @keydown.space=\"preventSpaceScrollingList($event)\"\n @mouseup.left=\"refocusTextInput($event)\"\n >\n <ul tabindex=\"-1\" ref=\"dropDownListUL\" class=\"list-content\">\n <list-item\n :filteredListItems=\"listItemsToDisplay\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"focusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :listElementOpenAndVisible=\"listElementOpenAndVisible\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :total-options-count=\"totalOptionsCount\"\n />\n </ul>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n type ComputedRef,\n nextTick,\n onMounted,\n onUnmounted,\n type PropType,\n ref,\n watch\n} from 'vue'\nimport ListItem from '../ListInputComponents/ListItem.vue'\nimport { DocumentViewChangeListener } from '../DropDownLibrary'\n\nconst emit = defineEmits(['reverseDropDownList'])\n\nconst props = defineProps({\n mouseHoveringOnList: {\n type: Boolean,\n default: false\n },\n filteredListItems: {\n type: Array,\n default: () => []\n },\n focusedIndex: {\n type: Number,\n default: null\n },\n selectedIndex: {\n type: Number,\n default: null\n },\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n maxListHeightPX: {\n type: Number,\n required: true\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n required: true\n },\n blockListChange: {\n type: Boolean,\n required: true\n },\n totalOptionsCount: {\n type: Number,\n default: 0\n },\n enableScrollClose: {\n type: Boolean,\n default: true\n }\n})\n\nconst dropDownButtonContainer = ref<HTMLElement | null>(null)\nconst dropDownListUL = ref<HTMLElement | null>(null)\nconst listContainerRef = ref<HTMLElement | null>(null)\nconst offsetLeft = ref<number>(0)\nconst offsetTop = ref<number>(0)\nconst offsetBottom = ref<number>(0)\nconst listOffset = ref<number>(0)\nconst parentWidthPx = ref<string>('0px')\nconst listElementOpenAndVisible = ref<boolean>(false)\nconst listItemsToDisplay = ref<any[]>([])\nconst listHeightPx = ref<number>(0)\n\nconst reverseList = computed((): boolean => {\n if (!listElementOpenAndVisible.value || window?.innerHeight == null) return false\n return sufficientRoomAbove() && insufficientRoomBelow()\n})\n\nconst noScroll = computed((): boolean => {\n return props.maxListHeightPX >= listHeightPx.value\n})\n\nwatch(\n () => reverseList.value,\n (reverse: boolean) => emit('reverseDropDownList', reverse),\n { immediate: true }\n)\n\nconst parentXPx = computed((): string => offsetLeft.value + 'px')\nconst parentYPx = computed((): string => listOffset.value + 'px')\n\ndefineExpose({ listContainerRef })\n\nconst preventSpaceScrollingList = (event: any) => {\n if (event?.key && event.key === ' ') event.preventDefault()\n}\n\nconst refocusTextInput = (event: MouseEvent) => {\n const list = listContainerRef?.value as HTMLElement | null\n const target = event.target as HTMLElement | null\n if (!(list && target && list.contains(target)) || list.isEqualNode(target))\n props.parentMethods.focusInput()\n}\n\nfunction getListULHeight(): number {\n return dropDownListUL?.value ? (dropDownListUL?.value as HTMLElement).clientHeight : 0\n}\n\nfunction displayableListHeight(): number {\n if (!listElementOpenAndVisible.value || getListULHeight() === 0) return props.maxListHeightPX\n const ulHt: number = getListULHeight() === 0 ? props.maxListHeightPX : +getListULHeight()\n return props.maxListHeightPX && props.maxListHeightPX > ulHt ? ulHt : props.maxListHeightPX\n}\n\nfunction sufficientRoomAbove(): boolean {\n return offsetTop.value > displayableListHeight()\n}\n\nfunction insufficientRoomBelow(): boolean {\n return offsetBottom.value < displayableListHeight()\n}\n\nconst maxListHeightPx = computed((): string => (props.maxListHeightPX || 0) + 'px')\n\nconst animationDuration = computed((): string => (props.listAnimationDurationMs || 0) + 'ms')\n\nconst updatedListItemsToDisplay = computed((): any[] => {\n return !props.blockListChange ? props.filteredListItems : listItemsToDisplay.value\n})\n\nwatch(\n () => updatedListItemsToDisplay,\n (newVal: ComputedRef<any[]>) => {\n if (newVal) listItemsToDisplay.value = newVal.value\n },\n { immediate: false, deep: true }\n)\n\nlet unobserveTimeout = setTimeout(() => {}, 0)\n\nlet changeListener: DocumentViewChangeListener | null = null\n\nfunction openAndObserveChangeListener() {\n listHeightPx.value = getListULHeight()\n clearTimeout(unobserveTimeout)\n if (changeListener) changeListener.observe()\n listElementOpenAndVisible.value = true\n buttonRePositionCallback(undefined)\n}\n\nfunction closeAndUnobserveChangeListener() {\n clearTimeout(unobserveTimeout)\n unobserveTimeout = setTimeout(() => {\n if (!props.showDropDown) {\n listElementOpenAndVisible.value = false\n if (changeListener) changeListener.unobserve()\n }\n }, props.listAnimationDurationMs + 50)\n}\n\nwatch(\n () => props.showDropDown,\n (newV, oldV) => {\n if (newV !== oldV) {\n setOffsets()\n if (newV) openAndObserveChangeListener()\n else closeAndUnobserveChangeListener()\n }\n },\n { immediate: true }\n)\n\nfunction buttonRePositionCallback(e: any): void {\n setOffsets()\n nextTick(() => setOffsets())\n closeListOnScrollIfNecessary(e)\n}\n\nfunction closeListOnScrollIfNecessary(e: any) {\n if (!props.enableScrollClose || !props.showDropDown) return\n const notInitialized: boolean = typeof listContainerRef?.value?.contains !== 'function'\n if (notInitialized || e?.target?.nodeType == null || insideListOrOtherList(e)) return\n const isScrollEvent: boolean = ['scroll', 'wheel', 'touchmove'].includes(e?.type)\n if (props.showDropDown && isScrollEvent) props.parentMethods.closeList()\n}\n\nfunction insideListOrOtherList(e: any): boolean {\n const insideButton: boolean = !!dropDownButtonContainer.value?.contains(e?.target as Node)\n const insideList: boolean = !!listContainerRef.value?.contains(e.target as Node)\n const otherList: boolean = [e?.srcElement?.id, e?.target?.id].includes('super-list-select-list')\n return insideButton || insideList || otherList\n}\n\nfunction setOffsets(): void {\n setButtonOffset()\n setListOffset()\n}\n\nfunction setButtonOffset(): void {\n if (dropDownButtonContainer?.value == null) return\n const brc: DOMRect = (dropDownButtonContainer.value as HTMLElement).getBoundingClientRect()\n offsetTop.value = brc.top\n offsetBottom.value = window.innerHeight - brc.bottom\n parentWidthPx.value = brc.width + 'px'\n}\n\nfunction setListOffset(): void {\n /**\n * List container must be used when calculating position and not \"dropDownListUL\".\n * Position must be calculated as window viewport might not match list container viewport.\n **/\n if (dropDownButtonContainer?.value == null || listContainerRef?.value == null) return\n const brc: DOMRect = getButtonContainerElement().getBoundingClientRect()\n const slrc: DOMRect = (listContainerRef.value as HTMLElement).getBoundingClientRect()\n const currentListOffset: number = listOffset.value\n const currentOffsetLeft: number = offsetLeft.value\n if (reverseList.value) listOffset.value = currentListOffset - (brc.top - slrc.bottom)\n else listOffset.value = currentListOffset - (slrc.top - brc.bottom)\n offsetLeft.value = currentOffsetLeft - (slrc.left - brc.left)\n}\n\nfunction getButtonElement(): HTMLButtonElement {\n return (dropDownButtonContainer?.value as HTMLElement).getElementsByTagName('button')[0]\n}\n\nfunction getButtonContainerElement(): HTMLDivElement {\n return dropDownButtonContainer?.value as HTMLDivElement\n}\n\nonMounted(() => {\n changeListener = new DocumentViewChangeListener(buttonRePositionCallback, getButtonElement())\n setTimeout(() => buttonRePositionCallback(undefined), 250)\n})\n\nonUnmounted(() => {\n changeListener?.unobserve()\n})\n</script>\n\n<style scoped>\n.list-normal {\n top: var(--parent-y);\n}\n\n.list-reverse {\n bottom: var(--parent-y);\n}\n\n.select-list {\n --parent-width: v-bind(parentWidthPx);\n --parent-x: v-bind(parentXPx);\n --parent-y: v-bind(parentYPx);\n --duration: v-bind(animationDuration);\n --border-radius: var(--superlist-list-border-radius, 0);\n border-radius: var(--border-radius);\n width: var(--parent-width);\n min-width: var(--parent-width);\n left: var(--parent-x);\n display: block;\n transition-property: max-height, opacity, visibility, box-shadow;\n transition-duration: var(--duration, 300ms);\n transition-timing-function: cubic-bezier(0.1, 0.9, 0.35, 0.98);\n position: absolute;\n backdrop-filter: blur(3px);\n -webkit-backdrop-filter: blur(3px);\n background-color: rgb(255, 255, 255, 0.7);\n align-items: baseline;\n opacity: 0.25;\n z-index: 999;\n visibility: collapse;\n overflow: auto;\n max-height: 0;\n border: none !important; /* can't transition border */\n}\n\n.select-list:focus-visible,\n.select-list > ul:focus-visible,\n.super-list-button-container:focus-visible {\n outline: none;\n}\n\n.super-list-button-container {\n height: 100%;\n width: 100%;\n}\n\n.select-list.select-list-open {\n z-index: 999999;\n --max-height: v-bind(maxListHeightPx);\n max-height: var(--max-height, 0);\n}\n\n.select-list.no-scroll {\n overflow: hidden;\n}\n\n.select-list-fixed {\n position: fixed;\n opacity: 1;\n visibility: visible;\n}\n\n.list-content {\n --duration: v-bind(animationDuration);\n overflow: visible;\n margin: 0;\n padding: 0;\n border-style: none;\n color: var(--superlist-text-colour, rgb(55, 60, 65));\n list-style: none;\n max-width: 100%;\n}\n\n.select-list.select-list-scrollable {\n border-radius: var(--border-radius);\n}\n\n.select-list:not(.select-list-fixed) {\n transition: none;\n box-shadow: none !important;\n}\n\n@media (min-width: 640px) {\n .select-list.select-list-scrollable {\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n }\n .list-content {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\"\n viewBox=\"0 0 12 6\"\n >\n <path\n shape-rendering=\"geometricPrecision\"\n d=\"M 6 4 L 10 0.25 A 0.5 0.5 90 0 1 11 1.25 L 6.5 5.75 A 15 3 90 0 1 5.5 5.75 L 1 1.25 A 0.5 0.5 90 0 1 2 0.25 Z\"\n />\n </svg>\n</template>\n","<template>\n <button\n ref=\"buttonRef\"\n :tabindex=\"enableTextFilter ? -1 : 0\"\n @keydown.enter=\"enterHandler($event)\"\n @keydown.space=\"spaceHandler($event)\"\n @keydown.esc=\"parentMethods.press($event)\"\n @keydown.up=\"parentMethods.press($event)\"\n @keydown.down=\"parentMethods.press($event)\"\n @focusout=\"parentMethods.unfocus($event)\"\n @click=\"clickHandler()\"\n type=\"button\"\n :class=\"[{ 'click-through': props.enableTextFilter || props.showDropDown }]\"\n class=\"list-button\"\n >\n <slot></slot>\n <span class=\"list-button-icon-div\" :class=\"{ 'bigger-gap': props.showDropDown }\">\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': !props.showDropDown }]\"\n >\n <default-arrow aria-hidden=\"true\" />\n </span>\n <span\n v-if=\"!customIcon\"\n class=\"list-button-icon\"\n :class=\"[{ 'rotate-180': props.showDropDown }]\"\n >\n <default-arrow v-if=\"customIcon == null\" aria-hidden=\"true\" />\n </span>\n <span v-if=\"customIcon\" class=\"list-button-icon custom-icon\">\n <component aria-hidden=\"true\" :is=\"customIcon as object\" />\n </span>\n </span>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { type PropType, ref } from 'vue'\nimport DefaultArrow from './default-arrow.vue'\n\n// prettier-ignore\nconst props = defineProps({ // eslint-disable-line\n parentMethods: {\n type: Object,\n required: true\n },\n showDropDown: {\n type: Boolean,\n required: true\n },\n enableTextFilter: {\n type: Boolean,\n required: true\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n reverseDropDownList: {\n type: Boolean,\n required: true\n }\n})\n\nconst buttonRef = ref(null)\n\nfunction clickHandler() {\n if (props.enableTextFilter) return\n else props.parentMethods.openList()\n}\n\nfunction enterHandler(event: KeyboardEvent) {\n if (props.enableTextFilter) {\n props.parentMethods.focusInput()\n event.stopPropagation()\n event.preventDefault()\n } else {\n props.parentMethods.press(event)\n }\n}\n\nfunction spaceHandler(event: KeyboardEvent) {\n if (!props.enableTextFilter) props.parentMethods.press(event)\n}\n\nfunction blurInput() {\n if (buttonRef?.value) {\n const button: HTMLButtonElement = buttonRef.value\n button.blur()\n }\n}\n\nfunction focusInput() {\n if (buttonRef?.value) (buttonRef.value as HTMLButtonElement).focus()\n}\n\ndefineExpose({ blurInput, focusInput, buttonRef })\n</script>\n\n<style scoped>\n.list-button-icon {\n display: flex;\n transition-timing-function: ease-in-out;\n transition-duration: 200ms;\n transition-property: transform;\n width: 0.6rem;\n transform: rotate(0deg);\n color: var(--superlist-text-colour, rgb(17, 24, 39));\n justify-content: center;\n max-height: 18%;\n}\n\n.list-button-icon.custom-icon {\n max-height: 100%;\n width: 1.25rem;\n}\n\n.list-button-icon.rotate-180 {\n transform: rotate(180deg);\n}\n\n.list-button {\n position: relative;\n padding: 0;\n margin: 0;\n width: 100%;\n max-height: 100%;\n height: 100%;\n background-color: var(--superlist-background-colour, white);\n align-items: center;\n pointer-events: auto;\n cursor: pointer;\n}\n\n.list-button:focus,\n.list-button:focus-visible,\n.list-button:active {\n text-align: left;\n}\n\n.list-button-icon-div {\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-right: 0.75rem;\n max-height: 100%;\n height: 100%;\n gap: max(0.15rem, calc(6.25% + 0.075rem));\n transition: gap 200ms;\n}\n\n.list-button-icon-div.bigger-gap {\n gap: calc(40% - 0.25rem);\n}\n\n.click-through {\n pointer-events: none;\n}\n</style>\n","<template>\n <div style=\"position: relative\" :class=\"$attrs.class\">\n <item-list\n ref=\"itemListRef\"\n :show-drop-down=\"showDropDown\"\n :filteredListItems=\"filteredListItems\"\n :mouseHoveringOnList=\"mouseHoveringOnList\"\n :focusedIndex=\"activeFocusedIndex\"\n :selectedIndex=\"selectedIndex\"\n :max-list-height-p-x=\"maxListHeightPX\"\n :list-animation-duration-ms=\"listAnimationDurationMs\"\n :parent-methods=\"parentMethods\"\n v-model:blockListChange=\"blockListUpdates\"\n :total-options-count=\"totalOptionsCount\"\n @reverseDropDownList=\"reverseDropDownList = $event\"\n :enableScrollClose=\"enableScrollClose\"\n >\n <list-button\n ref=\"dropDownButtonInput\"\n :parent-methods=\"parentMethods\"\n :show-drop-down=\"showDropDown\"\n :enable-text-filter=\"enableTextFilter\"\n :custom-icon=\"customIcon\"\n :reverse-drop-down-list=\"reverseDropDownList\"\n >\n <text-input\n ref=\"dropDownTextInput\"\n :enable-text-filter=\"enableTextFilter\"\n :show-drop-down=\"showDropDown\"\n :placeholder=\"placeholder\"\n :enable-button-click=\"enableButtonClick\"\n :parent-methods=\"parentMethods\"\n @update:query=\"query = $event\"\n />\n </list-button>\n </item-list>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, type PropType, ref, watch } from 'vue'\nimport {\n getLabelString,\n AbortablePromise,\n type DataSet,\n type EnumType,\n type ListRequest\n} from './DropDownLibrary'\nimport TextInput from './ListInputComponents/ListTextInput.vue'\nimport ItemList from './ListInputComponents/ItemList.vue'\nimport ListButton from './ListInputComponents/ListButton.vue'\n\nconst emit = defineEmits({ 'update:selected': null })\nconst props = defineProps({\n selected: {\n type: [String, Number, Object, null, undefined] as PropType<\n string | number | object | null | undefined\n >\n },\n options: {\n type: [Function, Array<string | number | object>] as PropType<\n ListRequest | Array<string | number | object>\n >,\n required: true\n },\n maxListOptions: {\n type: Number as PropType<number>,\n default: 50\n },\n maxListHeightPX: {\n type: Number as PropType<number>,\n default: 200\n },\n tooltip: {\n type: String,\n required: false\n },\n objectLabelKeyName: {\n type: String as PropType<string | null>,\n default: ''\n },\n enumKeyToLabelObjectArray: {\n type: Object as PropType<EnumType[]>,\n default: undefined\n },\n listAnimationDurationMs: {\n type: Number as PropType<number>,\n default: 300\n },\n customIcon: {\n default: null,\n type: [Object, Function] as PropType<object | Function | null>\n },\n forceTextFilterVisibilityTo: {\n type: Boolean as PropType<boolean>,\n default: undefined\n },\n customPlaceHolderFunction: {\n type: Function as PropType<Function | null>,\n default: null\n },\n colour: {\n type: String as PropType<string>,\n default: 'black'\n },\n scrollTextInputToTopOnMobile: {\n type: Boolean as PropType<boolean>,\n default: true\n }\n})\n\nconst listOptions = ref([] as Array<string | number | object>)\n\nconst abortablePromise = new AbortablePromise()\n\nconst totalOptionsCount = ref(0)\n\nconst enableTextFilter = computed((): boolean => {\n if (props.forceTextFilterVisibilityTo != undefined) return props.forceTextFilterVisibilityTo\n return totalOptionsCount.value > props.maxListOptions\n})\n\nconst showDropDown = ref<boolean>(false)\n\nconst blockListUpdates = ref<boolean>(false)\n\nconst reverseDropDownList = ref<boolean>(false)\n\nconst enableButtonClick = ref(true)\n\nconst loadingData = ref(false)\nconst errorState = ref(false)\n\nconst itemListRef = ref(ItemList)\nconst dropDownTextInput = ref(TextInput)\nconst dropDownButtonInput = ref(ListButton)\n\nconst query = ref('')\n\nwatch(\n () => query.value,\n (newV, oldV) => {\n if (newV !== oldV && typeof props.options === 'function') loadData(newV)\n }\n)\n\nconst blurInputIfNecessary = () => {\n if (enableTextFilter.value) dropDownTextInput?.value?.blurInput()\n}\n\nconst closeList = () => {\n clearTimeout(blockScrollCloseTimeout)\n blurInputIfNecessary()\n query.value = ''\n showDropDown.value = false\n enableButtonClick.value = true\n}\n\nconst placeholder = computed((): string => {\n if (errorState?.value === true) return 'Error loading data'\n if (loadingData?.value === true) return 'Loading...'\n return getLabel(props.selected)\n})\n\nconst updatedSelected = (newValue: any) => {\n if (newValue) emit('update:selected', newValue)\n closeList()\n}\n\nconst getLabel = (value?: string | number | object | null): string => {\n return getLabelString(\n value,\n props.customPlaceHolderFunction,\n props.objectLabelKeyName,\n props.enumKeyToLabelObjectArray\n )\n}\n\nfunction invalidArgumentError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid options argument provided to ListInputComponent`)\n}\n\nfunction invalidResponseError() {\n loadingData.value = true\n errorState.value = true\n throw new Error(`Invalid response provided to ListInputComponent, no total count key found`)\n}\n\nfunction invalidListValueKeyError() {\n loadingData.value = true\n errorState.value = true\n throw new Error('Invalid objectLabelKeyName for provided Dropdown list value.')\n}\n\nonMounted(() => {\n if (typeof props.options !== 'function' && !Array.isArray(props.options)) invalidArgumentError()\n else initializeOptions()\n})\n\nconst mouseHoveringOnList = ref(false)\n\nconst selectedIndex = ref(0)\nconst focusedIndex = ref(0)\nconst activeFocusedIndex = ref(0)\n\nwatch(\n () => focusedIndex.value,\n (newV, oldV) => {\n if (newV != oldV && !blockListUpdates.value) {\n activeFocusedIndex.value = newV\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => blockListUpdates.value,\n (newV) => {\n if (!newV) {\n activeFocusedIndex.value = focusedIndex.value\n }\n },\n { immediate: true }\n)\n\nconst filteredListItems = computed(() => {\n // if is function, return listOptions variable which is set by function\n if (typeof props.options === 'function' && !Array.isArray(props.options)) return listOptions.value\n const qry = query.value\n const lo = listOptions.value\n // else, is array, return filtered array\n return qry === '' ? lo : lo.filter((v) => getLabel(v).toLowerCase().includes(qry.toLowerCase()))\n})\n\nwatch(\n () => filteredListItems.value,\n (newV, oldV) => {\n if (JSON.stringify(newV) !== JSON.stringify(oldV)) focusSelectedOrFirstListItem()\n },\n { immediate: false, deep: true }\n)\n\nconst mouseOverList = () => {\n mouseHoveringOnList.value = true\n}\n\nconst focusSelectedOrFirstListItem = () => {\n const existingIndex = getSelectedValueIndex()\n selectedIndex.value = existingIndex /* may not be in the filtered list, allowed to be -1 */\n focusedIndex.value = existingIndex > -1 ? existingIndex : 0 /* default to first value */\n}\n\nfunction getSelectedValueIndex() {\n if (props.selected == null) return -1\n const labelsArray = filteredListItems.value.map((v) => getLabel(v))\n const matchingLabelsArray = labelsArray.filter((v) => v === getLabel(props.selected))\n if (matchingLabelsArray.length > 1) {\n const matchingIndexes = matchingLabelsArray.map((v) => labelsArray.indexOf(v))\n for (let i = 0; i < matchingIndexes.length; i++) {\n const currentMatchingOptionString = JSON.stringify(\n filteredListItems.value[matchingIndexes[i]]\n )\n const selectedOptionString = JSON.stringify(props.selected)\n if (currentMatchingOptionString === selectedOptionString) return matchingIndexes[i]\n }\n return -1\n }\n return labelsArray.indexOf(getLabel(props.selected))\n}\n\nconst openList = () => {\n if (loadingData.value) return\n if (!showDropDown.value) {\n blockListUpdates.value = false\n focusSelectedOrFirstListItem()\n scrollMobileTextInputToTop()\n showDropDown.value = true\n }\n mouseHoveringOnList.value = false\n enableButtonClick.value = false\n}\n\nconst scrollMobileTextInputToTop = () => {\n const mobileWindow: boolean = window?.innerWidth != null && window.innerWidth < 640\n const mobileScreen: boolean = screen?.width != null && screen.width < 640\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if ((mobileWindow || mobileScreen) && enableTextFilter.value) {\n preventScrollClose()\n if (props.scrollTextInputToTopOnMobile)\n textInput?.scrollIntoView({ block: 'start', inline: 'center' })\n }\n}\n\nconst enableScrollClose = ref<boolean>(true)\nlet blockScrollCloseTimeout = setTimeout(() => {}, 0)\n\nfunction preventScrollClose() {\n const textInput: HTMLElement | null = dropDownTextInput.value.textInputRef as HTMLElement | null\n if (!textInput) return\n enableScrollClose.value = false\n let preventingScrollCloseInterval: NodeJS.Timeout | null = null\n\n const clearAll = () => {\n if (preventingScrollCloseInterval) clearInterval(preventingScrollCloseInterval)\n clearTimeout(blockScrollCloseTimeout)\n setTimeout(() => {\n enableScrollClose.value = true\n }, 100)\n }\n\n blockScrollCloseTimeout = setTimeout(clearAll, 5000)\n\n preventingScrollCloseInterval = setInterval(() => {\n if (\n showDropDown.value === false ||\n (textInput?.scrollTop === 0 && document.readyState === 'complete')\n )\n clearAll()\n }, 100)\n}\n\nconst focusInput = () => {\n if (enableTextFilter?.value == true) dropDownTextInput.value.focusInput()\n else if (dropDownButtonInput?.value?.focusInput) dropDownButtonInput?.value?.focusInput()\n}\n\nasync function initializeOptions(): Promise<void> {\n if (typeof props.options === 'function') {\n await loadData(query.value ? query.value : undefined, true)\n } else {\n validateListOptions(props.options as Array<string | number | object>)\n totalOptionsCount.value = listOptions.value.length\n }\n initializeSelected()\n}\n\ndefineExpose({ initializeOptions, getLabel })\n\nfunction initializeSelected() {\n const invalidSelection = getSelectedValueIndex() == -1\n const existingOptionNotSelected = invalidSelection && listOptions.value && !!listOptions.value[0]\n if (existingOptionNotSelected) updatedSelected(listOptions.value[0])\n}\n\nasync function loadData(stringFilter?: string, disableOnLoad: boolean = true) {\n loadingData.value = disableOnLoad\n const func = async () => (props.options as Function)(props.maxListOptions, stringFilter || '')\n const next = (response: DataSet<any>) => {\n if (!response || !('data' in response)) invalidArgumentError()\n validateListOptions(response.data)\n getOptionsCount(response?.data?.length ?? 0).then(() => {\n loadingData.value = false\n })\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nfunction validateListOptions(optns: Array<string | number | object>) {\n if (!Array.isArray(optns)) invalidArgumentError()\n if (optns.length > 0 && typeof optns[0] === 'object') validateObjectList(optns as Array<object>)\n listOptions.value = optns as Array<string | number | object>\n}\n\nfunction validateObjectList(values: Array<object>) {\n if (!props.objectLabelKeyName || props.objectLabelKeyName.length === 0) invalidListValueKeyError()\n const key: string = props.objectLabelKeyName as string\n for (let i = 0; i < values.length; i++) {\n if (typeof values[i] !== 'object' || !(key in values[i])) invalidListValueKeyError()\n }\n}\n\nasync function getOptionsCount(dataLength: number): Promise<void> {\n const func = async () => (props.options as Function)(1, '')\n const next = (response: DataSet<any>) => {\n if (!response || !('totalNum' in response)) invalidResponseError()\n totalOptionsCount.value = response.totalNum ?? dataLength\n }\n await abortablePromise.resetAndExecute(func, next)\n}\n\nconst getCurrentlyFocusedListItemElement = (): HTMLElement | null => {\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n return listInput?.getElementsByTagName('li')[focusedIndex.value] ?? null\n}\n\nconst press = (event?: any) => {\n if (showDropDown.value == false) {\n openList()\n } else if (event) {\n keypress(event)\n }\n}\n\nconst keypress = (event: any) => {\n const key: string = event.key || event.code\n if (key === 'Tab' || key === 'Escape') closeList()\n if (key === 'ArrowDown') down(event)\n if (key === 'ArrowUp') up(event)\n if (key === 'Enter' || key === ' ') updateSelectedFromTextQuery()\n event.preventDefault()\n event.stopPropagation()\n}\n\nconst updateSelectedFromTextQuery = () => {\n if (filteredListItems.value.length > 0) {\n blockListUpdates.value = true\n updatedSelected(filteredListItems.value[focusedIndex.value])\n } else {\n closeList()\n }\n}\n\nconst down = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value < filteredListItems.value.length - 1) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value++\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst up = (event: any) => {\n enableButtonClick.value = true\n if (focusedIndex.value > 0) {\n event.preventDefault()\n mouseHoveringOnList.value = false\n focusedIndex.value--\n getCurrentlyFocusedListItemElement()?.focus()\n }\n}\n\nconst unfocus = (event: any) => {\n if (showDropDown?.value === false) return\n if (query.value.length > 0) blockListUpdates.value = true\n const list: HTMLElement | null = itemListRef?.value?.listContainerRef as HTMLElement | null\n const listInput: HTMLElement | null = dropDownTextInput?.value?.textInputRef as HTMLElement | null\n const isListInput = event?.relatedTarget && listInput?.isEqualNode(event?.relatedTarget)\n const isList = event?.relatedTarget && list && list.contains(event?.relatedTarget)\n const isListItem = event?.relatedTarget && list && list.isEqualNode(event?.relatedTarget)\n if (isList || isListInput) return\n if (isListItem) {\n focusInput()\n return\n }\n closeList()\n}\n\nconst parentMethods = {\n openList: openList,\n unfocus: unfocus,\n press: press,\n mouseOverList: mouseOverList,\n getLabel: getLabel,\n updatedSelected: updatedSelected,\n focusInput: focusInput,\n closeList: closeList\n}\n</script>\n\n<style scoped>\n* {\n box-sizing: border-box;\n}\n</style>\n"],"names":["DocumentViewChangeListener","targetFunction","targetNode","event","eventType","getLabelString","value","customLabelGetFunction","objectLabelKeyName","enumKeyToLabelObjectArray","getEnumLabel","enumKeyArray","eT","AbortablePromise","signal","asyncFunc","then","response","func","reason","emit","__emit","props","__props","textInputRef","ref","focusInHandler","e","focusOutHandler","lastQuery","updateQuery","textInputSize","computed","refLength","placeHolderLength","pointerEventsClass","textInputColourClass","blurInput","input","focusInput","__expose","_createElementBlock","_createElementVNode","$event","_cache","_withKeys","_normalizeClass","_openBlock","_hoisted_1","iRefs","useTemplateRef","focusedLi","focused","watch","scrollHighlightedListItemToTop","scrollHighlightedListItemIntoView","li","liParent","aboveTop","belowBottom","_Fragment","_renderList","listItem","index","_withModifiers","_hoisted_2","_toDisplayString","_createBlock","DefaultTick","_hoisted_3","dropDownButtonContainer","dropDownListUL","listContainerRef","offsetLeft","offsetTop","offsetBottom","listOffset","parentWidthPx","listElementOpenAndVisible","listItemsToDisplay","listHeightPx","reverseList","sufficientRoomAbove","insufficientRoomBelow","noScroll","reverse","parentXPx","parentYPx","preventSpaceScrollingList","refocusTextInput","list","target","getListULHeight","displayableListHeight","ulHt","maxListHeightPx","animationDuration","updatedListItemsToDisplay","newVal","unobserveTimeout","changeListener","openAndObserveChangeListener","buttonRePositionCallback","closeAndUnobserveChangeListener","newV","oldV","setOffsets","nextTick","closeListOnScrollIfNecessary","insideListOrOtherList","isScrollEvent","insideButton","insideList","otherList","setButtonOffset","setListOffset","brc","getButtonContainerElement","slrc","currentListOffset","currentOffsetLeft","getButtonElement","onMounted","onUnmounted","_renderSlot","_ctx","_createVNode","ListItem","buttonRef","clickHandler","enterHandler","spaceHandler","DefaultArrow","_resolveDynamicComponent","listOptions","abortablePromise","totalOptionsCount","enableTextFilter","showDropDown","blockListUpdates","reverseDropDownList","enableButtonClick","loadingData","errorState","itemListRef","ItemList","dropDownTextInput","TextInput","dropDownButtonInput","ListButton","query","blurInputIfNecessary","closeList","blockScrollCloseTimeout","placeholder","getLabel","updatedSelected","newValue","invalidArgumentError","invalidResponseError","invalidListValueKeyError","initializeOptions","mouseHoveringOnList","selectedIndex","focusedIndex","activeFocusedIndex","filteredListItems","qry","lo","v","focusSelectedOrFirstListItem","mouseOverList","existingIndex","getSelectedValueIndex","labelsArray","matchingLabelsArray","matchingIndexes","i","currentMatchingOptionString","selectedOptionString","openList","scrollMobileTextInputToTop","mobileWindow","mobileScreen","textInput","preventScrollClose","enableScrollClose","preventingScrollCloseInterval","clearAll","loadData","validateListOptions","initializeSelected","stringFilter","disableOnLoad","next","getOptionsCount","optns","validateObjectList","values","key","dataLength","getCurrentlyFocusedListItemElement","press","keypress","down","up","updateSelectedFromTextQuery","parentMethods","listInput","isListInput","isList","isListItem","$attrs"],"mappings":"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"}
|
package/dist/super-list.vue.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type PropType } from 'vue';
|
|
2
2
|
import { type EnumType, type ListRequest } from './DropDownLibrary';
|
|
3
3
|
declare function initializeOptions(): Promise<void>;
|
|
4
|
-
declare const
|
|
4
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
5
5
|
selected: {
|
|
6
6
|
type: PropType<string | number | object | null | undefined>;
|
|
7
7
|
};
|
|
@@ -124,4 +124,5 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
124
124
|
colour: string;
|
|
125
125
|
scrollTextInputToTopOnMobile: boolean;
|
|
126
126
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
127
|
+
declare const _default: typeof __VLS_export;
|
|
127
128
|
export default _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jblehm/super-list",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.37",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [ "dist" ],
|
|
6
6
|
"main": "./dist/super-list.umd.cjs",
|
|
@@ -25,21 +25,20 @@
|
|
|
25
25
|
"serve": "vite serve --host"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"vue": "^3.5.
|
|
28
|
+
"vue": "^3.5.26"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@types/node": "^
|
|
32
|
-
"@vitejs/plugin-vue": "^
|
|
33
|
-
"@vitejs/plugin-vue-jsx": "^
|
|
31
|
+
"@types/node": "^25.0.8",
|
|
32
|
+
"@vitejs/plugin-vue": "^6.0.3",
|
|
33
|
+
"@vitejs/plugin-vue-jsx": "^5.1.3",
|
|
34
34
|
"@vue/eslint-config-prettier": "^10.2.0",
|
|
35
|
-
"@vue/eslint-config-typescript": "^14.
|
|
36
|
-
"eslint": "^9.
|
|
37
|
-
"postcss": "^8.5.
|
|
38
|
-
"prettier": "^3.
|
|
39
|
-
"typescript": "~5.
|
|
40
|
-
"vite": "
|
|
41
|
-
"
|
|
42
|
-
"vue-tsc": "^2.2.10"
|
|
35
|
+
"@vue/eslint-config-typescript": "^14.6.0",
|
|
36
|
+
"eslint": "^9.39.2",
|
|
37
|
+
"postcss": "^8.5.6",
|
|
38
|
+
"prettier": "^3.8.0",
|
|
39
|
+
"typescript": "~5.9.3",
|
|
40
|
+
"vite": "7.1.11",
|
|
41
|
+
"vue-tsc": "^3.2.2"
|
|
43
42
|
},
|
|
44
43
|
"sideEffects": [
|
|
45
44
|
"*.css"
|