@bexis2/bexis2-core-ui 0.4.18 → 0.4.20

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 (58) hide show
  1. package/README.md +16 -8
  2. package/dist/components/CodeEditor/CodeEditor.svelte +4 -0
  3. package/dist/components/Facets/Facets.svelte +57 -20
  4. package/dist/components/Facets/Facets.svelte.d.ts +5 -1
  5. package/dist/components/Facets/ShowMore.svelte +31 -18
  6. package/dist/components/Facets/ShowMore.svelte.d.ts +2 -2
  7. package/dist/components/File/FileUploader.svelte +1 -1
  8. package/dist/components/Table/ColumnsMenu.svelte +5 -0
  9. package/dist/components/Table/TableContent.svelte +32 -16
  10. package/dist/components/Table/TableFilter.svelte +12 -0
  11. package/dist/components/Table/TableFilterServer.svelte +13 -1
  12. package/dist/components/Table/TablePagination.svelte +11 -6
  13. package/dist/components/Table/TablePaginationServer.svelte +8 -0
  14. package/dist/components/form/Checkbox.svelte +1 -1
  15. package/dist/components/form/CheckboxKvPList.svelte +2 -1
  16. package/dist/components/form/CheckboxList.svelte +2 -2
  17. package/dist/components/form/DateInput.svelte +1 -1
  18. package/dist/components/form/DropdownKvP.svelte +1 -1
  19. package/dist/components/form/InputContainer.svelte +7 -1
  20. package/dist/components/form/MultiSelect.svelte +100 -106
  21. package/dist/components/form/NumberInput.svelte +1 -1
  22. package/dist/components/form/TextArea.svelte +1 -1
  23. package/dist/components/form/TextInput.svelte +1 -1
  24. package/dist/components/page/Alert.svelte +1 -1
  25. package/dist/components/page/BackToTop.svelte +1 -1
  26. package/dist/components/page/Docs.svelte +1 -1
  27. package/dist/components/page/GoToTop.svelte +1 -0
  28. package/dist/components/page/HelpPopUp.svelte +1 -0
  29. package/dist/components/page/Page.svelte +14 -19
  30. package/dist/components/page/menu/MenuSublist.svelte +7 -5
  31. package/package.json +114 -114
  32. package/src/lib/components/CodeEditor/CodeEditor.svelte +4 -0
  33. package/src/lib/components/Facets/Facets.svelte +74 -25
  34. package/src/lib/components/Facets/ShowMore.svelte +33 -19
  35. package/src/lib/components/File/FileUploader.svelte +1 -1
  36. package/src/lib/components/Table/ColumnsMenu.svelte +5 -0
  37. package/src/lib/components/Table/TableContent.svelte +32 -16
  38. package/src/lib/components/Table/TableFilter.svelte +12 -0
  39. package/src/lib/components/Table/TableFilterServer.svelte +13 -1
  40. package/src/lib/components/Table/TablePagination.svelte +11 -6
  41. package/src/lib/components/Table/TablePaginationServer.svelte +8 -0
  42. package/src/lib/components/form/Checkbox.svelte +1 -1
  43. package/src/lib/components/form/CheckboxKvPList.svelte +2 -1
  44. package/src/lib/components/form/CheckboxList.svelte +2 -2
  45. package/src/lib/components/form/DateInput.svelte +1 -1
  46. package/src/lib/components/form/DropdownKvP.svelte +1 -1
  47. package/src/lib/components/form/InputContainer.svelte +7 -1
  48. package/src/lib/components/form/MultiSelect.svelte +100 -106
  49. package/src/lib/components/form/NumberInput.svelte +1 -1
  50. package/src/lib/components/form/TextArea.svelte +1 -1
  51. package/src/lib/components/form/TextInput.svelte +1 -1
  52. package/src/lib/components/page/Alert.svelte +1 -1
  53. package/src/lib/components/page/BackToTop.svelte +1 -1
  54. package/src/lib/components/page/Docs.svelte +1 -1
  55. package/src/lib/components/page/GoToTop.svelte +1 -0
  56. package/src/lib/components/page/HelpPopUp.svelte +1 -0
  57. package/src/lib/components/page/Page.svelte +15 -20
  58. package/src/lib/components/page/menu/MenuSublist.svelte +11 -8
