@ojiepermana/angular 21.0.8 → 21.1.2

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.
Files changed (39) hide show
  1. package/brand/etos/README.md +68 -0
  2. package/brand/etos/package.json +4 -0
  3. package/brand/etos/styles/index.css +15 -0
  4. package/brand/etos/styles/layout.css +175 -0
  5. package/{theme/styles/themes/brand/etos → brand/etos/styles}/style.css +18 -17
  6. package/collection.json +28 -28
  7. package/etos/package.json +4 -0
  8. package/etos/styles/color.css +21 -0
  9. package/etos/styles/index.css +15 -0
  10. package/etos/styles/layout.css +175 -0
  11. package/etos/styles/style.css +51 -0
  12. package/fesm2022/ojiepermana-angular-brand-etos.mjs +285 -0
  13. package/fesm2022/ojiepermana-angular-brand-etos.mjs.map +1 -0
  14. package/fesm2022/ojiepermana-angular-etos.mjs +12 -0
  15. package/fesm2022/ojiepermana-angular-etos.mjs.map +1 -0
  16. package/fesm2022/ojiepermana-angular-layout.mjs +22 -9
  17. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  18. package/fesm2022/ojiepermana-angular-navigation.mjs +32 -21
  19. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -1
  20. package/fesm2022/ojiepermana-angular.mjs +1 -0
  21. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  22. package/generator/api/schematics/init/schema.json +17 -17
  23. package/generator/api/schematics/ng-add/schema.json +13 -13
  24. package/generator/api/schematics/sdk/schema.json +17 -17
  25. package/generator/api/sdk.config.example.json +21 -21
  26. package/generator/guide/guide.config.example.json +8 -8
  27. package/generator/guide/schematics/build/schema.json +12 -12
  28. package/generator/guide/schematics/init/schema.json +17 -17
  29. package/package.json +13 -1
  30. package/theme/styles/etos.css +3 -35
  31. package/theme/styles/themes/library/style/brutal.css +1 -0
  32. package/theme/styles/themes/library/style/default.css +1 -0
  33. package/theme/styles/themes/library/style/sharp.css +1 -0
  34. package/theme/styles/themes/library/style/soft.css +1 -0
  35. package/types/ojiepermana-angular-brand-etos.d.ts +73 -0
  36. package/types/ojiepermana-angular-etos.d.ts +1 -0
  37. package/types/ojiepermana-angular-layout.d.ts +3 -2
  38. package/types/ojiepermana-angular-navigation.d.ts +2 -1
  39. /package/{theme/styles/themes/brand/etos → brand/etos/styles}/color.css +0 -0
@@ -7,6 +7,7 @@
7
7
  * - `@ojiepermana/angular/layout` — layout primitives (WIP)
8
8
  * - `@ojiepermana/angular/navigation` — navigation primitives (WIP)
9
9
  * - `@ojiepermana/angular/chart` — chart primitives (WIP)
10
+ * - `@ojiepermana/angular/etos` — Etos brand umbrella (theme/layout/navigation composition)
10
11
  * - `@ojiepermana/angular/generator/api` — OpenAPI → Angular SDK generator (schematics + config types)
11
12
  *
12
13
  * Consumers should import from the subpaths directly.
