@ismail-elkorchi/ui-shell 0.1.0 → 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 +71 -68
- package/dist/custom-elements.json +1039 -0
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/register.d.ts +5 -5
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +5 -5
- package/dist/register.js.map +1 -1
- package/dist/src/internal/light-dom-slot-controller.d.ts +22 -0
- package/dist/src/internal/light-dom-slot-controller.d.ts.map +1 -0
- package/dist/src/internal/light-dom-slot-controller.js +91 -0
- package/dist/src/internal/light-dom-slot-controller.js.map +1 -0
- package/dist/src/internal/router.d.ts +36 -0
- package/dist/src/internal/router.d.ts.map +1 -0
- package/dist/{router.js → src/internal/router.js} +26 -19
- package/dist/src/internal/router.js.map +1 -0
- package/dist/src/structures/uik-shell-activity-bar-contract.d.ts +10 -0
- package/dist/src/structures/uik-shell-activity-bar-contract.d.ts.map +1 -0
- package/dist/src/structures/uik-shell-activity-bar-contract.js +2 -0
- package/dist/src/structures/uik-shell-activity-bar-contract.js.map +1 -0
- package/dist/src/structures/uik-shell-activity-bar.d.ts +30 -0
- package/dist/src/structures/uik-shell-activity-bar.d.ts.map +1 -0
- package/dist/src/structures/uik-shell-activity-bar.js +272 -0
- package/dist/src/structures/uik-shell-activity-bar.js.map +1 -0
- package/dist/src/structures/uik-shell-layout.d.ts +16 -0
- package/dist/src/structures/uik-shell-layout.d.ts.map +1 -0
- package/dist/src/structures/uik-shell-layout.js +123 -0
- package/dist/src/structures/uik-shell-layout.js.map +1 -0
- package/dist/src/structures/uik-shell-secondary-sidebar.d.ts +21 -0
- package/dist/src/structures/uik-shell-secondary-sidebar.d.ts.map +1 -0
- package/dist/src/structures/uik-shell-secondary-sidebar.js +169 -0
- package/dist/src/structures/uik-shell-secondary-sidebar.js.map +1 -0
- package/dist/src/structures/uik-shell-sidebar.d.ts +21 -0
- package/dist/src/structures/uik-shell-sidebar.d.ts.map +1 -0
- package/dist/src/structures/uik-shell-sidebar.js +176 -0
- package/dist/src/structures/uik-shell-sidebar.js.map +1 -0
- package/dist/src/structures/uik-shell-status-bar.d.ts +23 -0
- package/dist/src/structures/uik-shell-status-bar.d.ts.map +1 -0
- package/dist/src/structures/uik-shell-status-bar.js +144 -0
- package/dist/src/structures/uik-shell-status-bar.js.map +1 -0
- package/package.json +31 -27
- package/dist/ActivityBar.d.ts +0 -25
- package/dist/ActivityBar.d.ts.map +0 -1
- package/dist/ActivityBar.js +0 -81
- package/dist/ActivityBar.js.map +0 -1
- package/dist/AppShellLayout.d.ts +0 -17
- package/dist/AppShellLayout.d.ts.map +0 -1
- package/dist/AppShellLayout.js +0 -66
- package/dist/AppShellLayout.js.map +0 -1
- package/dist/SecondarySidebar.d.ts +0 -18
- package/dist/SecondarySidebar.d.ts.map +0 -1
- package/dist/SecondarySidebar.js +0 -84
- package/dist/SecondarySidebar.js.map +0 -1
- package/dist/Sidebar.d.ts +0 -20
- package/dist/Sidebar.d.ts.map +0 -1
- package/dist/Sidebar.js +0 -105
- package/dist/Sidebar.js.map +0 -1
- package/dist/Statusbar.d.ts +0 -19
- package/dist/Statusbar.d.ts.map +0 -1
- package/dist/Statusbar.js +0 -73
- package/dist/Statusbar.js.map +0 -1
- package/dist/router.d.ts +0 -36
- package/dist/router.d.ts.map +0 -1
- package/dist/router.js.map +0 -1
- package/dist/tailwind-source.css +0 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
1
|
+
export { UikShellActivityBar } from './src/structures/uik-shell-activity-bar';
|
|
2
|
+
export { UikShellLayout } from './src/structures/uik-shell-layout';
|
|
3
|
+
export { UikShellSecondarySidebar } from './src/structures/uik-shell-secondary-sidebar';
|
|
4
|
+
export { UikShellSidebar } from './src/structures/uik-shell-sidebar';
|
|
5
|
+
export { UikShellStatusBar } from './src/structures/uik-shell-status-bar';
|
|
6
|
+
export { createUikShellRouter, UIK_SHELL_NAVIGATION_EVENT, UikShellRouter } from './src/internal/router';
|
|
7
|
+
export type { UikShellActivityBarIcon, UikShellActivityBarItem } from './src/structures/uik-shell-activity-bar-contract';
|
|
8
|
+
export type { UikShellLocation, UikShellNavigationDetail, UikShellNavigationListener, UikShellRoute, UikShellRouterConfig, } from './src/internal/router';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAC,wBAAwB,EAAC,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAC,oBAAoB,EAAE,0BAA0B,EAAE,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACvG,YAAY,EAAC,uBAAuB,EAAE,uBAAuB,EAAC,MAAM,kDAAkD,CAAC;AACvH,YAAY,EACV,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,oBAAoB,GACrB,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
1
|
+
export { UikShellActivityBar } from './src/structures/uik-shell-activity-bar';
|
|
2
|
+
export { UikShellLayout } from './src/structures/uik-shell-layout';
|
|
3
|
+
export { UikShellSecondarySidebar } from './src/structures/uik-shell-secondary-sidebar';
|
|
4
|
+
export { UikShellSidebar } from './src/structures/uik-shell-sidebar';
|
|
5
|
+
export { UikShellStatusBar } from './src/structures/uik-shell-status-bar';
|
|
6
|
+
export { createUikShellRouter, UIK_SHELL_NAVIGATION_EVENT, UikShellRouter } from './src/internal/router';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAC,wBAAwB,EAAC,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAC,oBAAoB,EAAE,0BAA0B,EAAE,cAAc,EAAC,MAAM,uBAAuB,CAAC"}
|
package/dist/register.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import './
|
|
2
|
-
import './
|
|
3
|
-
import './
|
|
4
|
-
import './
|
|
5
|
-
import './
|
|
1
|
+
import './src/structures/uik-shell-layout';
|
|
2
|
+
import './src/structures/uik-shell-activity-bar';
|
|
3
|
+
import './src/structures/uik-shell-sidebar';
|
|
4
|
+
import './src/structures/uik-shell-secondary-sidebar';
|
|
5
|
+
import './src/structures/uik-shell-status-bar';
|
|
6
6
|
//# sourceMappingURL=register.d.ts.map
|
package/dist/register.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,OAAO,mCAAmC,CAAC;AAC3C,OAAO,yCAAyC,CAAC;AACjD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,8CAA8C,CAAC;AACtD,OAAO,uCAAuC,CAAC"}
|
package/dist/register.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import './
|
|
2
|
-
import './
|
|
3
|
-
import './
|
|
4
|
-
import './
|
|
5
|
-
import './
|
|
1
|
+
import './src/structures/uik-shell-layout';
|
|
2
|
+
import './src/structures/uik-shell-activity-bar';
|
|
3
|
+
import './src/structures/uik-shell-sidebar';
|
|
4
|
+
import './src/structures/uik-shell-secondary-sidebar';
|
|
5
|
+
import './src/structures/uik-shell-status-bar';
|
|
6
6
|
//# sourceMappingURL=register.js.map
|
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,OAAO,mCAAmC,CAAC;AAC3C,OAAO,yCAAyC,CAAC;AACjD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,8CAA8C,CAAC;AACtD,OAAO,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface SlotTarget {
|
|
2
|
+
name: string | null;
|
|
3
|
+
containerSelector: string;
|
|
4
|
+
}
|
|
5
|
+
interface SyncResult {
|
|
6
|
+
moved: Record<string, number>;
|
|
7
|
+
}
|
|
8
|
+
export declare function ensureLightDomRoot(host: HTMLElement, attr?: string): HTMLElement;
|
|
9
|
+
export declare class LightDomSlotController {
|
|
10
|
+
private readonly host;
|
|
11
|
+
private readonly rootSelector;
|
|
12
|
+
private readonly targets;
|
|
13
|
+
private readonly onAfterSync?;
|
|
14
|
+
private observer;
|
|
15
|
+
constructor(host: HTMLElement, rootSelector: string, targets: SlotTarget[], onAfterSync?: ((root: HTMLElement, result: SyncResult) => void) | undefined);
|
|
16
|
+
connect(): void;
|
|
17
|
+
disconnect(): void;
|
|
18
|
+
sync(): void;
|
|
19
|
+
private moveToContainer;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=light-dom-slot-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"light-dom-slot-controller.d.ts","sourceRoot":"","sources":["../../../src/internal/light-dom-slot-controller.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,MAAuB,eAWlF;AAED,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAN/B,OAAO,CAAC,QAAQ,CAAiC;gBAG9B,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,UAAU,EAAE,EACrB,WAAW,CAAC,GAAE,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,aAAA;IAGhF,OAAO;IAOP,UAAU;IAKV,IAAI;IAqBJ,OAAO,CAAC,eAAe;CA4BxB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const ROOT_ATTRIBUTE = 'data-shell-root';
|
|
2
|
+
export function ensureLightDomRoot(host, attr = ROOT_ATTRIBUTE) {
|
|
3
|
+
const existing = Array.from(host.children).find(child => child.hasAttribute(attr));
|
|
4
|
+
if (existing instanceof HTMLElement)
|
|
5
|
+
return existing;
|
|
6
|
+
const root = document.createElement('div');
|
|
7
|
+
root.setAttribute(attr, '');
|
|
8
|
+
if (!root.style.display)
|
|
9
|
+
root.style.display = 'block';
|
|
10
|
+
if (!root.style.boxSizing)
|
|
11
|
+
root.style.boxSizing = 'border-box';
|
|
12
|
+
if (!root.style.width)
|
|
13
|
+
root.style.width = '100%';
|
|
14
|
+
if (!root.style.height)
|
|
15
|
+
root.style.height = '100%';
|
|
16
|
+
host.append(root);
|
|
17
|
+
return root;
|
|
18
|
+
}
|
|
19
|
+
export class LightDomSlotController {
|
|
20
|
+
host;
|
|
21
|
+
rootSelector;
|
|
22
|
+
targets;
|
|
23
|
+
onAfterSync;
|
|
24
|
+
observer = null;
|
|
25
|
+
constructor(host, rootSelector, targets, onAfterSync) {
|
|
26
|
+
this.host = host;
|
|
27
|
+
this.rootSelector = rootSelector;
|
|
28
|
+
this.targets = targets;
|
|
29
|
+
this.onAfterSync = onAfterSync;
|
|
30
|
+
}
|
|
31
|
+
connect() {
|
|
32
|
+
if (this.observer)
|
|
33
|
+
return;
|
|
34
|
+
this.sync();
|
|
35
|
+
this.observer = new MutationObserver(() => this.sync());
|
|
36
|
+
this.observer.observe(this.host, { childList: true, subtree: true });
|
|
37
|
+
}
|
|
38
|
+
disconnect() {
|
|
39
|
+
this.observer?.disconnect();
|
|
40
|
+
this.observer = null;
|
|
41
|
+
}
|
|
42
|
+
sync() {
|
|
43
|
+
const scopedSelector = this.rootSelector.includes(':scope')
|
|
44
|
+
? this.rootSelector
|
|
45
|
+
: `:scope > ${this.rootSelector}`;
|
|
46
|
+
const root = this.host.querySelector(scopedSelector) ?? this.host.querySelector(this.rootSelector);
|
|
47
|
+
if (!root)
|
|
48
|
+
return;
|
|
49
|
+
const result = { moved: {} };
|
|
50
|
+
for (const target of this.targets) {
|
|
51
|
+
const container = root.querySelector(target.containerSelector);
|
|
52
|
+
if (!container)
|
|
53
|
+
continue;
|
|
54
|
+
const movedCount = this.moveToContainer(root, container, target.name);
|
|
55
|
+
result.moved[target.name ?? 'default'] = movedCount;
|
|
56
|
+
}
|
|
57
|
+
this.onAfterSync?.(root, result);
|
|
58
|
+
}
|
|
59
|
+
moveToContainer(root, container, slotName) {
|
|
60
|
+
let moved = 0;
|
|
61
|
+
for (const node of Array.from(this.host.childNodes)) {
|
|
62
|
+
if (node === root)
|
|
63
|
+
continue;
|
|
64
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
65
|
+
const element = node;
|
|
66
|
+
const childSlot = element.getAttribute('slot');
|
|
67
|
+
if (slotName === null) {
|
|
68
|
+
if (childSlot)
|
|
69
|
+
continue;
|
|
70
|
+
container.append(element);
|
|
71
|
+
moved += 1;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (childSlot === slotName) {
|
|
75
|
+
container.append(element);
|
|
76
|
+
moved += 1;
|
|
77
|
+
}
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (slotName === null && node.nodeType === Node.TEXT_NODE) {
|
|
81
|
+
const text = node;
|
|
82
|
+
if (!text.textContent || text.textContent.trim() === '')
|
|
83
|
+
continue;
|
|
84
|
+
container.append(text);
|
|
85
|
+
moved += 1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return moved;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=light-dom-slot-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"light-dom-slot-controller.js","sourceRoot":"","sources":["../../../src/internal/light-dom-slot-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const UIK_SHELL_NAVIGATION_EVENT = "uik-shell:navigation";
|
|
2
|
+
export interface UikShellRoute {
|
|
3
|
+
id: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
subviews?: string[];
|
|
6
|
+
defaultSubview?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface UikShellLocation {
|
|
9
|
+
view: string;
|
|
10
|
+
subview?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface UikShellNavigationDetail {
|
|
13
|
+
from: UikShellLocation;
|
|
14
|
+
to: UikShellLocation;
|
|
15
|
+
route: UikShellRoute;
|
|
16
|
+
}
|
|
17
|
+
export interface UikShellRouterConfig {
|
|
18
|
+
routes: UikShellRoute[];
|
|
19
|
+
initialView?: string;
|
|
20
|
+
initialSubview?: string;
|
|
21
|
+
}
|
|
22
|
+
export type UikShellNavigationListener = (location: UikShellLocation) => void;
|
|
23
|
+
export declare class UikShellRouter extends EventTarget {
|
|
24
|
+
private readonly routeRegistry;
|
|
25
|
+
private readonly lastSubviews;
|
|
26
|
+
private location;
|
|
27
|
+
constructor(config: UikShellRouterConfig);
|
|
28
|
+
get current(): UikShellLocation;
|
|
29
|
+
get routes(): UikShellRoute[];
|
|
30
|
+
subscribe(listener: UikShellNavigationListener): () => void;
|
|
31
|
+
navigate(view: string, subview?: string): void;
|
|
32
|
+
private resolveInitialView;
|
|
33
|
+
private resolveSubview;
|
|
34
|
+
}
|
|
35
|
+
export declare const createUikShellRouter: (config: UikShellRouterConfig) => UikShellRouter;
|
|
36
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/internal/router.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,gBAAgB,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAE9E,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IACtE,OAAO,CAAC,QAAQ,CAAmB;gBAEvB,MAAM,EAAE,oBAAoB;IAaxC,IAAI,OAAO,IAAI,gBAAgB,CAE9B;IAED,IAAI,MAAM,IAAI,aAAa,EAAE,CAE5B;IAED,SAAS,CAAC,QAAQ,EAAE,0BAA0B,GAAG,MAAM,IAAI;IAc3D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IA4BvC,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,cAAc;CAgBvB;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,oBAAoB,mBAA+B,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
export const
|
|
2
|
-
export class
|
|
3
|
-
|
|
1
|
+
export const UIK_SHELL_NAVIGATION_EVENT = 'uik-shell:navigation';
|
|
2
|
+
export class UikShellRouter extends EventTarget {
|
|
3
|
+
routeRegistry = new Map();
|
|
4
4
|
lastSubviews = new Map();
|
|
5
5
|
location;
|
|
6
6
|
constructor(config) {
|
|
7
7
|
super();
|
|
8
|
-
if (
|
|
9
|
-
throw new Error('
|
|
10
|
-
|
|
8
|
+
if (config.routes.length === 0)
|
|
9
|
+
throw new Error('UikShellRouter requires at least one route.');
|
|
10
|
+
for (const route of config.routes) {
|
|
11
|
+
this.routeRegistry.set(route.id, route);
|
|
12
|
+
}
|
|
11
13
|
const view = this.resolveInitialView(config.initialView);
|
|
12
14
|
const subview = this.resolveSubview(view, config.initialSubview);
|
|
13
15
|
this.location = { view, subview };
|
|
@@ -15,22 +17,22 @@ export class AppShellRouter extends EventTarget {
|
|
|
15
17
|
get current() {
|
|
16
18
|
return { ...this.location };
|
|
17
19
|
}
|
|
18
|
-
get
|
|
19
|
-
return
|
|
20
|
+
get routes() {
|
|
21
|
+
return [...this.routeRegistry.values()];
|
|
20
22
|
}
|
|
21
23
|
subscribe(listener) {
|
|
22
24
|
const handler = (event) => {
|
|
23
25
|
const detail = event.detail;
|
|
24
26
|
listener(detail.to);
|
|
25
27
|
};
|
|
26
|
-
this.addEventListener(
|
|
28
|
+
this.addEventListener(UIK_SHELL_NAVIGATION_EVENT, handler);
|
|
27
29
|
listener(this.current);
|
|
28
30
|
return () => {
|
|
29
|
-
this.removeEventListener(
|
|
31
|
+
this.removeEventListener(UIK_SHELL_NAVIGATION_EVENT, handler);
|
|
30
32
|
};
|
|
31
33
|
}
|
|
32
34
|
navigate(view, subview) {
|
|
33
|
-
const route = this.
|
|
35
|
+
const route = this.routeRegistry.get(view);
|
|
34
36
|
if (!route)
|
|
35
37
|
throw new Error(`Unknown route "${view}".`);
|
|
36
38
|
const resolvedSubview = this.resolveSubview(view, subview);
|
|
@@ -39,21 +41,26 @@ export class AppShellRouter extends EventTarget {
|
|
|
39
41
|
return;
|
|
40
42
|
const previous = this.location;
|
|
41
43
|
this.location = next;
|
|
42
|
-
this.dispatchEvent(new CustomEvent(
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
this.dispatchEvent(new CustomEvent(UIK_SHELL_NAVIGATION_EVENT, {
|
|
45
|
+
detail: { from: previous, to: next, route },
|
|
46
|
+
}));
|
|
47
|
+
const globalWindow = globalThis.window;
|
|
48
|
+
if (globalWindow) {
|
|
49
|
+
globalWindow.dispatchEvent(new CustomEvent(UIK_SHELL_NAVIGATION_EVENT, {
|
|
50
|
+
detail: { from: previous, to: next, route },
|
|
51
|
+
}));
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
54
|
resolveInitialView(initialView) {
|
|
48
|
-
if (initialView && this.
|
|
55
|
+
if (initialView && this.routeRegistry.has(initialView))
|
|
49
56
|
return initialView;
|
|
50
|
-
const first = this.
|
|
57
|
+
const first = this.routeRegistry.values().next().value;
|
|
51
58
|
if (!first)
|
|
52
|
-
throw new Error('
|
|
59
|
+
throw new Error('UikShellRouter requires at least one route.');
|
|
53
60
|
return first.id;
|
|
54
61
|
}
|
|
55
62
|
resolveSubview(view, requested) {
|
|
56
|
-
const route = this.
|
|
63
|
+
const route = this.routeRegistry.get(view);
|
|
57
64
|
if (!route?.subviews?.length)
|
|
58
65
|
return undefined;
|
|
59
66
|
if (requested && route.subviews.includes(requested)) {
|
|
@@ -68,5 +75,5 @@ export class AppShellRouter extends EventTarget {
|
|
|
68
75
|
return fallback;
|
|
69
76
|
}
|
|
70
77
|
}
|
|
71
|
-
export const
|
|
78
|
+
export const createUikShellRouter = (config) => new UikShellRouter(config);
|
|
72
79
|
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/internal/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SVGTemplateResult } from 'lit';
|
|
2
|
+
type UikShellActivityBarIcon = string | SVGTemplateResult;
|
|
3
|
+
interface UikShellActivityBarItem {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
icon?: UikShellActivityBarIcon;
|
|
7
|
+
tooltip?: string;
|
|
8
|
+
}
|
|
9
|
+
export type { UikShellActivityBarIcon, UikShellActivityBarItem };
|
|
10
|
+
//# sourceMappingURL=uik-shell-activity-bar-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uik-shell-activity-bar-contract.d.ts","sourceRoot":"","sources":["../../../src/structures/uik-shell-activity-bar-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,KAAK,CAAC;AAE3C,KAAK,uBAAuB,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAE1D,UAAU,uBAAuB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,YAAY,EAAC,uBAAuB,EAAE,uBAAuB,EAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uik-shell-activity-bar-contract.js","sourceRoot":"","sources":["../../../src/structures/uik-shell-activity-bar-contract.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from 'lit';
|
|
2
|
+
import '@ismail-elkorchi/ui-primitives/uik-button';
|
|
3
|
+
import type { UikShellActivityBarItem } from './uik-shell-activity-bar-contract';
|
|
4
|
+
export type { UikShellActivityBarIcon, UikShellActivityBarItem } from './uik-shell-activity-bar-contract';
|
|
5
|
+
export declare class UikShellActivityBar extends LitElement {
|
|
6
|
+
accessor items: UikShellActivityBarItem[];
|
|
7
|
+
accessor activeId: string;
|
|
8
|
+
private accessor focusedId;
|
|
9
|
+
private slotController?;
|
|
10
|
+
connectedCallback(): void;
|
|
11
|
+
disconnectedCallback(): void;
|
|
12
|
+
firstUpdated(): void;
|
|
13
|
+
updated(changedProperties: PropertyValues<this>): void;
|
|
14
|
+
createRenderRoot(): HTMLElement;
|
|
15
|
+
private emitSelect;
|
|
16
|
+
private resolveDefaultFocusId;
|
|
17
|
+
private focusItemById;
|
|
18
|
+
private renderIcon;
|
|
19
|
+
private readonly onItemClick;
|
|
20
|
+
private readonly onItemFocus;
|
|
21
|
+
private readonly onItemKeydown;
|
|
22
|
+
private renderItem;
|
|
23
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
24
|
+
}
|
|
25
|
+
declare global {
|
|
26
|
+
interface HTMLElementTagNameMap {
|
|
27
|
+
'uik-shell-activity-bar': UikShellActivityBar;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=uik-shell-activity-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uik-shell-activity-bar.d.ts","sourceRoot":"","sources":["../../../src/structures/uik-shell-activity-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAsB,KAAK,cAAc,EAAC,MAAM,KAAK,CAAC;AAIxE,OAAO,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAC;AAG/E,YAAY,EAAC,uBAAuB,EAAE,uBAAuB,EAAC,MAAM,mCAAmC,CAAC;AAExG,qBACa,mBAAoB,SAAQ,UAAU;IACnB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,EAAE,CAAM;IACnD,QAAQ,CAAC,QAAQ,SAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IACzC,OAAO,CAAC,cAAc,CAAC,CAAyB;IAEvC,iBAAiB;IAajB,oBAAoB;IAKpB,YAAY;IAIZ,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;IAa/C,gBAAgB;IAIzB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAQ1B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAM1B;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CA0C5B;IAEF,OAAO,CAAC,UAAU;IA+DT,MAAM;CA8ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,wBAAwB,EAAE,mBAAmB,CAAC;KAC/C;CACF"}
|