@humandialog/forms.svelte 1.6.9 → 1.7.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/components/list/List.d.ts +2 -0
- package/components/list/List.js +2 -0
- package/components/list/internal/list.element.svelte +31 -6
- package/components/list/list.svelte +18 -12
- package/components/list/list.svelte.d.ts +2 -0
- package/components/list/list.title.svelte +4 -0
- package/components/list/list.title.svelte.d.ts +2 -0
- package/package.json +1 -1
|
@@ -48,6 +48,8 @@ export declare class rList_definition {
|
|
|
48
48
|
onInsert: Function | undefined;
|
|
49
49
|
inserter_icon: boolean;
|
|
50
50
|
onOpen: Function | undefined;
|
|
51
|
+
downloadable: boolean;
|
|
52
|
+
downloadableFunc: Function | undefined;
|
|
51
53
|
properties: rList_property[];
|
|
52
54
|
tags: rList_property_tags | null;
|
|
53
55
|
}
|
package/components/list/List.js
CHANGED
|
@@ -16,6 +16,7 @@ import Summary from "./list.element.summary.svelte";
|
|
|
16
16
|
import Properties from "./list.element.props.svelte";
|
|
17
17
|
import { isDeviceSmallerThan } from "../../../utils";
|
|
18
18
|
import Icon from "../../icon.svelte";
|
|
19
|
+
import Spinner from "../../delayed.spinner.svelte";
|
|
19
20
|
import { rList_definition, rList_property_type } from "../List";
|
|
20
21
|
import { push, link } from "svelte-spa-router";
|
|
21
22
|
import { FaExternalLinkAlt, FaRegSquare, FaRegCheckSquare } from "svelte-icons/fa/";
|
|
@@ -44,7 +45,9 @@ $:
|
|
|
44
45
|
$:
|
|
45
46
|
focused_class = is_row_active ? "bg-stone-200 dark:bg-stone-700" : "";
|
|
46
47
|
$:
|
|
47
|
-
|
|
48
|
+
download = is_row_active && (definition.downloadable || (definition.downloadableFunc ? definition.downloadableFunc(item) : false));
|
|
49
|
+
$:
|
|
50
|
+
is_link_like = is_row_active && (!!definition.title_href || !!definition.title_href_func || download);
|
|
48
51
|
if (!typename) {
|
|
49
52
|
if (item.$type)
|
|
50
53
|
typename = item.$type;
|
|
@@ -272,6 +275,15 @@ function onToggleMultiSelect(e) {
|
|
|
272
275
|
if (e)
|
|
273
276
|
e.stopPropagation();
|
|
274
277
|
}
|
|
278
|
+
let isDownloading = false;
|
|
279
|
+
async function onDownloadFile(e) {
|
|
280
|
+
isDownloading = true;
|
|
281
|
+
e.preventDefault();
|
|
282
|
+
e.stopPropagation();
|
|
283
|
+
if (definition.onOpen)
|
|
284
|
+
await definition.onOpen(item);
|
|
285
|
+
isDownloading = false;
|
|
286
|
+
}
|
|
275
287
|
</script>
|
|
276
288
|
|
|
277
289
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
@@ -290,7 +302,11 @@ function onToggleMultiSelect(e) {
|
|
|
290
302
|
on:click={onToggleMultiSelect}/>
|
|
291
303
|
{/if}
|
|
292
304
|
|
|
293
|
-
|
|
305
|
+
{#if isDownloading}
|
|
306
|
+
<Spinner class="mt-0.5 ml-2 mr-1" size={5} delay={0}/>
|
|
307
|
+
{:else}
|
|
308
|
+
<slot name="left" element={item}/>
|
|
309
|
+
{/if}
|
|
294
310
|
|
|
295
311
|
<i class="hidden sm:w-1/2 sm:w-2/3 sm:w-1/3"></i> <!-- just to force tailwind classes including -->
|
|
296
312
|
|
|
@@ -315,10 +331,19 @@ function onToggleMultiSelect(e) {
|
|
|
315
331
|
onSoftEnter: (text) => {change_name(text); editProperty('Summary')}
|
|
316
332
|
}}
|
|
317
333
|
> <!--on:click|stopPropagation={followDefinedHRef}-->
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
334
|
+
{#if download}
|
|
335
|
+
<a class="sm:hover:cursor-pointer underline"
|
|
336
|
+
download
|
|
337
|
+
href={getHRef()}
|
|
338
|
+
on:click={onDownloadFile}>
|
|
339
|
+
{element_title}
|
|
340
|
+
</a>
|
|
341
|
+
{:else}
|
|
342
|
+
<a class="sm:hover:cursor-pointer underline"
|
|
343
|
+
href={getHRef()} use:link>
|
|
344
|
+
{element_title}
|
|
345
|
+
</a>
|
|
346
|
+
{/if}
|
|
322
347
|
</p>
|
|
323
348
|
{:else}
|
|
324
349
|
<p class=" text-base font-semibold
|
|
@@ -252,34 +252,40 @@ function reorderElements(items2, from = null) {
|
|
|
252
252
|
}
|
|
253
253
|
pushChanges();
|
|
254
254
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
};
|
|
260
|
-
if (after && orderAttrib) {
|
|
255
|
+
export function assignOrder(after) {
|
|
256
|
+
if (!orderAttrib)
|
|
257
|
+
return 0;
|
|
258
|
+
if (after) {
|
|
261
259
|
const leftElement = after;
|
|
262
260
|
const leftOrder = leftElement[orderAttrib];
|
|
263
261
|
const rightElement = getNext(items, leftElement);
|
|
264
262
|
if (rightElement) {
|
|
265
263
|
let rightOrder = rightElement[orderAttrib];
|
|
266
264
|
if (rightOrder - leftOrder >= 2)
|
|
267
|
-
|
|
265
|
+
return leftOrder + Math.floor((rightOrder - leftOrder) / 2);
|
|
268
266
|
else {
|
|
269
267
|
reorderElements(items, leftElement);
|
|
270
268
|
rightOrder = rightElement[orderAttrib];
|
|
271
|
-
|
|
269
|
+
return leftOrder + Math.floor((rightOrder - leftOrder) / 2);
|
|
272
270
|
}
|
|
273
271
|
} else
|
|
274
|
-
|
|
275
|
-
} else
|
|
272
|
+
return leftOrder + ORDER_STEP;
|
|
273
|
+
} else {
|
|
276
274
|
const lastElement = getLast(items);
|
|
277
275
|
if (lastElement) {
|
|
278
276
|
const lastOrder = lastElement[orderAttrib];
|
|
279
|
-
|
|
277
|
+
return lastOrder + ORDER_STEP;
|
|
280
278
|
} else
|
|
281
|
-
|
|
279
|
+
return MIN_ORDER;
|
|
282
280
|
}
|
|
281
|
+
}
|
|
282
|
+
async function insert(title2, summary, after) {
|
|
283
|
+
let newElement = {
|
|
284
|
+
[definition.title]: title2,
|
|
285
|
+
[definition.summary]: summary
|
|
286
|
+
};
|
|
287
|
+
if (orderAttrib)
|
|
288
|
+
newElement[orderAttrib] = assignOrder(after);
|
|
283
289
|
await definition.onInsert(newElement);
|
|
284
290
|
return;
|
|
285
291
|
let insertedElement = await definition.onInsert(newElement);
|
|
@@ -30,6 +30,7 @@ declare const __propDef: {
|
|
|
30
30
|
remove?: ((element: object) => void) | undefined;
|
|
31
31
|
edit?: ((element: object, property_name: string) => void) | undefined;
|
|
32
32
|
toggleMultiselection?: (() => void) | undefined;
|
|
33
|
+
assignOrder?: ((after: object | null) => number) | undefined;
|
|
33
34
|
};
|
|
34
35
|
events: {
|
|
35
36
|
[evt: string]: CustomEvent<any>;
|
|
@@ -60,5 +61,6 @@ export default class List extends SvelteComponentTyped<ListProps, ListEvents, Li
|
|
|
60
61
|
get remove(): (element: object) => void;
|
|
61
62
|
get edit(): (element: object, property_name: string) => void;
|
|
62
63
|
get toggleMultiselection(): () => void;
|
|
64
|
+
get assignOrder(): (after: object | null) => number;
|
|
63
65
|
}
|
|
64
66
|
export {};
|
|
@@ -6,6 +6,8 @@ export let onOpen = void 0;
|
|
|
6
6
|
export let readonly = false;
|
|
7
7
|
export let href = void 0;
|
|
8
8
|
export let hrefFunc = void 0;
|
|
9
|
+
export let downloadable = false;
|
|
10
|
+
export let downloadableFunc = void 0;
|
|
9
11
|
let definition = getContext("rList-definition");
|
|
10
12
|
definition.title = a;
|
|
11
13
|
definition.title_editable = editable;
|
|
@@ -14,4 +16,6 @@ definition.title_readonly = readonly;
|
|
|
14
16
|
definition.title_href = href;
|
|
15
17
|
definition.title_href_func = hrefFunc;
|
|
16
18
|
definition.onOpen = onOpen;
|
|
19
|
+
definition.downloadable = downloadable;
|
|
20
|
+
definition.downloadableFunc = downloadableFunc;
|
|
17
21
|
</script>
|