@design-factory/angular 21.1.0-next.0 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/fesm2022/design-factory-angular-drawer.mjs +22 -29
  2. package/fesm2022/design-factory-angular-drawer.mjs.map +1 -1
  3. package/fesm2022/design-factory-angular-internals.mjs +5 -5
  4. package/fesm2022/design-factory-angular-internals.mjs.map +1 -1
  5. package/fesm2022/design-factory-angular-sidenav.mjs +139 -62
  6. package/fesm2022/design-factory-angular-sidenav.mjs.map +1 -1
  7. package/fesm2022/design-factory-angular-theme.mjs +1 -1
  8. package/fesm2022/design-factory-angular-theme.mjs.map +1 -1
  9. package/fesm2022/design-factory-angular-topnav.mjs +152 -75
  10. package/fesm2022/design-factory-angular-topnav.mjs.map +1 -1
  11. package/package.json +3 -6
  12. package/types/design-factory-angular-drawer.d.ts +13 -14
  13. package/types/design-factory-angular-internals.d.ts +3 -3
  14. package/types/design-factory-angular-sidenav.d.ts +19 -6
  15. package/types/design-factory-angular-topnav.d.ts +13 -6
  16. package/node_modules/@agnos-ui/core/README.md +0 -5
  17. package/node_modules/@agnos-ui/core/accordion-BC_9xn23.cjs +0 -314
  18. package/node_modules/@agnos-ui/core/accordion-Ca_0T8Bc.js +0 -315
  19. package/node_modules/@agnos-ui/core/alert-AhaliJ17.cjs +0 -9
  20. package/node_modules/@agnos-ui/core/alert-Cb9FhbFQ.js +0 -10
  21. package/node_modules/@agnos-ui/core/collapse-COriZO7o.cjs +0 -94
  22. package/node_modules/@agnos-ui/core/collapse-CP79atna.js +0 -95
  23. package/node_modules/@agnos-ui/core/common-B5jS-Ih_.cjs +0 -73
  24. package/node_modules/@agnos-ui/core/common-DFyZvkII.js +0 -74
  25. package/node_modules/@agnos-ui/core/components/accordion/accordion.d.ts +0 -333
  26. package/node_modules/@agnos-ui/core/components/accordion/index.cjs +0 -7
  27. package/node_modules/@agnos-ui/core/components/accordion/index.d.ts +0 -1
  28. package/node_modules/@agnos-ui/core/components/accordion/index.js +0 -7
  29. package/node_modules/@agnos-ui/core/components/alert/alert.d.ts +0 -37
  30. package/node_modules/@agnos-ui/core/components/alert/common.d.ts +0 -138
  31. package/node_modules/@agnos-ui/core/components/alert/index.cjs +0 -5
  32. package/node_modules/@agnos-ui/core/components/alert/index.d.ts +0 -1
  33. package/node_modules/@agnos-ui/core/components/alert/index.js +0 -5
  34. package/node_modules/@agnos-ui/core/components/carousel/carousel.d.ts +0 -247
  35. package/node_modules/@agnos-ui/core/components/carousel/index.cjs +0 -292
  36. package/node_modules/@agnos-ui/core/components/carousel/index.d.ts +0 -1
  37. package/node_modules/@agnos-ui/core/components/carousel/index.js +0 -292
  38. package/node_modules/@agnos-ui/core/components/collapse/collapse.d.ts +0 -135
  39. package/node_modules/@agnos-ui/core/components/collapse/index.cjs +0 -5
  40. package/node_modules/@agnos-ui/core/components/collapse/index.d.ts +0 -1
  41. package/node_modules/@agnos-ui/core/components/collapse/index.js +0 -5
  42. package/node_modules/@agnos-ui/core/components/commonProps.d.ts +0 -11
  43. package/node_modules/@agnos-ui/core/components/drawer/drawer.d.ts +0 -279
  44. package/node_modules/@agnos-ui/core/components/drawer/index.cjs +0 -5
  45. package/node_modules/@agnos-ui/core/components/drawer/index.d.ts +0 -1
  46. package/node_modules/@agnos-ui/core/components/drawer/index.js +0 -5
  47. package/node_modules/@agnos-ui/core/components/modal/index.cjs +0 -8
  48. package/node_modules/@agnos-ui/core/components/modal/index.d.ts +0 -1
  49. package/node_modules/@agnos-ui/core/components/modal/index.js +0 -8
  50. package/node_modules/@agnos-ui/core/components/modal/modal.d.ts +0 -245
  51. package/node_modules/@agnos-ui/core/components/pagination/index.cjs +0 -5
  52. package/node_modules/@agnos-ui/core/components/pagination/index.d.ts +0 -1
  53. package/node_modules/@agnos-ui/core/components/pagination/index.js +0 -5
  54. package/node_modules/@agnos-ui/core/components/pagination/pagination.d.ts +0 -313
  55. package/node_modules/@agnos-ui/core/components/progressbar/index.cjs +0 -5
  56. package/node_modules/@agnos-ui/core/components/progressbar/index.d.ts +0 -1
  57. package/node_modules/@agnos-ui/core/components/progressbar/index.js +0 -5
  58. package/node_modules/@agnos-ui/core/components/progressbar/progressbar.d.ts +0 -91
  59. package/node_modules/@agnos-ui/core/components/rating/index.cjs +0 -5
  60. package/node_modules/@agnos-ui/core/components/rating/index.d.ts +0 -1
  61. package/node_modules/@agnos-ui/core/components/rating/index.js +0 -5
  62. package/node_modules/@agnos-ui/core/components/rating/rating.d.ts +0 -191
  63. package/node_modules/@agnos-ui/core/components/slider/index.cjs +0 -5
  64. package/node_modules/@agnos-ui/core/components/slider/index.d.ts +0 -1
  65. package/node_modules/@agnos-ui/core/components/slider/index.js +0 -5
  66. package/node_modules/@agnos-ui/core/components/slider/slider-utils.d.ts +0 -25
  67. package/node_modules/@agnos-ui/core/components/slider/slider.d.ts +0 -383
  68. package/node_modules/@agnos-ui/core/components/toast/index.cjs +0 -7
  69. package/node_modules/@agnos-ui/core/components/toast/index.d.ts +0 -2
  70. package/node_modules/@agnos-ui/core/components/toast/index.js +0 -7
  71. package/node_modules/@agnos-ui/core/components/toast/toast.d.ts +0 -66
  72. package/node_modules/@agnos-ui/core/components/toast/toaster.d.ts +0 -128
  73. package/node_modules/@agnos-ui/core/components/tree/index.cjs +0 -5
  74. package/node_modules/@agnos-ui/core/components/tree/index.d.ts +0 -1
  75. package/node_modules/@agnos-ui/core/components/tree/index.js +0 -5
  76. package/node_modules/@agnos-ui/core/components/tree/tree.d.ts +0 -143
  77. package/node_modules/@agnos-ui/core/config.cjs +0 -36
  78. package/node_modules/@agnos-ui/core/config.d.ts +0 -117
  79. package/node_modules/@agnos-ui/core/config.js +0 -36
  80. package/node_modules/@agnos-ui/core/directive-Bsreu2z1.js +0 -523
  81. package/node_modules/@agnos-ui/core/directive-DCaXmRe_.cjs +0 -522
  82. package/node_modules/@agnos-ui/core/drawer-BbFAHV07.cjs +0 -328
  83. package/node_modules/@agnos-ui/core/drawer-C6Qa0xEu.js +0 -329
  84. package/node_modules/@agnos-ui/core/index.cjs +0 -134
  85. package/node_modules/@agnos-ui/core/index.d.ts +0 -29
  86. package/node_modules/@agnos-ui/core/index.js +0 -134
  87. package/node_modules/@agnos-ui/core/isFocusable-Ckwus82R.js +0 -32
  88. package/node_modules/@agnos-ui/core/isFocusable-DfzDLeAN.cjs +0 -31
  89. package/node_modules/@agnos-ui/core/modal-BsNuHhT7.cjs +0 -252
  90. package/node_modules/@agnos-ui/core/modal-CgzY8ezz.js +0 -253
  91. package/node_modules/@agnos-ui/core/package.json +0 -57
  92. package/node_modules/@agnos-ui/core/pagination-ZxGaNWZz.js +0 -255
  93. package/node_modules/@agnos-ui/core/pagination-xbcOHnhd.cjs +0 -254
  94. package/node_modules/@agnos-ui/core/progressbar-CRbMKp4b.cjs +0 -86
  95. package/node_modules/@agnos-ui/core/progressbar-CSEIFnlD.js +0 -87
  96. package/node_modules/@agnos-ui/core/promise-CxCD3NYv.cjs +0 -118
  97. package/node_modules/@agnos-ui/core/promise-D-RZVPuv.js +0 -119
  98. package/node_modules/@agnos-ui/core/rating-BIdiiPUo.js +0 -184
  99. package/node_modules/@agnos-ui/core/rating-qx1xaBmz.cjs +0 -183
  100. package/node_modules/@agnos-ui/core/scrollbars-CT87iv_6.cjs +0 -30
  101. package/node_modules/@agnos-ui/core/scrollbars-CcxSrnCx.js +0 -31
  102. package/node_modules/@agnos-ui/core/services/extendWidget.cjs +0 -41
  103. package/node_modules/@agnos-ui/core/services/extendWidget.d.ts +0 -31
  104. package/node_modules/@agnos-ui/core/services/extendWidget.js +0 -41
  105. package/node_modules/@agnos-ui/core/services/floatingUI.cjs +0 -111
  106. package/node_modules/@agnos-ui/core/services/floatingUI.d.ts +0 -76
  107. package/node_modules/@agnos-ui/core/services/floatingUI.js +0 -111
  108. package/node_modules/@agnos-ui/core/services/focusElement.cjs +0 -46
  109. package/node_modules/@agnos-ui/core/services/focusElement.d.ts +0 -9
  110. package/node_modules/@agnos-ui/core/services/focusElement.js +0 -46
  111. package/node_modules/@agnos-ui/core/services/focustrack.cjs +0 -47
  112. package/node_modules/@agnos-ui/core/services/focustrack.d.ts +0 -40
  113. package/node_modules/@agnos-ui/core/services/focustrack.js +0 -47
  114. package/node_modules/@agnos-ui/core/services/hash.cjs +0 -15
  115. package/node_modules/@agnos-ui/core/services/hash.d.ts +0 -3
  116. package/node_modules/@agnos-ui/core/services/hash.js +0 -15
  117. package/node_modules/@agnos-ui/core/services/intersection.cjs +0 -53
  118. package/node_modules/@agnos-ui/core/services/intersection.d.ts +0 -30
  119. package/node_modules/@agnos-ui/core/services/intersection.js +0 -53
  120. package/node_modules/@agnos-ui/core/services/matchMedia.cjs +0 -14
  121. package/node_modules/@agnos-ui/core/services/matchMedia.d.ts +0 -8
  122. package/node_modules/@agnos-ui/core/services/matchMedia.js +0 -14
  123. package/node_modules/@agnos-ui/core/services/navManager.cjs +0 -166
  124. package/node_modules/@agnos-ui/core/services/navManager.d.ts +0 -144
  125. package/node_modules/@agnos-ui/core/services/navManager.js +0 -166
  126. package/node_modules/@agnos-ui/core/services/pointerdownPosition.cjs +0 -60
  127. package/node_modules/@agnos-ui/core/services/pointerdownPosition.d.ts +0 -42
  128. package/node_modules/@agnos-ui/core/services/pointerdownPosition.js +0 -60
  129. package/node_modules/@agnos-ui/core/services/portal.cjs +0 -42
  130. package/node_modules/@agnos-ui/core/services/portal.d.ts +0 -16
  131. package/node_modules/@agnos-ui/core/services/portal.js +0 -42
  132. package/node_modules/@agnos-ui/core/services/resizeObserver.cjs +0 -54
  133. package/node_modules/@agnos-ui/core/services/resizeObserver.d.ts +0 -18
  134. package/node_modules/@agnos-ui/core/services/resizeObserver.js +0 -54
  135. package/node_modules/@agnos-ui/core/services/siblingsInert.cjs +0 -44
  136. package/node_modules/@agnos-ui/core/services/siblingsInert.d.ts +0 -16
  137. package/node_modules/@agnos-ui/core/services/siblingsInert.js +0 -44
  138. package/node_modules/@agnos-ui/core/services/transitions/baseTransitions.cjs +0 -186
  139. package/node_modules/@agnos-ui/core/services/transitions/baseTransitions.d.ts +0 -166
  140. package/node_modules/@agnos-ui/core/services/transitions/baseTransitions.js +0 -186
  141. package/node_modules/@agnos-ui/core/services/transitions/collapse.cjs +0 -40
  142. package/node_modules/@agnos-ui/core/services/transitions/collapse.d.ts +0 -49
  143. package/node_modules/@agnos-ui/core/services/transitions/collapse.js +0 -40
  144. package/node_modules/@agnos-ui/core/services/transitions/cssTransitions.cjs +0 -32
  145. package/node_modules/@agnos-ui/core/services/transitions/cssTransitions.d.ts +0 -25
  146. package/node_modules/@agnos-ui/core/services/transitions/cssTransitions.js +0 -32
  147. package/node_modules/@agnos-ui/core/services/transitions/simpleClassTransition.cjs +0 -37
  148. package/node_modules/@agnos-ui/core/services/transitions/simpleClassTransition.d.ts +0 -47
  149. package/node_modules/@agnos-ui/core/services/transitions/simpleClassTransition.js +0 -37
  150. package/node_modules/@agnos-ui/core/slider-B93hE0ag.cjs +0 -807
  151. package/node_modules/@agnos-ui/core/slider-Cjiq9FgI.js +0 -808
  152. package/node_modules/@agnos-ui/core/textDirection-cNgt24LJ.js +0 -4
  153. package/node_modules/@agnos-ui/core/textDirection-zqcZ5-eK.cjs +0 -3
  154. package/node_modules/@agnos-ui/core/toaster-BQWqxYv-.cjs +0 -190
  155. package/node_modules/@agnos-ui/core/toaster-BzEkshT2.js +0 -191
  156. package/node_modules/@agnos-ui/core/tree-DY04XPPg.cjs +0 -228
  157. package/node_modules/@agnos-ui/core/tree-HwcvZ0_p.js +0 -229
  158. package/node_modules/@agnos-ui/core/types.cjs +0 -6
  159. package/node_modules/@agnos-ui/core/types.d.ts +0 -246
  160. package/node_modules/@agnos-ui/core/types.js +0 -6
  161. package/node_modules/@agnos-ui/core/utils/directive.cjs +0 -28
  162. package/node_modules/@agnos-ui/core/utils/directive.d.ts +0 -352
  163. package/node_modules/@agnos-ui/core/utils/directive.js +0 -28
  164. package/node_modules/@agnos-ui/core/utils/func.cjs +0 -7
  165. package/node_modules/@agnos-ui/core/utils/func.d.ts +0 -11
  166. package/node_modules/@agnos-ui/core/utils/func.js +0 -7
  167. package/node_modules/@agnos-ui/core/utils/id.cjs +0 -5
  168. package/node_modules/@agnos-ui/core/utils/id.d.ts +0 -6
  169. package/node_modules/@agnos-ui/core/utils/id.js +0 -5
  170. package/node_modules/@agnos-ui/core/utils/internal/assign.d.ts +0 -10
  171. package/node_modules/@agnos-ui/core/utils/internal/checks.d.ts +0 -57
  172. package/node_modules/@agnos-ui/core/utils/internal/dom.d.ts +0 -75
  173. package/node_modules/@agnos-ui/core/utils/internal/isFocusable.d.ts +0 -9
  174. package/node_modules/@agnos-ui/core/utils/internal/math.d.ts +0 -5
  175. package/node_modules/@agnos-ui/core/utils/internal/promise.d.ts +0 -98
  176. package/node_modules/@agnos-ui/core/utils/internal/scrollbars.d.ts +0 -8
  177. package/node_modules/@agnos-ui/core/utils/internal/sort.d.ts +0 -16
  178. package/node_modules/@agnos-ui/core/utils/internal/ssrHTMLElement.d.ts +0 -17
  179. package/node_modules/@agnos-ui/core/utils/internal/textDirection.d.ts +0 -7
  180. package/node_modules/@agnos-ui/core/utils/internal/traversal.d.ts +0 -54
  181. package/node_modules/@agnos-ui/core/utils/stores.cjs +0 -172
  182. package/node_modules/@agnos-ui/core/utils/stores.d.ts +0 -224
  183. package/node_modules/@agnos-ui/core/utils/stores.js +0 -172
  184. package/node_modules/@agnos-ui/core/utils/widget.cjs +0 -8
  185. package/node_modules/@agnos-ui/core/utils/widget.d.ts +0 -11
  186. package/node_modules/@agnos-ui/core/utils/widget.js +0 -8
  187. package/node_modules/@agnos-ui/core/utils/writables.cjs +0 -16
  188. package/node_modules/@agnos-ui/core/utils/writables.d.ts +0 -95
  189. package/node_modules/@agnos-ui/core/utils/writables.js +0 -16
  190. package/node_modules/@agnos-ui/core/writables-DYGjj5T3.js +0 -103
  191. package/node_modules/@agnos-ui/core/writables-Dt68gADJ.cjs +0 -102
