@humandialog/forms.svelte 0.5.7 → 0.5.9

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.
@@ -53,8 +53,8 @@ export function _scrollViewToCard() {
53
53
  card?.scrollIntoView(
54
54
  {
55
55
  behavior: "smooth",
56
- block: "start",
57
- inline: "center"
56
+ block: "nearest",
57
+ inline: "nearest"
58
58
  }
59
59
  );
60
60
  }
@@ -131,7 +131,7 @@ export async function editProperty(field) {
131
131
 
132
132
  <!-- svelte-ignore a11y-click-events-have-key-events -->
133
133
 
134
- <li class="mx-2 pt-2 pb-4 px-1 rounded-md border border-transparent {selectedClass} {focusedClass}"
134
+ <li class="mx-2 pt-2 pb-4 px-1 rounded-md border border-transparent {selectedClass} {focusedClass} scroll-mt-[50px] sm:scroll-mt-[40px]"
135
135
  class:cursor-pointer={!isCardActive}
136
136
  on:click={activate}
137
137
  use:selectable={item}
@@ -131,7 +131,8 @@ async function editTags(field, propIdx) {
131
131
  getGlobalTags={prop.getAllTags}
132
132
  s="xs"
133
133
  onSelect={prop.onSelect}
134
- onCreate={prop.onCreate}
134
+ onUpdateAllTags={prop.onUpdateAllTags}
135
+ canChangeColor={prop.canChangeColor}
135
136
  bind:this={propElements[idx]}
136
137
  />
137
138
  {/if}
@@ -150,6 +150,13 @@ afterUpdate(() => {
150
150
  }
151
151
  }
152
152
  });
