@elaraai/east-ui 1.0.39 → 1.0.41
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/dist/src/collections/calendar/index.d.ts +275 -62
- package/dist/src/collections/calendar/index.d.ts.map +1 -1
- package/dist/src/collections/calendar/index.js +168 -51
- package/dist/src/collections/calendar/index.js.map +1 -1
- package/dist/src/collections/calendar/types.d.ts +228 -22
- package/dist/src/collections/calendar/types.d.ts.map +1 -1
- package/dist/src/collections/calendar/types.js +132 -18
- package/dist/src/collections/calendar/types.js.map +1 -1
- package/dist/src/collections/deck/index.d.ts +2229 -0
- package/dist/src/collections/deck/index.d.ts.map +1 -0
- package/dist/src/collections/deck/index.js +461 -0
- package/dist/src/collections/deck/index.js.map +1 -0
- package/dist/src/collections/deck/types.d.ts +327 -0
- package/dist/src/collections/deck/types.d.ts.map +1 -0
- package/dist/src/collections/deck/types.js +206 -0
- package/dist/src/collections/deck/types.js.map +1 -0
- package/dist/src/collections/index.d.ts +2 -0
- package/dist/src/collections/index.d.ts.map +1 -1
- package/dist/src/collections/index.js +2 -0
- package/dist/src/collections/index.js.map +1 -1
- package/dist/src/collections/value-tree/index.d.ts +380 -0
- package/dist/src/collections/value-tree/index.d.ts.map +1 -0
- package/dist/src/collections/value-tree/index.js +688 -0
- package/dist/src/collections/value-tree/index.js.map +1 -0
- package/dist/src/collections/value-tree/materialize.d.ts +65 -0
- package/dist/src/collections/value-tree/materialize.d.ts.map +1 -0
- package/dist/src/collections/value-tree/materialize.js +238 -0
- package/dist/src/collections/value-tree/materialize.js.map +1 -0
- package/dist/src/collections/value-tree/types.d.ts +324 -0
- package/dist/src/collections/value-tree/types.d.ts.map +1 -0
- package/dist/src/collections/value-tree/types.js +168 -0
- package/dist/src/collections/value-tree/types.js.map +1 -0
- package/dist/src/component.d.ts +1047 -61
- package/dist/src/component.d.ts.map +1 -1
- package/dist/src/component.js +97 -3
- package/dist/src/component.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +4 -3
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +3 -3
- package/dist/src/internal.js.map +1 -1
- package/dist/src/layout/splitter/index.d.ts +1 -0
- package/dist/src/layout/splitter/index.d.ts.map +1 -1
- package/dist/src/layout/splitter/index.js +2 -1
- package/dist/src/layout/splitter/index.js.map +1 -1
- package/dist/src/layout/splitter/types.d.ts +9 -0
- package/dist/src/layout/splitter/types.d.ts.map +1 -1
- package/dist/src/layout/splitter/types.js +4 -0
- package/dist/src/layout/splitter/types.js.map +1 -1
- package/dist/src/navigation/app/index.d.ts +135 -0
- package/dist/src/navigation/app/index.d.ts.map +1 -0
- package/dist/src/navigation/app/index.js +191 -0
- package/dist/src/navigation/app/index.js.map +1 -0
- package/dist/src/navigation/index.d.ts +1 -0
- package/dist/src/navigation/index.d.ts.map +1 -1
- package/dist/src/navigation/index.js +1 -0
- package/dist/src/navigation/index.js.map +1 -1
- package/dist/src/navigation/pages/types.d.ts +15 -1
- package/dist/src/navigation/pages/types.d.ts.map +1 -1
- package/dist/src/navigation/pages/types.js.map +1 -1
- package/dist/src/platform/slice/impl.js +2 -2
- package/dist/src/platform/slice/impl.js.map +1 -1
- package/dist/src/runtime/collections/calendar.d.ts +10 -5
- package/dist/src/runtime/collections/calendar.d.ts.map +1 -1
- package/dist/src/runtime/collections/calendar.js +10 -5
- package/dist/src/runtime/collections/calendar.js.map +1 -1
- package/dist/src/runtime/collections/deck.d.ts +1066 -0
- package/dist/src/runtime/collections/deck.d.ts.map +1 -0
- package/dist/src/runtime/collections/deck.js +54 -0
- package/dist/src/runtime/collections/deck.js.map +1 -0
- package/dist/src/runtime/collections/index.d.ts +2 -0
- package/dist/src/runtime/collections/index.d.ts.map +1 -1
- package/dist/src/runtime/collections/index.js +2 -0
- package/dist/src/runtime/collections/index.js.map +1 -1
- package/dist/src/runtime/collections/value-tree.d.ts +202 -0
- package/dist/src/runtime/collections/value-tree.d.ts.map +1 -0
- package/dist/src/runtime/collections/value-tree.js +49 -0
- package/dist/src/runtime/collections/value-tree.js.map +1 -0
- package/dist/src/runtime/navigation/app.d.ts +50 -0
- package/dist/src/runtime/navigation/app.d.ts.map +1 -0
- package/dist/src/runtime/navigation/app.js +51 -0
- package/dist/src/runtime/navigation/app.js.map +1 -0
- package/dist/src/runtime/navigation/index.d.ts +1 -0
- package/dist/src/runtime/navigation/index.d.ts.map +1 -1
- package/dist/src/runtime/navigation/index.js +1 -0
- package/dist/src/runtime/navigation/index.js.map +1 -1
- package/dist/test/collections/calendar.examples.d.ts +2 -0
- package/dist/test/collections/calendar.examples.d.ts.map +1 -1
- package/dist/test/collections/calendar.examples.js +74 -42
- package/dist/test/collections/calendar.examples.js.map +1 -1
- package/dist/test/collections/deck.examples.d.ts +8 -0
- package/dist/test/collections/deck.examples.d.ts.map +1 -0
- package/dist/test/collections/deck.examples.js +169 -0
- package/dist/test/collections/deck.examples.js.map +1 -0
- package/dist/test/collections/planner.examples.js +2 -2
- package/dist/test/collections/value-tree.examples.d.ts +10 -0
- package/dist/test/collections/value-tree.examples.d.ts.map +1 -0
- package/dist/test/collections/value-tree.examples.js +263 -0
- package/dist/test/collections/value-tree.examples.js.map +1 -0
- package/dist/test/display/image.examples.js +1 -1
- package/dist/test/display/image.examples.js.map +1 -1
- package/dist/test/layout/aligned-stack.examples.js +4 -4
- package/dist/test/layout/aligned-stack.examples.js.map +1 -1
- package/dist/test/layout/dock.examples.js +6 -6
- package/dist/test/layout/dock.examples.js.map +1 -1
- package/dist/test/layout/splitter.examples.d.ts +1 -0
- package/dist/test/layout/splitter.examples.d.ts.map +1 -1
- package/dist/test/layout/splitter.examples.js +11 -0
- package/dist/test/layout/splitter.examples.js.map +1 -1
- package/dist/test/navigation/app.examples.d.ts +22 -0
- package/dist/test/navigation/app.examples.d.ts.map +1 -0
- package/dist/test/navigation/app.examples.js +116 -0
- package/dist/test/navigation/app.examples.js.map +1 -0
- package/dist/test/navigation/nav-list.examples.js +2 -2
- package/dist/test/navigation/nav-list.examples.js.map +1 -1
- package/dist/test/overlays/drawer.examples.js +2 -2
- package/dist/test/overlays/drawer.examples.js.map +1 -1
- package/package.json +3 -3
|
@@ -130,7 +130,7 @@ function SplitterRoot(options) {
|
|
|
130
130
|
? East.value(variant(options.orientation, null), OrientationType)
|
|
131
131
|
: options.orientation)
|
|
132
132
|
: undefined;
|
|
133
|
-
const hasStyle = orientationValue || options.onResize !== undefined || options.onResizeStart !== undefined || options.onResizeEnd !== undefined;
|
|
133
|
+
const hasStyle = orientationValue || options.onResize !== undefined || options.onResizeStart !== undefined || options.onResizeEnd !== undefined || options.collapseBelow !== undefined;
|
|
134
134
|
return East.value(variant("Splitter", {
|
|
135
135
|
panels: panels_expr,
|
|
136
136
|
defaultSize: defaultSize,
|
|
@@ -139,6 +139,7 @@ function SplitterRoot(options) {
|
|
|
139
139
|
onResize: options.onResize !== undefined ? some(options.onResize) : none,
|
|
140
140
|
onResizeStart: options.onResizeStart !== undefined ? some(options.onResizeStart) : none,
|
|
141
141
|
onResizeEnd: options.onResizeEnd !== undefined ? some(options.onResizeEnd) : none,
|
|
142
|
+
collapseBelow: options.collapseBelow !== undefined ? some(options.collapseBelow) : none,
|
|
142
143
|
}, SplitterStyleType)) : none,
|
|
143
144
|
}), UIComponentType);
|
|
144
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/layout/splitter/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/layout/splitter/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,6 +74,9 @@ export type SplitterResizeDetailsType = typeof SplitterResizeDetailsType;
|
|
|
74
74
|
* @property onResize - Callback triggered when panel sizes change during drag
|
|
75
75
|
* @property onResizeStart - Callback triggered when drag starts
|
|
76
76
|
* @property onResizeEnd - Callback triggered when drag ends
|
|
77
|
+
* @property collapseBelow - Container width in CSS pixels below which the
|
|
78
|
+
* panels stack vertically instead of splitting (responsive fallback for
|
|
79
|
+
* narrow hosts); unset keeps the split at every width
|
|
77
80
|
*/
|
|
78
81
|
export declare const SplitterStyleType: StructType<{
|
|
79
82
|
readonly orientation: OptionType<import("@elaraai/east").VariantType<{
|
|
@@ -87,6 +90,7 @@ export declare const SplitterStyleType: StructType<{
|
|
|
87
90
|
readonly onResizeEnd: OptionType<FunctionType<[StructType<{
|
|
88
91
|
readonly size: ArrayType<FloatType>;
|
|
89
92
|
}>], NullType>>;
|
|
93
|
+
readonly collapseBelow: OptionType<FloatType>;
|
|
90
94
|
}>;
|
|
91
95
|
/**
|
|
92
96
|
* Type representing the Splitter style structure.
|
|
@@ -103,6 +107,8 @@ export type SplitterStyleType = typeof SplitterStyleType;
|
|
|
103
107
|
* @property onResize - Callback triggered when panel sizes change during drag
|
|
104
108
|
* @property onResizeStart - Callback triggered when drag starts
|
|
105
109
|
* @property onResizeEnd - Callback triggered when drag ends
|
|
110
|
+
* @property collapseBelow - Container width in CSS pixels below which the
|
|
111
|
+
* panels stack vertically instead of splitting
|
|
106
112
|
*/
|
|
107
113
|
export interface SplitterStyle {
|
|
108
114
|
/** Layout orientation (horizontal or vertical) */
|
|
@@ -113,5 +119,8 @@ export interface SplitterStyle {
|
|
|
113
119
|
onResizeStart?: SubtypeExprOrValue<FunctionType<[], NullType>>;
|
|
114
120
|
/** Callback triggered when drag ends */
|
|
115
121
|
onResizeEnd?: SubtypeExprOrValue<FunctionType<[SplitterResizeDetailsType], NullType>>;
|
|
122
|
+
/** Container width in CSS pixels below which the panels stack vertically
|
|
123
|
+
* instead of splitting (responsive fallback for narrow hosts). */
|
|
124
|
+
collapseBelow?: SubtypeExprOrValue<FloatType> | number;
|
|
116
125
|
}
|
|
117
126
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/layout/splitter/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,kBAAkB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB;;;;;;EAMjC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IAC/B,0EAA0E;IAC1E,EAAE,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACnC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxC,yCAAyC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC9C,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;CACtD;AAMD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;EAEpC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AAEzE
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/layout/splitter/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,kBAAkB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB;;;;;;EAMjC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IAC/B,0EAA0E;IAC1E,EAAE,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACnC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxC,yCAAyC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC9C,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;CACtD;AAMD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;EAEpC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AAEzE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;EAM5B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC1B,kDAAkD;IAClD,WAAW,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAAC;IACvE,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,yBAAyB,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnF,0CAA0C;IAC1C,aAAa,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,wCAAwC;IACxC,WAAW,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,yBAAyB,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtF;sEACkE;IAClE,aAAa,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;CAC1D"}
|
|
@@ -49,11 +49,15 @@ export const SplitterResizeDetailsType = StructType({
|
|
|
49
49
|
* @property onResize - Callback triggered when panel sizes change during drag
|
|
50
50
|
* @property onResizeStart - Callback triggered when drag starts
|
|
51
51
|
* @property onResizeEnd - Callback triggered when drag ends
|
|
52
|
+
* @property collapseBelow - Container width in CSS pixels below which the
|
|
53
|
+
* panels stack vertically instead of splitting (responsive fallback for
|
|
54
|
+
* narrow hosts); unset keeps the split at every width
|
|
52
55
|
*/
|
|
53
56
|
export const SplitterStyleType = StructType({
|
|
54
57
|
orientation: OptionType(OrientationType),
|
|
55
58
|
onResize: OptionType(FunctionType([SplitterResizeDetailsType], NullType)),
|
|
56
59
|
onResizeStart: OptionType(FunctionType([], NullType)),
|
|
57
60
|
onResizeEnd: OptionType(FunctionType([SplitterResizeDetailsType], NullType)),
|
|
61
|
+
collapseBelow: OptionType(FloatType),
|
|
58
62
|
});
|
|
59
63
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/layout/splitter/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,QAAQ,GAEX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;IAC7C,EAAE,EAAE,UAAU;IACd,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;IAC9B,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;IAC9B,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC;IACpC,gBAAgB,EAAE,UAAU,CAAC,WAAW,CAAC;CAC5C,CAAC,CAAC;AAiCH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;IAChD,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC;CAC7B,CAAC,CAAC;AAIH
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/layout/splitter/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,QAAQ,GAEX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;IAC7C,EAAE,EAAE,UAAU;IACd,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;IAC9B,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;IAC9B,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC;IACpC,gBAAgB,EAAE,UAAU,CAAC,WAAW,CAAC;CAC5C,CAAC,CAAC;AAiCH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;IAChD,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC;CAC7B,CAAC,CAAC;AAIH;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IACxC,WAAW,EAAE,UAAU,CAAC,eAAe,CAAC;IACxC,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,yBAAyB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzE,aAAa,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrD,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,yBAAyB,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5E,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC;CACvC,CAAC,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* `<App>` — the application shell (#367).
|
|
7
|
+
*
|
|
8
|
+
* Composes the first-class navigation primitives (`Navigation.bind` + `<NavList>`
|
|
9
|
+
* + `<Breadcrumb>` + `<Pages>`) into one surface: a collapsible nav rail, a
|
|
10
|
+
* breadcrumb app bar, an optional brand logo, app-bar slots, and the routed page
|
|
11
|
+
* body. The factory pre-builds `rail` / `breadcrumb` as plain `NavList` /
|
|
12
|
+
* `Breadcrumb` values that read the shared `nav` handle (so they re-evaluate on
|
|
13
|
+
* navigation when `<App>` is authored inside the enclosing `<Reactive>`), and
|
|
14
|
+
* `body` as a `<Pages>` value. The renderer is dumb layout + chrome (shell
|
|
15
|
+
* recipe, collapse state, `AppProvider` host-slot injection).
|
|
16
|
+
*
|
|
17
|
+
* Rail rows are derived from the `Navigation.config`: every argless (`NullType`)
|
|
18
|
+
* route that declares a `section` becomes a row (grouped, with its `icon` /
|
|
19
|
+
* `badge`), the active row is the current route, and a click navigates to it.
|
|
20
|
+
* Routes without a `section` (or with a payload) stay reachable but hidden — the
|
|
21
|
+
* deep pages you navigate to programmatically.
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
import { type ExprType, type SubtypeExprOrValue, ArrayType, StringType } from "@elaraai/east";
|
|
26
|
+
import { UIComponentType } from "../../component.js";
|
|
27
|
+
import { ImageSourceType } from "../../display/image/types.js";
|
|
28
|
+
import { DensityType } from "../../style.js";
|
|
29
|
+
import type { DensityLiteral } from "../../style.js";
|
|
30
|
+
import { type NavConfig, type NavRoutes, type BoundNav, type PagesHandlers } from "../pages/index.js";
|
|
31
|
+
/**
|
|
32
|
+
* TypeScript input for `App.Root` — the application shell.
|
|
33
|
+
*
|
|
34
|
+
* @typeParam R - The routes map (fixed by `nav` / `config`, so `pages` is
|
|
35
|
+
* contextually typed and exhaustive).
|
|
36
|
+
* @property nav - The handle from `Navigation.bind(config, key, initial)`, bound
|
|
37
|
+
* in the enclosing `<Reactive>`. Drives the rail, breadcrumb and body.
|
|
38
|
+
* @property config - The `Navigation.config` value — the single source of truth
|
|
39
|
+
* for each route's label / rail `icon` / `section` / `badge` (the bound `nav`
|
|
40
|
+
* handle carries no labels, so the shell needs the config to build the rail
|
|
41
|
+
* and breadcrumb).
|
|
42
|
+
* @property pages - One body per route — `($, payload, nav) => <…/>` (the same
|
|
43
|
+
* registry `<Pages>` takes).
|
|
44
|
+
* @property title - Header surface title / wordmark; also the logo's alt text.
|
|
45
|
+
* @property logo - Brand image source (`Image.url` / `Image.dataUri` /
|
|
46
|
+
* `Image.blob`); the shell renders + sizes the `<Image>` into the logo region.
|
|
47
|
+
* @property logoCollapsed - Optional source for the collapsed (56 px) rail mark;
|
|
48
|
+
* defaults to `logo`.
|
|
49
|
+
* @property collapsible - Whether the rail can collapse (default `true`).
|
|
50
|
+
* @property themeToggle - Add a built-in dark/light item to the app bar (default
|
|
51
|
+
* `false` — the host normally injects theme via `AppProvider`).
|
|
52
|
+
* @property barStart - Optional app-bar nodes rendered after the breadcrumb
|
|
53
|
+
* (leading cluster) — e.g. an environment switcher.
|
|
54
|
+
* @property barEnd - Optional app-bar nodes rendered at the trailing edge —
|
|
55
|
+
* `<IconButton>` / `<Menu>` / `<Avatar>` actions.
|
|
56
|
+
*/
|
|
57
|
+
export interface AppInput<R extends NavRoutes> {
|
|
58
|
+
/** The nav handle from `Navigation.bind(config, key, initial)`. */
|
|
59
|
+
nav: BoundNav<R>;
|
|
60
|
+
/** The `Navigation.config` value (labels / rail icons / sections). */
|
|
61
|
+
config: NavConfig<R>;
|
|
62
|
+
/** One body per route — `($, payload, nav) => <…/>`. */
|
|
63
|
+
pages: PagesHandlers<NoInfer<R>>;
|
|
64
|
+
/** Header surface title / wordmark; also the logo alt text. */
|
|
65
|
+
title?: SubtypeExprOrValue<StringType>;
|
|
66
|
+
/** Brand image source — the shell renders + sizes the `<Image>`. */
|
|
67
|
+
logo?: SubtypeExprOrValue<ImageSourceType>;
|
|
68
|
+
/** Collapsed-rail (56 px) mark source; defaults to `logo`. */
|
|
69
|
+
logoCollapsed?: SubtypeExprOrValue<ImageSourceType>;
|
|
70
|
+
/** Whether the rail can collapse (default `true`). */
|
|
71
|
+
collapsible?: boolean;
|
|
72
|
+
/** Add a built-in dark/light app-bar item (default `false`). */
|
|
73
|
+
themeToggle?: boolean;
|
|
74
|
+
/** App-bar density (default `comfortable`) — `comfortable` (2 rows) /
|
|
75
|
+
* `compact` (tighter 2 rows) / `condensed` (breadcrumb + title on one row,
|
|
76
|
+
* ~40 px shorter). Only the app bar changes; the rail + body stay constant.
|
|
77
|
+
* Falls back to an inherited density when unset. */
|
|
78
|
+
density?: SubtypeExprOrValue<DensityType> | DensityLiteral;
|
|
79
|
+
/** App-bar nodes after the breadcrumb (leading). */
|
|
80
|
+
barStart?: SubtypeExprOrValue<ArrayType<UIComponentType>>;
|
|
81
|
+
/** App-bar nodes at the trailing edge. */
|
|
82
|
+
barEnd?: SubtypeExprOrValue<ArrayType<UIComponentType>>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Creates an `App` — the application shell composed from the navigation
|
|
86
|
+
* primitives.
|
|
87
|
+
*
|
|
88
|
+
* @param input - The {@link AppInput} (`nav` + `config` + `pages` + shell options).
|
|
89
|
+
* @returns An East expression of type `UIComponentType`.
|
|
90
|
+
*
|
|
91
|
+
* @remarks
|
|
92
|
+
* Author `<App>` **inside** the enclosing `<Reactive>` that binds `nav`, so the
|
|
93
|
+
* rail's active row and the breadcrumb re-evaluate on navigation.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* import { East, NullType, StringType, StructType } from "@elaraai/east";
|
|
98
|
+
* import { App, Navigation, Reactive, Text, VStack, UIComponentType, Image } from "@elaraai/east-ui";
|
|
99
|
+
*
|
|
100
|
+
* const example = East.function([], UIComponentType, (_$) => {
|
|
101
|
+
* const routes = Navigation.config({
|
|
102
|
+
* overview: { value: NullType, label: "Overview", section: "Analyse", icon: { prefix: "fas", name: "gauge-high" } },
|
|
103
|
+
* audit: { value: NullType, label: "Audit", section: "Manage", icon: { prefix: "fas", name: "list-check" } },
|
|
104
|
+
* });
|
|
105
|
+
* return Reactive.Root(East.function([], UIComponentType, ($) => {
|
|
106
|
+
* const nav = $.let(Navigation.bind(routes, "app.route", [routes.Page.overview()]));
|
|
107
|
+
* return App.Root({
|
|
108
|
+
* nav,
|
|
109
|
+
* config: routes,
|
|
110
|
+
* title: "Acme Ops",
|
|
111
|
+
* logo: Image.dataUri("data:image/svg+xml,<svg/>"),
|
|
112
|
+
* pages: {
|
|
113
|
+
* overview: ($, _p, _nav) => VStack.Root([Text.Root("Overview")]),
|
|
114
|
+
* audit: ($, _p, _nav) => VStack.Root([Text.Root("Audit")]),
|
|
115
|
+
* },
|
|
116
|
+
* });
|
|
117
|
+
* }));
|
|
118
|
+
* });
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
declare function createApp<R extends NavRoutes>(input: AppInput<R>): ExprType<UIComponentType>;
|
|
122
|
+
/**
|
|
123
|
+
* The `App` namespace — the application shell.
|
|
124
|
+
*
|
|
125
|
+
* @remarks
|
|
126
|
+
* Authored as the `<App nav={…} config={…} pages={{…}} />` tag; `App.Root({ nav,
|
|
127
|
+
* config, pages, … })` is the underlying factory. Bind the handle once with
|
|
128
|
+
* `Navigation.bind` in the enclosing `<Reactive>` and pass the same `config`.
|
|
129
|
+
*/
|
|
130
|
+
export declare const App: {
|
|
131
|
+
/** Build an `App` application shell from `{ nav, config, pages, … }`. See {@link createApp}. */
|
|
132
|
+
readonly Root: typeof createApp;
|
|
133
|
+
};
|
|
134
|
+
export {};
|
|
135
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/navigation/app/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAEvB,SAAS,EAGT,UAAU,EAIb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAM7G;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,SAAS;IACzC,mEAAmE;IACnE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjB,sEAAsE;IACtE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACrB,wDAAwD;IACxD,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACvC,oEAAoE;IACpE,IAAI,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;yDAGqD;IACrD,OAAO,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC;IAC3D,oDAAoD;IACpD,QAAQ,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1D,0CAA0C;IAC1C,MAAM,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;CAC3D;AA6FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,iBAAS,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAuBrF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;IACZ,gGAAgG;;CAE1F,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* `<App>` — the application shell (#367).
|
|
7
|
+
*
|
|
8
|
+
* Composes the first-class navigation primitives (`Navigation.bind` + `<NavList>`
|
|
9
|
+
* + `<Breadcrumb>` + `<Pages>`) into one surface: a collapsible nav rail, a
|
|
10
|
+
* breadcrumb app bar, an optional brand logo, app-bar slots, and the routed page
|
|
11
|
+
* body. The factory pre-builds `rail` / `breadcrumb` as plain `NavList` /
|
|
12
|
+
* `Breadcrumb` values that read the shared `nav` handle (so they re-evaluate on
|
|
13
|
+
* navigation when `<App>` is authored inside the enclosing `<Reactive>`), and
|
|
14
|
+
* `body` as a `<Pages>` value. The renderer is dumb layout + chrome (shell
|
|
15
|
+
* recipe, collapse state, `AppProvider` host-slot injection).
|
|
16
|
+
*
|
|
17
|
+
* Rail rows are derived from the `Navigation.config`: every argless (`NullType`)
|
|
18
|
+
* route that declares a `section` becomes a row (grouped, with its `icon` /
|
|
19
|
+
* `badge`), the active row is the current route, and a click navigates to it.
|
|
20
|
+
* Routes without a `section` (or with a payload) stay reachable but hidden — the
|
|
21
|
+
* deep pages you navigate to programmatically.
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
import { East, ArrayType, FunctionType, NullType, StringType, variant, some, none, } from "@elaraai/east";
|
|
26
|
+
import { UIComponentType } from "../../component.js";
|
|
27
|
+
import { ImageSourceType } from "../../display/image/types.js";
|
|
28
|
+
import { DensityType } from "../../style.js";
|
|
29
|
+
import { NavList } from "../nav-list/index.js";
|
|
30
|
+
import { Breadcrumb, BreadcrumbItemType } from "../breadcrumb/index.js";
|
|
31
|
+
import { Pages } from "../pages/index.js";
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Rail — a NavList derived from the config
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/** Build the rail `NavList` value: config routes with a `section` grouped into
|
|
36
|
+
* sections, the active row = the current route, click = navigate to it. */
|
|
37
|
+
function buildRail(input) {
|
|
38
|
+
const { nav, config } = input;
|
|
39
|
+
// The current route tag drives the active row. Read inside the enclosing
|
|
40
|
+
// <Reactive> (where <App> is authored), so it re-evaluates on navigation.
|
|
41
|
+
const currentTag = nav.current().getTag();
|
|
42
|
+
const order = [];
|
|
43
|
+
const bySection = new Map();
|
|
44
|
+
for (const [name, cfg] of Object.entries(config.routes)) {
|
|
45
|
+
// Only argless routes with a section are rail rows (navigable from a
|
|
46
|
+
// bare click); payload / section-less routes stay hidden.
|
|
47
|
+
if (cfg.section === undefined || cfg.value !== NullType)
|
|
48
|
+
continue;
|
|
49
|
+
if (!bySection.has(cfg.section)) {
|
|
50
|
+
bySection.set(cfg.section, []);
|
|
51
|
+
order.push(cfg.section);
|
|
52
|
+
}
|
|
53
|
+
const item = {
|
|
54
|
+
key: name,
|
|
55
|
+
label: cfg.label,
|
|
56
|
+
active: currentTag.equals(name),
|
|
57
|
+
};
|
|
58
|
+
if (cfg.icon !== undefined)
|
|
59
|
+
item.icon = cfg.icon;
|
|
60
|
+
if (cfg.badge !== undefined)
|
|
61
|
+
item.badge = cfg.badge;
|
|
62
|
+
bySection.get(cfg.section).push(item);
|
|
63
|
+
}
|
|
64
|
+
const sections = order.map(label => ({ label, items: bySection.get(label) }));
|
|
65
|
+
return NavList.Root(sections, { surface: "shell", onSelect: buildRailOnSelect(input) });
|
|
66
|
+
}
|
|
67
|
+
/** Build the rail `onSelect(key)` — a static dispatch that navigates to the
|
|
68
|
+
* clicked argless route (`navigateTo([variant(route, null)])`). */
|
|
69
|
+
function buildRailOnSelect(input) {
|
|
70
|
+
const { nav, config } = input;
|
|
71
|
+
return East.function([StringType], NullType, ($, key) => {
|
|
72
|
+
for (const [name, cfg] of Object.entries(config.routes)) {
|
|
73
|
+
if (cfg.section === undefined || cfg.value !== NullType)
|
|
74
|
+
continue;
|
|
75
|
+
$.if(key.equals(name), $ => {
|
|
76
|
+
// `name` is a runtime string over the config, so `variant` can't
|
|
77
|
+
// narrow it to a route key — cast the argless route value.
|
|
78
|
+
const target = $.const(East.value([variant(name, null)], ArrayType(config.Route)));
|
|
79
|
+
$(nav.navigateTo(target));
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Breadcrumb — derived from the nav path stack
|
|
86
|
+
// ============================================================================
|
|
87
|
+
/** Build the breadcrumb `Breadcrumb` value from `nav.path()`: one crumb per
|
|
88
|
+
* path segment, its label from the config, the leaf marked current. */
|
|
89
|
+
function buildBreadcrumb(input) {
|
|
90
|
+
const { nav, config } = input;
|
|
91
|
+
// Per-route label arms (exhaustive over the config) — a `match` rather than a
|
|
92
|
+
// Dict lookup, matching the hand-wired app-shell example and avoiding a
|
|
93
|
+
// runtime dict.
|
|
94
|
+
const labelArms = {};
|
|
95
|
+
for (const [name, cfg] of Object.entries(config.routes))
|
|
96
|
+
labelArms[name] = () => cfg.label;
|
|
97
|
+
// One crumb per path segment: label via the route match, the leaf marked
|
|
98
|
+
// current, each crumb navigating back to its prefix. `.map`'s 3rd arg is the
|
|
99
|
+
// index, so the leaf (last segment) can be detected and prefixes sliced. Read
|
|
100
|
+
// inside the enclosing <Reactive> so the whole trail re-evaluates on navigation.
|
|
101
|
+
const items = nav.path().map(($, seg, i) => {
|
|
102
|
+
const isLeaf = $.let(East.equal(i, nav.path().size().subtract(1n)));
|
|
103
|
+
const prefixLen = $.let(i.add(1n));
|
|
104
|
+
const jump = $.const(East.function([], NullType, $ => {
|
|
105
|
+
$(nav.navigateTo(nav.path().slice(0n, prefixLen)));
|
|
106
|
+
}));
|
|
107
|
+
const label = seg.match(labelArms);
|
|
108
|
+
return $.const({
|
|
109
|
+
label,
|
|
110
|
+
current: some(isLeaf),
|
|
111
|
+
onClick: some(jump),
|
|
112
|
+
}, BreadcrumbItemType);
|
|
113
|
+
});
|
|
114
|
+
return Breadcrumb.Root(items, { leadingSeparator: true });
|
|
115
|
+
}
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// App factory
|
|
118
|
+
// ============================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Creates an `App` — the application shell composed from the navigation
|
|
121
|
+
* primitives.
|
|
122
|
+
*
|
|
123
|
+
* @param input - The {@link AppInput} (`nav` + `config` + `pages` + shell options).
|
|
124
|
+
* @returns An East expression of type `UIComponentType`.
|
|
125
|
+
*
|
|
126
|
+
* @remarks
|
|
127
|
+
* Author `<App>` **inside** the enclosing `<Reactive>` that binds `nav`, so the
|
|
128
|
+
* rail's active row and the breadcrumb re-evaluate on navigation.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* import { East, NullType, StringType, StructType } from "@elaraai/east";
|
|
133
|
+
* import { App, Navigation, Reactive, Text, VStack, UIComponentType, Image } from "@elaraai/east-ui";
|
|
134
|
+
*
|
|
135
|
+
* const example = East.function([], UIComponentType, (_$) => {
|
|
136
|
+
* const routes = Navigation.config({
|
|
137
|
+
* overview: { value: NullType, label: "Overview", section: "Analyse", icon: { prefix: "fas", name: "gauge-high" } },
|
|
138
|
+
* audit: { value: NullType, label: "Audit", section: "Manage", icon: { prefix: "fas", name: "list-check" } },
|
|
139
|
+
* });
|
|
140
|
+
* return Reactive.Root(East.function([], UIComponentType, ($) => {
|
|
141
|
+
* const nav = $.let(Navigation.bind(routes, "app.route", [routes.Page.overview()]));
|
|
142
|
+
* return App.Root({
|
|
143
|
+
* nav,
|
|
144
|
+
* config: routes,
|
|
145
|
+
* title: "Acme Ops",
|
|
146
|
+
* logo: Image.dataUri("data:image/svg+xml,<svg/>"),
|
|
147
|
+
* pages: {
|
|
148
|
+
* overview: ($, _p, _nav) => VStack.Root([Text.Root("Overview")]),
|
|
149
|
+
* audit: ($, _p, _nav) => VStack.Root([Text.Root("Audit")]),
|
|
150
|
+
* },
|
|
151
|
+
* });
|
|
152
|
+
* }));
|
|
153
|
+
* });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
function createApp(input) {
|
|
157
|
+
const { nav, pages } = input;
|
|
158
|
+
const body = Pages.Root({ nav, pages: pages });
|
|
159
|
+
const rail = buildRail(input);
|
|
160
|
+
const breadcrumb = buildBreadcrumb(input);
|
|
161
|
+
const emptyChildren = East.value([], ArrayType(UIComponentType));
|
|
162
|
+
return East.value(variant("App", {
|
|
163
|
+
title: input.title !== undefined ? some(input.title) : none,
|
|
164
|
+
logo: input.logo !== undefined ? some(input.logo) : none,
|
|
165
|
+
logoCollapsed: input.logoCollapsed !== undefined ? some(input.logoCollapsed) : none,
|
|
166
|
+
rail,
|
|
167
|
+
breadcrumb,
|
|
168
|
+
body,
|
|
169
|
+
barStart: input.barStart ?? emptyChildren,
|
|
170
|
+
barEnd: input.barEnd ?? emptyChildren,
|
|
171
|
+
collapsible: input.collapsible ?? true,
|
|
172
|
+
themeToggle: input.themeToggle ?? false,
|
|
173
|
+
density: input.density !== undefined
|
|
174
|
+
? some(typeof input.density === "string" ? East.value(variant(input.density, null), DensityType) : input.density)
|
|
175
|
+
: none,
|
|
176
|
+
navKey: nav.key,
|
|
177
|
+
}), UIComponentType);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The `App` namespace — the application shell.
|
|
181
|
+
*
|
|
182
|
+
* @remarks
|
|
183
|
+
* Authored as the `<App nav={…} config={…} pages={{…}} />` tag; `App.Root({ nav,
|
|
184
|
+
* config, pages, … })` is the underlying factory. Bind the handle once with
|
|
185
|
+
* `Navigation.bind` in the enclosing `<Reactive>` and pass the same `config`.
|
|
186
|
+
*/
|
|
187
|
+
export const App = {
|
|
188
|
+
/** Build an `App` application shell from `{ nav, config, pages, … }`. See {@link createApp}. */
|
|
189
|
+
Root: createApp,
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/navigation/app/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export { Breadcrumb } from "./breadcrumb/index.js";
|
|
6
6
|
export { NavList, NavListType, NavSectionType, NavItemType, type NavListStyle, type NavSectionInput, type NavItemInput, } from "./nav-list/index.js";
|
|
7
|
+
export { App, type AppInput } from "./app/index.js";
|
|
7
8
|
export { Navigation, Pages, Route, NavBindHandleType, navBindPlatformFn, NavBindPrimitives, routeVariantType, type NavRoutes, type NavRouteConfig, type NavConfig, type RouteVariantOf, type NavHandleType, type BoundNav, type PageConstructors, type PagesHandlers, type PagesInput, type RouteInput, } from "./pages/index.js";
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACH,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,UAAU,GAClB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACH,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACH,UAAU,EACV,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,UAAU,GAClB,MAAM,kBAAkB,CAAC"}
|
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export { Breadcrumb } from "./breadcrumb/index.js";
|
|
6
6
|
export { NavList, NavListType, NavSectionType, NavItemType, } from "./nav-list/index.js";
|
|
7
|
+
export { App } from "./app/index.js";
|
|
7
8
|
export { Navigation, Pages, Route, NavBindHandleType, navBindPlatformFn, NavBindPrimitives, routeVariantType, } from "./pages/index.js";
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACH,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,GAId,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GAWnB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACH,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,GAId,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAiB,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACH,UAAU,EACV,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GAWnB,MAAM,kBAAkB,CAAC"}
|
|
@@ -15,15 +15,29 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { ArrayType, BooleanType, FunctionType, IntegerType, NullType, StringType, StructType, VariantType, type EastType, type ExprType } from "@elaraai/east";
|
|
17
17
|
/**
|
|
18
|
-
* One route declaration: the page's payload East type plus its display label
|
|
18
|
+
* One route declaration: the page's payload East type plus its display label,
|
|
19
|
+
* and optional rail presentation (`<App>` reads these to build the nav rail —
|
|
20
|
+
* the config is the single source of truth for the rail as well as the routes).
|
|
19
21
|
*
|
|
20
22
|
* @typeParam V - The route's payload East type (`NullType` for an argless page).
|
|
21
23
|
* @property value - The East type of the value passed when navigating to this route.
|
|
22
24
|
* @property label - Human-readable label (breadcrumb / rail).
|
|
25
|
+
* @property icon - Optional leading Font Awesome icon for the `<App>` rail row (`{ prefix, name }`).
|
|
26
|
+
* @property section - Optional `<App>` rail section heading to group this route under; omit ⇒ the route is reachable but hidden from the rail (a deep page).
|
|
27
|
+
* @property badge - Optional trailing badge text for the `<App>` rail row (count / "New").
|
|
23
28
|
*/
|
|
24
29
|
export interface NavRouteConfig<V extends EastType = EastType> {
|
|
25
30
|
value: V;
|
|
26
31
|
label: string;
|
|
32
|
+
/** Optional leading Font Awesome icon for the `<App>` rail row. */
|
|
33
|
+
icon?: {
|
|
34
|
+
prefix: string;
|
|
35
|
+
name: string;
|
|
36
|
+
};
|
|
37
|
+
/** Optional `<App>` rail section heading; omit ⇒ reachable but hidden from the rail. */
|
|
38
|
+
section?: string;
|
|
39
|
+
/** Optional trailing badge text for the `<App>` rail row. */
|
|
40
|
+
badge?: string;
|
|
27
41
|
}
|
|
28
42
|
/** A routes map: route name → its {@link NavRouteConfig}. */
|
|
29
43
|
export type NavRoutes = Record<string, NavRouteConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/navigation/pages/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAEH,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EAChB,MAAM,eAAe,CAAC;AAMvB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/navigation/pages/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAEH,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EAChB,MAAM,eAAe,CAAC;AAMvB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACzD,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAEvD,sFAAsF;AACtF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,IAAI,WAAW,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;CAAE,CAAC,CAAC;AAEjG,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAIlF;AAMD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAyBlF;AAED,oDAAoD;AACpD,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,IAAI,WAAW,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;CAAE,CAAC,CAAC;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,SAAS,IAAI,UAAU,CAAC;IACxD,GAAG,EAAE,OAAO,UAAU,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,WAAW,CAAC,CAAC;IAC7C,GAAG,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,CAAC;IACvC,EAAE,EAAE,UAAU,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,QAAQ,CAAC;KAAE,CAAC,CAAC;IACnF,UAAU,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC;CAC3E,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAMvE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,oHAM7B,CAAC;AAcF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;IAC1B,4EAA4E;;IAE5E,qEAAqE;;IAErE,2EAA2E;;IAE3E,iFAAiF;;CAE3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/navigation/pages/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EACH,IAAI,EACJ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,GAGd,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/navigation/pages/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -282,8 +282,8 @@ function sliceBreakdownKey(state, _config, row) {
|
|
|
282
282
|
// shared by Slice.Legend and Slice.Chart).
|
|
283
283
|
// ---------------------------------------------------------------------------
|
|
284
284
|
export const SLICE_SERIES_PALETTE = [
|
|
285
|
-
"{colors.brand
|
|
286
|
-
"{colors.
|
|
285
|
+
"{colors.series.brand}",
|
|
286
|
+
"{colors.series.brandDeep}",
|
|
287
287
|
"{colors.status.warn}",
|
|
288
288
|
"{colors.status.info}",
|
|
289
289
|
"{colors.gray.500}",
|