@design-factory/angular 21.0.0-next.0 → 21.0.0-next.1

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.
@@ -163,7 +163,6 @@ class DfDrawerComponent extends AgnosWidgetDirective {
163
163
  * @defaultValue `null`
164
164
  */
165
165
  this.maxSize = output();
166
- this.isSmallScreen = toSignal(inject(DfMedia).getObservable(['sm', 'xs']), { initialValue: false });
167
166
  this.isMediumScreen = toSignal(inject(DfMedia).getObservable(['md']), { initialValue: false });
168
167
  this.isLargeUpScreen = toSignal(inject(DfMedia).getObservable(['lg', 'xl', 'xxl', 'xxxl']), {
169
168
  initialValue: false
@@ -206,8 +205,8 @@ class DfDrawerComponent extends AgnosWidgetDirective {
206
205
  }
207
206
  })();
208
207
  }
209
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
210
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfDrawerComponent, isStandalone: true, selector: "df-drawer", inputs: { className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, bodyScroll: { classPropertyName: "bodyScroll", publicName: "bodyScroll", isSignal: true, isRequired: false, transformFunction: null }, backdrop: { classPropertyName: "backdrop", publicName: "backdrop", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, enableMobile: { classPropertyName: "enableMobile", publicName: "enableMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange", sizeChange: "sizeChange", visibleChange: "visibleChange", minimizedChange: "minimizedChange", maximizedChange: "maximizedChange", resizingChange: "resizingChange", minSize: "minSize", maxSize: "maxSize" }, usesInheritance: true, ngImport: i0, template: `
208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfDrawerComponent, isStandalone: true, selector: "df-drawer", inputs: { className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, bodyScroll: { classPropertyName: "bodyScroll", publicName: "bodyScroll", isSignal: true, isRequired: false, transformFunction: null }, backdrop: { classPropertyName: "backdrop", publicName: "backdrop", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, enableMobile: { classPropertyName: "enableMobile", publicName: "enableMobile", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange", sizeChange: "sizeChange", visibleChange: "visibleChange", minimizedChange: "minimizedChange", maximizedChange: "maximizedChange", resizingChange: "resizingChange", minSize: "minSize", maxSize: "maxSize" }, usesInheritance: true, ngImport: i0, template: `
211
210
  <div
212
211
  class="df-drawer d-flex"
213
212
  [class]="_agnosWidget.state.className()"
@@ -244,7 +243,7 @@ class DfDrawerComponent extends AgnosWidgetDirective {
244
243
  }
245
244
  `, isInline: true, dependencies: [{ kind: "directive", type: UseDirective, selector: "[auUse]", inputs: ["auUse"] }, { kind: "directive", type: UseMultiDirective, selector: "[auUseMulti]", inputs: ["auUseMulti"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
246
245
  }
247
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfDrawerComponent, decorators: [{
246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfDrawerComponent, decorators: [{
248
247
  type: Component,
249
248
  args: [{
250
249
  selector: 'df-drawer',
@@ -1 +1 @@
1
- {"version":3,"file":"design-factory-angular-drawer.mjs","sources":["../../drawer/drawer.ts","../../drawer/design-factory-angular-drawer.ts"],"sourcesContent":["import type { DrawerWidget, NavManagerItemConfig } from '@agnos-ui/angular-headless';\nimport {\n createDrawer,\n createNavManager,\n createSimpleClassTransition,\n UseDirective,\n UseMultiDirective\n} from '@agnos-ui/angular-headless';\nimport { fadeTransition } from '@agnos-ui/core-bootstrap';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n linkedSignal,\n model,\n output,\n PLATFORM_ID\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AgnosWidgetDirective, callWidgetFactory } from '@design-factory/angular/internals';\nimport { DfMedia } from '@design-factory/design-factory';\n\n/**\n * Utility method to check if the user agent is a mobile device\n *\n * @param userAgent - The user agent string to check\n * @returns `true` if the user agent corresponds to a mobile device, `false` otherwise\n */\nfunction isMobileUserAgent(userAgent: string): boolean {\n return /mobile|android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent);\n}\n\n@Component({\n selector: 'df-drawer',\n imports: [UseDirective, UseMultiDirective],\n template: `\n <div\n class=\"df-drawer d-flex\"\n [class]=\"_agnosWidget.state.className()\"\n [class.show]=\"_agnosWidget.state.visible()\"\n [auUseMulti]=\"[_agnosWidget.directives.drawerPortalDirective, _agnosWidget.directives.drawerDirective]\"\n [style.--df-drawer-size]=\"size() !== null ? size() + 'px' : ''\"\n >\n <ng-content />\n @if (_agnosWidget.state.resizable()) {\n <div class=\"df-drawer-splitter\" tabindex=\"-1\" [auUse]=\"_agnosWidget.directives.splitterDirective\">\n <button\n #splitterHandle\n class=\"btn btn-outline-primary df-btn-icononly df-drawer-splitter-handle\"\n [class.df-btn-outline-neutral-mirror]=\"isMediumScreen() && !isMinimized()\"\n i18n-aria-label=\"@@df.drawer.resize.ariaLabel\"\n aria-label=\"Resize drawer\"\n [auUse]=\"[navManager.directive, navManagerConfig]\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 192 512\" fill=\"currentColor\">\n <path\n d=\"M16 32C7.2 32 0 39.2 0 48L0 464c0 8.8 7.2 16 16 16s16-7.2 16-16L32 48c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16z\"\n />\n </svg>\n </button>\n </div>\n }\n </div>\n @if (!_agnosWidget.state.backdropHidden()) {\n <div\n class=\"df-drawer-backdrop\"\n [class.show]=\"_agnosWidget.state.visible()\"\n [auUseMulti]=\"[_agnosWidget.directives.backdropPortalDirective, _agnosWidget.directives.backdropDirective]\"\n ></div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DfDrawerComponent extends AgnosWidgetDirective<DrawerWidget> {\n /**\n * CSS classes to be applied on the widget main container\n *\n * @defaultValue ``\n */\n readonly className = input<string>('');\n /**\n * If `true` allows body scrolling when the drawer is open.\n *\n * @defaultValue `false`\n */\n readonly bodyScroll = input<boolean>(false);\n /**\n * If `true` displays the backdrop element and disables the body scrolling, otherwise the body of the document is navigable\n *\n * @defaultValue `true`\n */\n readonly backdrop = input<boolean>(true);\n /**\n * Which element should contain the drawer and backdrop DOM elements.\n * If it is not null, the drawer and backdrop DOM elements are moved to the specified container.\n * Otherwise, they stay where the widget is located.\n *\n * @defaultValue\n * ```ts\n * typeof window !== 'undefined' ? document.body : null\n * ```\n */\n readonly container = input<HTMLElement | null>(null);\n /**\n * The size of the drawer in pixels.\n *\n * @defaultValue `300`\n */\n readonly size = model<number | null>(300);\n /**\n * If `true`, the drawer can be resized by the user.\n *\n * @defaultValue `false`\n */\n readonly resizable = input<boolean>(false);\n /**\n * If `true`, the drawer is shown; otherwise, it is hidden.\n *\n * @defaultValue `false`\n */\n readonly visible = input<boolean>(false);\n\n /**\n * An event emitted when the width is changed.\n *\n * Event payload is equal to the newly selected width.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly sizeChange = output<number | null>();\n /**\n * Event to be triggered when the visible property changes.\n *\n * @param visible - new value of the visible propery\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly visibleChange = output<boolean>();\n\n /**\n * Event to be triggered when the minimized state changes.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly minimizedChange = output<boolean>();\n\n /**\n * Event to be triggered when the maximized state changes.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly maximizedChange = output<boolean>();\n\n /**\n * Event to be triggered when the user start or stop moving the drawer.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly resizingChange = output<boolean>();\n\n protected readonly navManager = createNavManager();\n\n protected readonly navManagerConfig: NavManagerItemConfig = {\n keys: {\n Home: this.navManager.focusFirst,\n End: this.navManager.focusLast\n }\n };\n\n /**\n * Event to be triggered when the minimum size is reached.\n *\n * @defaultValue `null`\n */\n readonly minSize = output<void>();\n\n /**\n * Event to be triggered when the maximum size is reached.\n *\n * @defaultValue `null`\n */\n readonly maxSize = output<void>();\n\n protected readonly isSmallScreen = toSignal(inject(DfMedia).getObservable(['sm', 'xs']), { initialValue: false });\n protected readonly isMediumScreen = toSignal(inject(DfMedia).getObservable(['md']), { initialValue: false });\n protected readonly isLargeUpScreen = toSignal(inject(DfMedia).getObservable(['lg', 'xl', 'xxl', 'xxxl']), {\n initialValue: false\n });\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /**\n * Flag to enable mobile device detection for responsive behavior\n * @default true\n */\n readonly enableMobile = input(true, { transform: booleanAttribute });\n\n /**\n * Flag to indicate if the drawer is minimized\n */\n readonly isMinimized = linkedSignal(() => {\n // in mobile devices, the default value is true (hiding the drawer) and does not track changes to the screen size\n if (this.isMobileDevice) {\n return true;\n }\n // in desktop, we track the large screen signal in order to reset the minimized state\n // it allows resizing the window and have a more user-friendly behavior\n return !this.isLargeUpScreen();\n });\n\n protected readonly isMobileDevice = (() => {\n if (this.isBrowser) {\n return this.enableMobile() && isMobileUserAgent(navigator.userAgent);\n } else {\n // SSR: try to get request if available\n try {\n const request = inject(Request, { optional: true });\n if (request && 'headers' in request) {\n const userAgent = request.headers.get('user-agent') || '';\n return this.enableMobile() && isMobileUserAgent(userAgent);\n }\n } catch {\n // Request token not available or not in SSR context\n }\n return false;\n }\n })();\n\n constructor() {\n const widget = callWidgetFactory(createDrawer, {\n defaultConfig: {\n className: '',\n bodyScroll: true,\n backdrop: false,\n transition: createSimpleClassTransition({\n showClasses: ['show']\n }),\n backdropTransition: fadeTransition\n },\n events: {\n onSizeChange: (size) => {\n this.size.set(size);\n this.sizeChange.emit(size);\n },\n onVisibleChange: (visible) => {\n this.visibleChange.emit(visible);\n },\n onMinimizedChange: (isMinimized) => {\n this.minimizedChange.emit(isMinimized);\n },\n onMaximizedChange: (isMaximized) => {\n this.maximizedChange.emit(isMaximized);\n },\n onResizingChange: (isResizing) => {\n this.resizingChange.emit(isResizing);\n }\n }\n });\n super(widget);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design-factory-angular-drawer.mjs","sources":["../../drawer/drawer.ts","../../drawer/design-factory-angular-drawer.ts"],"sourcesContent":["import type { DrawerWidget, NavManagerItemConfig } from '@agnos-ui/angular-headless';\nimport {\n createDrawer,\n createNavManager,\n createSimpleClassTransition,\n UseDirective,\n UseMultiDirective\n} from '@agnos-ui/angular-headless';\nimport { fadeTransition } from '@agnos-ui/core-bootstrap';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n linkedSignal,\n model,\n output,\n PLATFORM_ID\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AgnosWidgetDirective, callWidgetFactory } from '@design-factory/angular/internals';\nimport { DfMedia } from '@design-factory/design-factory';\n\n/**\n * Utility method to check if the user agent is a mobile device\n *\n * @param userAgent - The user agent string to check\n * @returns `true` if the user agent corresponds to a mobile device, `false` otherwise\n */\nfunction isMobileUserAgent(userAgent: string): boolean {\n return /mobile|android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent);\n}\n\n@Component({\n selector: 'df-drawer',\n imports: [UseDirective, UseMultiDirective],\n template: `\n <div\n class=\"df-drawer d-flex\"\n [class]=\"_agnosWidget.state.className()\"\n [class.show]=\"_agnosWidget.state.visible()\"\n [auUseMulti]=\"[_agnosWidget.directives.drawerPortalDirective, _agnosWidget.directives.drawerDirective]\"\n [style.--df-drawer-size]=\"size() !== null ? size() + 'px' : ''\"\n >\n <ng-content />\n @if (_agnosWidget.state.resizable()) {\n <div class=\"df-drawer-splitter\" tabindex=\"-1\" [auUse]=\"_agnosWidget.directives.splitterDirective\">\n <button\n #splitterHandle\n class=\"btn btn-outline-primary df-btn-icononly df-drawer-splitter-handle\"\n [class.df-btn-outline-neutral-mirror]=\"isMediumScreen() && !isMinimized()\"\n i18n-aria-label=\"@@df.drawer.resize.ariaLabel\"\n aria-label=\"Resize drawer\"\n [auUse]=\"[navManager.directive, navManagerConfig]\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 192 512\" fill=\"currentColor\">\n <path\n d=\"M16 32C7.2 32 0 39.2 0 48L0 464c0 8.8 7.2 16 16 16s16-7.2 16-16L32 48c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16z\"\n />\n </svg>\n </button>\n </div>\n }\n </div>\n @if (!_agnosWidget.state.backdropHidden()) {\n <div\n class=\"df-drawer-backdrop\"\n [class.show]=\"_agnosWidget.state.visible()\"\n [auUseMulti]=\"[_agnosWidget.directives.backdropPortalDirective, _agnosWidget.directives.backdropDirective]\"\n ></div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DfDrawerComponent extends AgnosWidgetDirective<DrawerWidget> {\n /**\n * CSS classes to be applied on the widget main container\n *\n * @defaultValue ``\n */\n readonly className = input<string>('');\n /**\n * If `true` allows body scrolling when the drawer is open.\n *\n * @defaultValue `false`\n */\n readonly bodyScroll = input<boolean>(false);\n /**\n * If `true` displays the backdrop element and disables the body scrolling, otherwise the body of the document is navigable\n *\n * @defaultValue `true`\n */\n readonly backdrop = input<boolean>(true);\n /**\n * Which element should contain the drawer and backdrop DOM elements.\n * If it is not null, the drawer and backdrop DOM elements are moved to the specified container.\n * Otherwise, they stay where the widget is located.\n *\n * @defaultValue\n * ```ts\n * typeof window !== 'undefined' ? document.body : null\n * ```\n */\n readonly container = input<HTMLElement | null>(null);\n /**\n * The size of the drawer in pixels.\n *\n * @defaultValue `300`\n */\n readonly size = model<number | null>(300);\n /**\n * If `true`, the drawer can be resized by the user.\n *\n * @defaultValue `false`\n */\n readonly resizable = input<boolean>(false);\n /**\n * If `true`, the drawer is shown; otherwise, it is hidden.\n *\n * @defaultValue `false`\n */\n readonly visible = input<boolean>(false);\n\n /**\n * An event emitted when the width is changed.\n *\n * Event payload is equal to the newly selected width.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly sizeChange = output<number | null>();\n /**\n * Event to be triggered when the visible property changes.\n *\n * @param visible - new value of the visible propery\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly visibleChange = output<boolean>();\n\n /**\n * Event to be triggered when the minimized state changes.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly minimizedChange = output<boolean>();\n\n /**\n * Event to be triggered when the maximized state changes.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly maximizedChange = output<boolean>();\n\n /**\n * Event to be triggered when the user start or stop moving the drawer.\n *\n * @defaultValue\n * ```ts\n * () => {}\n * ```\n */\n readonly resizingChange = output<boolean>();\n\n protected readonly navManager = createNavManager();\n\n protected readonly navManagerConfig: NavManagerItemConfig = {\n keys: {\n Home: this.navManager.focusFirst,\n End: this.navManager.focusLast\n }\n };\n\n /**\n * Event to be triggered when the minimum size is reached.\n *\n * @defaultValue `null`\n */\n readonly minSize = output<void>();\n\n /**\n * Event to be triggered when the maximum size is reached.\n *\n * @defaultValue `null`\n */\n readonly maxSize = output<void>();\n\n protected readonly isMediumScreen = toSignal(inject(DfMedia).getObservable(['md']), { initialValue: false });\n protected readonly isLargeUpScreen = toSignal(inject(DfMedia).getObservable(['lg', 'xl', 'xxl', 'xxxl']), {\n initialValue: false\n });\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /**\n * Flag to enable mobile device detection for responsive behavior\n * @default true\n */\n readonly enableMobile = input(true, { transform: booleanAttribute });\n\n /**\n * Flag to indicate if the drawer is minimized\n */\n readonly isMinimized = linkedSignal(() => {\n // in mobile devices, the default value is true (hiding the drawer) and does not track changes to the screen size\n if (this.isMobileDevice) {\n return true;\n }\n // in desktop, we track the large screen signal in order to reset the minimized state\n // it allows resizing the window and have a more user-friendly behavior\n return !this.isLargeUpScreen();\n });\n\n protected readonly isMobileDevice = (() => {\n if (this.isBrowser) {\n return this.enableMobile() && isMobileUserAgent(navigator.userAgent);\n } else {\n // SSR: try to get request if available\n try {\n const request = inject(Request, { optional: true });\n if (request && 'headers' in request) {\n const userAgent = request.headers.get('user-agent') || '';\n return this.enableMobile() && isMobileUserAgent(userAgent);\n }\n } catch {\n // Request token not available or not in SSR context\n }\n return false;\n }\n })();\n\n constructor() {\n const widget = callWidgetFactory(createDrawer, {\n defaultConfig: {\n className: '',\n bodyScroll: true,\n backdrop: false,\n transition: createSimpleClassTransition({\n showClasses: ['show']\n }),\n backdropTransition: fadeTransition\n },\n events: {\n onSizeChange: (size) => {\n this.size.set(size);\n this.sizeChange.emit(size);\n },\n onVisibleChange: (visible) => {\n this.visibleChange.emit(visible);\n },\n onMinimizedChange: (isMinimized) => {\n this.minimizedChange.emit(isMinimized);\n },\n onMaximizedChange: (isMaximized) => {\n this.maximizedChange.emit(isMaximized);\n },\n onResizingChange: (isResizing) => {\n this.resizingChange.emit(isResizing);\n }\n }\n });\n super(widget);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -96,10 +96,10 @@ class AgnosWidgetDirective {
96
96
  ngAfterContentChecked() {
97
97
  this._agnosWidget.updateSlots();
98
98
  }
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgnosWidgetDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
100
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: AgnosWidgetDirective, isStandalone: true, usesOnChanges: true, ngImport: i0 }); }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AgnosWidgetDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
100
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: AgnosWidgetDirective, isStandalone: true, usesOnChanges: true, ngImport: i0 }); }
101
101
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AgnosWidgetDirective, decorators: [{
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: AgnosWidgetDirective, decorators: [{
103
103
  type: Directive
104
104
  }], ctorParameters: () => [{ type: undefined }] });
