@invopop/popui 0.0.19 → 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,7 +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) => {
|
|
107
|
+
event.preventDefault()
|
|
108
|
+
|
|
109
|
+
selectionMode = 'keyboard'
|
|
110
|
+
|
|
100
111
|
if (event.key === 'Escape' || event.key === 'Esc') {
|
|
101
112
|
selectedRows = []
|
|
102
113
|
lastSelected = {}
|
|
@@ -127,17 +138,21 @@ function selectRange(to) {
|
|
|
127
138
|
|
|
128
139
|
if (!to) return
|
|
129
140
|
|
|
130
|
-
|
|
131
|
-
|
|
141
|
+
if (!shiftKeyPressed) {
|
|
142
|
+
lastSelected = to
|
|
143
|
+
return
|
|
144
|
+
}
|
|
132
145
|
|
|
133
|
-
if (!
|
|
146
|
+
if (!rowIsSelected(lastSelected)) {
|
|
147
|
+
selectRow(lastSelected)
|
|
148
|
+
}
|
|
134
149
|
|
|
135
150
|
if (toIndex < selectWithArrowPosition) {
|
|
136
|
-
selectRow(previousSelected)
|
|
137
151
|
selectRow(to)
|
|
138
152
|
} else {
|
|
139
153
|
unselectRow(lastSelected)
|
|
140
154
|
}
|
|
155
|
+
lastSelected = to
|
|
141
156
|
}
|
|
142
157
|
|
|
143
158
|
if (event.key === 'ArrowDown') {
|
|
@@ -154,17 +169,21 @@ function selectRange(to) {
|
|
|
154
169
|
|
|
155
170
|
if (!to) return
|
|
156
171
|
|
|
157
|
-
|
|
158
|
-
|
|
172
|
+
if (!shiftKeyPressed) {
|
|
173
|
+
lastSelected = to
|
|
174
|
+
return
|
|
175
|
+
}
|
|
159
176
|
|
|
160
|
-
if (!
|
|
177
|
+
if (!rowIsSelected(lastSelected)) {
|
|
178
|
+
selectRow(lastSelected)
|
|
179
|
+
}
|
|
161
180
|
|
|
162
181
|
if (toIndex > selectWithArrowPosition) {
|
|
163
|
-
selectRow(previousSelected)
|
|
164
182
|
selectRow(to)
|
|
165
183
|
} else {
|
|
166
184
|
unselectRow(lastSelected)
|
|
167
185
|
}
|
|
186
|
+
lastSelected = to
|
|
168
187
|
}
|
|
169
188
|
}}
|
|
170
189
|
on:keyup={(event) => {
|
|
@@ -246,6 +265,7 @@ function selectRange(to) {
|
|
|
246
265
|
{selectable}
|
|
247
266
|
{selectedRows}
|
|
248
267
|
{selectedTrackedBy}
|
|
268
|
+
{selectionMode}
|
|
249
269
|
selected={lastSelected && row[selectedTrackedBy] === lastSelected[selectedTrackedBy]}
|
|
250
270
|
on:click={() => {
|
|
251
271
|
if (disableRowClick) return
|
|
@@ -271,6 +291,10 @@ function selectRange(to) {
|
|
|
271
291
|
unselectRow(row)
|
|
272
292
|
}
|
|
273
293
|
}}
|
|
294
|
+
on:hover={() => {
|
|
295
|
+
if (shiftKeyPressed) return
|
|
296
|
+
lastSelected = row
|
|
297
|
+
}}
|
|
274
298
|
on:action
|
|
275
299
|
on:copied
|
|
276
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
|
} & {
|