@humandialog/forms.svelte 1.7.28 → 1.8.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 (258) hide show
  1. package/components/Fab.25.svelte +473 -0
  2. package/components/Fab.25.svelte.d.ts +18 -0
  3. package/components/Fab.svelte +51 -170
  4. package/components/Floating_container.25.svelte +178 -0
  5. package/components/Floating_container.25.svelte.d.ts +23 -0
  6. package/components/Floating_container.svelte +18 -6
  7. package/components/Grid.menu.svelte +15 -16
  8. package/components/Grid.menu.svelte.d.ts +2 -2
  9. package/components/breadcrumb.svelte +27 -27
  10. package/components/checkbox.svelte +1 -1
  11. package/components/combo/combo.svelte +60 -79
  12. package/components/combo/combo.svelte.d.ts +1 -0
  13. package/components/contextmenu-25.svelte +518 -0
  14. package/components/contextmenu-25.svelte.d.ts +26 -0
  15. package/components/contextmenu.svelte +179 -65
  16. package/components/contextmenu.svelte.d.ts +2 -2
  17. package/components/date.svelte +42 -21
  18. package/components/date.svelte.d.ts +1 -0
  19. package/components/delayed.spinner.svelte +2 -1
  20. package/components/document/editor.svelte +21 -31
  21. package/components/document/editor.svelte.d.ts +0 -2
  22. package/components/document/internal/palette.row.svelte +10 -8
  23. package/components/document/internal/palette.svelte +7 -8
  24. package/components/document/rich.edit.svelte +10 -10
  25. package/components/edit.field.svelte +1 -1
  26. package/components/input.text.svelte.d.ts +2 -2
  27. package/components/inputbox.ltop.svelte +1 -1
  28. package/components/inputbox.ltop.svelte.d.ts +12 -12
  29. package/components/kanban/internal/kanban.card.svelte +27 -47
  30. package/components/kanban/internal/kanban.column.svelte +44 -24
  31. package/components/kanban/internal/kanban.inserter.svelte +11 -14
  32. package/components/kanban/internal/kanban.move.menu.svelte +12 -12
  33. package/components/kanban/internal/kanban.props.svelte +24 -9
  34. package/components/kanban/kanban.svelte +24 -77
  35. package/components/kanban/kanban.svelte.d.ts +2 -0
  36. package/components/kanban copy.zip +0 -0
  37. package/components/list/List.d.ts +1 -0
  38. package/components/list/List.js +1 -0
  39. package/components/list/internal/list.element copy.svelte +530 -0
  40. package/components/list/internal/list.element copy.svelte.d.ts +35 -0
  41. package/components/list/internal/list.element.svelte +311 -279
  42. package/components/list/internal/list.element.svelte.d.ts +5 -7
  43. package/components/list/internal/list.inserter.svelte +38 -6
  44. package/components/list/internal/note.txt +5 -0
  45. package/components/list/list.svelte +32 -11
  46. package/components/list/list.svelte.d.ts +5 -3
  47. package/components/list/list.title.svelte +2 -0
  48. package/components/list/list.title.svelte.d.ts +1 -0
  49. package/components/menu.d.ts +1 -1
  50. package/components/menu.js +3 -3
  51. package/components/paginator.svelte +79 -9
  52. package/components/prose.editable.p.svelte.d.ts +2 -2
  53. package/components/prose.editable.span.svelte.d.ts +2 -2
  54. package/components/r.edit.svelte +9 -0
  55. package/components/r.edit.svelte.d.ts +23 -0
  56. package/components/r.editable.svelte +75 -0
  57. package/components/r.editable.svelte.d.ts +31 -0
  58. package/components/r.figcaption.svelte +5 -0
  59. package/components/r.figcaption.svelte.d.ts +27 -0
  60. package/components/r.figure.svelte +25 -0
  61. package/components/r.figure.svelte.d.ts +29 -0
  62. package/components/r.icon.svelte +229 -0
  63. package/components/r.icon.svelte.d.ts +33 -0
  64. package/components/radio.svelte +1 -1
  65. package/components/ricons/arrow-up.svelte +11 -0
  66. package/components/ricons/arrow-up.svelte.d.ts +27 -0
  67. package/components/ricons/barcode.svelte +14 -0
  68. package/components/ricons/barcode.svelte.d.ts +27 -0
  69. package/components/ricons/bold.svelte +10 -0
  70. package/components/ricons/bold.svelte.d.ts +27 -0
  71. package/components/ricons/calendar.svelte +13 -0
  72. package/components/ricons/calendar.svelte.d.ts +27 -0
  73. package/components/ricons/calendars.svelte +16 -0
  74. package/components/ricons/calendars.svelte.d.ts +27 -0
  75. package/components/ricons/cat.svelte +14 -0
  76. package/components/ricons/cat.svelte.d.ts +27 -0
  77. package/components/ricons/check-check.svelte +12 -0
  78. package/components/ricons/check-check.svelte.d.ts +27 -0
  79. package/components/ricons/check.svelte +18 -0
  80. package/components/ricons/check.svelte.d.ts +27 -0
  81. package/components/ricons/chess-rook.svelte +17 -0
  82. package/components/ricons/chess-rook.svelte.d.ts +27 -0
  83. package/components/ricons/chevron-down.svelte +11 -0
  84. package/components/ricons/chevron-down.svelte.d.ts +27 -0
  85. package/components/ricons/chevron-left.svelte +11 -0
  86. package/components/ricons/chevron-left.svelte.d.ts +27 -0
  87. package/components/ricons/chevron-right.svelte +11 -0
  88. package/components/ricons/chevron-right.svelte.d.ts +27 -0
  89. package/components/ricons/chevron-up.svelte +11 -0
  90. package/components/ricons/chevron-up.svelte.d.ts +27 -0
  91. package/components/ricons/chevrons-down.svelte +12 -0
  92. package/components/ricons/chevrons-down.svelte.d.ts +27 -0
  93. package/components/ricons/chevrons-left-right.svelte +12 -0
  94. package/components/ricons/chevrons-left-right.svelte.d.ts +27 -0
  95. package/components/ricons/chevrons-left.svelte +12 -0
  96. package/components/ricons/chevrons-left.svelte.d.ts +27 -0
  97. package/components/ricons/chevrons-right.svelte +12 -0
  98. package/components/ricons/chevrons-right.svelte.d.ts +27 -0
  99. package/components/ricons/chevrons-up-down.svelte +12 -0
  100. package/components/ricons/chevrons-up-down.svelte.d.ts +27 -0
  101. package/components/ricons/chevrons-up.svelte +12 -0
  102. package/components/ricons/chevrons-up.svelte.d.ts +27 -0
  103. package/components/ricons/circle-check.svelte +28 -0
  104. package/components/ricons/circle-check.svelte.d.ts +23 -0
  105. package/components/ricons/circle-dashed.svelte +19 -0
  106. package/components/ricons/circle-dashed.svelte.d.ts +27 -0
  107. package/components/ricons/circle-dot-dashed.svelte +20 -0
  108. package/components/ricons/circle-dot-dashed.svelte.d.ts +27 -0
  109. package/components/ricons/circle.svelte +30 -0
  110. package/components/ricons/circle.svelte.d.ts +23 -0
  111. package/components/ricons/clipboard-list.svelte +17 -0
  112. package/components/ricons/clipboard-list.svelte.d.ts +27 -0
  113. package/components/ricons/clipboard-minus.svelte +9 -0
  114. package/components/ricons/clipboard-minus.svelte.d.ts +23 -0
  115. package/components/ricons/clipboard-pen-line.svelte +18 -0
  116. package/components/ricons/clipboard-pen-line.svelte.d.ts +27 -0
  117. package/components/ricons/code-xml.svelte +12 -0
  118. package/components/ricons/code-xml.svelte.d.ts +27 -0
  119. package/components/ricons/download.svelte +13 -0
  120. package/components/ricons/download.svelte.d.ts +27 -0
  121. package/components/ricons/ellipsis-vertical.svelte +14 -0
  122. package/components/ricons/ellipsis-vertical.svelte.d.ts +27 -0
  123. package/components/ricons/file-archive.svelte +18 -0
  124. package/components/ricons/file-archive.svelte.d.ts +27 -0
  125. package/components/ricons/file-text.svelte +17 -0
  126. package/components/ricons/file-text.svelte.d.ts +27 -0
  127. package/components/ricons/folder.svelte +12 -0
  128. package/components/ricons/folder.svelte.d.ts +27 -0
  129. package/components/ricons/heading-1.svelte +13 -0
  130. package/components/ricons/heading-1.svelte.d.ts +27 -0
  131. package/components/ricons/heading-2.svelte +13 -0
  132. package/components/ricons/heading-2.svelte.d.ts +27 -0
  133. package/components/ricons/heading-3.svelte +14 -0
  134. package/components/ricons/heading-3.svelte.d.ts +27 -0
  135. package/components/ricons/heading-4.svelte +14 -0
  136. package/components/ricons/heading-4.svelte.d.ts +27 -0
  137. package/components/ricons/heading-5.svelte +14 -0
  138. package/components/ricons/heading-5.svelte.d.ts +27 -0
  139. package/components/ricons/image.svelte +12 -0
  140. package/components/ricons/image.svelte.d.ts +27 -0
  141. package/components/ricons/italic.svelte +12 -0
  142. package/components/ricons/italic.svelte.d.ts +27 -0
  143. package/components/ricons/languages.svelte +15 -0
  144. package/components/ricons/languages.svelte.d.ts +27 -0
  145. package/components/ricons/list-checks.svelte +15 -0
  146. package/components/ricons/list-checks.svelte.d.ts +27 -0
  147. package/components/ricons/list-minus.svelte +14 -0
  148. package/components/ricons/list-minus.svelte.d.ts +27 -0
  149. package/components/ricons/list-ordered.svelte +16 -0
  150. package/components/ricons/list-ordered.svelte.d.ts +27 -0
  151. package/components/ricons/list-plus.svelte +14 -0
  152. package/components/ricons/list-plus.svelte.d.ts +27 -0
  153. package/components/ricons/list.svelte +15 -0
  154. package/components/ricons/list.svelte.d.ts +27 -0
  155. package/components/ricons/loader-circle.svelte +19 -0
  156. package/components/ricons/loader-circle.svelte.d.ts +27 -0
  157. package/components/ricons/log-in.svelte +12 -0
  158. package/components/ricons/log-in.svelte.d.ts +27 -0
  159. package/components/ricons/log-out.svelte +12 -0
  160. package/components/ricons/log-out.svelte.d.ts +27 -0
  161. package/components/ricons/message-square.svelte +12 -0
  162. package/components/ricons/message-square.svelte.d.ts +27 -0
  163. package/components/ricons/messages-square.svelte +15 -0
  164. package/components/ricons/messages-square.svelte.d.ts +27 -0
  165. package/components/ricons/minus.svelte +10 -0
  166. package/components/ricons/minus.svelte.d.ts +27 -0
  167. package/components/ricons/notebook-tabs.svelte +19 -0
  168. package/components/ricons/notebook-tabs.svelte.d.ts +27 -0
  169. package/components/ricons/notebook.svelte +16 -0
  170. package/components/ricons/notebook.svelte.d.ts +27 -0
  171. package/components/ricons/package.svelte +22 -0
  172. package/components/ricons/package.svelte.d.ts +27 -0
  173. package/components/ricons/paperclip.svelte +12 -0
  174. package/components/ricons/paperclip.svelte.d.ts +27 -0
  175. package/components/ricons/pencil.svelte +12 -0
  176. package/components/ricons/pencil.svelte.d.ts +27 -0
  177. package/components/ricons/pilcrow.svelte +12 -0
  178. package/components/ricons/pilcrow.svelte.d.ts +27 -0
  179. package/components/ricons/save.svelte +12 -0
  180. package/components/ricons/save.svelte.d.ts +27 -0
  181. package/components/ricons/square-check-big.svelte +13 -0
  182. package/components/ricons/square-check-big.svelte.d.ts +27 -0
  183. package/components/ricons/square-pen.svelte +14 -0
  184. package/components/ricons/square-pen.svelte.d.ts +27 -0
  185. package/components/ricons/square.svelte +10 -0
  186. package/components/ricons/square.svelte.d.ts +27 -0
  187. package/components/ricons/strikethrough.svelte +13 -0
  188. package/components/ricons/strikethrough.svelte.d.ts +27 -0
  189. package/components/ricons/sun-moon.svelte +15 -0
  190. package/components/ricons/sun-moon.svelte.d.ts +27 -0
  191. package/components/ricons/table.svelte +13 -0
  192. package/components/ricons/table.svelte.d.ts +27 -0
  193. package/components/ricons/tag.svelte +12 -0
  194. package/components/ricons/tag.svelte.d.ts +27 -0
  195. package/components/ricons/text-quote.svelte +14 -0
  196. package/components/ricons/text-quote.svelte.d.ts +27 -0
  197. package/components/ricons/turtle.svelte +13 -0
  198. package/components/ricons/turtle.svelte.d.ts +27 -0
  199. package/components/ricons/underline.svelte +11 -0
  200. package/components/ricons/underline.svelte.d.ts +27 -0
  201. package/components/ricons/upload.svelte +13 -0
  202. package/components/ricons/upload.svelte.d.ts +27 -0
  203. package/components/ricons/user.svelte +12 -0
  204. package/components/ricons/user.svelte.d.ts +27 -0
  205. package/components/ricons/users.svelte +14 -0
  206. package/components/ricons/users.svelte.d.ts +27 -0
  207. package/components/ricons/x.svelte +11 -0
  208. package/components/ricons/x.svelte.d.ts +27 -0
  209. package/components/sidebar/sidebar.brand.svelte +14 -13
  210. package/components/sidebar/sidebar.brand.svelte.d.ts +2 -2
  211. package/components/sidebar/sidebar.group.svelte +52 -30
  212. package/components/sidebar/sidebar.item.svelte +35 -141
  213. package/components/sidebar/sidebar.item.svelte.d.ts +2 -5
  214. package/components/sidebar/sidebar.list.svelte +8 -8
  215. package/components/sidebar/sidebar.svelte +19 -2
  216. package/components/simple.table.svelte.d.ts +4 -4
  217. package/components/table/_template.table.svelte.d.ts +4 -4
  218. package/components/tags.svelte +10 -3
  219. package/components/tags.svelte.d.ts +1 -0
  220. package/components/textarea.ltop.svelte.d.ts +2 -2
  221. package/components/tile.title.svelte.d.ts +2 -2
  222. package/desk.svelte +139 -144
  223. package/dialog.svelte +17 -7
  224. package/form.box.svelte.d.ts +4 -4
  225. package/horizontal.nav.tabs.svelte +197 -23
  226. package/horizontal.nav.tabs.svelte.d.ts +2 -2
  227. package/horizontal.toolbar.svelte +25 -18
  228. package/horizontal.toolbar.svelte.d.ts +2 -2
  229. package/index.d.ts +10 -3
  230. package/index.js +10 -3
  231. package/operations.svelte +51 -22
  232. package/package.json +89 -1
  233. package/page.row.svelte.d.ts +2 -2
  234. package/page.svelte +17 -7
  235. package/page.svelte.d.ts +10 -10
  236. package/paper.header.svelte +4 -0
  237. package/paper.header.svelte.d.ts +27 -0
  238. package/paper.nav.svelte +8 -0
  239. package/paper.nav.svelte.d.ts +27 -0
  240. package/paper.svelte +22 -6
  241. package/paper.svelte.d.ts +2 -0
  242. package/paper.table.svelte +27 -0
  243. package/paper.table.svelte.d.ts +27 -0
  244. package/paper.top.margin.svelte +5 -0
  245. package/paper.top.margin.svelte.d.ts +27 -0
  246. package/stores.d.ts +1 -1
  247. package/tenant.create.svelte +93 -0
  248. package/tenant.create.svelte.d.ts +29 -0
  249. package/tenant.members.svelte +116 -93
  250. package/tile.svelte.d.ts +4 -4
  251. package/tiles.row.svelte.d.ts +2 -2
  252. package/tiles.vertical.row.svelte.d.ts +2 -2
  253. package/updates.d.ts +4 -0
  254. package/updates.js +56 -14
  255. package/utils.d.ts +16 -4
  256. package/utils.js +214 -99
  257. package/vertical.toolbar.svelte +62 -47
  258. package/vertical.toolbar.svelte.d.ts +2 -2
