@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,52 +1,52 @@
1
- /** @typedef {typeof __propDef.props} InputboxProps */
2
- /** @typedef {typeof __propDef.events} InputboxEvents */
3
- /** @typedef {typeof __propDef.slots} InputboxSlots */
4
- export default class Inputbox extends SvelteComponentTyped<{
5
- [x: string]: any;
6
- invalid?: boolean | undefined;
7
- label?: string | undefined;
8
- context?: string | undefined;
9
- self?: null | undefined;
10
- c?: string | undefined;
11
- typename?: string | undefined;
12
- a?: string | undefined;
13
- pushChangesImmediately?: boolean | undefined;
14
- s?: string | undefined;
15
- placeholder?: string | undefined;
16
- itype?: string | undefined;
17
- val?: string | undefined;
18
- validateCb?: any;
19
- validate?: (() => boolean) | undefined;
20
- }, {
21
- [evt: string]: CustomEvent<any>;
22
- }, {}> {
23
- get validate(): () => boolean;
24
- }
25
- export type InputboxProps = typeof __propDef.props;
26
- export type InputboxEvents = typeof __propDef.events;
27
- export type InputboxSlots = typeof __propDef.slots;
28
- import { SvelteComponentTyped } from "svelte";
29
- declare const __propDef: {
30
- props: {
31
- [x: string]: any;
32
- invalid?: boolean | undefined;
33
- label?: string | undefined;
34
- context?: string | undefined;
35
- self?: null | undefined;
36
- c?: string | undefined;
37
- typename?: string | undefined;
38
- a?: string | undefined;
39
- pushChangesImmediately?: boolean | undefined;
40
- s?: string | undefined;
41
- placeholder?: string | undefined;
42
- itype?: string | undefined;
43
- val?: string | undefined;
44
- validateCb?: any;
45
- validate?: (() => boolean) | undefined;
46
- };
47
- events: {
48
- [evt: string]: CustomEvent<any>;
49
- };
50
- slots: {};
51
- };
52
- export {};
1
+ /** @typedef {typeof __propDef.props} InputboxProps */
2
+ /** @typedef {typeof __propDef.events} InputboxEvents */
3
+ /** @typedef {typeof __propDef.slots} InputboxSlots */
4
+ export default class Inputbox extends SvelteComponentTyped<{
5
+ [x: string]: any;
6
+ invalid?: boolean | undefined;
7
+ label?: string | undefined;
8
+ context?: string | undefined;
9
+ self?: null | undefined;
10
+ c?: string | undefined;
11
+ typename?: string | undefined;
12
+ a?: string | undefined;
13
+ pushChangesImmediately?: boolean | undefined;
14
+ s?: string | undefined;
15
+ placeholder?: string | undefined;
16
+ itype?: string | undefined;
17
+ val?: string | undefined;
18
+ validateCb?: any;
19
+ validate?: (() => boolean) | undefined;
20
+ }, {
21
+ [evt: string]: CustomEvent<any>;
22
+ }, {}> {
23
+ get validate(): () => boolean;
24
+ }
25
+ export type InputboxProps = typeof __propDef.props;
26
+ export type InputboxEvents = typeof __propDef.events;
27
+ export type InputboxSlots = typeof __propDef.slots;
28
+ import { SvelteComponentTyped } from "svelte";
29
+ declare const __propDef: {
30
+ props: {
31
+ [x: string]: any;
32
+ invalid?: boolean | undefined;
33
+ label?: string | undefined;
34
+ context?: string | undefined;
35
+ self?: null | undefined;
36
+ c?: string | undefined;
37
+ typename?: string | undefined;
38
+ a?: string | undefined;
39
+ pushChangesImmediately?: boolean | undefined;
40
+ s?: string | undefined;
41
+ placeholder?: string | undefined;
42
+ itype?: string | undefined;
43
+ val?: string | undefined;
44
+ validateCb?: any;
45
+ validate?: (() => boolean) | undefined;
46
+ };
47
+ events: {
48
+ [evt: string]: CustomEvent<any>;
49
+ };
50
+ slots: {};
51
+ };
52
+ export {};
@@ -1,23 +1,43 @@
1
- export declare class rKanban_column {
2
- id: number;
3
- title: string;
4
- width: string;
5
- self: object | undefined;
6
- a: string;
7
- objects: object[] | undefined;
8
- context: string;
9
- }
10
- export declare class rKanban_definition {
11
- columns: rKanban_column[];
12
- titleAttrib: string;
13
- titleOnChange: Function | undefined;
14
- summaryAttrib: string;
15
- onUp: Function | undefined;
16
- onDown: Function | undefined;
17
- onAdd: Function | undefined;
18
- onRemove: Function | undefined;
19
- onReplace: Function | undefined;
20
- onOpen: Function | undefined;
21
- }
22
- export declare const KanbanColumnTop = -1;
23
- export declare const KanbanColumnBottom = -2;
1
+ import type { rList_property } from "../list/List";
2
+ export declare const KanbanCardTop = 1;
3
+ export declare const KanbanCardMiddle = 2;
4
+ export declare const KanbanCardBottom = 3;
5
+ export declare class rKanban_column {
6
+ id: number;
7
+ title: string;
8
+ width: string;
9
+ state: any;
10
+ finishing: boolean;
11
+ operations: object[] | undefined;
12
+ onTitleChanged: Function | undefined;
13
+ }
14
+ export declare class rKanban_definition {
15
+ columns: rKanban_column[];
16
+ titleAttrib: string;
17
+ titleOnChange: Function | undefined;
18
+ titleReadOnly: boolean;
19
+ summaryAttrib: string;
20
+ summaryOnChange: Function | undefined;
21
+ summaryReadOnly: boolean;
22
+ properties: rList_property[];
23
+ self: object | undefined;
24
+ a: string;
25
+ objects: object[] | undefined;
26
+ context: string;
27
+ key: string;
28
+ typename: string;
29
+ stateAttrib: string;
30
+ orderAttrib: string;
31
+ onUp: Function | undefined;
32
+ onDown: Function | undefined;
33
+ onAdd: Function | undefined;
34
+ onRemove: Function | undefined;
35
+ onReplace: Function | undefined;
36
+ onOpen: Function | undefined;
37
+ getCardOperations: Function | undefined;
38
+ private items;
39
+ getItems(): object[];
40
+ clear(): void;
41
+ }
42
+ export declare const KanbanColumnTop = -1;
43
+ export declare const KanbanColumnBottom = -2;
@@ -1,23 +1,79 @@
1
- export class rKanban_column {
2
- id;
3
- title = '';
4
- width = 'w-[240px]';
5
- self = undefined;
6
- a = '';
7
- objects = undefined;
8
- context = '';
9
- }
10
- export class rKanban_definition {
11
- columns = [];
12
- titleAttrib = '';
13
- titleOnChange = undefined;
14
- summaryAttrib = '';
15
- onUp = undefined;
16
- onDown = undefined;
17
- onAdd = undefined;
18
- onRemove = undefined;
19
- onReplace = undefined;
20
- onOpen = undefined;
21
- }
22
- export const KanbanColumnTop = -1;
23
- export const KanbanColumnBottom = -2;
1
+ export const KanbanCardTop = 1;
2
+ export const KanbanCardMiddle = 2;
3
+ export const KanbanCardBottom = 3;
4
+ export class rKanban_column {
5
+ id;
6
+ title = '';
7
+ width = 'w-[240px]';
8
+ state = '';
9
+ finishing = false;
10
+ operations = undefined;
11
+ onTitleChanged = undefined;
12
+ }
13
+ export class rKanban_definition {
14
+ columns = [];
15
+ titleAttrib = '';
16
+ titleOnChange = undefined;
17
+ titleReadOnly = false;
18
+ summaryAttrib = '';
19
+ summaryOnChange = undefined;
20
+ summaryReadOnly = false;
21
+ properties = [];
22
+ self = undefined;
23
+ a = '';
24
+ objects = undefined;
25
+ context = '';
26
+ key = '';
27
+ typename = '';
28
+ stateAttrib = '';
29
+ orderAttrib = '';
30
+ onUp = undefined;
31
+ onDown = undefined;
32
+ onAdd = undefined;
33
+ onRemove = undefined;
34
+ onReplace = undefined;
35
+ onOpen = undefined;
36
+ getCardOperations = undefined;
37
+ items = null;
38
+ getItems() {
39
+ if (this.items == null) {
40
+ let item = this.self;
41
+ this.items = null;
42
+ if (this.objects)
43
+ this.items = this.objects;
44
+ else if (item && this.a)
45
+ this.items = item[this.a];
46
+ if (this.items == null)
47
+ this.items = [];
48
+ }
49
+ return this.items;
50
+ }
51
+ clear() {
52
+ this.columns = [];
53
+ this.titleAttrib = '';
54
+ this.titleOnChange = undefined;
55
+ this.titleReadOnly = false;
56
+ this.summaryAttrib = '';
57
+ this.summaryOnChange = undefined;
58
+ this.summaryReadOnly = false;
59
+ this.properties = [];
60
+ this.self = undefined;
61
+ this.a = '';
62
+ this.objects = undefined;
63
+ this.context = '';
64
+ this.key = '';
65
+ this.typename = '';
66
+ this.stateAttrib = '';
67
+ this.orderAttrib = '';
68
+ this.onUp = undefined;
69
+ this.onDown = undefined;
70
+ this.onAdd = undefined;
71
+ this.onRemove = undefined;
72
+ this.onReplace = undefined;
73
+ this.onOpen = undefined;
74
+ this.getCardOperations = undefined;
75
+ this.items = null;
76
+ }
77
+ }
78
+ export const KanbanColumnTop = -1;
79
+ export const KanbanColumnBottom = -2;
@@ -1,4 +1,4 @@
1
- <script>import { getContext } from "svelte";
1
+ <script>import { getContext, tick } from "svelte";
2
2
  import {
3
3
  contextItemsStore,
4
4
  isActive,
@@ -6,23 +6,24 @@ import {
6
6
  activateItem,
7
7
  selectable,
8
8
  editable,
9
- showFloatingToolbar
9
+ showFloatingToolbar,
10
+ informModification,
11
+ pushChanges
10
12
  } from "../../..";
11
- import { FaArrowsAlt, FaTrash, FaPlus, FaAlignLeft } from "svelte-icons/fa";
13
+ import { FaArrowsAlt, FaTrash, FaPlus, FaExternalLinkAlt } from "svelte-icons/fa";
12
14
  import MoveOperations from "./kanban.move.menu.svelte";
15
+ import Properties from "./kanban.props.svelte";
16
+ import { KanbanCardTop, KanbanCardMiddle, KanbanCardBottom } from "../Kanban";
13
17
  export let item;
14
- export let showMoveOperationsForItem = void 0;
15
- export let scrollViewToCard = void 0;
16
- export let runInserter = void 0;
17
18
  let definition = getContext("rKanban-definition");
18
19
  $:
19
- is_row_active = calculate_active(item, $contextItemsStore);
20
+ isCardActive = calculate_active(item, $contextItemsStore);
20
21
  $:
21
- is_row_selected = selected(item, $contextItemsStore);
22
+ isCardSelected = selected(item, $contextItemsStore);
22
23
  $:
23
- selected_class = is_row_selected ? "!border-blue-300" : "";
24
+ selectedClass = isCardSelected ? "!border-blue-300" : "";
24
25
  $:
25
- focused_class = is_row_active ? "bg-stone-100 dark:bg-stone-700" : "";
26
+ focusedClass = isCardActive ? "bg-stone-100 dark:bg-stone-700" : "";
26
27
  function calculate_active(...args) {
27
28
  return isActive("props", item);
28
29
  }
@@ -35,47 +36,19 @@ export function activate(e) {
35
36
  if (isActive("props", item)) {
36
37
  return;
37
38
  }
39
+ let operations = getOperations();
38
40
  activateItem("props", item, operations);
39
41
  }
40
- let operations = [
41
- {
42
- caption: "",
43
- icon: FaPlus,
44
- action: (f) => {
45
- if (runInserter)
46
- runInserter(item);
47
- }
48
- },
49
- {
50
- caption: "",
51
- icon: FaArrowsAlt,
52
- toolbar: MoveOperations,
53
- props: {
54
- definition,
55
- item,
56
- afterActionOperation: scrollViewToCard
57
- }
58
- },
59
- {
60
- caption: "",
61
- icon: FaTrash,
62
- action: (f) => definition.onRemove(item)
42
+ function getOperations() {
43
+ let operations = [];
44
+ const getCustomOperations = definition.getCardOperations;
45
+ if (getCustomOperations) {
46
+ const cutomOperations = getCustomOperations(item);
47
+ cutomOperations.forEach((o) => operations.push(o));
63
48
  }
64
- ];
65
- let moveButton;
66
- let card;
67
- export function showMoveOperations() {
68
- let rect = moveButton.getBoundingClientRect();
69
- showFloatingToolbar(
70
- rect,
71
- MoveOperations,
72
- {
73
- definition,
74
- item,
75
- afterActionOperation: showMoveOperationsForItem
76
- }
77
- );
49
+ return operations;
78
50
  }
51
+ let card;
79
52
  export function _scrollViewToCard() {
80
53
  card?.scrollIntoView(
81
54
  {
@@ -85,74 +58,179 @@ export function _scrollViewToCard() {
85
58
  }
86
59
  );
87
60
  }
88
- </script>
89
-
90
- <!-- svelte-ignore a11y-click-events-have-key-events -->
91
-
92
- <li class="mx-2 pt-2 pb-4 px-1 rounded-md border border-transparent {selected_class} {focused_class}"
93
- class:cursor-pointer={!is_row_active}
94
- on:click={activate}
95
- use:selectable={item}
96
- bind:this={card}>
97
-
98
- <!-- -->
99
- <!--section class="h-6 w-full flex flex-row ">
100
- <button class="h-3 w-3"
101
- class:hidden={!is_row_active}
102
- on:click={(e) => showMoveOperations()}
103
- bind:this={moveButton}>
104
- <FaArrowsAlt/>
105
- </button>
106
-
107
- {#if $$slots.kanbanCardTopProps}
108
- <div class="ml-auto flex flex-row gap-2">
109
- <slot name="kanbanCardTopProps" element={item}/>
110
- </div>
111
- {/if}
112
- </section-->
113
-
114
- {#if $$slots.kanbanCardTopProps}
115
- <section class="flex flex-row justify-between">
116
- <slot name="kanbanCardTopProps" element={item}/>
117
- </section>
118
- {/if}
119
-
120
-
121
- <h3 class=" text-lg font-semibold min-h-[1.75rem]
122
- sm:text-sm sm:font-semibold sm:min-h-[1.25rem]
123
- whitespace-nowrap overflow-clip truncate w-full sm:flex-none
124
- relative"
125
- use:editable={{
126
- action: (text) => definition.titleOnChange(text, item),
127
- active: true}}>
128
- {item[definition.titleAttrib]}
129
-
130
- {#if definition.onOpen}
131
- <button class="absolute top-1 right-0 w-5 h-5 sm:w-3 sm:h-3"
132
- class:hidden={!is_row_active}
133
- on:click={(e) => definition.onOpen(item)}>
134
- <FaAlignLeft/>
135
- </button>
136
- {/if}
137
- </h3>
138
-
139
- {#if $$slots.kanbanCardMiddleProps}
140
- <section class="w-full flex flex-row">
141
- <slot name="kanbanCardMiddleProps" element={item} />
142
- </section>
143
- {/if}
144
-
145
- {#if item[definition.summaryAttrib]}
146
- <summary class=" sm:text-xs sm:min-h-[1rem]
147
- text-base min-h-[1.5rem]
148
- text-stone-400
149
- max-h-[75px] sm:max-h-[64px]
150
- text-ellipsis overflow-hidden">
151
- {item[definition.summaryAttrib]}
152
- </summary>
153
- {/if}
154
-
155
- {#if $$slots.kanbanCardBottomProps}
156
- <slot name="kanbanCardBottomProps" element={item} />
157
- {/if}
61
+ function onTitleChanged(text) {
62
+ if (definition.titleOnChange)
63
+ definition.titleOnChange(text, item);
64
+ else {
65
+ item[definition.titleAttrib] = text;
66
+ informModification(item, definition.titleAttrib);
67
+ pushChanges();
68
+ }
69
+ }
70
+ function onSummaryChanged(text) {
71
+ if (definition.summaryOnChange)
72
+ definition.summaryOnChange(text, item);
73
+ else {
74
+ item[definition.summaryAttrib] = text;
75
+ informModification(item, definition.summaryAttrib);
76
+ pushChanges();
77
+ }
78
+ }
79
+ function setSelectionAtEnd(element) {
80
+ const textNode = element.childNodes[0];
81
+ const text = textNode.textContent;
82
+ let range = document.createRange();
83
+ let end_offset = text.length;
84
+ let end_container = textNode;
85
+ range.setStart(end_container, end_offset);
86
+ range.setEnd(end_container, end_offset);
87
+ let sel = window.getSelection();
88
+ sel.removeAllRanges();
89
+ sel.addRange(range);
90
+ }
91
+ let topProps;
92
+ let middleProps;
93
+ let bottomProps;
94
+ let titleElement;
95
+ let summaryElement;
96
+ let summaryPlaceholder = false;
97
+ export async function editProperty(field) {
98
+ if (field == "Title") {
99
+ titleElement.focus();
100
+ await tick();
101
+ setSelectionAtEnd(titleElement);
102
+ } else if (field == "Summary") {
103
+ if (!!summaryElement) {
104
+ summaryElement.focus();
105
+ await tick();
106
+ setSelectionAtEnd(summaryElement);
107
+ } else {
108
+ summaryPlaceholder = true;
109
+ await tick();
110
+ if (!!summaryElement)
111
+ summaryElement.focus();
112
+ }
113
+ } else {
114
+ const property = definition.properties.find((p) => p.name == field);
115
+ if (!property)
116
+ return;
117
+ switch (property.position) {
118
+ case KanbanCardTop:
119
+ topProps.editProperty(field);
120
+ break;
121
+ case KanbanCardMiddle:
122
+ middleProps.editProperty(field);
123
+ break;
124
+ case KanbanCardBottom:
125
+ bottomProps.editProperty(field);
126
+ break;
127
+ }
128
+ }
129
+ }
130
+ </script>
131
+
132
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
133
+
134
+ <li class="mx-2 pt-2 pb-4 px-1 rounded-md border border-transparent {selectedClass} {focusedClass}"
135
+ class:cursor-pointer={!isCardActive}
136
+ on:click={activate}
137
+ use:selectable={item}
138
+ bind:this={card}>
139
+
140
+ <!-- -->
141
+ <!--section class="h-6 w-full flex flex-row ">
142
+ <button class="h-3 w-3"
143
+ class:hidden={!isCardActive}
144
+ on:click={(e) => showMoveOperations()}
145
+ bind:this={moveButton}>
146
+ <FaArrowsAlt/>
147
+ </button>
148
+
149
+ {#if $$slots.kanbanCardTopProps}
150
+ <div class="ml-auto flex flex-row gap-2">
151
+ <slot name="kanbanCardTopProps" element={item}/>
152
+ </div>
153
+ {/if}
154
+ </section-->
155
+
156
+ {#if $$slots.kanbanCardTopProps}
157
+ <section class="flex flex-row justify-between">
158
+ <slot name="kanbanCardTopProps" element={item}/>
159
+ </section>
160
+ {/if}
161
+ <Properties position={KanbanCardTop} {item} bind:this={topProps}/>
162
+
163
+
164
+ {#if isCardActive}
165
+ <h3 class=" text-lg font-semibold min-h-[1.75rem]
166
+ sm:text-sm sm:font-semibold sm:min-h-[1.25rem]
167
+ whitespace-nowrap overflow-clip truncate w-full sm:flex-none
168
+ relative"
169
+ use:editable={{
170
+ action: (text) => onTitleChanged(text),
171
+ active: true,
172
+ readonly: definition.titleReadOnly,
173
+ onFinish: (d) => {titleElement.blur()}}}
174
+ bind:this={titleElement}>
175
+ {item[definition.titleAttrib]}
176
+
177
+ {#if definition.onOpen}
178
+ <button class="absolute top-1 right-0 w-5 h-5 sm:w-3 sm:h-3"
179
+ on:click={(e) => definition.onOpen(item)}>
180
+ <FaExternalLinkAlt/>
181
+ </button>
182
+ {/if}
183
+ </h3>
184
+ {:else}
185
+ <h3 class=" text-lg font-semibold min-h-[1.75rem]
186
+ sm:text-sm sm:font-semibold sm:min-h-[1.25rem]
187
+ whitespace-nowrap overflow-clip truncate w-full sm:flex-none
188
+ relative">
189
+ {item[definition.titleAttrib]}
190
+
191
+ </h3>
192
+ {/if}
193
+
194
+
195
+ {#if $$slots.kanbanCardMiddleProps}
196
+ <section class="w-full flex flex-row">
197
+ <slot name="kanbanCardMiddleProps" element={item} />
198
+ </section>
199
+ {/if}
200
+
201
+ <Properties position={KanbanCardMiddle} {item} bind:this={middleProps}/>
202
+
203
+ {#if item[definition.summaryAttrib] || summaryPlaceholder}
204
+ {#key item[definition.summaryAttrib]}
205
+ {#if isCardActive}
206
+ <summary class=" sm:text-xs sm:min-h-[1rem]
207
+ text-base min-h-[1.5rem]
208
+ text-stone-400
209
+ max-h-[75px] sm:max-h-[64px]
210
+ overflow-hidden"
211
+ use:editable={{
212
+ action: (text) => onSummaryChanged(text),
213
+ active: true,
214
+ readonly: definition.summaryReadOnly,
215
+ onFinish: (d) => {summaryPlaceholder = false}}}
216
+ bind:this={summaryElement}>
217
+ {item[definition.summaryAttrib]}
218
+ </summary>
219
+ {:else}
220
+ <summary class=" sm:text-xs sm:min-h-[1rem]
221
+ text-base min-h-[1.5rem]
222
+ text-stone-400
223
+ max-h-[75px] sm:max-h-[64px]
224
+ overflow-hidden">
225
+ {item[definition.summaryAttrib]}
226
+ </summary>
227
+ {/if}
228
+ {/key}
229
+ {/if}
230
+
231
+ {#if $$slots.kanbanCardBottomProps}
232
+ <slot name="kanbanCardBottomProps" element={item} />
233
+ {/if}
234
+
235
+ <Properties position={KanbanCardBottom} {item} bind:this={bottomProps}/>
158
236
  </li>