@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.
Files changed (134) hide show
  1. package/README.md +0 -0
  2. package/components/Fab.svelte +5 -3
  3. package/components/Fab.svelte.d.ts +14 -14
  4. package/components/Floating_container.svelte.d.ts +21 -21
  5. package/components/Grid.menu.svelte.d.ts +25 -25
  6. package/components/button.svelte.d.ts +24 -24
  7. package/components/checkbox.svelte.d.ts +26 -26
  8. package/components/combo/combo.d.ts +17 -17
  9. package/components/combo/combo.item.svelte.d.ts +19 -19
  10. package/components/combo/combo.js +17 -17
  11. package/components/combo/combo.source.svelte.d.ts +22 -22
  12. package/components/combo/combo.svelte +1 -1
  13. package/components/combo/combo.svelte.d.ts +42 -42
  14. package/components/contextmenu.svelte.d.ts +26 -26
  15. package/components/date.svelte.d.ts +31 -31
  16. package/components/delayed.spinner.svelte.d.ts +19 -19
  17. package/components/document/internal/Document_command.d.ts +9 -9
  18. package/components/document/internal/Document_command.js +9 -9
  19. package/components/document/internal/Selection_helper.d.ts +7 -7
  20. package/components/document/internal/Selection_helper.js +133 -133
  21. package/components/document/internal/Selection_range.d.ts +26 -26
  22. package/components/document/internal/Selection_range.js +58 -58
  23. package/components/document/internal/palette.row.svelte.d.ts +36 -36
  24. package/components/document/internal/palette.svelte.d.ts +67 -67
  25. package/components/document/rich.edit.svelte +49 -8
  26. package/components/document/rich.edit.svelte.d.ts +32 -32
  27. package/components/edit.field.svelte.d.ts +28 -28
  28. package/components/file.loader.svelte.d.ts +25 -25
  29. package/components/icon.svelte.d.ts +62 -62
  30. package/components/input.text.svelte.d.ts +29 -29
  31. package/components/inputbox.ltop.svelte +1 -1
  32. package/components/inputbox.ltop.svelte.d.ts +52 -52
  33. package/components/kanban/Kanban.d.ts +43 -23
  34. package/components/kanban/Kanban.js +79 -23
  35. package/components/kanban/internal/kanban.card.svelte +195 -117
  36. package/components/kanban/internal/kanban.card.svelte.d.ts +32 -35
  37. package/components/kanban/internal/kanban.column.svelte +152 -108
  38. package/components/kanban/internal/kanban.column.svelte.d.ts +51 -51
  39. package/components/kanban/internal/kanban.inserter.svelte +14 -14
  40. package/components/kanban/internal/kanban.inserter.svelte.d.ts +18 -18
  41. package/components/kanban/internal/kanban.move.menu.svelte +138 -135
  42. package/components/kanban/internal/kanban.move.menu.svelte.d.ts +22 -19
  43. package/components/kanban/internal/kanban.props.svelte +140 -0
  44. package/components/kanban/internal/kanban.props.svelte.d.ts +19 -0
  45. package/components/kanban/kanban.callbacks.svelte +3 -9
  46. package/components/kanban/kanban.callbacks.svelte.d.ts +18 -21
  47. package/components/kanban/kanban.column.svelte +10 -10
  48. package/components/kanban/kanban.column.svelte.d.ts +21 -21
  49. package/components/kanban/kanban.combo.svelte +36 -0
  50. package/components/kanban/kanban.combo.svelte.d.ts +24 -0
  51. package/components/kanban/kanban.date.svelte +30 -0
  52. package/components/kanban/kanban.date.svelte.d.ts +21 -0
  53. package/components/kanban/kanban.source.svelte +25 -0
  54. package/components/kanban/kanban.source.svelte.d.ts +23 -0
  55. package/components/kanban/kanban.static.svelte +28 -0
  56. package/components/kanban/kanban.static.svelte.d.ts +20 -0
  57. package/components/kanban/kanban.summary.svelte +4 -0
  58. package/components/kanban/kanban.summary.svelte.d.ts +18 -16
  59. package/components/kanban/kanban.svelte +459 -124
  60. package/components/kanban/kanban.svelte.d.ts +63 -43
  61. package/components/kanban/kanban.tags.svelte +34 -0
  62. package/components/kanban/kanban.tags.svelte.d.ts +23 -0
  63. package/components/kanban/kanban.title.svelte +4 -2
  64. package/components/kanban/kanban.title.svelte.d.ts +18 -17
  65. package/components/list/List.d.ts +44 -36
  66. package/components/list/List.js +52 -42
  67. package/components/list/internal/list.element.props.svelte +65 -65
  68. package/components/list/internal/list.element.props.svelte.d.ts +21 -21
  69. package/components/list/internal/list.element.summary.svelte +44 -30
  70. package/components/list/internal/list.element.summary.svelte.d.ts +25 -24
  71. package/components/list/internal/list.element.svelte +24 -11
  72. package/components/list/internal/list.element.svelte.d.ts +29 -29
  73. package/components/list/internal/list.inserter.svelte.d.ts +19 -19
  74. package/components/list/list.combo.svelte.d.ts +21 -21
  75. package/components/list/list.date.svelte.d.ts +18 -18
  76. package/components/list/list.inserter.svelte.d.ts +17 -17
  77. package/components/list/list.static.svelte.d.ts +17 -17
  78. package/components/list/list.summary.svelte.d.ts +19 -19
  79. package/components/list/list.svelte +2 -2
  80. package/components/list/list.svelte.d.ts +59 -59
  81. package/components/list/list.title.svelte +2 -0
  82. package/components/list/list.title.svelte.d.ts +22 -21
  83. package/components/menu.d.ts +4 -4
  84. package/components/menu.js +56 -56
  85. package/components/radio.svelte.d.ts +26 -26
  86. package/components/sidebar/sidebar.brand.svelte.d.ts +31 -31
  87. package/components/sidebar/sidebar.group.svelte +41 -3
  88. package/components/sidebar/sidebar.group.svelte.d.ts +33 -27
  89. package/components/sidebar/sidebar.item.svelte.d.ts +28 -28
  90. package/components/sidebar/sidebar.list.svelte +15 -15
  91. package/components/sidebar/sidebar.list.svelte.d.ts +33 -33
  92. package/components/sidebar/sidebar.svelte.d.ts +27 -27
  93. package/components/simple.table.svelte.d.ts +41 -41
  94. package/components/table/_template.table.svelte.d.ts +57 -57
  95. package/components/table/column.svelte.d.ts +19 -19
  96. package/components/table/item.svelte.d.ts +17 -17
  97. package/components/table/table.d.ts +11 -11
  98. package/components/table/table.js +11 -11
  99. package/components/table/table.svelte.d.ts +75 -75
  100. package/components/tag.svelte +40 -0
  101. package/components/tag.svelte.d.ts +19 -0
  102. package/components/tags.svelte +207 -0
  103. package/components/tags.svelte.d.ts +31 -0
  104. package/components/textarea.ltop.svelte.d.ts +35 -35
  105. package/components/tile.title.svelte.d.ts +29 -29
  106. package/desk.svelte.d.ts +23 -23
  107. package/form.box.svelte.d.ts +35 -35
  108. package/horizontal.toolbar.svelte +23 -4
  109. package/horizontal.toolbar.svelte.d.ts +25 -23
  110. package/index.d.ts +59 -52
  111. package/index.js +65 -58
  112. package/internal/configurable.content.svelte.d.ts +27 -27
  113. package/internal/loading.svelte.d.ts +23 -23
  114. package/modal.svelte +7 -7
  115. package/modal.svelte.d.ts +35 -35
  116. package/operations.svelte +52 -23
  117. package/operations.svelte.d.ts +16 -16
  118. package/package.json +16 -8
  119. package/page.row.svelte.d.ts +31 -31
  120. package/page.svelte +3 -3
  121. package/page.svelte.d.ts +45 -45
  122. package/stores.d.ts +39 -39
  123. package/stores.js +0 -0
  124. package/tenant.members.svelte +10 -11
  125. package/tenant.members.svelte.d.ts +33 -33
  126. package/tile.svelte.d.ts +33 -33
  127. package/tiles.row.svelte.d.ts +31 -31
  128. package/tiles.vertical.row.svelte.d.ts +29 -29
  129. package/updates.d.ts +4 -3
  130. package/updates.js +16 -0
  131. package/utils.d.ts +35 -35
  132. package/utils.js +11 -1
  133. package/vertical.toolbar.svelte +31 -6
  134. 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 { data_tick_store, contextItemsStore, contextTypesStore } from "../../stores";
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 let key = "";
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($data_tick_store, $contextItemsStore);
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
- export function refresh() {
31
- setup();
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 updateSelf(_self) {
34
- self = _self;
35
- setup();
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 getColumnIdx(item2) {
38
- for (let idx = 0; idx < columns.length; idx++) {
39
- let card = columns[idx].findCardByItem(item2);
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
- return idx;
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.getHeight();
51
- const right_column_height = right_column.getHeight();
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.setBorder(left_column.SET_RIGHT);
54
- right_column.setBorder(right_column.CLEAR_LEFT);
145
+ left_column?.setBorder(left_column.SET_RIGHT);
146
+ right_column?.setBorder(right_column.CLEAR_LEFT);
55
147
  } else {
56
- left_column.setBorder(left_column.CLEAR_RIGHT);
57
- right_column.setBorder(right_column.SET_LEFT);
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 showMoveOperationsForItem(item2) {
62
- columns.forEach((c2) => {
63
- const card = c2.findCardByItem(item2);
64
- if (card)
65
- card.showMoveOperations();
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 scrollViewToCard(item2) {
69
- columns.forEach((c2) => {
70
- const card = c2.findCardByItem(item2);
71
- if (card)
72
- card._scrollViewToCard();
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
- </script>
76
-
77
- <slot/> <!-- Launch definition settings -->
78
-
79
-
80
- <section class="h-full mt-5 flex flex-row no-wrap sm:justify-center overflow-x-auto {user_class}">
81
- {#each definition.columns as column, idx (column.id)}
82
- <Column title={column.title}
83
- width={column.width}
84
- self={column.self}
85
- a={column.a}
86
- objects={column.objects}
87
- context={column.context}
88
- key={key}
89
- currentColumnIdx={idx}
90
- {showMoveOperationsForItem}
91
- {scrollViewToCard}
92
- bind:this={columns[idx]}>
93
-
94
-
95
- <svelte:fragment slot="kanbanCardTopProps" let:element>
96
- <slot name="kanbanCardTopProps" {element}/>
97
- </svelte:fragment>
98
-
99
- <svelte:fragment slot="kanbanCardMiddleProps" let:element>
100
- <slot name="kanbanCardMiddleProps" {element}/>
101
- </svelte:fragment>
102
-
103
- <svelte:fragment slot="kanbanCardBottomProps" let:element>
104
- <slot name="kanbanCardBottomProps" {element}/>
105
- </svelte:fragment>
106
-
107
- </Column>
108
- {/each}
109
- </section>
110
-
111
- <style>
112
- .grid-1
113
- {
114
- display: grid;
115
- grid-template-columns: 100%;
116
- }
117
-
118
- .grid-2
119
- {
120
- display: grid;
121
- grid-template-columns: 50% 50%;
122
- }
123
-
124
- .grid-3
125
- {
126
- display: grid;
127
- grid-template-columns: 33% 33% 33%;
128
- }
129
-
130
- .grid-4
131
- {
132
- display: grid;
133
- grid-template-columns: 25% 25% 25% 25%;
134
- }
135
- .grid-5
136
- {
137
- display: grid;
138
- grid-template-columns: 20% 20% 20% 20% 20%;
139
- }
140
- .grid-6
141
- {
142
- display: grid;
143
- grid-template-columns: 16.6% 16.6% 16.6% 16.6% 16.6% 16.6;
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
- .grid-7
146
- {
147
- display: grid;
148
- grid-template-columns: 14.3% 14.3% 14.3% 14.3% 14.3% 14.3% 14.3%;
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
- .grid-8
151
- {
152
- display: grid;
153
- grid-template-columns: 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5%;
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
- </style>
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>