@@ -1 +1 @@
1
- {"version":3,"file":"ojiepermana-angular.mjs","sources":["../../../projects/angular/public-api.ts","../../../projects/angular/ojiepermana-angular.ts"],"sourcesContent":["/*\n * Public API Surface of @ojiepermana/angular (primary entry)\n *\n * Components and utilities are shipped via subpath entries:\n * - `@ojiepermana/angular/theme` — design tokens, CSS variables, `ThemeService`, `provideMaterialTheme`\n * - `@ojiepermana/angular/component` — shadcn/ui primitives on top of Material M3\n * - `@ojiepermana/angular/layout` — layout primitives (WIP)\n * - `@ojiepermana/angular/navigation` — navigation primitives (WIP)\n * - `@ojiepermana/angular/chart` — chart primitives (WIP)\n * - `@ojiepermana/angular/generator/api` — OpenAPI → Angular SDK generator (schematics + config types)\n *\n * Consumers should import from the subpaths directly.\n */\n\nexport const MATERIAL_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;AAYG;AAEI,MAAM,gBAAgB,GAAG;;ACdhC;;AAEG;;;;"}
1
+ {"version":3,"file":"ojiepermana-angular.mjs","sources":["../../../projects/angular/public-api.ts","../../../projects/angular/ojiepermana-angular.ts"],"sourcesContent":["/*\n * Public API Surface of @ojiepermana/angular (primary entry)\n *\n * Components and utilities are shipped via subpath entries:\n * - `@ojiepermana/angular/theme` — design tokens, CSS variables, `ThemeService`, `provideMaterialTheme`\n * - `@ojiepermana/angular/component` — shadcn/ui primitives on top of Material M3\n * - `@ojiepermana/angular/layout` — layout primitives (WIP)\n * - `@ojiepermana/angular/navigation` — navigation primitives (WIP)\n * - `@ojiepermana/angular/chart` — chart primitives (WIP)\n * - `@ojiepermana/angular/etos` — Etos brand umbrella (theme/layout/navigation composition)\n * - `@ojiepermana/angular/generator/api` — OpenAPI → Angular SDK generator (schematics + config types)\n *\n * Consumers should import from the subpaths directly.\n */\n\nexport const MATERIAL_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;AAaG;AAEI,MAAM,gBAAgB,GAAG;;ACfhC;;AAEG;;;;"}
@@ -1,19 +1,19 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
3
- "$id": "SdkInitSchema",
4
- "title": "Initialize SDK generator config",
5
- "type": "object",
6
- "properties": {
7
- "path": {
8
- "type": "string",
9
- "description": "Path (relative to workspace root) where the config file will be created.",
10
- "default": "config/sdk.config.json"
11
- },
12
- "force": {
13
- "type": "boolean",
14
- "description": "Overwrite the file if it already exists.",
15
- "default": false
16
- }
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "$id": "SdkInitSchema",
4
+ "title": "Initialize SDK generator config",
5
+ "type": "object",
6
+ "properties": {
7
+ "path": {
8
+ "type": "string",
9
+ "description": "Path (relative to workspace root) where the config file will be created.",
10
+ "default": "config/sdk.config.json"
17
11
  },
18
- "required": []
19
- }
12
+ "force": {
13
+ "type": "boolean",
14
+ "description": "Overwrite the file if it already exists.",
15
+ "default": false
16
+ }
17
+ },
18
+ "required": []
19
+ }
@@ -1,14 +1,14 @@
1
1
  {
2
- "$schema": "http://json-schema.org/schema",
3
- "$id": "NgAddSchema",
4
- "title": "@ojiepermana/angular ng-add options",
5
- "type": "object",
6
- "properties": {
7
- "skipInstall": {
8
- "type": "boolean",
9
- "default": false,
10
- "description": "Skip installing dependencies after updating package.json."
11
- }
12
- },
13
- "additionalProperties": false
14
- }
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "NgAddSchema",
4
+ "title": "@ojiepermana/angular ng-add options",
5
+ "type": "object",
6
+ "properties": {
7
+ "skipInstall": {
8
+ "type": "boolean",
9
+ "default": false,
10
+ "description": "Skip installing dependencies after updating package.json."
11
+ }
12
+ },
13
+ "additionalProperties": false
14
+ }
@@ -1,19 +1,19 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
3
- "$id": "SdkGeneratorSchema",
4
- "title": "Generate an Angular SDK from an OpenAPI spec",
5
- "type": "object",
6
- "properties": {
7
- "config": {
8
- "type": "string",
9
- "description": "Path to sdk.config.json (defaults to ./config/sdk.config.json at workspace root).",
10
- "default": "config/sdk.config.json"
11
- },
12
- "target": {
13
- "type": "string",
14
- "description": "Optional name/index of a specific target in the config to generate."
15
- }
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "$id": "SdkGeneratorSchema",
4
+ "title": "Generate an Angular SDK from an OpenAPI spec",
5
+ "type": "object",
6
+ "properties": {
7
+ "config": {
8
+ "type": "string",
9
+ "description": "Path to sdk.config.json (defaults to ./config/sdk.config.json at workspace root).",
10
+ "default": "config/sdk.config.json"
16
11
  },
17
- "required": [],
18
- "additionalProperties": false
19
- }
12
+ "target": {
13
+ "type": "string",
14
+ "description": "Optional name/index of a specific target in the config to generate."
15
+ }
16
+ },
17
+ "required": [],
18
+ "additionalProperties": false
19
+ }
@@ -1,22 +1,22 @@
1
1
  {
2
- "$schema": "./node_modules/@ojiepermana/angular/generator/api/schematics/sdk/schema.json",
3
- "targets": [
4
- {
5
- "input": "./openapi.yaml",
6
- "output": "./sdk",
7
- "mode": "standalone",
8
- "clientName": "Api",
9
- "rootUrl": "",
10
- "splitByDomain": false,
11
- "splitDepth": "service",
12
- "features": {
13
- "models": true,
14
- "operations": true,
15
- "services": true,
16
- "client": true,
17
- "metadata": true,
18
- "navigation": true
19
- }
20
- }
21
- ]
22
- }
2
+ "$schema": "./node_modules/@ojiepermana/angular/generator/api/schematics/sdk/schema.json",
3
+ "targets": [
4
+ {
5
+ "input": "./openapi.yaml",
6
+ "output": "./sdk",
7
+ "mode": "standalone",
8
+ "clientName": "Api",
9
+ "rootUrl": "",
10
+ "splitByDomain": false,
11
+ "splitDepth": "service",
12
+ "features": {
13
+ "models": true,
14
+ "operations": true,
15
+ "services": true,
16
+ "client": true,
17
+ "metadata": true,
18
+ "navigation": true
19
+ }
20
+ }
21
+ ]
22
+ }
@@ -1,9 +1,9 @@
1
1
  {
2
- "$schema": "./node_modules/@ojiepermana/angular/generator/guide/schematics/build/schema.json",
3
- "sourceDir": "./docs",
4
- "outputDir": "./projects/demo/library/src/app/docs",
5
- "routeFile": "doc.routes.ts",
6
- "componentPrefix": "Doc",
7
- "componentStyle": "none",
8
- "routeExportName": "DOC_ROUTES"
9
- }
2
+ "$schema": "./node_modules/@ojiepermana/angular/generator/guide/schematics/build/schema.json",
3
+ "sourceDir": "./docs",
4
+ "outputDir": "./projects/demo/library/src/app/docs",
5
+ "routeFile": "doc.routes.ts",
6
+ "componentPrefix": "Doc",
7
+ "componentStyle": "none",
8
+ "routeExportName": "DOC_ROUTES"
9
+ }
@@ -1,14 +1,14 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
3
- "$id": "GuideBuildSchema",
4
- "title": "Guide · build",
5
- "type": "object",
6
- "additionalProperties": false,
7
- "properties": {
8
- "config": {
9
- "type": "string",
10
- "description": "Path to the guide config file, relative to the workspace root.",
11
- "default": "config/guide.config.json"
12
- }
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "$id": "GuideBuildSchema",
4
+ "title": "Guide · build",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "config": {
9
+ "type": "string",
10
+ "description": "Path to the guide config file, relative to the workspace root.",
11
+ "default": "config/guide.config.json"
13
12
  }
14
- }
13
+ }
14
+ }
@@ -1,19 +1,19 @@
1
1
  {
2
- "$schema": "http://json-schema.org/draft-07/schema",
3
- "$id": "GuideInitSchema",
4
- "title": "Guide · init",
5
- "type": "object",
6
- "additionalProperties": false,
7
- "properties": {
8
- "path": {
9
- "type": "string",
10
- "description": "Destination path for the generated guide.config.json, relative to the workspace root.",
11
- "default": "config/guide.config.json"
12
- },
13
- "force": {
14
- "type": "boolean",
15
- "description": "Overwrite an existing guide.config.json.",
16
- "default": false
17
- }
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "$id": "GuideInitSchema",
4
+ "title": "Guide · init",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "path": {
9
+ "type": "string",
10
+ "description": "Destination path for the generated guide.config.json, relative to the workspace root.",
11
+ "default": "config/guide.config.json"
12
+ },
13
+ "force": {
14
+ "type": "boolean",
15
+ "description": "Overwrite an existing guide.config.json.",
16
+ "default": false
18
17
  }
19
- }
18
+ }
19
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ojiepermana/angular",
3
- "version": "21.0.8",
3
+ "version": "21.1.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/ojiepermana/angular.git"
@@ -65,6 +65,10 @@
65
65
  "sideEffects": false,