@@ -52,7 +52,11 @@ $: $pageSize = pageSizeDropdownValue;
52
52
  {/each}
53
53
  </select> -->
54
54
 
55
- <button class="btn variant-filled-primary w-20 justify-between" use:popup={pageSizePopup}>
55
+ <button
56
+ aria-label="Open menu to select number of items per page"
57
+ class="btn variant-filled-primary w-20 justify-between"
58
+ use:popup={pageSizePopup}
59
+ >
56
60
  <span class="capitalize font-semibold">{pageSizeDropdownValue}</span>
57
61
  <Fa icon={faChevronDown} size="xs" />
58
62
  </button>
@@ -72,6 +76,7 @@ $: $pageSize = pageSizeDropdownValue;
72
76
  <button
73
77
  class="btn btn-sm variant-filled-primary"
74
78
  on:click|preventDefault={goToFirstPage}
79
+ aria-label="Go to first page"
75
80
  disabled={goToFirstPageDisabled}
76
81
  id="{id}-first"
77
82
  >
@@ -80,6 +85,7 @@ $: $pageSize = pageSizeDropdownValue;
80
85
  <button
81
86
  class="btn btn-sm variant-filled-primary"
82
87
  id="{id}-previous"
88
+ aria-label="Go to previous page"
83
89
  on:click|preventDefault={goToPreviousPage}
84
90
  disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
85
91
  >
@@ -88,17 +94,20 @@ $: $pageSize = pageSizeDropdownValue;
88
94
  class="input border border-primary-500 rounded flex w-24"
89
95
  value={$pageIndex + 1}
90
96
  max={$pageCount}
97
+ aria-label="Current page"
91
98
  min={1}
92
99
  on:change={handleChange}
93
100
  />
94
101
  <button
95
102
  class="btn btn-sm variant-filled-primary"
96
103
  id="{id}-next"
104
+ aria-label="Go to next page"
97
105
  on:click|preventDefault={goToNextPage}
98
106
  disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
99
107
  >
100
108
  <button
101
109
  class="btn btn-sm variant-filled-primary"
110
+ aria-label="Go to last page"
102
111
  id="{id}-last"
103
112
  on:click|preventDefault={goToLastPage}
104
113
  disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
@@ -107,11 +116,7 @@ $: $pageSize = pageSizeDropdownValue;
107
116
  <div class="flex justify-end items-center">
108
117
  <span class="text-sm text-gray-500">
