@invopop/popui 0.0.20 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/BaseTable.svelte
CHANGED
|
@@ -16,6 +16,7 @@ let metaKeyPressed = false;
|
|
|
16
16
|
let shiftKeyPressed = false;
|
|
17
17
|
let lastSelected = {};
|
|
18
18
|
let selectWithArrowPosition = -1;
|
|
19
|
+
let selectionMode = "keyboard";
|
|
19
20
|
export let sortBy = "";
|
|
20
21
|
export let sortDirection = "";
|
|
21
22
|
export let fields = [];
|
|
@@ -74,8 +75,11 @@ function unselectRow(row) {
|
|
|
74
75
|
lastSelected = {};
|
|
75
76
|
}
|
|
76
77
|
}
|
|
78
|
+
function rowIsSelected(row) {
|
|
79
|
+
return selectedRows.find((r) => r[selectedTrackedBy] === row[selectedTrackedBy]);
|
|
80
|
+
}
|
|
77
81
|
function toggleRow(row) {
|
|
78
|
-
if (
|
|
82
|
+
if (rowIsSelected(row)) {
|
|
79
83
|
unselectRow(row);
|
|
80
84
|
} else {
|
|
81
85
|
selectRow(row);
|
|
@@ -96,9 +100,14 @@ function selectRange(to) {
|
|
|
96
100
|
</script>
|
|
97
101
|
|
|
98
102
|
<svelte:window
|
|
103
|
+
on:mousemove={() => {
|
|
104
|
+
selectionMode = 'mouse'
|
|
105
|
+
}}
|
|
99
106
|
on:keydown={(event) => {
|
|
100
107
|
event.preventDefault()
|
|
101
108
|
|
|
109
|
+
selectionMode = 'keyboard'
|
|
110
|
+
|
|
102
111
|
if (event.key === 'Escape' || event.key === 'Esc') {
|
|
103
112
|
selectedRows = []
|
|
104
113
|
lastSelected = {}
|
|
@@ -129,17 +138,21 @@ function selectRange(to) {
|
|
|
129
138
|
|
|
130
139
|
if (!to) return
|
|
131
140
|
|
|
132
|
-
|
|
133
|
-
|
|
141
|
+
if (!shiftKeyPressed) {
|
|
142
|
+
lastSelected = to
|
|
143
|
+
return
|
|
144
|
+
}
|
|
134
145
|
|
|
135
|
-
if (!
|
|
146
|
+
if (!rowIsSelected(lastSelected)) {
|
|
147
|
+
selectRow(lastSelected)
|
|
148
|
+
}
|
|
136
149
|
|
|
137
150
|
if (toIndex < selectWithArrowPosition) {
|
|
138
|
-
selectRow(previousSelected)
|
|
139
151
|
selectRow(to)
|
|
140
152
|
} else {
|
|
141
153
|
unselectRow(lastSelected)
|
|
142
154
|
}
|
|
155
|
+
lastSelected = to
|
|
143
156
|
}
|
|
144
157
|
|
|
145
158
|
if (event.key === 'ArrowDown') {
|
|
@@ -156,17 +169,21 @@ function selectRange(to) {
|
|
|
156
169
|
|
|
157
170
|
if (!to) return
|
|
158
171
|
|
|
159
|
-
|
|
160
|
-
|
|
172
|
+
if (!shiftKeyPressed) {
|
|
173
|
+
lastSelected = to
|
|
174
|
+
return
|
|
175
|
+
}
|
|
161
176
|
|
|
162
|
-
if (!
|
|
177
|
+
if (!rowIsSelected(lastSelected)) {
|
|
178
|
+
selectRow(lastSelected)
|
|
179
|
+
}
|
|
163
180
|
|
|
164
181
|
if (toIndex > selectWithArrowPosition) {
|
|
165
|
-
selectRow(previousSelected)
|
|
166
182
|
selectRow(to)
|
|
167
183
|
} else {
|
|
168
184
|
unselectRow(lastSelected)
|
|
169
185
|
}
|
|
186
|
+
lastSelected = to
|
|
170
187
|
}
|
|
171
188
|
}}
|
|
172
189
|
on:keyup={(event) => {
|
|
@@ -248,6 +265,7 @@ function selectRange(to) {
|
|
|
248
265
|
{selectable}
|
|
249
266
|
{selectedRows}
|
|
250
267
|
{selectedTrackedBy}
|
|
268
|
+
{selectionMode}
|
|
251
269
|
selected={lastSelected && row[selectedTrackedBy] === lastSelected[selectedTrackedBy]}
|
|
252
270
|
on:click={() => {
|
|
253
271
|
if (disableRowClick) return
|
|
@@ -273,6 +291,10 @@ function selectRange(to) {
|
|
|
273
291
|
unselectRow(row)
|
|
274
292
|
}
|
|
275
293
|
}}
|
|
294
|
+
on:hover={() => {
|
|
295
|
+
if (shiftKeyPressed) return
|
|
296
|
+
lastSelected = row
|
|
297
|
+
}}
|
|
276
298
|
on:action
|
|
277
299
|
on:copied
|
|
278
300
|
/>
|
package/dist/BaseTableRow.svelte
CHANGED
|
@@ -13,6 +13,7 @@ export let disableRowClick = false;
|
|
|
13
13
|
export let freeWrap = false;
|
|
14
14
|
export let selectable = false;
|
|
15
15
|
export let selected = false;
|
|
16
|
+
export let selectionMode = "keyboard";
|
|
16
17
|
export let selectedTrackedBy = "id";
|
|
17
18
|
export let selectedRows = [];
|
|
18
19
|
$:
|
|
@@ -25,7 +26,7 @@ $:
|
|
|
25
26
|
return field === row[selectedTrackedBy];
|
|
26
27
|
});
|
|
27
28
|
$:
|
|
28
|
-
if (selected) {
|
|
29
|
+
if (selectionMode === "keyboard" && selected) {
|
|
29
30
|
scrollIntoView();
|
|
30
31
|
}
|
|
31
32
|
function scrollIntoView() {
|
|
@@ -37,13 +38,19 @@ function scrollIntoView() {
|
|
|
37
38
|
class:cursor-pointer={!disableRowClick}
|
|
38
39
|
class:bg-neutral-50={selected}
|
|
39
40
|
class:bg-workspace-accent-50={checked && !selected}
|
|
40
|
-
class="hover:bg-neutral-50"
|
|
41
41
|
on:click
|
|
42
42
|
on:contextmenu|preventDefault={() => {
|
|
43
43
|
if (!actionsDropdown) return
|
|
44
44
|
|
|
45
45
|
actionsDropdown.toggle()
|
|
46
46
|
}}
|
|
47
|
+
on:mouseover={() => {
|
|
48
|
+
if (selectionMode === 'keyboard') return
|
|
49
|
+
dispatch('hover')
|
|
50
|
+
}}
|
|
51
|
+
on:focus={() => {
|
|
52
|
+
dispatch('focus')
|
|
53
|
+
}}
|
|
47
54
|
>
|
|
48
55
|
{#if selectable}
|
|
49
56
|
<td>
|
|
@@ -9,12 +9,15 @@ declare const __propDef: {
|
|
|
9
9
|
freeWrap?: boolean | undefined;
|
|
10
10
|
selectable?: boolean | undefined;
|
|
11
11
|
selected?: boolean | undefined;
|
|
12
|
+
selectionMode?: string | undefined;
|
|
12
13
|
selectedTrackedBy?: string | undefined;
|
|
13
14
|
selectedRows?: TableDataRow[] | undefined;
|
|
14
15
|
};
|
|
15
16
|
events: {
|
|
16
17
|
click: MouseEvent;
|
|
17
18
|
copied: CustomEvent<any>;
|
|
19
|
+
hover: CustomEvent<any>;
|
|
20
|
+
focus: CustomEvent<any>;
|
|
18
21
|
checked: CustomEvent<any>;
|
|
19
22
|
action: CustomEvent<any>;
|
|
20
23
|
} & {
|