@@ -1,8 +1,8 @@
1
- import { createNavManager } from '@agnos-ui/core/services/navManager';
1
+ import { createNavManager } from '@design-factory/core/services/navManager';
2
2
  import { toAngularSignal, md$, lg$, useDirectiveForHost } from '@design-factory/angular/internals';
3
3
  import { NgTemplateOutlet, isPlatformBrowser } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { input, model, inject, contentChild, computed, Directive, effect, ChangeDetectionStrategy, Component, signal, viewChild, contentChildren, booleanAttribute, linkedSignal, ElementRef, PLATFORM_ID, Injector, afterRenderEffect, untracked, afterNextRender, ViewEncapsulation } from '@angular/core';
5
+ import { input, model, inject, contentChild, computed, Directive, effect, ChangeDetectionStrategy, Component, linkedSignal, viewChild, contentChildren, booleanAttribute, ElementRef, PLATFORM_ID, signal, Injector, afterRenderEffect, untracked, afterNextRender, ViewEncapsulation } from '@angular/core';
6
6
  import * as i1 from '@angular/forms';
7
7
  import { FormsModule } from '@angular/forms';
8
8
  import { DfDrawer } from '@design-factory/angular/drawer';
@@ -431,9 +431,16 @@ class DfSidenavLinkBaseComponent {
431
431
  */
432
432
  this.wrapperHasIconContent = input(false, ...(ngDevMode ? [{ debugName: "wrapperHasIconContent" }] : []));
433
433
  /**
434
- * Indicates if the link is currently active based on the Router state
434
+ * Explicitly sets the active state of the link. When provided, the link behaves
435
+ * as an external link (plain `<a href>`) and the Angular Router is not used.
436
+ * When `undefined` (default), the active state is determined by the Angular Router.
435
437
  */
436
- this.isActiveLink = signal(false, ...(ngDevMode ? [{ debugName: "isActiveLink" }] : []));
438
+ this.active = input(...(ngDevMode ? [undefined, { debugName: "active" }] : []));
439
+ /**
440
+ * Reflects the current active state of the link.
441
+ * Driven by the `active` input when provided, otherwise updated by the router via `(isActiveChange)`.
442
+ */
443
+ this.isActiveLink = linkedSignal(() => this.active() ?? false, ...(ngDevMode ? [{ debugName: "isActiveLink" }] : []));
437
444
  /**
438
445
  * Options to determine when the router link is considered active
439
446
  */
@@ -463,11 +470,11 @@ class DfSidenavLinkBaseComponent {
463
470
  return true;
464
471
  }
465
472
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DfSidenavLinkBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
466
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.0", 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 }); }
473
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.0", 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 }, active: { classPropertyName: "active", publicName: "active", 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 }); }
467
474
  }
