fuma 1.0.16 → 1.0.18
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/private/Meta.svelte +27 -32
- package/dist/private/Meta.svelte.d.ts +0 -1
- package/dist/private/api.d.ts +1 -1
- package/dist/ui/badge/Badge.svelte +3 -4
- package/dist/ui/button/ButtonCopy.svelte +31 -37
- package/dist/ui/button/ButtonDelete.svelte +21 -23
- package/dist/ui/button/ButtonDelete.svelte.d.ts +0 -1
- package/dist/ui/card/Card.svelte +10 -13
- package/dist/ui/card/Card.svelte.d.ts +0 -1
- package/dist/ui/card/CardBasic.svelte +4 -5
- package/dist/ui/card/CardBasic.svelte.d.ts +0 -1
- package/dist/ui/card/CardCollapse.svelte +31 -35
- package/dist/ui/card/CardCollapse.svelte.d.ts +0 -1
- package/dist/ui/card/CardFullScreen.svelte +6 -8
- package/dist/ui/card/CardFullScreen.svelte.d.ts +0 -3
- package/dist/ui/card/CardLink.svelte +4 -5
- package/dist/ui/card/CardLink.svelte.d.ts +0 -1
- package/dist/ui/dialog/Dialog.svelte +34 -41
- package/dist/ui/dialog/Dialog.svelte.d.ts +0 -1
- package/dist/ui/dialog/DialogConfirm.svelte +4 -6
- package/dist/ui/dialog/DialogConfirm.svelte.d.ts +0 -1
- package/dist/ui/drawer/Drawer.svelte +37 -46
- package/dist/ui/drawer/Drawer.svelte.d.ts +0 -16
- package/dist/ui/form/Form.svelte +82 -100
- package/dist/ui/form/Form.svelte.d.ts +0 -1
- package/dist/ui/form/FormInput.svelte +6 -12
- package/dist/ui/form/FormInput.svelte.d.ts +0 -18
- package/dist/ui/form/FormSection.svelte +16 -23
- package/dist/ui/form/formInput.d.ts +0 -1
- package/dist/ui/icon/Icon.svelte +32 -35
- package/dist/ui/input/FormControl.svelte +32 -38
- package/dist/ui/input/FormControl.svelte.d.ts +0 -3
- package/dist/ui/input/InputBoolean.svelte +8 -13
- package/dist/ui/input/InputBoolean.svelte.d.ts +0 -3
- package/dist/ui/input/InputCheckboxs.svelte +20 -22
- package/dist/ui/input/InputCheckboxs.svelte.d.ts +0 -3
- package/dist/ui/input/InputCheckboxsMenu.svelte +35 -51
- package/dist/ui/input/InputCheckboxsMenu.svelte.d.ts +0 -3
- package/dist/ui/input/InputCheckboxsTree.svelte +6 -9
- package/dist/ui/input/InputCheckboxsTreeNodes.svelte +27 -35
- package/dist/ui/input/InputCombo.svelte +34 -43
- package/dist/ui/input/InputCombo.svelte.d.ts +0 -3
- package/dist/ui/input/InputDate.svelte +17 -22
- package/dist/ui/input/InputDateTime.svelte +18 -23
- package/dist/ui/input/InputImage.svelte +45 -52
- package/dist/ui/input/InputImage.svelte.d.ts +0 -1
- package/dist/ui/input/InputImagePreview.svelte +20 -24
- package/dist/ui/input/InputNumber.svelte +5 -10
- package/dist/ui/input/InputOptionInParam.svelte +10 -12
- package/dist/ui/input/InputOptions.svelte +34 -40
- package/dist/ui/input/InputPassword.svelte +5 -7
- package/dist/ui/input/InputPassword.svelte.d.ts +0 -3
- package/dist/ui/input/InputRadio.svelte +32 -36
- package/dist/ui/input/InputRadio.svelte.d.ts +0 -3
- package/dist/ui/input/InputRelation.svelte +67 -83
- package/dist/ui/input/InputRelation.svelte.d.ts +0 -1
- package/dist/ui/input/InputRelations.svelte +79 -92
- package/dist/ui/input/InputSearch.svelte +10 -13
- package/dist/ui/input/InputSelect.svelte +28 -39
- package/dist/ui/input/InputText.svelte +7 -8
- package/dist/ui/input/InputTextarea.svelte +6 -6
- package/dist/ui/input/InputTime.svelte +23 -29
- package/dist/ui/input/RelationAfter.svelte +9 -13
- package/dist/ui/input/SelectorList.svelte +12 -16
- package/dist/ui/input/SelectorList.svelte.d.ts +0 -4
- package/dist/ui/input/textRich/InputTextRich.svelte +50 -57
- package/dist/ui/input/textRich/InputTextRich.svelte.d.ts +0 -3
- package/dist/ui/input/textRich/SuggesionList.svelte +9 -13
- package/dist/ui/input/textRich/ToolMark.svelte +9 -12
- package/dist/ui/input/textRich/ToolMarkColor.svelte +11 -15
- package/dist/ui/input/textRich/ToolMarkLink.svelte +38 -46
- package/dist/ui/input/textRich/ToolMenu.svelte +19 -34
- package/dist/ui/input/textRich/ToolMenuAlign.svelte +9 -13
- package/dist/ui/input/textRich/ToolMenuInsert.svelte +7 -12
- package/dist/ui/input/textRich/ToolMenuNode.svelte +10 -14
- package/dist/ui/input/textRich/ToolsBar.svelte +11 -15
- package/dist/ui/login/Login.svelte +30 -36
- package/dist/ui/menu/ContextMenu.svelte +31 -37
- package/dist/ui/menu/ContextMenu.svelte.d.ts +0 -1
- package/dist/ui/menu/DropDown.svelte +83 -92
- package/dist/ui/menu/DropDown.svelte.d.ts +0 -1
- package/dist/ui/menu/DropDownMenu.svelte +18 -25
- package/dist/ui/menu/DropDownMenu.svelte.d.ts +0 -1
- package/dist/ui/mode/ToggleMode.svelte +14 -15
- package/dist/ui/mode/ToggleMode.svelte.d.ts +1 -6
- package/dist/ui/pagination/Pagination.svelte +8 -9
- package/dist/ui/placeholder/Placeholder.svelte +3 -4
- package/dist/ui/placeholder/Placeholder.svelte.d.ts +0 -1
- package/dist/ui/placeholder/PlaceholderImage.svelte +4 -6
- package/dist/ui/placeholder/PlaceholderImage.svelte.d.ts +0 -1
- package/dist/ui/range/RangePicker.svelte +62 -75
- package/dist/ui/range/RangePicker.svelte.d.ts +2 -2
- package/dist/ui/range/RangePickerButton.svelte +35 -43
- package/dist/ui/slot/Slot.svelte +25 -42
- package/dist/ui/slot/Span.svelte +1 -2
- package/dist/ui/table/Table.svelte +28 -35
- package/dist/ui/table/TableBody.svelte +12 -18
- package/dist/ui/table/TableCell.svelte +10 -13
- package/dist/ui/table/TableFieldsEdition.svelte +52 -58
- package/dist/ui/table/TableHead.svelte +21 -20
- package/dist/ui/table/TableViewSelect.svelte +37 -50
- package/dist/ui/table/cell/TableCellArray.svelte +3 -5
- package/dist/ui/table/cell/TableCellBoolean.svelte +3 -4
- package/dist/ui/table/cell/TableCellNumber.svelte +1 -2
- package/dist/ui/table/cell/TableCellString.svelte +2 -5
- package/dist/ui/table/cell/TableCellString.svelte.d.ts +20 -10
- package/dist/ui/table/field.d.ts +25 -17
- package/dist/ui/table/field.js +1 -1
- package/dist/ui/table/head/OrderButtons.svelte +37 -0
- package/dist/ui/table/head/OrderButtons.svelte.d.ts +20 -0
- package/dist/ui/table/head/TableHeadBoolean.svelte +3 -6
- package/dist/ui/table/head/TableHeadBoolean.svelte.d.ts +20 -10
- package/dist/ui/table/head/TableHeadDate.svelte +113 -61
- package/dist/ui/table/head/TableHeadDate.svelte.d.ts +20 -10
- package/dist/ui/table/head/TableHeadDefault.svelte +2 -5
- package/dist/ui/table/head/TableHeadDefault.svelte.d.ts +20 -10
- package/dist/ui/table/head/TableHeadNumber.svelte +76 -67
- package/dist/ui/table/head/TableHeadNumber.svelte.d.ts +20 -10
- package/dist/ui/table/head/TableHeadSelect.svelte +41 -47
- package/dist/ui/table/head/TableHeadSelect.svelte.d.ts +20 -10
- package/dist/ui/table/head/TableHeadString.svelte +8 -14
- package/dist/ui/table/head/TableHeadString.svelte.d.ts +20 -10
- package/dist/ui/table/head/index.d.ts +2 -2
- package/dist/ui/tabs/Tabs.svelte +5 -8
- package/dist/ui/tabs/TabsIcon.svelte +28 -31
- package/dist/validation/zod.d.ts +12 -0
- package/dist/validation/zod.js +4 -2
- package/package.json +1 -1
|
@@ -1,53 +1,40 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
page.subscribe(({ url }) => {
|
|
39
|
-
query = getQuery(url)
|
|
40
|
-
selectedView = views.find((v) => v.query === query)
|
|
41
|
-
isNewView = !!query && !selectedView
|
|
42
|
-
})
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
function getQuery({ searchParams }: URL) {
|
|
46
|
-
const searchParam = new URLSearchParams(searchParams)
|
|
47
|
-
searchParam.delete('skip')
|
|
48
|
-
searchParam.delete('take')
|
|
49
|
-
return searchParam.toString()
|
|
50
|
-
}
|
|
1
|
+
<script>import { onMount } from "svelte";
|
|
2
|
+
import { mdiChevronDown, mdiContentSaveEditOutline, mdiPlus } from "@mdi/js";
|
|
3
|
+
import { page } from "$app/stores";
|
|
4
|
+
import { enhance } from "$app/forms";
|
|
5
|
+
import { Icon } from "../icon/index.js";
|
|
6
|
+
import { Dialog } from "../dialog/index.js";
|
|
7
|
+
import { DropDown } from "../menu/index.js";
|
|
8
|
+
import { InputText } from "../input/index.js";
|
|
9
|
+
import { useForm } from "../../validation/form.js";
|
|
10
|
+
export let key;
|
|
11
|
+
export let views;
|
|
12
|
+
export let action = "";
|
|
13
|
+
export let actionCreate = "?/view_create";
|
|
14
|
+
export let actionUpdate = "?/view_update";
|
|
15
|
+
export let actionDelete = "?/view_delete";
|
|
16
|
+
let dialog;
|
|
17
|
+
const form = useForm({
|
|
18
|
+
onSuccess() {
|
|
19
|
+
dialog.close();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
let query = getQuery($page.url);
|
|
23
|
+
let selectedView = views.find((v) => v.query === query);
|
|
24
|
+
let isNewView = !!query && !selectedView;
|
|
25
|
+
onMount(
|
|
26
|
+
() => page.subscribe(({ url }) => {
|
|
27
|
+
query = getQuery(url);
|
|
28
|
+
selectedView = views.find((v) => v.query === query);
|
|
29
|
+
isNewView = !!query && !selectedView;
|
|
30
|
+
})
|
|
31
|
+
);
|
|
32
|
+
function getQuery({ searchParams }) {
|
|
33
|
+
const searchParam = new URLSearchParams(searchParams);
|
|
34
|
+
searchParam.delete("skip");
|
|
35
|
+
searchParam.delete("take");
|
|
36
|
+
return searchParam.toString();
|
|
37
|
+
}
|
|
51
38
|
</script>
|
|
52
39
|
|
|
53
40
|
<DropDown>
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export let value: (ComponentAndProps | string | number | boolean)[]
|
|
1
|
+
<script>import { Badge } from "../../badge/index.js";
|
|
2
|
+
import { component } from "../../../utils/component.js";
|
|
3
|
+
export let value;
|
|
6
4
|
</script>
|
|
7
5
|
|
|
8
6
|
<td>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export let value: boolean
|
|
1
|
+
<script>import { mdiCheck, mdiClose } from "@mdi/js";
|
|
2
|
+
import { Icon } from "../../icon/index.js";
|
|
3
|
+
export let value;
|
|
5
4
|
</script>
|
|
6
5
|
|
|
7
6
|
<td>
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export let value: string
|
|
5
|
-
export let field: TableField
|
|
1
|
+
<script generics="Item extends {id: string}">export let value;
|
|
2
|
+
export let field;
|
|
6
3
|
</script>
|
|
7
4
|
|
|
8
5
|
<td data-field-key={field.key} data-field-type={field.type === 'textarea' ? 'textarea' : 'string'}>
|
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { TableField } from '../index.js';
|
|
3
|
-
declare
|
|
4
|
-
|
|
3
|
+
declare class __sveltets_Render<Item extends {
|
|
4
|
+
id: string;
|
|
5
|
+
}> {
|
|
6
|
+
props(): {
|
|
5
7
|
value: string;
|
|
6
|
-
field: TableField
|
|
8
|
+
field: TableField<Item>;
|
|
7
9
|
};
|
|
8
|
-
events: {
|
|
10
|
+
events(): {} & {
|
|
9
11
|
[evt: string]: CustomEvent<any>;
|
|
10
12
|
};
|
|
11
|
-
slots: {};
|
|
12
|
-
}
|
|
13
|
-
export type TableCellStringProps
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export
|
|
13
|
+
slots(): {};
|
|
14
|
+
}
|
|
15
|
+
export type TableCellStringProps<Item extends {
|
|
16
|
+
id: string;
|
|
17
|
+
}> = ReturnType<__sveltets_Render<Item>['props']>;
|
|
18
|
+
export type TableCellStringEvents<Item extends {
|
|
19
|
+
id: string;
|
|
20
|
+
}> = ReturnType<__sveltets_Render<Item>['events']>;
|
|
21
|
+
export type TableCellStringSlots<Item extends {
|
|
22
|
+
id: string;
|
|
23
|
+
}> = ReturnType<__sveltets_Render<Item>['slots']>;
|
|
24
|
+
export default class TableCellString<Item extends {
|
|
25
|
+
id: string;
|
|
26
|
+
}> extends SvelteComponent<TableCellStringProps<Item>, TableCellStringEvents<Item>, TableCellStringSlots<Item>> {
|
|
17
27
|
}
|
|
18
28
|
export {};
|
package/dist/ui/table/field.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ComponentAndProps, Primitive } from '../../utils/component.js';
|
|
2
2
|
import type { Options } from '../../utils/options.js';
|
|
3
|
+
export type ItemBase = {
|
|
4
|
+
id: string;
|
|
5
|
+
};
|
|
3
6
|
export type TableFieldType = 'string' | 'textarea' | 'number' | 'boolean' | 'select' | 'multiselect' | 'date';
|
|
4
|
-
export type TableField<Item
|
|
7
|
+
export type TableField<Item extends ItemBase> = TableFieldCommon & (TableFieldUntyped<Item> | TableFieldPrimitive<Item> | TableFieldSelect<Item> | TableFieldMultiselect<Item>);
|
|
5
8
|
type TableFieldCommon = {
|
|
6
9
|
key: string;
|
|
7
10
|
label: string;
|
|
@@ -10,23 +13,24 @@ type TableFieldCommon = {
|
|
|
10
13
|
hint?: string;
|
|
11
14
|
locked?: boolean;
|
|
12
15
|
visible?: boolean;
|
|
16
|
+
sortable?: boolean;
|
|
13
17
|
/** Internal usage */
|
|
14
|
-
|
|
18
|
+
_visible?: boolean;
|
|
15
19
|
};
|
|
16
|
-
type TableFieldUntyped<Item
|
|
20
|
+
type TableFieldUntyped<Item extends ItemBase> = {
|
|
17
21
|
getCell: (item: Item) => ComponentAndProps[] | ComponentAndProps | Primitive[] | Primitive | undefined | null;
|
|
18
|
-
head?: ComponentAndProps | ((field: TableField) => ComponentAndProps);
|
|
22
|
+
head?: ComponentAndProps | ((field: TableField<Item>) => ComponentAndProps);
|
|
19
23
|
};
|
|
20
|
-
type TableFieldPrimitive<Item
|
|
24
|
+
type TableFieldPrimitive<Item extends ItemBase> = {
|
|
21
25
|
type: Exclude<TableFieldType, 'select' | 'multiselect'>;
|
|
22
26
|
getCell: (item: Item) => ComponentAndProps[] | ComponentAndProps | Primitive | undefined | null;
|
|
23
27
|
};
|
|
24
|
-
type TableFieldSelect<Item
|
|
28
|
+
type TableFieldSelect<Item extends ItemBase> = {
|
|
25
29
|
type: 'select';
|
|
26
30
|
getCell: (item: Item) => Primitive | undefined | null;
|
|
27
31
|
options: Options;
|
|
28
32
|
};
|
|
29
|
-
type TableFieldMultiselect<Item
|
|
33
|
+
type TableFieldMultiselect<Item extends ItemBase> = {
|
|
30
34
|
type: 'multiselect';
|
|
31
35
|
getCell: (item: Item) => Primitive[] | undefined | null;
|
|
32
36
|
options: Options;
|
|
@@ -34,8 +38,8 @@ type TableFieldMultiselect<Item = any> = {
|
|
|
34
38
|
/**
|
|
35
39
|
* Initialise fields from url query
|
|
36
40
|
*/
|
|
37
|
-
export declare function syncFieldsWithParams(tablekey: string, fields: TableField[]): ({
|
|
38
|
-
|
|
41
|
+
export declare function syncFieldsWithParams<Item extends ItemBase>(tablekey: string, fields: TableField<Item>[]): ({
|
|
42
|
+
_visible: boolean;
|
|
39
43
|
key: string;
|
|
40
44
|
label: string;
|
|
41
45
|
type?: TableFieldType | undefined;
|
|
@@ -43,10 +47,11 @@ export declare function syncFieldsWithParams(tablekey: string, fields: TableFiel
|
|
|
43
47
|
hint?: string | undefined;
|
|
44
48
|
locked?: boolean | undefined;
|
|
45
49
|
visible?: boolean | undefined;
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
sortable?: boolean | undefined;
|
|
51
|
+
getCell: (item: Item) => Primitive | ComponentAndProps | ComponentAndProps[] | Primitive[] | null | undefined;
|
|
52
|
+
head?: ComponentAndProps | ((field: TableField<Item>) => ComponentAndProps) | undefined;
|
|
48
53
|
} | {
|
|
49
|
-
|
|
54
|
+
_visible: boolean;
|
|
50
55
|
key: string;
|
|
51
56
|
label: string;
|
|
52
57
|
type: "string" | "number" | "boolean" | "textarea" | "date";
|
|
@@ -54,9 +59,10 @@ export declare function syncFieldsWithParams(tablekey: string, fields: TableFiel
|
|
|
54
59
|
hint?: string | undefined;
|
|
55
60
|
locked?: boolean | undefined;
|
|
56
61
|
visible?: boolean | undefined;
|
|
57
|
-
|
|
62
|
+
sortable?: boolean | undefined;
|
|
63
|
+
getCell: (item: Item) => Primitive | ComponentAndProps | ComponentAndProps[] | null | undefined;
|
|
58
64
|
} | {
|
|
59
|
-
|
|
65
|
+
_visible: boolean;
|
|
60
66
|
key: string;
|
|
61
67
|
label: string;
|
|
62
68
|
type: "select";
|
|
@@ -64,9 +70,10 @@ export declare function syncFieldsWithParams(tablekey: string, fields: TableFiel
|
|
|
64
70
|
hint?: string | undefined;
|
|
65
71
|
locked?: boolean | undefined;
|
|
66
72
|
visible?: boolean | undefined;
|
|
67
|
-
|
|
73
|
+
sortable?: boolean | undefined;
|
|
74
|
+
getCell: (item: Item) => Primitive | null | undefined;
|
|
68
75
|
} | {
|
|
69
|
-
|
|
76
|
+
_visible: boolean;
|
|
70
77
|
key: string;
|
|
71
78
|
label: string;
|
|
72
79
|
type: "multiselect";
|
|
@@ -74,6 +81,7 @@ export declare function syncFieldsWithParams(tablekey: string, fields: TableFiel
|
|
|
74
81
|
hint?: string | undefined;
|
|
75
82
|
locked?: boolean | undefined;
|
|
76
83
|
visible?: boolean | undefined;
|
|
77
|
-
|
|
84
|
+
sortable?: boolean | undefined;
|
|
85
|
+
getCell: (item: Item) => Primitive[] | null | undefined;
|
|
78
86
|
})[];
|
|
79
87
|
export {};
|
package/dist/ui/table/field.js
CHANGED
|
@@ -14,7 +14,7 @@ export function syncFieldsWithParams(tablekey, fields) {
|
|
|
14
14
|
// Init correct visible prop
|
|
15
15
|
const _fields = fields.map((field) => ({
|
|
16
16
|
...field,
|
|
17
|
-
|
|
17
|
+
_visible: field.locked ||
|
|
18
18
|
(field.visible ? !fieldsHidden.includes(field.key) : fieldsVisible.includes(field.key))
|
|
19
19
|
}));
|
|
20
20
|
// Init correct order fields
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script>import { Icon } from "../../icon/index.js";
|
|
2
|
+
import { mdiSortAscending, mdiSortDescending } from "@mdi/js";
|
|
3
|
+
import { createEventDispatcher } from "svelte";
|
|
4
|
+
export let order;
|
|
5
|
+
export let iconAsc = mdiSortAscending;
|
|
6
|
+
export let iconDesc = mdiSortDescending;
|
|
7
|
+
const dispatch = createEventDispatcher();
|
|
8
|
+
const handleOrderClick = (orderBy) => () => {
|
|
9
|
+
if (order === orderBy)
|
|
10
|
+
order = void 0;
|
|
11
|
+
else
|
|
12
|
+
order = orderBy;
|
|
13
|
+
dispatch("change", order);
|
|
14
|
+
};
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<div class="p-1 pt-2">
|
|
18
|
+
<span class="text-sm font-semibold opacity-70">Ordre:</span>
|
|
19
|
+
<div class="grid grid-cols-2 gap-2 pt-2">
|
|
20
|
+
<button
|
|
21
|
+
class="btn ring-primary"
|
|
22
|
+
class:ring-2={order === 'asc'}
|
|
23
|
+
on:click={handleOrderClick('asc')}
|
|
24
|
+
>
|
|
25
|
+
<Icon path={iconAsc} />
|
|
26
|
+
<span>Ascendant</span>
|
|
27
|
+
</button>
|
|
28
|
+
<button
|
|
29
|
+
class="btn ring-primary"
|
|
30
|
+
class:ring-2={order === 'desc'}
|
|
31
|
+
on:click={handleOrderClick('desc')}
|
|
32
|
+
>
|
|
33
|
+
<Icon path={iconDesc} />
|
|
34
|
+
<span>Descendant</span>
|
|
35
|
+
</button>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
order: "desc" | "asc" | undefined;
|
|
5
|
+
iconAsc?: string | undefined;
|
|
6
|
+
iconDesc?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
change: CustomEvent<"desc" | "asc" | undefined>;
|
|
10
|
+
} & {
|
|
11
|
+
[evt: string]: CustomEvent<any>;
|
|
12
|
+
};
|
|
13
|
+
slots: {};
|
|
14
|
+
};
|
|
15
|
+
export type OrderButtonsProps = typeof __propDef.props;
|
|
16
|
+
export type OrderButtonsEvents = typeof __propDef.events;
|
|
17
|
+
export type OrderButtonsSlots = typeof __propDef.slots;
|
|
18
|
+
export default class OrderButtons extends SvelteComponent<OrderButtonsProps, OrderButtonsEvents, OrderButtonsSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import TableHeadSelect from './TableHeadSelect.svelte'
|
|
5
|
-
|
|
6
|
-
export let field: TableField
|
|
1
|
+
<script generics="Item extends {id: string}">import { mdiCheck, mdiClose } from "@mdi/js";
|
|
2
|
+
import TableHeadSelect from "./TableHeadSelect.svelte";
|
|
3
|
+
export let field;
|
|
7
4
|
</script>
|
|
8
5
|
|
|
9
6
|
<TableHeadSelect
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { TableField } from '../index.js';
|
|
3
|
-
declare
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare class __sveltets_Render<Item extends {
|
|
4
|
+
id: string;
|
|
5
|
+
}> {
|
|
6
|
+
props(): {
|
|
7
|
+
field: TableField<Item>;
|
|
6
8
|
};
|
|
7
|
-
events: {
|
|
9
|
+
events(): {} & {
|
|
8
10
|
[evt: string]: CustomEvent<any>;
|
|
9
11
|
};
|
|
10
|
-
slots: {};
|
|
11
|
-
}
|
|
12
|
-
export type TableHeadBooleanProps
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export
|
|
12
|
+
slots(): {};
|
|
13
|
+
}
|
|
14
|
+
export type TableHeadBooleanProps<Item extends {
|
|
15
|
+
id: string;
|
|
16
|
+
}> = ReturnType<__sveltets_Render<Item>['props']>;
|
|
17
|
+
export type TableHeadBooleanEvents<Item extends {
|
|
18
|
+
id: string;
|
|
19
|
+
}> = ReturnType<__sveltets_Render<Item>['events']>;
|
|
20
|
+
export type TableHeadBooleanSlots<Item extends {
|
|
21
|
+
id: string;
|
|
22
|
+
}> = ReturnType<__sveltets_Render<Item>['slots']>;
|
|
23
|
+
export default class TableHeadBoolean<Item extends {
|
|
24
|
+
id: string;
|
|
25
|
+
}> extends SvelteComponent<TableHeadBooleanProps<Item>, TableHeadBooleanEvents<Item>, TableHeadBooleanSlots<Item>> {
|
|
16
26
|
}
|
|
17
27
|
export {};
|
|
@@ -1,64 +1,77 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
1
|
+
<script generics="Item extends {id: string}">import { goto } from "$app/navigation";
|
|
2
|
+
import { page } from "$app/stores";
|
|
3
|
+
import {
|
|
4
|
+
mdiCalendarFilterOutline,
|
|
5
|
+
mdiSortClockAscendingOutline,
|
|
6
|
+
mdiSortClockDescendingOutline
|
|
7
|
+
} from "@mdi/js";
|
|
8
|
+
import { DropDown } from "../../menu/index.js";
|
|
9
|
+
import { InputTime } from "../../input/index.js";
|
|
10
|
+
import { formatRange } from "../../range/format.js";
|
|
11
|
+
import { RangePicker } from "../../range/index.js";
|
|
12
|
+
import { urlParam } from "../../../store/param.js";
|
|
13
|
+
import { jsonParse } from "../../../utils/jsonParse.js";
|
|
14
|
+
import { Icon } from "../../icon/index.js";
|
|
15
|
+
import OrderButtons from "./OrderButtons.svelte";
|
|
16
|
+
export let field;
|
|
17
|
+
let dropDown;
|
|
18
|
+
let rangePicker;
|
|
19
|
+
const initialValue = jsonParse(
|
|
20
|
+
$page.url.searchParams.get(field.key),
|
|
21
|
+
{}
|
|
22
|
+
);
|
|
23
|
+
let { order } = jsonParse($page.url.searchParams.get(field.key), {});
|
|
24
|
+
let range = {
|
|
25
|
+
start: initialValue.start ? new Date(initialValue.start) : null,
|
|
26
|
+
end: initialValue.end ? new Date(initialValue.end) : null
|
|
27
|
+
};
|
|
28
|
+
let isValidPeriod = !!range.start && !!range.end;
|
|
29
|
+
function updateUrl() {
|
|
30
|
+
isValidPeriod = !!range.start && !!range.end;
|
|
31
|
+
if (!isValidPeriod && !order) {
|
|
32
|
+
goto($urlParam.without(field.key, "skip", "take"), {
|
|
33
|
+
replaceState: true,
|
|
34
|
+
noScroll: true,
|
|
35
|
+
keepFocus: true
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
goto(
|
|
40
|
+
$urlParam.with(
|
|
41
|
+
{
|
|
42
|
+
[field.key]: JSON.stringify({
|
|
43
|
+
...isValidPeriod ? {
|
|
44
|
+
start: range.start?.toJSON(),
|
|
45
|
+
end: range.end?.toJSON()
|
|
46
|
+
} : {},
|
|
47
|
+
...order ? { order } : {}
|
|
48
|
+
})
|
|
49
|
+
},
|
|
50
|
+
"skip",
|
|
51
|
+
"take"
|
|
52
|
+
),
|
|
53
|
+
{ replaceState: true, noScroll: true, keepFocus: true }
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function handleReset() {
|
|
57
|
+
isValidPeriod = false;
|
|
58
|
+
range.start = null;
|
|
59
|
+
range = { start: null, end: null };
|
|
60
|
+
dropDown.hide();
|
|
61
|
+
rangePicker.clear();
|
|
62
|
+
goto($urlParam.without(field.key, "skip", "take"), {
|
|
63
|
+
replaceState: true,
|
|
64
|
+
noScroll: true,
|
|
65
|
+
keepFocus: true
|
|
66
|
+
});
|
|
67
|
+
}
|
|
55
68
|
</script>
|
|
56
69
|
|
|
57
70
|
<th class="p-1">
|
|
58
71
|
<DropDown
|
|
59
72
|
bind:this={dropDown}
|
|
60
|
-
on:mouseLeave={handleSubmit}
|
|
61
73
|
tippyProps={{ appendTo: () => document.body }}
|
|
74
|
+
hideOnNav={false}
|
|
62
75
|
class="max-h-none"
|
|
63
76
|
>
|
|
64
77
|
<button slot="activator" class="menu-item min-h-8 w-full flex-wrap gap-y-1">
|
|
@@ -74,25 +87,64 @@
|
|
|
74
87
|
{formatRange(range)}
|
|
75
88
|
</span>
|
|
76
89
|
{/if}
|
|
90
|
+
{#if order}
|
|
91
|
+
<Icon
|
|
92
|
+
path={order === 'asc' ? mdiSortClockAscendingOutline : mdiSortClockDescendingOutline}
|
|
93
|
+
size={18}
|
|
94
|
+
class="fill-primary"
|
|
95
|
+
/>
|
|
96
|
+
{/if}
|
|
77
97
|
</button>
|
|
78
98
|
|
|
99
|
+
{#if field.sortable !== false}
|
|
100
|
+
<OrderButtons
|
|
101
|
+
bind:order
|
|
102
|
+
on:change={() => {
|
|
103
|
+
updateUrl()
|
|
104
|
+
dropDown.hide()
|
|
105
|
+
}}
|
|
106
|
+
iconAsc={mdiSortClockAscendingOutline}
|
|
107
|
+
iconDesc={mdiSortClockDescendingOutline}
|
|
108
|
+
/>
|
|
109
|
+
{/if}
|
|
110
|
+
|
|
79
111
|
<form
|
|
80
|
-
|
|
81
|
-
on:submit|preventDefault={handleSubmit}
|
|
112
|
+
on:submit|preventDefault={() => dropDown.hide()}
|
|
82
113
|
data-sveltekit-replacestate
|
|
114
|
+
class="flex flex-col font-normal"
|
|
115
|
+
class:mt-6={field.sortable !== false}
|
|
83
116
|
>
|
|
84
|
-
<RangePicker
|
|
117
|
+
<RangePicker
|
|
118
|
+
bind:this={rangePicker}
|
|
119
|
+
numberOfMonths={1}
|
|
120
|
+
on:change={({ detail: newRange }) => {
|
|
121
|
+
range = newRange
|
|
122
|
+
updateUrl()
|
|
123
|
+
}}
|
|
124
|
+
/>
|
|
85
125
|
|
|
86
126
|
<input class="hidden" type="text" name="start" value={range.start?.toJSON()} />
|
|
87
127
|
<input class="hidden" type="text" name="end" value={range.end?.toJSON()} />
|
|
88
128
|
|
|
89
129
|
<div class="m-2 flex gap-2">
|
|
90
|
-
<InputTime
|
|
91
|
-
|
|
130
|
+
<InputTime
|
|
131
|
+
label="A partir de"
|
|
132
|
+
bind:value={range.start}
|
|
133
|
+
enhanceDisabled
|
|
134
|
+
class="grow"
|
|
135
|
+
on:input={updateUrl}
|
|
136
|
+
/>
|
|
137
|
+
<InputTime
|
|
138
|
+
label="Jusqu'à"
|
|
139
|
+
bind:value={range.end}
|
|
140
|
+
enhanceDisabled
|
|
141
|
+
class="grow"
|
|
142
|
+
on:input={updateUrl}
|
|
143
|
+
/>
|
|
92
144
|
</div>
|
|
93
145
|
|
|
94
146
|
<div class="m-2 flex flex-row-reverse gap-2">
|
|
95
|
-
<button class="btn">
|
|
147
|
+
<button class="btn">Ok</button>
|
|
96
148
|
<button class="btn btn-ghost" type="button" on:click={handleReset}>Effacer</button>
|
|
97
149
|
</div>
|
|
98
150
|
</form>
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { TableField } from '../index.js';
|
|
3
|
-
declare
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare class __sveltets_Render<Item extends {
|
|
4
|
+
id: string;
|
|
5
|
+
}> {
|
|
6
|
+
props(): {
|
|
7
|
+
field: Omit<TableField<Item>, "type" | "getCell">;
|
|
6
8
|
};
|
|
7
|
-
events: {
|
|
9
|
+
events(): {} & {
|
|
8
10
|
[evt: string]: CustomEvent<any>;
|
|
9
11
|
};
|
|
10
|
-
slots: {};
|
|
11
|
-
}
|
|
12
|
-
export type TableHeadDateProps
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export
|
|
12
|
+
slots(): {};
|
|
13
|
+
}
|
|
14
|
+
export type TableHeadDateProps<Item extends {
|
|
15
|
+
id: string;
|
|
16
|
+
}> = ReturnType<__sveltets_Render<Item>['props']>;
|
|
17
|
+
export type TableHeadDateEvents<Item extends {
|
|
18
|
+
id: string;
|
|
19
|
+
}> = ReturnType<__sveltets_Render<Item>['events']>;
|
|
20
|
+
export type TableHeadDateSlots<Item extends {
|
|
21
|
+
id: string;
|
|
22
|
+
}> = ReturnType<__sveltets_Render<Item>['slots']>;
|
|
23
|
+
export default class TableHeadDate<Item extends {
|
|
24
|
+
id: string;
|
|
25
|
+
}> extends SvelteComponent<TableHeadDateProps<Item>, TableHeadDateEvents<Item>, TableHeadDateSlots<Item>> {
|
|
16
26
|
}
|
|
17
27
|
export {};
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
import { tip } from '../../../action/tip.js'
|
|
4
|
-
|
|
5
|
-
export let field: TableField
|
|
1
|
+
<script generics="Item extends {id: string}">import { tip } from "../../../action/tip.js";
|
|
2
|
+
export let field;
|
|
6
3
|
</script>
|
|
7
4
|
|
|
8
5
|
<th use:tip={{ disable: !field.hint, content: field.hint }}>
|