@bexis2/bexis2-core-ui 0.0.31 → 0.1.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.
- package/README.md +21 -0
- package/dist/components/file/FileUploader.svelte +1 -1
- package/dist/components/form/DropdownKvP.svelte +17 -2
- package/dist/components/form/DropdownKvP.svelte.d.ts +2 -0
- package/dist/components/form/MultiSelect.svelte +91 -91
- package/dist/components/form/NumberInput.svelte +2 -0
- package/dist/components/form/NumberInput.svelte.d.ts +1 -0
- package/dist/components/form/TextArea.svelte +2 -0
- package/dist/components/form/TextArea.svelte.d.ts +1 -0
- package/dist/components/form/TextInput.svelte +2 -0
- package/dist/components/form/TextInput.svelte.d.ts +1 -0
- package/dist/components/page/Page.svelte +13 -2
- package/dist/components/page/Page.svelte.d.ts +2 -0
- package/dist/components/page/menu/Menu.svelte +36 -0
- package/dist/components/page/menu/Menu.svelte.d.ts +14 -0
- package/dist/components/page/menu/MenuBar.svelte +21 -0
- package/dist/components/page/menu/MenuBar.svelte.d.ts +17 -0
- package/dist/components/page/menu/MenuDataCaller.d.ts +1 -0
- package/dist/components/page/menu/MenuDataCaller.js +11 -0
- package/dist/components/page/menu/MenuItem.svelte +36 -0
- package/dist/components/page/menu/MenuItem.svelte.d.ts +17 -0
- package/dist/components/page/menu/SettingsBar.svelte +46 -0
- package/dist/components/page/menu/SettingsBar.svelte.d.ts +17 -0
- package/dist/components/page/menu/menu.d.ts +21 -0
- package/dist/components/page/menu/menu.js +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -1
- package/dist/models/Models.d.ts +10 -0
- package/package.json +1 -1
- package/src/lib/components/file/FileUploader.svelte +1 -1
- package/src/lib/components/form/DropdownKvP.svelte +17 -2
- package/src/lib/components/form/MultiSelect.svelte +91 -91
- package/src/lib/components/form/NumberInput.svelte +2 -0
- package/src/lib/components/form/TextArea.svelte +2 -0
- package/src/lib/components/form/TextInput.svelte +3 -0
- package/src/lib/components/page/Alert.svelte +0 -1
- package/src/lib/components/page/Page.svelte +15 -1
- package/src/lib/components/page/menu/Menu.svelte +53 -0
- package/src/lib/components/page/menu/MenuBar.svelte +30 -0
- package/src/lib/components/page/menu/MenuDataCaller.js +11 -0
- package/src/lib/components/page/menu/MenuItem.svelte +43 -0
- package/src/lib/components/page/menu/SettingsBar.svelte +61 -0
- package/src/lib/components/page/menu/menu.ts +23 -0
- package/src/lib/index.ts +8 -3
- package/src/lib/models/Models.ts +14 -0
- /package/dist/components/{spinner → page}/Spinner.svelte +0 -0
- /package/dist/components/{spinner → page}/Spinner.svelte.d.ts +0 -0
- /package/src/lib/components/{spinner → page}/Spinner.svelte +0 -0
package/README.md
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
# bexis-core-ui
|
|
2
|
+
## v0.1.1
|
|
3
|
+
### update
|
|
4
|
+
- Page
|
|
5
|
+
- add menu (beta)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## v.0.1.0
|
|
9
|
+
### add
|
|
10
|
+
#### types
|
|
11
|
+
- ListItem
|
|
12
|
+
- KvP
|
|
13
|
+
|
|
14
|
+
#### enum
|
|
15
|
+
- Position
|
|
16
|
+
|
|
17
|
+
### update
|
|
18
|
+
#### components
|
|
19
|
+
- DropdownKVP
|
|
20
|
+
- return of the target to complex or id only
|
|
21
|
+
- TextInput, TextArea, Number
|
|
22
|
+
- add placeholder
|
|
2
23
|
|
|
3
24
|
## v0.0.31
|
|
4
25
|
### add
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>import DropZone from "svelte-file-dropzone/Dropzone.svelte";
|
|
2
2
|
import Fa from "svelte-fa/src/fa.svelte";
|
|
3
|
-
import Spinner from "../
|
|
3
|
+
import Spinner from "../page/Spinner.svelte";
|
|
4
4
|
import { createEventDispatcher } from "svelte";
|
|
5
5
|
import { faTrash } from "@fortawesome/free-solid-svg-icons";
|
|
6
6
|
import { faSave } from "@fortawesome/free-regular-svg-icons";
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export let invalid = false;
|
|
10
10
|
export let feedback = [''];
|
|
11
11
|
export let required = false;
|
|
12
|
+
export let targetIsComplex = false;
|
|
12
13
|
|
|
13
14
|
$: selected = null;
|
|
14
15
|
|
|
@@ -17,12 +18,26 @@
|
|
|
17
18
|
|
|
18
19
|
function updatedSelectedValue(selection) {
|
|
19
20
|
if (selection != null) {
|
|
20
|
-
|
|
21
|
+
if(targetIsComplex)
|
|
22
|
+
{
|
|
23
|
+
selected = selection.id;
|
|
24
|
+
}
|
|
25
|
+
else
|
|
26
|
+
{
|
|
27
|
+
selected = selection
|
|
28
|
+
}
|
|
21
29
|
}
|
|
22
30
|
}
|
|
23
31
|
|
|
24
32
|
function updatedTarget(id) {
|
|
25
|
-
|
|
33
|
+
if(targetIsComplex)
|
|
34
|
+
{
|
|
35
|
+
target = source.find((opt) => opt.id === id);
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
{
|
|
39
|
+
target = id;
|
|
40
|
+
}
|
|
26
41
|
}
|
|
27
42
|
</script>
|
|
28
43
|
|
|
@@ -10,6 +10,7 @@ export default class DropdownKvP extends SvelteComponentTyped<{
|
|
|
10
10
|
invalid?: boolean | undefined;
|
|
11
11
|
valid?: boolean | undefined;
|
|
12
12
|
feedback?: string[] | undefined;
|
|
13
|
+
targetIsComplex?: boolean | undefined;
|
|
13
14
|
}, {
|
|
14
15
|
change: Event;
|
|
15
16
|
select: Event;
|
|
@@ -31,6 +32,7 @@ declare const __propDef: {
|
|
|
31
32
|
invalid?: boolean | undefined;
|
|
32
33
|
valid?: boolean | undefined;
|
|
33
34
|
feedback?: string[] | undefined;
|
|
35
|
+
targetIsComplex?: boolean | undefined;
|
|
34
36
|
};
|
|
35
37
|
events: {
|
|
36
38
|
change: Event;
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import InputContainer from './InputContainer.svelte';
|
|
3
|
-
|
|
4
|
-
import Select from 'svelte-select';
|
|
5
|
-
import { onMount } from 'svelte';
|
|
6
|
-
|
|
7
|
-
export let source;
|
|
8
|
-
export let target;
|
|
9
|
-
export let title;
|
|
10
|
-
export let itemId = 'value';
|
|
11
|
-
export let label = 'label';
|
|
12
|
-
export let isMulti = true;
|
|
13
|
-
export let isComplex = false;
|
|
14
|
-
export let isTargetComplex = false;
|
|
15
|
-
export let required = false;
|
|
16
|
-
export let feedback = [];
|
|
17
|
-
|
|
18
|
-
let isLoaded = false;
|
|
19
|
-
|
|
20
|
-
$: value = null;
|
|
21
|
-
$: updateTarget(value);
|
|
22
|
-
|
|
23
|
-
function updateTarget(selection) {
|
|
24
|
-
//diffrent cases
|
|
25
|
-
console.log('------');
|
|
26
|
-
|
|
27
|
-
//a) source is complex model is simple
|
|
28
|
-
if (isComplex && !isTargetComplex && isLoaded) {
|
|
29
|
-
console.log('a) source is complex model is simple');
|
|
30
|
-
|
|
31
|
-
target = [];
|
|
32
|
-
for (let i in selection) {
|
|
33
|
-
let item = selection[i];
|
|
34
|
-
target.push(item[itemId]);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (!isComplex && !isTargetComplex && isLoaded) {
|
|
39
|
-
target = [];
|
|
40
|
-
for (let i in selection) {
|
|
41
|
-
target.push(selection[i].value);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
console.log('selection ' + title, selection);
|
|
45
|
-
console.log('target ' + title, target);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
onMount(async () => {
|
|
49
|
-
//console.log("on mount multiselect");
|
|
50
|
-
//console.log(source);
|
|
51
|
-
|
|
52
|
-
//a) source is complex model is simple
|
|
53
|
-
if (isComplex && !isTargetComplex) {
|
|
54
|
-
let items = [];
|
|
55
|
-
// event.detail will be null unless isMulti is true and user has removed a single item
|
|
56
|
-
for (let i in target) {
|
|
57
|
-
let t = target[i];
|
|
58
|
-
items.push(source.find((item) => item.key === t));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
isLoaded = true;
|
|
62
|
-
if (items.length > 0) {
|
|
63
|
-
value = items;
|
|
64
|
-
}
|
|
65
|
-
//console.log(value);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
//b) simple liust and simple model
|
|
69
|
-
if (!isComplex && !isTargetComplex) {
|
|
70
|
-
//console.log("source", source);
|
|
71
|
-
//console.log("target",target);
|
|
72
|
-
isLoaded = true;
|
|
73
|
-
//set target only if its nit empty
|
|
74
|
-
if (target != null && target !== undefined && target != '') {
|
|
75
|
-
value = target;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
</script>
|
|
80
|
-
|
|
81
|
-
<InputContainer label={title} {feedback} {required}>
|
|
82
|
-
<Select
|
|
83
|
-
class="select variant-form-material"
|
|
84
|
-
items={source}
|
|
85
|
-
{itemId}
|
|
86
|
-
{label}
|
|
87
|
-
multiple={isMulti}
|
|
88
|
-
bind:value
|
|
89
|
-
placeholder="-- Please select --"
|
|
90
|
-
/>
|
|
91
|
-
</InputContainer>
|
|
1
|
+
<script>
|
|
2
|
+
import InputContainer from './InputContainer.svelte';
|
|
3
|
+
|
|
4
|
+
import Select from 'svelte-select';
|
|
5
|
+
import { onMount } from 'svelte';
|
|
6
|
+
|
|
7
|
+
export let source;
|
|
8
|
+
export let target;
|
|
9
|
+
export let title;
|
|
10
|
+
export let itemId = 'value';
|
|
11
|
+
export let label = 'label';
|
|
12
|
+
export let isMulti = true;
|
|
13
|
+
export let isComplex = false;
|
|
14
|
+
export let isTargetComplex = false;
|
|
15
|
+
export let required = false;
|
|
16
|
+
export let feedback = [];
|
|
17
|
+
|
|
18
|
+
let isLoaded = false;
|
|
19
|
+
|
|
20
|
+
$: value = null;
|
|
21
|
+
$: updateTarget(value);
|
|
22
|
+
|
|
23
|
+
function updateTarget(selection) {
|
|
24
|
+
//diffrent cases
|
|
25
|
+
console.log('------');
|
|
26
|
+
|
|
27
|
+
//a) source is complex model is simple
|
|
28
|
+
if (isComplex && !isTargetComplex && isLoaded) {
|
|
29
|
+
console.log('a) source is complex model is simple');
|
|
30
|
+
|
|
31
|
+
target = [];
|
|
32
|
+
for (let i in selection) {
|
|
33
|
+
let item = selection[i];
|
|
34
|
+
target.push(item[itemId]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (!isComplex && !isTargetComplex && isLoaded) {
|
|
39
|
+
target = [];
|
|
40
|
+
for (let i in selection) {
|
|
41
|
+
target.push(selection[i].value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log('selection ' + title, selection);
|
|
45
|
+
console.log('target ' + title, target);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
onMount(async () => {
|
|
49
|
+
//console.log("on mount multiselect");
|
|
50
|
+
//console.log(source);
|
|
51
|
+
|
|
52
|
+
//a) source is complex model is simple
|
|
53
|
+
if (isComplex && !isTargetComplex) {
|
|
54
|
+
let items = [];
|
|
55
|
+
// event.detail will be null unless isMulti is true and user has removed a single item
|
|
56
|
+
for (let i in target) {
|
|
57
|
+
let t = target[i];
|
|
58
|
+
items.push(source.find((item) => item.key === t));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
isLoaded = true;
|
|
62
|
+
if (items.length > 0) {
|
|
63
|
+
value = items;
|
|
64
|
+
}
|
|
65
|
+
//console.log(value);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//b) simple liust and simple model
|
|
69
|
+
if (!isComplex && !isTargetComplex) {
|
|
70
|
+
//console.log("source", source);
|
|
71
|
+
//console.log("target",target);
|
|
72
|
+
isLoaded = true;
|
|
73
|
+
//set target only if its nit empty
|
|
74
|
+
if (target != null && target !== undefined && target != '') {
|
|
75
|
+
value = target;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<InputContainer label={title} {feedback} {required}>
|
|
82
|
+
<Select
|
|
83
|
+
class="select variant-form-material"
|
|
84
|
+
items={source}
|
|
85
|
+
{itemId}
|
|
86
|
+
{label}
|
|
87
|
+
multiple={isMulti}
|
|
88
|
+
bind:value
|
|
89
|
+
placeholder="-- Please select --"
|
|
90
|
+
/>
|
|
91
|
+
</InputContainer>
|
|
@@ -6,6 +6,7 @@ export let valid = false;
|
|
|
6
6
|
export let invalid = false;
|
|
7
7
|
export let required = false;
|
|
8
8
|
export let feedback = [""];
|
|
9
|
+
export let placeholder = "";
|
|
9
10
|
</script>
|
|
10
11
|
|
|
11
12
|
<InputContainer {label} {feedback} {required}>
|
|
@@ -17,5 +18,6 @@ export let feedback = [""];
|
|
|
17
18
|
class:input-error={invalid}
|
|
18
19
|
bind:value
|
|
19
20
|
on:input
|
|
21
|
+
{placeholder}
|
|
20
22
|
/>
|
|
21
23
|
</InputContainer>
|
|
@@ -6,6 +6,7 @@ export let valid = false;
|
|
|
6
6
|
export let invalid = false;
|
|
7
7
|
export let required = false;
|
|
8
8
|
export let feedback = [""];
|
|
9
|
+
export let placeholder = "";
|
|
9
10
|
</script>
|
|
10
11
|
|
|
11
12
|
<InputContainer {label} {feedback} {required}>
|
|
@@ -16,5 +17,6 @@ export let feedback = [""];
|
|
|
16
17
|
class:input-error={invalid}
|
|
17
18
|
bind:value
|
|
18
19
|
on:input
|
|
20
|
+
{placeholder}
|
|
19
21
|
/>
|
|
20
22
|
</InputContainer>
|
|
@@ -6,6 +6,7 @@ export let valid = false;
|
|
|
6
6
|
export let invalid = false;
|
|
7
7
|
export let required = false;
|
|
8
8
|
export let feedback = [""];
|
|
9
|
+
export let placeholder = "";
|
|
9
10
|
</script>
|
|
10
11
|
|
|
11
12
|
<InputContainer {label} {feedback} {required}>
|
|
@@ -17,5 +18,6 @@ export let feedback = [""];
|
|
|
17
18
|
class:input-error={invalid}
|
|
18
19
|
bind:value
|
|
19
20
|
on:input
|
|
21
|
+
{placeholder}
|
|
20
22
|
/>
|
|
21
23
|
</InputContainer>
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script>import Menu from "./menu/Menu.svelte";
|
|
2
|
+
export let title = "";
|
|
2
3
|
export let note = "";
|
|
3
4
|
export let links = [];
|
|
5
|
+
export let menu = true;
|
|
6
|
+
export let footer = true;
|
|
4
7
|
</script>
|
|
5
8
|
|
|
6
|
-
|
|
9
|
+
{#if menu}
|
|
10
|
+
<Menu/>
|
|
11
|
+
{/if}
|
|
12
|
+
|
|
13
|
+
<div class="px-5 grid gap-5 content-center" >
|
|
7
14
|
<h1 class="h1">{title}</h1>
|
|
8
15
|
{#if note}
|
|
9
16
|
<blockquote class="blockquote">{note}</blockquote>
|
|
@@ -20,4 +27,8 @@ export let links = [];
|
|
|
20
27
|
{/if}
|
|
21
28
|
<slot/>
|
|
22
29
|
</div>
|
|
30
|
+
|
|
31
|
+
{#if menu}
|
|
32
|
+
<!-- footer -->
|
|
33
|
+
{/if}
|
|
23
34
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script>import Fa from "svelte-fa/src/fa.svelte";
|
|
2
|
+
import { faCog } from "@fortawesome/free-solid-svg-icons";
|
|
3
|
+
import { onMount } from "svelte";
|
|
4
|
+
import { setApiConfig } from "../../../stores/apistore";
|
|
5
|
+
import { getMenuItems } from "./MenuDataCaller";
|
|
6
|
+
import MenuBar from "./MenuBar.svelte";
|
|
7
|
+
import SettingsBar from "./SettingsBar.svelte";
|
|
8
|
+
let menu;
|
|
9
|
+
onMount(async () => {
|
|
10
|
+
setApiConfig("https://localhost:44345", "david", "123456");
|
|
11
|
+
menu = await getMenuItems();
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#if menu}
|
|
16
|
+
|
|
17
|
+
<div class="flex flex-row md:flex px-3 py-2">
|
|
18
|
+
<div class="basis-2/3">
|
|
19
|
+
{#if menu.Logo}
|
|
20
|
+
<img src='data:{menu.Logo.Mime};charset=utf-8;base64, {menu.Logo.Data}' alt='{menu.Logo.Name}' style='height:40px;' />
|
|
21
|
+
{/if}
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="flex-auto w-64 flex items-center md:space-x-3 justify-end">
|
|
25
|
+
|
|
26
|
+
<MenuBar menuBar={menu.AccountBar} />
|
|
27
|
+
<MenuBar menuBar={menu.LaunchBar} />
|
|
28
|
+
<SettingsBar menuBar={menu.Settings} />
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
</div>
|
|
32
|
+
<div class="flex items-center md:space-x-5 px-3 text-lg">
|
|
33
|
+
<MenuBar menuBar={menu.MenuBar} />
|
|
34
|
+
<MenuBar menuBar={menu.Extended} />
|
|
35
|
+
</div>
|
|
36
|
+
{/if}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export type MenuProps = typeof __propDef.props;
|
|
10
|
+
export type MenuEvents = typeof __propDef.events;
|
|
11
|
+
export type MenuSlots = typeof __propDef.slots;
|
|
12
|
+
export default class Menu extends SvelteComponentTyped<MenuProps, MenuEvents, MenuSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
<script>import { computePosition, autoUpdate, offset, shift, flip, arrow } from "@floating-ui/dom";
|
|
3
|
+
import { storePopup } from "@skeletonlabs/skeleton";
|
|
4
|
+
storePopup.set({ computePosition, autoUpdate, offset, shift, flip, arrow });
|
|
5
|
+
import Item from "./MenuItem.svelte";
|
|
6
|
+
export let menuBar;
|
|
7
|
+
let comboboxValue;
|
|
8
|
+
let radomNumber = Math.floor(Math.random() * 100);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
{#if menuBar}
|
|
13
|
+
{#each menuBar as menubarItem}
|
|
14
|
+
|
|
15
|
+
<Item {menubarItem}{comboboxValue}/>
|
|
16
|
+
|
|
17
|
+
{/each}
|
|
18
|
+
{/if}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { MenuItem } from "../../models/menu";
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
menuBar: MenuItem[];
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {};
|
|
11
|
+
};
|
|
12
|
+
export type MenuBarProps = typeof __propDef.props;
|
|
13
|
+
export type MenuBarEvents = typeof __propDef.events;
|
|
14
|
+
export type MenuBarSlots = typeof __propDef.slots;
|
|
15
|
+
export default class MenuBar extends SvelteComponentTyped<MenuBarProps, MenuBarEvents, MenuBarSlots> {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function getMenuItems(): Promise<any>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script>import { popup } from "@skeletonlabs/skeleton";
|
|
2
|
+
import { ListBox, ListBoxItem } from "@skeletonlabs/skeleton";
|
|
3
|
+
export let menubarItem;
|
|
4
|
+
export let comboboxValue;
|
|
5
|
+
let radomNumber = Math.floor(Math.random() * 100).toString();
|
|
6
|
+
let popupCombobox = {
|
|
7
|
+
event: "click",
|
|
8
|
+
target: radomNumber,
|
|
9
|
+
placement: "bottom",
|
|
10
|
+
// Close the popup when the item is clicked
|
|
11
|
+
closeQuery: ".listbox-item"
|
|
12
|
+
};
|
|
13
|
+
</script>
|
|
14
|
+
{#if menubarItem.Items.length<1}
|
|
15
|
+
|
|
16
|
+
<button class="flex items-center gap-x-1 text-xl font-semibold leading-6 text-gray-500" use:popup={popupCombobox}>
|
|
17
|
+
<span class="capitalize">{comboboxValue ?? menubarItem.Title}</span>
|
|
18
|
+
|
|
19
|
+
</button>
|
|
20
|
+
|
|
21
|
+
{:else}
|
|
22
|
+
<button class="flex items-center gap-x-1 text-xl font-semibold leading-6 text-gray-00" use:popup={popupCombobox}>
|
|
23
|
+
<span class="capitalize">{menubarItem.Title}</span>
|
|
24
|
+
<div class="before:content-['▾']"></div>
|
|
25
|
+
</button>
|
|
26
|
+
<div class="card w-48 shadow-xl py-2" data-popup={radomNumber}>
|
|
27
|
+
|
|
28
|
+
<ListBox rounded="rounded-none">
|
|
29
|
+
{#each menubarItem.Items as item}
|
|
30
|
+
|
|
31
|
+
<ListBoxItem class="bg-white text-gray-900 py-1 text-sm" bind:group={menubarItem.Title} name="medium" value={item.Title}>{item.Title}</ListBoxItem>
|
|
32
|
+
{/each}
|
|
33
|
+
</ListBox>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
{/if}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
menubarItem: any;
|
|
5
|
+
comboboxValue: any;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {};
|
|
11
|
+
};
|
|
12
|
+
export type MenuItemProps = typeof __propDef.props;
|
|
13
|
+
export type MenuItemEvents = typeof __propDef.events;
|
|
14
|
+
export type MenuItemSlots = typeof __propDef.slots;
|
|
15
|
+
export default class MenuItem extends SvelteComponentTyped<MenuItemProps, MenuItemEvents, MenuItemSlots> {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script>import { popup } from "@skeletonlabs/skeleton";
|
|
2
|
+
import { ListBox, ListBoxItem } from "@skeletonlabs/skeleton";
|
|
3
|
+
import Fa from "svelte-fa/src/fa.svelte";
|
|
4
|
+
import { faCog } from "@fortawesome/free-solid-svg-icons";
|
|
5
|
+
export let menuBar;
|
|
6
|
+
let lastModule = "";
|
|
7
|
+
let first = true;
|
|
8
|
+
function isNewModule(module) {
|
|
9
|
+
if (module === lastModule) {
|
|
10
|
+
return false;
|
|
11
|
+
} else {
|
|
12
|
+
lastModule = module;
|
|
13
|
+
if (first) {
|
|
14
|
+
first = false;
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let popupCombobox = {
|
|
21
|
+
event: "click",
|
|
22
|
+
target: "popupCombobox",
|
|
23
|
+
placement: "bottom",
|
|
24
|
+
// Close the popup when the item is clicked
|
|
25
|
+
closeQuery: ".listbox-item"
|
|
26
|
+
};
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
{#if menuBar}
|
|
30
|
+
<button class="flex items-center gap-x-1 text-sm font-semibold leading-6 text-gray-900" use:popup={popupCombobox}>
|
|
31
|
+
<span class="capitalize"><Fa icon={faCog} /></span>
|
|
32
|
+
|
|
33
|
+
</button>
|
|
34
|
+
<div class="card w-48 shadow-xl py-2" data-popup="popupCombobox">
|
|
35
|
+
<ListBox rounded="rounded-none bg-white">
|
|
36
|
+
{#each menuBar as menubarItem}
|
|
37
|
+
{#if isNewModule(menubarItem.Module) }<hr class="bg-gray-900">{/if}
|
|
38
|
+
<ListBoxItem class="bg-white text-gray-900 py-1" bind:group={menubarItem.Title} name="medium" value={menubarItem.Title}>{menubarItem.Title}</ListBoxItem>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
{/each}
|
|
43
|
+
</ListBox>
|
|
44
|
+
</div>
|
|
45
|
+
{/if}
|
|
46
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { MenuItem } from "../../models/menu";
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
menuBar: MenuItem[];
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {};
|
|
11
|
+
};
|
|
12
|
+
export type SettingsBarProps = typeof __propDef.props;
|
|
13
|
+
export type SettingsBarEvents = typeof __propDef.events;
|
|
14
|
+
export type SettingsBarSlots = typeof __propDef.slots;
|
|
15
|
+
export default class SettingsBar extends SvelteComponentTyped<SettingsBarProps, SettingsBarEvents, SettingsBarSlots> {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface Menu {
|
|
2
|
+
Logo: Logo;
|
|
3
|
+
LaunchBar: MenuItem[];
|
|
4
|
+
MenuBar: MenuItem[];
|
|
5
|
+
AccountBar: MenuItem[];
|
|
6
|
+
Settings: MenuItem[];
|
|
7
|
+
Extended: MenuItem[];
|
|
8
|
+
}
|
|
9
|
+
export interface MenuItem {
|
|
10
|
+
Title: string;
|
|
11
|
+
Url: string;
|
|
12
|
+
Target: string;
|
|
13
|
+
Module: string;
|
|
14
|
+
Items: MenuItem[];
|
|
15
|
+
}
|
|
16
|
+
export interface Logo {
|
|
17
|
+
Mime: string;
|
|
18
|
+
Name: string;
|
|
19
|
+
Data: string;
|
|
20
|
+
Height: number;
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import TableView from './TableView.svelte';
|
|
|
3
3
|
import FileIcon from './components/file/FileIcon.svelte';
|
|
4
4
|
import FileInfo from './components/file/FileInfo.svelte';
|
|
5
5
|
import FileUploader from './components/file/FileUploader.svelte';
|
|
6
|
-
import Spinner from './components/
|
|
6
|
+
import Spinner from './components/page/Spinner.svelte';
|
|
7
7
|
import Page from './components/page/Page.svelte';
|
|
8
8
|
import Alert from './components/page/Alert.svelte';
|
|
9
9
|
import Checkbox from './components/form/Checkbox.svelte';
|
|
@@ -24,6 +24,7 @@ export { FileInfo, FileIcon, FileUploader };
|
|
|
24
24
|
export { ListView, TableView, Spinner, Page, Alert };
|
|
25
25
|
export { Api } from './services/Api.js';
|
|
26
26
|
export { host, username, password, setApiConfig } from './stores/apistore.js';
|
|
27
|
-
export type { user, Input, FileUploaderModel, Link } from './models/Models.js';
|
|
27
|
+
export type { user, Input, FileUploaderModel, Link, ListItem, KvP } from './models/Models.js';
|
|
28
|
+
export { Position } from './models/Enums';
|
|
28
29
|
export { Table, TableFilter, columnFilter, searchFilter };
|
|
29
30
|
export type { TableConfig, Columns, Column };
|