66
66
  "schematics": "./collection.json",
67
67
  "exports": {
68
+ "./etos/styles": "./etos/styles/index.css",
69
+ "./etos/styles/*": "./etos/styles/*",
70
+ "./brand/etos/styles": "./brand/etos/styles/index.css",
71
+ "./brand/etos/styles/*": "./brand/etos/styles/*",
68
72
  "./theme/styles": "./theme/styles/index.css",
69
73
  "./theme/styles/*": "./theme/styles/*",
70
74
  "./theme/tailwind/theme.css": "./theme/styles/themes/taildwind.css",
@@ -75,6 +79,10 @@
75
79
  "types": "./types/ojiepermana-angular.d.ts",
76
80
  "default": "./fesm2022/ojiepermana-angular.mjs"
77
81
  },
82
+ "./brand/etos": {
83
+ "types": "./types/ojiepermana-angular-brand-etos.d.ts",
84
+ "default": "./fesm2022/ojiepermana-angular-brand-etos.mjs"
85
+ },
78
86
  "./chart": {
79
87
  "types": "./types/ojiepermana-angular-chart.d.ts",
80
88
  "default": "./fesm2022/ojiepermana-angular-chart.mjs"
@@ -83,6 +91,10 @@
83
91
  "types": "./types/ojiepermana-angular-component.d.ts",
84
92
  "default": "./fesm2022/ojiepermana-angular-component.mjs"
85
93
  },
