@humandialog/forms.svelte 0.5.4 → 0.5.6
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/README.md +0 -0
- package/components/Fab.svelte +5 -3
- package/components/Fab.svelte.d.ts +14 -14
- package/components/Floating_container.svelte.d.ts +21 -21
- package/components/Grid.menu.svelte.d.ts +25 -25
- package/components/button.svelte.d.ts +24 -24
- package/components/checkbox.svelte.d.ts +26 -26
- package/components/combo/combo.d.ts +17 -17
- package/components/combo/combo.item.svelte.d.ts +19 -19
- package/components/combo/combo.js +17 -17
- package/components/combo/combo.source.svelte.d.ts +22 -22
- package/components/combo/combo.svelte +1 -1
- package/components/combo/combo.svelte.d.ts +42 -42
- package/components/contextmenu.svelte.d.ts +26 -26
- package/components/date.svelte.d.ts +31 -31
- package/components/delayed.spinner.svelte.d.ts +19 -19
- package/components/document/internal/Document_command.d.ts +9 -9
- package/components/document/internal/Document_command.js +9 -9
- package/components/document/internal/Selection_helper.d.ts +7 -7
- package/components/document/internal/Selection_helper.js +133 -133
- package/components/document/internal/Selection_range.d.ts +26 -26
- package/components/document/internal/Selection_range.js +58 -58
- package/components/document/internal/palette.row.svelte.d.ts +36 -36
- package/components/document/internal/palette.svelte.d.ts +67 -67
- package/components/document/rich.edit.svelte +49 -8
- package/components/document/rich.edit.svelte.d.ts +32 -32
- package/components/edit.field.svelte.d.ts +28 -28
- package/components/file.loader.svelte.d.ts +25 -25
- package/components/icon.svelte.d.ts +62 -62
- package/components/input.text.svelte.d.ts +29 -29
- package/components/inputbox.ltop.svelte +1 -1
- package/components/inputbox.ltop.svelte.d.ts +52 -52
- package/components/kanban/Kanban.d.ts +43 -23
- package/components/kanban/Kanban.js +79 -23
- package/components/kanban/internal/kanban.card.svelte +195 -117
- package/components/kanban/internal/kanban.card.svelte.d.ts +32 -35
- package/components/kanban/internal/kanban.column.svelte +152 -108
- package/components/kanban/internal/kanban.column.svelte.d.ts +51 -51
- package/components/kanban/internal/kanban.inserter.svelte +14 -14
- package/components/kanban/internal/kanban.inserter.svelte.d.ts +18 -18
- package/components/kanban/internal/kanban.move.menu.svelte +138 -135
- package/components/kanban/internal/kanban.move.menu.svelte.d.ts +22 -19
- package/components/kanban/internal/kanban.props.svelte +140 -0
- package/components/kanban/internal/kanban.props.svelte.d.ts +19 -0
- package/components/kanban/kanban.callbacks.svelte +3 -9
- package/components/kanban/kanban.callbacks.svelte.d.ts +18 -21
- package/components/kanban/kanban.column.svelte +10 -10
- package/components/kanban/kanban.column.svelte.d.ts +21 -21
- package/components/kanban/kanban.combo.svelte +36 -0
- package/components/kanban/kanban.combo.svelte.d.ts +24 -0
- package/components/kanban/kanban.date.svelte +30 -0
- package/components/kanban/kanban.date.svelte.d.ts +21 -0
- package/components/kanban/kanban.source.svelte +25 -0
- package/components/kanban/kanban.source.svelte.d.ts +23 -0
- package/components/kanban/kanban.static.svelte +28 -0
- package/components/kanban/kanban.static.svelte.d.ts +20 -0
- package/components/kanban/kanban.summary.svelte +4 -0
- package/components/kanban/kanban.summary.svelte.d.ts +18 -16
- package/components/kanban/kanban.svelte +459 -124
- package/components/kanban/kanban.svelte.d.ts +63 -43
- package/components/kanban/kanban.tags.svelte +34 -0
- package/components/kanban/kanban.tags.svelte.d.ts +23 -0
- package/components/kanban/kanban.title.svelte +4 -2
- package/components/kanban/kanban.title.svelte.d.ts +18 -17
- package/components/list/List.d.ts +44 -36
- package/components/list/List.js +52 -42
- package/components/list/internal/list.element.props.svelte +65 -65
- package/components/list/internal/list.element.props.svelte.d.ts +21 -21
- package/components/list/internal/list.element.summary.svelte +44 -30
- package/components/list/internal/list.element.summary.svelte.d.ts +25 -24
- package/components/list/internal/list.element.svelte +24 -11
- package/components/list/internal/list.element.svelte.d.ts +29 -29
- package/components/list/internal/list.inserter.svelte.d.ts +19 -19
- package/components/list/list.combo.svelte.d.ts +21 -21
- package/components/list/list.date.svelte.d.ts +18 -18
- package/components/list/list.inserter.svelte.d.ts +17 -17
- package/components/list/list.static.svelte.d.ts +17 -17
- package/components/list/list.summary.svelte.d.ts +19 -19
- package/components/list/list.svelte +2 -2
- package/components/list/list.svelte.d.ts +59 -59
- package/components/list/list.title.svelte +2 -0
- package/components/list/list.title.svelte.d.ts +22 -21
- package/components/menu.d.ts +4 -4
- package/components/menu.js +56 -56
- package/components/radio.svelte.d.ts +26 -26
- package/components/sidebar/sidebar.brand.svelte.d.ts +31 -31
- package/components/sidebar/sidebar.group.svelte +41 -3
- package/components/sidebar/sidebar.group.svelte.d.ts +33 -27
- package/components/sidebar/sidebar.item.svelte.d.ts +28 -28
- package/components/sidebar/sidebar.list.svelte +15 -15
- package/components/sidebar/sidebar.list.svelte.d.ts +33 -33
- package/components/sidebar/sidebar.svelte.d.ts +27 -27
- package/components/simple.table.svelte.d.ts +41 -41
- package/components/table/_template.table.svelte.d.ts +57 -57
- package/components/table/column.svelte.d.ts +19 -19
- package/components/table/item.svelte.d.ts +17 -17
- package/components/table/table.d.ts +11 -11
- package/components/table/table.js +11 -11
- package/components/table/table.svelte.d.ts +75 -75
- package/components/tag.svelte +40 -0
- package/components/tag.svelte.d.ts +19 -0
- package/components/tags.svelte +207 -0
- package/components/tags.svelte.d.ts +31 -0
- package/components/textarea.ltop.svelte.d.ts +35 -35
- package/components/tile.title.svelte.d.ts +29 -29
- package/desk.svelte.d.ts +23 -23
- package/form.box.svelte.d.ts +35 -35
- package/horizontal.toolbar.svelte +23 -4
- package/horizontal.toolbar.svelte.d.ts +25 -23
- package/index.d.ts +59 -52
- package/index.js +65 -58
- package/internal/configurable.content.svelte.d.ts +27 -27
- package/internal/loading.svelte.d.ts +23 -23
- package/modal.svelte +7 -7
- package/modal.svelte.d.ts +35 -35
- package/operations.svelte +52 -23
- package/operations.svelte.d.ts +16 -16
- package/package.json +16 -8
- package/page.row.svelte.d.ts +31 -31
- package/page.svelte +3 -3
- package/page.svelte.d.ts +45 -45
- package/stores.d.ts +39 -39
- package/stores.js +0 -0
- package/tenant.members.svelte +10 -11
- package/tenant.members.svelte.d.ts +33 -33
- package/tile.svelte.d.ts +33 -33
- package/tiles.row.svelte.d.ts +31 -31
- package/tiles.vertical.row.svelte.d.ts +29 -29
- package/updates.d.ts +4 -3
- package/updates.js +16 -0
- package/utils.d.ts +35 -35
- package/utils.js +11 -1
- package/vertical.toolbar.svelte +31 -6
- package/vertical.toolbar.svelte.d.ts +27 -25
|
@@ -1,156 +1,491 @@
|
|
|
1
|
-
<script>import { setContext, getContext, afterUpdate } from "svelte";
|
|
2
|
-
import { rKanban_definition } from "./Kanban";
|
|
3
|
-
import { parseWidthDirective, clearActiveItem } from "../../utils";
|
|
4
|
-
import {
|
|
1
|
+
<script>import { setContext, getContext, afterUpdate, tick } from "svelte";
|
|
2
|
+
import { KanbanColumnBottom, KanbanColumnTop, rKanban_definition } from "./Kanban";
|
|
3
|
+
import { parseWidthDirective, clearActiveItem, getPrev, getNext, remove, insertAt, insertAfter, swapElements, getActive } from "../../utils";
|
|
4
|
+
import { contextItemsStore, contextTypesStore, data_tick_store } from "../../stores";
|
|
5
5
|
import Column from "./internal/kanban.column.svelte";
|
|
6
|
+
import { informModification, pushChanges } from "../../updates";
|
|
6
7
|
export let title = "";
|
|
7
|
-
export let self = void 0;
|
|
8
|
-
export let context = "";
|
|
9
|
-
export let typename = "";
|
|
10
8
|
export let c = "";
|
|
11
|
-
export
|
|
9
|
+
export const CLEAR_SELECTION = 0;
|
|
10
|
+
export const KEEP_SELECTION = -1;
|
|
11
|
+
export const SELECT_PREVIOUS = -2;
|
|
12
|
+
export const SELECT_NEXT = -3;
|
|
13
|
+
export const KEEP_OR_SELECT_NEXT = -4;
|
|
12
14
|
let user_class = $$props.class ?? "";
|
|
13
15
|
let definition = new rKanban_definition();
|
|
14
16
|
setContext("rKanban-definition", definition);
|
|
15
17
|
setContext("rIs-table-component", true);
|
|
16
|
-
let item = null;
|
|
17
|
-
let ctx = context ? context : getContext("ctx");
|
|
18
18
|
let cs = c ? parseWidthDirective(c) : "w-full min-w-full";
|
|
19
19
|
clearActiveItem("props");
|
|
20
|
-
let last_tick = -1;
|
|
21
20
|
$:
|
|
22
|
-
setup(
|
|
21
|
+
setup();
|
|
23
22
|
function setup(...args) {
|
|
24
|
-
last_tick = $data_tick_store;
|
|
25
|
-
if (self && ctx)
|
|
26
|
-
$contextItemsStore[ctx] = self;
|
|
27
|
-
if (!typename)
|
|
28
|
-
typename = $contextTypesStore[ctx];
|
|
29
23
|
}
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
let renderToken = 0;
|
|
25
|
+
export async function rerender(selectColumnIdx = -1, selectCardId = -1) {
|
|
26
|
+
definition.clear();
|
|
27
|
+
renderToken += 1;
|
|
28
|
+
await tick();
|
|
29
|
+
if (selectColumnIdx >= 0) {
|
|
30
|
+
if (selectCardId >= 0) {
|
|
31
|
+
columns[selectColumnIdx].activateByItemId(selectCardId);
|
|
32
|
+
} else {
|
|
33
|
+
columns[selectColumnIdx].activate();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
32
36
|
}
|
|
33
|
-
export function
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
export async function reload(data, selectElement = KEEP_SELECTION) {
|
|
38
|
+
let currentSelectedItem = getActive("props");
|
|
39
|
+
let selectElementId = 0;
|
|
40
|
+
let altSelectElementId = 0;
|
|
41
|
+
let selectedColumnIdx = -1;
|
|
42
|
+
const oa = definition.orderAttrib;
|
|
43
|
+
const sa = definition.stateAttrib;
|
|
44
|
+
let allItems = definition.getItems();
|
|
45
|
+
switch (selectElement) {
|
|
46
|
+
case CLEAR_SELECTION:
|
|
47
|
+
selectElementId = 0;
|
|
48
|
+
break;
|
|
49
|
+
case KEEP_SELECTION:
|
|
50
|
+
selectElementId = currentSelectedItem.Id ?? 0;
|
|
51
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentSelectedItem[sa]);
|
|
52
|
+
break;
|
|
53
|
+
case SELECT_PREVIOUS:
|
|
54
|
+
if (currentSelectedItem) {
|
|
55
|
+
const currentItemState = currentSelectedItem[sa];
|
|
56
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentItemState);
|
|
57
|
+
const columnItems = allItems.filter((e) => e[sa] == currentItemState);
|
|
58
|
+
const columnSelected = columnItems.find((e) => e.Id == currentSelectedItem.Id);
|
|
59
|
+
const prevSelected = getPrev(columnItems, columnSelected);
|
|
60
|
+
if (prevSelected)
|
|
61
|
+
selectElementId = prevSelected.Id;
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case SELECT_NEXT:
|
|
65
|
+
if (currentSelectedItem) {
|
|
66
|
+
const currentItemState = currentSelectedItem[sa];
|
|
67
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentItemState);
|
|
68
|
+
const columnItems = allItems.filter((e) => e[sa] == currentItemState);
|
|
69
|
+
const columnSelected = columnItems.find((e) => e.Id == currentSelectedItem.Id);
|
|
70
|
+
const nextSelected = getNext(columnItems, columnSelected);
|
|
71
|
+
if (nextSelected)
|
|
72
|
+
selectElementId = nextSelected.Id;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
case KEEP_OR_SELECT_NEXT:
|
|
76
|
+
{
|
|
77
|
+
selectElementId = currentSelectedItem.Id ?? 0;
|
|
78
|
+
if (currentSelectedItem) {
|
|
79
|
+
const currentItemState = currentSelectedItem[sa];
|
|
80
|
+
selectedColumnIdx = definition.columns.findIndex((c2) => c2.state == currentItemState);
|
|
81
|
+
const columnItems = allItems.filter((e) => e[sa] == currentItemState);
|
|
82
|
+
const columnSelected = columnItems.find((e) => e.Id == currentSelectedItem.Id);
|
|
83
|
+
const nextSelected = getNext(columnItems, columnSelected);
|
|
84
|
+
if (nextSelected)
|
|
85
|
+
altSelectElementId = nextSelected.Id;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
if (typeof selectElement === "object" && !Array.isArray(selectElement) && selectElement !== null)
|
|
91
|
+
selectElementId = selectElement.Id;
|
|
92
|
+
else
|
|
93
|
+
selectElementId = selectElement;
|
|
94
|
+
}
|
|
95
|
+
if (Array.isArray(data))
|
|
96
|
+
definition.objects = data;
|
|
97
|
+
else
|
|
98
|
+
definition.self = data;
|
|
99
|
+
definition.items = null;
|
|
100
|
+
columns.forEach((c2) => c2.reload());
|
|
101
|
+
await tick();
|
|
102
|
+
allItems = definition.getItems();
|
|
103
|
+
if (selectElementId > 0) {
|
|
104
|
+
if (selectedColumnIdx < 0) {
|
|
105
|
+
let selectedElement = allItems.find((e) => e.Id == selectElementId);
|
|
106
|
+
if (selectedElement) {
|
|
107
|
+
selectedColumnIdx = getColumnIdx(selectedElement);
|
|
108
|
+
columns[selectedColumnIdx].activateByItemId(selectElementId);
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
const columnState = definition.columns[selectedColumnIdx].state;
|
|
112
|
+
const columnItems = allItems.filter((e) => e[sa] == columnState);
|
|
113
|
+
let selectedElement = allItems.find((e) => e.Id == selectElementId);
|
|
114
|
+
if (selectedElement == void 0) {
|
|
115
|
+
if (altSelectElementId > 0) {
|
|
116
|
+
selectedElement = columnItems.find((e) => e.Id == altSelectElementId);
|
|
117
|
+
if (selectedElement)
|
|
118
|
+
columns[selectedColumnIdx].activateByItemId(altSelectElementId);
|
|
119
|
+
}
|
|
120
|
+
} else
|
|
121
|
+
columns[selectedColumnIdx].activateByItemId(selectElementId);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function getColumnIdx(item) {
|
|
126
|
+
return definition.columns.findIndex((c2) => c2.state == item[definition.stateAttrib]);
|
|
36
127
|
}
|
|
37
|
-
export function
|
|
38
|
-
|
|
39
|
-
|
|
128
|
+
export function edit(item, field) {
|
|
129
|
+
const columnIdx = getColumnIdx(item);
|
|
130
|
+
if (columnIdx >= 0) {
|
|
131
|
+
const column = columns[columnIdx];
|
|
132
|
+
const card = column.findCardByItem(item);
|
|
40
133
|
if (card)
|
|
41
|
-
|
|
134
|
+
card.editProperty(field);
|
|
42
135
|
}
|
|
43
|
-
return -1;
|
|
44
136
|
}
|
|
45
137
|
let columns = [];
|
|
46
138
|
afterUpdate(() => {
|
|
47
139
|
for (let i = 1; i < columns.length; i++) {
|
|
48
140
|
let left_column = columns[i - 1];
|
|
49
141
|
let right_column = columns[i];
|
|
50
|
-
const left_column_height = left_column
|
|
51
|
-
const right_column_height = right_column
|
|
142
|
+
const left_column_height = left_column?.getHeight();
|
|
143
|
+
const right_column_height = right_column?.getHeight();
|
|
52
144
|
if (left_column_height > right_column_height) {
|
|
53
|
-
left_column
|
|
54
|
-
right_column
|
|
145
|
+
left_column?.setBorder(left_column.SET_RIGHT);
|
|
146
|
+
right_column?.setBorder(right_column.CLEAR_LEFT);
|
|
55
147
|
} else {
|
|
56
|
-
left_column
|
|
57
|
-
right_column
|
|
148
|
+
left_column?.setBorder(left_column.CLEAR_RIGHT);
|
|
149
|
+
right_column?.setBorder(right_column.SET_LEFT);
|
|
58
150
|
}
|
|
59
151
|
}
|
|
60
152
|
});
|
|
61
|
-
export function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
153
|
+
export function moveUp(item) {
|
|
154
|
+
const columnIdx = getColumnIdx(item);
|
|
155
|
+
let allItems = definition.getItems();
|
|
156
|
+
const oa = definition.orderAttrib;
|
|
157
|
+
const sa = definition.stateAttrib;
|
|
158
|
+
const column = columns[columnIdx];
|
|
159
|
+
const columnState = definition.columns[columnIdx].state;
|
|
160
|
+
let prev = allItems.findLast((e) => e[sa] == columnState && e[oa] < item[oa]);
|
|
161
|
+
if (!prev)
|
|
162
|
+
return;
|
|
163
|
+
swapElements(allItems, item, prev);
|
|
164
|
+
[item[oa], prev[oa]] = [prev[oa], item[oa]];
|
|
165
|
+
informModification(item, oa);
|
|
166
|
+
informModification(prev, oa);
|
|
167
|
+
pushChanges();
|
|
168
|
+
column.reload();
|
|
67
169
|
}
|
|
68
|
-
export function
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
170
|
+
export function moveDown(item) {
|
|
171
|
+
const columnIdx = getColumnIdx(item);
|
|
172
|
+
let allItems = definition.getItems();
|
|
173
|
+
const oa = definition.orderAttrib;
|
|
174
|
+
const sa = definition.stateAttrib;
|
|
175
|
+
const column = columns[columnIdx];
|
|
176
|
+
const columnState = definition.columns[columnIdx].state;
|
|
177
|
+
let next = allItems.find((e) => e[sa] == columnState && e[oa] > item[oa]);
|
|
178
|
+
if (!next)
|
|
179
|
+
return;
|
|
180
|
+
swapElements(allItems, item, next);
|
|
181
|
+
[item[oa], next[oa]] = [next[oa], item[oa]];
|
|
182
|
+
informModification(item, oa);
|
|
183
|
+
informModification(next, oa);
|
|
184
|
+
pushChanges();
|
|
185
|
+
column.reload();
|
|
74
186
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
187
|
+
const ORDER_STEP = 64;
|
|
188
|
+
const MIN_ORDER = 0;
|
|
189
|
+
function reorderElements(items, from = null) {
|
|
190
|
+
const oa = definition.orderAttrib;
|
|
191
|
+
let fromIdx;
|
|
192
|
+
let fromOrder;
|
|
193
|
+
if (from) {
|
|
194
|
+
fromOrder = from[oa];
|
|
195
|
+
fromIdx = items.findIndex((e) => e == from);
|
|
196
|
+
} else {
|
|
197
|
+
fromOrder = MIN_ORDER;
|
|
198
|
+
fromIdx = 0;
|
|
199
|
+
}
|
|
200
|
+
let order = fromOrder;
|
|
201
|
+
for (let i = fromIdx; i < items.length; i++) {
|
|
202
|
+
let el = items[i];
|
|
203
|
+
el[oa] = order;
|
|
204
|
+
informModification(el, oa);
|
|
205
|
+
order += ORDER_STEP;
|
|
206
|
+
}
|
|
207
|
+
pushChanges();
|
|
208
|
+
}
|
|
209
|
+
export function replace(item, toColumnIdx, afterElement) {
|
|
210
|
+
const fromColumnIdx = getColumnIdx(item);
|
|
211
|
+
let allItems = definition.getItems();
|
|
212
|
+
const oa = definition.orderAttrib;
|
|
213
|
+
const sa = definition.stateAttrib;
|
|
214
|
+
const toColumnState = definition.columns[toColumnIdx].state;
|
|
215
|
+
const toListTop = allItems.find((e) => e[sa] == toColumnState);
|
|
216
|
+
const toListBottom = allItems.findLast((e) => e[sa] == toColumnState);
|
|
217
|
+
const fromColumn = columns[fromColumnIdx];
|
|
218
|
+
const toColumn = columns[toColumnIdx];
|
|
219
|
+
switch (afterElement) {
|
|
220
|
+
case KanbanColumnTop:
|
|
221
|
+
if (!toListTop || toListTop[oa] > item[oa]) {
|
|
222
|
+
item[sa] = toColumnState;
|
|
223
|
+
informModification(item, sa);
|
|
224
|
+
} else {
|
|
225
|
+
const prevItem = getPrev(allItems, toListTop);
|
|
226
|
+
if (!prevItem) {
|
|
227
|
+
item[sa] = toColumnState;
|
|
228
|
+
item[oa] = toListTop[oa] - ORDER_STEP;
|
|
229
|
+
informModification(item, sa);
|
|
230
|
+
informModification(item, oa);
|
|
231
|
+
remove(allItems, item);
|
|
232
|
+
insertAt(allItems, 0, item);
|
|
233
|
+
} else {
|
|
234
|
+
let prevOrder = prevItem[oa];
|
|
235
|
+
let nextOrder = toListTop[oa];
|
|
236
|
+
let orderSpace = nextOrder - prevOrder;
|
|
237
|
+
if (orderSpace < 2) {
|
|
238
|
+
reorderElements(allItems, prevItem);
|
|
239
|
+
prevOrder = prevItem[oa];
|
|
240
|
+
nextOrder = toListTop[oa];
|
|
241
|
+
orderSpace = nextOrder - prevOrder;
|
|
242
|
+
}
|
|
243
|
+
item[sa] = toColumnState;
|
|
244
|
+
item[oa] = prevOrder + Math.floor(orderSpace / 2);
|
|
245
|
+
informModification(item, sa);
|
|
246
|
+
informModification(item, oa);
|
|
247
|
+
remove(allItems, item);
|
|
248
|
+
insertAfter(allItems, prevItem, item);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
pushChanges();
|
|
252
|
+
fromColumn.reload();
|
|
253
|
+
toColumn.reload();
|
|
254
|
+
return;
|
|
255
|
+
case KanbanColumnBottom:
|
|
256
|
+
default:
|
|
257
|
+
if (!toListBottom || item[oa] > toListBottom[oa]) {
|
|
258
|
+
item[sa] = toColumnState;
|
|
259
|
+
informModification(item, sa);
|
|
260
|
+
} else {
|
|
261
|
+
const nextItem = getNext(allItems, toListBottom);
|
|
262
|
+
if (!nextItem) {
|
|
263
|
+
item[sa] = toColumnState;
|
|
264
|
+
item[oa] = toListBottom[oa] + ORDER_STEP;
|
|
265
|
+
informModification(item, sa);
|
|
266
|
+
informModification(item, oa);
|
|
267
|
+
remove(allItems, item);
|
|
268
|
+
insertAfter(allItems, toListBottom, item);
|
|
269
|
+
} else {
|
|
270
|
+
let nextOrder = nextItem[oa];
|
|
271
|
+
let prevOrder = toListBottom[oa];
|
|
272
|
+
let orderSpace = nextOrder - prevOrder;
|
|
273
|
+
if (orderSpace < 2) {
|
|
274
|
+
reorderElements(allItems, toListBottom);
|
|
275
|
+
prevOrder = toListBottom[oa];
|
|
276
|
+
nextOrder = nextItem[oa];
|
|
277
|
+
orderSpace = nextOrder - prevOrder;
|
|
278
|
+
}
|
|
279
|
+
item[sa] = toColumnState;
|
|
280
|
+
item[oa] = prevOrder + Math.floor(orderSpace / 2);
|
|
281
|
+
informModification(item, sa);
|
|
282
|
+
informModification(item, oa);
|
|
283
|
+
remove(allItems, item);
|
|
284
|
+
insertAfter(allItems, toListBottom, item);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
pushChanges();
|
|
288
|
+
fromColumn.reload();
|
|
289
|
+
toColumn.reload();
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async function onInsert(columnIdx, title2, afterId) {
|
|
294
|
+
const columnState = definition.columns[columnIdx].state;
|
|
295
|
+
const oa = definition.orderAttrib;
|
|
296
|
+
const sa = definition.stateAttrib;
|
|
297
|
+
const allItems = definition.getItems();
|
|
298
|
+
const columnTop = allItems.find((e) => e[sa] == columnState);
|
|
299
|
+
const columnBottom = allItems.findLast((e) => e[sa] == columnState);
|
|
300
|
+
let newElement = {
|
|
301
|
+
[definition.titleAttrib]: title2,
|
|
302
|
+
[sa]: columnState
|
|
303
|
+
};
|
|
304
|
+
if (afterId == KanbanColumnTop) {
|
|
305
|
+
if (!columnTop) {
|
|
306
|
+
let maxOrder = 0;
|
|
307
|
+
if (allItems.length > 0) {
|
|
308
|
+
const lastItem = allItems[allItems.length - 1];
|
|
309
|
+
maxOrder = lastItem[oa];
|
|
310
|
+
}
|
|
311
|
+
newElement[oa] = maxOrder + ORDER_STEP;
|
|
312
|
+
} else {
|
|
313
|
+
const prevItem = getPrev(allItems, columnTop);
|
|
314
|
+
if (prevItem) {
|
|
315
|
+
let prevOrder = prevItem[oa];
|
|
316
|
+
let nextOrder = columnTop[oa];
|
|
317
|
+
let orderSpace = nextOrder - prevOrder;
|
|
318
|
+
if (orderSpace < 2) {
|
|
319
|
+
reorderElements(allItems, prevItem);
|
|
320
|
+
prevOrder = prevItem[oa];
|
|
321
|
+
nextOrder = columnTop[oa];
|
|
322
|
+
orderSpace = nextOrder - prevOrder;
|
|
323
|
+
}
|
|
324
|
+
const newOrder = prevOrder + Math.floor(orderSpace / 2);
|
|
325
|
+
newElement[oa] = newOrder;
|
|
326
|
+
} else {
|
|
327
|
+
newElement[oa] = columnTop[oa] - ORDER_STEP;
|
|
328
|
+
}
|
|
144
329
|
}
|
|
145
|
-
|
|
146
|
-
{
|
|
147
|
-
|
|
148
|
-
|
|
330
|
+
} else if (afterId == KanbanColumnBottom) {
|
|
331
|
+
if (!columnBottom) {
|
|
332
|
+
let maxOrder = 0;
|
|
333
|
+
if (allItems.length > 0) {
|
|
334
|
+
const lastItem = allItems[allItems.length - 1];
|
|
335
|
+
maxOrder = lastItem[oa];
|
|
336
|
+
}
|
|
337
|
+
newElement[oa] = maxOrder + ORDER_STEP;
|
|
338
|
+
} else {
|
|
339
|
+
const nextItem = getNext(allItems, columnBottom);
|
|
340
|
+
if (nextItem) {
|
|
341
|
+
let nextOrder = nextItem[oa];
|
|
342
|
+
let prevOrder = columnBottom[oa];
|
|
343
|
+
let orderSpace = nextOrder - prevOrder;
|
|
344
|
+
if (orderSpace < 2) {
|
|
345
|
+
reorderElements(allItems, columnBottom);
|
|
346
|
+
nextOrder = nextItem[oa];
|
|
347
|
+
prevOrder = columnBottom[oa];
|
|
348
|
+
orderSpace = nextOrder - prevOrder;
|
|
349
|
+
}
|
|
350
|
+
const newOrder = prevOrder + Math.floor(orderSpace / 2);
|
|
351
|
+
newElement[oa] = newOrder;
|
|
352
|
+
} else {
|
|
353
|
+
newElement[oa] = columnBottom[oa] + ORDER_STEP;
|
|
354
|
+
}
|
|
149
355
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
356
|
+
} else {
|
|
357
|
+
const prevItem = allItems.find((e) => e.Id == afterId);
|
|
358
|
+
if (!prevItem) {
|
|
359
|
+
let maxOrder = 0;
|
|
360
|
+
if (allItems.length > 0) {
|
|
361
|
+
const lastItem = allItems[allItems.length - 1];
|
|
362
|
+
maxOrder = lastItem[oa];
|
|
363
|
+
}
|
|
364
|
+
newElement[oa] = maxOrder + ORDER_STEP;
|
|
365
|
+
} else {
|
|
366
|
+
const nextItem = getNext(allItems, prevItem);
|
|
367
|
+
if (nextItem) {
|
|
368
|
+
let nextOrder = nextItem[oa];
|
|
369
|
+
let prevOrder = prevItem[oa];
|
|
370
|
+
let orderSpace = nextOrder - prevOrder;
|
|
371
|
+
if (orderSpace < 2) {
|
|
372
|
+
reorderElements(allItems, prevItem);
|
|
373
|
+
nextOrder = nextItem[oa];
|
|
374
|
+
prevOrder = prevItem[oa];
|
|
375
|
+
orderSpace = nextOrder - prevOrder;
|
|
376
|
+
}
|
|
377
|
+
const newOrder = prevOrder + Math.floor(orderSpace / 2);
|
|
378
|
+
newElement[oa] = newOrder;
|
|
379
|
+
} else {
|
|
380
|
+
newElement[oa] = prevItem[oa] + ORDER_STEP;
|
|
381
|
+
}
|
|
154
382
|
}
|
|
155
|
-
|
|
156
|
-
|
|
383
|
+
}
|
|
384
|
+
if (definition.onAdd)
|
|
385
|
+
await definition.onAdd(newElement);
|
|
386
|
+
}
|
|
387
|
+
export function activateColumn(columnIdx) {
|
|
388
|
+
columns[columnIdx].activate();
|
|
389
|
+
}
|
|
390
|
+
export function editColumnName(columnIdx, onFinish = void 0) {
|
|
391
|
+
columns[columnIdx].editName(onFinish);
|
|
392
|
+
}
|
|
393
|
+
export function moveCardsTo(items, toColumnIdx) {
|
|
394
|
+
items.forEach(
|
|
395
|
+
(item) => replace(item, toColumnIdx, KanbanColumnBottom)
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
export function setCardsState(items, state) {
|
|
399
|
+
const sa = definition.stateAttrib;
|
|
400
|
+
items.forEach((item) => {
|
|
401
|
+
item[sa] = state;
|
|
402
|
+
informModification(item, sa);
|
|
403
|
+
});
|
|
404
|
+
pushChanges();
|
|
405
|
+
}
|
|
406
|
+
export function add(item) {
|
|
407
|
+
const fromColumnIdx = getColumnIdx(item);
|
|
408
|
+
columns[fromColumnIdx].add(item);
|
|
409
|
+
}
|
|
410
|
+
</script>
|
|
411
|
+
|
|
412
|
+
{#key renderToken}
|
|
413
|
+
<slot/> <!-- Launch definition settings -->
|
|
414
|
+
|
|
415
|
+
{#if title}
|
|
416
|
+
<p class="hidden sm:block mt-3 ml-3 pb-5 text-lg text-left">{title}</p>
|
|
417
|
+
<!--hr class="hidden sm:block w-full"-->
|
|
418
|
+
{/if}
|
|
419
|
+
|
|
420
|
+
<section class="h-full mt-5 flex flex-row no-wrap sm:justify-center
|
|
421
|
+
overflow-x-auto snap-x snap-mandatory sm:snap-none
|
|
422
|
+
{user_class}">
|
|
423
|
+
{#each definition.columns as column, idx (column.id)}
|
|
424
|
+
<Column currentColumnIdx={idx}
|
|
425
|
+
{onInsert}
|
|
426
|
+
bind:this={columns[idx]}>
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
<svelte:fragment slot="kanbanCardTopProps" let:element>
|
|
430
|
+
<slot name="kanbanCardTopProps" {element}/>
|
|
431
|
+
</svelte:fragment>
|
|
432
|
+
|
|
433
|
+
<svelte:fragment slot="kanbanCardMiddleProps" let:element>
|
|
434
|
+
<slot name="kanbanCardMiddleProps" {element}/>
|
|
435
|
+
</svelte:fragment>
|
|
436
|
+
|
|
437
|
+
<svelte:fragment slot="kanbanCardBottomProps" let:element>
|
|
438
|
+
<slot name="kanbanCardBottomProps" {element}/>
|
|
439
|
+
</svelte:fragment>
|
|
440
|
+
|
|
441
|
+
</Column>
|
|
442
|
+
{/each}
|
|
443
|
+
</section>
|
|
444
|
+
{/key}
|
|
445
|
+
|
|
446
|
+
<style>
|
|
447
|
+
.grid-1
|
|
448
|
+
{
|
|
449
|
+
display: grid;
|
|
450
|
+
grid-template-columns: 100%;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
.grid-2
|
|
454
|
+
{
|
|
455
|
+
display: grid;
|
|
456
|
+
grid-template-columns: 50% 50%;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.grid-3
|
|
460
|
+
{
|
|
461
|
+
display: grid;
|
|
462
|
+
grid-template-columns: 33% 33% 33%;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.grid-4
|
|
466
|
+
{
|
|
467
|
+
display: grid;
|
|
468
|
+
grid-template-columns: 25% 25% 25% 25%;
|
|
469
|
+
}
|
|
470
|
+
.grid-5
|
|
471
|
+
{
|
|
472
|
+
display: grid;
|
|
473
|
+
grid-template-columns: 20% 20% 20% 20% 20%;
|
|
474
|
+
}
|
|
475
|
+
.grid-6
|
|
476
|
+
{
|
|
477
|
+
display: grid;
|
|
478
|
+
grid-template-columns: 16.6% 16.6% 16.6% 16.6% 16.6% 16.6;
|
|
479
|
+
}
|
|
480
|
+
.grid-7
|
|
481
|
+
{
|
|
482
|
+
display: grid;
|
|
483
|
+
grid-template-columns: 14.3% 14.3% 14.3% 14.3% 14.3% 14.3% 14.3%;
|
|
484
|
+
}
|
|
485
|
+
.grid-8
|
|
486
|
+
{
|
|
487
|
+
display: grid;
|
|
488
|
+
grid-template-columns: 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5%;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
</style>
|