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[];
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dalila",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
4
4
  "description": "DOM-first reactive framework based on signals",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -6,37 +6,38 @@
6
6
  * <link rel="stylesheet" href="dalila.css" />
7
7
  */
8
8
 
9
- @import "./tokens.css";
10
- @import "./typography.css";
11
- @import "./layout.css";
12
- @import "./button.css";
13
- @import "./input.css";
14
- @import "./checkbox.css";
15
- @import "./radio.css";
16
- @import "./slider.css";
17
- @import "./toggle.css";
18
- @import "./form.css";
19
- @import "./card.css";
20
- @import "./badge.css";
21
- @import "./chip.css";
22
- @import "./avatar.css";
23
- @import "./alert.css";
24
- @import "./toast.css";
25
- @import "./tooltip.css";
26
- @import "./popover.css";
27
- @import "./dropdown.css";
28
- @import "./combobox.css";
29
- @import "./tabs.css";
30
- @import "./accordion.css";
31
- @import "./collapsible.css";
32
- @import "./dialog.css";
33
- @import "./drawer.css";
34
- @import "./table.css";
35
- @import "./pagination.css";
36
- @import "./breadcrumb.css";
37
- @import "./separator.css";
38
- @import "./skeleton.css";
39
- @import "./spinner.css";
40
- @import "./empty-state.css";
41
- @import "./calendar.css";
42
- @import "./dropzone.css";
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 "./tokens.css";
10
- @import "./typography.css";
11
- @import "./layout.css";
12
- @import "./button.css";
13
- @import "./input.css";
14
- @import "./form.css";
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";