package/utils.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { getContext, tick } from "svelte";
2
2
  import {derived, get} from 'svelte/store'
3
- import { contextItemsStore, contextToolbarOperations, pageToolbarOperations, data_tick_store, main_sidebar_visible_store, show_sidebar, hide_sidebar, previously_visible_sidebar, auto_hide_sidebar} from "./stores";
4
- import {location, push, pop} from 'svelte-spa-router'
3
+ import { contextItemsStore, contextToolbarOperations, pageToolbarOperations, data_tick_store, main_sidebar_visible_store, show_sidebar, hide_sidebar, previously_visible_sidebar, auto_hide_sidebar, reloadWholeApp} from "./stores";
4
+ import {location, push, pop} from 'svelte-spa-router'
5
+ import {session, reef} from '@humandialog/auth.svelte'
6
+ import { i18n } from "./i18n";
5
7
 
6
8
  export let icons = {symbols :null}
7
9
 
@@ -46,7 +48,7 @@ export function activateItem(context_level, itm, operations=null)
46
48
  data_context.focused = context_level;
47
49
  contextItemsStore.set( {...data_context} )
48
50
 
49
-
51
+
50
52
  let ticket = get(data_tick_store)
51
53
  ticket++;
52
54
  data_tick_store.set(ticket)