94
+ "./etos": {
95
+ "types": "./types/ojiepermana-angular-etos.d.ts",
96
+ "default": "./fesm2022/ojiepermana-angular-etos.mjs"
97
+ },
86
98
  "./generator/api": {
87
99
  "types": "./types/ojiepermana-angular-generator-api.d.ts",
88
100
  "default": "./fesm2022/ojiepermana-angular-generator-api.mjs"
@@ -1,38 +1,6 @@
1
1
  /**
2
- * @ojiepermana/angular/theme Etos brand stylesheet.
2
+ * Compatibility entry for the Etos brand stylesheet.
3
3
  *
4
- * Usage import once in the consumer app, **before** Tailwind:
5
- *
6
- * @import '@ojiepermana/angular/theme/etos.css';
7
- * @import 'tailwindcss';
8
- * @import '@ojiepermana/angular/theme/tailwind/theme.css';
9
- *
10
- * Includes the shared cascade layers, mode tokens, default library color/style
11
- * fallbacks, Etos brand overrides, shared semantic tokens, and Angular
12
- * Material bridge styles.
4
+ * The Etos implementation now lives under the brand umbrella package.
13
5
  */
14
- @import './themes/library/_layers.css';
15
-
16
- /* Layer 1: mode variants. */
17
- @import './themes/mode/index.css';
18
-
19
- /* Layer 2: default library color fallbacks. */
20
- @import './themes/library/color/index.css';
21
-
22
- /* Layer 3: default library style fallbacks. */
23
- @import './themes/library/style/index.css';
24
-
25
- /* Brand override: Etos color variant. */
26
- @import './themes/brand/etos/color.css';
27
-
28
- /* Brand override: Etos style variant. */
29
- @import './themes/brand/etos/style.css';
30
-
31
- /* Shared semantic and library tokens. */
32
- @import './themes/library/_tokens.css';
33
-
34
- /* Angular Material M3 bridge. */
35
- @import './themes/library/_material-overrides.css';
36
-
37
- /* Global component-facing styles. */
38
- @import './themes/library/_components.css';
6
+ @import '@ojiepermana/angular/etos/styles';
@@ -43,5 +43,6 @@
43
43
  --nav-badge-weight: 700;
44
44
  --letter-spacing: -0.01em;
45
45
  --space-unit: 0.25rem;
46
+ --layout-topbar-height: 3.5rem;
46
47
  }
47
48
  }
@@ -47,5 +47,6 @@
47
47
  --nav-badge-weight: 500;
48
48
  --letter-spacing: 0;
49
49
  --space-unit: 0.25rem;
50
+ --layout-topbar-height: 3rem;
50
51
  }
51
52
  }
@@ -43,5 +43,6 @@
43
43
  --nav-badge-weight: 500;
44
44
  --letter-spacing: 0;
45
45
  --space-unit: 0.25rem;
