@ojiepermana/angular 21.1.9 → 21.1.12
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 +13 -0
- package/brand/etos/README.md +16 -69
- package/etos/styles/color.css +52 -0
- package/etos/styles/layout.css +0 -165
- package/fesm2022/ojiepermana-angular-brand-etos.mjs +398 -234
- package/fesm2022/ojiepermana-angular-brand-etos.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-chart.mjs +72 -72
- package/fesm2022/ojiepermana-angular-chart.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-component.mjs +306 -296
- package/fesm2022/ojiepermana-angular-component.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout.mjs +75 -56
- package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation.mjs +279 -258
- package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme.mjs +3 -3
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
- package/generator/api/README.md +17 -10
- package/generator/api/bin/schematics/sdk/index.js +18 -0
- package/generator/api/bin/src/layout/per-domain.js +15 -7
- package/generator/api/bin/src/writer/index.js +24 -11
- package/package.json +1 -1
- package/theme/styles/themes/taildwind.css +3 -0
- package/types/ojiepermana-angular-brand-etos.d.ts +30 -53
- package/types/ojiepermana-angular-component.d.ts +2 -1
- package/types/ojiepermana-angular-layout.d.ts +18 -11
- package/types/ojiepermana-angular-navigation.d.ts +28 -15
|
@@ -23,10 +23,11 @@ declare class VerticalLayoutComponent {
|
|
|
23
23
|
readonly sidebarPosition: _angular_core.InputSignal<SidebarPosition>;
|
|
24
24
|
readonly sidebarMode: _angular_core.InputSignal<SidebarMode>;
|
|
25
25
|
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
26
|
-
protected readonly layoutWidth: _angular_core.Signal<"full" | "
|
|
26
|
+
protected readonly layoutWidth: _angular_core.Signal<"full" | "container" | "wide">;
|
|
27
27
|
protected readonly themeStyle: _angular_core.Signal<"default" | "sharp" | "brutal" | "soft">;
|
|
28
|
+
protected readonly isConstrainedWidth: _angular_core.Signal<boolean>;
|
|
29
|
+
protected readonly isWideWidth: _angular_core.Signal<boolean>;
|
|
28
30
|
protected readonly shellBorderWidth: _angular_core.Signal<"var(--border-width)" | null>;
|
|
29
|
-
protected readonly dividerBorderWidth: _angular_core.Signal<string>;
|
|
30
31
|
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
31
32
|
protected readonly frameClasses: _angular_core.Signal<string>;
|
|
32
33
|
protected readonly mainClasses: _angular_core.Signal<string>;
|
|
@@ -53,15 +54,17 @@ declare class HorizontalLayoutComponent {
|
|
|
53
54
|
private readonly theme;
|
|
54
55
|
readonly topbarAppearance: _angular_core.InputSignal<TopbarAppearance>;
|
|
55
56
|
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
56
|
-
protected readonly layoutWidth: _angular_core.Signal<"full" | "
|
|
57
|
+
protected readonly layoutWidth: _angular_core.Signal<"full" | "container" | "wide">;
|
|
57
58
|
protected readonly themeStyle: _angular_core.Signal<"default" | "sharp" | "brutal" | "soft">;
|
|
59
|
+
protected readonly isConstrainedWidth: _angular_core.Signal<boolean>;
|
|
60
|
+
protected readonly isWideWidth: _angular_core.Signal<boolean>;
|
|
58
61
|
protected readonly shellBorderWidth: _angular_core.Signal<"var(--border-width)" | null>;
|
|
59
62
|
protected readonly dividerBorderWidth: _angular_core.Signal<string>;
|
|
60
63
|
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
61
64
|
protected readonly frameClasses: _angular_core.Signal<string>;
|
|
62
65
|
protected readonly mainClasses: _angular_core.Signal<string>;
|
|
63
66
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HorizontalLayoutComponent, never>;
|
|
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],[
|
|
67
|
+
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],[topbar-start]", "[ui-layout-profile],[topbar-end]"], true, never>;
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
/**
|
|
@@ -83,15 +86,18 @@ declare class EmptyLayoutComponent {
|
|
|
83
86
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyLayoutComponent, "empty", never, {}, {}, never, never, true, never>;
|
|
84
87
|
}
|
|
85
88
|
|
|
86
|
-
declare const LAYOUT_MODES: readonly ["vertical", "horizontal"];
|
|
89
|
+
declare const LAYOUT_MODES: readonly ["vertical", "horizontal", "empty"];
|
|
87
90
|
type LayoutMode = (typeof LAYOUT_MODES)[number];
|
|
88
|
-
declare const LAYOUT_WIDTHS: readonly ["full", "
|
|
91
|
+
declare const LAYOUT_WIDTHS: readonly ["full", "container", "wide"];
|
|
89
92
|
type LayoutWidth = (typeof LAYOUT_WIDTHS)[number];
|
|
93
|
+
/** @deprecated Use `container` instead. */
|
|
94
|
+
type LegacyLayoutWidth = 'fixed';
|
|
95
|
+
type ConfiguredLayoutWidth = LayoutWidth | LegacyLayoutWidth;
|
|
90
96
|
interface MaterialLayoutConfig {
|
|
91
97
|
/** Initial layout mode. */
|
|
92
98
|
readonly mode?: LayoutMode;
|
|
93
99
|
/** Initial layout width. */
|
|
94
|
-
readonly width?:
|
|
100
|
+
readonly width?: ConfiguredLayoutWidth;
|
|
95
101
|
/** @deprecated Use `mode` instead. */
|
|
96
102
|
/** Initial layout mode. Defaults to `vertical`. */
|
|
97
103
|
readonly defaultMode?: LayoutMode;
|
|
@@ -110,14 +116,15 @@ declare const MATERIAL_LAYOUT_CONFIG: InjectionToken<MaterialLayoutConfig>;
|
|
|
110
116
|
declare const DEFAULT_MATERIAL_LAYOUT_CONFIG: ResolvedMaterialLayoutConfig;
|
|
111
117
|
declare function isLayoutMode(value: string | null | undefined): value is LayoutMode;
|
|
112
118
|
declare function isLayoutWidth(value: string | null | undefined): value is LayoutWidth;
|
|
119
|
+
declare function normalizeLayoutWidth(value: string | null | undefined): LayoutWidth | null;
|
|
113
120
|
|
|
114
121
|
declare class LayoutService {
|
|
115
122
|
private readonly document;
|
|
116
123
|
private readonly config;
|
|
117
124
|
private readonly _mode;
|
|
118
125
|
private readonly _width;
|
|
119
|
-
readonly mode: _angular_core.Signal<"vertical" | "horizontal">;
|
|
120
|
-
readonly width: _angular_core.Signal<"full" | "
|
|
126
|
+
readonly mode: _angular_core.Signal<"vertical" | "horizontal" | "empty">;
|
|
127
|
+
readonly width: _angular_core.Signal<"full" | "container" | "wide">;
|
|
121
128
|
constructor();
|
|
122
129
|
setMode(mode: LayoutMode): void;
|
|
123
130
|
toggleMode(): void;
|
|
@@ -136,5 +143,5 @@ declare function provideMaterialLayout(config?: MaterialLayoutConfig): Environme
|
|
|
136
143
|
|
|
137
144
|
declare const LAYOUT_VERSION = "0.0.1";
|
|
138
145
|
|
|
139
|
-
export { DEFAULT_MATERIAL_LAYOUT_CONFIG, EmptyLayoutComponent, HorizontalLayoutComponent, LAYOUT_MODES, LAYOUT_VERSION, LAYOUT_WIDTHS, LayoutService, MATERIAL_LAYOUT_CONFIG, VerticalLayoutComponent, isLayoutMode, isLayoutWidth, provideMaterialLayout };
|
|
140
|
-
export type { LayoutMode, LayoutWidth, MaterialLayoutConfig, ResolvedMaterialLayoutConfig };
|
|
146
|
+
export { DEFAULT_MATERIAL_LAYOUT_CONFIG, EmptyLayoutComponent, HorizontalLayoutComponent, LAYOUT_MODES, LAYOUT_VERSION, LAYOUT_WIDTHS, LayoutService, MATERIAL_LAYOUT_CONFIG, VerticalLayoutComponent, isLayoutMode, isLayoutWidth, normalizeLayoutWidth, provideMaterialLayout };
|
|
147
|
+
export type { ConfiguredLayoutWidth, LayoutMode, LayoutWidth, LegacyLayoutWidth, MaterialLayoutConfig, ResolvedMaterialLayoutConfig };
|
|
@@ -131,22 +131,29 @@ declare const DEFAULT_NAVIGATION_ID = "main";
|
|
|
131
131
|
* Signal-based global state untuk navigation (sidebar/topbar).
|
|
132
132
|
*
|
|
133
133
|
* Items disimpan dalam registry ber-key. Key default adalah `'main'`.
|
|
134
|
-
* Komponen `
|
|
134
|
+
* Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.
|
|
135
135
|
*/
|
|
136
136
|
declare class NavigationService {
|
|
137
|
+
private readonly doc;
|
|
137
138
|
private readonly router;
|
|
138
139
|
private readonly destroyRef;
|
|
140
|
+
private readonly persistedSidebarCollapsed;
|
|
139
141
|
/** Internal version counter — incremented on every registry mutation. */
|
|
140
142
|
private readonly _version;
|
|
141
143
|
/** Internal map of registered navigation trees. */
|
|
142
144
|
private readonly _registry;
|
|
145
|
+
private readonly _collapsed;
|
|
146
|
+
private readonly _hasStoredSidebarCollapse;
|
|
143
147
|
/**
|
|
144
148
|
* Backward-compatible accessor — returns items for the default (`'main'`) key.
|
|
145
149
|
* Prefer `getItems(id)` when working with named registries.
|
|
146
150
|
*/
|
|
147
151
|
readonly items: _angular_core.Signal<readonly NavigationItem[]>;
|
|
152
|
+
/** Sidebar appearance preference (`default` or `thin`). */
|
|
153
|
+
readonly sidebarAppearance: _angular_core.Signal<SidebarAppearance>;
|
|
154
|
+
readonly hasStoredSidebarCollapse: _angular_core.Signal<boolean>;
|
|
148
155
|
/** Sidebar collapsed (default ↔ thin) toggle untuk desktop. */
|
|
149
|
-
readonly collapsed: _angular_core.
|
|
156
|
+
readonly collapsed: _angular_core.Signal<boolean>;
|
|
150
157
|
/** Sheet drawer terbuka di mobile. */
|
|
151
158
|
readonly mobileOpen: _angular_core.WritableSignal<boolean>;
|
|
152
159
|
/** Set id grup / collapsable yang sedang terbuka. */
|
|
@@ -172,6 +179,8 @@ declare class NavigationService {
|
|
|
172
179
|
* Reactive terhadap perubahan registry.
|
|
173
180
|
*/
|
|
174
181
|
getItems(id: string): () => readonly NavigationItem[];
|
|
182
|
+
setSidebarAppearance(value: SidebarAppearance): void;
|
|
183
|
+
toggleSidebarAppearance(currentAppearance?: SidebarAppearance): void;
|
|
175
184
|
/** Toggle sidebar collapsed (default ↔ thin). */
|
|
176
185
|
toggleCollapsed(): void;
|
|
177
186
|
setCollapsed(value: boolean): void;
|
|
@@ -183,6 +192,8 @@ declare class NavigationService {
|
|
|
183
192
|
setGroupOpen(id: string, open: boolean): void;
|
|
184
193
|
/** Apakah id termasuk dalam active trail saat ini. */
|
|
185
194
|
isActive(id: string | undefined): boolean;
|
|
195
|
+
private readPersistedSidebarCollapsed;
|
|
196
|
+
private persistSidebarCollapsed;
|
|
186
197
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationService, never>;
|
|
187
198
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NavigationService>;
|
|
188
199
|
}
|
|
@@ -284,6 +295,7 @@ declare class SidebarComponent {
|
|
|
284
295
|
/** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
|
|
285
296
|
protected readonly resolvedItems: _angular_core.Signal<readonly NavigationItem[]>;
|
|
286
297
|
private readonly hovered;
|
|
298
|
+
private readonly suppressHoverUntilLeave;
|
|
287
299
|
private readonly drawerTpl;
|
|
288
300
|
private drawerRef;
|
|
289
301
|
private focusTrap;
|
|
@@ -291,27 +303,33 @@ declare class SidebarComponent {
|
|
|
291
303
|
/** True saat viewport `< md` (767.98px). */
|
|
292
304
|
protected readonly isMobileMedia: _angular_core.Signal<boolean>;
|
|
293
305
|
protected readonly isMobile: _angular_core.Signal<boolean>;
|
|
306
|
+
protected readonly resolvedCollapsed: _angular_core.Signal<boolean>;
|
|
307
|
+
protected readonly resolvedAppearance: _angular_core.Signal<SidebarAppearance>;
|
|
308
|
+
protected readonly hoverActive: _angular_core.Signal<boolean>;
|
|
294
309
|
protected readonly isExpanded: _angular_core.Signal<boolean>;
|
|
295
310
|
protected readonly isCompact: _angular_core.Signal<boolean>;
|
|
311
|
+
protected readonly toggleButtonLabel: _angular_core.Signal<"Expand sidebar" | "Collapse sidebar">;
|
|
296
312
|
constructor();
|
|
297
313
|
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
314
|
+
protected readonly headerClasses: _angular_core.Signal<string>;
|
|
315
|
+
protected readonly headerSlotClasses: _angular_core.Signal<string>;
|
|
316
|
+
protected readonly navClasses: _angular_core.Signal<string>;
|
|
317
|
+
protected readonly footerClasses: _angular_core.Signal<string>;
|
|
318
|
+
protected readonly footerSlotClasses: _angular_core.Signal<string>;
|
|
298
319
|
protected readonly innerClasses: _angular_core.Signal<string>;
|
|
299
320
|
protected onHoverEnter(): void;
|
|
300
321
|
protected onHoverLeave(): void;
|
|
322
|
+
protected toggleAppearance(event: MouseEvent): void;
|
|
301
323
|
/** Touch fallback: tap pada strip thin (ketika belum expanded) untuk expand. */
|
|
302
324
|
protected onHostClick(event: MouseEvent): void;
|
|
303
325
|
private openDrawer;
|
|
304
326
|
private closeDrawer;
|
|
305
327
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarComponent, never>;
|
|
306
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarComponent, "
|
|
328
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarComponent, "sidebar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoMobile": { "alias": "autoMobile"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; }, {}, never, ["[sidebar-header]", "[sidebar-footer]"], true, never>;
|
|
307
329
|
}
|
|
308
330
|
|
|
309
331
|
/**
|
|
310
332
|
* Horizontal navigation (topbar) — shadcn-styled.
|
|
311
|
-
*
|
|
312
|
-
* Variants:
|
|
313
|
-
* - `default`: horizontal list; item `collapsable` buka dropdown
|
|
314
|
-
* - `megamenu`: item `mega` buka panel full-width multi-kolom
|
|
315
333
|
*/
|
|
316
334
|
declare class TopbarComponent {
|
|
317
335
|
protected readonly nav: NavigationService;
|
|
@@ -330,35 +348,30 @@ declare class TopbarComponent {
|
|
|
330
348
|
/** Tampilkan hamburger di `< md` yang men-toggle mobile drawer sidebar. */
|
|
331
349
|
readonly showHamburger: _angular_core.InputSignal<boolean>;
|
|
332
350
|
readonly hamburgerLabel: _angular_core.InputSignal<string>;
|
|
333
|
-
protected readonly topbarHeight = "var(--layout-topbar-height)";
|
|
334
351
|
/** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
|
|
335
352
|
protected readonly resolvedItems: _angular_core.Signal<readonly NavigationItem[]>;
|
|
336
353
|
protected readonly openId: _angular_core.WritableSignal<string | null>;
|
|
337
354
|
private active;
|
|
338
355
|
private readonly dropdownTpl;
|
|
339
|
-
private readonly megaTpl;
|
|
340
356
|
constructor();
|
|
341
357
|
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
358
|
+
protected readonly endSlotClasses: _angular_core.Signal<string>;
|
|
342
359
|
protected asBasic(i: NavigationItem): NavigationBasicItem;
|
|
343
360
|
protected asCollapsable(i: NavigationItem): NavigationCollapsableItem;
|
|
344
361
|
protected asGroup(i: NavigationItem): NavigationGroupItem;
|
|
345
|
-
protected asMega(i: NavigationItem): NavigationMegaItem;
|
|
346
362
|
protected isItemActive(id: string | undefined): boolean;
|
|
347
|
-
protected megaGridClasses(columns?: number): string;
|
|
348
363
|
protected toggleDropdown(trigger: HTMLElement, item: NavigationItem): void;
|
|
349
364
|
protected openDropdown(trigger: HTMLElement, item: NavigationItem): void;
|
|
350
|
-
protected toggleMega(trigger: HTMLElement, item: NavigationItem): void;
|
|
351
|
-
protected openMega(trigger: HTMLElement, item: NavigationItem): void;
|
|
352
365
|
private attach;
|
|
353
366
|
protected closeAll(): void;
|
|
354
367
|
/** Menubar keyboard navigation: ArrowLeft/Right antar trigger, Home/End, ArrowDown fokus panel. */
|
|
355
368
|
protected onMenubarKeydown(event: KeyboardEvent): void;
|
|
356
|
-
/** Arrow-key navigation dalam dropdown
|
|
369
|
+
/** Arrow-key navigation dalam dropdown panel. */
|
|
357
370
|
protected onPanelKeydown(event: KeyboardEvent): void;
|
|
358
371
|
private collectPanelFocusables;
|
|
359
372
|
private focusFirstInPanel;
|
|
360
373
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TopbarComponent, never>;
|
|
361
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarComponent, "
|
|
374
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarComponent, "topbar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; "showHamburger": { "alias": "showHamburger"; "required": false; "isSignal": true; }; "hamburgerLabel": { "alias": "hamburgerLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[topbar-start]", "[topbar-end]"], true, never>;
|
|
362
375
|
}
|
|
363
376
|
|
|
364
377
|
declare const DemoNavigationData: NavigationItem[];
|