dalila 1.7.2 → 1.7.3
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.
|
@@ -464,6 +464,9 @@ function pageProps(pageHtml, pageTs) {
|
|
|
464
464
|
if (hasNamedExport(pageTs, 'validation')) {
|
|
465
465
|
props.push(`validation: ${moduleExport(pageTs, 'validation', { allowValue: true })}`);
|
|
466
466
|
}
|
|
467
|
+
if (hasNamedExport(pageTs, 'view')) {
|
|
468
|
+
props.push(`onMount: ${moduleExport(pageTs, 'view')}`);
|
|
469
|
+
}
|
|
467
470
|
}
|
|
468
471
|
else {
|
|
469
472
|
props.push(`view: (ctx) => fromHtml(${viewConst}, { data: ${routeDataExpr()}, scope: ctx.scope })`);
|
|
@@ -50,6 +50,7 @@ export interface RouteTable {
|
|
|
50
50
|
layout?: (ctx: RouteCtx, child: Node | DocumentFragment | Node[], data: any) => Node | DocumentFragment | Node[];
|
|
51
51
|
loader?: (ctx: RouteCtx) => Promise<any>;
|
|
52
52
|
preload?: (ctx: RouteCtx) => Promise<any>;
|
|
53
|
+
onMount?: (root: HTMLElement) => void;
|
|
53
54
|
pending?: (ctx: RouteCtx) => Node | DocumentFragment | Node[];
|
|
54
55
|
error?: (ctx: RouteCtx, error: unknown, data?: any) => Node | DocumentFragment | Node[];
|
|
55
56
|
notFound?: (ctx: RouteCtx) => Node | DocumentFragment | Node[];
|
package/dist/router/router.js
CHANGED
|
@@ -989,11 +989,13 @@ export function createRouter(config) {
|
|
|
989
989
|
function mountViewStack(matchStack, ctx, dataStack) {
|
|
990
990
|
try {
|
|
991
991
|
let content = null;
|
|
992
|
+
let leafRoute = null;
|
|
992
993
|
for (let i = matchStack.length - 1; i >= 0; i--) {
|
|
993
994
|
const match = matchStack[i];
|
|
994
995
|
const data = dataStack[i];
|
|
995
996
|
const route = match.route;
|
|
996
997
|
if (i === matchStack.length - 1) {
|
|
998
|
+
leafRoute = route;
|
|
997
999
|
if (!route.view) {
|
|
998
1000
|
console.warn(`[Dalila] Leaf route ${match.path} has no view function`);
|
|
999
1001
|
return;
|
|
@@ -1025,6 +1027,17 @@ export function createRouter(config) {
|
|
|
1025
1027
|
if (content) {
|
|
1026
1028
|
const nodes = Array.isArray(content) ? content : [content];
|
|
1027
1029
|
mountToOutlet(...nodes);
|
|
1030
|
+
// Call onMount lifecycle hook if present
|
|
1031
|
+
if (leafRoute?.onMount) {
|
|
1032
|
+
queueMicrotask(() => {
|
|
1033
|
+
try {
|
|
1034
|
+
leafRoute.onMount(outletElement);
|
|
1035
|
+
}
|
|
1036
|
+
catch (error) {
|
|
1037
|
+
console.error('[Dalila] Error in onMount lifecycle hook:', error);
|
|
1038
|
+
}
|
|
1039
|
+
});
|
|
1040
|
+
}
|
|
1028
1041
|
}
|
|
1029
1042
|
}
|
|
1030
1043
|
catch (error) {
|
package/package.json
CHANGED
|
@@ -6,37 +6,38 @@
|
|
|
6
6
|
* <link rel="stylesheet" href="dalila.css" />
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
@import "
|
|
10
|
-
@import "
|
|
11
|
-
@import "
|
|
12
|
-
@import "
|
|
13
|
-
@import "
|
|
14
|
-
@import "
|
|
15
|
-
@import "
|
|
16
|
-
@import "
|
|
17
|
-
@import "
|
|
18
|
-
@import "
|
|
19
|
-
@import "
|
|
20
|
-
@import "
|
|
21
|
-
@import "
|
|
22
|
-
@import "
|
|
23
|
-
@import "
|
|
24
|
-
@import "
|
|
25
|
-
@import "
|
|
26
|
-
@import "
|
|
27
|
-
@import "
|
|
28
|
-
@import "
|
|
29
|
-
@import "
|
|
30
|
-
@import "
|
|
31
|
-
@import "
|
|
32
|
-
@import "
|
|
33
|
-
@import "
|
|
34
|
-
@import "
|
|
35
|
-
@import "
|
|
36
|
-
@import "
|
|
37
|
-
@import "
|
|
38
|
-
@import "
|
|
39
|
-
@import "
|
|
40
|
-
@import "
|
|
41
|
-
@import "
|
|
42
|
-
@import "
|
|
9
|
+
@import "../dalila-core/dalila-core.css";
|
|
10
|
+
@import "../tokens/tokens.css";
|
|
11
|
+
@import "../typography/typography.css";
|
|
12
|
+
@import "../layout/layout.css";
|
|
13
|
+
@import "../button/button.css";
|
|
14
|
+
@import "../input/input.css";
|
|
15
|
+
@import "../checkbox/checkbox.css";
|
|
16
|
+
@import "../radio/radio.css";
|
|
17
|
+
@import "../slider/slider.css";
|
|
18
|
+
@import "../toggle/toggle.css";
|
|
19
|
+
@import "../form/form.css";
|
|
20
|
+
@import "../card/card.css";
|
|
21
|
+
@import "../badge/badge.css";
|
|
22
|
+
@import "../chip/chip.css";
|
|
23
|
+
@import "../avatar/avatar.css";
|
|
24
|
+
@import "../alert/alert.css";
|
|
25
|
+
@import "../toast/toast.css";
|
|
26
|
+
@import "../tooltip/tooltip.css";
|
|
27
|
+
@import "../popover/popover.css";
|
|
28
|
+
@import "../dropdown/dropdown.css";
|
|
29
|
+
@import "../combobox/combobox.css";
|
|
30
|
+
@import "../tabs/tabs.css";
|
|
31
|
+
@import "../accordion/accordion.css";
|
|
32
|
+
@import "../collapsible/collapsible.css";
|
|
33
|
+
@import "../dialog/dialog.css";
|
|
34
|
+
@import "../drawer/drawer.css";
|
|
35
|
+
@import "../table/table.css";
|
|
36
|
+
@import "../pagination/pagination.css";
|
|
37
|
+
@import "../breadcrumb/breadcrumb.css";
|
|
38
|
+
@import "../separator/separator.css";
|
|
39
|
+
@import "../skeleton/skeleton.css";
|
|
40
|
+
@import "../spinner/spinner.css";
|
|
41
|
+
@import "../empty-state/empty-state.css";
|
|
42
|
+
@import "../calendar/calendar.css";
|
|
43
|
+
@import "../dropzone/dropzone.css";
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
* <link rel="stylesheet" href="dalila-core.css" />
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
@import "
|
|
10
|
-
@import "
|
|
11
|
-
@import "
|
|
12
|
-
@import "
|
|
13
|
-
@import "
|
|
14
|
-
@import "
|
|
9
|
+
@import "../tokens/tokens.css";
|
|
10
|
+
@import "../typography/typography.css";
|
|
11
|
+
@import "../layout/layout.css";
|
|
12
|
+
@import "../button/button.css";
|
|
13
|
+
@import "../input/input.css";
|
|
14
|
+
@import "../form/form.css";
|