@humandialog/forms.svelte 1.3.17 → 1.4.0

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 (36) hide show
  1. package/components/Fab.svelte +77 -46
  2. package/components/combo/combo.svelte +18 -15
  3. package/components/combo/combo.svelte.d.ts +1 -0
  4. package/components/contextmenu.svelte +25 -6
  5. package/components/date.svelte +10 -4
  6. package/components/date.svelte.d.ts +1 -0
  7. package/components/date_utils.d.ts +1 -0
  8. package/components/date_utils.js +10 -0
  9. package/components/delayed.spinner.svelte +1 -2
  10. package/components/document/editor.svelte +419 -46
  11. package/components/document/editor.svelte.d.ts +115 -0
  12. package/components/document/internal/palette.svelte +20 -0
  13. package/components/list/List.d.ts +6 -0
  14. package/components/list/List.js +6 -0
  15. package/components/list/internal/list.element.props.svelte +23 -8
  16. package/components/list/internal/list.element.svelte +17 -5
  17. package/components/list/list.combo.svelte +6 -0
  18. package/components/list/list.combo.svelte.d.ts +3 -0
  19. package/components/list/list.date.svelte +8 -0
  20. package/components/list/list.date.svelte.d.ts +4 -0
  21. package/components/list/list.static.svelte +6 -0
  22. package/components/list/list.static.svelte.d.ts +3 -0
  23. package/components/list/list.tags.svelte +32 -0
  24. package/components/list/list.tags.svelte.d.ts +24 -0
  25. package/components/sidebar/sidebar.item.svelte +12 -8
  26. package/components/tags.svelte +15 -7
  27. package/components/tags.svelte.d.ts +2 -0
  28. package/desk.svelte +5 -5
  29. package/index.d.ts +7 -2
  30. package/index.js +7 -2
  31. package/operations.svelte +61 -12
  32. package/package.json +4 -2
  33. package/stores.d.ts +3 -0
  34. package/stores.js +25 -2
  35. package/tenant.members.svelte +61 -59
  36. package/tenant.members.svelte.d.ts +2 -0
package/index.js CHANGED
@@ -45,6 +45,7 @@ export { default as ListInserter } from './components/list/list.inserter.svelte'
45
45
  export { default as ListDateProperty } from './components/list/list.date.svelte';
46
46
  export { default as ListComboProperty } from './components/list/list.combo.svelte';
47
47
  export { default as ListStaticProperty } from './components/list/list.static.svelte';
48
+ export { default as ListTags } from './components/list/list.tags.svelte';
48
49
  export { default as Modal } from './modal.svelte';
49
50
  export { default as MembersPage } from './tenant.members.svelte';
50
51
  export { default as Console } from './console.svelte';
@@ -62,9 +63,13 @@ export { default as KanbanTagsProperty } from './components/kanban/kanban.tags.s
62
63
  export { default as KanbanCallbacks } from './components/kanban/kanban.callbacks.svelte';
63
64
  export { KanbanColumnTop, KanbanColumnBottom } from './components/kanban/Kanban';
64
65
  export { selectItem, activateItem, clearActiveItem, isActive, isSelected, getActive, editable, startEditing, saveCurrentEditable, selectable, handleSelect, isDeviceSmallerThan, resizeImage, refreshToolbarOperations, isOnScreenKeyboardVisible, randomString, UI, } from './utils';
65
- export { getFormattedStringDate, getNiceStringDate, dayName, monthName } from './components/date_utils';
66
- export { mainContentPageReloader, reloadMainContentPage, reloadWholeApp, alerts, addAlert, onErrorShowAlert, main_sidebar_visible_store } from './stores.js';
66
+ export { getNiceStringDateTime, getFormattedStringDate, getNiceStringDate, dayName, monthName } from './components/date_utils';
67
+ export { mainContentPageReloader, reloadMainContentPage, reloadWholeApp, alerts, addAlert, onErrorShowAlert, main_sidebar_visible_store, tagsReloader, reloadVisibleTags } from './stores.js';
67
68
  export { data_tick_store, // tmp
68
69
  hasSelectedItem, hasDataItem, setNavigatorTitle } from "./stores";
69
70
  export { contextToolbarOperations, pageToolbarOperations, contextItemsStore, contextTypesStore } from './stores'; // tmp
70
71
  export { informModification, informModificationEx, informItem, pushChanges } from './updates'; // tmp