105
105
 
@@ -68,10 +68,10 @@ class DfSidenavItemBaseComponent {
68
68
  this.collapsed.set(!this.collapsed());
69
69
  }
70
70
  }
71
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
72
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.0.6", type: DfSidenavItemBaseComponent, isStandalone: true, inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, wrapperHasIconContent: { classPropertyName: "wrapperHasIconContent", publicName: "wrapperHasIconContent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, queries: [{ propertyName: "iconContent", first: true, predicate: ["dfSidenavIcon"], descendants: true, isSignal: true }], ngImport: i0 }); }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
72
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.1", type: DfSidenavItemBaseComponent, isStandalone: true, inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, wrapperHasIconContent: { classPropertyName: "wrapperHasIconContent", publicName: "wrapperHasIconContent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, queries: [{ propertyName: "iconContent", first: true, predicate: ["dfSidenavIcon"], descendants: true, isSignal: true }], ngImport: i0 }); }
73
73
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemBaseComponent, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemBaseComponent, decorators: [{
75
75
  type: Directive
76
76
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], wrapperHasIconContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrapperHasIconContent", required: false }] }], iconContent: [{ type: i0.ContentChild, args: ['dfSidenavIcon', { isSignal: true }] }] } });
77
77
 
@@ -111,8 +111,8 @@ class DfSidenavItemDesktopComponent extends DfSidenavItemBaseComponent {
111
111
  }
112
112
  });
113
113
  }
114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemDesktopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
115
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavItemDesktopComponent, isStandalone: true, selector: "df-sidenav-item-desktop", host: { properties: { "class.d-none": "!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" } }, usesInheritance: true, ngImport: i0, template: `
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemDesktopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
115
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavItemDesktopComponent, isStandalone: true, selector: "df-sidenav-item-desktop", host: { properties: { "class.d-none": "!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" } }, usesInheritance: true, ngImport: i0, template: `
116
116
  <button
117
117
  class="btn df-sidenav-button d-flex gap-3"
118
118
  [class.df-sidenav-active-level]="sidenav.isMinimized() && hasActiveChildren() && isFirstLevel"
@@ -144,7 +144,7 @@ class DfSidenavItemDesktopComponent extends DfSidenavItemBaseComponent {
144
144
  </ng-template>
145
145
  `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
146
146
  }
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemDesktopComponent, decorators: [{
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemDesktopComponent, decorators: [{
148
148
  type: Component,
149
149
  args: [{
150
150
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -277,8 +277,8 @@ class DfSidenavItemMobileComponent extends DfSidenavItemBaseComponent {
277
277
  handleBackClick() {
278
278
  this.sidenav.navigateBack();
279
279
  }
280
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
281
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavItemMobileComponent, isStandalone: true, selector: "df-sidenav-item-mobile", host: { properties: { "class.d-none": "shouldHideComponent() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" }, classAttribute: "mobile" }, usesInheritance: true, ngImport: i0, template: `
280
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
281
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavItemMobileComponent, isStandalone: true, selector: "df-sidenav-item-mobile", host: { properties: { "class.d-none": "shouldHideComponent() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" }, classAttribute: "mobile" }, usesInheritance: true, ngImport: i0, template: `
282
282
  @if (shouldShowMobileHeader()) {
283
283
  <div class="df-sidenav-mobile-header mobile mb-2" role="listitem">
284
284
  <button
@@ -338,7 +338,7 @@ class DfSidenavItemMobileComponent extends DfSidenavItemBaseComponent {
338
338
  </ng-template>
339
339
  `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
340
340
  }