46
+ --layout-topbar-height: 3rem;
46
47
  }
47
48
  }
@@ -43,5 +43,6 @@
43
43
  --nav-badge-weight: 600;
44
44
  --letter-spacing: 0;
45
45
  --space-unit: 0.25rem;
46
+ --layout-topbar-height: 3.5rem;
46
47
  }
47
48
  }
@@ -0,0 +1,73 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { EnvironmentProviders } from '@angular/core';
3
+ import { MaterialLayoutConfig } from '@ojiepermana/angular/layout';
4
+ import { NavigationItem, TopbarAppearance, SidebarAppearance, SidebarPosition } from '@ojiepermana/angular/navigation';
5
+ import { MaterialThemeConfig, MaterialThemeFeature } from '@ojiepermana/angular/theme';
6
+
7
+ declare const ETOS_BRAND_NAME = "etos";
8
+ declare const ETOS_THEME_CONFIG: {
9
+ mode: "light";
10
+ brand: "etos";
11
+ };
12
+ declare const ETOS_LAYOUT_CONFIG: {
13
+ mode: "vertical";
14
+ width: "fixed";
15
+ };
16
+
17
+ interface EtosBrandOptions {
18
+ readonly theme?: MaterialThemeConfig;
19
+ readonly layout?: MaterialLayoutConfig;
20
+ readonly navigation?: NavigationItem[];
21
+ readonly navigationId?: string;
22
+ readonly materialDefaults?: boolean;
23
+ }
24
+ declare function provideEtosTheme(config?: MaterialThemeConfig, ...features: MaterialThemeFeature[]): EnvironmentProviders;
25
+ declare function provideEtosLayout(config?: MaterialLayoutConfig): EnvironmentProviders;
26
+ declare function provideEtosBrand(options?: EtosBrandOptions): EnvironmentProviders;
27
+
28
+ declare class EtosEmptyLayoutComponent {
29
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EtosEmptyLayoutComponent, never>;
30
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EtosEmptyLayoutComponent, "etos-empty-layout", never, {}, {}, never, never, true, never>;
31
+ }
32
+
33
+ declare class EtosHorizontalLayoutComponent {
34
+ private readonly layout;
35
+ readonly topbarAppearance: _angular_core.InputSignal<TopbarAppearance>;
36
+ readonly ariaLabel: _angular_core.InputSignal<string>;
37
+ protected readonly brandLayout = "etos-horizontal";
38
+ protected readonly layoutWidth: _angular_core.Signal<"fixed" | "full">;
39
+ protected readonly dividerBorderWidth: _angular_core.Signal<string>;
40
+ protected readonly hostClasses: _angular_core.Signal<string>;
41
+ protected readonly frameClasses: _angular_core.Signal<string>;
42
+ protected readonly mainClasses: _angular_core.Signal<string>;
43
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EtosHorizontalLayoutComponent, never>;
44
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EtosHorizontalLayoutComponent, "etos-horizontal-layout", never, { "topbarAppearance": { "alias": "topbarAppearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-layout-brand],[ui-topbar-start]", "[ui-layout-profile],[ui-topbar-end]"], true, never>;
45
+ }
46
+
47
+ declare class EtosLayoutComponent {
48
+ private readonly layout;
49
+ readonly ariaLabel: _angular_core.InputSignal<string>;
50
+ protected readonly layoutMode: _angular_core.Signal<"vertical" | "horizontal">;
51
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EtosLayoutComponent, never>;
52
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EtosLayoutComponent, "etos-layout", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-layout-brand],[ui-topbar-start]", "[ui-layout-profile],[ui-topbar-end]"], true, never>;
53
+ }
54
+
55
+ declare class EtosVerticalLayoutComponent {
56
+ private readonly layout;
57
+ readonly sidebarAppearance: _angular_core.InputSignal<SidebarAppearance>;
58
+ readonly sidebarPosition: _angular_core.InputSignal<SidebarPosition>;
59
+ readonly ariaLabel: _angular_core.InputSignal<string>;
60
+ protected readonly brandLayout = "etos-vertical";
61
+ protected readonly layoutWidth: _angular_core.Signal<"fixed" | "full">;
62
+ protected readonly dividerBorderWidth: _angular_core.Signal<string>;
63
+ protected readonly hostClasses: _angular_core.Signal<string>;
64
+ protected readonly frameClasses: _angular_core.Signal<string>;
65
+ protected readonly mainClasses: _angular_core.Signal<string>;
66
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EtosVerticalLayoutComponent, never>;
67
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EtosVerticalLayoutComponent, "etos-vertical-layout", never, { "sidebarAppearance": { "alias": "sidebarAppearance"; "required": false; "isSignal": true; }; "sidebarPosition": { "alias": "sidebarPosition"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
68
+ }
69
+
70
+ declare const ETOS_BRAND_VERSION = "0.0.1";
71
+
72
+ export { ETOS_BRAND_NAME, ETOS_BRAND_VERSION, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG, EtosEmptyLayoutComponent, EtosHorizontalLayoutComponent, EtosLayoutComponent, EtosVerticalLayoutComponent, provideEtosBrand, provideEtosLayout, provideEtosTheme };
73
+ export type { EtosBrandOptions };
@@ -0,0 +1 @@
1
+ export * from '@ojiepermana/angular/brand/etos';
@@ -29,13 +29,13 @@ declare class VerticalLayoutComponent {
29
29
  protected readonly dividerBorderWidth: _angular_core.Signal<string>;
30
30
  protected readonly hostClasses: _angular_core.Signal<string>;
31
31
  protected readonly frameClasses: _angular_core.Signal<string>;
32
- protected readonly mainClasses = "min-w-0 flex-1 overflow-auto";
32
+ protected readonly mainClasses: _angular_core.Signal<string>;
33
33
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<VerticalLayoutComponent, never>;
34
34
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<VerticalLayoutComponent, "vertical", never, { "sidebarAppearance": { "alias": "sidebarAppearance"; "required": false; "isSignal": true; }; "sidebarPosition": { "alias": "sidebarPosition"; "required": false; "isSignal": true; }; "sidebarMode": { "alias": "sidebarMode"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
35
35
  }
36
36
 
37
37
  /**
38
- * Horizontal layout — topbar (h-12) + main (scrollable).
38
+ * Horizontal layout — themed topbar + main (scrollable).
39
39
  *
40
40
  * Data navigasi diambil dari `NavigationService`.
41
41
  * Consumer app dapat memproyeksikan brand kiri dan profile kanan.
@@ -59,6 +59,7 @@ declare class HorizontalLayoutComponent {
59
59
  protected readonly dividerBorderWidth: _angular_core.Signal<string>;
60
60
  protected readonly hostClasses: _angular_core.Signal<string>;
61
61
  protected readonly frameClasses: _angular_core.Signal<string>;
62
+ protected readonly mainClasses: _angular_core.Signal<string>;
62
63
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HorizontalLayoutComponent, never>;
63
64
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<HorizontalLayoutComponent, "horizontal", never, { "topbarAppearance": { "alias": "topbarAppearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-layout-brand],[ui-topbar-start]", "[ui-layout-profile],[ui-topbar-end]"], true, never>;
64
65
  }
@@ -330,6 +330,7 @@ declare class TopbarComponent {
330
330
  /** Tampilkan hamburger di `< md` yang men-toggle mobile drawer sidebar. */
331
331
  readonly showHamburger: _angular_core.InputSignal<boolean>;
332
332
  readonly hamburgerLabel: _angular_core.InputSignal<string>;
333
+ protected readonly topbarHeight = "var(--layout-topbar-height)";
333
334
  /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
334
335
  protected readonly resolvedItems: _angular_core.Signal<readonly NavigationItem[]>;
335
336
  protected readonly openId: _angular_core.WritableSignal<string | null>;
@@ -343,7 +344,7 @@ declare class TopbarComponent {
343
344
  protected asGroup(i: NavigationItem): NavigationGroupItem;
344
345
  protected asMega(i: NavigationItem): NavigationMegaItem;
345
346
  protected isItemActive(id: string | undefined): boolean;
346
- protected megaColsClass(columns?: number): string;
347
+ protected megaGridClasses(columns?: number): string;
347
348
  protected toggleDropdown(trigger: HTMLElement, item: NavigationItem): void;
348
349
  protected openDropdown(trigger: HTMLElement, item: NavigationItem): void;
349
350
  protected toggleMega(trigger: HTMLElement, item: NavigationItem): void;