@bexis2/bexis2-core-ui 0.1.13 → 0.2.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.
- package/README.md +11 -5
- package/dist/components/file/FileUploader.svelte.d.ts +2 -2
- package/dist/components/form/CheckboxKvPList.svelte +3 -1
- package/dist/components/form/CheckboxKvPList.svelte.d.ts +2 -0
- package/dist/components/form/DateInput.svelte +2 -1
- package/dist/components/form/DateInput.svelte.d.ts +1 -0
- package/dist/components/form/DropdownKvP.svelte +2 -1
- package/dist/components/form/DropdownKvP.svelte.d.ts +2 -0
- package/dist/components/form/InputContainer.svelte +16 -2
- package/dist/components/form/InputContainer.svelte.d.ts +2 -0
- package/dist/components/form/MultiSelect.svelte +5 -3
- package/dist/components/form/MultiSelect.svelte.d.ts +2 -0
- package/dist/components/form/NumberInput.svelte +3 -1
- package/dist/components/form/NumberInput.svelte.d.ts +1 -0
- package/dist/components/form/TextArea.svelte +14 -13
- package/dist/components/form/TextArea.svelte.d.ts +1 -0
- package/dist/components/form/TextInput.svelte +4 -1
- package/dist/components/form/TextInput.svelte.d.ts +1 -0
- package/dist/components/page/Help.svelte +38 -0
- package/dist/components/page/Help.svelte.d.ts +23 -0
- package/dist/components/page/Page.svelte +43 -9
- package/dist/components/page/Page.svelte.d.ts +3 -2
- package/dist/components/page/Spinner.svelte +2 -2
- package/dist/components/page/Spinner.svelte.d.ts +2 -2
- package/dist/components/page/breadcrumb/Breadcrumb.svelte +32 -0
- package/dist/components/page/breadcrumb/Breadcrumb.svelte.d.ts +16 -0
- package/dist/components/page/menu/Menu.svelte +14 -12
- package/dist/components/page/menu/MenuBar.svelte +0 -1
- package/dist/components/page/menu/MenuItem.svelte +9 -14
- package/dist/components/page/menu/MenuItem.svelte.d.ts +0 -1
- package/dist/components/page/menu/MenuSublist.svelte +35 -0
- package/dist/components/page/menu/MenuSublist.svelte.d.ts +18 -0
- package/dist/components/page/menu/SettingsBar.svelte +14 -32
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/models/Enums.d.ts +1 -1
- package/dist/models/Enums.js +6 -6
- package/dist/models/Models.d.ts +20 -10
- package/dist/models/Models.js +1 -0
- package/dist/models/Page.js +16 -0
- package/dist/services/Api.js +1 -1
- package/dist/services/BaseCaller.d.ts +1 -0
- package/dist/services/BaseCaller.js +12 -0
- package/dist/stores/pageStores.d.ts +25 -0
- package/dist/stores/pageStores.js +112 -0
- package/package.json +1 -1
- package/src/lib/components/file/FileUploader.svelte +4 -4
- package/src/lib/components/form/CheckboxKvPList.svelte +3 -1
- package/src/lib/components/form/DateInput.svelte +3 -1
- package/src/lib/components/form/DropdownKvP.svelte +2 -1
- package/src/lib/components/form/InputContainer.svelte +26 -1
- package/src/lib/components/form/MultiSelect.svelte +5 -3
- package/src/lib/components/form/NumberInput.svelte +5 -1
- package/src/lib/components/form/TextArea.svelte +27 -25
- package/src/lib/components/form/TextInput.svelte +4 -2
- package/src/lib/components/page/Help.svelte +43 -0
- package/src/lib/components/page/Page.svelte +58 -10
- package/src/lib/components/page/Spinner.svelte +2 -2
- package/src/lib/components/page/breadcrumb/Breadcrumb.svelte +43 -0
- package/src/lib/components/page/menu/Menu.svelte +18 -16
- package/src/lib/components/page/menu/MenuBar.svelte +1 -1
- package/src/lib/components/page/menu/MenuItem.svelte +15 -15
- package/src/lib/components/page/menu/MenuSublist.svelte +48 -0
- package/src/lib/components/page/menu/SettingsBar.svelte +39 -60
- package/src/lib/index.ts +8 -8
- package/src/lib/models/Enums.ts +1 -1
- package/src/lib/models/Models.ts +23 -10
- package/src/lib/models/Page.ts +41 -0
- package/src/lib/services/Api.ts +1 -1
- package/src/lib/services/BaseCaller.js +12 -0
- package/src/lib/stores/pageStores.ts +135 -0
- package/dist/components/page/menu/menu.d.ts +0 -21
- package/dist/components/page/menu/menu.js +0 -1
- package/src/lib/components/page/menu/menu.ts +0 -23
- /package/dist/stores/{apistore.d.ts → apiStores.d.ts} +0 -0
- /package/dist/stores/{apistore.js → apiStores.js} +0 -0
- /package/src/lib/stores/{apistore.ts → apiStores.ts} +0 -0
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import InputContainer from './InputContainer.svelte';
|
|
3
|
-
|
|
4
|
-
export let id: string = '';
|
|
5
|
-
export let label: string = '';
|
|
6
|
-
export let value: string = '';
|
|
7
|
-
|
|
8
|
-
export let valid: boolean = false;
|
|
9
|
-
export let invalid: boolean = false;
|
|
10
|
-
export let required: boolean = false;
|
|
11
|
-
export let feedback: string[] = [''];
|
|
12
|
-
export let placeholder: string = "";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import InputContainer from './InputContainer.svelte';
|
|
3
|
+
|
|
4
|
+
export let id: string = '';
|
|
5
|
+
export let label: string = '';
|
|
6
|
+
export let value: string = '';
|
|
7
|
+
|
|
8
|
+
export let valid: boolean = false;
|
|
9
|
+
export let invalid: boolean = false;
|
|
10
|
+
export let required: boolean = false;
|
|
11
|
+
export let feedback: string[] = [''];
|
|
12
|
+
export let placeholder: string = "";
|
|
13
|
+
export let help:boolean=false;
|
|
14
|
+
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<InputContainer {id} {label} {feedback} {required} {help}>
|
|
18
|
+
<textarea
|
|
19
|
+
{id}
|
|
20
|
+
class="textarea variant-form-material"
|
|
21
|
+
class:input-success={valid}
|
|
22
|
+
class:input-error={invalid}
|
|
23
|
+
bind:value
|
|
24
|
+
on:input
|
|
25
|
+
{placeholder}
|
|
26
|
+
/>
|
|
27
|
+
</InputContainer>
|
|
@@ -4,16 +4,18 @@
|
|
|
4
4
|
export let id: string = '';
|
|
5
5
|
export let label: string = '';
|
|
6
6
|
export let value: string = '';
|
|
7
|
-
|
|
8
7
|
export let valid: boolean = false;
|
|
9
8
|
export let invalid: boolean = false;
|
|
10
9
|
export let required: boolean = false;
|
|
11
10
|
export let feedback: string[] = [''];
|
|
12
11
|
export let placeholder: string ="";
|
|
12
|
+
export let help:boolean=false;
|
|
13
13
|
|
|
14
14
|
</script>
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<InputContainer {id} {label} {feedback} {required} {help}>
|
|
17
19
|
<input
|
|
18
20
|
{id}
|
|
19
21
|
class="input variant-form-material"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang=ts>
|
|
2
|
+
import { helpStore } from '$store/pageStores'
|
|
3
|
+
import type { helpItemType, helpStoreType } from "$models/Models";
|
|
4
|
+
|
|
5
|
+
let Value:helpStoreType;
|
|
6
|
+
$:helpStore.subscribe(value => {
|
|
7
|
+
Value = value;
|
|
8
|
+
});
|
|
9
|
+
let helpItem:helpItemType;
|
|
10
|
+
$:helpItem = getHelpItem(Value);
|
|
11
|
+
|
|
12
|
+
function getHelpItem(value:helpStoreType):helpItemType
|
|
13
|
+
{
|
|
14
|
+
if(value != undefined && value.helpItems != undefined && value.itemId != undefined)
|
|
15
|
+
{
|
|
16
|
+
return (value.itemId == "") ? {id:undefined,name:'',description:''}:value.helpItems.find(h => h.id === value.itemId)!;
|
|
17
|
+
}
|
|
18
|
+
return {id:undefined,name:'',description:''};
|
|
19
|
+
}
|
|
20
|
+
window.origin
|
|
21
|
+
|
|
22
|
+
</script>
|
|
23
|
+
{#if helpItem && helpItem.id}
|
|
24
|
+
<div class="p-5 w-96 space-y-4" id={helpItem.id}>
|
|
25
|
+
<h3 class="h3">{ helpItem.name }</h3>
|
|
26
|
+
<p>{@html helpItem.description }</p>
|
|
27
|
+
{#if helpItem.link}
|
|
28
|
+
<p><a href="{helpItem.link}">... read more</a></p>
|
|
29
|
+
{/if}
|
|
30
|
+
</div>
|
|
31
|
+
{:else}
|
|
32
|
+
<div class="p-5 w-96 space-y-4">
|
|
33
|
+
<h3 class="h3">Help</h3>
|
|
34
|
+
<div class="space-y-4">
|
|
35
|
+
<div class="grid grid-cols-3 gap-8">
|
|
36
|
+
<div class="placeholder animate-pulse" />
|
|
37
|
+
<div class="placeholder animate-pulse" />
|
|
38
|
+
<div class="placeholder animate-pulse" />
|
|
39
|
+
</div>
|
|
40
|
+
<div class="placeholder w-28 animate-pulse" />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
{/if}
|
|
@@ -1,29 +1,65 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import {onMount} from 'svelte'
|
|
2
3
|
|
|
3
|
-
import type {
|
|
4
|
+
import type { linkType } from "$lib/models/Models";
|
|
4
5
|
|
|
6
|
+
// ui components
|
|
5
7
|
import Menu from './menu/Menu.svelte'
|
|
8
|
+
import Help from "./Help.svelte";
|
|
9
|
+
import Breadcrumb from './breadcrumb/Breadcrumb.svelte';
|
|
10
|
+
|
|
11
|
+
//popup
|
|
12
|
+
import { popup } from '@skeletonlabs/skeleton';
|
|
13
|
+
import type { PopupSettings } from '@skeletonlabs/skeleton';
|
|
14
|
+
import { computePosition, autoUpdate, offset, shift, flip, arrow } from '@floating-ui/dom';
|
|
15
|
+
import { storePopup } from '@skeletonlabs/skeleton';
|
|
16
|
+
import { breadcrumbStore } from '$store/pageStores';
|
|
17
|
+
|
|
18
|
+
storePopup.set({ computePosition, autoUpdate, offset, shift, flip, arrow });
|
|
19
|
+
|
|
20
|
+
import { AppShell } from '@skeletonlabs/skeleton';
|
|
21
|
+
|
|
22
|
+
// stores
|
|
23
|
+
import { helpStore } from '$store/pageStores';
|
|
6
24
|
|
|
7
25
|
export let title = "";
|
|
8
26
|
export let note = "";
|
|
9
|
-
export let links:
|
|
27
|
+
export let links:linkType[]=[];
|
|
10
28
|
|
|
11
29
|
// active or hide menu
|
|
12
30
|
export let menu:boolean = true;
|
|
13
31
|
export let footer:boolean = true;
|
|
32
|
+
export let help:boolean = false;
|
|
33
|
+
|
|
34
|
+
onMount(async () => {
|
|
35
|
+
console.log("on mount page ")
|
|
36
|
+
breadcrumbStore.clean();
|
|
37
|
+
breadcrumbStore.addItem({label:title,link:window.location.pathname})
|
|
14
38
|
|
|
15
|
-
|
|
39
|
+
// clean help when is not active
|
|
40
|
+
//if(!help){ helpStore.clear() }
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
//popup
|
|
44
|
+
const popupClick: PopupSettings = {
|
|
45
|
+
event: 'click',
|
|
46
|
+
target: 'popupClick',
|
|
47
|
+
placement: 'top'
|
|
48
|
+
};
|
|
16
49
|
|
|
17
|
-
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
{#if true}
|
|
18
53
|
<Menu/>
|
|
19
54
|
{/if}
|
|
55
|
+
<Breadcrumb {title}/>
|
|
20
56
|
|
|
21
57
|
<div class="px-5 grid gap-5 content-center" >
|
|
22
58
|
|
|
23
|
-
<h3 class="h3">{title}</h3>
|
|
59
|
+
<!-- <h3 class="h3">{title}</h3>
|
|
24
60
|
{#if note}
|
|
25
61
|
<blockquote class="blockquote">{note}</blockquote>
|
|
26
|
-
{/if}
|
|
62
|
+
{/if} -->
|
|
27
63
|
|
|
28
64
|
<slot name="description" />
|
|
29
65
|
|
|
@@ -46,16 +82,28 @@
|
|
|
46
82
|
{/if}
|
|
47
83
|
<slot/>
|
|
48
84
|
</div>
|
|
49
|
-
{#if $$slots.right}
|
|
50
|
-
<div class="w-fixed w-full max-w-min flex-shrink flex-grow-0 px-2">
|
|
51
|
-
|
|
85
|
+
{#if $$slots.right || help}
|
|
86
|
+
<div class="w-fixed w-full max-w-min flex-shrink flex-grow-0 px-2" class:w-96:={help}>
|
|
87
|
+
<!--if help is active show Help-->
|
|
88
|
+
<!--if help is active and slot is set -->
|
|
89
|
+
<!-- help is deactiveated -->
|
|
90
|
+
<slot name="right"/>
|
|
91
|
+
|
|
52
92
|
</div>
|
|
53
93
|
{/if}
|
|
54
94
|
|
|
95
|
+
|
|
55
96
|
</div>
|
|
56
97
|
</div>
|
|
57
98
|
|
|
58
|
-
|
|
99
|
+
{#if help}
|
|
100
|
+
<button class="btn btn-sm variant-filled-warning fixed bottom-5 right-10" use:popup={popupClick}>?</button>
|
|
101
|
+
|
|
102
|
+
<div class="card p-4 variant-filled-primary" data-popup="popupClick">
|
|
103
|
+
<Help />
|
|
104
|
+
<div class="arrow variant-filled-primary" />
|
|
105
|
+
</div>
|
|
106
|
+
{/if}
|
|
59
107
|
|
|
60
108
|
|
|
61
109
|
{#if menu}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { positionType } from "$lib/models/Enums";
|
|
3
3
|
|
|
4
4
|
export let textCss = "text-secundary-500"
|
|
5
5
|
export let label = "";
|
|
6
|
-
export let position:
|
|
6
|
+
export let position:positionType = positionType.start;
|
|
7
7
|
|
|
8
8
|
</script>
|
|
9
9
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import { breadcrumbStore } from '$store/pageStores';
|
|
4
|
+
import type{ breadcrumbItemType } from '$models/Page';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export let title;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
let list:breadcrumbItemType[] = [];
|
|
11
|
+
$:list;
|
|
12
|
+
|
|
13
|
+
$:breadcrumbStore.subscribe(value => {
|
|
14
|
+
|
|
15
|
+
list = value?.items;
|
|
16
|
+
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<div class="px-5 py-2">
|
|
25
|
+
<ol class="breadcrumb -p50">
|
|
26
|
+
|
|
27
|
+
<!--default home-->
|
|
28
|
+
<li class="crumb"><a class="anchor" href={"/"}>Home</a></li>
|
|
29
|
+
<li class="crumb-separator" aria-hidden>›</li>
|
|
30
|
+
|
|
31
|
+
{#each list as crumb, i}
|
|
32
|
+
<!-- If crumb index is less than the breadcrumb length minus 1 -->
|
|
33
|
+
{#if i < list.length - 1}
|
|
34
|
+
<li class="crumb"><a class="anchor" href={crumb.link}>{crumb.label}</a></li>
|
|
35
|
+
<li class="crumb-separator" aria-hidden>›</li>
|
|
36
|
+
{:else}
|
|
37
|
+
<li class="crumb">{crumb.label}</li>
|
|
38
|
+
{/if}
|
|
39
|
+
{/each}
|
|
40
|
+
</ol>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
//
|
|
3
|
-
import Fa from 'svelte-fa/src/fa.svelte'
|
|
4
|
-
import { faCog } from '@fortawesome/free-solid-svg-icons'
|
|
5
2
|
|
|
6
3
|
import { onMount } from 'svelte';
|
|
7
|
-
|
|
4
|
+
import { get } from 'svelte/store';
|
|
8
5
|
import { getMenuItems} from './MenuDataCaller';
|
|
6
|
+
import { menuStore } from '$store/pageStores';
|
|
9
7
|
|
|
10
|
-
import type {
|
|
8
|
+
import type { MenuModel } from "$models/Page";
|
|
11
9
|
|
|
12
10
|
import MenuBar from './MenuBar.svelte';
|
|
13
11
|
import SettingsBar from './SettingsBar.svelte';
|
|
14
12
|
|
|
15
|
-
let menu:
|
|
13
|
+
let menu:MenuModel;
|
|
16
14
|
|
|
15
|
+
|
|
17
16
|
onMount(async () => {
|
|
18
17
|
|
|
19
|
-
menu =
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
menu = get(menuStore);
|
|
19
|
+
if(menu === undefined)
|
|
20
|
+
{
|
|
21
|
+
menu = await getMenuItems();
|
|
22
|
+
menuStore.set(menu);
|
|
23
|
+
//console.log("menu loaded",menu);
|
|
24
|
+
}
|
|
22
25
|
})
|
|
23
26
|
|
|
24
27
|
|
|
@@ -28,7 +31,8 @@
|
|
|
28
31
|
|
|
29
32
|
{#if menu}
|
|
30
33
|
|
|
31
|
-
<div class="flex flex-row md:flex px-3 py-2">
|
|
34
|
+
<div class="flex flex-row md:flex px-3 py-2 bg-tertiary-50 text-surface-800 z-50 shadow-md">
|
|
35
|
+
|
|
32
36
|
<div class="basis-8">
|
|
33
37
|
{#if menu.Logo}
|
|
34
38
|
<img src='data:{menu.Logo.Mime};charset=utf-8;base64, {menu.Logo.Data}' alt='{menu.Logo.Name}' style='height:40px;' />
|
|
@@ -37,16 +41,14 @@
|
|
|
37
41
|
|
|
38
42
|
|
|
39
43
|
<div class="flex items-center md:space-x-5 px-3 text-lg justify-start">
|
|
40
|
-
|
|
41
44
|
<MenuBar menuBar={menu.MenuBar} />
|
|
42
45
|
<MenuBar menuBar={menu.Extended} />
|
|
43
46
|
</div>
|
|
44
47
|
<div class="flex-auto w-64 flex items-left md:space-x-3 justify-end">
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
</div>
|
|
48
|
+
<MenuBar menuBar={menu.AccountBar} />
|
|
49
|
+
<MenuBar menuBar={menu.LaunchBar} />
|
|
50
|
+
<SettingsBar menuBar={menu.Settings} />
|
|
51
|
+
</div>
|
|
50
52
|
|
|
51
53
|
</div>
|
|
52
54
|
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { popup } from '@skeletonlabs/skeleton';
|
|
3
|
-
import { ListBox, ListBoxItem } from '@skeletonlabs/skeleton';
|
|
4
3
|
|
|
4
|
+
//uicomponents
|
|
5
|
+
import MenuSublist from './MenuSublist.svelte';
|
|
6
|
+
|
|
7
|
+
//types
|
|
5
8
|
import type { PopupSettings } from '@skeletonlabs/skeleton';
|
|
6
|
-
import type { MenuItem } from "
|
|
9
|
+
import type { MenuItem } from "$models/Page";
|
|
10
|
+
|
|
11
|
+
import { goTo } from '$services/BaseCaller';
|
|
12
|
+
|
|
7
13
|
|
|
8
14
|
export let menubarItem:MenuItem;
|
|
9
15
|
export let comboboxValue;
|
|
10
16
|
|
|
11
|
-
let
|
|
17
|
+
let id = Math.floor(Math.random() * 100).toString();
|
|
12
18
|
|
|
13
19
|
let popupCombobox: PopupSettings = {
|
|
14
20
|
event: 'click',
|
|
15
|
-
target:
|
|
21
|
+
target: id,
|
|
16
22
|
placement: 'bottom',
|
|
17
23
|
// Close the popup when the item is clicked
|
|
18
24
|
closeQuery: '.listbox-item'
|
|
@@ -21,24 +27,18 @@ closeQuery: '.listbox-item'
|
|
|
21
27
|
</script>
|
|
22
28
|
{#if menubarItem.Items.length<1}
|
|
23
29
|
|
|
24
|
-
<button
|
|
30
|
+
<button use:popup={popupCombobox} on:click={()=> goTo(menubarItem.Url)}>
|
|
25
31
|
<span class="capitalize">{comboboxValue ?? menubarItem.Title}</span>
|
|
26
|
-
|
|
27
32
|
</button>
|
|
28
33
|
|
|
29
34
|
{:else}
|
|
30
|
-
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<button class="flex items-center gap-x-1 " use:popup={popupCombobox}>
|
|
31
38
|
<span class="capitalize">{menubarItem.Title}</span>
|
|
32
39
|
<div class="before:content-['▾']"></div>
|
|
33
40
|
</button>
|
|
34
|
-
<div class="card w-48 shadow-xl py-2" data-popup={radomNumber}>
|
|
35
|
-
|
|
36
|
-
<ListBox rounded="rounded-none">
|
|
37
|
-
{#each menubarItem.Items as item}
|
|
38
41
|
|
|
39
|
-
<
|
|
40
|
-
{/each}
|
|
41
|
-
</ListBox>
|
|
42
|
-
</div>
|
|
42
|
+
<MenuSublist {id} items={menubarItem.Items} />
|
|
43
43
|
|
|
44
44
|
{/if}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ListBox, ListBoxItem } from '@skeletonlabs/skeleton';
|
|
3
|
+
import type { MenuItem } from "./menu";
|
|
4
|
+
import { goTo } from '$services/BaseCaller';
|
|
5
|
+
|
|
6
|
+
export let id;
|
|
7
|
+
export let items:MenuItem[];
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
let lastModule = "";
|
|
11
|
+
let first = true;
|
|
12
|
+
|
|
13
|
+
// store last module
|
|
14
|
+
function isNewModule(module)
|
|
15
|
+
{
|
|
16
|
+
if(module === lastModule ){
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
else
|
|
20
|
+
{
|
|
21
|
+
lastModule = module;
|
|
22
|
+
if(first)
|
|
23
|
+
{
|
|
24
|
+
first = false;
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<div class="z-50 w-max" data-popup={id}>
|
|
35
|
+
<ListBox class="bg-white border-solid border border-surface-500">
|
|
36
|
+
{#each items as item}
|
|
37
|
+
{#if isNewModule(item.Module) }<hr class="text-surface-800">{/if}
|
|
38
|
+
<ListBoxItem class="bg-white text-sm text-surface-800 py-1 hover:bg-surface-100 hover:text-secondary-500"
|
|
39
|
+
bind:group={item.Title}
|
|
40
|
+
name="medium"
|
|
41
|
+
value={item.Title}
|
|
42
|
+
on:click={()=> goTo(item.Url)}
|
|
43
|
+
>
|
|
44
|
+
{item.Title}
|
|
45
|
+
</ListBoxItem>
|
|
46
|
+
{/each}
|
|
47
|
+
</ListBox>
|
|
48
|
+
</div>
|
|
@@ -1,61 +1,40 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
</script>
|
|
43
|
-
|
|
44
|
-
{#if menuBar}
|
|
45
|
-
<button class="flex items-center gap-x-1 text-sm font-semibold leading-6 text-gray-900" use:popup={popupCombobox}>
|
|
46
|
-
<span class="capitalize"><Fa icon={faCog} /></span>
|
|
47
|
-
|
|
48
|
-
</button>
|
|
49
|
-
<div class="card w-48 shadow-xl py-2" data-popup="popupCombobox">
|
|
50
|
-
<ListBox rounded="rounded-none bg-white">
|
|
51
|
-
{#each menuBar as menubarItem}
|
|
52
|
-
{#if isNewModule(menubarItem.Module) }<hr class="bg-gray-900">{/if}
|
|
53
|
-
<ListBoxItem class="bg-white text-gray-900 py-1" href="{menubarItem.Url}" bind:group={menubarItem.Title} name="medium" value={menubarItem.Title}><a href={menubarItem.Url}>{menubarItem.Title}</a></ListBoxItem>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{/each}
|
|
58
|
-
</ListBox>
|
|
59
|
-
</div>
|
|
60
|
-
{/if}
|
|
61
|
-
|
|
2
|
+
import { popup } from '@skeletonlabs/skeleton';
|
|
3
|
+
import { ListBox, ListBoxItem } from '@skeletonlabs/skeleton';
|
|
4
|
+
|
|
5
|
+
import type { PopupSettings } from '@skeletonlabs/skeleton';
|
|
6
|
+
import type { MenuItem } from "./menu";
|
|
7
|
+
import Fa from 'svelte-fa/src/fa.svelte'
|
|
8
|
+
import { faCog } from '@fortawesome/free-solid-svg-icons'
|
|
9
|
+
|
|
10
|
+
import { goTo } from '$services/BaseCaller';
|
|
11
|
+
|
|
12
|
+
export let menuBar:MenuItem [];
|
|
13
|
+
//uicomponents
|
|
14
|
+
import MenuSublist from './MenuSublist.svelte';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
let popupCombobox: PopupSettings = {
|
|
20
|
+
event: 'click',
|
|
21
|
+
target: 'settings',
|
|
22
|
+
placement: 'bottom',
|
|
23
|
+
// Close the popup when the item is clicked
|
|
24
|
+
closeQuery: '.listbox-item'
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
{#if menuBar}
|
|
30
|
+
<button class="flex items-center gap-x-1 text-sm text-surface-800" use:popup={popupCombobox}>
|
|
31
|
+
<span class="capitalize"><Fa icon={faCog} /></span>
|
|
32
|
+
|
|
33
|
+
</button>
|
|
34
|
+
|
|
35
|
+
<MenuSublist id="settings" items={menuBar} />
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
{/if}
|
|
39
|
+
|
|
40
|
+
|
package/src/lib/index.ts
CHANGED
|
@@ -48,20 +48,20 @@ export { ListView, TableView, Spinner, Page, Alert };
|
|
|
48
48
|
|
|
49
49
|
//Api
|
|
50
50
|
export { Api } from './services/Api.js';
|
|
51
|
-
export { host, username, password, setApiConfig } from './stores/
|
|
51
|
+
export { host, username, password, setApiConfig } from './stores/apiStores.ts';
|
|
52
52
|
|
|
53
53
|
//Type
|
|
54
54
|
export type {
|
|
55
55
|
user,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
} from './models/Models.
|
|
56
|
+
inputType,
|
|
57
|
+
fileUploaderModel,
|
|
58
|
+
linkType,
|
|
59
|
+
listItemType,
|
|
60
|
+
keyValuePairType
|
|
61
|
+
} from './models/Models.ts';
|
|
62
62
|
|
|
63
63
|
//enum
|
|
64
|
-
export {
|
|
64
|
+
export { positionType } from './models/Enums';
|
|
65
65
|
|
|
66
66
|
// Table
|
|
67
67
|
export { Table, TableFilter, columnFilter, searchFilter };
|
package/src/lib/models/Enums.ts
CHANGED