@humandialog/forms.svelte 0.4.45 → 0.5.1

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 (116) hide show
  1. package/components/Fab.svelte +60 -48
  2. package/components/Floating_container.svelte +5 -4
  3. package/components/Floating_container.svelte.d.ts +2 -2
  4. package/components/Grid.menu.svelte +13 -9
  5. package/components/Grid.menu.svelte.d.ts +2 -2
  6. package/components/button.svelte +4 -4
  7. package/components/checkbox.svelte +12 -10
  8. package/components/checkbox.svelte.d.ts +1 -0
  9. package/components/combo/combo.d.ts +1 -1
  10. package/components/combo/combo.js +1 -1
  11. package/components/combo/combo.source.svelte +2 -2
  12. package/components/combo/combo.source.svelte.d.ts +1 -1
  13. package/components/combo/combo.svelte +92 -61
  14. package/components/combo/combo.svelte.d.ts +7 -4
  15. package/components/contextmenu.svelte +20 -19
  16. package/components/contextmenu.svelte.d.ts +5 -5
  17. package/components/date.svelte +40 -25
  18. package/components/date.svelte.d.ts +3 -2
  19. package/components/delayed.spinner.svelte +2 -2
  20. package/components/document/internal/palette.row.svelte +3 -3
  21. package/components/document/internal/palette.svelte +2 -2
  22. package/components/document/internal/palette.svelte.d.ts +1 -1
  23. package/components/document/rich.edit.svelte +307 -35
  24. package/components/document/rich.edit.svelte.d.ts +9 -0
  25. package/components/edit.field.svelte +17 -15
  26. package/components/edit.field.svelte.d.ts +2 -1
  27. package/components/file.loader.svelte +6 -6
  28. package/components/file.loader.svelte.d.ts +10 -10
  29. package/components/icon.svelte +2 -2
  30. package/components/icon.svelte.d.ts +3 -3
  31. package/components/input.text.svelte +3 -3
  32. package/components/inputbox.ltop.svelte +19 -17
  33. package/components/inputbox.ltop.svelte.d.ts +4 -2
  34. package/components/kanban/Kanban.d.ts +23 -0
  35. package/components/kanban/Kanban.js +23 -0
  36. package/components/kanban/internal/kanban.card.svelte +158 -0
  37. package/components/kanban/internal/kanban.card.svelte.d.ts +35 -0
  38. package/components/kanban/internal/kanban.column.svelte +181 -0
  39. package/components/kanban/internal/kanban.column.svelte.d.ts +51 -0
  40. package/components/kanban/internal/kanban.inserter.svelte +24 -0
  41. package/components/kanban/internal/kanban.inserter.svelte.d.ts +18 -0
  42. package/components/kanban/internal/kanban.move.menu.svelte +146 -0
  43. package/components/kanban/internal/kanban.move.menu.svelte.d.ts +19 -0
  44. package/components/kanban/kanban.callbacks.svelte +15 -0
  45. package/components/kanban/kanban.callbacks.svelte.d.ts +21 -0
  46. package/components/kanban/kanban.column.svelte +20 -0
  47. package/components/kanban/kanban.column.svelte.d.ts +21 -0
  48. package/components/kanban/kanban.summary.svelte +5 -0
  49. package/components/kanban/kanban.summary.svelte.d.ts +16 -0
  50. package/components/kanban/kanban.svelte +156 -0
  51. package/components/kanban/kanban.svelte.d.ts +43 -0
  52. package/components/kanban/kanban.title.svelte +8 -0
  53. package/components/kanban/kanban.title.svelte.d.ts +17 -0
  54. package/components/list/List.d.ts +4 -2
  55. package/components/list/List.js +4 -2
  56. package/components/list/internal/list.element.props.svelte +7 -8
  57. package/components/list/internal/list.element.props.svelte.d.ts +2 -2
  58. package/components/list/internal/list.element.summary.svelte +4 -4
  59. package/components/list/internal/list.element.summary.svelte.d.ts +1 -1
  60. package/components/list/internal/list.element.svelte +61 -49
  61. package/components/list/internal/list.element.svelte.d.ts +4 -4
  62. package/components/list/internal/list.inserter.svelte +9 -6
  63. package/components/list/internal/list.inserter.svelte.d.ts +1 -1
  64. package/components/list/list.combo.svelte +2 -2
  65. package/components/list/list.combo.svelte.d.ts +1 -1
  66. package/components/list/list.date.svelte +2 -2
  67. package/components/list/list.date.svelte.d.ts +1 -1
  68. package/components/list/list.inserter.svelte +1 -1
  69. package/components/list/list.summary.svelte +2 -2
  70. package/components/list/list.summary.svelte.d.ts +1 -1
  71. package/components/list/list.svelte +173 -35
  72. package/components/list/list.svelte.d.ts +27 -10
  73. package/components/list/list.title.svelte +6 -2
  74. package/components/list/list.title.svelte.d.ts +3 -1
  75. package/components/menu.d.ts +4 -4
  76. package/components/menu.js +15 -13
  77. package/components/radio.svelte +12 -10
  78. package/components/radio.svelte.d.ts +1 -0
  79. package/components/sidebar/sidebar.group.svelte +1 -13
  80. package/components/sidebar/sidebar.group.svelte.d.ts +0 -4
  81. package/components/sidebar/sidebar.item.svelte +13 -13
  82. package/components/sidebar/sidebar.list.svelte +68 -0
  83. package/components/sidebar/sidebar.list.svelte.d.ts +33 -0
  84. package/components/sidebar/sidebar.svelte +1 -1
  85. package/components/simple.table.svelte +15 -15
  86. package/components/simple.table.svelte.d.ts +2 -2
  87. package/components/table/_template.table.svelte +17 -17
  88. package/components/table/_template.table.svelte.d.ts +2 -2
  89. package/components/table/table.svelte +31 -31
  90. package/components/table/table.svelte.d.ts +8 -8
  91. package/components/textarea.ltop.svelte +4 -4
  92. package/components/tile.title.svelte +6 -6
  93. package/desk.svelte +13 -13
  94. package/form.box.svelte +2 -2
  95. package/horizontal.toolbar.svelte +24 -15
  96. package/horizontal.toolbar.svelte.d.ts +2 -2
  97. package/index.d.ts +14 -5
  98. package/index.js +14 -5
  99. package/modal.svelte +17 -17
  100. package/modal.svelte.d.ts +4 -4
  101. package/operations.svelte +42 -27
  102. package/package.json +12 -1
  103. package/page.svelte +115 -124
  104. package/page.svelte.d.ts +4 -4
  105. package/stores.d.ts +9 -7
  106. package/stores.js +17 -9
  107. package/tenant.members.svelte +44 -44
  108. package/tenant.members.svelte.d.ts +10 -10
  109. package/tile.svelte +3 -3
  110. package/tiles.vertical.row.svelte +1 -1
  111. package/updates.d.ts +3 -3
  112. package/updates.js +35 -3
  113. package/utils.d.ts +22 -13
  114. package/utils.js +198 -50
  115. package/vertical.toolbar.svelte +22 -13
  116. package/vertical.toolbar.svelte.d.ts +2 -2