468
475
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DfSidenavLinkBaseComponent, decorators: [{
469
476
  type: Directive
470
- }], 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 }] }] } });
477
+ }], 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 }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], iconContent: [{ type: i0.ContentChild, args: ['dfSidenavIcon', { isSignal: true }] }] } });
471
478
 
472
479
  /**
473
480
  * Component representing a leaf in the sidenav for desktop devices
@@ -480,21 +487,38 @@ class DfSidenavLinkDesktopComponent extends DfSidenavLinkBaseComponent {
480
487
  }
481
488
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DfSidenavLinkDesktopComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
482
489
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", 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: `
483
- <a
484
- class="btn df-sidenav-button d-flex gap-3"
485
- [class.w-100]="!sidenav.isMinimized()"
486
- routerLinkActive="df-sidenav-active-level"
487
- ariaCurrentWhenActive="page"
488
- (isActiveChange)="isActiveLink.set($event)"
489
- [routerLink]="linkPath()"
490
- [class.justify-content-start]="!sidenav.isMinimized()"
491
- [routerLinkActiveOptions]="routerLinkActiveOptions()"
492
- [attr.aria-label]="label()"
493
- (click)="toggleSidenavOnSmallScreen()"
494
- #anchor
495
- >
496
- <ng-container [ngTemplateOutlet]="content" />
497
- </a>
490
+ @if (active() !== undefined) {
491
+ <a
492
+ class="btn df-sidenav-button d-flex gap-3"
493
+ [class.w-100]="!sidenav.isMinimized()"
494
+ [class.df-sidenav-active-level]="active()"
495
+ [class.justify-content-start]="!sidenav.isMinimized()"
496
+ [href]="linkPath()"
497
+ target="_blank"
498
+ [attr.aria-label]="label()"
499
+ [attr.aria-current]="active() ? 'page' : null"
500
+ (click)="toggleSidenavOnSmallScreen()"
501
+ #anchor
502
+ >
503
+ <ng-container [ngTemplateOutlet]="content" />
504
+ </a>
505
+ } @else {
506
+ <a
507
+ class="btn df-sidenav-button d-flex gap-3"
508
+ [class.w-100]="!sidenav.isMinimized()"
509
+ routerLinkActive="df-sidenav-active-level"
510
+ ariaCurrentWhenActive="page"
511
+ (isActiveChange)="isActiveLink.set($event)"
512
+ [routerLink]="linkPath()"
513
+ [class.justify-content-start]="!sidenav.isMinimized()"
514
+ [routerLinkActiveOptions]="routerLinkActiveOptions()"
515
+ [attr.aria-label]="label()"
516
+ (click)="toggleSidenavOnSmallScreen()"
517
+ #anchor
518
+ >
519
+ <ng-container [ngTemplateOutlet]="content" />
520
+ </a>
521
+ }
498
522
  <ng-template #content>
499
523
  <ng-content select="[dfSidenavIcon]" />
500
524
  @if (icon()) {
@@ -512,21 +536,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
512
536
  changeDetection: ChangeDetectionStrategy.OnPush,
513
537
  selector: 'df-sidenav-link-desktop',
514
538
  template: `
515
- <a
516
- class="btn df-sidenav-button d-flex gap-3"
517
- [class.w-100]="!sidenav.isMinimized()"
518
- routerLinkActive="df-sidenav-active-level"
519
- ariaCurrentWhenActive="page"
520
- (isActiveChange)="isActiveLink.set($event)"
521
- [routerLink]="linkPath()"
522
- [class.justify-content-start]="!sidenav.isMinimized()"
523
- [routerLinkActiveOptions]="routerLinkActiveOptions()"
524
- [attr.aria-label]="label()"
525
- (click)="toggleSidenavOnSmallScreen()"
526
- #anchor
527
- >
528
- <ng-container [ngTemplateOutlet]="content" />
529
- </a>
539
+ @if (active() !== undefined) {
540
+ <a
541
+ class="btn df-sidenav-button d-flex gap-3"
542
+ [class.w-100]="!sidenav.isMinimized()"
543
+ [class.df-sidenav-active-level]="active()"
544
+ [class.justify-content-start]="!sidenav.isMinimized()"
545
+ [href]="linkPath()"
546
+ target="_blank"
547
+ [attr.aria-label]="label()"
548
+ [attr.aria-current]="active() ? 'page' : null"
549
+ (click)="toggleSidenavOnSmallScreen()"
550
+ #anchor
551
+ >
552
+ <ng-container [ngTemplateOutlet]="content" />
553
+ </a>
554
+ } @else {
555
+ <a
556
+ class="btn df-sidenav-button d-flex gap-3"
557
+ [class.w-100]="!sidenav.isMinimized()"
558
+ routerLinkActive="df-sidenav-active-level"
559
+ ariaCurrentWhenActive="page"
560
+ (isActiveChange)="isActiveLink.set($event)"
561
+ [routerLink]="linkPath()"
562
+ [class.justify-content-start]="!sidenav.isMinimized()"
563
+ [routerLinkActiveOptions]="routerLinkActiveOptions()"
564
+ [attr.aria-label]="label()"
565
+ (click)="toggleSidenavOnSmallScreen()"
566
+ #anchor
567
+ >
568
+ <ng-container [ngTemplateOutlet]="content" />
569
+ </a>
570
+ }
530
571
  <ng-template #content>
531
572
  <ng-content select="[dfSidenavIcon]" />
532
573
  @if (icon()) {
@@ -588,17 +629,30 @@ class DfSidenavLinkMobileComponent extends DfSidenavLinkBaseComponent {
588
629
  }
589
630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DfSidenavLinkMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
590
631
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", 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: `
591
- <a
592
- class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
593
- routerLinkActive="df-sidenav-active-level"
594
- ariaCurrentWhenActive="page"
595
- (isActiveChange)="isActiveLink.set($event)"
596
- [routerLink]="linkPath()"
597
- [routerLinkActiveOptions]="routerLinkActiveOptions()"
598
- (click)="toggleSidenavOnSmallScreen()"
599
- >
600
- <ng-container [ngTemplateOutlet]="content" />
601
- </a>
632
+ @if (active() !== undefined) {
633
+ <a
634
+ class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
635
+ [class.df-sidenav-active-level]="active()"
636
+ [href]="linkPath()"
637
+ target="_blank"
638
+ [attr.aria-current]="active() ? 'page' : null"
639
+ (click)="toggleSidenavOnSmallScreen()"
640
+ >
641
+ <ng-container [ngTemplateOutlet]="content" />
642
+ </a>
643
+ } @else {
644
+ <a
645
+ class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
646
+ routerLinkActive="df-sidenav-active-level"
647
+ ariaCurrentWhenActive="page"
648
+ (isActiveChange)="isActiveLink.set($event)"
649
+ [routerLink]="linkPath()"
650
+ [routerLinkActiveOptions]="routerLinkActiveOptions()"
651
+ (click)="toggleSidenavOnSmallScreen()"
652
+ >
653
+ <ng-container [ngTemplateOutlet]="content" />
654
+ </a>
655
+ }
602
656
  <ng-template #content>
603
657
  <div class="d-flex gap-3 w-100">
604
658
  <ng-content select="[dfSidenavIcon]" />
@@ -608,7 +662,7 @@ class DfSidenavLinkMobileComponent extends DfSidenavLinkBaseComponent {
608
662
  <div class="d-flex flex-column align-items-start">
609
663
  <span class="sidenav-label" [title]="label()">{{ label() }}</span>
610
664
  @if (isSearching() && breadcrumbPath().length > 0) {
611
- <small class="d-flex align-items-center gap-1" [class.text-muted]="!isActiveLink()">
665
+ <small class="d-flex align-items-center gap-1" [class.text-muted]="!active()">
612
666
  @for (item of breadcrumbPath(); track $index) {
613
667
  <span>{{ item }}</span>
614
668
  @if (!$last) {
@@ -628,17 +682,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
628
682
  changeDetection: ChangeDetectionStrategy.OnPush,
629
683
  selector: 'df-sidenav-link-mobile',
630
684
  template: `
631
- <a
632
- class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
633
- routerLinkActive="df-sidenav-active-level"
634
- ariaCurrentWhenActive="page"
635
- (isActiveChange)="isActiveLink.set($event)"
636
- [routerLink]="linkPath()"
637
- [routerLinkActiveOptions]="routerLinkActiveOptions()"
638
- (click)="toggleSidenavOnSmallScreen()"
639
- >
640
- <ng-container [ngTemplateOutlet]="content" />
641
- </a>
685
+ @if (active() !== undefined) {
686
+ <a
687
+ class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
688
+ [class.df-sidenav-active-level]="active()"
689
+ [href]="linkPath()"
690
+ target="_blank"
691
+ [attr.aria-current]="active() ? 'page' : null"
692
+ (click)="toggleSidenavOnSmallScreen()"
693
+ >
694
+ <ng-container [ngTemplateOutlet]="content" />
695
+ </a>
696
+ } @else {
697
+ <a
698
+ class="btn df-sidenav-button d-flex gap-3 justify-content-start w-100 df-sidenav-breadcrumb-button"
699
+ routerLinkActive="df-sidenav-active-level"
700
+ ariaCurrentWhenActive="page"
701
+ (isActiveChange)="isActiveLink.set($event)"
702
+ [routerLink]="linkPath()"
703
+ [routerLinkActiveOptions]="routerLinkActiveOptions()"
704
+ (click)="toggleSidenavOnSmallScreen()"
705
+ >
706
+ <ng-container [ngTemplateOutlet]="content" />
707
+ </a>
708
+ }
642
709
  <ng-template #content>
643
710
  <div class="d-flex gap-3 w-100">
644
711
  <ng-content select="[dfSidenavIcon]" />
@@ -648,7 +715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
648
715
  <div class="d-flex flex-column align-items-start">
649
716
  <span class="sidenav-label" [title]="label()">{{ label() }}</span>
650
717
  @if (isSearching() && breadcrumbPath().length > 0) {
651
- <small class="d-flex align-items-center gap-1" [class.text-muted]="!isActiveLink()">
718
+ <small class="d-flex align-items-center gap-1" [class.text-muted]="!active()">
652
719
  @for (item of breadcrumbPath(); track $index) {
653
720
  <span>{{ item }}</span>
654
721
  @if (!$last) {
@@ -708,6 +775,12 @@ class DfSidenavLinkComponent {
708
775
  * Options to determine when the router link is considered active
709
776
  */