@@ -54,7 +56,7 @@ export function activateItem(context_level, itm, operations=null)
54
56
  //chnages.just_changed_context = true;
55
57
 
56
58
  if(operations && context_level == 'props')
57
- {
59
+ {
58
60
  if(typeof operations === 'function')
59
61
  {
60
62
  const calculatedOps = operations([itm])
@@ -75,7 +77,7 @@ export function clearActiveItem(context_level, operations=undefined)
75
77
  data_context.sel = null
76
78
  contextItemsStore.set( {...data_context} )
77
79
 
78
-
80
+
79
81
  let ticket = get(data_tick_store)
80
82
  ticket++;
81
83
  data_tick_store.set(ticket)
@@ -105,9 +107,9 @@ export function addActiveItem(context_level, itm, operations = null)
105
107
  {
106
108
  let data_context = get(contextItemsStore);
107
109
  data_context['sel'] = itm; //null;
108
-
110
+
109
111
  let multi = data_context[context_level]
110
-
112
+
111
113
  if(multi && Array.isArray(multi))
112
114
  multi = [...multi, itm]
113
115
  else if(multi instanceof Object)
@@ -119,7 +121,7 @@ export function addActiveItem(context_level, itm, operations = null)
119
121
  data_context.focused = context_level;
120
122
  contextItemsStore.set( {...data_context} )
121
123
 
122
-
124
+
123
125
  let ticket = get(data_tick_store)
124
126
  ticket++;
125
127
  data_tick_store.set(ticket)
@@ -127,7 +129,7 @@ export function addActiveItem(context_level, itm, operations = null)
127
129
  //chnages.just_changed_context = true;
128
130
 
129
131
  if(operations && context_level == 'props')
130
- {
132
+ {
131
133
  if(typeof operations === 'function')
132
134
  {
133
135
  const calculatedOps = operations(multi)
@@ -174,7 +176,7 @@ export function removeActiveItem(context_level, itm, operations = null)
174
176
  else
175
177
  {
176
178
  if(operations)
177
- {
179
+ {
178
180
  if(typeof operations === 'function')
179
181
  {
180
182
  const calculatedOps = operations(multi)
@@ -237,7 +239,7 @@ export function getActive(context_level)
237
239
  if(prop && Array.isArray(prop) && prop.length > 0)
238
240
  return prop[prop.length-1]
239
241
  else
240
- return prop;
242
+ return prop;
241
243
  }
242
244
  else
243
245
  return null;
@@ -254,7 +256,7 @@ export function getActiveItems(context_level)
254
256
  else if(prop)
255
257
  return [prop]
256
258
  else
257
- return []
259
+ return []
258
260
  }
259
261
  else
260
262
  return [];
@@ -284,13 +286,13 @@ export function reloadPageToolbarOperations(operations)
284
286
 
285
287
  export function refreshToolbarOperations()
286
288
  {
287
-
289
+
288
290
  let refreshed = false
289
291
 
290
292
  const contextOperations = get(contextToolbarOperations)
291
293
  if(contextOperations)
292
294
  {
293
-
295
+
294
296
  if(Array.isArray(contextOperations))
295
297
  {
296
298
  if(contextOperations.length > 0)
@@ -308,7 +310,7 @@ export function refreshToolbarOperations()
308
310
  }
309
311
  }
310
312
  }
311
-
313
+
312
314
  if(!refreshed)
313
315
  {
314
316
  const pageOperations = get(pageToolbarOperations);
@@ -378,10 +380,10 @@ export function editable(node, params)
378
380
  await finish_editing({cancel: cancel});
379
381
  }
380
382
 
381
- const putNewLine = async (e) =>
383
+ const putNewLine = async (e) =>
382
384
  {
383
385
  const sel = window.getSelection()
384
-
386
+
385
387
  let selNode = sel?.focusNode
386
388
  let selOffset = sel?.focusOffset
387
389
  let text = selNode?.textContent
@@ -389,7 +391,7 @@ export function editable(node, params)
389
391
  const right = text?.substring(selOffset)
390
392
  text = left + '\n' + right
391
393
  node.textContent = text
392
-
394
+
393
395
  await tick()
394
396
  window.getSelection()?.setPosition(node.firstChild, selOffset+1)
395
397
  }
@@ -451,7 +453,7 @@ export function editable(node, params)
451
453
  node.removeEventListener("keydown", key_listener);
452
454
  node.removeEventListener("save", save_listener);
453
455
  node.contentEditable = "false"
454
-
456
+
455
457
  let sel = window.getSelection();
456
458
  sel.removeAllRanges();
457
459
  }
@@ -473,16 +475,16 @@ export function editable(node, params)
473
475
  has_changed = false;
474
476
  await action(node.textContent)
475
477
  }
476
-
478
+
477
479
  }
478
480
  else
479
481
  await action(node.textContent)
480
482
  }
481
483
 
482
484
  const finish_event = new CustomEvent("finish", {
483
- detail:
484
- {
485
- cancel: cancel,
485
+ detail:
486
+ {
487
+ cancel: cancel,
486
488
  incremental: incremental,
487
489
  softEnter: softEnter
488
490
  }
@@ -505,18 +507,18 @@ export function editable(node, params)
505
507
  node.contentEditable = "true"
506
508
  node.addEventListener("blur", blur_listener);
507
509
  node.addEventListener("keydown", key_listener);
508
-
510
+
509
511
  currentEditable = node;
510
512
  node.addEventListener("save", save_listener)
511
513
 
512
514
  node.focus();
513
515
 
514
- await tick();
516
+ /*await tick();
515
517
  let range = document.createRange();
516
518
  range.selectNodeContents(node);
517
519
  let end_offset = range.endOffset;
518
520
  let end_container = range.endContainer;
519
- range.setStart(end_container, end_offset)
521
+ range.setStart(end_container, 0)
520
522
  range.setEnd(end_container, end_offset)
521
523
  //range.setStart(node, 0)
522
524
  //range.setEnd(node, 0)
@@ -524,7 +526,7 @@ export function editable(node, params)
524
526
  let sel = window.getSelection();
525
527
  sel.removeAllRanges();
526
528
  sel.addRange(range);
527
-
529
+ */
528
530
  }
529
531
 
530
532
  const focus_listener = async (e) =>
@@ -534,9 +536,9 @@ export function editable(node, params)
534
536
  has_changed = false;
535
537
  currentEditable = node;
536
538
  node.addEventListener("save", save_listener)
537
-
538
- observer = new MutationObserver(() => {
539
- has_changed = true;
539
+
540
+ observer = new MutationObserver(() => {
541
+ has_changed = true;
540
542
  if(onSingleChange)
541
543
  onSingleChange(node.textContent)
542
544
  });
@@ -564,7 +566,7 @@ export function editable(node, params)
564
566
  else
565
567
  {
566
568
  node.addEventListener("edit", edit_listener);
567
-
569
+
568
570
  return {
569
571
  destroy() {
570
572
 
@@ -578,7 +580,7 @@ export function editable(node, params)
578
580
  export function startEditing(element, finish_callback)
579
581
  {
580
582
  let editable_node = null;
581
-
583
+
582
584
  if(element.classList.contains("editable"))
583
585
  editable_node = element;
584
586
  else
@@ -591,8 +593,11 @@ export function startEditing(element, finish_callback)
591
593
  if(editable_node)
592
594
  {
593
595
  if(editable_node.contentEditable == "true")
596
+ {
597
+ editable_node.focus()
594
598
  return;
595
-
599
+ }
600
+
596
601
  if(finish_callback)
597
602
  {
598
603
  editable_node.addEventListener("finish", (e) => { finish_callback(e.detail) })
@@ -603,6 +608,29 @@ export function startEditing(element, finish_callback)
603
608
  }
604
609
  }
605
610
 
611
+ export function makeEditableIdFromFieldName(fieldName)
612
+ {
613
+ return `__or_editable_${fieldName}`
614
+ }
615
+
616
+ export function focusEditable(fieldName)
617
+ {
618
+ let editableId = ''
619
+ if(fieldName.startsWith('#'))
620
+ editableId = fieldName.substring(1)
621
+ else
622
+ editableId = makeEditableIdFromFieldName(fieldName)
623
+
624
+ const editableElement = document.getElementById(editableId)
625
+ if(editableElement)
626
+ {
627
+ startEditing(editableElement)
628
+ return true;
629
+ }
630
+ else
631
+ return false;
632
+ }
633
+
606
634
  export function saveCurrentEditable()
607
635
  {
608
636
  if(currentEditable)
@@ -642,7 +670,7 @@ export function handleSelect(e)
642
670
  }
643
671
 
644
672
  let selection_node = null;
645
-
673
+
646
674
  while(!!node)
647
675
  {
648
676
  if(node.hasAttribute("selectable"))
@@ -663,40 +691,40 @@ export function handleSelect(e)
663
691
 
664
692
 
665
693
  export function parseWidthDirective(c)
666
- {
694
+ {
667
695
  let cs = '';
668
696
  switch (c)
669
697
  {
670
698
  case '1':
671
- cs = 'col-span-1'
699
+ cs = 'col-span-1'
672
700
  break;
673
701
  case '2':
674
- cs = 'col-span-2'
702
+ cs = 'col-span-2'
675
703
  break;
676
704
  case '3':
677
- cs = 'col-span-3'
705
+ cs = 'col-span-3'
678
706
  break;
679
707
  case '4':
680
- cs = 'col-span-4'
708
+ cs = 'col-span-4'
681
709
  break;
682
710
  case '5':
683
- cs = 'col-span-5'
711
+ cs = 'col-span-5'
684
712
  break;
685
713
  case '6':
686
- cs = 'col-span-6'
714
+ cs = 'col-span-6'
687
715
  break;
688
716
  case '1-x3':
689
- cs = 'col-span-1 xl:col-span-3'
717
+ cs = 'col-span-1 xl:col-span-3'
690
718
  break;
691
719
  case '2-x3':
692
- cs = 'col-span-2 xl:col-span-3'
720
+ cs = 'col-span-2 xl:col-span-3'
693
721
  break;
694
722
  case '3-x9':
695
723
  cs = 'col-span-3 xl:col-span-9'
696
- break;
724
+ break;
697
725
  case '4-x9':
698
726
  cs = 'col-span-4 xl:col-span-9'
699
- break;
727
+ break;
700
728
  default:
701
729
  break;
702
730
  }
@@ -710,7 +738,7 @@ export function shouldBeComapact()
710
738
  return !!is_in_table;
711
739
  }
712
740
 
713
-
741
+
714
742
 
715
743
  export function insertAt(array, index, element)
716
744
  {
@@ -828,25 +856,25 @@ export async function resizeImage(file, maxWidth=1024, maxHeight=1024, contentTy
828
856
  const [newWidth, newHeight] = calculateSize(img, maxWidth, maxHeight);
829
857
 
830
858
  console.log('resizeImage', img.width, '=>', newWidth, img.height, '=>', newHeight, contentType, quality)
831
-
859
+
832
860
  const canvas = document.createElement("canvas");
833
861
  canvas.width = newWidth;
834
862
  canvas.height = newHeight;
835
863
  const ctx = canvas.getContext("2d");
836
864
  ctx.drawImage(img, 0, 0, newWidth, newHeight);
837
-
865
+
838
866
  canvas.toBlob((blob) => {
839
867
  resolve(blob);
840
868
  },
841
-
869
+
842
870
  contentType,
843
871
  quality)
844
-
872
+
845
873
  }
846
874
 
847
875
  img.src = URL.createObjectURL(file);
848
876
 
849
- })
877
+ })
850
878
  }
851
879
 
852
880
  export function isOnScreenKeyboardVisible()
@@ -855,7 +883,7 @@ export function isOnScreenKeyboardVisible()
855
883
  return false;
856
884
 
857
885
  const sel = window.getSelection();
858
- // if we have active selections then it's very possible we have onscreen keyboard visible, se we need to shrink window.innerHeight
886
+ // if we have active selections then it's very possible we have onscreen keyboard visible, se we need to shrink window.innerHeight
859
887
  if(sel && sel.rangeCount>0 && sel.focusNode /*&& sel.focusNode.nodeType==sel.focusNode.TEXT_NODE*/) // TipTap fix: when cursor blinks at begining of line it's not TEXT_NODE. ProseMirror handles it as special case
860
888
  {
861
889
  const el = sel.focusNode.parentElement;
@@ -872,13 +900,13 @@ export const UI = {
872
900
  navigator: null
873
901
  }
874
902
 
875
- export function dec2hex (dec)
903
+ export function dec2hex (dec)
876
904
  {
877
905
  return dec.toString(16).padStart(2, "0")
878
906
  }
879
-
880
907
 
881
- export function randomString(len)
908
+
909
+ export function randomString(len)
882
910
  {
883
911
  var arr = new Uint8Array((len || 16) / 2)
884
912
  window.crypto.getRandomValues(arr)
@@ -893,7 +921,7 @@ let lastNavPage = ''
893
921
  export function isOnNavigationPage(navKind)
894
922
  {
895
923
  const loc = get(location)
896
-
924
+
897
925
  if(!navKind)
898
926
  {
899
927
  if(loc.startsWith(NAVIGATION_PAGE_PATH))
@@ -908,7 +936,7 @@ export function isOnNavigationPage(navKind)
908
936
  else
909
937
  return false;
910
938
  }
911
-
939
+
912
940
  }
913
941
 
914
942
 
@@ -949,7 +977,9 @@ export const NAV_MODE_FULL_PAGE = 1
949
977
 
950
978
  export function navGetMode()
951
979
  {
952
- return isDeviceSmallerThan("sm") ? NAV_MODE_FULL_PAGE : NAV_MODE_SIDEBAR;
980
+ //UI26: NAV_MODE_FULL_PAGE is obsolete experiment
981
+ //return isDeviceSmallerThan("sm") ? NAV_MODE_FULL_PAGE : NAV_MODE_SIDEBAR;
982
+ return NAV_MODE_SIDEBAR;
953
983
  }
954
984
 
955
985
  export function navIsVisible()
@@ -1068,25 +1098,25 @@ export function isValidEmail(e)
1068
1098
  //let pattern = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
1069
1099
  //return (e.match(pattern) != null);
1070
1100
 
1071
- var at_idx = e.indexOf("@");
1072
- var dot_idx = e.lastIndexOf(".");
1073
- var space_idx = e.indexOf(" ");
1074
-
1075
- if ((at_idx != -1) &&
1076
- (at_idx != 0) &&
1077
- (dot_idx != -1) &&
1078
- (dot_idx != 0) &&
1079
- (dot_idx > at_idx + 1) &&
1080
- (e.length > dot_idx + 1) &&
1081
- (space_idx == -1))
1082
- {
1083
- return true;
1084
- }
1085
- else
1086
- {
1087
- return false;
1088
- }
1089
-
1101
+ var at_idx = e.indexOf("@");
1102
+ var dot_idx = e.lastIndexOf(".");
1103
+ var space_idx = e.indexOf(" ");
1104
+
1105
+ if ((at_idx != -1) &&
1106
+ (at_idx != 0) &&
1107
+ (dot_idx != -1) &&
1108
+ (dot_idx != 0) &&
1109
+ (dot_idx > at_idx + 1) &&
1110
+ (e.length > dot_idx + 1) &&
1111
+ (space_idx == -1))
1112
+ {
1113
+ return true;
1114
+ }
1115
+ else
1116
+ {
1117
+ return false;
1118
+ }
1119
+
1090
1120
  }
1091
1121
 
1092
1122
  export function setSelectionAtEnd(element)
@@ -1106,28 +1136,28 @@ export function setSelectionAtEnd(element)
1106
1136
 
1107
1137
  export function localStorageSave(key, value)
1108
1138
  {
1109
- try
1139
+ try
1110
1140
  {
1111
- if (typeof localStorage === "undefined")
1141
+ if (typeof localStorage === "undefined")
1112
1142
  return;
1113
1143
 
1114
1144
  localStorage.setItem(key, value);
1115
- }
1116
- catch
1145
+ }
1146
+ catch
1117
1147
  {
1118
-
1148
+
1119
1149
  }
1120
1150
  }
1121
1151
 
1122
1152
  export function localStorageRead(key, fallback = '')
1123
1153
  {
1124
- try
1154
+ try
1125
1155
  {
1126
- if (typeof localStorage === "undefined")
1156
+ if (typeof localStorage === "undefined")
1127
1157
  return fallback;
1128
1158
  return localStorage.getItem(key) ?? fallback;
1129
- }
1130
- catch
1159
+ }
1160
+ catch
1131
1161
  {
1132
1162
  return fallback;
1133
1163
  }
@@ -1135,13 +1165,13 @@ export function localStorageRead(key, fallback = '')
1135
1165
 
1136
1166
  export function hasLocalStorage(key)
1137
1167
  {
1138
- try
1168
+ try
1139
1169
  {
1140
- if (typeof localStorage === "undefined")
1170
+ if (typeof localStorage === "undefined")
1141
1171
  return false;
1142
1172
  return localStorage.getItem(key) ? true : false;
1143
- }
1144
- catch
1173
+ }
1174
+ catch
1145
1175
  {
1146
1176
  return false;
1147
1177
  }
@@ -1149,29 +1179,114 @@ export function hasLocalStorage(key)
1149
1179
 
1150
1180
  export function sessionStorageSave(key, value)
1151
1181
  {
1152
- try
1182
+ try
1153
1183
  {
1154
- if (typeof sessionStorage === "undefined")
1184
+ if (typeof sessionStorage === "undefined")
1155
1185
  return;
1156
1186
 
1157
1187
  sessionStorage.setItem(key, value);
1158
- }
1159
- catch
1188
+ }
1189
+ catch
1160
1190
  {
1161
-
1191
+
1162
1192
  }
1163
1193
  }
1164
1194
 
1165
1195
  export function sessionStorageRead(key, fallback = '')
1166
1196
  {
1167
- try
1197
+ try
1168
1198
  {
1169
- if (typeof sessionStorage === "undefined")
1199
+ if (typeof sessionStorage === "undefined")
1170
1200
  return fallback;
1171
1201
  return sessionStorage.getItem(key) ?? fallback;
1172
- }
1173
- catch
1202
+ }
1203
+ catch
1174
1204
  {
1175
1205
  return fallback;
1176
1206
  }
1207
+ }
1208
+
1209
+ export function getCurrentGroupName(session)
1210
+ {
1211
+ const gid = session.tid; // current tenant id
1212
+ const tInfo = session.tenants.find(t => t.id == gid)
1213
+ if(tInfo)
1214
+ return tInfo.name;
1215
+ else
1216
+ {
1217
+ return 'Current group' // todo: handle group when local auth
1218
+ }
1219
+ }
1220
+
1221
+ export async function getGroupsMenu(params)
1222
+ {
1223
+ const session = params.session
1224
+ const reditectTo = params.redirectAfterSwitch
1225
+ const afterGroupCreated = params.afterGroupCreated
1226
+
1227
+ let showGroupsSwitchMenu = false;
1228
+ let canAddNewGroup = false;
1229
+
1230
+ showGroupsSwitchMenu = session.tenants.length > 1
1231
+ if(session.configuration.tenant)
1232
+ {
1233
+ const instanceInfo = await reef.getAppInstanceInfo()
1234
+ if(instanceInfo?.is_public)
1235
+ {
1236
+ showGroupsSwitchMenu = true;
1237
+ canAddNewGroup = true;
1238
+ }
1239
+ }
1240
+
1241
+ if(!showGroupsSwitchMenu)
1242
+ return []
1243
+
1244
+ let options = []
1245
+
1246
+ session.tenants.forEach(tInfo =>
1247
+ options.push({
1248
+ caption: tInfo.name,
1249
+ disabledFunc: () => tInfo.id == session.tid,
1250
+ action: async (f) => {
1251
+ if(reditectTo)
1252
+ await push(reditectTo) // __APP_DEFAULT_PAGE__
1253
+
1254
+ setTimeout(() => {
1255
+ session.setCurrentTenantAPI(tInfo.url, tInfo.id)
1256
+ reloadWholeApp()
1257
+ }, 200)
1258
+ }
1259
+ })
1260
+ )
1261
+
1262
+ if(canAddNewGroup)
1263
+ {
1264
+ options.push({
1265
+ separator: true
1266
+ })
1267
+ options.push({
1268
+ caption: i18n({en:'Add group', es:'Añadir grupo', pl: 'Dodaj grupę'}),
1269
+ //icon: FaPlus,
1270
+ action: (f) => launchNewGroupWizzard(afterGroupCreated)
1271
+ })
1272
+ }
1273
+
1274
+ return options;
1275
+ }
1276
+
1277
+ import NewGroupDialog from './tenant.create.svelte'
1278
+ function launchNewGroupWizzard(afterGroupCreated=undefined)
1279
+ {
1280
+ let app_div = document.getElementById("__hd_svelte_layout_root")
1281
+ if(!app_div)
1282
+ app_div = document.getElementById("app")
1283
+
1284
+ let dialog = new NewGroupDialog({
1285
+ target: app_div,
1286
+ props: {
1287
+ afterGroupCreated: afterGroupCreated
1288
+ }
1289
+ });
1290
+
1291
+ dialog.show()
1177
1292
  }