@frame-kit/ui-ng-patterns 0.2.15 → 0.2.17
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frame-kit/ui-ng-patterns",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17",
|
|
4
4
|
"description": "Opinionated, dashboard-ready Angular component patterns composed from @frame-kit/ui-ng.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@angular/forms": "^21.2.0",
|
|
18
18
|
"@angular/platform-browser": "^21.2.0",
|
|
19
19
|
"@angular/router": "^21.2.0",
|
|
20
|
-
"@frame-kit/ui-ng": "0.2.
|
|
20
|
+
"@frame-kit/ui-ng": "0.2.17",
|
|
21
21
|
"rxjs": "^7.0.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false,
|
|
@@ -1411,8 +1411,17 @@ interface NavSegment {
|
|
|
1411
1411
|
*/
|
|
1412
1412
|
declare class DashboardNavComponent {
|
|
1413
1413
|
readonly groups: _angular_core.InputSignal<DashboardNavGroup[]>;
|
|
1414
|
-
/**
|
|
1415
|
-
|
|
1414
|
+
/**
|
|
1415
|
+
* Icon-rail mode, passed through to every segment. Left `null` — the
|
|
1416
|
+
* default — each segment reads the collapse state of an ancestor
|
|
1417
|
+
* `fk-app-shell`, which is what `fk-dashboard-layout` is. Set it
|
|
1418
|
+
* explicitly only to drive the rail without a shell present.
|
|
1419
|
+
*
|
|
1420
|
+
* It defaults to inheriting rather than to `false` because the failure is
|
|
1421
|
+
* silent otherwise: a nav told nothing renders its expanded rows into a
|
|
1422
|
+
* collapsed rail and they are squashed, with no error to follow.
|
|
1423
|
+
*/
|
|
1424
|
+
readonly collapsed: _angular_core.InputSignal<boolean | null>;
|
|
1416
1425
|
/** Project `[navSlotBefore]` content immediately before this group. */
|
|
1417
1426
|
readonly slotBeforeGroupId: _angular_core.InputSignal<string | null>;
|
|
1418
1427
|
/** Project default `<ng-content>` immediately after this group. */
|
|
@@ -1420,6 +1429,9 @@ declare class DashboardNavComponent {
|
|
|
1420
1429
|
readonly className: _angular_core.InputSignal<string>;
|
|
1421
1430
|
readonly id: _angular_core.InputSignal<string | null>;
|
|
1422
1431
|
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
1432
|
+
private readonly shell;
|
|
1433
|
+
/** The rail state in force: this input, else the ancestor shell's. */
|
|
1434
|
+
readonly isCollapsed: _angular_core.Signal<boolean>;
|
|
1423
1435
|
/**
|
|
1424
1436
|
* Visible groups sliced into render segments, each carrying a single-group
|
|
1425
1437
|
* `SidebarNavModel`.
|
|
@@ -1437,6 +1449,14 @@ declare class DashboardNavComponent {
|
|
|
1437
1449
|
readonly classes: _angular_core.Signal<string>;
|
|
1438
1450
|
get hostClass(): string;
|
|
1439
1451
|
get hostId(): string | null;
|
|
1452
|
+
/**
|
|
1453
|
+
* The sidebar is a navigation landmark, so a screen reader can jump to it
|
|
1454
|
+
* rather than walking the page to find it. The host is the element that
|
|
1455
|
+
* holds every link, so the role belongs here; without it the `aria-label`
|
|
1456
|
+
* below names nothing, and a page whose only other landmark is a breadcrumb
|
|
1457
|
+
* offers no way to reach the navigation at all.
|
|
1458
|
+
*/
|
|
1459
|
+
readonly hostRole = "navigation";
|
|
1440
1460
|
get hostAriaLabel(): string | null;
|
|
1441
1461
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardNavComponent, never>;
|
|
1442
1462
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardNavComponent, "fk-dashboard-nav", never, { "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "slotBeforeGroupId": { "alias": "slotBeforeGroupId"; "required": false; "isSignal": true; }; "slotAfterGroupId": { "alias": "slotAfterGroupId"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[navSlotBefore]", "*"], true, never>;
|
|
@@ -1514,5 +1534,78 @@ declare class DashboardLayoutComponent {
|
|
|
1514
1534
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardLayoutComponent, "fk-dashboard-layout", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "sidenavWidth": { "alias": "sidenavWidth"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; "endMode": { "alias": "endMode"; "required": false; "isSignal": true; }; "endWidth": { "alias": "endWidth"; "required": false; "isSignal": true; }; "endCollapsedWidth": { "alias": "endCollapsedWidth"; "required": false; "isSignal": true; }; "pageLoading": { "alias": "pageLoading"; "required": false; "isSignal": true; }; "toggleAriaLabel": { "alias": "toggleAriaLabel"; "required": false; "isSignal": true; }; "menuAriaLabel": { "alias": "menuAriaLabel"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["[layoutBanner]", "[layoutBrand]", "[layoutToggleIcon]", "[layoutAside]", "[layoutAsideFooter]", "[layoutContentPanel]", "[layoutMenuIcon]", "[layoutTopbarStart]", "[layoutTopbarEnd]", "*", "[layoutPageLoader]", "[layoutEnd]", "[layoutFooter]"], true, never>;
|
|
1515
1535
|
}
|
|
1516
1536
|
|
|
1517
|
-
|
|
1537
|
+
/**
|
|
1538
|
+
* A whole dashboard shell in one element: the collapsing aside and its
|
|
1539
|
+
* toggle, the brand block at its head, the icon-rail navigation, and the
|
|
1540
|
+
* banner, topbar, panel and footer slots a product hangs its own content
|
|
1541
|
+
* off.
|
|
1542
|
+
*
|
|
1543
|
+
* `fk-dashboard-layout` and `fk-dashboard-nav` remain the pieces to reach
|
|
1544
|
+
* for when a product wants a different arrangement. This is the arrangement
|
|
1545
|
+
* most products want, assembled once: every consumer that builds it by hand
|
|
1546
|
+
* repeats the same half-dozen bindings, and the ones that matter fail
|
|
1547
|
+
* quietly when forgotten rather than loudly.
|
|
1548
|
+
*
|
|
1549
|
+
* Everything a product supplies is projected on through, so nothing is
|
|
1550
|
+
* given up by using it: banners, a trailing panel, a second nav column
|
|
1551
|
+
* beside the page, switchers pinned into the rail.
|
|
1552
|
+
*
|
|
1553
|
+
* @example
|
|
1554
|
+
* ```html
|
|
1555
|
+
* <fk-dashboard-chrome
|
|
1556
|
+
* #chrome
|
|
1557
|
+
* brandText="Acme"
|
|
1558
|
+
* brandDescription="Admin"
|
|
1559
|
+
* brandHref="/"
|
|
1560
|
+
* [navGroups]="nav()"
|
|
1561
|
+
* >
|
|
1562
|
+
* <fk-icon-badge chromeBrandMark name="acme-mark" shape="rounded" size="sm" />
|
|
1563
|
+
* <nav chromeTopbarStart>…</nav>
|
|
1564
|
+
* <fk-user-menu chromeTopbarEnd … />
|
|
1565
|
+
* <router-outlet />
|
|
1566
|
+
* </fk-dashboard-chrome>
|
|
1567
|
+
* ```
|
|
1568
|
+
*/
|
|
1569
|
+
declare class DashboardChromeComponent {
|
|
1570
|
+
/** Product name beside the mark. */
|
|
1571
|
+
readonly brandText: _angular_core.InputSignal<string>;
|
|
1572
|
+
/** The line under it — which product this is. */
|
|
1573
|
+
readonly brandDescription: _angular_core.InputSignal<string>;
|
|
1574
|
+
/** Where the brand block navigates. */
|
|
1575
|
+
readonly brandHref: _angular_core.InputSignal<string>;
|
|
1576
|
+
/** Ordered nav groups, already filtered to what this reader may open. */
|
|
1577
|
+
readonly navGroups: _angular_core.InputSignal<DashboardNavGroup[]>;
|
|
1578
|
+
/** Group id the `[chromeNavBefore]` content is placed in front of. */
|
|
1579
|
+
readonly navSlotBeforeGroupId: _angular_core.InputSignal<string | null>;
|
|
1580
|
+
/** Group id the `[chromeNavAfter]` content follows. */
|
|
1581
|
+
readonly navSlotAfterGroupId: _angular_core.InputSignal<string | null>;
|
|
1582
|
+
/** Aside behaviour. `icon` leaves a rail behind when collapsed. */
|
|
1583
|
+
readonly mode: _angular_core.InputSignal<AppShellMode>;
|
|
1584
|
+
/** Trailing-panel behaviour, for a product that projects `[chromeEnd]`. */
|
|
1585
|
+
readonly endMode: _angular_core.InputSignal<AppShellMode>;
|
|
1586
|
+
/** Covers the content column while a routed page resolves. */
|
|
1587
|
+
readonly pageLoading: _angular_core.InputSignal<boolean>;
|
|
1588
|
+
readonly toggleAriaLabel: _angular_core.InputSignal<string>;
|
|
1589
|
+
readonly menuAriaLabel: _angular_core.InputSignal<string>;
|
|
1590
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1591
|
+
private readonly layout;
|
|
1592
|
+
/**
|
|
1593
|
+
* Whether the aside is collapsed to its rail. For projected content that
|
|
1594
|
+
* has to follow it — a switcher pinned into the nav shrinks to its glyph
|
|
1595
|
+
* the same way the rows do.
|
|
1596
|
+
*/
|
|
1597
|
+
collapsed(): boolean;
|
|
1598
|
+
/** Whether the trailing panel is open. */
|
|
1599
|
+
endOpen(): boolean;
|
|
1600
|
+
/** Collapse the aside to its rail. */
|
|
1601
|
+
closeSidenav(): void;
|
|
1602
|
+
/** Open the trailing panel. */
|
|
1603
|
+
openEnd(): void;
|
|
1604
|
+
/** Close the trailing panel. */
|
|
1605
|
+
closeEnd(): void;
|
|
1606
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardChromeComponent, never>;
|
|
1607
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardChromeComponent, "fk-dashboard-chrome", never, { "brandText": { "alias": "brandText"; "required": false; "isSignal": true; }; "brandDescription": { "alias": "brandDescription"; "required": false; "isSignal": true; }; "brandHref": { "alias": "brandHref"; "required": false; "isSignal": true; }; "navGroups": { "alias": "navGroups"; "required": false; "isSignal": true; }; "navSlotBeforeGroupId": { "alias": "navSlotBeforeGroupId"; "required": false; "isSignal": true; }; "navSlotAfterGroupId": { "alias": "navSlotAfterGroupId"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "endMode": { "alias": "endMode"; "required": false; "isSignal": true; }; "pageLoading": { "alias": "pageLoading"; "required": false; "isSignal": true; }; "toggleAriaLabel": { "alias": "toggleAriaLabel"; "required": false; "isSignal": true; }; "menuAriaLabel": { "alias": "menuAriaLabel"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, {}, never, ["[chromeBanner]", "[chromeBrandMark]", "[chromeNavBefore]", "[chromeNavAfter]", "[chromeTopbarStart]", "[chromeTopbarEnd]", "*", "[chromeContentPanel]", "[chromeEnd]", "[chromeFooter]"], true, never>;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
export { BackNavComponent, ColumnsComponent, ContentColumnComponent, ContentColumnHeadlineComponent, ContentDetailHeaderComponent, ContentDetailPageComponent, ContentPageSectionComponent, ContentRowComponent, ContentSplitLayoutComponent, ContextSwitcherComponent, DashboardChromeComponent, DashboardLayoutComponent, DashboardNavComponent, DetailPanelComponent, DialogFooterComponent, DialogHeaderComponent, DialogShellComponent, InlineLoaderComponent, OnboardingGuideComponent, PageHeaderComponent, SearchBarLayoutComponent, SidebarNavComponent, SidebarNavItemDirective, TableEmptyStateComponent };
|
|
1518
1611
|
export type { ColumnsEmptyTracks, ContextSwitcherColumn, ContextSwitcherIconTone, ContextSwitcherOption, ContextSwitcherSelection, ContextSwitcherSublabelTone, DashboardNavChild, DashboardNavGroup, DashboardNavItem, DialogConfirmVariant, DialogHeaderTint, OnboardingStep, OnboardingSubstep, OnboardingSubstepToggle, SidebarNavChild, SidebarNavGroup, SidebarNavItem, SidebarNavLink, SidebarNavModel };
|