72
+ export { default as IcH1 } from './components/document/internal/h1.icon.svelte';
73
+ export { default as IcH2 } from './components/document/internal/h2.icon.svelte';
74
+ export { default as IcH3 } from './components/document/internal/h3.icon.svelte';
75
+ export { default as IcH4 } from './components/document/internal/h4.icon.svelte';
package/operations.svelte CHANGED
@@ -6,21 +6,20 @@ $:
6
6
  let operations = [];
7
7
  let leftOperations = [];
8
8
  let rightOperations = [];
9
+ let hasOperations = false;
9
10
  function update(...args) {
10
- let isOpVer1 = false;
11
+ let opVer = 0;
11
12
  if ($contextToolbarOperations && Array.isArray($contextToolbarOperations) && $contextToolbarOperations.length > 0) {
12
13
  operations = $contextToolbarOperations;
13
14
  } else if ($contextToolbarOperations && $contextToolbarOperations.operations && $contextToolbarOperations.operations.length > 0) {
14
15
  operations = $contextToolbarOperations.operations;
15
- if ($contextToolbarOperations.opver && $contextToolbarOperations.opver == 1)
16
- isOpVer1 = true;
16
+ opVer = $contextToolbarOperations.opver ?? 0;
17
17
  } else {
18
18
  if (Array.isArray($pageToolbarOperations))
19
19
  operations = $pageToolbarOperations;
20
20
  else {
21
21
  operations = $pageToolbarOperations.operations;
22
- if ($pageToolbarOperations.opver && $pageToolbarOperations.opver == 1)
23
- isOpVer1 = true;
22
+ opVer = $pageToolbarOperations.opver ?? 0;
24
23
  }
25
24
  }
26
25
  leftOperations = [];
@@ -28,7 +27,7 @@ function update(...args) {
28
27
  let AOperations = [];
29
28
  let BOperations = [];
30
29
  let COperations = [];
31
- if (isOpVer1) {
30
+ if (opVer == 1) {
32
31
  operations.forEach((group) => {
33
32
  if (group.operations && group.operations.length > 0) {
34
33
  AOperations = [...AOperations, ...group.operations.filter((o) => o.tbr == "A")];
@@ -38,10 +37,56 @@ function update(...args) {
38
37
  });
39
38
  leftOperations = [...AOperations, ...BOperations];
40
39
  rightOperations = [...COperations];
40
+ } else if (opVer == 2) {
41
+ operations.forEach((group) => {
42
+ if (group.tbr) {
43
+ const expandOperation = {
44
+ caption: group.caption ?? "",
45
+ icon: group.icon ?? void 0,
46
+ preAction: group.preAction,
47
+ activeFunc: group.activeFunc,
48
+ menu: group.operations
49
+ };
50
+ switch (group.tbr) {
51
+ case "A":
52
+ AOperations.push(expandOperation);
53
+ break;
54
+ case "B":
55
+ BOperations.push(expandOperation);
56
+ break;
57
+ case "C":
58
+ COperations.push(expandOperation);
59
+ break;
60
+ }
61
+ }
62
+ group.operations.forEach((op) => {
63
+ if (op.tbr) {
64
+ const tbrOperation = {
65
+ ...op
66
+ };
67
+ if (op.hideToolbarCaption)
68
+ tbrOperation.caption = "";
69
+ switch (op.tbr) {
70
+ case "A":
71
+ AOperations.push(tbrOperation);
72
+ break;
73
+ case "B":
74
+ BOperations.push(tbrOperation);
75
+ break;
76
+ case "C":
77
+ COperations.push(tbrOperation);
78
+ break;
79
+ }
80
+ }
81
+ });
82
+ });
83
+ leftOperations = [...AOperations, ...BOperations];
84
+ rightOperations = [...COperations];
41
85
  } else {
42
86
  leftOperations = operations.filter((o) => !o.right);
43
87
  rightOperations = operations.filter((o) => o.right == true);
44
88
  }
89
+ hasOperations = leftOperations.length > 0 || rightOperations.length > 0;
45
90
  }
46
91
  function on_click(e, operation) {
47
92
  if (!operation)
@@ -49,6 +94,8 @@ function on_click(e, operation) {
49
94
  let owner = e.target;
50
95
  while (owner && owner.tagName != "BUTTON")
51
96
  owner = owner.parentElement;
97
+ if (operation.preAction)
98
+ operation.preAction(owner);
52
99
  if (operation.action) {
53
100
  operation.action(owner);
54
101
  return;
@@ -74,6 +121,7 @@ function isOperationActivated(operation) {
74
121
  }
75
122
  </script>
76
123
 
124
+ {#if hasOperations}
77
125
  <section class="flex flex-row no-print h-10 bg-stone-600 dark:bg-stone-950 overflow-x-clip overflow-y-hidden py-0 text-xs whitespace-nowrap">
78
126
  <div class="flex flex-row"
79
127
  class:flex-row-reverse={mobile}>
@@ -85,7 +133,7 @@ function isOperationActivated(operation) {
85
133
  {#each operation.toolbox as operation}
86
134
  <button type="button"
87
135
  class="py-2.5 px-4
88
- text-xs font-thin text-stone-100 dark:text-stone-300 dark:hover:text-white
136
+ text-sm font-thin text-stone-100 dark:text-stone-300 dark:hover:text-white
89
137
  hover:bg-stone-700 dark:hover:bg-stone-800 active:bg-stone-300 dark:active:bg-stone-600
90
138
  border-stone-200 focus:outline-none dark:border-stone-600
91
139
  inline-flex items-center"
@@ -94,7 +142,7 @@ function isOperationActivated(operation) {
94
142
  on:click={(e) => {on_click(e, operation)}}
95
143
  on:mousedown={mousedown}>
96
144
  {#if operation.icon}
97
- <div class="w-3.5 h-3.5 mr-1"><svelte:component this={operation.icon}/></div>
145
+ <div class="w-5 h-5 mr-1"><svelte:component this={operation.icon}/></div>
98
146
  {/if}
99
147
  {#if operation.caption}
100
148
  <span class="ml-1">{operation.caption}</span>
@@ -105,7 +153,7 @@ function isOperationActivated(operation) {
105
153
 
106
154
  <button type="button"
107
155
  class="py-2.5 px-4
108
- text-xs font-thin text-stone-100 dark:text-stone-300 dark:hover:text-white
156
+ text-sm font-thin text-stone-100 dark:text-stone-300 dark:hover:text-white
109
157
  hover:bg-stone-700 dark:hover:bg-stone-800 active:bg-stone-300 dark:active:bg-stone-600
110
158
  border-stone-200 focus:outline-none dark:border-stone-600
111
159
  inline-flex items-center"
@@ -114,7 +162,7 @@ function isOperationActivated(operation) {
114
162
  on:click={(e) => {on_click(e, operation)}}
115
163
  on:mousedown={mousedown}>
116
164
  {#if operation.icon}
117
- <div class="w-3.5 h-3.5 mr-1"><svelte:component this={operation.icon}/></div>
165
+ <div class="w-5 h-5 mr-1"><svelte:component this={operation.icon}/></div>
118
166
  {/if}
119
167
  {#if operation.caption}
120
168
  <span class="ml-1">{operation.caption}</span>
@@ -133,7 +181,7 @@ function isOperationActivated(operation) {
133
181
  {@const isActive=isOperationActivated(operation)}
134
182
  <button type="button"
135
183
  class="py-2.5 px-4
136
- text-xs font-thin text-stone-100 dark:text-stone-300 dark:hover:text-white
184
+ text-sm font-thin text-stone-100 dark:text-stone-300 dark:hover:text-white
137
185
  hover:bg-stone-700 dark:hover:bg-stone-800 active:bg-stone-300 dark:active:bg-stone-600
138
186
  border-stone-200 focus:outline-none dark:border-stone-600
139
187
  inline-flex items-center"
@@ -142,7 +190,7 @@ function isOperationActivated(operation) {
142
190
  on:click={(e) => {on_click(e, operation)}}
143
191
  on:mousedown={mousedown}>
144
192
  {#if operation.icon}
145
- <div class="w-3.5 h-3.5 mr-1"><svelte:component this={operation.icon}/></div>
193
+ <div class="w-5 h-5 mr-1"><svelte:component this={operation.icon}/></div>
146
194
  {/if}
147
195
  {#if operation.caption}
148
196
  <span class="ml-1">{operation.caption}</span>
@@ -152,6 +200,7 @@ function isOperationActivated(operation) {
152
200
  {/each}
153
201
  </div>
154
202
  </section>
203
+ {/if}
155
204
 
156
205
  <style>
157
206
  @media print
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@humandialog/forms.svelte",
3
- "version": "1.3.17",
3
+ "version": "1.4.0",
4
4
  "description": "Basic Svelte UI components for Object Reef applications",
5
5
  "devDependencies": {
6
6
  "@playwright/test": "^1.28.1",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "type": "module",
28
28
  "dependencies": {
29
- "@humandialog/auth.svelte": "^1.8.5",
29
+ "@humandialog/auth.svelte": "^1.8.8",
30
30
  "@tiptap/core": "^2.11.0",
31
31
  "@tiptap/extension-bullet-list": "^2.11.5",
32
32
  "@tiptap/extension-code-block": "^2.11.5",
@@ -43,6 +43,7 @@
43
43
  "@tiptap/suggestion": "^2.11.0",
44
44
  "flowbite-svelte": "^0.44.4",
45
45
  "pdfjs-dist": "^4.10.38",
46
+ "qs": "^6.14.0",
46
47
  "svelte-icons": "^2.1.0",
47
48
  "svelte-spa-router": "^4.0.1"
48
49
  },
@@ -125,6 +126,7 @@
125
126
  "./components/list/list.static.svelte": "./components/list/list.static.svelte",
126
127
  "./components/list/list.summary.svelte": "./components/list/list.summary.svelte",
127
128
  "./components/list/list.svelte": "./components/list/list.svelte",
129
+ "./components/list/list.tags.svelte": "./components/list/list.tags.svelte",
128
130
  "./components/list/list.title.svelte": "./components/list/list.title.svelte",
129
131
  "./components/list/List": "./components/list/List.js",
130
132
  "./components/menu": "./components/menu.js",
package/stores.d.ts CHANGED
@@ -5,6 +5,7 @@ export function hasSelectedItem(): boolean;
5
5
  export function hasDataItem(): boolean;
6
6
  export function reloadMainContentPage(): void;
7
7
  export function reloadWholeApp(): void;
8
+ export function reloadVisibleTags(): void;
8
9
  export function set_dark_mode_default(value: any): void;
9
10
  export function set_default_tools_visible(value: any, force: any): void;
10
11
  export function restore_defults(): void;
@@ -35,7 +36,9 @@ export const nav_titles: import("svelte/store").Writable<{}>;
35
36
  export const mainContentPageReloader: import("svelte/store").Writable<number>;
36
37
  export const wholeAppReloader: import("svelte/store").Writable<number>;
37
38
  export const alerts: import("svelte/store").Writable<never[]>;
39
+ export const tagsReloader: import("svelte/store").Writable<number>;
38
40
  export function addAlert(txt: any): void;
41
+ export function removeAlert(alert: any): void;
39
42
  export function onErrorShowAlert(txt: any): void;
40
43
  export const dark_mode_store: import("svelte/store").Writable<any>;
41
44
  export const main_sidebar_visible_store: import("svelte/store").Writable<any>;
package/stores.js CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  import {writable, get} from 'svelte/store';
3
- import {SCREEN_SIZES} from './utils.js'
3
+ import {SCREEN_SIZES, randomString} from './utils.js'
4
4
 
5
5
  export const data_tick_store = writable(1);
6
6
  export const contextItemsStore = writable({focused:'', data: null, sel: null})
@@ -14,6 +14,7 @@ export const nav_titles = writable({});
14
14
  export const mainContentPageReloader = writable(1);
15
15
  export const wholeAppReloader = writable(1)
16
16
  export const alerts = writable([])
17
+ export const tagsReloader = writable(1)
17
18
 
18
19
 
19
20
  let toolsActionsOperationsStack = []
@@ -42,10 +43,26 @@ export function popToolsActionsOperations()
42
43
 
43
44
  export const addAlert = (txt) => {
44
45
  let al = get(alerts)
45
- al = [txt, ...al];
46
+ const alert = {
47
+ msg: txt,
48
+ id: randomString(6),
49
+ timeoutId: setTimeout(() => removeAlert(alert), 10000)
50
+ }
51
+ al = [alert, ...al];
46
52
  alerts.set(al);
47
53
  }
48
54
 
55
+ export const removeAlert = (alert) => {
56
+ let al = get(alerts)
57
+ const idx = al.findIndex((a) => a.id == alert.id)
58
+ if(idx >= 0)
59
+ {
60
+ clearTimeout(alert.timeoutId)
61
+ al.splice(idx, 1)
62
+ alerts.set(al)
63
+ }
64
+ }
65
+
49
66
  export const onErrorShowAlert = addAlert;
50
67
 
51
68
  export function setNavigatorTitle(key, title)
@@ -81,6 +98,12 @@ export function reloadWholeApp()
81
98
  wholeAppReloader.set(val);
82
99
  }
83
100
 
101
+ export function reloadVisibleTags()
102
+ {
103
+ let val = get(tagsReloader);
104
+ val += 1;
105
+ tagsReloader.set(val);
106
+ }
84
107
 
85
108
  let has_saved_dark_mode = false;
86
109
  function create_dark_mode_store()
@@ -4,7 +4,8 @@
4
4
  FaPen,
5
5
  FaInfoCircle,
6
6
  FaUserSlash,
7
- FaChevronDown} from 'svelte-icons/fa'
7
+ FaChevronDown,
8
+ FaInfo} from 'svelte-icons/fa'
8
9
 
9
10
  import Page from './page.svelte'
10
11
  import List from './components/list/list.svelte'
@@ -32,6 +33,7 @@
32
33
  export let nameAttrib = "Name";
33
34
  export let emailAttrib = "login";
34
35
  export let refAttrib = "$ref";
36
+ export let hrefAttrib = ''
35
37
  export let showFiles = false;
36
38
  //export let show_admin = true;
37
39
  export let showAccessRoles = false;
@@ -101,7 +103,10 @@
101
103
  avatar_url : "",
102
104
  invitation_not_accepted: false,
103
105
  removed: false,
104
- membership_tag: ""
106
+ membership_tag: "",
107
+ ... hrefAttrib ? {
108
+ [hrefAttrib]: u[hrefAttrib]
109
+ } : { }
105
110
  }
106
111
  )
107
112
  })
@@ -110,7 +115,7 @@
110
115
  //fake_users = [];
111
116
  //add_fake_users(fake_users);
112
117
 
113
- await fetch_details();
118
+ // await fetch_details();
114
119
 
115
120
  }
116
121
 
@@ -136,6 +141,13 @@
136
141
 
137
142
  }
138
143
 
144
+ async function fetch_user_details(reef_user)
145
+ {
146
+ let details = await reef.get(`/sys/user_details?email=${reef_user[emailAttrib]}`)
147
+ set_user_info(reef_user, details);
148
+ list?.reload(reef_users);
149
+ }
150
+
139
151
  function set_user_info(user, info)
140
152
  {
141
153
  user.auth_group = info.auth_group ?? 0;
@@ -285,25 +297,26 @@
285
297
  }
286
298
 
287
299
  let page_operations={
288
- opver: 1,
300
+ opver: 2,
289
301
  operations: [
290
302
  {
291
303
  caption: 'View',
292
304
  operations: [
293
305
  {
294
306
  icon: FaUserPlus,
295
- caption: '',
307
+ caption: 'Add user',
296
308
  action: (focused) => { create_new_user(); },
297
- fab: 'M10',
309
+ // fab: 'M10',
298
310
  tbr: 'A'
299
311
  },
300
- {
312
+ // przenieść na stronie /profile
313
+ /* {
301
314
  icon: FaUserSlash,
302
- caption: '',
315
+ caption: 'Delete application account',
303
316
  action: (f) => {askToDeleteApplicationAccount();},
304
- fab: 'S00',
317
+ //fab: 'S00',
305
318
  tbr: 'C'
306
- }
319
+ }*/
307
320
  ]
308
321
  }
309
322
  ]
@@ -317,18 +330,14 @@
317
330
  action: (focused) => { list.edit(user, nameAttrib) }
318
331
  },
319
332
  {
320
- caption: 'Users management',
333
+ caption: 'Users management (auth role)',
321
334
  action: (focused) => { list.edit(user, 'Privileges') }
322
335
  }];
323
336
 
324
337
  if(showAccessRoles)
325
338
  {
326
339
  operations.push({
327
- separator: true
328
- });
329
-
330
- operations.push({
331
- caption: 'Access role',
340
+ caption: 'Access role (app role)',
332
341
  action: (focused) => { list.edit(user, 'Access') }
333
342
  });
334
343
  }
@@ -336,7 +345,7 @@
336
345
  if(showFiles)
337
346
  {
338
347
  operations.push({
339
- caption: 'External files',
348
+ caption: 'External files (files role)',
340
349
  action: (focused) => { list.edit(user, 'Files') }
341
350
  });
342
351
  }
@@ -346,74 +355,62 @@
346
355
 
347
356
  let user_operations = (user) => {
348
357
 
349
- let operations = [];
358
+ let operations = [
359
+ {
360
+ caption: 'Fetch info',
361
+ icon: FaInfo,
362
+ action: (f) => fetch_user_details(user),
363
+ tbr: 'A'
364
+ }
365
+ ];
350
366
 
351
367
  if(user.removed)
352
368
  {
353
- operations = [
369
+ operations = [ ...operations,
354
370
  {
355
371
  icon: FaUserPlus,
356
- caption: '',
372
+ caption: 'Revert removing',
357
373
  action: (f) => askToAddAgain(user),
358
- fab: 'M10',
359
- tbr: 'B'
374
+ // fab: 'M10',
375
+ tbr: 'A'
360
376
  }
361
377
  ];
362
378
  }
363
379
  else
364
380
  {
365
381
  let edit_operations = get_edit_operations(user)
366
- if(edit_operations.length == 1)
367
- {
368
- operations.push({
369
- icon: FaPen,
370
- caption: '',
371
- action: edit_operations[0].action,
372
- fab: 'M20',
373
- tbr: 'B'
374
- });
375
- }
376
- else
377
- {
378
- operations.push({
379
- icon: FaPen,
380
- caption: '',
381
- grid: edit_operations,
382
- fab: 'M20',
383
- tbr: 'B'
384
- });
385
- }
386
-
382
+
387
383
  operations.push({
388
- caption: '',
384
+ icon: FaPen,
385
+ caption: 'Change',
386
+ menu: edit_operations,
387
+ //fab: 'M20',
388
+ tbr: 'A'
389
+ });
390
+
391
+ operations.push({
392
+ caption: 'Remove user',
389
393
  icon: FaUserMinus,
390
394
  action: (focused) => askToRemove(user),
391
- fab: 'M30',
392
- tbr: 'B'
395
+ // fab: 'M30',
396
+ tbr: 'A'
393
397
  });
394
398
  }
395
399
 
396
400
 
397
401
  return {
398
- opver: 1,
402
+ opver: 2,
399
403
  operations: [
400
404
  {
401
405
  caption: 'User',
406
+ // tbr: 'B',
402
407
  operations: operations
403
408
  }
404
409
  ]
405
410
  }
406
411
  }
407
412
 
408
- let user_context_menu = (user) => {
409
- if(user.removed)
410
- return [];
411
-
412
- let edit_operations = get_edit_operations(user);
413
- return {
414
- grid: edit_operations
415
- }
416
- }
413
+
417
414
 
418
415
  let data_item =
419
416
  {
@@ -695,7 +692,13 @@
695
692
  create_new_user();
696
693
  }
697
694
 
698
-
695
+ function getHRefFunc()
696
+ {
697
+ if(!hrefAttrib)
698
+ return undefined
699
+ else
700
+ return (user) => { return user[hrefAttrib]}
701
+ }
699
702
 
700
703
  </script>
701
704
 
@@ -713,9 +716,8 @@
713
716
  <List objects={reef_users}
714
717
  title='Members'
715
718
  toolbarOperations={user_operations}
716
- contextMenu={user_context_menu}
717
719
  bind:this={list}>
718
- <ListTitle a={nameAttrib} onChange={on_name_changed}/>
720
+ <ListTitle a={nameAttrib} onChange={on_name_changed} hrefFunc={getHRefFunc()}/>
719
721
  <ListSummary a={emailAttrib} readonly/>
720
722
 
721
723
  <ListStaticProperty name="Membership" a="membership_tag"/>
@@ -6,6 +6,7 @@ export default class Tenant extends SvelteComponentTyped<{
6
6
  nameAttrib?: string | undefined;
7
7
  emailAttrib?: string | undefined;
8
8
  refAttrib?: string | undefined;
9
+ hrefAttrib?: string | undefined;
9
10
  showFiles?: boolean | undefined;
10
11
  showAccessRoles?: boolean | undefined;
11
12
  }, {
@@ -22,6 +23,7 @@ declare const __propDef: {
22
23
  nameAttrib?: string | undefined;
23
24
  emailAttrib?: string | undefined;
24
25
  refAttrib?: string | undefined;
26
+ hrefAttrib?: string | undefined;
25
27
  showFiles?: boolean | undefined;
26
28
  showAccessRoles?: boolean | undefined;
27
29
  };