710
777
  this.routerLinkActiveOptions = input({ exact: false }, ...(ngDevMode ? [{ debugName: "routerLinkActiveOptions" }] : []));
778
+ /**
779
+ * Explicitly sets the active state of the link. When provided, the link renders as
780
+ * a plain `<a href>` (no Angular Router). When `undefined` (default), the Angular Router determines
781
+ * the active state.
782
+ */
783
+ this.active = input(...(ngDevMode ? [undefined, { debugName: "active" }] : []));
711
784
  /**
712
785
  * The parent wrapper item component (if any)
713
786
  */
@@ -728,7 +801,7 @@ class DfSidenavLinkComponent {
728
801
  this.sidenav = inject(DfSidenavComponent);
729
802
  }
730
803
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DfSidenavLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
731
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", 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: `
804
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", 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 }, active: { classPropertyName: "active", publicName: "active", 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: `
732
805
  <ng-template #iconSlot>
733
806
  <ng-content select="[dfSidenavIcon]" />
734
807
  </ng-template>
@@ -741,6 +814,7 @@ class DfSidenavLinkComponent {
741
814
  [linkPath]="linkPath()"
742
815
  [label]="label()"
743
816
  [icon]="icon()"
817
+ [active]="active()"
744
818
  [wrapperHasIconContent]="wrapperHasIconContent()"
745
819
  [routerLinkActiveOptions]="routerLinkActiveOptions()"
746
820
  >
@@ -752,6 +826,7 @@ class DfSidenavLinkComponent {
752
826
  [linkPath]="linkPath()"
753
827
  [label]="label()"
754
828
  [icon]="icon()"
829
+ [active]="active()"
755
830
  [wrapperHasIconContent]="wrapperHasIconContent()"
756
831
  [routerLinkActiveOptions]="routerLinkActiveOptions()"
757
832
  >
@@ -779,6 +854,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
779
854
  [linkPath]="linkPath()"
780
855
  [label]="label()"
781
856
  [icon]="icon()"
857
+ [active]="active()"
782
858
  [wrapperHasIconContent]="wrapperHasIconContent()"
783
859
  [routerLinkActiveOptions]="routerLinkActiveOptions()"
784
860
  >
@@ -790,6 +866,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
790
866
  [linkPath]="linkPath()"
791
867
  [label]="label()"
792
868
  [icon]="icon()"
869
+ [active]="active()"
793
870
  [wrapperHasIconContent]="wrapperHasIconContent()"
794
871
  [routerLinkActiveOptions]="routerLinkActiveOptions()"
795
872
  >
@@ -805,7 +882,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
805
882
  '[class.mobile]': "sidenav['isMobileDevice']()"
806
883
  }
807
884
  }]
808
- }], 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 }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], desktopInstance: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DfSidenavLinkDesktopComponent), { isSignal: true }] }], mobileInstance: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DfSidenavLinkMobileComponent), { isSignal: true }] }], iconContentQuery: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DfSidenavIconDirective), { isSignal: true }] }] } });
885
+ }], 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 }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], desktopInstance: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DfSidenavLinkDesktopComponent), { isSignal: true }] }], mobileInstance: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DfSidenavLinkMobileComponent), { isSignal: true }] }], iconContentQuery: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DfSidenavIconDirective), { isSignal: true }] }] } });
809
886
 
810
887
  /**
811
888
  * Sidenav element that should be nested inside <df-sidenav> or <df-sidenav-item>