@haiyue/ui 0.1.0 → 0.1.2
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/CHANGELOG.md +29 -0
- package/LICENSE +1 -1
- package/README.md +226 -2
- package/dist/border-beam.d.ts +26 -0
- package/dist/border-beam.js +174 -0
- package/dist/button.d.ts +10 -0
- package/dist/button.js +85 -0
- package/dist/checkbox.d.ts +2 -2
- package/dist/checkbox.js +11 -11
- package/dist/context-menu.d.ts +6 -6
- package/dist/context-menu.js +11 -9
- package/dist/dialog.d.ts +5 -5
- package/dist/dialog.js +18 -18
- package/dist/drawer.d.ts +49 -0
- package/dist/drawer.js +377 -0
- package/dist/dropdown.d.ts +9 -9
- package/dist/dropdown.js +9 -9
- package/dist/expandable.d.ts +32 -0
- package/dist/expandable.js +136 -0
- package/dist/history-controls.d.ts +40 -0
- package/dist/history-controls.js +123 -0
- package/dist/index.d.ts +36 -31
- package/dist/index.js +35 -85
- package/dist/input.d.ts +5 -5
- package/dist/input.js +13 -13
- package/dist/menu-shared.d.ts +4 -4
- package/dist/menu-shared.js +4 -4
- package/dist/notification.d.ts +55 -0
- package/dist/notification.js +357 -0
- package/dist/radio.d.ts +2 -2
- package/dist/radio.js +12 -12
- package/dist/range.d.ts +74 -0
- package/dist/range.js +393 -0
- package/dist/select.d.ts +6 -6
- package/dist/select.js +20 -20
- package/dist/split.d.ts +6 -6
- package/dist/split.js +14 -14
- package/dist/tabs.d.ts +10 -6
- package/dist/tabs.js +94 -30
- package/dist/tooltip.d.ts +4 -4
- package/dist/tooltip.js +9 -9
- package/dist/tree-model.d.ts +15 -7
- package/dist/tree-model.js +93 -80
- package/dist/tree-node.d.ts +3 -3
- package/dist/tree-node.js +3 -3
- package/dist/tree-types.d.ts +14 -14
- package/dist/tree.d.ts +9 -7
- package/dist/tree.js +68 -66
- package/dist/virtual-list.d.ts +61 -0
- package/dist/virtual-list.js +324 -0
- package/package.json +100 -7
- package/themes/haiyue-dark.css +46 -0
- package/themes/haiyue-light.css +46 -0
- package/src/checkbox.ts +0 -215
- package/src/context-menu.ts +0 -248
- package/src/dialog.ts +0 -195
- package/src/dropdown.ts +0 -249
- package/src/index.ts +0 -192
- package/src/input.ts +0 -150
- package/src/menu-shared.ts +0 -65
- package/src/radio.ts +0 -216
- package/src/select.ts +0 -271
- package/src/split.ts +0 -306
- package/src/tabs.ts +0 -182
- package/src/tooltip.ts +0 -321
- package/src/tree-model.ts +0 -305
- package/src/tree-node.ts +0 -67
- package/src/tree-types.ts +0 -47
- package/src/tree.ts +0 -1002
package/dist/tree.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
4
|
-
export declare class
|
|
1
|
+
import type { HYTreeNodeData } from './tree-types.js';
|
|
2
|
+
export { HYTreeNode } from './tree-node.js';
|
|
3
|
+
export type { HYTreeDataChangeDetail, HYTreeDropPosition, HYTreeNodeContextMenuDetail, HYTreeNodeData, HYTreeSelectionChangeDetail, } from './tree-types.js';
|
|
4
|
+
export declare class HYTree extends HTMLElement {
|
|
5
5
|
private static readonly VIRTUALIZATION_THRESHOLD;
|
|
6
6
|
private static readonly ROW_HEIGHT;
|
|
7
7
|
private static readonly OVERSCAN_ROWS;
|
|
@@ -25,15 +25,15 @@ export declare class GETree extends HTMLElement {
|
|
|
25
25
|
connectedCallback(): void;
|
|
26
26
|
disconnectedCallback(): void;
|
|
27
27
|
attributeChangedCallback(name: string): void;
|
|
28
|
-
get data():
|
|
29
|
-
set data(value:
|
|
28
|
+
get data(): HYTreeNodeData[];
|
|
29
|
+
set data(value: HYTreeNodeData[]);
|
|
30
30
|
get selectedId(): string | null;
|
|
31
31
|
set selectedId(value: string | null);
|
|
32
32
|
get selectedIds(): string[];
|
|
33
33
|
set selectedIds(value: string[]);
|
|
34
34
|
get allowDrag(): boolean;
|
|
35
35
|
set allowDrag(value: boolean);
|
|
36
|
-
updateData(value:
|
|
36
|
+
updateData(value: HYTreeNodeData[]): void;
|
|
37
37
|
expand(id: string): void;
|
|
38
38
|
collapse(id: string): void;
|
|
39
39
|
toggle(id: string): void;
|
|
@@ -76,6 +76,8 @@ export declare class GETree extends HTMLElement {
|
|
|
76
76
|
private _onDrop;
|
|
77
77
|
private _onKeyDown;
|
|
78
78
|
private _handleNavigationKey;
|
|
79
|
+
private _linearNavigationTarget;
|
|
80
|
+
private _handleNavigationAction;
|
|
79
81
|
private _moveActiveRight;
|
|
80
82
|
private _moveActiveLeft;
|
|
81
83
|
private _getActiveVisibleId;
|
package/dist/tree.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
1
|
+
import { HYTreeModel } from './tree-model.js';
|
|
2
|
+
import { HYTreeNode } from './tree-node.js';
|
|
3
|
+
export { HYTreeNode } from './tree-node.js';
|
|
4
4
|
const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
|
|
5
5
|
const TREE_TOGGLE_ICON_PATHS = [
|
|
6
6
|
'M318.57 223.95l322.99 322.99c21.87 21.87 57.33 21.87 79.2 0 21.87-21.87 21.87-57.33 0-79.2l-323-322.99c-21.87-21.87-57.33-21.87-79.2 0-21.86 21.87-21.86 57.33 0.01 79.2z',
|
|
@@ -32,7 +32,7 @@ function createTreeToggleIconSvg() {
|
|
|
32
32
|
}
|
|
33
33
|
return svg;
|
|
34
34
|
}
|
|
35
|
-
export class
|
|
35
|
+
export class HYTree extends HTMLElement {
|
|
36
36
|
static VIRTUALIZATION_THRESHOLD = 160;
|
|
37
37
|
static ROW_HEIGHT = 28;
|
|
38
38
|
static OVERSCAN_ROWS = 8;
|
|
@@ -47,7 +47,7 @@ export class GETree extends HTMLElement {
|
|
|
47
47
|
_selectionAnchorId = null;
|
|
48
48
|
_activeId = null;
|
|
49
49
|
_expandedIds = new Set();
|
|
50
|
-
_model = new
|
|
50
|
+
_model = new HYTreeModel(this._expandedIds);
|
|
51
51
|
_dragNodeId = null;
|
|
52
52
|
_syncingSelectionAttributes = false;
|
|
53
53
|
_resizeObserver = null;
|
|
@@ -66,8 +66,8 @@ export class GETree extends HTMLElement {
|
|
|
66
66
|
justify-content: flex-start;
|
|
67
67
|
width: 100%;
|
|
68
68
|
min-height: 0;
|
|
69
|
-
color: var(--
|
|
70
|
-
background: var(--
|
|
69
|
+
color: var(--hy-tree-text-color, var(--hy-text-color, #c8d3e4));
|
|
70
|
+
background: var(--hy-panel-bg-color, #171d28);
|
|
71
71
|
font: 12px system-ui, sans-serif;
|
|
72
72
|
text-align: left;
|
|
73
73
|
user-select: none;
|
|
@@ -85,7 +85,7 @@ export class GETree extends HTMLElement {
|
|
|
85
85
|
align-items: center;
|
|
86
86
|
gap: 4px;
|
|
87
87
|
border-radius: 4px;
|
|
88
|
-
color: var(--
|
|
88
|
+
color: var(--hy-tree-text-color, var(--hy-text-color, #c8d3e4));
|
|
89
89
|
cursor: default;
|
|
90
90
|
}
|
|
91
91
|
.virtual-spacer {
|
|
@@ -93,18 +93,18 @@ export class GETree extends HTMLElement {
|
|
|
93
93
|
pointer-events: none;
|
|
94
94
|
}
|
|
95
95
|
.row:hover {
|
|
96
|
-
background: var(--
|
|
96
|
+
background: var(--hy-hover-bg-color, #222b3a);
|
|
97
97
|
}
|
|
98
98
|
.row.selected {
|
|
99
|
-
background: var(--
|
|
100
|
-
color: var(--
|
|
99
|
+
background: var(--hy-selected-bg-color, var(--hy-accent-strong-color, #255a91));
|
|
100
|
+
color: var(--hy-selected-text-color, #fff);
|
|
101
101
|
}
|
|
102
102
|
.row.active:not(.selected) {
|
|
103
|
-
background: var(--
|
|
104
|
-
color: var(--
|
|
103
|
+
background: var(--hy-tree-active-bg-color, var(--hy-hover-bg-color, #222b3a));
|
|
104
|
+
color: var(--hy-tree-active-text-color, var(--hy-tree-text-color, #dce8fb));
|
|
105
105
|
}
|
|
106
106
|
.row.active {
|
|
107
|
-
outline: var(--
|
|
107
|
+
outline: var(--hy-tree-active-ring-width, 1px) solid var(--hy-tree-active-ring-color, var(--hy-focus-border-color, #3d6fa8));
|
|
108
108
|
outline-offset: -1px;
|
|
109
109
|
}
|
|
110
110
|
.toggle {
|
|
@@ -114,7 +114,7 @@ export class GETree extends HTMLElement {
|
|
|
114
114
|
border: 0;
|
|
115
115
|
padding: 0;
|
|
116
116
|
background: transparent;
|
|
117
|
-
color: var(--
|
|
117
|
+
color: var(--hy-tree-icon-color, var(--hy-secondary-text-color, #8fa7c8));
|
|
118
118
|
cursor: pointer;
|
|
119
119
|
display: inline-grid;
|
|
120
120
|
place-items: center;
|
|
@@ -126,29 +126,29 @@ export class GETree extends HTMLElement {
|
|
|
126
126
|
.toggle-icon {
|
|
127
127
|
width: 12px;
|
|
128
128
|
height: 12px;
|
|
129
|
-
color: var(--
|
|
129
|
+
color: var(--hy-tree-icon-color, var(--hy-secondary-text-color, #8fa7c8));
|
|
130
130
|
transition: transform 0.16s ease, color 0.16s ease;
|
|
131
131
|
}
|
|
132
132
|
.toggle.expanded .toggle-icon {
|
|
133
133
|
transform: rotate(90deg);
|
|
134
|
-
color: var(--
|
|
134
|
+
color: var(--hy-tree-icon-active-color, #b9d4ff);
|
|
135
135
|
}
|
|
136
136
|
.row:hover .toggle-icon {
|
|
137
|
-
color: var(--
|
|
137
|
+
color: var(--hy-tree-icon-active-color, #b9d4ff);
|
|
138
138
|
}
|
|
139
139
|
.content {
|
|
140
140
|
min-width: 0;
|
|
141
141
|
flex: 1 1 auto;
|
|
142
142
|
}
|
|
143
143
|
.row.drop-before {
|
|
144
|
-
box-shadow: inset 0 2px 0 var(--
|
|
144
|
+
box-shadow: inset 0 2px 0 var(--hy-drop-indicator-color, #62a8ff);
|
|
145
145
|
}
|
|
146
146
|
.row.drop-after {
|
|
147
|
-
box-shadow: inset 0 -2px 0 var(--
|
|
147
|
+
box-shadow: inset 0 -2px 0 var(--hy-drop-indicator-color, #62a8ff);
|
|
148
148
|
}
|
|
149
149
|
.row.drop-inside {
|
|
150
|
-
outline: 1px solid var(--
|
|
151
|
-
background: var(--
|
|
150
|
+
outline: 1px solid var(--hy-drop-indicator-color, #62a8ff);
|
|
151
|
+
background: var(--hy-drop-target-bg-color, #223650);
|
|
152
152
|
}
|
|
153
153
|
`;
|
|
154
154
|
this._list.className = 'list';
|
|
@@ -299,7 +299,7 @@ export class GETree extends HTMLElement {
|
|
|
299
299
|
this._model.setData(this._data);
|
|
300
300
|
}
|
|
301
301
|
catch (error) {
|
|
302
|
-
console.warn('Invalid
|
|
302
|
+
console.warn('Invalid hy-tree data attribute.', error);
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
305
|
_seedExpanded(nodes) {
|
|
@@ -320,7 +320,7 @@ export class GETree extends HTMLElement {
|
|
|
320
320
|
const visibleIds = new Set();
|
|
321
321
|
const fragment = document.createDocumentFragment();
|
|
322
322
|
if (window.start > 0)
|
|
323
|
-
fragment.append(this._createVirtualSpacer(window.start *
|
|
323
|
+
fragment.append(this._createVirtualSpacer(window.start * HYTree.ROW_HEIGHT));
|
|
324
324
|
for (let index = window.start; index < window.end; index++) {
|
|
325
325
|
const item = visible[index];
|
|
326
326
|
if (!item)
|
|
@@ -331,7 +331,7 @@ export class GETree extends HTMLElement {
|
|
|
331
331
|
fragment.append(rendered.row);
|
|
332
332
|
}
|
|
333
333
|
if (window.end < visible.length) {
|
|
334
|
-
fragment.append(this._createVirtualSpacer((visible.length - window.end) *
|
|
334
|
+
fragment.append(this._createVirtualSpacer((visible.length - window.end) * HYTree.ROW_HEIGHT));
|
|
335
335
|
}
|
|
336
336
|
for (const [id, rendered] of this._rowCache) {
|
|
337
337
|
if (visibleIds.has(id))
|
|
@@ -343,13 +343,13 @@ export class GETree extends HTMLElement {
|
|
|
343
343
|
}
|
|
344
344
|
_getRenderWindow(itemCount) {
|
|
345
345
|
const viewportHeight = this.clientHeight;
|
|
346
|
-
if (itemCount <
|
|
346
|
+
if (itemCount < HYTree.VIRTUALIZATION_THRESHOLD || viewportHeight <= 0)
|
|
347
347
|
return { start: 0, end: itemCount };
|
|
348
|
-
const first = Math.floor(this.scrollTop /
|
|
349
|
-
const last = Math.ceil((this.scrollTop + viewportHeight) /
|
|
348
|
+
const first = Math.floor(this.scrollTop / HYTree.ROW_HEIGHT);
|
|
349
|
+
const last = Math.ceil((this.scrollTop + viewportHeight) / HYTree.ROW_HEIGHT);
|
|
350
350
|
return {
|
|
351
|
-
start: Math.max(0, first -
|
|
352
|
-
end: Math.min(itemCount, last +
|
|
351
|
+
start: Math.max(0, first - HYTree.OVERSCAN_ROWS),
|
|
352
|
+
end: Math.min(itemCount, last + HYTree.OVERSCAN_ROWS),
|
|
353
353
|
};
|
|
354
354
|
}
|
|
355
355
|
_createVirtualSpacer(height) {
|
|
@@ -372,7 +372,7 @@ export class GETree extends HTMLElement {
|
|
|
372
372
|
const row = document.createElement('div');
|
|
373
373
|
const toggle = document.createElement('button');
|
|
374
374
|
const content = document.createElement('div');
|
|
375
|
-
const renderer = document.createElement('
|
|
375
|
+
const renderer = document.createElement('hy-tree-node');
|
|
376
376
|
row.className = 'row';
|
|
377
377
|
row.dataset.id = id;
|
|
378
378
|
toggle.type = 'button';
|
|
@@ -380,7 +380,7 @@ export class GETree extends HTMLElement {
|
|
|
380
380
|
content.className = 'content';
|
|
381
381
|
content.append(renderer);
|
|
382
382
|
row.append(toggle, content);
|
|
383
|
-
const rendered = { row, toggle, content, renderer, rendererTag: '
|
|
383
|
+
const rendered = { row, toggle, content, renderer, rendererTag: 'hy-tree-node' };
|
|
384
384
|
this._rowCache.set(id, rendered);
|
|
385
385
|
return rendered;
|
|
386
386
|
}
|
|
@@ -408,7 +408,7 @@ export class GETree extends HTMLElement {
|
|
|
408
408
|
this._syncRenderer(rendered.renderer, node, depth, expanded, hasChildren, selected);
|
|
409
409
|
}
|
|
410
410
|
_getRendererTag(node) {
|
|
411
|
-
return typeof node.renderer === 'string' && node.renderer ? node.renderer : '
|
|
411
|
+
return typeof node.renderer === 'string' && node.renderer ? node.renderer : 'hy-tree-node';
|
|
412
412
|
}
|
|
413
413
|
_syncRenderer(el, node, depth, expanded, hasChildren, selected) {
|
|
414
414
|
el.node = node;
|
|
@@ -540,7 +540,7 @@ export class GETree extends HTMLElement {
|
|
|
540
540
|
this._activeId = this._selectedId;
|
|
541
541
|
}
|
|
542
542
|
catch (error) {
|
|
543
|
-
console.warn('Invalid
|
|
543
|
+
console.warn('Invalid hy-tree selected-ids attribute.', error);
|
|
544
544
|
this._setSelectionFromSelectedIdAttribute();
|
|
545
545
|
}
|
|
546
546
|
}
|
|
@@ -698,33 +698,33 @@ export class GETree extends HTMLElement {
|
|
|
698
698
|
if (activeId === undefined)
|
|
699
699
|
return false;
|
|
700
700
|
const activeIndex = this._model.visibleIndex.get(activeId) ?? 0;
|
|
701
|
-
|
|
702
|
-
|
|
701
|
+
const linearTarget = this._linearNavigationTarget(event.key, activeIndex, visibleIds);
|
|
702
|
+
if (linearTarget) {
|
|
703
|
+
this._setActiveId(linearTarget);
|
|
703
704
|
return true;
|
|
704
705
|
}
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
return
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
return
|
|
716
|
-
|
|
717
|
-
|
|
706
|
+
return this._handleNavigationAction(event.key, activeId);
|
|
707
|
+
}
|
|
708
|
+
_linearNavigationTarget(key, activeIndex, visibleIds) {
|
|
709
|
+
if (key === 'ArrowDown')
|
|
710
|
+
return visibleIds[Math.min(activeIndex + 1, visibleIds.length - 1)] ?? null;
|
|
711
|
+
if (key === 'ArrowUp')
|
|
712
|
+
return visibleIds[Math.max(activeIndex - 1, 0)] ?? null;
|
|
713
|
+
if (key === 'Home')
|
|
714
|
+
return visibleIds[0] ?? null;
|
|
715
|
+
if (key === 'End')
|
|
716
|
+
return visibleIds[visibleIds.length - 1] ?? null;
|
|
717
|
+
return null;
|
|
718
|
+
}
|
|
719
|
+
_handleNavigationAction(key, activeId) {
|
|
720
|
+
if (key === 'ArrowRight')
|
|
718
721
|
return this._moveActiveRight(activeId);
|
|
719
|
-
|
|
720
|
-
if (event.key === 'ArrowLeft') {
|
|
722
|
+
if (key === 'ArrowLeft')
|
|
721
723
|
return this._moveActiveLeft(activeId);
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
}
|
|
727
|
-
return false;
|
|
724
|
+
if (key !== 'Enter' && key !== ' ')
|
|
725
|
+
return false;
|
|
726
|
+
this._setSelection([activeId], activeId, true);
|
|
727
|
+
return true;
|
|
728
728
|
}
|
|
729
729
|
_moveActiveRight(activeId) {
|
|
730
730
|
const indexed = this._model.getIndexedNode(activeId);
|
|
@@ -799,7 +799,7 @@ export class GETree extends HTMLElement {
|
|
|
799
799
|
this.removeAttribute('aria-activedescendant');
|
|
800
800
|
}
|
|
801
801
|
_getTreeItemElementId(id) {
|
|
802
|
-
return `
|
|
802
|
+
return `hy-tree-item-${encodeURIComponent(id)}`;
|
|
803
803
|
}
|
|
804
804
|
_scrollActiveIntoView() {
|
|
805
805
|
if (!this._activeId)
|
|
@@ -809,8 +809,8 @@ export class GETree extends HTMLElement {
|
|
|
809
809
|
this._getVisibleFlatNodes();
|
|
810
810
|
const index = this._model.visibleIndex.get(this._activeId);
|
|
811
811
|
if (index !== undefined) {
|
|
812
|
-
const rowTop = index *
|
|
813
|
-
const rowBottom = rowTop +
|
|
812
|
+
const rowTop = index * HYTree.ROW_HEIGHT;
|
|
813
|
+
const rowBottom = rowTop + HYTree.ROW_HEIGHT;
|
|
814
814
|
if (rowTop < this.scrollTop)
|
|
815
815
|
this.scrollTop = rowTop;
|
|
816
816
|
else if (rowBottom > this.scrollTop + this.clientHeight)
|
|
@@ -822,7 +822,7 @@ export class GETree extends HTMLElement {
|
|
|
822
822
|
rendered?.row.scrollIntoView({ block: 'nearest' });
|
|
823
823
|
}
|
|
824
824
|
_onScroll = () => {
|
|
825
|
-
if (this._getVisibleFlatNodes().length >=
|
|
825
|
+
if (this._getVisibleFlatNodes().length >= HYTree.VIRTUALIZATION_THRESHOLD)
|
|
826
826
|
this._render();
|
|
827
827
|
};
|
|
828
828
|
_isEditableTarget(target) {
|
|
@@ -842,7 +842,9 @@ export class GETree extends HTMLElement {
|
|
|
842
842
|
if (this._clipboard.length === 0)
|
|
843
843
|
return false;
|
|
844
844
|
const target = this._selectedId ? this._model.findNode(this._selectedId) : null;
|
|
845
|
-
|
|
845
|
+
if (target && !target.node.children)
|
|
846
|
+
target.node.children = [];
|
|
847
|
+
const targetList = target?.node.children ?? this._data;
|
|
846
848
|
if (target) {
|
|
847
849
|
this._expandedIds.add(target.node.id);
|
|
848
850
|
}
|
|
@@ -932,11 +934,11 @@ export class GETree extends HTMLElement {
|
|
|
932
934
|
}
|
|
933
935
|
}
|
|
934
936
|
export function defineTreeComponents() {
|
|
935
|
-
if (!customElements.get('
|
|
936
|
-
customElements.define('
|
|
937
|
+
if (!customElements.get('hy-tree-node')) {
|
|
938
|
+
customElements.define('hy-tree-node', HYTreeNode);
|
|
937
939
|
}
|
|
938
|
-
if (!customElements.get('
|
|
939
|
-
customElements.define('
|
|
940
|
+
if (!customElements.get('hy-tree')) {
|
|
941
|
+
customElements.define('hy-tree', HYTree);
|
|
940
942
|
}
|
|
941
943
|
}
|
|
942
944
|
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export type HYVirtualListAlign = 'auto' | 'start' | 'center' | 'end';
|
|
2
|
+
export type HYVirtualListItemRenderer<T = unknown> = (item: T, index: number) => Node | string | number | null | undefined;
|
|
3
|
+
/** All end indexes are exclusive and can be passed directly to Array#slice. */
|
|
4
|
+
export interface HYVirtualListRange {
|
|
5
|
+
readonly startIndex: number;
|
|
6
|
+
readonly endIndex: number;
|
|
7
|
+
readonly visibleStartIndex: number;
|
|
8
|
+
readonly visibleEndIndex: number;
|
|
9
|
+
}
|
|
10
|
+
export interface HYVirtualListRangeChangeDetail extends HYVirtualListRange {
|
|
11
|
+
readonly renderedCount: number;
|
|
12
|
+
readonly total: number;
|
|
13
|
+
}
|
|
14
|
+
export interface HYVirtualListItemClickDetail<T = unknown> {
|
|
15
|
+
readonly item: T;
|
|
16
|
+
readonly index: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function calculateVirtualListRange(itemCount: number, itemHeight: number, viewportHeight: number, scrollTop: number, overscan: number): HYVirtualListRange;
|
|
19
|
+
export declare class HYVirtualList<T = unknown> extends HTMLElement {
|
|
20
|
+
private readonly _viewport;
|
|
21
|
+
private readonly _spacer;
|
|
22
|
+
private readonly _window;
|
|
23
|
+
private readonly _empty;
|
|
24
|
+
private _items;
|
|
25
|
+
private _renderItem;
|
|
26
|
+
private _itemHeight;
|
|
27
|
+
private _height;
|
|
28
|
+
private _overscan;
|
|
29
|
+
private _range;
|
|
30
|
+
private _resizeObserver;
|
|
31
|
+
private _connected;
|
|
32
|
+
private readonly _onScroll;
|
|
33
|
+
private readonly _onClick;
|
|
34
|
+
static get observedAttributes(): string[];
|
|
35
|
+
constructor();
|
|
36
|
+
connectedCallback(): void;
|
|
37
|
+
disconnectedCallback(): void;
|
|
38
|
+
attributeChangedCallback(): void;
|
|
39
|
+
get items(): readonly T[];
|
|
40
|
+
set items(value: readonly T[]);
|
|
41
|
+
get renderItem(): HYVirtualListItemRenderer<T> | null;
|
|
42
|
+
set renderItem(value: HYVirtualListItemRenderer<T> | null);
|
|
43
|
+
get itemHeight(): number;
|
|
44
|
+
set itemHeight(value: number);
|
|
45
|
+
get height(): number;
|
|
46
|
+
set height(value: number);
|
|
47
|
+
get overscan(): number;
|
|
48
|
+
set overscan(value: number);
|
|
49
|
+
refresh(): void;
|
|
50
|
+
scrollToIndex(index: number, align?: HYVirtualListAlign): void;
|
|
51
|
+
private _syncAttributes;
|
|
52
|
+
private _applyHeight;
|
|
53
|
+
private _readPositiveAttribute;
|
|
54
|
+
private _readNonNegativeAttribute;
|
|
55
|
+
private _reflectNumber;
|
|
56
|
+
private _clampScrollTop;
|
|
57
|
+
private _renderWindow;
|
|
58
|
+
private _handleClick;
|
|
59
|
+
private _replaceRows;
|
|
60
|
+
}
|
|
61
|
+
export declare function defineVirtualListComponents(): void;
|