@@ -1,7 +1,7 @@
1
1
  <svelte:options accessors={true}/>
2
2
  <script>import { icons } from "../utils.js";
3
3
  export let component = null;
4
- export let module_name = "fa/FaQuestion";
4
+ export let moduleName = "fa/FaQuestion";
5
5
  export let img = "";
6
6
  export let label = "";
7
7
  export let symbol = "";
@@ -89,7 +89,7 @@ $: {
89
89
  {#if component != null}
90
90
  <svelte:component this={component} />
91
91
  {:else if txt}
92
- <div class="m-0 p-0 font-sans font-bold flex flex-col justify-center text-center w-full h-full text-slate-900"
92
+ <div class="m-0 p-0 font-sans font-bold flex flex-col justify-center text-center w-full h-full text-stone-900"
93
93
  style:font-size={`${size/8}rem`}
94
94
  >
95
95
  <div>{txt}</div>
@@ -3,7 +3,7 @@ declare const __propDef: {
3
3
  props: {
4
4
  [x: string]: any;
5
5
  component?: null | undefined;
6
- module_name?: string | undefined;
6
+ moduleName?: string | undefined;
7
7
  img?: string | undefined;
8
8
  label?: string | undefined;
9
9
  symbol?: string | undefined;
@@ -34,9 +34,9 @@ export default class Icon extends SvelteComponentTyped<IconProps, IconEvents, Ic
34
34
  get component(): null | undefined;
35
35
  /**accessor*/
36
36
  set component(_: null | undefined);
37
- get module_name(): string | undefined;
37
+ get moduleName(): string | undefined;
38
38
  /**accessor*/
39
- set module_name(_: string | undefined);
39
+ set moduleName(_: string | undefined);
40
40
  get img(): string | undefined;
41
41
  /**accessor*/
42
42
  set img(_: string | undefined);
@@ -30,8 +30,8 @@
30
30
 
31
31
  {#if i!= null}
32
32
  <input type=text value={value} on:input={()=> ($data_tick_store = $data_tick_store + 1)}
33
- class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg
34
- focus:ring-primary-600 focus:border-primary-600 block w-full {input_pb} {input_pt} px-2.5 dark:bg-gray-700
35
- dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500"
33
+ class="bg-stone-50 border border-stone-300 text-stone-900 text-sm rounded-lg
34
+ focus:ring-primary-600 focus:border-primary-600 block w-full {input_pb} {input_pt} px-2.5 dark:bg-stone-700
35
+ dark:border-stone-600 dark:placeholder-stone-400 dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500"
36
36
  placeholder={placeholder}>
37
37
  {/if}
@@ -1,7 +1,7 @@
1
1
  <script>
2
- import {data_tick_store, context_items_store, context_types_store} from '../stores.js'
3
- import {inform_modification, push_changes} from '../updates.js'
4
- import {parse_width_directive} from '../utils.js'
2
+ import {data_tick_store, contextItemsStore, contextTypesStore} from '../stores.js'
3
+ import {informModification, pushChanges} from '../updates.js'
4
+ import {parseWidthDirective} from '../utils.js'
5
5
  import {getContext} from 'svelte';
6
6
  import Rich_edit from './document/rich.edit.svelte'
7
7
 
@@ -18,19 +18,20 @@
18
18
  export let val = ''
19
19
 
20
20
  export let placeholder = 'pl'
21
+ export let pushChangesImmediately = true;
21
22
 
22
23
  export let s = 'sm'
23
24
  export let c = ''
24
- export let validate_cb = undefined;
25
+ export let validateCb = undefined;
25
26
  export function validate()
26
27
  {
27
- if(!validate_cb)
28
+ if(!validateCb)
28
29
  {
29
30
  invalid = false;
30
31
  return true;
31
32
  }
32
33
 
33
- invalid = !validate_cb(val);
34
+ invalid = !validateCb(val);
34
35
  return !invalid;
35
36
  }
36
37
 
@@ -50,11 +51,11 @@
50
51
  break;
51
52
  }
52
53
 
53
- let cs = c ? parse_width_directive(c) : 'col-span-1';
54
+ let cs = c ? parseWidthDirective(c) : 'col-span-1';
54
55
  let ctx = context ? context : getContext('ctx');
55
56
 
56
57
  let last_tick = -1
57
- let border_style = "border-gray-300 dark:border-gray-600"
58
+ let border_style = "border-stone-300 dark:border-stone-600"
58
59
 
59
60
  $:{
60
61
  if($data_tick_store > last_tick)
@@ -64,10 +65,10 @@
64
65
  function setup()
65
66
  {
66
67
  last_tick = $data_tick_store;
67
- item = self ?? $context_items_store[ctx];
68
+ item = self ?? $contextItemsStore[ctx];
68
69
 
69
70
  if(!typename)
70
- typename = $context_types_store[ctx];
71
+ typename = $contextTypesStore[ctx];
71
72
 
72
73
  if(item && a)
73
74
  val = item[a]
@@ -86,14 +87,15 @@
86
87
  item[a] = val
87
88
 
88
89
  if(typename)
89
- inform_modification(item, a, typename);
90
+ informModification(item, a, typename);
90
91
  }
91
92
  }
92
93
 
93
94
  function accept_change()
94
95
  {
95
96
  $data_tick_store = $data_tick_store + 1;
96
- push_changes();
97
+ if(pushChangesImmediately)
98
+ pushChanges();
97
99
 
98
100
  }
99
101
 
@@ -107,9 +109,9 @@
107
109
  </script>
108
110
 
109
111
  {#if itype == 'text'}
110
- {@const border_style = invalid ? "border-red-300 dark:border-red-600" : "border-gray-300 dark:border-gray-600" }
112
+ {@const border_style = invalid ? "border-red-300 dark:border-red-600" : "border-stone-300 dark:border-stone-600" }
111
113
  <div class={cs}>
112
- <label for="name" class="block {label_mb} text-xs font-small text-gray-900 dark:text-white">{label}</label>
114
+ <label for="name" class="block {label_mb} text-xs font-small text-stone-900 dark:text-white">{label}</label>
113
115
 
114
116
  <input type=text name="name" id="name"
115
117
  bind:value={val}
@@ -117,12 +119,12 @@
117
119
  on:blur={() => { accept_change();} }
118
120
  on:keydown={(e)=>{check_validity();}}
119
121
 
120
- class=" bg-gray-50 dark:bg-gray-700
122
+ class=" bg-stone-50 dark:bg-stone-700
121
123
  border {border_style} rounded-lg
122
124
  focus:ring-primary-600 focus:border-primary-600 dark:focus:ring-primary-500 dark:focus:border-primary-500
123
- text-gray-900 dark:text-white text-sm
125
+ text-stone-900 dark:text-white text-sm
124
126
  block w-full {input_pb} {input_pt} px-2.5
125
- dark:placeholder-gray-400"
127
+ dark:placeholder-stone-400"
126
128
 
127
129
  placeholder={placeholder}>
128
130
  </div>
@@ -10,11 +10,12 @@ export default class Inputbox extends SvelteComponentTyped<{
10
10
  c?: string | undefined;
11
11
  typename?: string | undefined;
12
12
  a?: string | undefined;
13
+ pushChangesImmediately?: boolean | undefined;
13
14
  s?: string | undefined;
14
15
  placeholder?: string | undefined;
15
16
  itype?: string | undefined;
16
17
  val?: string | undefined;
17
- validate_cb?: any;
18
+ validateCb?: any;
18
19
  validate?: (() => boolean) | undefined;
19
20
  }, {
20
21
  [evt: string]: CustomEvent<any>;
@@ -35,11 +36,12 @@ declare const __propDef: {
35
36
  c?: string | undefined;
36
37
  typename?: string | undefined;
37
38
  a?: string | undefined;
39
+ pushChangesImmediately?: boolean | undefined;
38
40
  s?: string | undefined;
39
41
  placeholder?: string | undefined;
40
42
  itype?: string | undefined;
41
43
  val?: string | undefined;
42
- validate_cb?: any;
44
+ validateCb?: any;
43
45
  validate?: (() => boolean) | undefined;
44
46
  };
45
47
  events: {
@@ -0,0 +1,23 @@
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;
@@ -0,0 +1,23 @@
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;
@@ -0,0 +1,158 @@
1
+ <script>import { getContext } from "svelte";
2
+ import {
3
+ contextItemsStore,
4
+ isActive,
5
+ isSelected,
6
+ activateItem,
7
+ selectable,
8
+ editable,
9
+ showFloatingToolbar
10
+ } from "../../..";
11
+ import { FaArrowsAlt, FaTrash, FaPlus, FaAlignLeft } from "svelte-icons/fa";
12
+ import MoveOperations from "./kanban.move.menu.svelte";
13
+ export let item;
14
+ export let showMoveOperationsForItem = void 0;
15
+ export let scrollViewToCard = void 0;
16
+ export let runInserter = void 0;
17
+ let definition = getContext("rKanban-definition");
18
+ $:
19
+ is_row_active = calculate_active(item, $contextItemsStore);
20
+ $:
21
+ is_row_selected = selected(item, $contextItemsStore);
22
+ $:
23
+ selected_class = is_row_selected ? "!border-blue-300" : "";
24
+ $:
25
+ focused_class = is_row_active ? "bg-stone-100 dark:bg-stone-700" : "";
26
+ function calculate_active(...args) {
27
+ return isActive("props", item);
28
+ }
29
+ function selected(...args) {
30
+ return isSelected(item);
31
+ }
32
+ export function activate(e) {
33
+ if (e)
34
+ e.stopPropagation();
35
+ if (isActive("props", item)) {
36
+ return;
37
+ }
38
+ activateItem("props", item, operations);
39
+ }
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)
63
+ }
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
+ );
78
+ }
79
+ export function _scrollViewToCard() {
80
+ card?.scrollIntoView(
81
+ {
82
+ behavior: "smooth",
83
+ block: "start",
84
+ inline: "center"
85
+ }
86
+ );
87
+ }
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}
158
+ </li>
@@ -0,0 +1,35 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ item: object;
5
+ showMoveOperationsForItem?: Function | undefined;
6
+ scrollViewToCard?: Function | undefined;
7
+ runInserter?: Function | undefined;
8
+ activate?: ((e: any) => void) | undefined;
9
+ showMoveOperations?: (() => void) | undefined;
10
+ _scrollViewToCard?: (() => void) | undefined;
11
+ };
12
+ events: {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {
16
+ kanbanCardTopProps: {
17
+ element: object;
18
+ };
19
+ kanbanCardMiddleProps: {
20
+ element: object;
21
+ };
22
+ kanbanCardBottomProps: {
23
+ element: object;
24
+ };
25
+ };
26
+ };
27
+ export type KanbanProps = typeof __propDef.props;
28
+ export type KanbanEvents = typeof __propDef.events;
29
+ export type KanbanSlots = typeof __propDef.slots;
30
+ export default class Kanban extends SvelteComponentTyped<KanbanProps, KanbanEvents, KanbanSlots> {
31
+ get activate(): (e: any) => void;
32
+ get showMoveOperations(): () => void;
33
+ get _scrollViewToCard(): () => void;
34
+ }
35
+ export {};
@@ -0,0 +1,181 @@
1
+ <script>import { getContext, afterUpdate, tick } from "svelte";
2
+ import { data_tick_store, contextItemsStore, contextTypesStore } from "../../../stores";
3
+ import { getActive, activateItem } from "../../../utils.js";
4
+ import Card from "./kanban.card.svelte";
5
+ import { KanbanColumnTop, KanbanColumnBottom } from "../Kanban";
6
+ import Inserter from "./kanban.inserter.svelte";
7
+ import { FaPlus } from "svelte-icons/fa";
8
+ export let title = "";
9
+ export let width = "w-[240px]";
10
+ export let self = void 0;
11
+ export let a = "";
12
+ export let objects = void 0;
13
+ export let context = "";
14
+ export let key = "";
15
+ export let currentColumnIdx;
16
+ export let showMoveOperationsForItem = void 0;
17
+ export let scrollViewToCard = void 0;
18
+ let column_element;
19
+ export function getHeight() {
20
+ return column_element.getBoundingClientRect().height;
21
+ }
22
+ export const SET_LEFT = 0;
23
+ export const SET_RIGHT = 1;
24
+ export const CLEAR_LEFT = 2;
25
+ export const CLEAR_RIGHT = 3;
26
+ export function setBorder(what_to_do) {
27
+ switch (what_to_do) {
28
+ case SET_LEFT:
29
+ column_element.classList.add("border-l");
30
+ break;
31
+ case SET_RIGHT:
32
+ column_element.classList.add("border-r");
33
+ break;
34
+ case CLEAR_LEFT:
35
+ column_element.classList.remove("border-l");
36
+ break;
37
+ case CLEAR_RIGHT:
38
+ column_element.classList.remove("border-r");
39
+ break;
40
+ }
41
+ }
42
+ let definition = getContext("rKanban-definition");
43
+ let item = null;
44
+ let items = void 0;
45
+ let ctx = context ? context : getContext("ctx");
46
+ let last_tick = -1;
47
+ let item_key = "";
48
+ let width_class = width ? `w-11/12 sm:${width}` : "w-11/12 sm:w-[240px]";
49
+ $:
50
+ setup($data_tick_store, $contextItemsStore);
51
+ function setup(...args) {
52
+ last_tick = $data_tick_store;
53
+ item = self ?? $contextItemsStore[ctx];
54
+ items = void 0;
55
+ if (objects) {
56
+ items = objects;
57
+ } else if (item && a)
58
+ items = item[a];
59
+ if (items == void 0)
60
+ items = [];
61
+ if (items.length > 0) {
62
+ let first_element = items[0];
63
+ let keys = Object.keys(first_element);
64
+ if (key)
65
+ item_key = key;
66
+ else if (keys.includes("Id"))
67
+ item_key = "Id";
68
+ else if (keys.includes("$ref"))
69
+ item_key = "$ref";
70
+ else if (keys.length > 0)
71
+ item_key = keys[0];
72
+ else
73
+ item_key = "";
74
+ }
75
+ }
76
+ let cards = [];
77
+ export function findCardByItem(item2) {
78
+ if (!cards)
79
+ return null;
80
+ const item_idx = items?.findIndex((i) => i == item2);
81
+ if (item_idx >= 0) {
82
+ return cards[item_idx];
83
+ } else
84
+ return null;
85
+ }
86
+ let inserter;
87
+ const None = 0;
88
+ let showInserterAfter = None;
89
+ let activateAfterDomUpdate = null;
90
+ let lastActivatedElement = null;
91
+ export async function add(after = KanbanColumnTop) {
92
+ if (!definition.onAdd)
93
+ return;
94
+ showInserterAfter = after ?? KanbanColumnTop;
95
+ if (activateAfterDomUpdate)
96
+ activateAfterDomUpdate = null;
97
+ lastActivatedElement = getActive("props");
98
+ let fakeItem = {};
99
+ activateItem("props", fakeItem);
100
+ await tick();
101
+ if (!inserter)
102
+ return;
103
+ inserter.run(async (detail) => {
104
+ showInserterAfter = None;
105
+ if (detail.cancel)
106
+ activateAfterDomUpdate = lastActivatedElement;
107
+ else {
108
+ if (detail.incremental) {
109
+ let currentActive = activateAfterDomUpdate ?? getActive("props");
110
+ await add(currentActive);
111
+ }
112
+ }
113
+ });
114
+ }
115
+ async function insert(title2, after) {
116
+ let newElement = await definition.onAdd(title2, currentColumnIdx, after);
117
+ if (!newElement)
118
+ return;
119
+ activateAfterDomUpdate = newElement;
120
+ }
121
+ afterUpdate(() => {
122
+ if (activateAfterDomUpdate) {
123
+ let activateAfterDomUpdateIdx = items.findIndex((e) => e == activateAfterDomUpdate);
124
+ activateAfterDomUpdate = null;
125
+ if (activateAfterDomUpdateIdx >= 0) {
126
+ cards[activateAfterDomUpdateIdx].activate();
127
+ }
128
+ }
129
+ });
130
+ </script>
131
+
132
+
133
+ <section class="flex-none sm:flex-1 sm:min-w-[180px] sm:max-w-[240px] {width_class}">
134
+ <header>
135
+ <h2 class="mb-2 text-lg sm:text-xs uppercase w-full text-center whitespace-nowrap relative">{title}
136
+ <button class="absolute right-2 w-4 sm:w-2.5"
137
+ on:click={(e) => add(KanbanColumnTop)}>
138
+ <FaPlus/>
139
+ </button>
140
+ </h2>
141
+ </header>
142
+ <ul class="w-full border-stone-700" bind:this={column_element}>
143
+ {#if showInserterAfter === KanbanColumnTop}
144
+ <Inserter onInsert={async (text) => {await insert(text, KanbanColumnTop)}}
145
+ bind:this={inserter} />
146
+ {/if}
147
+
148
+ {#if items && items.length > 0}
149
+ {#each items as element, item_idx (element[item_key])}
150
+ <Card item={element}
151
+ {showMoveOperationsForItem}
152
+ {scrollViewToCard}
153
+ runInserter={add}
154
+ bind:this={cards[item_idx]}>
155
+ <svelte:fragment slot="kanbanCardTopProps" let:element>
156
+ <slot name="kanbanCardTopProps" {element}/>
157
+ </svelte:fragment>
158
+
159
+ <svelte:fragment slot="kanbanCardMiddleProps" let:element>
160
+ <slot name="kanbanCardMiddleProps" {element}/>
161
+ </svelte:fragment>
162
+
163
+ <svelte:fragment slot="kanbanCardBottomProps" let:element>
164
+ <slot name="kanbanCardBottomProps" {element}/>
165
+ </svelte:fragment>
166
+ </Card>
167
+
168
+ {#if showInserterAfter == element}
169
+ <Inserter onInsert={async (text) => {await insert(text, showInserterAfter)}}
170
+ bind:this={inserter} />
171
+ {/if}
172
+ {/each}
173
+ {/if}
174
+
175
+ {#if showInserterAfter === KanbanColumnBottom}
176
+ <Inserter onInsert={async (text) => {await insert(text, KanbanColumnBottom)}}
177
+ bind:this={inserter} />
178
+ {/if}
179
+
180
+ </ul>
181
+ </section>
@@ -0,0 +1,51 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ title?: string | undefined;
5
+ width?: string | undefined;
6
+ self?: object | undefined;
7
+ a?: string | undefined;
8
+ objects?: object[] | undefined;
9
+ context?: string | undefined;
10
+ key?: string | undefined;
11
+ currentColumnIdx: number;
12
+ showMoveOperationsForItem?: Function | undefined;
13
+ scrollViewToCard?: Function | undefined;
14
+ getHeight?: (() => number) | undefined;
15
+ SET_LEFT?: 0 | undefined;
16
+ SET_RIGHT?: 1 | undefined;
17
+ CLEAR_LEFT?: 2 | undefined;
18
+ CLEAR_RIGHT?: 3 | undefined;
19
+ setBorder?: ((what_to_do: number) => void) | undefined;
20
+ findCardByItem?: ((item: object) => any) | undefined;
21
+ add?: ((after?: object | number) => Promise<void>) | undefined;
22
+ };
23
+ events: {
24
+ [evt: string]: CustomEvent<any>;
25
+ };
26
+ slots: {
27
+ kanbanCardTopProps: {
28
+ element: object;
29
+ };
30
+ kanbanCardMiddleProps: {
31
+ element: object;
32
+ };
33
+ kanbanCardBottomProps: {
34
+ element: object;
35
+ };
36
+ };
37
+ };
38
+ export type KanbanProps = typeof __propDef.props;
39
+ export type KanbanEvents = typeof __propDef.events;
40
+ export type KanbanSlots = typeof __propDef.slots;
41
+ export default class Kanban extends SvelteComponentTyped<KanbanProps, KanbanEvents, KanbanSlots> {
42
+ get getHeight(): () => number;
43
+ get SET_LEFT(): 0;
44
+ get SET_RIGHT(): 1;
45
+ get CLEAR_LEFT(): 2;
46
+ get CLEAR_RIGHT(): 3;
47
+ get setBorder(): (what_to_do: number) => void;
48
+ get findCardByItem(): (item: object) => any;
49
+ get add(): (after?: number | object) => Promise<void>;
50
+ }
51
+ export {};
@@ -0,0 +1,24 @@
1
+ <script>import {
2
+ startEditing,
3
+ editable
4
+ } from "../../..";
5
+ export let onInsert;
6
+ export function run(onclose) {
7
+ startEditing(insertion_paragraph, onclose);
8
+ }
9
+ let insertion_paragraph;
10
+ </script>
11
+
12
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
13
+
14
+ <li class=" mx-2 pt-2 pb-4 px-1 rounded-md border border-transparent
15
+ bg-stone-100 dark:bg-stone-700">
16
+
17
+ <h3 class=" text-lg font-semibold min-h-[1.75rem]
18
+ sm:text-sm sm:font-semibold sm:min-h-[1.25rem]
19
+ whitespace-nowrap overflow-clip w-full sm:flex-none sm:w-2/3"
20
+ use:editable={onInsert}
21
+ bind:this={insertion_paragraph}>
22
+
23
+ </h3>
24
+ </li>