341
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemMobileComponent, decorators: [{
341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemMobileComponent, decorators: [{
342
342
  type: Component,
343
343
  args: [{
344
344
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -459,10 +459,10 @@ class DfSidenavLinkBaseComponent {
459
459
  return this.label().toLowerCase().includes(search);
460
460
  }, ...(ngDevMode ? [{ debugName: "isVisible" }] : []));
461
461
  }
462
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
463
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.0.6", type: DfSidenavLinkBaseComponent, isStandalone: true, inputs: { linkPath: { classPropertyName: "linkPath", publicName: "linkPath", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, wrapperHasIconContent: { classPropertyName: "wrapperHasIconContent", publicName: "wrapperHasIconContent", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "iconContent", first: true, predicate: ["dfSidenavIcon"], descendants: true, isSignal: true }], ngImport: i0 }); }
462
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
463
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.1", type: DfSidenavLinkBaseComponent, isStandalone: true, inputs: { linkPath: { classPropertyName: "linkPath", publicName: "linkPath", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, wrapperHasIconContent: { classPropertyName: "wrapperHasIconContent", publicName: "wrapperHasIconContent", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "iconContent", first: true, predicate: ["dfSidenavIcon"], descendants: true, isSignal: true }], ngImport: i0 }); }
464
464
  }
465
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkBaseComponent, decorators: [{
465
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkBaseComponent, decorators: [{
466
466
  type: Directive
467
467
  }], propDecorators: { linkPath: [{ type: i0.Input, args: [{ isSignal: true, alias: "linkPath", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], wrapperHasIconContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrapperHasIconContent", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], iconContent: [{ type: i0.ContentChild, args: ['dfSidenavIcon', { isSignal: true }] }] } });
468
468
 
@@ -475,8 +475,8 @@ class DfSidenavLinkDesktopComponent extends DfSidenavLinkBaseComponent {
475
475
  super(...arguments);
476
476
  this.anchor = viewChild.required('anchor');
477
477
  }
478
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkDesktopComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
479
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavLinkDesktopComponent, isStandalone: true, selector: "df-sidenav-link-desktop", host: { properties: { "class.d-none": "!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" }, classAttribute: "d-flex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
478
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkDesktopComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavLinkDesktopComponent, isStandalone: true, selector: "df-sidenav-link-desktop", host: { properties: { "class.d-none": "!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" }, classAttribute: "d-flex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
480
480
  <a
481
481
  class="btn df-sidenav-button d-flex gap-3"
482
482
  [class.w-100]="!sidenav.isMinimized()"
@@ -503,7 +503,7 @@ class DfSidenavLinkDesktopComponent extends DfSidenavLinkBaseComponent {
503
503
  </ng-template>
504
504
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
505
505
  }
506
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkDesktopComponent, decorators: [{
506
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkDesktopComponent, decorators: [{
507
507
  type: Component,
508
508
  args: [{
509
509
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -583,8 +583,8 @@ class DfSidenavLinkMobileComponent extends DfSidenavLinkBaseComponent {
583
583
  return path;
584
584
  }, ...(ngDevMode ? [{ debugName: "breadcrumbPath" }] : []));
585
585
  }
586
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
587
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavLinkMobileComponent, isStandalone: true, selector: "df-sidenav-link-mobile", host: { properties: { "class.d-none": "!isVisibleInList() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" }, classAttribute: "d-flex" }, usesInheritance: true, ngImport: i0, template: `
586
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
587
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavLinkMobileComponent, isStandalone: true, selector: "df-sidenav-link-mobile", host: { properties: { "class.d-none": "!isVisibleInList() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))" }, classAttribute: "d-flex" }, usesInheritance: true, ngImport: i0, template: `
588
588
  <a
589
589
  class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
590
590
  routerLinkActive="df-sidenav-active-level"
@@ -619,7 +619,7 @@ class DfSidenavLinkMobileComponent extends DfSidenavLinkBaseComponent {
619
619
  </ng-template>
620
620
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
621
621
  }
622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkMobileComponent, decorators: [{
622
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkMobileComponent, decorators: [{
623
623
  type: Component,
624
624
  args: [{
625
625
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -673,10 +673,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
673
673
  * @since 21.0.0
674
674
  */
675
675
  class DfSidenavIconDirective {
676
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
677
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: DfSidenavIconDirective, isStandalone: true, selector: "[dfSidenavIcon]", ngImport: i0 }); }
676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
677
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: DfSidenavIconDirective, isStandalone: true, selector: "[dfSidenavIcon]", ngImport: i0 }); }
678
678
  }
679
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavIconDirective, decorators: [{
679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavIconDirective, decorators: [{
680
680
  type: Directive,
681
681
  args: [{
682
682
  selector: '[dfSidenavIcon]'
@@ -724,8 +724,8 @@ class DfSidenavLinkComponent {
724
724
  this.wrapperHasIconContent = computed(() => this.icon() !== '' || this.iconContentQuery() !== undefined, ...(ngDevMode ? [{ debugName: "wrapperHasIconContent" }] : []));
725
725
  this.sidenav = inject(DfSidenavComponent);
726
726
  }
727
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
728
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavLinkComponent, isStandalone: true, selector: "df-sidenav-link", inputs: { linkPath: { classPropertyName: "linkPath", publicName: "linkPath", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" }, properties: { "class.mobile": "sidenav['isMobileDevice']" }, classAttribute: "d-block" }, queries: [{ propertyName: "iconContentQuery", first: true, predicate: DfSidenavIconDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "desktopInstance", first: true, predicate: DfSidenavLinkDesktopComponent, descendants: true, isSignal: true }, { propertyName: "mobileInstance", first: true, predicate: DfSidenavLinkMobileComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
727
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
728
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavLinkComponent, isStandalone: true, selector: "df-sidenav-link", inputs: { linkPath: { classPropertyName: "linkPath", publicName: "linkPath", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "listitem" }, properties: { "class.mobile": "sidenav['isMobileDevice']" }, classAttribute: "d-block" }, queries: [{ propertyName: "iconContentQuery", first: true, predicate: DfSidenavIconDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "desktopInstance", first: true, predicate: DfSidenavLinkDesktopComponent, descendants: true, isSignal: true }, { propertyName: "mobileInstance", first: true, predicate: DfSidenavLinkMobileComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
729
729
  <ng-template #iconSlot>
730
730
  <ng-content select="[dfSidenavIcon]" />
731
731
  </ng-template>
@@ -758,7 +758,7 @@ class DfSidenavLinkComponent {
758
758
  }
759
759
  `, isInline: true, dependencies: [{ kind: "component", type: DfSidenavLinkDesktopComponent, selector: "df-sidenav-link-desktop" }, { kind: "component", type: DfSidenavLinkMobileComponent, selector: "df-sidenav-link-mobile" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
760
760
  }
761
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavLinkComponent, decorators: [{
761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavLinkComponent, decorators: [{
762
762
  type: Component,
763
763
  args: [{
764
764
  selector: 'df-sidenav-link',
@@ -850,8 +850,8 @@ class DfSidenavItemComponent {
850
850
  this.wrapperHasIconContent = computed(() => this.icon() !== '' || this.iconContentQuery() !== undefined, ...(ngDevMode ? [{ debugName: "wrapperHasIconContent" }] : []));
851
851
  this.sidenav = inject(DfSidenavComponent);
852
852
  }
853
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
854
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavItemComponent, isStandalone: true, selector: "df-sidenav-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, host: { attributes: { "role": "listitem" }, properties: { "class.mobile": "sidenav['isMobileDevice']" }, classAttribute: "d-block" }, queries: [{ propertyName: "childrenItems", predicate: DfSidenavItemComponent, descendants: true, isSignal: true }, { propertyName: "childrenLinks", predicate: DfSidenavLinkComponent, descendants: true, isSignal: true }, { propertyName: "iconContentQuery", first: true, predicate: DfSidenavIconDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "desktopInstance", first: true, predicate: DfSidenavItemDesktopComponent, descendants: true, isSignal: true }, { propertyName: "mobileInstance", first: true, predicate: DfSidenavItemMobileComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
853
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
854
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavItemComponent, isStandalone: true, selector: "df-sidenav-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, host: { attributes: { "role": "listitem" }, properties: { "class.mobile": "sidenav['isMobileDevice']" }, classAttribute: "d-block" }, queries: [{ propertyName: "childrenItems", predicate: DfSidenavItemComponent, descendants: true, isSignal: true }, { propertyName: "childrenLinks", predicate: DfSidenavLinkComponent, descendants: true, isSignal: true }, { propertyName: "iconContentQuery", first: true, predicate: DfSidenavIconDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "desktopInstance", first: true, predicate: DfSidenavItemDesktopComponent, descendants: true, isSignal: true }, { propertyName: "mobileInstance", first: true, predicate: DfSidenavItemMobileComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
855
855
  <ng-template #iconSlot>
856
856
  <ng-content select="[dfSidenavIcon]" />
857
857
  </ng-template>
@@ -882,7 +882,7 @@ class DfSidenavItemComponent {
882
882
  }
883
883
  `, isInline: true, dependencies: [{ kind: "component", type: DfSidenavItemDesktopComponent, selector: "df-sidenav-item-desktop" }, { kind: "component", type: DfSidenavItemMobileComponent, selector: "df-sidenav-item-mobile" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
884
884
  }
885
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavItemComponent, decorators: [{
885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavItemComponent, decorators: [{
886
886
  type: Component,
887
887
  args: [{
888
888
  selector: 'df-sidenav-item',
@@ -943,9 +943,9 @@ class DfSidenavComponent {
943
943
  constructor() {
944
944
  /**
945
945
  * Flag whether the sidenav includes a search input
946
- * @default false
946
+ * @default true
947
947
  */
948
- this.searchable = input(false, { ...(ngDevMode ? { debugName: "searchable" } : {}), transform: booleanAttribute });
948
+ this.searchable = input(true, { ...(ngDevMode ? { debugName: "searchable" } : {}), transform: booleanAttribute });
949
949
  /**
950
950
  * The container element for the sidenav (null for body)
951
951
  * @default null
@@ -953,14 +953,14 @@ class DfSidenavComponent {
953
953
  this.container = input(null, ...(ngDevMode ? [{ debugName: "container" }] : []));
954
954
  /**
955
955
  * Flag whether the sidenav should be resizable
956
- * @default false
956
+ * @default true
957
957
  */
958
- this.resizable = input(false, { ...(ngDevMode ? { debugName: "resizable" } : {}), transform: booleanAttribute });
958
+ this.resizable = input(true, { ...(ngDevMode ? { debugName: "resizable" } : {}), transform: booleanAttribute });
959
959
  /**
960
960
  * Flag whether the sidenav should have the collapse button
961
- * @default false
961
+ * @default true
962
962
  */
963
- this.collapsible = input(false, { ...(ngDevMode ? { debugName: "collapsible" } : {}), transform: booleanAttribute });
963
+ this.collapsible = input(true, { ...(ngDevMode ? { debugName: "collapsible" } : {}), transform: booleanAttribute });
964
964
  /**
965
965
  * Flag to enable mobile device detection for responsive behavior
966
966
  * @default true
@@ -1182,8 +1182,8 @@ class DfSidenavComponent {
1182
1182
  this.mobileNavigationStack.set([]);
1183
1183
  }
1184
1184
  }
1185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DfSidenavComponent, isStandalone: true, selector: "df-sidenav", inputs: { searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, enableMobile: { classPropertyName: "enableMobile", publicName: "enableMobile", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.df-sidenav-lg": "isLargeUpScreen()", "class.df-sidenav-withicon": "contentHasIcons()", "class.d-none": "isSmallScreen() && _isMinimized()", "class.df-sidenav-drawer": "isMediumScreen() && !_isMinimized()" }, classAttribute: "df-sidenav" }, queries: [{ propertyName: "allLinks", predicate: DfSidenavLinkComponent, descendants: true, isSignal: true }, { propertyName: "allItems", predicate: DfSidenavItemComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollableContainer", first: true, predicate: ["scrollableContainer"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
1185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: DfSidenavComponent, isStandalone: true, selector: "df-sidenav", inputs: { searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, enableMobile: { classPropertyName: "enableMobile", publicName: "enableMobile", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.df-sidenav-lg": "isLargeUpScreen()", "class.df-sidenav-withicon": "contentHasIcons()", "class.d-none": "isSmallScreen() && _isMinimized()", "class.df-sidenav-drawer": "isMediumScreen() && !_isMinimized()" }, classAttribute: "df-sidenav" }, queries: [{ propertyName: "allLinks", predicate: DfSidenavLinkComponent, descendants: true, isSignal: true }, { propertyName: "allItems", predicate: DfSidenavItemComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollableContainer", first: true, predicate: ["scrollableContainer"], descendants: true, isSignal: true }, { propertyName: "searchInput", first: true, predicate: ["textInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
1187
1187
  <df-drawer
1188
1188
  #drawer
1189
1189
  className="inline-start {{ isSmallScreen() ? 'df-sidenav-mobile-drawer' : '' }}"
@@ -1224,8 +1224,12 @@ class DfSidenavComponent {
1224
1224
  [(ngModel)]="searchTerm"
1225
1225
  #textInput
1226
1226
  />
1227
- <div class="input-group-append" [class.df-is-empty]="searchTerm() === ''">
1228
- <button class="input-group-text fa-light fa-times" (click)="searchTerm.set(''); textInput.focus()">
1227
+ <div class="input-group-append">
1228
+ <button
1229
+ class="input-group-text fa-light fa-times"
1230
+ [class.df-sidenav-search-empty]="searchTerm() === ''"
1231
+ (click)="searchTerm.set(''); textInput.focus()"
1232
+ >
1229
1233
  <span class="visually-hidden" i18n="@@df.sidenav.search.clearText">Clear text</span>
1230
1234
  </button>
1231
1235
  </div>
@@ -1257,7 +1261,7 @@ class DfSidenavComponent {
1257
1261
  </df-drawer>
1258
1262
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DfDrawerComponent, selector: "df-drawer", inputs: ["className", "bodyScroll", "backdrop", "container", "size", "resizable", "visible", "enableMobile"], outputs: ["sizeChange", "visibleChange", "minimizedChange", "maximizedChange", "resizingChange", "minSize", "maxSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1259
1263
  }
1260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfSidenavComponent, decorators: [{
1264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: DfSidenavComponent, decorators: [{
1261
1265
  type: Component,
1262
1266
  args: [{
1263
1267
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1303,8 +1307,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
1303
1307
  [(ngModel)]="searchTerm"
1304
1308
  #textInput
1305
1309
  />
1306
- <div class="input-group-append" [class.df-is-empty]="searchTerm() === ''">
1307
- <button class="input-group-text fa-light fa-times" (click)="searchTerm.set(''); textInput.focus()">
1310
+ <div class="input-group-append">
1311
+ <button
1312
+ class="input-group-text fa-light fa-times"
1313
+ [class.df-sidenav-search-empty]="searchTerm() === ''"
1314
+ (click)="searchTerm.set(''); textInput.focus()"
1315
+ >
1308
1316
  <span class="visually-hidden" i18n="@@df.sidenav.search.clearText">Clear text</span>
1309
1317
  </button>
1310
1318
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"design-factory-angular-sidenav.mjs","sources":["../../sidenav/sidenav-item/sidenav-item-base.component.ts","../../sidenav/sidenav-item/sidenav-item-desktop.component.ts","../../sidenav/sidenav-item/sidenav-item-mobile.component.ts","../../sidenav/sidenav-link/sidenav-link-base.component.ts","../../sidenav/sidenav-link/sidenav-link-desktop.component.ts","../../sidenav/sidenav-link/sidenav-link-mobile.component.ts","../../sidenav/sidenav-icon.directive.ts","../../sidenav/sidenav-link/sidenav-link.component.ts","../../sidenav/sidenav-item/sidenav-item.component.ts","../../sidenav/sidenav.ts","../../sidenav/design-factory-angular-sidenav.ts"],"sourcesContent":["import { computed, contentChild, Directive, inject, input, model, Signal } from '@angular/core';\nimport { DfSidenavLinkBaseComponent } from '../sidenav-link/sidenav-link-base.component';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavItemComponent } from './sidenav-item.component';\n\n/**\n * Base item class that is extended by desktop and mobile item components\n * The item represents a container which can hold other items or links\n * Handles collapsed state\n * @internal\n */\n@Directive()\nexport abstract class DfSidenavItemBaseComponent {\n /**\n * The label of the item\n */\n readonly label = input.required();\n /**\n * Collapsed state of the item\n * Only used for the desktop version\n * @default false\n */\n readonly collapsed = model(false);\n /**\n * The icon class name or inline content (e.g., font awesome class)\n * @default ''\n */\n readonly icon = input('');\n /**\n * Whether the wrapper component has icon content (internally used)\n * @default false\n */\n readonly wrapperHasIconContent = input(false);\n\n protected readonly sidenav = inject(DfSidenavComponent);\n protected readonly wrapperInstance = inject(DfSidenavItemComponent);\n\n // check for the parent item to determine nesting level\n protected readonly parentItem = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n protected readonly isFirstLevel = this.parentItem?.['parentWrapper'] === null;\n\n protected readonly iconContent = contentChild('dfSidenavIcon');\n\n protected abstract childLinks: Signal<readonly (DfSidenavLinkBaseComponent | undefined)[]>;\n protected abstract childItems: Signal<readonly (DfSidenavItemBaseComponent | undefined)[]>;\n\n protected readonly hasActiveLinks = computed(() => this.childLinks().some((link) => link?.isActiveLink()));\n protected readonly hasActiveItems = computed(() => this.childItems().some((item) => item?.hasActiveLinks()));\n protected readonly hasActiveChildren = computed(() => this.hasActiveLinks() || this.hasActiveItems());\n\n /**\n * Computed signal indicating if the item has visible children\n */\n protected readonly hasVisibleChildren = computed(() => this.childLinks().some((link) => link?.['isVisible']()));\n\n /**\n * Method to toggle the collapsed state of the item\n * If the sidenav is minimized, it will expand it and uncollapse the item\n */\n toggleCollapse() {\n if (this.sidenav.isMinimized()) {\n this.sidenav.toggleMinimize(false);\n this.collapsed.set(false);\n } else {\n this.collapsed.set(!this.collapsed());\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';\nimport { DfSidenavItemBaseComponent } from './sidenav-item-base.component';\n\n/**\n * Component representing an item in the sidenav for desktop devices\n * The item represents a container which can hold other items or links\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-item-desktop',\n template: `\n <button\n class=\"btn df-sidenav-button d-flex gap-3\"\n [class.df-sidenav-active-level]=\"sidenav.isMinimized() && hasActiveChildren() && isFirstLevel\"\n [class.df-sidenav-active]=\"hasActiveChildren()\"\n [class.w-100]=\"!sidenav.isMinimized()\"\n (click)=\"toggleCollapse()\"\n [attr.aria-expanded]=\"!collapsed()\"\n [class.justify-content-start]=\"!sidenav.isMinimized()\"\n [attr.aria-label]=\"label()\"\n >\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n @if (!sidenav.isMinimized()) {\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n <span\n [class.expanded]=\"!collapsed()\"\n class=\"fa-light df-sidenav-collapse-toggle fa-chevron-down ms-auto\"\n ></span>\n }\n </button>\n\n <div [class.d-none]=\"collapsed()\" role=\"list\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </div>\n <ng-template #content>\n <ng-content />\n </ng-template>\n `,\n host: {\n '[class.d-none]': '!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))'\n },\n imports: [NgTemplateOutlet]\n})\nexport class DfSidenavItemDesktopComponent extends DfSidenavItemBaseComponent {\n protected override readonly childLinks = computed(() =>\n this.wrapperInstance['childrenLinks']().map((link) => link['desktopInstance']())\n );\n protected override readonly childItems = computed(() =>\n this.wrapperInstance['childrenItems']().map((item) => item['desktopInstance']())\n );\n\n protected readonly isVisible = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return true;\n }\n return this.childLinks().some((link) => link?.['isVisible']());\n });\n\n constructor() {\n super();\n // Automatically collapse when minimized\n effect(() => {\n if (this.sidenav.isMinimized()) {\n this.collapsed.set(true);\n }\n });\n\n // Auto-expand when searching and has visible children\n effect(() => {\n if (this.sidenav['searchTerm']().trim() && this.hasVisibleChildren()) {\n this.collapsed.set(false);\n }\n });\n\n // Auto-expand when the child is active and sidenav is not minimized\n effect(() => {\n if (this.hasActiveChildren() && !this.sidenav.isMinimized()) {\n this.collapsed.set(false);\n }\n });\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { DfSidenavItemBaseComponent } from './sidenav-item-base.component';\n\n/**\n * Component representing an item in the sidenav for mobile devices\n * The item represents a container which can hold other items or links\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-item-mobile',\n template: `\n @if (shouldShowMobileHeader()) {\n <div class=\"df-sidenav-mobile-header mobile mb-2\" role=\"listitem\">\n <button\n class=\"btn w-100 d-flex gap-0 align-items-center justify-content-start df-sidenav-button\"\n (click)=\"handleBackClick()\"\n [class.df-sidenav-active]=\"hasActiveChildren()\"\n >\n <span class=\"fa-light df-sidenav-mobile-header-back-arrow fa-arrow-left me-4\"></span>\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <span class=\"ms-3 sidenav-label\">{{ label() }}</span>\n </button>\n </div>\n }\n\n <!-- Regular item button (hidden when it's the active mobile panel) -->\n @if (isVisibleInList()) {\n <!-- Mobile search: Show as breadcrumb/path (non-clickable) -->\n @if (isSearching()) {\n <div class=\"btn w-100 d-flex gap-3 justify-content-start text-muted disabled pe-none\">\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n <span class=\"fa-light df-sidenav-collapse-toggle fa-chevron-right ms-auto\"></span>\n </div>\n } @else {\n <!-- Regular clickable button -->\n <button\n class=\"btn w-100 d-flex gap-3 justify-content-start df-sidenav-button\"\n (click)=\"handleItemClick()\"\n [class.df-sidenav-active]=\"hasActiveChildren()\"\n >\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n <!-- Mobile: Show forward arrow for items with children -->\n <span class=\"fa-light df-sidenav-collapse-toggle fa-chevron-right ms-auto\"></span>\n </button>\n }\n }\n\n <!-- Children container - rendered separately from the button -->\n @if (shouldShowChildren()) {\n <div role=\"list\" class=\"mobile\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </div>\n }\n\n <ng-template #content>\n <ng-content />\n </ng-template>\n `,\n host: {\n class: 'mobile',\n '[class.d-none]': 'shouldHideComponent() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))'\n },\n imports: [NgTemplateOutlet]\n})\nexport class DfSidenavItemMobileComponent extends DfSidenavItemBaseComponent {\n protected override readonly childLinks = computed(() =>\n this.wrapperInstance['childrenLinks']().map((link) => link['mobileInstance']())\n );\n protected override readonly childItems = computed(() =>\n this.wrapperInstance['childrenItems']().map((item) => item['mobileInstance']())\n );\n protected readonly isSearching = computed(() => !!this.sidenav['searchTerm']().trim());\n\n // Check if this item is in the navigation path (is an ancestor of current panel)\n private readonly isInNavigationPath = computed(() =>\n this.sidenav['mobileNavigationStack']().includes(this.wrapperInstance)\n );\n\n // Check if this item should show as mobile header\n protected readonly shouldShowMobileHeader = computed(() => {\n // Don't show header when searching\n if (this.isSearching()) {\n return false;\n }\n return this.sidenav['currentMobilePanel']() === this.wrapperInstance;\n });\n\n // Determine if this item's children should be visible\n protected readonly shouldShowChildren = computed(() => {\n // Mobile with search: show children to display matching links\n if (this.isSearching()) {\n return this.hasMatchingChildren();\n }\n // Mobile without search: show if this item is in the navigation path\n return this.isInNavigationPath();\n });\n\n // Determine if this item should be visible in the list\n protected readonly isVisibleInList = computed(() => {\n // Mobile with search: don't show items, only links (items just provide structure)\n if (this.isSearching()) {\n return false;\n }\n\n // Mobile without search: use navigation levels\n const currentPanel = this.sidenav['currentMobilePanel']();\n\n if (currentPanel === null) {\n // Root level: show only first-level items\n return this.isFirstLevel && this.isVisible();\n } else if (currentPanel === this.parentItem) {\n // This is the active panel, don't show it in the list (it's in the header)\n return false;\n } else {\n // Show items whose parent matches the current panel\n const parentMobile = this.parentItem?.['parentWrapper'];\n return parentMobile === currentPanel && this.isVisible();\n }\n });\n\n // Determine if the entire component should be hidden\n protected readonly shouldHideComponent = computed(() => {\n // Don't hide if this is the current mobile panel showing its children\n if (this.shouldShowMobileHeader()) {\n return false;\n }\n // Otherwise, use the regular visibility logic\n return !this.isVisibleInList() && !this.shouldShowChildren();\n });\n\n private readonly isVisible = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return true;\n }\n\n // Check if this item's label matches\n return String(this.label()).toLowerCase().includes(search);\n });\n\n // Check if this item has any matching children (for showing the container)\n private readonly hasMatchingChildren = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return false;\n }\n return this.childLinks().some((link) => link?.['isVisible']());\n });\n\n /**\n * Handle click event on the item\n */\n protected handleItemClick() {\n this.sidenav.navigateToChildren(this.wrapperInstance);\n }\n\n /**\n * Handle click event on the header back button\n */\n protected handleBackClick() {\n this.sidenav.navigateBack();\n }\n}\n","import { computed, contentChild, Directive, inject, input, signal } from '@angular/core';\nimport { IsActiveMatchOptions } from '@angular/router';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavItemComponent } from '../sidenav-item/sidenav-item.component';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { DfMedia } from '@design-factory/design-factory';\n\n/**\n * Base link class that is extended by desktop and mobile link components\n * @internal\n */\n@Directive()\nexport abstract class DfSidenavLinkBaseComponent {\n /**\n * The router link path for to the link\n */\n readonly linkPath = input.required<string>();\n /**\n * The label of the link\n */\n readonly label = input.required<string>();\n /**\n * The icon class name or inline content (e.g., font awesome class)\n */\n readonly icon = input('');\n /**\n * Whether the wrapper component has icon content (internally used)\n */\n readonly wrapperHasIconContent = input(false);\n /**\n * Indicates if the link is currently active based on the Router state\n */\n readonly isActiveLink = signal(false);\n /**\n * Options to determine when the router link is considered active\n */\n readonly routerLinkActiveOptions = input<IsActiveMatchOptions | { exact: boolean }>({ exact: false });\n\n protected readonly isSmallScreen = toSignal(inject(DfMedia).getObservable(['sm', 'xs']), { initialValue: false });\n\n protected readonly sidenav = inject(DfSidenavComponent);\n protected readonly parentItem = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n protected readonly isFirstLevel = this.parentItem === null;\n protected readonly iconContent = contentChild('dfSidenavIcon');\n\n /**\n * Computed signal indicating if the link is visible based on search term\n */\n protected readonly isVisible = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return true;\n }\n return this.label().toLowerCase().includes(search);\n });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, viewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DfSidenavLinkBaseComponent } from './sidenav-link-base.component';\n\n/**\n * Component representing a leaf in the sidenav for desktop devices\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-link-desktop',\n template: `\n <a\n class=\"btn df-sidenav-button d-flex gap-3\"\n [class.w-100]=\"!sidenav.isMinimized()\"\n routerLinkActive=\"df-sidenav-active-level\"\n ariaCurrentWhenActive=\"page\"\n (isActiveChange)=\"isActiveLink.set($event)\"\n [routerLink]=\"linkPath()\"\n [class.justify-content-start]=\"!sidenav.isMinimized()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [attr.aria-label]=\"label()\"\n (click)=\"isSmallScreen() && sidenav.toggleMinimize()\"\n #anchor\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n <ng-template #content>\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n @if (!sidenav.isMinimized()) {\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n }\n </ng-template>\n `,\n host: {\n '[class.d-none]': '!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))',\n class: 'd-flex'\n },\n imports: [RouterModule, NgTemplateOutlet]\n})\nexport class DfSidenavLinkDesktopComponent extends DfSidenavLinkBaseComponent {\n protected readonly anchor = viewChild.required<ElementRef<HTMLAnchorElement>>('anchor');\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DfSidenavLinkBaseComponent } from './sidenav-link-base.component';\nimport { DfSidenavLinkComponent } from './sidenav-link.component';\n\n/**\n * Component representing a leaf in the sidenav for mobile devices\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-link-mobile',\n template: `\n <a\n class=\"btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button\"\n routerLinkActive=\"df-sidenav-active-level\"\n ariaCurrentWhenActive=\"page\"\n (isActiveChange)=\"isActiveLink.set($event)\"\n [routerLink]=\"linkPath()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n (click)=\"isSmallScreen() && sidenav.toggleMinimize()\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n <ng-template #content>\n <div class=\"d-flex gap-3 w-100\">\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <div class=\"d-flex flex-column align-items-start\">\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n @if (isSearching() && breadcrumbPath().length > 0) {\n <small class=\"d-flex align-items-center gap-1\" [class.text-muted]=\"!isActiveLink()\">\n @for (item of breadcrumbPath(); track $index) {\n <span>{{ item }}</span>\n @if (!$last) {\n <span class=\"fa-arrow-right\"></span>\n }\n }\n </small>\n }\n </div>\n </div>\n </ng-template>\n `,\n host: {\n '[class.d-none]': '!isVisibleInList() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))',\n class: 'd-flex'\n },\n imports: [RouterModule, NgTemplateOutlet]\n})\nexport class DfSidenavLinkMobileComponent extends DfSidenavLinkBaseComponent {\n // Inject link wrapper to get parent wrapper reference\n private readonly linkWrapper = inject(DfSidenavLinkComponent);\n\n private readonly currentMobilePanel = computed(() => this.sidenav['currentMobilePanel']() ?? null);\n protected readonly isSearching = computed(() => !!this.sidenav['searchTerm']().trim());\n\n protected readonly isVisibleInList = computed(() => {\n const currentPanel = this.currentMobilePanel();\n const parentWrapper = this.linkWrapper['parentWrapper'];\n // Mobile with search: show all matching links regardless of level\n if (this.isSearching()) {\n return this.isVisible();\n }\n\n // Mobile without search: use navigation levels\n if (currentPanel === null) {\n // Root level: show only first-level links\n return this.isFirstLevel && this.isVisible();\n } else {\n // Show links whose parent item wrapper matches the current panel\n return parentWrapper === currentPanel && this.isVisible();\n }\n });\n\n // Build breadcrumb path for mobile search view\n protected readonly breadcrumbPath = computed(() => {\n const path: string[] = [];\n let currentItem = this.parentItem;\n // Walk up the parent chain\n while (currentItem?.label()) {\n path.unshift(String(currentItem.label()));\n const grandParent = currentItem?.['parentWrapper'];\n currentItem = grandParent || null;\n }\n return path;\n });\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Utility directive for marking icon content in sidenav items and links.\n * Needed for identification of the projected icon content.\n * Use in case if there is no icon provided with font-awesome.\n * @since 21.0.0\n */\n@Directive({\n selector: '[dfSidenavIcon]'\n})\nexport class DfSidenavIconDirective {}\n","import { ChangeDetectionStrategy, Component, computed, contentChild, inject, input, viewChild } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavItemComponent } from '../sidenav-item/sidenav-item.component';\nimport { DfSidenavLinkDesktopComponent } from './sidenav-link-desktop.component';\nimport { DfSidenavLinkMobileComponent } from './sidenav-link-mobile.component';\nimport { DfSidenavIconDirective } from '../sidenav-icon.directive';\nimport { IsActiveMatchOptions } from '@angular/router';\n\n/**\n * Sidenav link that can be used inside <df-sidenav-item> or directly inside the <df-sidenav>\n * @since 21.0.0\n */\n@Component({\n selector: 'df-sidenav-link',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template #iconSlot>\n <ng-content select=\"[dfSidenavIcon]\" />\n </ng-template>\n <ng-template #defaultContent>\n <ng-content />\n </ng-template>\n\n @if (sidenav['isMobileDevice']) {\n <df-sidenav-link-mobile\n [linkPath]=\"linkPath()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"defaultContent\" />\n </df-sidenav-link-mobile>\n } @else {\n <df-sidenav-link-desktop\n [linkPath]=\"linkPath()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"defaultContent\" />\n </df-sidenav-link-desktop>\n }\n `,\n imports: [DfSidenavLinkDesktopComponent, DfSidenavLinkMobileComponent, NgTemplateOutlet],\n host: {\n role: 'listitem',\n class: 'd-block',\n '[class.mobile]': \"sidenav['isMobileDevice']\"\n }\n})\nexport class DfSidenavLinkComponent {\n /**\n * The router link path for to the link\n */\n readonly linkPath = input.required<string>();\n /**\n * The label of the link\n */\n readonly label = input.required<string>();\n /**\n * The icon class name or inline content (e.g., font awesome class)\n */\n readonly icon = input('');\n /**\n * Options to determine when the router link is considered active\n */\n readonly routerLinkActiveOptions = input<IsActiveMatchOptions | { exact: boolean }>({ exact: false });\n /**\n * The parent wrapper item component (if any)\n */\n protected readonly parentWrapper = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n /**\n * Reference to the desktop link component instance\n */\n protected readonly desktopInstance = viewChild(DfSidenavLinkDesktopComponent);\n /**\n * Reference to the mobile link component instance\n */\n protected readonly mobileInstance = viewChild(DfSidenavLinkMobileComponent);\n\n private readonly iconContentQuery = contentChild(DfSidenavIconDirective);\n protected readonly wrapperHasIconContent = computed(\n () => this.icon() !== '' || this.iconContentQuery() !== undefined\n );\n protected readonly sidenav = inject(DfSidenavComponent);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n inject,\n input,\n model,\n viewChild\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DfSidenavItemDesktopComponent } from './sidenav-item-desktop.component';\nimport { DfSidenavItemMobileComponent } from './sidenav-item-mobile.component';\nimport { DfSidenavLinkComponent } from '../sidenav-link/sidenav-link.component';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavIconDirective } from '../sidenav-icon.directive';\n\n/**\n * Sidenav element that should be nested inside <df-sidenav> or <df-sidenav-item>\n * @since 21.0.0\n */\n@Component({\n selector: 'df-sidenav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template #iconSlot>\n <ng-content select=\"[dfSidenavIcon]\" />\n </ng-template>\n <ng-template #content>\n <ng-content />\n </ng-template>\n\n @if (sidenav['isMobileDevice']) {\n <df-sidenav-item-mobile\n [label]=\"label()\"\n [(collapsed)]=\"collapsed\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"content\" />\n </df-sidenav-item-mobile>\n } @else {\n <df-sidenav-item-desktop\n [label]=\"label()\"\n [(collapsed)]=\"collapsed\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"content\" />\n </df-sidenav-item-desktop>\n }\n `,\n imports: [DfSidenavItemDesktopComponent, DfSidenavItemMobileComponent, NgTemplateOutlet],\n host: {\n role: 'listitem',\n class: 'd-block',\n '[class.mobile]': \"sidenav['isMobileDevice']\"\n }\n})\nexport class DfSidenavItemComponent {\n /**\n * Label of the sidenav item\n */\n readonly label = input.required();\n /**\n * Flag whether the sidenav item is collapsed\n * @default false\n */\n readonly collapsed = model(false);\n /**\n * Optional icon class for the sidenav item\n */\n readonly icon = input('');\n /**\n * Reference to the parent element containing this item\n */\n protected readonly parentWrapper = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n /**\n * Child sidenav items nested inside this item\n */\n protected readonly childrenItems = contentChildren(DfSidenavItemComponent, { descendants: true });\n /**\n * Child sidenav links nested inside this item\n */\n protected readonly childrenLinks = contentChildren(DfSidenavLinkComponent, { descendants: true });\n /**\n * Reference to the desktop instance of the sidenav item\n */\n protected readonly desktopInstance = viewChild(DfSidenavItemDesktopComponent);\n /**\n * Reference to the mobile instance of the sidenav item\n */\n protected readonly mobileInstance = viewChild(DfSidenavItemMobileComponent);\n private readonly iconContentQuery = contentChild(DfSidenavIconDirective);\n protected readonly wrapperHasIconContent = computed(\n () => this.icon() !== '' || this.iconContentQuery() !== undefined\n );\n protected readonly sidenav = inject(DfSidenavComponent);\n}\n","import { createNavManager, NavManagerItemConfig, useDirectiveForHost } from '@agnos-ui/angular-headless';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n inject,\n Injector,\n input,\n linkedSignal,\n PLATFORM_ID,\n Signal,\n signal,\n viewChild\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { DfDrawerComponent } from '@design-factory/angular/drawer';\nimport { DfMedia } from '@design-factory/design-factory';\nimport { DfSidenavItemComponent } from './sidenav-item/sidenav-item.component';\nimport { DfSidenavLinkComponent } from './sidenav-link/sidenav-link.component';\n\n/**\n * Utility method to check if the user agent is a mobile device\n *\n * @param userAgent - The user agent string to check\n * @returns `true` if the user agent corresponds to a mobile device, `false` otherwise\n */\nfunction isMobileUserAgent(userAgent: string): boolean {\n return /mobile|android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent);\n}\n\n/**\n * SideNav is a component to provide navigation feature with a panel on the side of your page\n * @since 21.0.0\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav',\n template: `\n <df-drawer\n #drawer\n className=\"inline-start {{ isSmallScreen() ? 'df-sidenav-mobile-drawer' : '' }}\"\n [visible]=\"!_isMinimized()\"\n (visibleChange)=\"visibleChangeHandler($event)\"\n (minimizedChange)=\"_isMinimized.set($event)\"\n (resizingChange)=\"resizingChangeHandler($event)\"\n [bodyScroll]=\"true\"\n [backdrop]=\"backdrop()\"\n [(size)]=\"width\"\n [container]=\"isSmallScreen() ? null : hostRef.nativeElement\"\n [resizable]=\"resizable() && !isSmallScreen()\"\n >\n <nav class=\"d-flex flex-column w-100 h-100 p-5 pb-3\">\n <div class=\"df-sidenav-header flex-shrink-0\" [class.df-sidenav-header-minimized]=\"_isMinimized()\">\n @if (searchable()) {\n @if (_isMinimized()) {\n <button\n class=\"btn btn-outline-neutral df-btn-icononly mb-3 w-100 fa-search\"\n [class.df-sidenav-search-minimized]=\"!contentHasIcons()\"\n type=\"button\"\n (click)=\"focusSearch()\"\n i18n-aria-label=\"@@df.sidenav.search.ariaLabel\"\n aria-label=\"Search\"\n ></button>\n } @else {\n <div class=\"input-group mb-3\">\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text fa-light fa-search\"></span>\n </div>\n <input\n type=\"search\"\n class=\"form-control df-input-withicon\"\n i18n-placeholder=\"@@df.sidenav.search.placeholder\"\n placeholder=\"Search\"\n i18n-aria-label=\"@@df.sidenav.search.ariaLabel\"\n aria-label=\"Search\"\n [(ngModel)]=\"searchTerm\"\n #textInput\n />\n <div class=\"input-group-append\" [class.df-is-empty]=\"searchTerm() === ''\">\n <button class=\"input-group-text fa-light fa-times\" (click)=\"searchTerm.set(''); textInput.focus()\">\n <span class=\"visually-hidden\" i18n=\"@@df.sidenav.search.clearText\">Clear text</span>\n </button>\n </div>\n </div>\n }\n }\n </div>\n\n <div role=\"list\" class=\"sidenav-body flex-grow-1 overflow-y-auto\" #scrollableContainer>\n <ng-content />\n </div>\n @if (collapsible() && !isSmallScreen()) {\n <div class=\"d-flex sidenav-footer flex-shrink-0 py-3\">\n <button\n class=\"btn btn-outline-primary df-btn-icononly df-sidenav-toggle-minimized\"\n (click)=\"toggleMinimize()\"\n i18n-aria-label=\"@@df.sidenav.toggleMinimize.ariaLabel\"\n aria-label=\"Toggle minimized sidenav\"\n >\n @if (isMinimized()) {\n <span class=\"fa-arrow-right-to-line\"></span>\n } @else {\n <span class=\"fa-arrow-left-to-line\"></span>\n }\n </button>\n </div>\n }\n </nav>\n </df-drawer>\n `,\n imports: [FormsModule, DfDrawerComponent],\n host: {\n class: 'df-sidenav',\n '[class.df-sidenav-lg]': 'isLargeUpScreen()',\n '[class.df-sidenav-withicon]': 'contentHasIcons()',\n '[class.d-none]': 'isSmallScreen() && _isMinimized()',\n '[class.df-sidenav-drawer]': 'isMediumScreen() && !_isMinimized()'\n }\n})\nexport class DfSidenavComponent implements AfterContentInit {\n /**\n * Flag whether the sidenav includes a search input\n * @default false\n */\n readonly searchable = input(false, { transform: booleanAttribute });\n /**\n * The container element for the sidenav (null for body)\n * @default null\n */\n readonly container = input<HTMLElement | null>(null);\n /**\n * Flag whether the sidenav should be resizable\n * @default false\n */\n readonly resizable = input(false, { transform: booleanAttribute });\n /**\n * Flag whether the sidenav should have the collapse button\n * @default false\n */\n readonly collapsible = input(false, { transform: booleanAttribute });\n /**\n * Flag to enable mobile device detection for responsive behavior\n * @default true\n */\n readonly enableMobile = input(true, { transform: booleanAttribute });\n\n protected readonly _isMinimized = linkedSignal(() => {\n // in mobile devices, the default value is true (hiding the drawer) and does not track changes to the screen size\n if (this.isMobileDevice) {\n return true;\n }\n // in desktop, we track the large screen signal in order to reset the minimized state\n // it allows resizing the window and have a more user-friendly behavior\n return !this.isLargeUpScreen();\n });\n\n /**\n * Flag to indicate if the sidenav is minimized\n */\n readonly isMinimized = computed(() => this._isMinimized());\n\n protected readonly hostRef = inject(ElementRef<HTMLElement>);\n\n private readonly scrollableContainer = viewChild.required<ElementRef<HTMLElement>>('scrollableContainer');\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n protected readonly isMobileDevice = (() => {\n if (this.isBrowser) {\n return this.enableMobile() && isMobileUserAgent(navigator.userAgent);\n } else {\n // SSR: try to get request if available\n try {\n const request = inject(Request, { optional: true });\n if (request && 'headers' in request) {\n const userAgent = request.headers.get('user-agent') || '';\n return this.enableMobile() && isMobileUserAgent(userAgent);\n }\n } catch {\n // Request token not available or not in SSR context\n }\n return false;\n }\n })();\n\n protected readonly searchInput = viewChild<ElementRef>('textInput');\n // Query all links to find active ones\n private readonly allLinks = contentChildren(DfSidenavLinkComponent, { descendants: true });\n private readonly allItems = contentChildren(DfSidenavItemComponent, { descendants: true });\n\n protected readonly width = signal(null as number | null);\n private savedWidth: number | null = null;\n\n protected readonly searchTerm = signal('');\n\n // Mobile navigation stack - tracks which item's children are currently displayed\n // Using component references instead of labels for uniqueness\n protected readonly mobileNavigationStack = signal<(DfSidenavItemComponent | null | undefined)[]>([]);\n protected readonly currentMobilePanel: Signal<DfSidenavItemComponent | null | undefined> = computed(() => {\n const stack = this.mobileNavigationStack();\n return stack.length > 0 ? stack[stack.length - 1] : null;\n });\n\n protected readonly isSmallScreen = toSignal(inject(DfMedia).getObservable(['sm', 'xs']), { initialValue: false });\n protected readonly isMediumScreen = toSignal(inject(DfMedia).getObservable(['md']), { initialValue: false });\n protected readonly isLargeUpScreen = toSignal(inject(DfMedia).getObservable(['lg', 'xl', 'xxl', 'xxxl']), {\n initialValue: false\n });\n protected readonly isMobileOrSmallScreen = computed(() => this.isSmallScreen() || this.isMediumScreen());\n\n protected readonly backdrop = computed(() => this.isMediumScreen());\n\n protected readonly navManager = createNavManager();\n\n protected readonly navManagerConfig: NavManagerItemConfig = {\n selector: (node) => node.querySelectorAll<HTMLElement>('input, button, a'),\n keys: {\n Home: this.navManager.focusFirst,\n End: this.navManager.focusLast\n }\n };\n\n private readonly injector = inject(Injector);\n\n constructor() {\n useDirectiveForHost(this.navManager.directive, this.navManagerConfig);\n afterRenderEffect(() => {\n if (this.isBrowser) {\n if (this.isMobileDevice && !this._isMinimized()) {\n // Delay to ensure DOM and contentChildren queries are ready\n this.navigateToActiveItem();\n }\n\n // Keep track of the screen size changes to reset width\n if (this.isMediumScreen() || this.isSmallScreen() || this.isLargeUpScreen()) {\n this.width.set(null);\n }\n }\n });\n }\n\n ngAfterContentInit() {\n if (!this.isMobileDevice && this.isBrowser && this.isLargeUpScreen()) {\n void this.initializeDesktopNavigation();\n }\n }\n\n /**\n * This method allows to center and show the active link, when the sidenav is used in desktop and a large screen.\n * It collapses all items and expands only the parents of the active link.\n * Also, it scrolls to the active link to make it visible.\n */\n private async initializeDesktopNavigation() {\n // RouterLinkActive queues two microtasks, so we wait for them to complete\n await Promise.resolve();\n await Promise.resolve();\n // Find the first active link\n const activeLink = this.allLinks()\n .find((link) => link['desktopInstance']()?.isActiveLink())\n ?.['desktopInstance']?.();\n if (activeLink) {\n this.allItems().forEach((item) => {\n item.collapsed.set(true);\n });\n let currentParent = activeLink['parentItem'];\n while (currentParent) {\n currentParent.collapsed.set(false);\n currentParent = currentParent['parentWrapper'];\n }\n\n // We need a render to make sure the getBoundingClientRect calls will be correct AFTER the collapse of the items.\n afterNextRender(\n {\n read: () => {\n const anchorElement = activeLink['anchor']().nativeElement;\n const containerElement = this.scrollableContainer().nativeElement;\n const heightPx =\n anchorElement.getBoundingClientRect().top +\n anchorElement.clientHeight / 2 -\n containerElement.getBoundingClientRect().top -\n containerElement.clientHeight / 3;\n containerElement.scrollTo({ top: heightPx, behavior: 'instant' });\n }\n },\n { injector: this.injector }\n );\n }\n }\n\n /**\n * Toggles the minimized state of the sidenav\n *\n * @param minimized - Optional parameter to explicitly set the minimized state\n *\n */\n toggleMinimize(minimized = !this._isMinimized()) {\n if (minimized) {\n this.savedWidth = this.width();\n this.width.set(0);\n } else {\n this.width.set(this.savedWidth);\n }\n this._isMinimized.set(minimized);\n }\n\n /**\n * Handles visibility changes of the sidenav component to handle the component state accordingly.\n *\n * @param isVisible - Boolean indicating whether the sidenav is currently visible\n */\n visibleChangeHandler(isVisible: boolean) {\n if (!isVisible) {\n this.width.set(0);\n }\n this._isMinimized.set(!isVisible);\n }\n\n /**\n * Handles changes when the sidenav is resized, to handle the state accordingly.\n *\n * @param isResizing - Whether the sidenav is currently being resized\n */\n resizingChangeHandler(isResizing: boolean) {\n if (isResizing) {\n this._isMinimized.set(false);\n } else {\n if (this._isMinimized()) {\n this.width.set(0);\n } else {\n this.savedWidth = this.width();\n }\n }\n }\n\n // utility to transfer focus from the button when minimized to the search input when uncollapsed\n protected focusSearch() {\n this.toggleMinimize(false);\n setTimeout(() => {\n this.searchInput()?.nativeElement.focus();\n });\n }\n\n /**\n * Method to add the given item to the mobile navigation stack\n * @param itemRef item to be added to the navigation stack\n */\n navigateToChildren(itemRef: DfSidenavItemComponent | null | undefined) {\n const stack = this.mobileNavigationStack();\n this.mobileNavigationStack.set([...stack, itemRef]);\n }\n\n /**\n * Method to navigate back in the mobile navigation stack\n */\n navigateBack() {\n const stack = this.mobileNavigationStack();\n if (stack.length > 0) {\n this.mobileNavigationStack.set(stack.slice(0, -1));\n }\n }\n\n /**\n * Navigates to the active item in the sidenav\n * Expands parent items (desktop) and sets up mobile navigation stack\n */\n private navigateToActiveItem() {\n if (!this.isBrowser) {\n return;\n }\n\n // Find the first active link\n const activeLink = this.allLinks()\n .find((link) => link['mobileInstance']()?.isActiveLink())\n ?.['mobileInstance']();\n if (activeLink && activeLink['parentItem']) {\n // Build the path from root to the active link's parent (inclusive)\n const navigationPath: DfSidenavItemComponent[] = [];\n let current: DfSidenavItemComponent | null = activeLink['parentItem'];\n while (current) {\n navigationPath.unshift(current); // Add to beginning to build path from root\n current = current['parentWrapper'];\n }\n this.mobileNavigationStack.set(navigationPath);\n } else if (activeLink && !activeLink['parentItem']) {\n // Clear navigation stack to show root level\n this.mobileNavigationStack.set([]);\n }\n }\n\n protected readonly contentHasIcons = computed(\n () =>\n this.allItems().some((item) => item['wrapperHasIconContent']()) ||\n this.allLinks().some((link) => link['wrapperHasIconContent']())\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design-factory-angular-sidenav.mjs","sources":["../../sidenav/sidenav-item/sidenav-item-base.component.ts","../../sidenav/sidenav-item/sidenav-item-desktop.component.ts","../../sidenav/sidenav-item/sidenav-item-mobile.component.ts","../../sidenav/sidenav-link/sidenav-link-base.component.ts","../../sidenav/sidenav-link/sidenav-link-desktop.component.ts","../../sidenav/sidenav-link/sidenav-link-mobile.component.ts","../../sidenav/sidenav-icon.directive.ts","../../sidenav/sidenav-link/sidenav-link.component.ts","../../sidenav/sidenav-item/sidenav-item.component.ts","../../sidenav/sidenav.ts","../../sidenav/design-factory-angular-sidenav.ts"],"sourcesContent":["import { computed, contentChild, Directive, inject, input, model, Signal } from '@angular/core';\nimport { DfSidenavLinkBaseComponent } from '../sidenav-link/sidenav-link-base.component';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavItemComponent } from './sidenav-item.component';\n\n/**\n * Base item class that is extended by desktop and mobile item components\n * The item represents a container which can hold other items or links\n * Handles collapsed state\n * @internal\n */\n@Directive()\nexport abstract class DfSidenavItemBaseComponent {\n /**\n * The label of the item\n */\n readonly label = input.required();\n /**\n * Collapsed state of the item\n * Only used for the desktop version\n * @default false\n */\n readonly collapsed = model(false);\n /**\n * The icon class name or inline content (e.g., font awesome class)\n * @default ''\n */\n readonly icon = input('');\n /**\n * Whether the wrapper component has icon content (internally used)\n * @default false\n */\n readonly wrapperHasIconContent = input(false);\n\n protected readonly sidenav = inject(DfSidenavComponent);\n protected readonly wrapperInstance = inject(DfSidenavItemComponent);\n\n // check for the parent item to determine nesting level\n protected readonly parentItem = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n protected readonly isFirstLevel = this.parentItem?.['parentWrapper'] === null;\n\n protected readonly iconContent = contentChild('dfSidenavIcon');\n\n protected abstract childLinks: Signal<readonly (DfSidenavLinkBaseComponent | undefined)[]>;\n protected abstract childItems: Signal<readonly (DfSidenavItemBaseComponent | undefined)[]>;\n\n protected readonly hasActiveLinks = computed(() => this.childLinks().some((link) => link?.isActiveLink()));\n protected readonly hasActiveItems = computed(() => this.childItems().some((item) => item?.hasActiveLinks()));\n protected readonly hasActiveChildren = computed(() => this.hasActiveLinks() || this.hasActiveItems());\n\n /**\n * Computed signal indicating if the item has visible children\n */\n protected readonly hasVisibleChildren = computed(() => this.childLinks().some((link) => link?.['isVisible']()));\n\n /**\n * Method to toggle the collapsed state of the item\n * If the sidenav is minimized, it will expand it and uncollapse the item\n */\n toggleCollapse() {\n if (this.sidenav.isMinimized()) {\n this.sidenav.toggleMinimize(false);\n this.collapsed.set(false);\n } else {\n this.collapsed.set(!this.collapsed());\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';\nimport { DfSidenavItemBaseComponent } from './sidenav-item-base.component';\n\n/**\n * Component representing an item in the sidenav for desktop devices\n * The item represents a container which can hold other items or links\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-item-desktop',\n template: `\n <button\n class=\"btn df-sidenav-button d-flex gap-3\"\n [class.df-sidenav-active-level]=\"sidenav.isMinimized() && hasActiveChildren() && isFirstLevel\"\n [class.df-sidenav-active]=\"hasActiveChildren()\"\n [class.w-100]=\"!sidenav.isMinimized()\"\n (click)=\"toggleCollapse()\"\n [attr.aria-expanded]=\"!collapsed()\"\n [class.justify-content-start]=\"!sidenav.isMinimized()\"\n [attr.aria-label]=\"label()\"\n >\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n @if (!sidenav.isMinimized()) {\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n <span\n [class.expanded]=\"!collapsed()\"\n class=\"fa-light df-sidenav-collapse-toggle fa-chevron-down ms-auto\"\n ></span>\n }\n </button>\n\n <div [class.d-none]=\"collapsed()\" role=\"list\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </div>\n <ng-template #content>\n <ng-content />\n </ng-template>\n `,\n host: {\n '[class.d-none]': '!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))'\n },\n imports: [NgTemplateOutlet]\n})\nexport class DfSidenavItemDesktopComponent extends DfSidenavItemBaseComponent {\n protected override readonly childLinks = computed(() =>\n this.wrapperInstance['childrenLinks']().map((link) => link['desktopInstance']())\n );\n protected override readonly childItems = computed(() =>\n this.wrapperInstance['childrenItems']().map((item) => item['desktopInstance']())\n );\n\n protected readonly isVisible = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return true;\n }\n return this.childLinks().some((link) => link?.['isVisible']());\n });\n\n constructor() {\n super();\n // Automatically collapse when minimized\n effect(() => {\n if (this.sidenav.isMinimized()) {\n this.collapsed.set(true);\n }\n });\n\n // Auto-expand when searching and has visible children\n effect(() => {\n if (this.sidenav['searchTerm']().trim() && this.hasVisibleChildren()) {\n this.collapsed.set(false);\n }\n });\n\n // Auto-expand when the child is active and sidenav is not minimized\n effect(() => {\n if (this.hasActiveChildren() && !this.sidenav.isMinimized()) {\n this.collapsed.set(false);\n }\n });\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { DfSidenavItemBaseComponent } from './sidenav-item-base.component';\n\n/**\n * Component representing an item in the sidenav for mobile devices\n * The item represents a container which can hold other items or links\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-item-mobile',\n template: `\n @if (shouldShowMobileHeader()) {\n <div class=\"df-sidenav-mobile-header mobile mb-2\" role=\"listitem\">\n <button\n class=\"btn w-100 d-flex gap-0 align-items-center justify-content-start df-sidenav-button\"\n (click)=\"handleBackClick()\"\n [class.df-sidenav-active]=\"hasActiveChildren()\"\n >\n <span class=\"fa-light df-sidenav-mobile-header-back-arrow fa-arrow-left me-4\"></span>\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <span class=\"ms-3 sidenav-label\">{{ label() }}</span>\n </button>\n </div>\n }\n\n <!-- Regular item button (hidden when it's the active mobile panel) -->\n @if (isVisibleInList()) {\n <!-- Mobile search: Show as breadcrumb/path (non-clickable) -->\n @if (isSearching()) {\n <div class=\"btn w-100 d-flex gap-3 justify-content-start text-muted disabled pe-none\">\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n <span class=\"fa-light df-sidenav-collapse-toggle fa-chevron-right ms-auto\"></span>\n </div>\n } @else {\n <!-- Regular clickable button -->\n <button\n class=\"btn w-100 d-flex gap-3 justify-content-start df-sidenav-button\"\n (click)=\"handleItemClick()\"\n [class.df-sidenav-active]=\"hasActiveChildren()\"\n >\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n <!-- Mobile: Show forward arrow for items with children -->\n <span class=\"fa-light df-sidenav-collapse-toggle fa-chevron-right ms-auto\"></span>\n </button>\n }\n }\n\n <!-- Children container - rendered separately from the button -->\n @if (shouldShowChildren()) {\n <div role=\"list\" class=\"mobile\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </div>\n }\n\n <ng-template #content>\n <ng-content />\n </ng-template>\n `,\n host: {\n class: 'mobile',\n '[class.d-none]': 'shouldHideComponent() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))'\n },\n imports: [NgTemplateOutlet]\n})\nexport class DfSidenavItemMobileComponent extends DfSidenavItemBaseComponent {\n protected override readonly childLinks = computed(() =>\n this.wrapperInstance['childrenLinks']().map((link) => link['mobileInstance']())\n );\n protected override readonly childItems = computed(() =>\n this.wrapperInstance['childrenItems']().map((item) => item['mobileInstance']())\n );\n protected readonly isSearching = computed(() => !!this.sidenav['searchTerm']().trim());\n\n // Check if this item is in the navigation path (is an ancestor of current panel)\n private readonly isInNavigationPath = computed(() =>\n this.sidenav['mobileNavigationStack']().includes(this.wrapperInstance)\n );\n\n // Check if this item should show as mobile header\n protected readonly shouldShowMobileHeader = computed(() => {\n // Don't show header when searching\n if (this.isSearching()) {\n return false;\n }\n return this.sidenav['currentMobilePanel']() === this.wrapperInstance;\n });\n\n // Determine if this item's children should be visible\n protected readonly shouldShowChildren = computed(() => {\n // Mobile with search: show children to display matching links\n if (this.isSearching()) {\n return this.hasMatchingChildren();\n }\n // Mobile without search: show if this item is in the navigation path\n return this.isInNavigationPath();\n });\n\n // Determine if this item should be visible in the list\n protected readonly isVisibleInList = computed(() => {\n // Mobile with search: don't show items, only links (items just provide structure)\n if (this.isSearching()) {\n return false;\n }\n\n // Mobile without search: use navigation levels\n const currentPanel = this.sidenav['currentMobilePanel']();\n\n if (currentPanel === null) {\n // Root level: show only first-level items\n return this.isFirstLevel && this.isVisible();\n } else if (currentPanel === this.parentItem) {\n // This is the active panel, don't show it in the list (it's in the header)\n return false;\n } else {\n // Show items whose parent matches the current panel\n const parentMobile = this.parentItem?.['parentWrapper'];\n return parentMobile === currentPanel && this.isVisible();\n }\n });\n\n // Determine if the entire component should be hidden\n protected readonly shouldHideComponent = computed(() => {\n // Don't hide if this is the current mobile panel showing its children\n if (this.shouldShowMobileHeader()) {\n return false;\n }\n // Otherwise, use the regular visibility logic\n return !this.isVisibleInList() && !this.shouldShowChildren();\n });\n\n private readonly isVisible = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return true;\n }\n\n // Check if this item's label matches\n return String(this.label()).toLowerCase().includes(search);\n });\n\n // Check if this item has any matching children (for showing the container)\n private readonly hasMatchingChildren = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return false;\n }\n return this.childLinks().some((link) => link?.['isVisible']());\n });\n\n /**\n * Handle click event on the item\n */\n protected handleItemClick() {\n this.sidenav.navigateToChildren(this.wrapperInstance);\n }\n\n /**\n * Handle click event on the header back button\n */\n protected handleBackClick() {\n this.sidenav.navigateBack();\n }\n}\n","import { computed, contentChild, Directive, inject, input, signal } from '@angular/core';\nimport { IsActiveMatchOptions } from '@angular/router';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavItemComponent } from '../sidenav-item/sidenav-item.component';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { DfMedia } from '@design-factory/design-factory';\n\n/**\n * Base link class that is extended by desktop and mobile link components\n * @internal\n */\n@Directive()\nexport abstract class DfSidenavLinkBaseComponent {\n /**\n * The router link path for to the link\n */\n readonly linkPath = input.required<string>();\n /**\n * The label of the link\n */\n readonly label = input.required<string>();\n /**\n * The icon class name or inline content (e.g., font awesome class)\n */\n readonly icon = input('');\n /**\n * Whether the wrapper component has icon content (internally used)\n */\n readonly wrapperHasIconContent = input(false);\n /**\n * Indicates if the link is currently active based on the Router state\n */\n readonly isActiveLink = signal(false);\n /**\n * Options to determine when the router link is considered active\n */\n readonly routerLinkActiveOptions = input<IsActiveMatchOptions | { exact: boolean }>({ exact: false });\n\n protected readonly isSmallScreen = toSignal(inject(DfMedia).getObservable(['sm', 'xs']), { initialValue: false });\n\n protected readonly sidenav = inject(DfSidenavComponent);\n protected readonly parentItem = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n protected readonly isFirstLevel = this.parentItem === null;\n protected readonly iconContent = contentChild('dfSidenavIcon');\n\n /**\n * Computed signal indicating if the link is visible based on search term\n */\n protected readonly isVisible = computed(() => {\n const search = this.sidenav['searchTerm']().toLowerCase().trim() || '';\n if (!search) {\n return true;\n }\n return this.label().toLowerCase().includes(search);\n });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, viewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DfSidenavLinkBaseComponent } from './sidenav-link-base.component';\n\n/**\n * Component representing a leaf in the sidenav for desktop devices\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-link-desktop',\n template: `\n <a\n class=\"btn df-sidenav-button d-flex gap-3\"\n [class.w-100]=\"!sidenav.isMinimized()\"\n routerLinkActive=\"df-sidenav-active-level\"\n ariaCurrentWhenActive=\"page\"\n (isActiveChange)=\"isActiveLink.set($event)\"\n [routerLink]=\"linkPath()\"\n [class.justify-content-start]=\"!sidenav.isMinimized()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [attr.aria-label]=\"label()\"\n (click)=\"isSmallScreen() && sidenav.toggleMinimize()\"\n #anchor\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n <ng-template #content>\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n @if (!sidenav.isMinimized()) {\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n }\n </ng-template>\n `,\n host: {\n '[class.d-none]': '!isVisible() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))',\n class: 'd-flex'\n },\n imports: [RouterModule, NgTemplateOutlet]\n})\nexport class DfSidenavLinkDesktopComponent extends DfSidenavLinkBaseComponent {\n protected readonly anchor = viewChild.required<ElementRef<HTMLAnchorElement>>('anchor');\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DfSidenavLinkBaseComponent } from './sidenav-link-base.component';\nimport { DfSidenavLinkComponent } from './sidenav-link.component';\n\n/**\n * Component representing a leaf in the sidenav for mobile devices\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav-link-mobile',\n template: `\n <a\n class=\"btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button\"\n routerLinkActive=\"df-sidenav-active-level\"\n ariaCurrentWhenActive=\"page\"\n (isActiveChange)=\"isActiveLink.set($event)\"\n [routerLink]=\"linkPath()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n (click)=\"isSmallScreen() && sidenav.toggleMinimize()\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n <ng-template #content>\n <div class=\"d-flex gap-3 w-100\">\n <ng-content select=\"[dfSidenavIcon]\" />\n @if (icon()) {\n <span class=\"{{ icon() }}\"></span>\n }\n <div class=\"d-flex flex-column align-items-start\">\n <span class=\"sidenav-label\" [title]=\"label()\">{{ label() }}</span>\n @if (isSearching() && breadcrumbPath().length > 0) {\n <small class=\"d-flex align-items-center gap-1\" [class.text-muted]=\"!isActiveLink()\">\n @for (item of breadcrumbPath(); track $index) {\n <span>{{ item }}</span>\n @if (!$last) {\n <span class=\"fa-arrow-right\"></span>\n }\n }\n </small>\n }\n </div>\n </div>\n </ng-template>\n `,\n host: {\n '[class.d-none]': '!isVisibleInList() || (sidenav.isMinimized() && (!isFirstLevel || !wrapperHasIconContent()))',\n class: 'd-flex'\n },\n imports: [RouterModule, NgTemplateOutlet]\n})\nexport class DfSidenavLinkMobileComponent extends DfSidenavLinkBaseComponent {\n // Inject link wrapper to get parent wrapper reference\n private readonly linkWrapper = inject(DfSidenavLinkComponent);\n\n private readonly currentMobilePanel = computed(() => this.sidenav['currentMobilePanel']() ?? null);\n protected readonly isSearching = computed(() => !!this.sidenav['searchTerm']().trim());\n\n protected readonly isVisibleInList = computed(() => {\n const currentPanel = this.currentMobilePanel();\n const parentWrapper = this.linkWrapper['parentWrapper'];\n // Mobile with search: show all matching links regardless of level\n if (this.isSearching()) {\n return this.isVisible();\n }\n\n // Mobile without search: use navigation levels\n if (currentPanel === null) {\n // Root level: show only first-level links\n return this.isFirstLevel && this.isVisible();\n } else {\n // Show links whose parent item wrapper matches the current panel\n return parentWrapper === currentPanel && this.isVisible();\n }\n });\n\n // Build breadcrumb path for mobile search view\n protected readonly breadcrumbPath = computed(() => {\n const path: string[] = [];\n let currentItem = this.parentItem;\n // Walk up the parent chain\n while (currentItem?.label()) {\n path.unshift(String(currentItem.label()));\n const grandParent = currentItem?.['parentWrapper'];\n currentItem = grandParent || null;\n }\n return path;\n });\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Utility directive for marking icon content in sidenav items and links.\n * Needed for identification of the projected icon content.\n * Use in case if there is no icon provided with font-awesome.\n * @since 21.0.0\n */\n@Directive({\n selector: '[dfSidenavIcon]'\n})\nexport class DfSidenavIconDirective {}\n","import { ChangeDetectionStrategy, Component, computed, contentChild, inject, input, viewChild } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavItemComponent } from '../sidenav-item/sidenav-item.component';\nimport { DfSidenavLinkDesktopComponent } from './sidenav-link-desktop.component';\nimport { DfSidenavLinkMobileComponent } from './sidenav-link-mobile.component';\nimport { DfSidenavIconDirective } from '../sidenav-icon.directive';\nimport { IsActiveMatchOptions } from '@angular/router';\n\n/**\n * Sidenav link that can be used inside <df-sidenav-item> or directly inside the <df-sidenav>\n * @since 21.0.0\n */\n@Component({\n selector: 'df-sidenav-link',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template #iconSlot>\n <ng-content select=\"[dfSidenavIcon]\" />\n </ng-template>\n <ng-template #defaultContent>\n <ng-content />\n </ng-template>\n\n @if (sidenav['isMobileDevice']) {\n <df-sidenav-link-mobile\n [linkPath]=\"linkPath()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"defaultContent\" />\n </df-sidenav-link-mobile>\n } @else {\n <df-sidenav-link-desktop\n [linkPath]=\"linkPath()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"defaultContent\" />\n </df-sidenav-link-desktop>\n }\n `,\n imports: [DfSidenavLinkDesktopComponent, DfSidenavLinkMobileComponent, NgTemplateOutlet],\n host: {\n role: 'listitem',\n class: 'd-block',\n '[class.mobile]': \"sidenav['isMobileDevice']\"\n }\n})\nexport class DfSidenavLinkComponent {\n /**\n * The router link path for to the link\n */\n readonly linkPath = input.required<string>();\n /**\n * The label of the link\n */\n readonly label = input.required<string>();\n /**\n * The icon class name or inline content (e.g., font awesome class)\n */\n readonly icon = input('');\n /**\n * Options to determine when the router link is considered active\n */\n readonly routerLinkActiveOptions = input<IsActiveMatchOptions | { exact: boolean }>({ exact: false });\n /**\n * The parent wrapper item component (if any)\n */\n protected readonly parentWrapper = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n /**\n * Reference to the desktop link component instance\n */\n protected readonly desktopInstance = viewChild(DfSidenavLinkDesktopComponent);\n /**\n * Reference to the mobile link component instance\n */\n protected readonly mobileInstance = viewChild(DfSidenavLinkMobileComponent);\n\n private readonly iconContentQuery = contentChild(DfSidenavIconDirective);\n protected readonly wrapperHasIconContent = computed(\n () => this.icon() !== '' || this.iconContentQuery() !== undefined\n );\n protected readonly sidenav = inject(DfSidenavComponent);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n inject,\n input,\n model,\n viewChild\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DfSidenavItemDesktopComponent } from './sidenav-item-desktop.component';\nimport { DfSidenavItemMobileComponent } from './sidenav-item-mobile.component';\nimport { DfSidenavLinkComponent } from '../sidenav-link/sidenav-link.component';\nimport { DfSidenavComponent } from '../sidenav';\nimport { DfSidenavIconDirective } from '../sidenav-icon.directive';\n\n/**\n * Sidenav element that should be nested inside <df-sidenav> or <df-sidenav-item>\n * @since 21.0.0\n */\n@Component({\n selector: 'df-sidenav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template #iconSlot>\n <ng-content select=\"[dfSidenavIcon]\" />\n </ng-template>\n <ng-template #content>\n <ng-content />\n </ng-template>\n\n @if (sidenav['isMobileDevice']) {\n <df-sidenav-item-mobile\n [label]=\"label()\"\n [(collapsed)]=\"collapsed\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"content\" />\n </df-sidenav-item-mobile>\n } @else {\n <df-sidenav-item-desktop\n [label]=\"label()\"\n [(collapsed)]=\"collapsed\"\n [icon]=\"icon()\"\n [wrapperHasIconContent]=\"wrapperHasIconContent()\"\n >\n <ng-container [ngTemplateOutlet]=\"iconSlot\" ngProjectAs=\"[dfSidenavIcon]\" />\n <ng-container [ngTemplateOutlet]=\"content\" />\n </df-sidenav-item-desktop>\n }\n `,\n imports: [DfSidenavItemDesktopComponent, DfSidenavItemMobileComponent, NgTemplateOutlet],\n host: {\n role: 'listitem',\n class: 'd-block',\n '[class.mobile]': \"sidenav['isMobileDevice']\"\n }\n})\nexport class DfSidenavItemComponent {\n /**\n * Label of the sidenav item\n */\n readonly label = input.required();\n /**\n * Flag whether the sidenav item is collapsed\n * @default false\n */\n readonly collapsed = model(false);\n /**\n * Optional icon class for the sidenav item\n */\n readonly icon = input('');\n /**\n * Reference to the parent element containing this item\n */\n protected readonly parentWrapper = inject(DfSidenavItemComponent, {\n optional: true,\n skipSelf: true\n });\n /**\n * Child sidenav items nested inside this item\n */\n protected readonly childrenItems = contentChildren(DfSidenavItemComponent, { descendants: true });\n /**\n * Child sidenav links nested inside this item\n */\n protected readonly childrenLinks = contentChildren(DfSidenavLinkComponent, { descendants: true });\n /**\n * Reference to the desktop instance of the sidenav item\n */\n protected readonly desktopInstance = viewChild(DfSidenavItemDesktopComponent);\n /**\n * Reference to the mobile instance of the sidenav item\n */\n protected readonly mobileInstance = viewChild(DfSidenavItemMobileComponent);\n private readonly iconContentQuery = contentChild(DfSidenavIconDirective);\n protected readonly wrapperHasIconContent = computed(\n () => this.icon() !== '' || this.iconContentQuery() !== undefined\n );\n protected readonly sidenav = inject(DfSidenavComponent);\n}\n","import { createNavManager, NavManagerItemConfig, useDirectiveForHost } from '@agnos-ui/angular-headless';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n inject,\n Injector,\n input,\n linkedSignal,\n PLATFORM_ID,\n Signal,\n signal,\n viewChild\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { DfDrawerComponent } from '@design-factory/angular/drawer';\nimport { DfMedia } from '@design-factory/design-factory';\nimport { DfSidenavItemComponent } from './sidenav-item/sidenav-item.component';\nimport { DfSidenavLinkComponent } from './sidenav-link/sidenav-link.component';\n\n/**\n * Utility method to check if the user agent is a mobile device\n *\n * @param userAgent - The user agent string to check\n * @returns `true` if the user agent corresponds to a mobile device, `false` otherwise\n */\nfunction isMobileUserAgent(userAgent: string): boolean {\n return /mobile|android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent);\n}\n\n/**\n * SideNav is a component to provide navigation feature with a panel on the side of your page\n * @since 21.0.0\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'df-sidenav',\n template: `\n <df-drawer\n #drawer\n className=\"inline-start {{ isSmallScreen() ? 'df-sidenav-mobile-drawer' : '' }}\"\n [visible]=\"!_isMinimized()\"\n (visibleChange)=\"visibleChangeHandler($event)\"\n (minimizedChange)=\"_isMinimized.set($event)\"\n (resizingChange)=\"resizingChangeHandler($event)\"\n [bodyScroll]=\"true\"\n [backdrop]=\"backdrop()\"\n [(size)]=\"width\"\n [container]=\"isSmallScreen() ? null : hostRef.nativeElement\"\n [resizable]=\"resizable() && !isSmallScreen()\"\n >\n <nav class=\"d-flex flex-column w-100 h-100 p-5 pb-3\">\n <div class=\"df-sidenav-header flex-shrink-0\" [class.df-sidenav-header-minimized]=\"_isMinimized()\">\n @if (searchable()) {\n @if (_isMinimized()) {\n <button\n class=\"btn btn-outline-neutral df-btn-icononly mb-3 w-100 fa-search\"\n [class.df-sidenav-search-minimized]=\"!contentHasIcons()\"\n type=\"button\"\n (click)=\"focusSearch()\"\n i18n-aria-label=\"@@df.sidenav.search.ariaLabel\"\n aria-label=\"Search\"\n ></button>\n } @else {\n <div class=\"input-group mb-3\">\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text fa-light fa-search\"></span>\n </div>\n <input\n type=\"search\"\n class=\"form-control df-input-withicon\"\n i18n-placeholder=\"@@df.sidenav.search.placeholder\"\n placeholder=\"Search\"\n i18n-aria-label=\"@@df.sidenav.search.ariaLabel\"\n aria-label=\"Search\"\n [(ngModel)]=\"searchTerm\"\n #textInput\n />\n <div class=\"input-group-append\">\n <button\n class=\"input-group-text fa-light fa-times\"\n [class.df-sidenav-search-empty]=\"searchTerm() === ''\"\n (click)=\"searchTerm.set(''); textInput.focus()\"\n >\n <span class=\"visually-hidden\" i18n=\"@@df.sidenav.search.clearText\">Clear text</span>\n </button>\n </div>\n </div>\n }\n }\n </div>\n\n <div role=\"list\" class=\"sidenav-body flex-grow-1 overflow-y-auto\" #scrollableContainer>\n <ng-content />\n </div>\n @if (collapsible() && !isSmallScreen()) {\n <div class=\"d-flex sidenav-footer flex-shrink-0 py-3\">\n <button\n class=\"btn btn-outline-primary df-btn-icononly df-sidenav-toggle-minimized\"\n (click)=\"toggleMinimize()\"\n i18n-aria-label=\"@@df.sidenav.toggleMinimize.ariaLabel\"\n aria-label=\"Toggle minimized sidenav\"\n >\n @if (isMinimized()) {\n <span class=\"fa-arrow-right-to-line\"></span>\n } @else {\n <span class=\"fa-arrow-left-to-line\"></span>\n }\n </button>\n </div>\n }\n </nav>\n </df-drawer>\n `,\n imports: [FormsModule, DfDrawerComponent],\n host: {\n class: 'df-sidenav',\n '[class.df-sidenav-lg]': 'isLargeUpScreen()',\n '[class.df-sidenav-withicon]': 'contentHasIcons()',\n '[class.d-none]': 'isSmallScreen() && _isMinimized()',\n '[class.df-sidenav-drawer]': 'isMediumScreen() && !_isMinimized()'\n }\n})\nexport class DfSidenavComponent implements AfterContentInit {\n /**\n * Flag whether the sidenav includes a search input\n * @default true\n */\n readonly searchable = input(true, { transform: booleanAttribute });\n /**\n * The container element for the sidenav (null for body)\n * @default null\n */\n readonly container = input<HTMLElement | null>(null);\n /**\n * Flag whether the sidenav should be resizable\n * @default true\n */\n readonly resizable = input(true, { transform: booleanAttribute });\n /**\n * Flag whether the sidenav should have the collapse button\n * @default true\n */\n readonly collapsible = input(true, { transform: booleanAttribute });\n /**\n * Flag to enable mobile device detection for responsive behavior\n * @default true\n */\n readonly enableMobile = input(true, { transform: booleanAttribute });\n\n protected readonly _isMinimized = linkedSignal(() => {\n // in mobile devices, the default value is true (hiding the drawer) and does not track changes to the screen size\n if (this.isMobileDevice) {\n return true;\n }\n // in desktop, we track the large screen signal in order to reset the minimized state\n // it allows resizing the window and have a more user-friendly behavior\n return !this.isLargeUpScreen();\n });\n\n /**\n * Flag to indicate if the sidenav is minimized\n */\n readonly isMinimized = computed(() => this._isMinimized());\n\n protected readonly hostRef = inject(ElementRef<HTMLElement>);\n\n private readonly scrollableContainer = viewChild.required<ElementRef<HTMLElement>>('scrollableContainer');\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n protected readonly isMobileDevice = (() => {\n if (this.isBrowser) {\n return this.enableMobile() && isMobileUserAgent(navigator.userAgent);\n } else {\n // SSR: try to get request if available\n try {\n const request = inject(Request, { optional: true });\n if (request && 'headers' in request) {\n const userAgent = request.headers.get('user-agent') || '';\n return this.enableMobile() && isMobileUserAgent(userAgent);\n }\n } catch {\n // Request token not available or not in SSR context\n }\n return false;\n }\n })();\n\n protected readonly searchInput = viewChild<ElementRef>('textInput');\n // Query all links to find active ones\n private readonly allLinks = contentChildren(DfSidenavLinkComponent, { descendants: true });\n private readonly allItems = contentChildren(DfSidenavItemComponent, { descendants: true });\n\n protected readonly width = signal(null as number | null);\n private savedWidth: number | null = null;\n\n protected readonly searchTerm = signal('');\n\n // Mobile navigation stack - tracks which item's children are currently displayed\n // Using component references instead of labels for uniqueness\n protected readonly mobileNavigationStack = signal<(DfSidenavItemComponent | null | undefined)[]>([]);\n protected readonly currentMobilePanel: Signal<DfSidenavItemComponent | null | undefined> = computed(() => {\n const stack = this.mobileNavigationStack();\n return stack.length > 0 ? stack[stack.length - 1] : null;\n });\n\n protected readonly isSmallScreen = toSignal(inject(DfMedia).getObservable(['sm', 'xs']), { initialValue: false });\n protected readonly isMediumScreen = toSignal(inject(DfMedia).getObservable(['md']), { initialValue: false });\n protected readonly isLargeUpScreen = toSignal(inject(DfMedia).getObservable(['lg', 'xl', 'xxl', 'xxxl']), {\n initialValue: false\n });\n protected readonly isMobileOrSmallScreen = computed(() => this.isSmallScreen() || this.isMediumScreen());\n\n protected readonly backdrop = computed(() => this.isMediumScreen());\n\n protected readonly navManager = createNavManager();\n\n protected readonly navManagerConfig: NavManagerItemConfig = {\n selector: (node) => node.querySelectorAll<HTMLElement>('input, button, a'),\n keys: {\n Home: this.navManager.focusFirst,\n End: this.navManager.focusLast\n }\n };\n\n private readonly injector = inject(Injector);\n\n constructor() {\n useDirectiveForHost(this.navManager.directive, this.navManagerConfig);\n afterRenderEffect(() => {\n if (this.isBrowser) {\n if (this.isMobileDevice && !this._isMinimized()) {\n // Delay to ensure DOM and contentChildren queries are ready\n this.navigateToActiveItem();\n }\n\n // Keep track of the screen size changes to reset width\n if (this.isMediumScreen() || this.isSmallScreen() || this.isLargeUpScreen()) {\n this.width.set(null);\n }\n }\n });\n }\n\n ngAfterContentInit() {\n if (!this.isMobileDevice && this.isBrowser && this.isLargeUpScreen()) {\n void this.initializeDesktopNavigation();\n }\n }\n\n /**\n * This method allows to center and show the active link, when the sidenav is used in desktop and a large screen.\n * It collapses all items and expands only the parents of the active link.\n * Also, it scrolls to the active link to make it visible.\n */\n private async initializeDesktopNavigation() {\n // RouterLinkActive queues two microtasks, so we wait for them to complete\n await Promise.resolve();\n await Promise.resolve();\n // Find the first active link\n const activeLink = this.allLinks()\n .find((link) => link['desktopInstance']()?.isActiveLink())\n ?.['desktopInstance']?.();\n if (activeLink) {\n this.allItems().forEach((item) => {\n item.collapsed.set(true);\n });\n let currentParent = activeLink['parentItem'];\n while (currentParent) {\n currentParent.collapsed.set(false);\n currentParent = currentParent['parentWrapper'];\n }\n\n // We need a render to make sure the getBoundingClientRect calls will be correct AFTER the collapse of the items.\n afterNextRender(\n {\n read: () => {\n const anchorElement = activeLink['anchor']().nativeElement;\n const containerElement = this.scrollableContainer().nativeElement;\n const heightPx =\n anchorElement.getBoundingClientRect().top +\n anchorElement.clientHeight / 2 -\n containerElement.getBoundingClientRect().top -\n containerElement.clientHeight / 3;\n containerElement.scrollTo({ top: heightPx, behavior: 'instant' });\n }\n },\n { injector: this.injector }\n );\n }\n }\n\n /**\n * Toggles the minimized state of the sidenav\n *\n * @param minimized - Optional parameter to explicitly set the minimized state\n *\n */\n toggleMinimize(minimized = !this._isMinimized()) {\n if (minimized) {\n this.savedWidth = this.width();\n this.width.set(0);\n } else {\n this.width.set(this.savedWidth);\n }\n this._isMinimized.set(minimized);\n }\n\n /**\n * Handles visibility changes of the sidenav component to handle the component state accordingly.\n *\n * @param isVisible - Boolean indicating whether the sidenav is currently visible\n */\n visibleChangeHandler(isVisible: boolean) {\n if (!isVisible) {\n this.width.set(0);\n }\n this._isMinimized.set(!isVisible);\n }\n\n /**\n * Handles changes when the sidenav is resized, to handle the state accordingly.\n *\n * @param isResizing - Whether the sidenav is currently being resized\n */\n resizingChangeHandler(isResizing: boolean) {\n if (isResizing) {\n this._isMinimized.set(false);\n } else {\n if (this._isMinimized()) {\n this.width.set(0);\n } else {\n this.savedWidth = this.width();\n }\n }\n }\n\n // utility to transfer focus from the button when minimized to the search input when uncollapsed\n protected focusSearch() {\n this.toggleMinimize(false);\n setTimeout(() => {\n this.searchInput()?.nativeElement.focus();\n });\n }\n\n /**\n * Method to add the given item to the mobile navigation stack\n * @param itemRef item to be added to the navigation stack\n */\n navigateToChildren(itemRef: DfSidenavItemComponent | null | undefined) {\n const stack = this.mobileNavigationStack();\n this.mobileNavigationStack.set([...stack, itemRef]);\n }\n\n /**\n * Method to navigate back in the mobile navigation stack\n */\n navigateBack() {\n const stack = this.mobileNavigationStack();\n if (stack.length > 0) {\n this.mobileNavigationStack.set(stack.slice(0, -1));\n }\n }\n\n /**\n * Navigates to the active item in the sidenav\n * Expands parent items (desktop) and sets up mobile navigation stack\n */\n private navigateToActiveItem() {\n if (!this.isBrowser) {\n return;\n }\n\n // Find the first active link\n const activeLink = this.allLinks()\n .find((link) => link['mobileInstance']()?.isActiveLink())\n ?.['mobileInstance']();\n if (activeLink && activeLink['parentItem']) {\n // Build the path from root to the active link's parent (inclusive)\n const navigationPath: DfSidenavItemComponent[] = [];\n let current: DfSidenavItemComponent | null = activeLink['parentItem'];\n while (current) {\n navigationPath.unshift(current); // Add to beginning to build path from root\n current = current['parentWrapper'];\n }\n this.mobileNavigationStack.set(navigationPath);\n } else if (activeLink && !activeLink['parentItem']) {\n // Clear navigation stack to show root level\n this.mobileNavigationStack.set([]);\n }\n }\n\n protected readonly contentHasIcons = computed(\n () =>\n this.allItems().some((item) => item['wrapperHasIconContent']()) ||\n this.allLinks().some((link) => link['wrapperHasIconContent']())\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@design-factory/angular",
3
3
  "description": "Amadeus design system Angular implementation",
4
4
  "license": "BSD-3-Clause",
5
- "version": "21.0.0-next.0",
5
+ "version": "21.0.0-next.1",
6
6
  "dependencies": {
7
7
  "tslib": "^2.0.0"
8
8
  },
@@ -13,7 +13,8 @@
13
13
  "@angular/core": "^21.0.0",
14
14
  "@angular/localize": "^21.0.0",
15
15
  "@angular/router": "^21.0.0",
16
- "@design-factory/styles": "21.0.0-next.0"
16
+ "@design-factory/design-factory": "21.0.0-next.1",
17
+ "@design-factory/styles": "21.0.0-next.1"
17
18
  },
18
19
  "peerDependenciesMeta": {
19
20
  "@angular/router": {
@@ -34,14 +35,6 @@
34
35
  "types": "./types/design-factory-angular.d.ts",
35
36
  "default": "./fesm2022/design-factory-angular.mjs"
36
37
  },
37
- "./accordion": {
38
- "types": "./types/design-factory-angular-accordion.d.ts",
39
- "default": "./fesm2022/design-factory-angular-accordion.mjs"
40
- },
41
- "./config": {
42
- "types": "./types/design-factory-angular-config.d.ts",
43
- "default": "./fesm2022/design-factory-angular-config.mjs"
44
- },
45
38
  "./drawer": {
46
39
  "types": "./types/design-factory-angular-drawer.d.ts",
47
40
  "default": "./fesm2022/design-factory-angular-drawer.mjs"
@@ -114,7 +114,6 @@ declare class DfDrawerComponent extends AgnosWidgetDirective<DrawerWidget> {
114
114
  * @defaultValue `null`
115
115
  */
116
116
  readonly maxSize: _angular_core.OutputEmitterRef<void>;
117
- protected readonly isSmallScreen: _angular_core.Signal<boolean>;
118
117
  protected readonly isMediumScreen: _angular_core.Signal<boolean>;
119
118
  protected readonly isLargeUpScreen: _angular_core.Signal<boolean>;
120
119
  private readonly isBrowser;
@@ -258,7 +258,7 @@ declare class DfSidenavItemComponent {
258
258
  declare class DfSidenavComponent implements AfterContentInit {
259
259
  /**
260
260
  * Flag whether the sidenav includes a search input
261
- * @default false
261
+ * @default true
262
262
  */
263
263
  readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
264
264
  /**
@@ -268,12 +268,12 @@ declare class DfSidenavComponent implements AfterContentInit {
268
268
  readonly container: _angular_core.InputSignal<HTMLElement | null>;
269
269
  /**
270
270
  * Flag whether the sidenav should be resizable
271
- * @default false
271
+ * @default true
272
272
  */
273
273
  readonly resizable: _angular_core.InputSignalWithTransform<boolean, unknown>;
274
274
  /**
275
275
  * Flag whether the sidenav should have the collapse button
276
- * @default false
276
+ * @default true
277
277
  */
278
278
  readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
279
279
  /**
@@ -1,55 +0,0 @@
1
- import { provideDfComponentConfig, injectDfComponentConfig } from '@design-factory/angular/internals';
2
- import * as i0 from '@angular/core';
3
- import { ChangeDetectionStrategy, Component } from '@angular/core';
4
-
5
- // the key of the accordion config in the global DF config
6
- const ACCORDION_CONFIG_KEY = 'accordion';
7
- /**
8
- * Provides the configuration for the accordion component.
9
- *
10
- * @example
11
- * ```ts
12
- * \@Component({
13
- * providers: [provideDfAccordionConfig({ closeOthers: true })]
14
- * })
15
- * export class MyHomeComponent {}
16
- * ```
17
- *
18
- * @param config - Partial configuration or a function that receives the parent configuration and returns a partial configuration.
19
- */
20
- const provideDfAccordionConfig = provideDfComponentConfig(ACCORDION_CONFIG_KEY);
21
- /**
22
- * Injects the configuration for the accordion component.
23
- *
24
- * @example
25
- * ```ts
26
- * \@Component({
27
- * providers: [provideDfAccordionConfig()]
28
- * })
29
- * export class MyAccordionComponent {
30
- * readonly accordionConfig = injectDfAccordionConfig();
31
- * }
32
- * ```
33
- *
34
- * @returns A writable signal containing the accordion configuration.
35
- */
36
- const injectDfAccordionConfig = injectDfComponentConfig(ACCORDION_CONFIG_KEY);
37
-
38
- class DfAccordionComponent {
39
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: DfAccordionComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
- }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DfAccordionComponent, decorators: [{
43
- type: Component,
44
- args: [{
45
- template: ``,
46
- changeDetection: ChangeDetectionStrategy.OnPush
47
- }]
48
- }] });
49
-
50
- /**
51
- * Generated bundle index. Do not edit.
52
- */
53
-
54
- export { ACCORDION_CONFIG_KEY, DfAccordionComponent, injectDfAccordionConfig, provideDfAccordionConfig };
55
- //# sourceMappingURL=design-factory-angular-accordion.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-factory-angular-accordion.mjs","sources":["../../accordion/accordion.config.ts","../../accordion/accordion.ts","../../accordion/design-factory-angular-accordion.ts"],"sourcesContent":["import { injectDfComponentConfig, provideDfComponentConfig } from '@design-factory/angular/internals';\n\n// TODO to fill\nexport type DfAccordionConfig = {\n /**\n * example prop\n */\n closeOthers: boolean;\n};\n\n// the key of the accordion config in the global DF config\nexport const ACCORDION_CONFIG_KEY = 'accordion' as const;\n\n/**\n * Provides the configuration for the accordion component.\n *\n * @example\n * ```ts\n * \\@Component({\n * providers: [provideDfAccordionConfig({ closeOthers: true })]\n * })\n * export class MyHomeComponent {}\n * ```\n *\n * @param config - Partial configuration or a function that receives the parent configuration and returns a partial configuration.\n */\nexport const provideDfAccordionConfig = provideDfComponentConfig<DfAccordionConfig>(ACCORDION_CONFIG_KEY);\n\n/**\n * Injects the configuration for the accordion component.\n *\n * @example\n * ```ts\n * \\@Component({\n * providers: [provideDfAccordionConfig()]\n * })\n * export class MyAccordionComponent {\n * readonly accordionConfig = injectDfAccordionConfig();\n * }\n * ```\n *\n * @returns A writable signal containing the accordion configuration.\n */\nexport const injectDfAccordionConfig = injectDfComponentConfig<DfAccordionConfig>(ACCORDION_CONFIG_KEY);\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DfAccordionComponent {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAUA;AACO,MAAM,oBAAoB,GAAG;AAEpC;;;;;;;;;;;;AAYG;MACU,wBAAwB,GAAG,wBAAwB,CAAoB,oBAAoB;AAExG;;;;;;;;;;;;;;AAcG;MACU,uBAAuB,GAAG,uBAAuB,CAAoB,oBAAoB;;MCrCzF,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,wEAHrB,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA,CAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC;AAC1C,iBAAA;;;ACLD;;AAEG;;;;"}
@@ -1,22 +0,0 @@
1
- import { toAngularWritableSignal } from '@agnos-ui/angular-headless';
2
- import '@design-factory/angular/accordion';
3
- import { provideWidgetsConfig, injectWidgetsConfig } from '@design-factory/angular/internals';
4
-
5
- /**
6
- * TODO write clear and simple doc
7
- */
8
- const provideDfConfig = (config) => provideWidgetsConfig(typeof config === 'function' ? config : (parentConfig) => ({ ...parentConfig, ...(config ?? {}) }));
9
- /**
10
- * TODO write clear and simple doc
11
- */
12
- const injectDFConfig = () => {
13
- const widgetsConfigStore = injectWidgetsConfig();
14
- return toAngularWritableSignal(widgetsConfigStore.own$);
15
- };
16
-
17
- /**
18
- * Generated bundle index. Do not edit.
19
- */
20
-
21
- export { injectDFConfig, provideDfConfig };
22
- //# sourceMappingURL=design-factory-angular-config.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-factory-angular-config.mjs","sources":["../../config/config.ts","../../config/design-factory-angular-config.ts"],"sourcesContent":["import { toAngularWritableSignal, type WidgetsConfigStore, type Partial2Levels } from '@agnos-ui/angular-headless';\nimport type { FactoryProvider } from '@angular/core';\nimport { ACCORDION_CONFIG_KEY, DfAccordionConfig } from '@design-factory/angular/accordion';\nimport { provideWidgetsConfig, injectWidgetsConfig } from '@design-factory/angular/internals';\n\n/**\n * The configuration type for config-customizable DF components.\n */\nexport type DfConfig = {\n [ACCORDION_CONFIG_KEY]: DfAccordionConfig;\n};\n\n/**\n * TODO write clear and simple doc\n */\nexport const provideDfConfig = (\n config?: Partial2Levels<DfConfig> | ((parentConfig: Partial2Levels<DfConfig>) => Partial2Levels<DfConfig>)\n): FactoryProvider =>\n provideWidgetsConfig(\n typeof config === 'function' ? config : (parentConfig) => ({ ...parentConfig, ...(config ?? {}) })\n );\n\n/**\n * TODO write clear and simple doc\n */\nexport const injectDFConfig = () => {\n const widgetsConfigStore = injectWidgetsConfig() as WidgetsConfigStore<DfConfig>;\n return toAngularWritableSignal(widgetsConfigStore.own$);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAYA;;AAEG;AACI,MAAM,eAAe,GAAG,CAC7B,MAA0G,KAE1G,oBAAoB,CAClB,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,CAAC,YAAY,MAAM,EAAE,GAAG,YAAY,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;AAGtG;;AAEG;AACI,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,MAAM,kBAAkB,GAAG,mBAAmB,EAAkC;AAChF,IAAA,OAAO,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACzD;;AC5BA;;AAEG;;;;"}
@@ -1,47 +0,0 @@
1
- import * as _angular_core from '@angular/core';
2
-
3
- type DfAccordionConfig = {
4
- /**
5
- * example prop
6
- */
7
- closeOthers: boolean;
8
- };
9
- declare const ACCORDION_CONFIG_KEY: "accordion";
10
- /**
11
- * Provides the configuration for the accordion component.
12
- *
13
- * @example
14
- * ```ts
15
- * \@Component({
16
- * providers: [provideDfAccordionConfig({ closeOthers: true })]
17
- * })
18
- * export class MyHomeComponent {}
19
- * ```
20
- *
21
- * @param config - Partial configuration or a function that receives the parent configuration and returns a partial configuration.
22
- */
23
- declare const provideDfAccordionConfig: (config?: Partial<DfAccordionConfig> | ((prevConfig: Partial<DfAccordionConfig>) => Partial<DfAccordionConfig>) | undefined) => _angular_core.FactoryProvider;
24
- /**
25
- * Injects the configuration for the accordion component.
26
- *
27
- * @example
28
- * ```ts
29
- * \@Component({
30
- * providers: [provideDfAccordionConfig()]
31
- * })
32
- * export class MyAccordionComponent {
33
- * readonly accordionConfig = injectDfAccordionConfig();
34
- * }
35
- * ```
36
- *
37
- * @returns A writable signal containing the accordion configuration.
38
- */
39
- declare const injectDfAccordionConfig: () => _angular_core.WritableSignal<Partial<DfAccordionConfig>>;
40
-
41
- declare class DfAccordionComponent {
42
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DfAccordionComponent, never>;
43
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DfAccordionComponent, "ng-component", never, {}, {}, never, never, true, never>;
44
- }
45
-
46
- export { ACCORDION_CONFIG_KEY, DfAccordionComponent, injectDfAccordionConfig, provideDfAccordionConfig };
47
- export type { DfAccordionConfig };
@@ -1,24 +0,0 @@
1
- import * as _angular_core from '@angular/core';
2
- import { FactoryProvider } from '@angular/core';
3
- import { Partial2Levels } from '@agnos-ui/angular-headless';
4
- import { ACCORDION_CONFIG_KEY, DfAccordionConfig } from '@design-factory/angular/accordion';
5
-
6
- /**
7
- * The configuration type for config-customizable DF components.
8
- */
9
- type DfConfig = {
10
- [ACCORDION_CONFIG_KEY]: DfAccordionConfig;
11
- };
12
- /**
13
- * TODO write clear and simple doc
14
- */
15
- declare const provideDfConfig: (config?: Partial2Levels<DfConfig> | ((parentConfig: Partial2Levels<DfConfig>) => Partial2Levels<DfConfig>)) => FactoryProvider;
16
- /**
17
- * TODO write clear and simple doc
18
- */
19
- declare const injectDFConfig: () => _angular_core.WritableSignal<Partial<{
20
- accordion: Partial<DfAccordionConfig>;
21
- }>>;
22
-
23
- export { injectDFConfig, provideDfConfig };
24
- export type { DfConfig };