153
+ export function scrollViewToCard(item) {
154
+ columns.forEach((c2) => {
155
+ const card = c2.findCardByItem(item);
156
+ if (card)
157
+ card._scrollViewToCard();
158
+ });
159
+ }
153
160
  export function moveUp(item) {
154
161
  const columnIdx = getColumnIdx(item);
155
162
  let allItems = definition.getItems();
@@ -13,6 +13,7 @@ declare const __propDef: {
13
13
  reload?: ((data: object | object[], selectElement?: number) => Promise<void>) | undefined;
14
14
  getColumnIdx?: ((item: any) => number) | undefined;
15
15
  edit?: ((item: object, field: string) => void) | undefined;
16
+ scrollViewToCard?: ((item: any) => void) | undefined;
16
17
  moveUp?: ((item: object) => void) | undefined;
17
18
  moveDown?: ((item: object) => void) | undefined;
18
19
  replace?: ((item: any, toColumnIdx: any, afterElement: any) => void) | undefined;
@@ -51,6 +52,7 @@ export default class Kanban extends SvelteComponentTyped<KanbanProps, KanbanEven
51
52
  get reload(): (data: object | object[], selectElement?: number) => Promise<void>;
52
53
  get getColumnIdx(): (item: any) => number;
53
54
  get edit(): (item: object, field: string) => void;
55
+ get scrollViewToCard(): (item: any) => void;
54
56
  get moveUp(): (item: object) => void;
55
57
  get moveDown(): (item: object) => void;
56
58
  get replace(): (item: any, toColumnIdx: any, afterElement: any) => void;
@@ -4,8 +4,9 @@ import { rList_property_tags } from "../list/List";
4
4
  export let name = "";
5
5
  export let a = "";
6
6
  export let getAllTags = void 0;
7
- export let onCreate = void 0;
7
+ export let onUpdateAllTags = void 0;
8
8
  export let onSelect = void 0;
9
+ export let canChangeColor = false;
9
10
  export let top = false;
10
11
  export let middle = true;
11
12
  export let bottom = false;
@@ -22,7 +23,8 @@ if (!a && name) {
22
23
  tagsProperty.name = name;
23
24
  }
24
25
  tagsProperty.onSelect = onSelect;
25
- tagsProperty.onCreate = onCreate;
26
+ tagsProperty.onUpdateAllTags = onUpdateAllTags;
27
+ tagsProperty.canChangeColor = canChangeColor;
26
28
  tagsProperty.getAllTags = getAllTags;
27
29
  if (top)
28
30
  tagsProperty.position = KanbanCardTop;
@@ -4,8 +4,9 @@ declare const __propDef: {
4
4
  name?: string | undefined;
5
5
  a?: string | undefined;
6
6
  getAllTags?: Function | undefined;
7
- onCreate?: Function | undefined;
7
+ onUpdateAllTags?: Function | undefined;
8
8
  onSelect?: Function | undefined;
9
+ canChangeColor?: boolean | undefined;
9
10
  top?: boolean | undefined;
10
11
  middle?: boolean | undefined;
11
12
  bottom?: boolean | undefined;
@@ -22,8 +22,9 @@ export declare class rList_property_combo extends rList_property {
22
22
  }
23
23
  export declare class rList_property_tags extends rList_property {
24
24
  constructor();
25
- onCreate: Function | undefined;
25
+ canChangeColor: boolean;
26
26
  getAllTags: Function | undefined;
27
+ onUpdateAllTags: Function | undefined;
27
28
  }
28
29
  export declare class rList_definition {
29
30
  title: string;
@@ -30,8 +30,9 @@ export class rList_property_tags extends rList_property {
30
30
  constructor() {
31
31
  super(rList_property_type.Tags);
32
32
  }
33
- onCreate = undefined;
33
+ canChangeColor = false;
34
34
  getAllTags = undefined;
35
+ onUpdateAllTags = undefined;
35
36
  }
36
37
  export class rList_definition {
37
38
  title = '';
@@ -189,16 +189,27 @@ function setSelectionAtEnd(element) {
189
189
  sel.removeAllRanges();
190
190
  sel.addRange(range);
191
191
  }
192
+ let rootElement;
193
+ export function scrollToView() {
194
+ rootElement.scrollIntoView(
195
+ {
196
+ behavior: "smooth",
197
+ block: "nearest",
198
+ inline: "nearest"
199
+ }
200
+ );
201
+ }
192
202
  </script>
193
203
 
194
204
  <!-- svelte-ignore a11y-click-events-have-key-events -->
195
205
  {#if item}
196
206
  {@const element_title = item[title]}
197
207
 
198
- <section class="mt-3 flex flex-row my-0 w-full text-sm text-stone-700 dark:text-stone-300 cursor-default rounded-md border border-transparent {selected_class} {focused_class}"
208
+ <section class="mt-3 flex flex-row my-0 w-full text-sm text-stone-700 dark:text-stone-300 cursor-default rounded-md border border-transparent {selected_class} {focused_class} scroll-mt-[50px] sm:scroll-mt-[40px]"
199
209
  on:contextmenu={on_contextmenu}
200
210
  role="menu"
201
- tabindex="-1">
211
+ tabindex="-1"
212
+ bind:this={rootElement}>
202
213
 
203
214
  <slot name="left" element={item}/>
204
215
 
@@ -9,6 +9,7 @@ declare const __propDef: {
9
9
  contextMenu: any;
10
10
  activate?: (() => void) | undefined;
11
11
  editProperty?: ((field: string) => void) | undefined;
12
+ scrollToView?: (() => void) | undefined;
12
13
  };
13
14
  events: {
14
15
  [evt: string]: CustomEvent<any>;
@@ -25,5 +26,6 @@ export type ListSlots = typeof __propDef.slots;
25
26
  export default class List extends SvelteComponentTyped<ListProps, ListEvents, ListSlots> {
26
27
  get activate(): () => void;
27
28
  get editProperty(): (field: string) => void;
29
+ get scrollToView(): () => void;
28
30
  }
29
31
  export {};
@@ -135,7 +135,7 @@ export function reload(data, selectElement = KEEP_SELECTION) {
135
135
  if (!activate_after_dom_update)
136
136
  activateItem("props", null, []);
137
137
  }
138
- export function moveUp(element) {
138
+ export async function moveUp(element) {
139
139
  if (!orderAttrib)
140
140
  return;
141
141
  let prev = getPrev(items, element);
@@ -143,11 +143,13 @@ export function moveUp(element) {
143
143
  return;
144
144
  items = swapElements(items, element, prev);
145
145
  [element[orderAttrib], prev[orderAttrib]] = [prev[orderAttrib], element[orderAttrib]];
146
+ await tick();
147
+ scrollToSelectedElement();
146
148
  informModification(element, orderAttrib);
147
149
  informModification(prev, orderAttrib);
148
150
  pushChanges();
149
151
  }
150
- export function moveDown(element) {
152
+ export async function moveDown(element) {
151
153
  if (!orderAttrib)
152
154
  return;
153
155
  let next = getNext(items, element);
@@ -155,6 +157,8 @@ export function moveDown(element) {
155
157
  return;
156
158
  items = swapElements(items, element, next);
157
159
  [element[orderAttrib], next[orderAttrib]] = [next[orderAttrib], element[orderAttrib]];
160
+ await tick();
161
+ scrollToSelectedElement();
158
162
  informModification(element, orderAttrib);
159
163
  informModification(next, orderAttrib);
160
164
  pushChanges();
@@ -182,6 +186,15 @@ export async function addRowAfter(after = null) {
182
186
  }
183
187
  });
184
188
  }
189
+ function scrollToSelectedElement() {
190
+ const activeItem = getActive("props");
191
+ if (!activeItem)
192
+ return;
193
+ const activeItemKey = getItemKey(activeItem);
194
+ const activeIdx = items?.findIndex((i) => getItemKey(i) == activeItemKey);
195
+ if (activeIdx >= 0)
196
+ rows[activeIdx].scrollToView();
197
+ }
185
198
  export function remove(element) {
186
199
  let removing_idx = items?.findIndex((e) => e == element);
187
200
  if (removing_idx < 0)
@@ -21,8 +21,8 @@ declare const __propDef: {
21
21
  MIN_ORDER?: 0 | undefined;
22
22
  rereder?: (() => void) | undefined;
23
23
  reload?: ((data: object | object[], selectElement?: number) => void) | undefined;
24
- moveUp?: ((element: object) => void) | undefined;
25
- moveDown?: ((element: object) => void) | undefined;
24
+ moveUp?: ((element: object) => Promise<void>) | undefined;
25
+ moveDown?: ((element: object) => Promise<void>) | undefined;
26
26
  addRowAfter?: ((after?: object | null) => Promise<void>) | undefined;
27
27
  remove?: ((element: object) => void) | undefined;
28
28
  edit?: ((element: object, property_name: string) => void) | undefined;
@@ -50,8 +50,8 @@ export default class List extends SvelteComponentTyped<ListProps, ListEvents, Li
50
50
  get MIN_ORDER(): 0;
51
51
  get rereder(): () => void;
52
52
  get reload(): (data: object | object[], selectElement?: number) => void;
53
- get moveUp(): (element: object) => void;
54
- get moveDown(): (element: object) => void;
53
+ get moveUp(): (element: object) => Promise<void>;
54
+ get moveDown(): (element: object) => Promise<void>;
55
55
  get addRowAfter(): (after?: object | null) => Promise<void>;
56
56
  get remove(): (element: object) => void;
57
57
  get edit(): (element: object, property_name: string) => void;
@@ -1,4 +1,5 @@
1
+ import Floating_container from './Floating_container.svelte';
1
2
  export declare function showMenu(around: DOMRect | DOMPoint, operations: any): void;
2
3
  export declare function hideWholeContextMenu(): void;
3
- export declare function showFloatingToolbar(around: DOMRect | DOMPoint, toolbar: any, props?: {}): void;
4
+ export declare function showFloatingToolbar(around: DOMRect | DOMPoint, toolbar: any, props?: {}): Floating_container | null;
4
5
  export declare function showGridMenu(around: DOMRect | DOMPoint, operations: any): void;
@@ -50,6 +50,7 @@ export function showFloatingToolbar(around, toolbar, props = {}) {
50
50
  }
51
51
  else
52
52
  console.error('what now?');
53
+ return toolbar_component;
53
54
  }
54
55
  export function showGridMenu(around, operations) {
55
56
  showFloatingToolbar(around, Grid, { operations: operations });
@@ -0,0 +1,92 @@
1
+ <script>export let brightntess = "medium";
2
+ export let onSelect;
3
+ $:
4
+ colors = getColors(brightntess);
5
+ function getColors(brightntess2) {
6
+ switch (brightntess2) {
7
+ case "light":
8
+ return [
9
+ "bg-red-300",
10
+ "bg-orange-300",
11
+ "bg-amber-300",
12
+ "bg-yellow-300",
13
+ "bg-lime-300",
14
+ "bg-green-300",
15
+ "bg-indigo-300",
16
+ "bg-blue-300",
17
+ "bg-sky-300",
18
+ "bg-cyan-300",
19
+ "bg-teal-300",
20
+ "bg-emerald-300",
21
+ "bg-violet-300",
22
+ "bg-purple-300",
23
+ "bg-fuchsia-300",
24
+ "bg-pink-300",
25
+ "bg-rose-300",
26
+ "bg-slate-300"
27
+ ];
28
+ case "medium":
29
+ return [
30
+ "bg-red-600",
31
+ "bg-orange-600",
32
+ "bg-amber-600",
33
+ "bg-yellow-600",
34
+ "bg-lime-600",
35
+ "bg-green-600",
36
+ "bg-indigo-600",
37
+ "bg-blue-600",
38
+ "bg-sky-600",
39
+ "bg-cyan-600",
40
+ "bg-teal-600",
41
+ "bg-emerald-600",
42
+ "bg-violet-600",
43
+ "bg-purple-600",
44
+ "bg-fuchsia-600",
45
+ "bg-pink-600",
46
+ "bg-rose-600",
47
+ "bg-slate-600"
48
+ ];
49
+ case "dark":
50
+ return [
51
+ "bg-red-800",
52
+ "bg-orange-800",
53
+ "bg-amber-800",
54
+ "bg-yellow-800",
55
+ "bg-lime-800",
56
+ "bg-green-800",
57
+ "bg-indigo-800",
58
+ "bg-blue-800",
59
+ "bg-sky-800",
60
+ "bg-cyan-800",
61
+ "bg-teal-800",
62
+ "bg-emerald-800",
63
+ "bg-violet-800",
64
+ "bg-purple-800",
65
+ "bg-fuchsia-800",
66
+ "bg-pink-800",
67
+ "bg-rose-800",
68
+ "bg-slate-800"
69
+ ];
70
+ }
71
+ }
72
+ </script>
73
+
74
+ <menu class="grid grid-cols-6">
75
+ {#each colors as color, idx}
76
+ {@const isTL = idx == 0}
77
+ {@const isTR = idx == 5}
78
+ {@const isBL = idx == colors.length-6}
79
+ {@const isBR = idx == colors.length-1}
80
+
81
+ {@const borderTL = isTL ? "rounded-tl-lg": ""}
82
+ {@const borderTR = isTR ? "rounded-tr-lg": ""}
83
+ {@const borderBL = isBL ? "rounded-bl-lg": ""}
84
+ {@const borderBR = isBR ? "rounded-br-lg": ""}
85
+
86
+ <button class="{color} w-10 h-10 {borderTL} {borderTR} {borderBL} {borderBR}"
87
+ on:click={() => onSelect(color)}>
88
+
89
+ </button>
90
+ {/each}
91
+
92
+ </menu>
@@ -0,0 +1,17 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ brightntess?: string | undefined;
5
+ onSelect: Function;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type TagProps = typeof __propDef.props;
13
+ export type TagEvents = typeof __propDef.events;
14
+ export type TagSlots = typeof __propDef.slots;
15
+ export default class Tag extends SvelteComponentTyped<TagProps, TagEvents, TagSlots> {
16
+ }
17
+ export {};
@@ -1,8 +1,20 @@
1
1
  <script>import FaTimes from "svelte-icons/fa/FaTimes.svelte";
2
+ import { showFloatingToolbar } from "./menu";
3
+ import TagColors from "./tag.colors.svelte";
4
+ import { onMount } from "svelte";
2
5
  export let name;
3
6
  export let color;
4
7
  export let onRemove = void 0;
8
+ export let onColor = void 0;
5
9
  export let s = "sm";
10
+ onMount(() => {
11
+ if (onColor && rootElement) {
12
+ rootElement.addEventListener("click", showColorPicker);
13
+ rootElement.classList.add("cursor-pointer");
14
+ }
15
+ return () => {
16
+ };
17
+ });
6
18
  let pr = onRemove ? "pr-1" : "pr-2";
7
19
  let font;
8
20
  let x_size;
@@ -20,21 +32,39 @@ switch (s) {
20
32
  x_size = "ml-3 sm:ml-1 mt-0.5 sm:mt-1 w-3 sm:w-2 h-3 sm:h-2";
21
33
  break;
22
34
  }
35
+ let rootElement;
36
+ let colorPicker = null;
37
+ function showColorPicker(e) {
38
+ const rect = rootElement.getBoundingClientRect();
39
+ colorPicker = showFloatingToolbar(rect, TagColors, {
40
+ onSelect: onSelectColor
41
+ });
42
+ }
43
+ function onSelectColor(color2) {
44
+ onColor(name, color2);
45
+ colorPicker?.hide();
46
+ }
23
47
  </script>
24
48
 
25
- <div class="mt-1 pl-2 {pr} rounded text-white flex flex-row" style="background-color:{color}">
26
- <div class="{font}">{name}</div>
27
- {#if onRemove}
28
- <div class="no-print inline-block {x_size} hover:cursor-pointer"
29
- on:click={onRemove}><FaTimes/></div>
30
- {/if}
49
+ <div
50
+ class="mt-1 pl-2 {pr} rounded text-white flex flex-row {color}"
51
+
52
+ bind:this={rootElement}>
53
+ <div class={font}>{name}</div>
54
+ {#if onRemove}
55
+ <div
56
+ class="no-print inline-block {x_size} hover:cursor-pointer"
57
+ on:click|stopPropagation={onRemove}>
58
+ <FaTimes />
59
+ </div>
60
+ {/if}
31
61
  </div>
32
62
 
33
63
  <style>
34
- @media print
35
- {
36
- .no-print, .no-print *{
37
- display: none !important;
38
- }
39
- }
40
- </style>
64
+ @media print {
65
+ .no-print,
66
+ .no-print * {
67
+ display: none !important;
68
+ }
69
+ }
70
+ </style>
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  name: string;
5
5
  color: string;
6
6
  onRemove?: any | undefined;
7
+ onColor?: any | undefined;
7
8
  s?: string | undefined;
8
9
  };
9
10
  events: {
@@ -12,7 +12,8 @@ export let a = "";
12
12
  export let context = "";
13
13
  export let typename = "";
14
14
  export let onSelect = void 0;
15
- export let onCreate = void 0;
15
+ export let onUpdateAllTags = void 0;
16
+ export let canChangeColor = false;
16
17
  export let compact = true;
17
18
  export let inContext = "";
18
19
  export let pushChangesImmediately = true;
@@ -110,7 +111,26 @@ function onNewTagCreated(key, name) {
110
111
  globalTagsTable = decomposeTags(globalTags);
111
112
  tagsTable = decomposeTags(tags, globalTagsTable);
112
113
  applyChange();
113
- onCreate(globalTags);
114
+ onUpdateAllTags(globalTags);
115
+ }
116
+ function onColorizeTag(name, color) {
117
+ let globalTags = getGlobalTags();
118
+ globalTagsTable = decomposeTags(globalTags);
119
+ const srcGlobalTag = globalTagsTable.find((i) => i.label == name);
120
+ srcGlobalTag.color = color;
121
+ tagsTable = decomposeTags(tags, globalTagsTable);
122
+ const srcTag = tagsTable.find((i) => i.label == name);
123
+ srcTag.color = color;
124
+ globalTags = "";
125
+ for (let i = 0; i < globalTagsTable.length; i++) {
126
+ const tag = globalTagsTable[i];
127
+ if (tag.color)
128
+ globalTags += `#${tag.label}:${tag.color} `;
129
+ else
130
+ globalTags += `#${tag.label} `;
131
+ }
132
+ applyChange();
133
+ onUpdateAllTags(globalTags);
114
134
  }
115
135
  function decomposeTags(tags2, referenceTable = void 0) {
116
136
  let table = [];
@@ -135,8 +155,10 @@ function decomposeTags(tags2, referenceTable = void 0) {
135
155
  color = referenceItem.color;
136
156
  }
137
157
  if (!color)
138
- color = "DarkGray";
158
+ color = "bg-stone-400";
139
159
  }
160
+ if (!color.startsWith("bg-"))
161
+ color = "bg-stone-400";
140
162
  table.push({
141
163
  label,
142
164
  color
@@ -175,7 +197,8 @@ switch (s) {
175
197
  {#each tagsTable as tag}
176
198
  {#if isEditable}
177
199
  <Tag name={tag.label} color={tag.color} {s}
178
- onRemove={(e) => {onRemoveTag(tag.label)}}/>
200
+ onRemove={(e) => {onRemoveTag(tag.label)}}
201
+ onColor={canChangeColor ? onColorizeTag : null}/>
179
202
  {:else}
180
203
  <Tag name={tag.label} color={tag.color} {s}/>
181
204
  {/if}
@@ -9,7 +9,8 @@ declare const __propDef: {
9
9
  context?: string | undefined;
10
10
  typename?: string | undefined;
11
11
  onSelect?: any | undefined;
12
- onCreate?: any | undefined;
12
+ onUpdateAllTags?: any | undefined;
13
+ canChangeColor?: boolean | undefined;
13
14
  compact?: boolean | undefined;
14
15
  inContext?: string | undefined;
15
16
  pushChangesImmediately?: boolean | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@humandialog/forms.svelte",
3
- "version": "0.5.7",
3
+ "version": "0.5.9",
4
4
  "description": "Basic Svelte UI components for Object Reef applications",
5
5
  "devDependencies": {
6
6
  "@playwright/test": "^1.28.1",
@@ -114,6 +114,7 @@
114
114
  "./components/table/item.svelte": "./components/table/item.svelte",
115
115
  "./components/table/table.svelte": "./components/table/table.svelte",
116
116
  "./components/table/table": "./components/table/table.js",
117
+ "./components/tag.colors.svelte": "./components/tag.colors.svelte",
117
118
  "./components/tag.svelte": "./components/tag.svelte",
118
119
  "./components/tags.svelte": "./components/tags.svelte",
119
120
  "./components/textarea.ltop.svelte": "./components/textarea.ltop.svelte",
package/page.svelte CHANGED
@@ -18,7 +18,7 @@
18
18
  export let focused_only = false;
19
19
  export let inContext = '';
20
20
  export let cl =
21
- 'w-full h-full flex flex-col dark:bg-stone-800 overflow-y-hidden overflow-x-hidden py-1 px-1 border-0'; // border-green-500
21
+ 'w-full flex flex-col bg-white dark:bg-stone-900 overflow-x-hidden py-1 px-1 border-0'; // border-green-500
22
22
  export let c = '';
23
23
 
24
24
  export let toolbarOperations = undefined;