@memberjunction/ng-ui-components 6.1.0-edge.0 → 6.1.0-edge.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/README.md +42 -2
  2. package/dist/lib/left-nav/left-nav.component.d.ts +142 -3
  3. package/dist/lib/left-nav/left-nav.component.d.ts.map +1 -1
  4. package/dist/lib/left-nav/left-nav.component.js +391 -117
  5. package/dist/lib/left-nav/left-nav.component.js.map +1 -1
  6. package/dist/lib/tabs/tab-chrome-guard.d.ts +14 -0
  7. package/dist/lib/tabs/tab-chrome-guard.d.ts.map +1 -0
  8. package/dist/lib/tabs/tab-chrome-guard.js +36 -0
  9. package/dist/lib/tabs/tab-chrome-guard.js.map +1 -0
  10. package/dist/lib/tabs/tab-list.directive.d.ts +93 -0
  11. package/dist/lib/tabs/tab-list.directive.d.ts.map +1 -0
  12. package/dist/lib/tabs/tab-list.directive.js +202 -0
  13. package/dist/lib/tabs/tab-list.directive.js.map +1 -0
  14. package/dist/lib/tabs/tabs.scss +242 -0
  15. package/dist/lib/workspace-tabs/workspace-card.component.d.ts +63 -0
  16. package/dist/lib/workspace-tabs/workspace-card.component.d.ts.map +1 -0
  17. package/dist/lib/workspace-tabs/workspace-card.component.js +256 -0
  18. package/dist/lib/workspace-tabs/workspace-card.component.js.map +1 -0
  19. package/dist/lib/workspace-tabs/workspace-tab-store.d.ts +47 -0
  20. package/dist/lib/workspace-tabs/workspace-tab-store.d.ts.map +1 -0
  21. package/dist/lib/workspace-tabs/workspace-tab-store.js +112 -0
  22. package/dist/lib/workspace-tabs/workspace-tab-store.js.map +1 -0
  23. package/dist/lib/workspace-tabs/workspace-tab-strip.component.d.ts +75 -0
  24. package/dist/lib/workspace-tabs/workspace-tab-strip.component.d.ts.map +1 -0
  25. package/dist/lib/workspace-tabs/workspace-tab-strip.component.js +252 -0
  26. package/dist/lib/workspace-tabs/workspace-tab-strip.component.js.map +1 -0
  27. package/dist/lib/workspace-tabs/workspace-tabs.types.d.ts +40 -0
  28. package/dist/lib/workspace-tabs/workspace-tabs.types.d.ts.map +1 -0
  29. package/dist/lib/workspace-tabs/workspace-tabs.types.js +13 -0
  30. package/dist/lib/workspace-tabs/workspace-tabs.types.js.map +1 -0
  31. package/dist/lib/workspace-tabs/workspace-tip.directive.d.ts +34 -0
  32. package/dist/lib/workspace-tabs/workspace-tip.directive.d.ts.map +1 -0
  33. package/dist/lib/workspace-tabs/workspace-tip.directive.js +123 -0
  34. package/dist/lib/workspace-tabs/workspace-tip.directive.js.map +1 -0
  35. package/dist/public-api.d.ts +7 -0
  36. package/dist/public-api.d.ts.map +1 -1
  37. package/dist/public-api.js +7 -0
  38. package/dist/public-api.js.map +1 -1
  39. package/package.json +5 -5
package/README.md CHANGED
@@ -26,7 +26,7 @@ Components attach styles one of three ways, and one of them needs host cooperati
26
26
 
27
27
  1. **Inline `styles` in the component** (most components) — nothing to do.
28
28
  2. **`styleUrls` compiled into the component** (`page-header`, `slide-panel`) — nothing to do.