109
118
  {#if $pageCount > 0}
110
- {#if $pageCount == 1}
111
- 1 page
112
- {:else}
113
- {$pageCount} pages
114
- {/if}
119
+ Page {$pageIndex + 1} of {$pageCount}
115
120
  {:else}
116
121
  No pages
117
122
  {/if}
@@ -59,6 +59,7 @@ updateTable();
59
59
  <select
60
60
  name="pageSize"
61
61
  id="{id}-pageSize"
62
+ aria-label="Open menu to select number of items per page"
62
63
  class="select variant-filled-primary w-min font-bold"
63
64
  bind:value={$pageSize}
64
65
  >
@@ -70,21 +71,26 @@ updateTable();
70
71
  <div class="flex justify-center gap-1">
71
72
  <button
72
73
  class="btn btn-sm variant-filled-primary"
74
+ title="Go to first page"
73
75
  on:click|preventDefault={() => goTo('first')}
74
76
  disabled={goToFirstPageDisabled}
77
+ aria-label="Go to first page"
75
78
  id="{id}-first"
76
79
  >
77
80
  <Fa icon={faAnglesLeft} /></button
78
81
  >
79
82
  <button
80
83
  class="btn btn-sm variant-filled-primary"
84
+ title="Go to previous page"
81
85
  id="{id}-previous"
86
+ aria-label="Go to previous page"
82
87
  on:click|preventDefault={() => goTo('previous')}
83
88
  disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
84
89
  >
85
90
  <input
86
91
  type="number"
87
92
  class="input border border-primary-500 rounded flex w-24"
93
+ aria-label="Current page"
88
94
  value={$pageIndex + 1}
89
95
  max={pageCount}
90
96
  min={1}
@@ -94,11 +100,13 @@ updateTable();
94
100
  class="btn btn-sm variant-filled-primary"
95
101
  id="{id}-next"
96
102
  on:click|preventDefault={() => goTo('next')}
103
+ aria-label="Go to next page"
97
104
  disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
98
105
  >
99
106
  <button
100
107
  class="btn btn-sm variant-filled-primary"
101
108
  id="{id}-last"
109
+ aria-label="Go to last page"
102
110
  on:click|preventDefault={() => goTo('last')}
103
111
  disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
104
112
  >
@@ -11,7 +11,7 @@ export let feedback;
11
11
  <InputContainer {label} {feedback} {required}>
12
12
  <input
13
13
  {id}
14
- class="input variant-form-material"
14
+ class="input variant-form-material bg-zinc-50 dark:bg-zinc-50"
15
15
  type="checkbox"
16
16
  class:input-success={valid}
17
17
  class:input-error={invalid}
@@ -12,13 +12,14 @@ let feedback;
12
12
 
13
13
  <InputContainer {id} label={title} {feedback} {required} {help}>
14
14
  {#each source as item}
15
- <label class="flex items-center space-x-2" for={key}>
15
+ <label class="flex items-center space-x-2" for={item.key}>
16
16
  <input
17
17
  class="checkbox"
18
18
  type="checkbox"
19
19
  bind:group={target}
20
20
  checked={item.key}
21
21
  value={item.key}
22
+ id={item.key}
22
23
  />
23
24
  <p>{item.value}</p>
24
25
  </label>
@@ -10,8 +10,8 @@ let feedback;
10
10
 
11
11
  <InputContainer label={title} {feedback} {required}>
12
12
  {#each source as item}
13
- <label class="flex items-center space-x-2" for={key}>
14
- <input class="checkbox" type="checkbox" bind:group={target} value={item} />
13
+ <label class="flex items-center space-x-2" for={item}>
14
+ <input class="checkbox" type="checkbox" bind:group={target} value={item} id={item}/>
15
15
  <p>{item}</p>
16
16
  </label>
17
17
  {/each}
@@ -13,7 +13,7 @@ export let disabled = false;
13
13
  <InputContainer {id} {label} {feedback} {required} {help}>
14
14
  <input
15
15
  {id}
16
- class="input variant-form-material"
16
+ class="input variant-form-material bg-zinc-50 dark:bg-zinc-700 placeholder:text-gray-400"
17
17
  type="date"
18
18
  class:input-success={valid}
19
19
  class:input-error={invalid}
@@ -39,7 +39,7 @@
39
39
  <InputContainer {id} label={title} {feedback} {required} {help}>
40
40
  <select
41
41
  {id}
42
- class="select variant-form-material"
42
+ class="select variant-form-material dark:bg-zinc-700 bg-zinc-50 placeholder:text-gray-400"
43
43
  class:input-success={valid}
44
44
  class:input-error={invalid}
45
45
  bind:value={selected}
@@ -13,7 +13,13 @@ function onMouseOut() {
13
13
  }
14
14
  </script>
15
15
 
16
- <div id="{id}-container" on:mouseover={onMouseOver} on:focus={onMouseOver} on:mouseout={onMouseOut} on:blur={onMouseOut}>
16
+ <div
17
+ id="{id}-container"
18
+ on:mouseover={onMouseOver}
19
+ on:focus={onMouseOver}
20
+ on:mouseout={onMouseOut}
21
+ on:blur={onMouseOut}
22
+ >
17
23
  <label class="label">
18
24
  <span
19
25
  >{label}
@@ -4,8 +4,6 @@
4
4
  import Select from 'svelte-select';
5
5
  import { onMount } from 'svelte';
6
6
 
7
-
8
-
9
7
  export let source;
10
8
  export let target;
11
9
  export let id;
@@ -35,16 +33,14 @@
35
33
  $: groupBy;
36
34
 
37
35
  function updateTarget(selection) {
36
+ console.log('updateTarget', target, selection, isMulti);
37
+ if (selection == undefined) {
38
+ console.log('no update');
38
39
 
39
- console.log("updateTarget", target, selection, isMulti);
40
- if(selection == undefined)
41
- {
42
- console.log("no update");
43
-
44
- return;
40
+ return;
45
41
  }
46
42
 
47
- console.log("update");
43
+ console.log('update');
48
44
  //different cases
49
45
  //a) source is complex model is simple return array
50
46
  if (complexSource && !complexTarget && isLoaded && isMulti) {
@@ -75,8 +71,8 @@
75
71
  }
76
72
 
77
73
  if (!complexSource && !complexTarget && isLoaded && !isMulti) {
78
- console.log("🚀 ~ updateTarget ~ selection:", selection)
79
- if(selection){
74
+ console.log('🚀 ~ updateTarget ~ selection:', selection);
75
+ if (selection) {
80
76
  target = selection.value;
81
77
  }
82
78
  }
@@ -167,118 +163,116 @@
167
163
  //console.log(t,value)
168
164
  }
169
165
 
170
- function filterItemStartFn(label, filterText, option) {
171
- // console.log(label, filterText, option);
172
- let itemFilter = label.toLowerCase().startsWith(filterText.toLowerCase());
166
+ function filterItemStartFn(label, filterText, option) {
167
+ // console.log(label, filterText, option);
168
+ let itemFilter = label.toLowerCase().startsWith(filterText.toLowerCase());
173
169
 
174
- return itemFilter;
175
- }
170
+ return itemFilter;
171
+ }
176
172
 
177
- function filterItemExactFn(label, filterText, option) {
178
- // console.log(label, filterText, option);
179
- let itemFilter = label.toLowerCase() == filterText.toLowerCase();
173
+ function filterItemExactFn(label, filterText, option) {
174
+ // console.log(label, filterText, option);
175
+ let itemFilter = label.toLowerCase() == filterText.toLowerCase();
180
176
 
181
- return itemFilter;
182
- }
177
+ return itemFilter;
178
+ }
183
179
 
184
- function filterItemIncludesFn(label, filterText, option) {
185
- // console.log(label, filterText, option);
186
- let itemFilter = label.toLowerCase().includes(filterText.toLowerCase());
180
+ function filterItemIncludesFn(label, filterText, option) {
181
+ // console.log(label, filterText, option);
182
+ let itemFilter = label.toLowerCase().includes(filterText.toLowerCase());
187
183
 
188
- return itemFilter;
189
- }
184
+ return itemFilter;
185
+ }
190
186
 
191
- function filterFn({
192
- loadOptions,
193
- filterText,
194
- items,
195
- multiple,
196
- value,
197
- itemId,
198
- groupBy,
199
- filterSelectedItems,
200
- itemFilter,
201
- convertStringItemsToObjects,
202
- filterGroupedItems,
203
- label,
204
- }) {
205
- if (items && loadOptions) return items;
206
- if (!items) return [];
187
+ function filterFn({
188
+ loadOptions,
189
+ filterText,
190
+ items,
191
+ multiple,
192
+ value,
193
+ itemId,
194
+ groupBy,
195
+ filterSelectedItems,
196
+ itemFilter,
197
+ convertStringItemsToObjects,
198
+ filterGroupedItems,
199
+ label
200
+ }) {
201
+ if (items && loadOptions) return items;
202
+ if (!items) return [];
203
+
204
+ if (items && items.length > 0 && typeof items[0] !== 'object') {
205
+ items = convertStringItemsToObjects(items);
206
+ }
207
207
 
208
- if (items && items.length > 0 && typeof items[0] !== 'object') {
209
- items = convertStringItemsToObjects(items);
210
- }
208
+ let filterResults = filterListFn(
209
+ items,
210
+ label,
211
+ filterText,
212
+ multiple,
213
+ value,
214
+ filterSelectedItems,
215
+ itemId
216
+ );
217
+
218
+ if (groupBy) {
219
+ filterResults = filterGroupedItems(filterResults, label, filterText);
220
+ }
211
221
 
212
- let filterResults = filterListFn(items, label, filterText,multiple,value,filterSelectedItems, itemId)
222
+ return filterResults;
223
+ }
213
224
 
214
- if (groupBy) {
215
- filterResults = filterGroupedItems(filterResults, label, filterText);
216
- }
225
+ // filter checks 3 types, exact, starts, includes
226
+ function filterListFn(items, label, filterText, multiple, value, filterSelectedItems, itemId) {
227
+ if (!items) return [];
217
228
 
218
- return filterResults;
219
- }
229
+ let exact = items.filter((item) => {
230
+ let matchesFilter = filterItemExactFn(item[label], filterText, item);
231
+ if (matchesFilter && multiple && value?.length) {
232
+ matchesFilter = !value.some((x) => {
233
+ return filterSelectedItems ? x[itemId] === item[itemId] : false;
234
+ });
235
+ }
220
236
 
221
- // filter checks 3 types, exact, starts, includes
222
- function filterListFn(items ,label , filterText, multiple, value, filterSelectedItems, itemId)
223
- {
237
+ return matchesFilter;
238
+ });
224
239
 
225
- if (!items) return [];
240
+ let starts = items.filter((item) => {
241
+ let matchesFilter = filterItemStartFn(item[label], filterText, item);
242
+ if (matchesFilter && multiple && value?.length) {
243
+ matchesFilter = !value.some((x) => {
244
+ return filterSelectedItems ? x[itemId] === item[itemId] : false;
245
+ });
246
+ }
226
247
 
227
- let exact = items.filter((item) => {
228
- let matchesFilter = filterItemExactFn(item[label], filterText, item);
229
- if (matchesFilter && multiple && value?.length) {
230
- matchesFilter = !value.some((x) => {
231
- return filterSelectedItems ? x[itemId] === item[itemId] : false;
232
- });
233
- }
248
+ return matchesFilter;
249
+ });
234
250
 
235
- return matchesFilter;
236
- });
251
+ let includes = items.filter((item) => {
252
+ let matchesFilter = filterItemIncludesFn(item[label], filterText, item);
253
+ if (matchesFilter && multiple && value?.length) {
254
+ matchesFilter = !value.some((x) => {
255
+ return filterSelectedItems ? x[itemId] === item[itemId] : false;
256
+ });
257
+ }
237
258
 
238
- let starts = items.filter((item) => {
239
- let matchesFilter = filterItemStartFn(item[label], filterText, item);
240
- if (matchesFilter && multiple && value?.length) {
241
- matchesFilter = !value.some((x) => {
242
- return filterSelectedItems ? x[itemId] === item[itemId] : false;
243
- });
244
- }
245
-
246
- return matchesFilter;
247
-
248
- });
249
-
250
- let includes = items.filter((item) => {
251
- let matchesFilter = filterItemIncludesFn(item[label], filterText, item);
252
- if (matchesFilter && multiple && value?.length) {
253
- matchesFilter = !value.some((x) => {
254
- return filterSelectedItems ? x[itemId] === item[itemId] : false;
255
- });
256
- }
257
-
258
- return matchesFilter;
259
- });
260
-
261
-
262
- let result = [...exact,...starts,...includes];
263
- return [...new Set(result)];
264
- }
265
-
266
- function clearFn(e)
267
- {
268
- console.log("clear", target, e);
269
- if(isMulti)
270
- {
271
- target = [];
272
- }
273
- else
274
- {
275
- target="";
276
- }
259
+ return matchesFilter;
260
+ });
277
261
 
278
- console.log("after clear", target);
279
- }
262
+ let result = [...exact, ...starts, ...includes];
263
+ return [...new Set(result)];
264
+ }
280
265
 
266
+ function clearFn(e) {
267
+ console.log('clear', target, e);
268
+ if (isMulti) {
269
+ target = [];
270
+ } else {
271
+ target = '';
272
+ }
281
273
 
274
+ console.log('after clear', target);
275
+ }
282
276
  </script>
283
277
 
284
278
  <InputContainer {id} label={title} {feedback} {required} {help}>
@@ -295,7 +289,7 @@ function clearFn(e)
295
289
  {loading}
296
290
  {clearable}
297
291
  {disabled}
298
- filter={filterFn}
292
+ filter={filterFn}
299
293
  on:change
300
294
  on:input
301
295
  on:focus
@@ -15,7 +15,7 @@ export let disabled = false;
15
15
  <InputContainer {id} {label} {feedback} {required} {help}>
16
16
  <input
17
17
  {id}
18
- class="input variant-form-material"
18
+ class="input variant-form-material dark:bg-zinc-700 bg-zinc-50 placeholder:text-gray-400"
19
19
  type="number"
20
20
  class:input-success={valid}
21
21
  class:input-error={invalid}
@@ -14,7 +14,7 @@ export let disabled = false;
14
14
  <InputContainer {id} {label} {feedback} {required} {help}>
15
15
  <textarea
16
16
  {id}
17
- class="textarea variant-form-material"
17
+ class="textarea variant-form-material dark:bg-zinc-700 bg-zinc-50 placeholder:text-gray-400"
18
18
  class:input-success={valid}
19
19
  class:input-error={invalid}
20
20
  bind:value
@@ -14,7 +14,7 @@ export let disabled = false;
14
14
  <InputContainer {id} {label} {feedback} {required} {help}>
15
15
  <input
16
16
  {id}
17
- class="input variant-form-material"
17
+ class="input variant-form-material dark:bg-zinc-700 bg-zinc-50 placeholder:text-gray-400"
18
18
  type="text"
19
19
  class:input-success={valid}
20
20
  class:input-error={invalid}
@@ -27,7 +27,7 @@ $: show = true;
27
27
  <slot name="actions" />
28
28
 
29
29
  {#if deleteBtn}
30
- <button class="btn hover:text-primary-100" on:click={() => (show = false)}>
30
+ <button class="btn hover:text-primary-100" title="Close alert" on:click={() => (show = false)}>
31
31
  <Fa icon={faXmark} />
32
32
  </button>
33
33
  {/if}
@@ -26,5 +26,5 @@
26
26
  <svelte:window on:scroll={handleOnScroll} />
27
27
 
28
28
  <div class="w-full items-center">
29
- <button class="btn ring back-to-top" on:click={goTop} class:hidden>Back to top</button>
29
+ <button class="btn ring back-to-top" title="Back to top" on:click={goTop} class:hidden>Back to top</button>
30
30
  </div>
@@ -29,7 +29,7 @@ const noteSettings = {
29
29
  {/if}
30
30
 
31
31
  {#each links as link}
32
- <span class="chip variant-soft hover:variant-filled" on:click={() => goTo(link.url, false)} on:keypress={() => goTo(link.url, false)}>
32
+ <span class="chip variant-soft hover:variant-filled" role="button" tabindex="0" on:click={() => goTo(link.url, false)} on:keypress={() => goTo(link.url, false)}>
33
33
  <span>{link.label}</span>
34
34
  </span>
35
35
  {/each}
@@ -17,6 +17,7 @@
17
17
  {#if showGotoTop}
18
18
  <button
19
19
  id="gotToTop"
20
+ title="Go to top"
20
21
  class="chip variant-filled-warning fixed bottom-5 right-20 shadow-md"
21
22
  on:click={gotoTop}
22
23
  ><Fa icon={faAngleUp}/></button >
@@ -29,6 +29,7 @@ async function resetItemId() {
29
29
  {#if active}
30
30
  <button
31
31
  id="helpButton"
32
+ title="Open help window"
32
33
  class="chip variant-filled-warning fixed bottom-5 right-10 shadow-md"
33
34
  use:popup={helpClick}><Fa icon={faQuestion} /></button
34
35
  >
@@ -41,27 +41,23 @@ function scrollToTop() {
41
41
  </script>
42
42
 
43
43
  <div class="app" bind:this={app}>
44
- <AppShell>
44
+ <div class="w-full h-full flex flex-col overflow-hidden">
45
45
  <!--header-->
46
- <svelte:fragment slot="header">
47
- <AppBar padding="0" spacing="space-y-0" background="white">
48
- <svelte:fragment slot="headline">
49
- <Header />
50
- {#if true}
51
- <Menu />
52
- {/if}
46
+ <header class="flex-none z-10">
47
+ <Header />
48
+ {#if true}
49
+ <Menu />
50
+ {/if}
53
51
 
54
- <div class="grid grid-cols-2">
55
- <Breadcrumb bind:title />
56
- <Docs {links} {note} />
57
- </div>
58
- </svelte:fragment>
59
- </AppBar>
60
- </svelte:fragment>
52
+ <div class="grid grid-cols-2">
53
+ <Breadcrumb bind:title />
54
+ <Docs {links} {note} />
55
+ </div>
56
+ </header>
61
57
 
62
- <svelte:fragment slot="footer">
58
+ <footer >
63
59
  <Footer />
64
- </svelte:fragment>
60
+ </footer>
65
61
 
66
62
  <slot name="description" />
67
63
 
@@ -98,6 +94,5 @@ function scrollToTop() {
98
94
  <GoToTop/>
99
95
  <HelpPopUp active={help} />
100
96
  <Notification />
101
- </AppShell>
102
97
  </div>
103
-
98
+ </div>
@@ -15,12 +15,14 @@ function isNewModule(module) {
15
15
  return true;
16
16
  }
17
17
  }
18
- function clickFn(item) {
18
+ function clickFn(item, newWindow = false) {
19
19
  if (item.Title == "Log Off") {
20
20
  logOffFn();
21
21
  return;
22
- } else {
22
+ } else if (newWindow == false) {
23
23
  goTo(item.Url);
24
+ } else {
25
+ window.open(item.Url);
24
26
  }
25
27
  }
26
28
  async function logOffFn() {
@@ -49,8 +51,8 @@ async function logOffFn() {
49
51
 
50
52
  <ListBox class="sm:bg-white sm:border overflow-y-auto max-h-[500px]">
51
53
  {#each items as item}
52
- {#if isNewModule(item.Module)}<hr class="text-surface-800" />{/if}
53
-
54
+ {#if isNewModule(item.Module)}<hr class="text-surface-800"/>{/if}
55
+ <span on:auxclick={() => clickFn(item, true)}>
54
56
  <ListBoxItem
55
57
  class="text-md sm:text-sm text-surface-800 py-1 hover:text-secondary-500 bg-transparent hover:bg-surface-200"
56
58
  bind:group={item.Title}
@@ -60,6 +62,6 @@ async function logOffFn() {
60
62
  >
61
63
  {item.Title}
62
64
  </ListBoxItem>
63
-
65
+ </span>
64
66
  {/each}
65
67
  </ListBox>