domma-js 0.55.0 → 0.57.0
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/assets/types/generated/public/assets/flags/africa.d.ts +6 -0
- package/assets/types/generated/public/assets/flags/americas.d.ts +6 -0
- package/assets/types/generated/public/assets/flags/asia.d.ts +6 -0
- package/assets/types/generated/public/assets/flags/europe.d.ts +9 -0
- package/assets/types/generated/public/assets/flags/index.d.ts +11 -0
- package/assets/types/generated/public/assets/flags/oceania.d.ts +2 -0
- package/assets/types/generated/public/assets/icons/buildings.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/code.d.ts +2 -0
- package/assets/types/generated/public/assets/icons/commerce.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/communication.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/devices.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/emojis.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/files.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/finance.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/forms.d.ts +5 -0
- package/assets/types/generated/public/assets/icons/health.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/index.d.ts +24 -0
- package/assets/types/generated/public/assets/icons/media.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/navigation.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/seasonal.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/social.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/sport.d.ts +6 -0
- package/assets/types/generated/public/assets/icons/status.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/transport.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/ui.d.ts +7 -0
- package/assets/types/generated/public/assets/icons/weather.d.ts +6 -0
- package/assets/types/generated/src/auth.d.ts +424 -0
- package/assets/types/generated/src/avatar.d.ts +270 -0
- package/assets/types/generated/src/binding-source.d.ts +58 -0
- package/assets/types/generated/src/butterfly-drawing.d.ts +2 -0
- package/assets/types/generated/src/component-factory.d.ts +150 -0
- package/assets/types/generated/src/component.d.ts +162 -0
- package/assets/types/generated/src/components/back-to-top.d.ts +150 -0
- package/assets/types/generated/src/components/badge.d.ts +208 -0
- package/assets/types/generated/src/components/card.d.ts +189 -0
- package/assets/types/generated/src/components/command-palette.d.ts +352 -0
- package/assets/types/generated/src/components/dropzone.d.ts +342 -0
- package/assets/types/generated/src/components/focus-trap.d.ts +238 -0
- package/assets/types/generated/src/components/loader.d.ts +133 -0
- package/assets/types/generated/src/components/modal.d.ts +341 -0
- package/assets/types/generated/src/components/range-slider.d.ts +267 -0
- package/assets/types/generated/src/components/shared.d.ts +91 -0
- package/assets/types/generated/src/components/split-pane.d.ts +239 -0
- package/assets/types/generated/src/components/toast.d.ts +284 -0
- package/assets/types/generated/src/components/tooltip.d.ts +200 -0
- package/assets/types/generated/src/components/virtual-list.d.ts +340 -0
- package/assets/types/generated/src/config.d.ts +193 -0
- package/assets/types/generated/src/context-cursor.d.ts +69 -0
- package/assets/types/generated/src/context-menu.d.ts +596 -0
- package/assets/types/generated/src/dates.d.ts +367 -0
- package/assets/types/generated/src/dom.d.ts +1221 -0
- package/assets/types/generated/src/effects.d.ts +1281 -0
- package/assets/types/generated/src/elements.d.ts +4996 -0
- package/assets/types/generated/src/escape.d.ts +5 -0
- package/assets/types/generated/src/flags-bundle.d.ts +4 -0
- package/assets/types/generated/src/flags.d.ts +338 -0
- package/assets/types/generated/src/forms.d.ts +1060 -0
- package/assets/types/generated/src/globals.d.ts +45 -0
- package/assets/types/generated/src/http.d.ts +131 -0
- package/assets/types/generated/src/i18n.d.ts +261 -0
- package/assets/types/generated/src/icons.d.ts +213 -0
- package/assets/types/generated/src/index.d.ts +249 -0
- package/assets/types/generated/src/input-group.d.ts +135 -0
- package/assets/types/generated/src/models.d.ts +968 -0
- package/assets/types/generated/src/popover.d.ts +412 -0
- package/assets/types/generated/src/router.d.ts +344 -0
- package/assets/types/generated/src/safe-url.d.ts +10 -0
- package/assets/types/generated/src/sanitize.d.ts +97 -0
- package/assets/types/generated/src/schema-builder.d.ts +420 -0
- package/assets/types/generated/src/skeleton.d.ts +135 -0
- package/assets/types/generated/src/smooth-caret.d.ts +61 -0
- package/assets/types/generated/src/sortable.d.ts +369 -0
- package/assets/types/generated/src/storage.d.ts +93 -0
- package/assets/types/generated/src/tables.d.ts +901 -0
- package/assets/types/generated/src/theme.d.ts +277 -0
- package/assets/types/generated/src/ticker-tape-drawing.d.ts +2 -0
- package/assets/types/generated/src/treeview.d.ts +504 -0
- package/assets/types/generated/src/utils.d.ts +1667 -0
- package/assets/types/generated/src/web-components/base/domma-element.d.ts +134 -0
- package/assets/types/generated/src/web-components/index.d.ts +14 -0
- package/assets/types/generated/vendor/domma-reactive.d.ts +587 -0
- package/assets/types/index.d.ts +104 -216
- package/package.json +5 -2
- package/public/dist/bundles/domma-complete.css +1084 -14
- package/public/dist/bundles/domma-data-focused.css +1084 -14
- package/public/dist/bundles/domma-essentials.css +1084 -14
- package/public/dist/bundles/domma-full.css +1084 -14
- package/public/dist/bundles/domma-minimal.css +8 -8
- package/public/dist/domma-flags.esm.js +3 -3
- package/public/dist/domma-flags.esm.js.map +1 -1
- package/public/dist/domma-flags.min.js +3 -3
- package/public/dist/domma-flags.min.js.map +1 -1
- package/public/dist/domma-syntax.min.js +3 -3
- package/public/dist/domma.css +3 -3
- package/public/dist/domma.esm.js +5 -5
- package/public/dist/domma.esm.js.map +1 -1
- package/public/dist/domma.min.js +5 -5
- package/public/dist/domma.min.js.map +1 -1
- package/public/dist/elements.css +1073 -3
- package/public/dist/grid.css +3 -3
- package/public/dist/syntax.css +3 -3
- package/public/dist/themes/domma-themes.css +3 -3
- package/templates/kickstart/frontend/types/domma.d.ts +2 -1
- package/assets/types/config.d.ts +0 -136
- package/assets/types/dates.d.ts +0 -209
- package/assets/types/dom.d.ts +0 -448
- package/assets/types/elements.d.ts +0 -682
- package/assets/types/flags.d.ts +0 -130
- package/assets/types/http.d.ts +0 -97
- package/assets/types/icons.d.ts +0 -147
- package/assets/types/models.d.ts +0 -260
- package/assets/types/smooth-caret.d.ts +0 -12
- package/assets/types/storage.d.ts +0 -93
- package/assets/types/tables.d.ts +0 -327
- package/assets/types/theme.d.ts +0 -137
- package/assets/types/utils.d.ts +0 -675
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E.tooltip: an instance per matched element (an existing one is updated, not doubled).
|
|
3
|
+
* @param {Element[]} elements
|
|
4
|
+
* @param {TooltipOptions} [options]
|
|
5
|
+
* @returns {Tooltip[]}
|
|
6
|
+
*/
|
|
7
|
+
export function tooltipsFor(elements: Element[], options?: TooltipOptions): Tooltip[];
|
|
8
|
+
/**
|
|
9
|
+
* Show / hide delays in ms.
|
|
10
|
+
* @typedef {object} TooltipDelay
|
|
11
|
+
* @property {number} [show]
|
|
12
|
+
* @property {number} [hide]
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {object} TooltipOptions
|
|
16
|
+
* @property {string|Node|((target: HTMLElement) => string|Node)} [content] - Tooltip content (falls back to data-tooltip, then title)
|
|
17
|
+
* @property {import('../elements.js').TooltipPosition} [position='top'] - Position relative to element (flips when there is no room)
|
|
18
|
+
* @property {import('../elements.js').TooltipPosition} [placement] - Alias of `position`
|
|
19
|
+
* @property {'hover'|'click'|'focus'|'manual'|(string & {})} [trigger='hover'] - How to trigger; several separated by spaces ('hover focus')
|
|
20
|
+
* @property {number|TooltipDelay} [delay=0] - Show delay in ms, or {show, hide}
|
|
21
|
+
* @property {number} [hideDelay=0] - Hide delay in ms
|
|
22
|
+
* @property {boolean} [animation=true] - Fade in and out
|
|
23
|
+
* @property {number} [offset=8] - Gap in px between target and bubble
|
|
24
|
+
* @property {boolean} [html=false] - String content is HTML (sanitised unless `safe: false`), not text
|
|
25
|
+
* @property {boolean} [safe=true] - Sanitise HTML content
|
|
26
|
+
* @property {boolean} [visible=false] - Show at once
|
|
27
|
+
* @property {string} [className] - Extra classes on the bubble
|
|
28
|
+
* @property {number|string|null} [maxWidth] - Any CSS width; numbers are px
|
|
29
|
+
* @property {((tooltip: TooltipInstance) => void)|null} [onShow] - When the tooltip shows
|
|
30
|
+
* @property {((tooltip: TooltipInstance) => void)|null} [onHide] - When the tooltip hides
|
|
31
|
+
*/
|
|
32
|
+
/** @typedef {Tooltip} TooltipInstance */
|
|
33
|
+
export class Tooltip extends Component {
|
|
34
|
+
static defaults: {
|
|
35
|
+
content: string;
|
|
36
|
+
position: string;
|
|
37
|
+
trigger: string;
|
|
38
|
+
delay: number;
|
|
39
|
+
hideDelay: number;
|
|
40
|
+
animation: boolean;
|
|
41
|
+
offset: number;
|
|
42
|
+
html: boolean;
|
|
43
|
+
safe: boolean;
|
|
44
|
+
visible: boolean;
|
|
45
|
+
className: string;
|
|
46
|
+
maxWidth: any;
|
|
47
|
+
onShow: any;
|
|
48
|
+
onHide: any;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Option aliases the old wrapper accepted.
|
|
52
|
+
* @param {TooltipOptions} [options]
|
|
53
|
+
* @returns {TooltipOptions}
|
|
54
|
+
*/
|
|
55
|
+
static normalise(options?: TooltipOptions): TooltipOptions;
|
|
56
|
+
/**
|
|
57
|
+
* @param {string|Element} element
|
|
58
|
+
* @param {TooltipOptions} [options]
|
|
59
|
+
*/
|
|
60
|
+
constructor(element: string | Element, options?: TooltipOptions);
|
|
61
|
+
_visible: boolean;
|
|
62
|
+
_bubble: HTMLDivElement;
|
|
63
|
+
_timers: {};
|
|
64
|
+
/** Content falls back to data-tooltip / title; a title is held aside so the browser's own does not show too. */
|
|
65
|
+
_takeTitle(): void;
|
|
66
|
+
_title: string;
|
|
67
|
+
_content(): any;
|
|
68
|
+
_bindTrigger(): void;
|
|
69
|
+
_clear(name: any): void;
|
|
70
|
+
_make(): void;
|
|
71
|
+
_write(): void;
|
|
72
|
+
_unmake(): void;
|
|
73
|
+
/** Place the bubble beside the target, flipping to the other side when it would leave the viewport. */
|
|
74
|
+
_place(): void;
|
|
75
|
+
_onScroll: () => void;
|
|
76
|
+
/**
|
|
77
|
+
* Show the tooltip (after `delay`).
|
|
78
|
+
* @returns {this}
|
|
79
|
+
*/
|
|
80
|
+
open(): this;
|
|
81
|
+
/**
|
|
82
|
+
* Hide the tooltip (after `hideDelay`, unless `immediate`).
|
|
83
|
+
* @param {{immediate?: boolean}} [opts]
|
|
84
|
+
* @returns {this}
|
|
85
|
+
*/
|
|
86
|
+
close(opts?: {
|
|
87
|
+
immediate?: boolean;
|
|
88
|
+
}): this;
|
|
89
|
+
/**
|
|
90
|
+
* Permanent alias of open(), by name.
|
|
91
|
+
* @returns {this}
|
|
92
|
+
*/
|
|
93
|
+
show(...args: any[]): this;
|
|
94
|
+
/**
|
|
95
|
+
* Permanent alias of close(), by name.
|
|
96
|
+
* @param {...{immediate?: boolean}} args
|
|
97
|
+
* @returns {this}
|
|
98
|
+
*/
|
|
99
|
+
hide(...args: {
|
|
100
|
+
immediate?: boolean;
|
|
101
|
+
}[]): this;
|
|
102
|
+
/**
|
|
103
|
+
* Toggle tooltip visibility.
|
|
104
|
+
* @returns {this}
|
|
105
|
+
*/
|
|
106
|
+
toggle(): this;
|
|
107
|
+
/** @returns {boolean} */
|
|
108
|
+
isVisible(): boolean;
|
|
109
|
+
/** @returns {boolean} */
|
|
110
|
+
isOpen(): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Update tooltip content.
|
|
113
|
+
* @param {TooltipOptions['content']} content
|
|
114
|
+
* @returns {this}
|
|
115
|
+
*/
|
|
116
|
+
setContent(content: TooltipOptions["content"]): this;
|
|
117
|
+
/**
|
|
118
|
+
* @param {import('../elements.js').TooltipPosition} position
|
|
119
|
+
* @returns {this}
|
|
120
|
+
*/
|
|
121
|
+
setPosition(position: import("../elements.js").TooltipPosition): this;
|
|
122
|
+
/**
|
|
123
|
+
* @param {TooltipOptions} [newOptions]
|
|
124
|
+
* @returns {this}
|
|
125
|
+
*/
|
|
126
|
+
setOptions(newOptions?: TooltipOptions): this;
|
|
127
|
+
_applyOptions(): void;
|
|
128
|
+
}
|
|
129
|
+
export default Tooltip;
|
|
130
|
+
/**
|
|
131
|
+
* Show / hide delays in ms.
|
|
132
|
+
*/
|
|
133
|
+
export type TooltipDelay = {
|
|
134
|
+
show?: number;
|
|
135
|
+
hide?: number;
|
|
136
|
+
};
|
|
137
|
+
export type TooltipOptions = {
|
|
138
|
+
/**
|
|
139
|
+
* - Tooltip content (falls back to data-tooltip, then title)
|
|
140
|
+
*/
|
|
141
|
+
content?: string | Node | ((target: HTMLElement) => string | Node);
|
|
142
|
+
/**
|
|
143
|
+
* - Position relative to element (flips when there is no room)
|
|
144
|
+
*/
|
|
145
|
+
position?: import("../elements.js").TooltipPosition;
|
|
146
|
+
/**
|
|
147
|
+
* - Alias of `position`
|
|
148
|
+
*/
|
|
149
|
+
placement?: import("../elements.js").TooltipPosition;
|
|
150
|
+
/**
|
|
151
|
+
* - How to trigger; several separated by spaces ('hover focus')
|
|
152
|
+
*/
|
|
153
|
+
trigger?: "hover" | "click" | "focus" | "manual" | (string & {});
|
|
154
|
+
/**
|
|
155
|
+
* - Show delay in ms, or {show, hide}
|
|
156
|
+
*/
|
|
157
|
+
delay?: number | TooltipDelay;
|
|
158
|
+
/**
|
|
159
|
+
* - Hide delay in ms
|
|
160
|
+
*/
|
|
161
|
+
hideDelay?: number;
|
|
162
|
+
/**
|
|
163
|
+
* - Fade in and out
|
|
164
|
+
*/
|
|
165
|
+
animation?: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* - Gap in px between target and bubble
|
|
168
|
+
*/
|
|
169
|
+
offset?: number;
|
|
170
|
+
/**
|
|
171
|
+
* - String content is HTML (sanitised unless `safe: false`), not text
|
|
172
|
+
*/
|
|
173
|
+
html?: boolean;
|
|
174
|
+
/**
|
|
175
|
+
* - Sanitise HTML content
|
|
176
|
+
*/
|
|
177
|
+
safe?: boolean;
|
|
178
|
+
/**
|
|
179
|
+
* - Show at once
|
|
180
|
+
*/
|
|
181
|
+
visible?: boolean;
|
|
182
|
+
/**
|
|
183
|
+
* - Extra classes on the bubble
|
|
184
|
+
*/
|
|
185
|
+
className?: string;
|
|
186
|
+
/**
|
|
187
|
+
* - Any CSS width; numbers are px
|
|
188
|
+
*/
|
|
189
|
+
maxWidth?: number | string | null;
|
|
190
|
+
/**
|
|
191
|
+
* - When the tooltip shows
|
|
192
|
+
*/
|
|
193
|
+
onShow?: ((tooltip: TooltipInstance) => void) | null;
|
|
194
|
+
/**
|
|
195
|
+
* - When the tooltip hides
|
|
196
|
+
*/
|
|
197
|
+
onHide?: ((tooltip: TooltipInstance) => void) | null;
|
|
198
|
+
};
|
|
199
|
+
export type TooltipInstance = Tooltip;
|
|
200
|
+
import Component from '../component.js';
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E.virtualList: one instance per container; calling it again updates the existing one.
|
|
3
|
+
* @param {Element} el
|
|
4
|
+
* @param {VirtualListOptions} [options]
|
|
5
|
+
* @returns {VirtualList}
|
|
6
|
+
*/
|
|
7
|
+
export function virtualListFor(el: Element, options?: VirtualListOptions): VirtualList;
|
|
8
|
+
/**
|
|
9
|
+
* First and last index, both inclusive (end is -1 for an empty list).
|
|
10
|
+
* @typedef {object} VirtualListRange
|
|
11
|
+
* @property {number} start - First index, inclusive
|
|
12
|
+
* @property {number} end - Last index, inclusive (-1 for an empty list)
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* A loading / end / error row: HTML string, a node, or a function returning either.
|
|
16
|
+
* @typedef {string|Node|((error?: unknown) => string|Node|null)|null} VirtualListTemplate
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @template [T=any]
|
|
20
|
+
* @typedef {object} VirtualListOptions
|
|
21
|
+
* @property {T[]|null} [items]
|
|
22
|
+
* @property {number} [count] - With getItem, instead of items
|
|
23
|
+
* @property {((index: number) => T)|null} [getItem]
|
|
24
|
+
* @property {number|'auto'} [itemHeight] - px, or 'auto' to measure each row (default 40)
|
|
25
|
+
* @property {number} [estimatedItemHeight] - Height assumed for unmeasured rows in 'auto' mode (default 40)
|
|
26
|
+
* @property {number} [overscan] - Rows rendered beyond each edge (default 4)
|
|
27
|
+
* @property {((item: T, index: number) => string|Node)|null} [render] - A string is HTML (sanitised unless safe: false); an Element goes in as it is
|
|
28
|
+
* @property {boolean} [safe] - false: render() strings are inserted unsanitised (default true)
|
|
29
|
+
* @property {string|((item: T, index: number) => unknown)|null} [keyField] - Property name or function giving each item a stable key (default: the index)
|
|
30
|
+
* @property {string|null} [label] - aria-label for the list
|
|
31
|
+
* @property {string} [rowClass] - Extra class on every row
|
|
32
|
+
* @property {((info: {count: number, page: number}) => Promise<T[]|{items: T[], done?: boolean}>)|null} [loadMore] - Called near the end; resolves to the next items, or {items, done}
|
|
33
|
+
* @property {number} [threshold] - px from the end at which loadMore is called (default 200)
|
|
34
|
+
* @property {VirtualListTemplate} [loadingTemplate]
|
|
35
|
+
* @property {VirtualListTemplate} [endTemplate]
|
|
36
|
+
* @property {VirtualListTemplate} [errorTemplate] - A [data-vlist-retry] element inside it retries
|
|
37
|
+
* @property {((range: VirtualListRange) => void)|null} [onRender]
|
|
38
|
+
* @property {((visible: VirtualListRange) => void)|null} [onScroll]
|
|
39
|
+
* @property {((info: {count: number, page: number}) => void)|null} [onLoadMore]
|
|
40
|
+
* @property {((items: T[]) => void)|null} [onLoaded]
|
|
41
|
+
* @property {(() => void)|null} [onEnd]
|
|
42
|
+
* @property {((error: unknown) => void)|null} [onError]
|
|
43
|
+
* @property {((item: T, index: number, event: MouseEvent|KeyboardEvent) => void)|null} [onItemClick]
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* @template [T=any]
|
|
47
|
+
* @typedef {VirtualList<T>} VirtualListInstance
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* @template [T=any]
|
|
51
|
+
*/
|
|
52
|
+
export class VirtualList<T = any> extends Component {
|
|
53
|
+
static defaults: {
|
|
54
|
+
items: any;
|
|
55
|
+
count: number;
|
|
56
|
+
getItem: any;
|
|
57
|
+
itemHeight: number;
|
|
58
|
+
estimatedItemHeight: number;
|
|
59
|
+
overscan: number;
|
|
60
|
+
render: any;
|
|
61
|
+
safe: boolean;
|
|
62
|
+
keyField: any;
|
|
63
|
+
label: any;
|
|
64
|
+
loadMore: any;
|
|
65
|
+
threshold: number;
|
|
66
|
+
loadingTemplate: any;
|
|
67
|
+
endTemplate: any;
|
|
68
|
+
errorTemplate: any;
|
|
69
|
+
rowClass: string;
|
|
70
|
+
onRender: any;
|
|
71
|
+
onScroll: any;
|
|
72
|
+
onLoadMore: any;
|
|
73
|
+
onLoaded: any;
|
|
74
|
+
onEnd: any;
|
|
75
|
+
onError: any;
|
|
76
|
+
onItemClick: any;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* @param {string|HTMLElement} element - The scrolling container
|
|
80
|
+
* @param {VirtualListOptions<T>} [options]
|
|
81
|
+
*/
|
|
82
|
+
constructor(element: string | HTMLElement, options?: VirtualListOptions<T>);
|
|
83
|
+
_id: string;
|
|
84
|
+
_rows: Map<any, any>;
|
|
85
|
+
_rowByEl: WeakMap<object, any>;
|
|
86
|
+
_heights: Map<any, any>;
|
|
87
|
+
_offsets: Float64Array;
|
|
88
|
+
_dirtyFrom: number;
|
|
89
|
+
_active: number;
|
|
90
|
+
_focusWithin: boolean;
|
|
91
|
+
_frame: number;
|
|
92
|
+
_range: {
|
|
93
|
+
start: number;
|
|
94
|
+
end: number;
|
|
95
|
+
};
|
|
96
|
+
_load: {
|
|
97
|
+
busy: boolean;
|
|
98
|
+
done: boolean;
|
|
99
|
+
error: any;
|
|
100
|
+
page: number;
|
|
101
|
+
gen: number;
|
|
102
|
+
};
|
|
103
|
+
_statusHeight: number;
|
|
104
|
+
_setData(items: any, count: any, getItem: any): void;
|
|
105
|
+
_items: any[];
|
|
106
|
+
_count: number;
|
|
107
|
+
_getItem: any;
|
|
108
|
+
/** How many rows there are. */
|
|
109
|
+
get count(): number;
|
|
110
|
+
_itemAt(i: any): any;
|
|
111
|
+
_keyOf(item: any, i: any): any;
|
|
112
|
+
get _fixed(): boolean;
|
|
113
|
+
get _rowHeight(): number;
|
|
114
|
+
get _estimate(): number;
|
|
115
|
+
/** Bring the offset table up to date ('auto' only). Linear from the first change. */
|
|
116
|
+
_syncOffsets(): void;
|
|
117
|
+
_dirty(index: any): void;
|
|
118
|
+
_offset(i: any): number;
|
|
119
|
+
_heightOf(i: any): number;
|
|
120
|
+
_total(): number;
|
|
121
|
+
/** The index of the row covering y (clamped to the list). */
|
|
122
|
+
_indexAt(y: any): number;
|
|
123
|
+
_viewport(): number;
|
|
124
|
+
/**
|
|
125
|
+
* The rows at least partly on screen, first and last index inclusive.
|
|
126
|
+
* @returns {VirtualListRange} end is -1 for an empty list
|
|
127
|
+
*/
|
|
128
|
+
getVisibleRange(): VirtualListRange;
|
|
129
|
+
_build(): void;
|
|
130
|
+
_original: DocumentFragment;
|
|
131
|
+
_spacer: HTMLDivElement;
|
|
132
|
+
_list: HTMLDivElement;
|
|
133
|
+
_status: HTMLDivElement;
|
|
134
|
+
_hostObserver: ResizeObserver;
|
|
135
|
+
_rowObserver: ResizeObserver;
|
|
136
|
+
_schedule(): void;
|
|
137
|
+
_onScroll: () => void;
|
|
138
|
+
_makeRow(): HTMLDivElement;
|
|
139
|
+
_fillRow(row: any, item: any, index: any): void;
|
|
140
|
+
/**
|
|
141
|
+
* Render the rows the viewport needs. Synchronous: used by the scroll frame and by
|
|
142
|
+
* every method that changes the data.
|
|
143
|
+
* @param {boolean} [force] - re-render every row's content, not just new ones
|
|
144
|
+
*/
|
|
145
|
+
_render(force?: boolean): void;
|
|
146
|
+
/** One placement pass. @returns {{range: boolean, resized: boolean}} */
|
|
147
|
+
_renderPass(force: any): {
|
|
148
|
+
range: boolean;
|
|
149
|
+
resized: boolean;
|
|
150
|
+
};
|
|
151
|
+
_placeStatus(): void;
|
|
152
|
+
_onRowResize(entries: any): void;
|
|
153
|
+
_rowFor(index: any): any;
|
|
154
|
+
/** One tab stop: the active row, or the first row on screen when that is not rendered. */
|
|
155
|
+
_syncTabStop(): void;
|
|
156
|
+
_rowOf(target: any): any;
|
|
157
|
+
_onClick: (e: any) => void;
|
|
158
|
+
_onFocusIn: (e: any) => void;
|
|
159
|
+
_onFocusOut: (e: any) => void;
|
|
160
|
+
_onKey: (e: any) => void;
|
|
161
|
+
/**
|
|
162
|
+
* Make a row the active one, scroll it into view and focus it.
|
|
163
|
+
* @param {number} index
|
|
164
|
+
* @returns {this}
|
|
165
|
+
*/
|
|
166
|
+
focusIndex(index: number): this;
|
|
167
|
+
_maybeLoad(): void;
|
|
168
|
+
_loadNext(): void;
|
|
169
|
+
/**
|
|
170
|
+
* Try a failed load again.
|
|
171
|
+
* @returns {this}
|
|
172
|
+
*/
|
|
173
|
+
retry(): this;
|
|
174
|
+
/**
|
|
175
|
+
* Whether loadMore has said there is nothing more.
|
|
176
|
+
* @returns {boolean}
|
|
177
|
+
*/
|
|
178
|
+
isDone(): boolean;
|
|
179
|
+
_template(kind: any): any;
|
|
180
|
+
_showStatus(kind: any): void;
|
|
181
|
+
/**
|
|
182
|
+
* Replace every item. Resets infinite loading (a new list can load more again).
|
|
183
|
+
* @param {T[]} items
|
|
184
|
+
* @returns {this}
|
|
185
|
+
*/
|
|
186
|
+
setItems(items: T[]): this;
|
|
187
|
+
/**
|
|
188
|
+
* Count mode: change how many rows `getItem` serves.
|
|
189
|
+
* @param {number} count
|
|
190
|
+
* @returns {this}
|
|
191
|
+
*/
|
|
192
|
+
setCount(count: number): this;
|
|
193
|
+
_resetLoading(): void;
|
|
194
|
+
_materialise(): void;
|
|
195
|
+
_appendItems(items: any): void;
|
|
196
|
+
/**
|
|
197
|
+
* Add items at the end.
|
|
198
|
+
* @param {T[]} items
|
|
199
|
+
* @returns {this}
|
|
200
|
+
*/
|
|
201
|
+
append(items: T[]): this;
|
|
202
|
+
/**
|
|
203
|
+
* Add items at the start without moving what is on screen.
|
|
204
|
+
* @param {T[]} items
|
|
205
|
+
* @returns {this}
|
|
206
|
+
*/
|
|
207
|
+
prepend(items: T[]): this;
|
|
208
|
+
/**
|
|
209
|
+
* The index of the item with a key, or -1.
|
|
210
|
+
* @param {unknown} key
|
|
211
|
+
* @returns {number}
|
|
212
|
+
*/
|
|
213
|
+
indexOfKey(key: unknown): number;
|
|
214
|
+
/**
|
|
215
|
+
* Replace one item. A number is an index; anything else is a key (for numeric keys,
|
|
216
|
+
* pass `list.indexOfKey(key)`).
|
|
217
|
+
* @param {number|unknown} indexOrKey
|
|
218
|
+
* @param {T} item
|
|
219
|
+
* @returns {this}
|
|
220
|
+
*/
|
|
221
|
+
update(indexOrKey: number | unknown, item: T): this;
|
|
222
|
+
/**
|
|
223
|
+
* Scroll so a row is in view.
|
|
224
|
+
* @param {number} index
|
|
225
|
+
* @param {{align?: 'start'|'center'|'end'|'auto', smooth?: boolean}} [opts]
|
|
226
|
+
* @returns {this}
|
|
227
|
+
*/
|
|
228
|
+
scrollToIndex(index: number, opts?: {
|
|
229
|
+
align?: "start" | "center" | "end" | "auto";
|
|
230
|
+
smooth?: boolean;
|
|
231
|
+
}): this;
|
|
232
|
+
/**
|
|
233
|
+
* Re-render every rendered row (and re-measure them in 'auto' mode), e.g. after
|
|
234
|
+
* the data an item points at has changed.
|
|
235
|
+
* @returns {this}
|
|
236
|
+
*/
|
|
237
|
+
refresh(): this;
|
|
238
|
+
/**
|
|
239
|
+
* The rendered range, overscan included.
|
|
240
|
+
* @returns {VirtualListRange}
|
|
241
|
+
*/
|
|
242
|
+
getRenderedRange(): VirtualListRange;
|
|
243
|
+
_applyOptions(): void;
|
|
244
|
+
/**
|
|
245
|
+
* Update options at runtime; items / count / getItem replace the data.
|
|
246
|
+
* @param {VirtualListOptions<T>} [newOptions]
|
|
247
|
+
* @returns {this}
|
|
248
|
+
*/
|
|
249
|
+
setOptions(newOptions?: VirtualListOptions<T>): this;
|
|
250
|
+
}
|
|
251
|
+
export default VirtualList;
|
|
252
|
+
/**
|
|
253
|
+
* First and last index, both inclusive (end is -1 for an empty list).
|
|
254
|
+
*/
|
|
255
|
+
export type VirtualListRange = {
|
|
256
|
+
/**
|
|
257
|
+
* - First index, inclusive
|
|
258
|
+
*/
|
|
259
|
+
start: number;
|
|
260
|
+
/**
|
|
261
|
+
* - Last index, inclusive (-1 for an empty list)
|
|
262
|
+
*/
|
|
263
|
+
end: number;
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* A loading / end / error row: HTML string, a node, or a function returning either.
|
|
267
|
+
*/
|
|
268
|
+
export type VirtualListTemplate = string | Node | ((error?: unknown) => string | Node | null) | null;
|
|
269
|
+
export type VirtualListOptions<T = any> = {
|
|
270
|
+
items?: T[] | null;
|
|
271
|
+
/**
|
|
272
|
+
* - With getItem, instead of items
|
|
273
|
+
*/
|
|
274
|
+
count?: number;
|
|
275
|
+
getItem?: ((index: number) => T) | null;
|
|
276
|
+
/**
|
|
277
|
+
* - px, or 'auto' to measure each row (default 40)
|
|
278
|
+
*/
|
|
279
|
+
itemHeight?: number | "auto";
|
|
280
|
+
/**
|
|
281
|
+
* - Height assumed for unmeasured rows in 'auto' mode (default 40)
|
|
282
|
+
*/
|
|
283
|
+
estimatedItemHeight?: number;
|
|
284
|
+
/**
|
|
285
|
+
* - Rows rendered beyond each edge (default 4)
|
|
286
|
+
*/
|
|
287
|
+
overscan?: number;
|
|
288
|
+
/**
|
|
289
|
+
* - A string is HTML (sanitised unless safe: false); an Element goes in as it is
|
|
290
|
+
*/
|
|
291
|
+
render?: ((item: T, index: number) => string | Node) | null;
|
|
292
|
+
/**
|
|
293
|
+
* - false: render() strings are inserted unsanitised (default true)
|
|
294
|
+
*/
|
|
295
|
+
safe?: boolean;
|
|
296
|
+
/**
|
|
297
|
+
* - Property name or function giving each item a stable key (default: the index)
|
|
298
|
+
*/
|
|
299
|
+
keyField?: string | ((item: T, index: number) => unknown) | null;
|
|
300
|
+
/**
|
|
301
|
+
* - aria-label for the list
|
|
302
|
+
*/
|
|
303
|
+
label?: string | null;
|
|
304
|
+
/**
|
|
305
|
+
* - Extra class on every row
|
|
306
|
+
*/
|
|
307
|
+
rowClass?: string;
|
|
308
|
+
/**
|
|
309
|
+
* - Called near the end; resolves to the next items, or {items, done}
|
|
310
|
+
*/
|
|
311
|
+
loadMore?: ((info: {
|
|
312
|
+
count: number;
|
|
313
|
+
page: number;
|
|
314
|
+
}) => Promise<T[] | {
|
|
315
|
+
items: T[];
|
|
316
|
+
done?: boolean;
|
|
317
|
+
}>) | null;
|
|
318
|
+
/**
|
|
319
|
+
* - px from the end at which loadMore is called (default 200)
|
|
320
|
+
*/
|
|
321
|
+
threshold?: number;
|
|
322
|
+
loadingTemplate?: VirtualListTemplate;
|
|
323
|
+
endTemplate?: VirtualListTemplate;
|
|
324
|
+
/**
|
|
325
|
+
* - A [data-vlist-retry] element inside it retries
|
|
326
|
+
*/
|
|
327
|
+
errorTemplate?: VirtualListTemplate;
|
|
328
|
+
onRender?: ((range: VirtualListRange) => void) | null;
|
|
329
|
+
onScroll?: ((visible: VirtualListRange) => void) | null;
|
|
330
|
+
onLoadMore?: ((info: {
|
|
331
|
+
count: number;
|
|
332
|
+
page: number;
|
|
333
|
+
}) => void) | null;
|
|
334
|
+
onLoaded?: ((items: T[]) => void) | null;
|
|
335
|
+
onEnd?: (() => void) | null;
|
|
336
|
+
onError?: ((error: unknown) => void) | null;
|
|
337
|
+
onItemClick?: ((item: T, index: number, event: MouseEvent | KeyboardEvent) => void) | null;
|
|
338
|
+
};
|
|
339
|
+
export type VirtualListInstance<T = any> = VirtualList<T>;
|
|
340
|
+
import Component from '../component.js';
|