29
- 3. **Global stylesheets shipped as assets** — the form controls and overlay chrome (`button`, `dialog`, `dropdown`, `combobox`, `input`, `datepicker`, `splitter`, `accordion`, `window`, `chip`, `switch`/`progress`) ship their `.scss` to `dist` and expect the **host application** to import them globally.
29
+ 3. **Global stylesheets shipped as assets** — the form controls and overlay chrome (`button`, `dialog`, `dropdown`, `combobox`, `input`, `datepicker`, `splitter`, `accordion`, `window`, `chip`, `switch`/`progress`, `tabs`) ship their `.scss` to `dist` and expect the **host application** to import them globally.
30
30
 
31
31
  **If your app runs inside MJ Explorer (`explorer-app`), category 3 is already handled** — the shell imports all of them. A standalone host must add these to its global stylesheet:
32
32
 
@@ -42,8 +42,11 @@ Components attach styles one of three ways, and one of them needs host cooperati
42
42
  @import '@memberjunction/ng-ui-components/dist/lib/splitter/splitter';
43
43
  @import '@memberjunction/ng-ui-components/dist/lib/accordion/accordion';
44
44
  @import '@memberjunction/ng-ui-components/dist/lib/window/window';
45
+ @import '@memberjunction/ng-ui-components/dist/lib/tabs/tabs';
45
46
  ```
46
47
 
48
+ `tabs` is the shared `.mj-tabs*` chrome consumed by BOTH `mj-workspace-tab-strip` (this package) and `mj-tabstrip` (`@memberjunction/ng-tabstrip`) — without it either strip renders as unstyled divs, so a standalone host using tab strips must include it.
49
+
47
50
  All colors resolve through `--mj-*` semantic tokens, so light/dark theming requires zero component-level work.
48
51
 
49
52
  ## Forms integration
@@ -159,11 +162,48 @@ Inputs: `Padding` (default true; false removes the gutter), `Flex` (default fals
159
162
  The same pair for **sub-pages inside a left-nav shell** — card-like chrome, responsive padding. Header-interior adds `Role`/`AriaLabel` inputs and the same three slots.
160
163
 
161
164
  ### `mj-left-nav` / `mj-left-nav-content` — MJLeftNavComponent
162
- Canonical left rail: sections, flat + tree items (badges, descriptions, disabled), off-canvas drawer at ≤700px. Inputs: `Sections: MJLeftNavSection[]`, `ActiveId`, `ExpandedIds`, `Width` (240), `MobileTitle`. Outputs: `ItemClicked`, `ItemToggled`. Slots: `[header]`, `[footer]`. Pair with `mj-left-nav-content`, which provides `Loading`/`Error` states and hides (not destroys) content while busy.
165
+ Canonical left rail: sections, flat + tree items (badges, descriptions, disabled), off-canvas drawer at ≤700px. Inputs: `Sections: MJLeftNavSection[]`, `ActiveId`, `ExpandedIds`, `Width` (240), `MobileTitle`, `IconOnly` (per-item tooltips + accessible names for an externally-narrowed rail). Outputs: `ItemClicked`, `ItemToggled`. Slots: `[header]`, `[footer]`. Pair with `mj-left-nav-content`, which provides `Loading`/`Error` states and hides (not destroys) content while busy.
166
+
167
+ **Desktop collapse (opt-in):** set `[Collapsible]="true"` and bind `[(Collapsed)]` — the rail renders a locked-position double-angle toggle chip and, when collapsed, becomes a `CollapsedWidth` (60px) icons-only strip: labels visually hidden but kept in the a11y tree, section labels folded to divider lines, badges docked on the icon corner, item tooltips auto-enabled. The component owns presentation only — the consumer owns + persists the state (same split as `ExpandedIds`). Desktop-only; the ≤700px drawer is unaffected. There is deliberately no hover-to-peek.
168
+
169
+ ```html
170
+ <mj-left-nav [Sections]="sections" [ActiveId]="activeId" [Collapsible]="true"
171
+ [(Collapsed)]="railCollapsed" (CollapsedChange)="persist($event)" />
172
+ ```
173
+
174
+ Collapsing a rail whose content is richer than a flat icon list:
175
+
176
+ | Content | Collapsed behavior |
177
+ |---|---|
178
+ | **Tree sections** (`item.children`) | Fold to top-level items only — no chevrons, no indentation, children hidden. A top-level item paints active (`aria-current="true"`) when the active item is one of its descendants, so the rail still shows where you are. `ExpandedIds` is untouched, so the tree returns exactly as the user left it on expand. |
179
+ | **Items with no `icon`** | Render an uppercase monogram from the label, so an item never collapses to a blank-but-clickable button. |
180
+ | **`[header]` / `[footer]` slots** | **Yours to handle.** The rail can't restyle projected content, so a wide header overflows a 60px strip — bind the same collapsed flag in your consumer and project a compact variant. |
163
181
 
164
182
  ### `mj-tab-nav` — MJTabNavComponent
165
183
  Data-driven tab strip. `Tabs: TabConfig[]` (`key`, `label`, `icon?`, `badge?`, `badgeVariant?: 'default'|'error'|'warning'|'success'`), `ActiveKey`, `(TabChange)` emits the key.
166
184
 
185
+ ### `mjTabList` — MJTabListDirective
186
+ The ARIA tabs keyboard contract, shared by every MJ tab strip. Apply to the element holding the tabs; mark each tab `role="tab"` and keep `aria-selected` truthful. Owns `role="tablist"`, the roving `tabindex` (one stop per strip), Arrow/Home/End navigation with focus-follows-selection, Enter/Space activation, and Delete/Backspace close. Emits `(TabActivateRequested)` / `(TabCloseRequested)` with the tab's index in the full list plus the element, so index-addressed and id-addressed hosts both map it onto their own model. Skips `display:none` tabs; leaves keys alone inside editable content.
187
+
188
+ ### `mj-workspace-card` / `mj-workspace-tab-strip` — MJWorkspaceCardComponent, MJWorkspaceTabStripComponent
189
+ The **workspace** pattern: a screen where the user builds several drafts in parallel, each in a browser-style tab (open, switch, drag-reorder via CDK, close, dirty-dot, rejected/complete states). `MJWorkspaceTabStore<TState>` is the pure state machine (open-activates-existing, neighbour activation on close, reorder, lifecycle + dirty tracking — exhaustively unit-tested); `mj-workspace-tab-strip` is dumb presentation over it (renders tabs, emits intent); `mj-workspace-card` is the slotted frame — card surface, tab-strip row, `[workspaceHeader]` identity band, a single scrolling body (default slot), and an opt-in standardized footer (`ShowFooter`: primary confirm + save-as-draft + discard, only the labels vary; `[workspaceFooterNote]` caption slot). Tabs carry an opaque `State` the host owns — no app types in the framework. v1 is session-scoped (no DB persistence).
190
+
191
+ The card is a **query container** (`container-type: size`): size content inside it with `cqh`/`cqw`, never `vh`/`vw` (viewport units break the moment the card sits in a split or a smaller pane).
192
+
193
+ ```html
194
+ <mj-workspace-card [Tabs]="store.Tabs" [ActiveId]="store.ActiveId" NewTabLabel="New entry"
195
+ [ShowFooter]="true" ConfirmLabel="Create entry"
196
+ (TabSelected)="store.Activate($event)" (TabClosed)="onClose($event)"
197
+ (NewTabRequested)="openBlank()" (TabReordered)="store.Reorder($event.previousIndex, $event.currentIndex)"
198
+ (Confirm)="create()" (SaveDraft)="keep()" (Discard)="discard()">
199
+ <div workspaceHeader><!-- per-workshop identity badges --></div>
200
+ <!-- the workshop's form/body -->
201
+ </mj-workspace-card>
202
+ ```
203
+
204
+ ### `mjTip` — MJWorkspaceTipDirective
205
+ Delayed (~450ms still-pointer), non-interactive, token-themed hover tooltip that by default shows only when the host is truncated (`scrollWidth > clientWidth`); `mjTipAlways` forces it for hosts whose truncation can't be measured (a native `<select>`). Used by the workspace tab strip for full labels on capped tabs.
206
+
167
207
  ### `mj-page-search` — MJPageSearchComponent
168
208
  Compact toolbar search input. `Placeholder`, `Value`, `Icon`; `(ValueChange)` on input.
169
209
 
@@ -1,4 +1,4 @@
1
- import { EventEmitter } from '@angular/core';
1
+ import { EventEmitter, OnDestroy } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  /**
4
4
  * A single item in an `<mj-left-nav>`.
@@ -86,7 +86,12 @@ export interface MJLeftNavSection {
86
86
  * a `@media` override) so the in-flow section switcher stacks above the content
87
87
  * pane rather than competing with it for horizontal space.
88
88
  */
89
- export declare class MJLeftNavComponent {
89
+ export declare class MJLeftNavComponent implements OnDestroy {
90
+ /**
91
+ * DOM id of the `<aside>`, so the collapse toggle's `aria-expanded` can name the region it
92
+ * expands via `aria-controls`. Per-instance because a page may host more than one rail.
93
+ */
94
+ readonly NavRegionId: string;
90
95
  /**
91
96
  * The sections + items that make up the rail. Sections render top-to-bottom
92
97
  * in array order; items inside each section render in array order.
@@ -103,6 +108,140 @@ export declare class MJLeftNavComponent {
103
108
  * the rail becomes a fixed-width off-canvas drawer.
104
109
  */
105
110
  Width: number;
111
+ /**
112
+ * Set by a consumer that has visually collapsed the rail to an icons-only strip (via `Width` plus
113
+ * its own CSS hiding the labels). When true, each item gains a native `title` tooltip AND an
114
+ * `aria-label` carrying its full text.
115
+ *
116
+ * Why it is opt-in rather than always-on:
117
+ * - **Tooltip**: with labels visible, a tooltip that just repeats the label is redundant noise on
118
+ * every hover. Icon-only rails everywhere (VS Code's activity bar, Slack, Linear, Jira, Figma)
119
+ * show one; expanded rails do not.
120
+ * - **aria-label**: when the label IS visible it already names the button, and adding an identical
121
+ * aria-label is at best a no-op. When the consumer's CSS hides `.mj-left-nav__text`, the button's
122
+ * accessible name goes EMPTY — a screen reader announces "button" with no destination. That is
123
+ * the hole this closes.
124
+ *
125
+ * Leaving it false reproduces the previous markup exactly, so existing consumers are unaffected.
126
+ */
127
+ IconOnly: boolean;
128
+ /**
129
+ * Opt-in desktop collapse: renders a compact double-angle toggle chip at the top of the rail and,
130
+ * when {@link Collapsed}, presents the rail as an icons-only strip ({@link CollapsedWidth} wide) —
131
+ * labels visually hidden but kept in the a11y tree, section labels folded to divider lines,
132
+ * badges docked on the icon corner, and per-item tooltips/aria auto-enabled.
133
+ *
134
+ * The component owns the PRESENTATION only — the consumer owns the STATE (bind `[(Collapsed)]`
135
+ * and persist it however the app persists preferences), the same split as `ExpandedIds`.
136
+ * Desktop-only: ≤700px the rail is the off-canvas drawer and the toggle hides.
137
+ *
138
+ * Two things to know when the rail's content is richer than a flat icon list:
139
+ * - **Tree sections fold to their top level while collapsed** (see {@link ShowTreeStructure});
140
+ * a top-level item stands in as active for an active descendant, and the tree returns intact
141
+ * on expand. Items with no `icon` render a monogram so they stay visible and hittable.
142
+ * - **The `[header]` / `[footer]` slots are yours.** The rail can't restyle projected content,
143
+ * so a wide header (logo lockup + wordmark, a filter box) will overflow a `CollapsedWidth`
144
+ * strip. Bind the same collapsed flag in the consumer and project a compact variant.
145
+ *
146
+ * Deliberately NOT included: hover-to-peek (auto-expand on pointer hover) — removed by ruling
147
+ * (2026-07-30): a rail that expands when the pointer grazes it moves the target the user was
148
+ * aiming at. Deliberate toggling beats clever hovering.
149
+ */
150
+ Collapsible: boolean;
151
+ /** Whether the rail is currently collapsed to icons. Two-way bindable via `[(Collapsed)]`. */
152
+ Collapsed: boolean;
153
+ /** Emitted when the user clicks the collapse toggle. Consumer updates + persists the state. */
154
+ CollapsedChange: EventEmitter<boolean>;
155
+ /**
156
+ * Width of the collapsed icons-only strip. The default 60 is derived from the rail's own
157
+ * numbers — 8+8 container padding, 12+12 item padding, 18px icon, 1px border — so icons stay
158
+ * centred; retune it if those change.
159
+ */
160
+ CollapsedWidth: number;
161
+ /**
162
+ * True below the 701px breakpoint, where the rail stops being a rail and becomes the off-canvas
163
+ * drawer. Tracked in TS — not just CSS — because collapse is more than styling: it also decides
164
+ * whether tree sections fold and whether items are named by tooltip. The collapsed STYLES are
165
+ * gated to ≥701px, so without this the drawer would keep the collapsed BEHAVIOR while showing
166
+ * full labels: a flattened tree, and a monogram beside the very label it stands in for.
167
+ *
168
+ * Mirrors the matchMedia pattern in `mj-filter-popover` (same package).
169
+ */
170
+ private isMobileViewport;
171
+ private readonly zone;
172
+ private readonly cdr;
173
+ private readonly mediaQuery;
174
+ private readonly onMediaChange;
175
+ constructor();
176
+ ngOnDestroy(): void;
177
+ /**
178
+ * Whether the rail is collapsed *and* in a viewport where collapse means anything. Below 701px
179
+ * the rail is the off-canvas drawer — already dismissable, already showing full labels — so a
180
+ * persisted `Collapsed = true` must not follow the user down there.
181
+ */
182
+ get IsNativelyCollapsed(): boolean;
183
+ /** The width the rail actually renders at, honoring the collapse state. */
184
+ get EffectiveWidth(): number;
185
+ /**
186
+ * Icon-only presentation is on when the consumer forces it OR the rail is natively collapsed.
187
+ *
188
+ * `IconOnly` is deliberately NOT viewport-gated: that flag means the CONSUMER's own CSS has
189
+ * narrowed the rail, and we can't know which breakpoints they gated it to. Withdrawing the
190
+ * accessible names on their behalf could leave a genuinely icons-only rail unnamed — the exact
191
+ * hole `IconOnly` exists to close. Native collapse is ours to gate; theirs is theirs.
192
+ */
193
+ get EffectiveIconOnly(): boolean;
194
+ /**
195
+ * Whether tree structure (chevrons, depth indentation, expanded children) renders at all.
196
+ *
197
+ * An icons-only rail is ~60px wide and shows nothing but a centred glyph per row, which leaves a
198
+ * tree with no way to express itself: the chevron would eat a third of the width and shove the
199
+ * icon off-centre, each depth level would push its icon 14px further right until the rail clipped
200
+ * it, and a child's icon (optional, and usually absent on tree leaves) would say nothing about
201
+ * which branch it belongs to. So while icons-only, each section renders its TOP-LEVEL items only —
202
+ * the same choice every icon rail makes (VS Code's activity bar shows one icon per container and
203
+ * defers the tree to the expanded pane).
204
+ *
205
+ * Nothing is lost on the way back: `ExpandedIds` is consumer-owned and untouched here, so the tree
206
+ * returns exactly as the user left it the moment the rail expands.
207
+ */
208
+ get ShowTreeStructure(): boolean;
209
+ /**
210
+ * Whether an item paints as active. Normally an exact {@link ActiveId} match — but while the tree
211
+ * is suppressed (see {@link ShowTreeStructure}) the active item may be a child that isn't rendered,
212
+ * which would leave the collapsed rail with NOTHING highlighted and no sense of place. In that
213
+ * state a top-level item stands in for its active descendant.
214
+ */
215
+ IsItemActive(item: MJLeftNavItem): boolean;
216
+ /**
217
+ * `'page'` for the active item itself; `'true'` for a stand-in ancestor, which is current in the
218
+ * set but is not the page the user is on. Distinguishing them keeps the announcement honest.
219
+ */
220
+ AriaCurrentFor(item: MJLeftNavItem): 'page' | 'true' | null;
221
+ private hasActiveDescendant;
222
+ /**
223
+ * Monogram for an icon-less item in an icons-only rail. `Array.from` rather than `charAt` so a
224
+ * label starting with an emoji or an astral character yields that whole character instead of half
225
+ * a surrogate pair. Falls back to a bullet for a blank label so the button is never empty.
226
+ */
227
+ ItemInitial(item: MJLeftNavItem): string;
228
+ /**
229
+ * Left margin that pins the toggle chip at the collapsed band's centre in BOTH modes, so the
230
+ * chip never relocates on toggle (the user never re-aims). Derived, not magic:
231
+ * (CollapsedWidth − 38px chip)/2 from the rail edge, minus the rail's 8px container padding.
232
+ * 38 = the 18px icon box + 2×10px chip padding.
233
+ */
234
+ get CollapseToggleMarginPx(): number;
235
+ /** Reflects the collapsed state onto the host so the collapsed CSS can scope to it. */
236
+ get isCollapsedHost(): boolean;
237
+ /** Flip + announce. The consumer receives the new value and persists it. */
238
+ ToggleCollapsed(): void;
239
+ /**
240
+ * The text surfaced as an icon-only item's tooltip / accessible name. Folds in the description and
241
+ * badge because collapsing the rail hides both: the badge survives as an unlabeled corner count,
242
+ * so "Batch approvals (2)" is the only place a hovering user learns what the 2 counts.
243
+ */
244
+ ItemTooltip(item: MJLeftNavItem): string;
106
245
  /**
107
246
  * Label shown on the mobile drawer header and used as the switcher fallback
108
247
  * label when no item is active. Defaults to `'Menu'`. Set to something
@@ -159,6 +298,6 @@ export declare class MJLeftNavComponent {
159
298
  */
160
299
  HasExpandableItems(items: MJLeftNavItem[]): boolean;
161
300
  static ɵfac: i0.ɵɵFactoryDeclaration<MJLeftNavComponent, never>;
162
- static ɵcmp: i0.ɵɵComponentDeclaration<MJLeftNavComponent, "mj-left-nav", never, { "Sections": { "alias": "Sections"; "required": false; }; "ActiveId": { "alias": "ActiveId"; "required": false; }; "Width": { "alias": "Width"; "required": false; }; "MobileTitle": { "alias": "MobileTitle"; "required": false; }; "ExpandedIds": { "alias": "ExpandedIds"; "required": false; }; }, { "ItemClicked": "ItemClicked"; "ItemToggled": "ItemToggled"; }, never, ["[header]", "[footer]"], true, never>;
301
+ static ɵcmp: i0.ɵɵComponentDeclaration<MJLeftNavComponent, "mj-left-nav", never, { "Sections": { "alias": "Sections"; "required": false; }; "ActiveId": { "alias": "ActiveId"; "required": false; }; "Width": { "alias": "Width"; "required": false; }; "IconOnly": { "alias": "IconOnly"; "required": false; }; "Collapsible": { "alias": "Collapsible"; "required": false; }; "Collapsed": { "alias": "Collapsed"; "required": false; }; "CollapsedWidth": { "alias": "CollapsedWidth"; "required": false; }; "MobileTitle": { "alias": "MobileTitle"; "required": false; }; "ExpandedIds": { "alias": "ExpandedIds"; "required": false; }; }, { "CollapsedChange": "CollapsedChange"; "ItemClicked": "ItemClicked"; "ItemToggled": "ItemToggled"; }, never, ["[header]", "[footer]"], true, never>;
163
302
  }
164
303
  //# sourceMappingURL=left-nav.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"left-nav.component.d.ts","sourceRoot":"","sources":["../../../src/lib/left-nav/left-nav.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAA4C,MAAM,eAAe,CAAC;;AAGlG;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBA8ba,kBAAkB;IAC7B;;;OAGG;IACM,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IAE3C;;;OAGG;IACM,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC;;;;OAIG;IACM,KAAK,EAAE,MAAM,CAAO;IAE7B;;;;OAIG;IACM,WAAW,EAAE,MAAM,CAAU;IAEtC;;;;;;;OAOG;IACM,WAAW,EAAE,MAAM,EAAE,CAAM;IAEpC;;OAEG;IACO,WAAW,8BAAqC;IAE1D;;;OAGG;IACO,WAAW,8BAAqC;IAE1D;;;OAGG;IACI,aAAa,UAAS;IAE7B,gFAAgF;IAChF,IACI,eAAe,IAAI,OAAO,CAE7B;IAED,aAAa,IAAI,IAAI;IAIrB,cAAc,IAAI,IAAI;IAItB,uEAAuE;IAEvE,QAAQ,IAAI,IAAI;IAMhB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAOtC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAMrD;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,aAAa,GAAG,SAAS,CAGjD;IAED,OAAO,CAAC,YAAY;IAWpB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;yCA3HxC,kBAAkB;2CAAlB,kBAAkB;CAiI9B"}
1
+ {"version":3,"file":"left-nav.component.d.ts","sourceRoot":"","sources":["../../../src/lib/left-nav/left-nav.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAKZ,SAAS,EAGV,MAAM,eAAe,CAAC;;AAMvB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAsnBa,kBAAmB,YAAW,SAAS;IAClD;;;OAGG;IACH,SAAgB,WAAW,EAAE,MAAM,CAAmC;IAEtE;;;OAGG;IACM,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IAE3C;;;OAGG;IACM,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC;;;;OAIG;IACM,KAAK,EAAE,MAAM,CAAO;IAE7B;;;;;;;;;;;;;;;OAeG;IACM,QAAQ,EAAE,OAAO,CAAS;IAEnC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACM,WAAW,EAAE,OAAO,CAAS;IAEtC,8FAA8F;IACrF,SAAS,EAAE,OAAO,CAAS;IAEpC,+FAA+F;IACrF,eAAe,wBAA+B;IAExD;;;;OAIG;IACM,cAAc,EAAE,MAAM,CAAM;IAErC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGhB;IAIX,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;;IASF,WAAW,IAAI,IAAI;IAInB;;;;OAIG;IACH,IAAW,mBAAmB,IAAI,OAAO,CAExC;IAED,2EAA2E;IAC3E,IAAW,cAAc,IAAI,MAAM,CAElC;IAED;;;;;;;OAOG;IACH,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED;;;;;;;;;;;;;OAaG;IACH,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED;;;;;OAKG;IACI,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAKjD;;;OAGG;IACI,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAKlE,OAAO,CAAC,mBAAmB;IAK3B;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAI/C;;;;;OAKG;IACH,IAAW,sBAAsB,IAAI,MAAM,CAE1C;IAED,uFAAuF;IACvF,IACI,eAAe,IAAI,OAAO,CAE7B;IAED,4EAA4E;IACrE,eAAe,IAAI,IAAI;IAK9B;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAO/C;;;;OAIG;IACM,WAAW,EAAE,MAAM,CAAU;IAEtC;;;;;;;OAOG;IACM,WAAW,EAAE,MAAM,EAAE,CAAM;IAEpC;;OAEG;IACO,WAAW,8BAAqC;IAE1D;;;OAGG;IACO,WAAW,8BAAqC;IAE1D;;;OAGG;IACI,aAAa,UAAS;IAE7B,gFAAgF;IAChF,IACI,eAAe,IAAI,OAAO,CAE7B;IAED,aAAa,IAAI,IAAI;IAIrB,cAAc,IAAI,IAAI;IAItB,uEAAuE;IAEvE,QAAQ,IAAI,IAAI;IAMhB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAOtC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAMrD;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,aAAa,GAAG,SAAS,CAGjD;IAED,OAAO,CAAC,YAAY;IAWpB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;yCA/UxC,kBAAkB;2CAAlB,kBAAkB;CAqV9B"}