@raintonic/formaui 0.9.0 → 0.9.3

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 (114) hide show
  1. package/fesm2022/raintonic-formaui-components-accordion.mjs +4 -4
  2. package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -1
  3. package/fesm2022/raintonic-formaui-components-alert.mjs +2 -2
  4. package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -1
  5. package/fesm2022/raintonic-formaui-components-autocomplete.mjs +2 -2
  6. package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -1
  7. package/fesm2022/raintonic-formaui-components-avatar.mjs +3 -3
  8. package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
  9. package/fesm2022/raintonic-formaui-components-badge.mjs +2 -2
  10. package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -1
  11. package/fesm2022/raintonic-formaui-components-button-group.mjs +2 -2
  12. package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -1
  13. package/fesm2022/raintonic-formaui-components-card.mjs +78 -8
  14. package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
  15. package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
  16. package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
  17. package/fesm2022/raintonic-formaui-components-chip.mjs +2 -2
  18. package/fesm2022/raintonic-formaui-components-chip.mjs.map +1 -1
  19. package/fesm2022/raintonic-formaui-components-data-table.mjs +80 -11
  20. package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
  21. package/fesm2022/raintonic-formaui-components-date-picker.mjs +4 -4
  22. package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
  23. package/fesm2022/raintonic-formaui-components-divider.mjs +2 -2
  24. package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -1
  25. package/fesm2022/raintonic-formaui-components-drawer.mjs +37 -6
  26. package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
  27. package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs +2 -2
  28. package/fesm2022/raintonic-formaui-components-dropdown-menu.mjs.map +1 -1
  29. package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs +1 -1
  30. package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs.map +1 -1
  31. package/fesm2022/raintonic-formaui-components-empty-state.mjs +2 -2
  32. package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -1
  33. package/fesm2022/raintonic-formaui-components-file-upload.mjs +2 -2
  34. package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -1
  35. package/fesm2022/raintonic-formaui-components-form-field.mjs +21 -2
  36. package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
  37. package/fesm2022/raintonic-formaui-components-input.mjs +14 -0
  38. package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
  39. package/fesm2022/raintonic-formaui-components-list.mjs +4 -4
  40. package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -1
  41. package/fesm2022/raintonic-formaui-components-number-input.mjs +2 -2
  42. package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -1
  43. package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
  44. package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
  45. package/fesm2022/raintonic-formaui-components-password-input.mjs +2 -2
  46. package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -1
  47. package/fesm2022/raintonic-formaui-components-popover.mjs +2 -2
  48. package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
  49. package/fesm2022/raintonic-formaui-components-progressbar.mjs +2 -2
  50. package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -1
  51. package/fesm2022/raintonic-formaui-components-radio.mjs +4 -4
  52. package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
  53. package/fesm2022/raintonic-formaui-components-select.mjs +15 -7
  54. package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
  55. package/fesm2022/raintonic-formaui-components-side-panel.mjs +40 -6
  56. package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
  57. package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs +4 -4
  58. package/fesm2022/raintonic-formaui-components-sidebar-nav-menu.mjs.map +1 -1
  59. package/fesm2022/raintonic-formaui-components-slider.mjs +2 -2
  60. package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -1
  61. package/fesm2022/raintonic-formaui-components-spinner.mjs +2 -2
  62. package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -1
  63. package/fesm2022/raintonic-formaui-components-stepper.mjs +2 -2
  64. package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -1
  65. package/fesm2022/raintonic-formaui-components-tab.mjs +2 -2
  66. package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -1
  67. package/fesm2022/raintonic-formaui-components-time-picker.mjs +2 -2
  68. package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
  69. package/fesm2022/raintonic-formaui-components-toggle-group.mjs +19 -8
  70. package/fesm2022/raintonic-formaui-components-toggle-group.mjs.map +1 -1
  71. package/fesm2022/raintonic-formaui-components-toolbar.mjs +10 -4
  72. package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
  73. package/fesm2022/raintonic-formaui-components-tooltip.mjs +102 -8
  74. package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
  75. package/fesm2022/raintonic-formaui-components-topbar.mjs +2 -2
  76. package/fesm2022/raintonic-formaui-components-topbar.mjs.map +1 -1
  77. package/fesm2022/raintonic-formaui-components-tree-select.mjs +2 -2
  78. package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -1
  79. package/fesm2022/raintonic-formaui-components-tree-table.mjs +2 -2
  80. package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -1
  81. package/fesm2022/raintonic-formaui-components-tree.mjs +4 -4
  82. package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -1
  83. package/fesm2022/raintonic-formaui-services-dialog.mjs +8 -4
  84. package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
  85. package/fesm2022/raintonic-formaui.mjs +1 -1
  86. package/fesm2022/raintonic-formaui.mjs.map +1 -1
  87. package/llms-full.txt +72 -27
  88. package/package.json +1 -1
  89. package/styles/generated/_tokens.scss +9 -9
  90. package/styles/partials/components/_dialog.scss +24 -0
  91. package/styles/styles.css +24 -9
  92. package/types/raintonic-formaui-components-card.d.ts +46 -2
  93. package/types/raintonic-formaui-components-card.d.ts.map +1 -1
  94. package/types/raintonic-formaui-components-data-table.d.ts +50 -3
  95. package/types/raintonic-formaui-components-data-table.d.ts.map +1 -1
  96. package/types/raintonic-formaui-components-drawer.d.ts +20 -2
  97. package/types/raintonic-formaui-components-drawer.d.ts.map +1 -1
  98. package/types/raintonic-formaui-components-form-field.d.ts +10 -0
  99. package/types/raintonic-formaui-components-form-field.d.ts.map +1 -1
  100. package/types/raintonic-formaui-components-input.d.ts +9 -0
  101. package/types/raintonic-formaui-components-input.d.ts.map +1 -1
  102. package/types/raintonic-formaui-components-select.d.ts +8 -1
  103. package/types/raintonic-formaui-components-select.d.ts.map +1 -1
  104. package/types/raintonic-formaui-components-side-panel.d.ts +24 -2
  105. package/types/raintonic-formaui-components-side-panel.d.ts.map +1 -1
  106. package/types/raintonic-formaui-components-toggle-group.d.ts +1 -1
  107. package/types/raintonic-formaui-components-toggle-group.d.ts.map +1 -1
  108. package/types/raintonic-formaui-components-toolbar.d.ts +5 -1
  109. package/types/raintonic-formaui-components-toolbar.d.ts.map +1 -1
  110. package/types/raintonic-formaui-components-tooltip.d.ts +55 -4
  111. package/types/raintonic-formaui-components-tooltip.d.ts.map +1 -1
  112. package/types/raintonic-formaui-services-dialog.d.ts +12 -1
  113. package/types/raintonic-formaui-services-dialog.d.ts.map +1 -1
  114. package/types/raintonic-formaui.d.ts +1 -1
@@ -199,11 +199,11 @@ class SidebarNavSubmenuComponent {
199
199
  }
200
200
  }
201
201
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: SidebarNavSubmenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
202
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: SidebarNavSubmenuComponent, isStandalone: true, selector: "fui-sidebar-nav-submenu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, submenuLabel: { classPropertyName: "submenuLabel", publicName: "submenuLabel", isSignal: true, isRequired: false, transformFunction: null }, isRoot: { classPropertyName: "isRoot", publicName: "isRoot", isSignal: true, isRequired: false, transformFunction: null }, depth: { classPropertyName: "depth", publicName: "depth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ul\r\n class=\"sidebar-nav-submenu\"\r\n role=\"group\"\r\n [class.sidebar-nav-submenu--root]=\"isRoot()\"\r\n [attr.aria-label]=\"submenuLabel()\"\r\n>\r\n @for (item of items(); track item.id; let idx = $index) {\r\n @if (item.visible !== false) {\r\n @if (item.separator) {\r\n <li class=\"sidebar-nav-menu__separator\" role=\"separator\"></li>\r\n } @else if (item.sectionHeader) {\r\n <li class=\"sidebar-nav-menu__section-header\" role=\"heading\" [attr.aria-level]=\"depth() + 2\">\r\n <span class=\"sidebar-nav-menu__section-header-label\">{{ item.label }}</span>\r\n </li>\r\n } @else {\r\n <li\r\n class=\"sidebar-nav-menu__item-wrapper\"\r\n role=\"none\"\r\n [class.sidebar-nav-menu__item-wrapper--root]=\"isRoot()\"\r\n [class.sidebar-nav-menu__item-wrapper--expanded]=\"hasChildren(item) && isExpanded(item)\"\r\n >\r\n @if (hasChildren(item)) {\r\n <!-- Parent item with submenu -->\r\n <button\r\n class=\"sidebar-nav-menu__item sidebar-nav-menu__item--parent\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [class.sidebar-nav-menu__item--expanded]=\"isExpanded(item)\"\r\n [id]=\"item.id + '_trigger'\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"toggleExpand($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-chevron\"\r\n name=\"caret-right\"\r\n [class.sidebar-nav-menu__item-chevron--expanded]=\"isExpanded(item)\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n </button>\r\n\r\n <!-- Submenu content with left border -->\r\n @if (isExpanded(item)) {\r\n <div\r\n class=\"sidebar-nav-submenu__inline\"\r\n animate.enter=\"sidebar-nav-submenu__inline--enter\"\r\n animate.leave=\"sidebar-nav-submenu__inline--leave\"\r\n >\r\n <div class=\"sidebar-nav-submenu__border\"></div>\r\n <fui-sidebar-nav-submenu\r\n [items]=\"item.items!\"\r\n [submenuLabel]=\"item.label || ''\"\r\n [isRoot]=\"false\"\r\n [depth]=\"depth() + 1\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <!-- Leaf item -->\r\n @if (item.routerLink) {\r\n <a\r\n class=\"sidebar-nav-menu__item\"\r\n routerLinkActive=\"sidebar-nav-menu__item--active\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams || undefined\"\r\n [fragment]=\"item.fragment || undefined\"\r\n [target]=\"item.target\"\r\n [title]=\"item.title\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"sidebar-nav-menu__item\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [title]=\"item.title\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n }\r\n }\r\n</ul>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:2px solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:1px solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"], dependencies: [{ kind: "component", type: SidebarNavSubmenuComponent, selector: "fui-sidebar-nav-submenu", inputs: ["items", "submenuLabel", "isRoot", "depth"], outputs: ["itemClick"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: FuiIconComponent, selector: "fui-icon", inputs: ["name", "size", "weight", "color", "ariaLabel", "spin", "pulse"] }] });
202
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: SidebarNavSubmenuComponent, isStandalone: true, selector: "fui-sidebar-nav-submenu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, submenuLabel: { classPropertyName: "submenuLabel", publicName: "submenuLabel", isSignal: true, isRequired: false, transformFunction: null }, isRoot: { classPropertyName: "isRoot", publicName: "isRoot", isSignal: true, isRequired: false, transformFunction: null }, depth: { classPropertyName: "depth", publicName: "depth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ul\r\n class=\"sidebar-nav-submenu\"\r\n role=\"group\"\r\n [class.sidebar-nav-submenu--root]=\"isRoot()\"\r\n [attr.aria-label]=\"submenuLabel()\"\r\n>\r\n @for (item of items(); track item.id; let idx = $index) {\r\n @if (item.visible !== false) {\r\n @if (item.separator) {\r\n <li class=\"sidebar-nav-menu__separator\" role=\"separator\"></li>\r\n } @else if (item.sectionHeader) {\r\n <li class=\"sidebar-nav-menu__section-header\" role=\"heading\" [attr.aria-level]=\"depth() + 2\">\r\n <span class=\"sidebar-nav-menu__section-header-label\">{{ item.label }}</span>\r\n </li>\r\n } @else {\r\n <li\r\n class=\"sidebar-nav-menu__item-wrapper\"\r\n role=\"none\"\r\n [class.sidebar-nav-menu__item-wrapper--root]=\"isRoot()\"\r\n [class.sidebar-nav-menu__item-wrapper--expanded]=\"hasChildren(item) && isExpanded(item)\"\r\n >\r\n @if (hasChildren(item)) {\r\n <!-- Parent item with submenu -->\r\n <button\r\n class=\"sidebar-nav-menu__item sidebar-nav-menu__item--parent\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [class.sidebar-nav-menu__item--expanded]=\"isExpanded(item)\"\r\n [id]=\"item.id + '_trigger'\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"toggleExpand($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-chevron\"\r\n name=\"caret-right\"\r\n [class.sidebar-nav-menu__item-chevron--expanded]=\"isExpanded(item)\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n </button>\r\n\r\n <!-- Submenu content with left border -->\r\n @if (isExpanded(item)) {\r\n <div\r\n class=\"sidebar-nav-submenu__inline\"\r\n animate.enter=\"sidebar-nav-submenu__inline--enter\"\r\n animate.leave=\"sidebar-nav-submenu__inline--leave\"\r\n >\r\n <div class=\"sidebar-nav-submenu__border\"></div>\r\n <fui-sidebar-nav-submenu\r\n [items]=\"item.items!\"\r\n [submenuLabel]=\"item.label || ''\"\r\n [isRoot]=\"false\"\r\n [depth]=\"depth() + 1\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <!-- Leaf item -->\r\n @if (item.routerLink) {\r\n <a\r\n class=\"sidebar-nav-menu__item\"\r\n routerLinkActive=\"sidebar-nav-menu__item--active\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams || undefined\"\r\n [fragment]=\"item.fragment || undefined\"\r\n [target]=\"item.target\"\r\n [title]=\"item.title\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"sidebar-nav-menu__item\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [title]=\"item.title\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n }\r\n }\r\n</ul>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:var(--fui-state-focus-ring-width) solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:var(--fui-border-width-sm) solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"], dependencies: [{ kind: "component", type: SidebarNavSubmenuComponent, selector: "fui-sidebar-nav-submenu", inputs: ["items", "submenuLabel", "isRoot", "depth"], outputs: ["itemClick"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: FuiIconComponent, selector: "fui-icon", inputs: ["name", "size", "weight", "color", "ariaLabel", "spin", "pulse"] }] });
203
203
  }
204
204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: SidebarNavSubmenuComponent, decorators: [{
205
205
  type: Component,
206
- args: [{ selector: 'fui-sidebar-nav-submenu', standalone: true, imports: [RouterLink, RouterLinkActive, FuiIconComponent], template: "<ul\r\n class=\"sidebar-nav-submenu\"\r\n role=\"group\"\r\n [class.sidebar-nav-submenu--root]=\"isRoot()\"\r\n [attr.aria-label]=\"submenuLabel()\"\r\n>\r\n @for (item of items(); track item.id; let idx = $index) {\r\n @if (item.visible !== false) {\r\n @if (item.separator) {\r\n <li class=\"sidebar-nav-menu__separator\" role=\"separator\"></li>\r\n } @else if (item.sectionHeader) {\r\n <li class=\"sidebar-nav-menu__section-header\" role=\"heading\" [attr.aria-level]=\"depth() + 2\">\r\n <span class=\"sidebar-nav-menu__section-header-label\">{{ item.label }}</span>\r\n </li>\r\n } @else {\r\n <li\r\n class=\"sidebar-nav-menu__item-wrapper\"\r\n role=\"none\"\r\n [class.sidebar-nav-menu__item-wrapper--root]=\"isRoot()\"\r\n [class.sidebar-nav-menu__item-wrapper--expanded]=\"hasChildren(item) && isExpanded(item)\"\r\n >\r\n @if (hasChildren(item)) {\r\n <!-- Parent item with submenu -->\r\n <button\r\n class=\"sidebar-nav-menu__item sidebar-nav-menu__item--parent\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [class.sidebar-nav-menu__item--expanded]=\"isExpanded(item)\"\r\n [id]=\"item.id + '_trigger'\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"toggleExpand($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-chevron\"\r\n name=\"caret-right\"\r\n [class.sidebar-nav-menu__item-chevron--expanded]=\"isExpanded(item)\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n </button>\r\n\r\n <!-- Submenu content with left border -->\r\n @if (isExpanded(item)) {\r\n <div\r\n class=\"sidebar-nav-submenu__inline\"\r\n animate.enter=\"sidebar-nav-submenu__inline--enter\"\r\n animate.leave=\"sidebar-nav-submenu__inline--leave\"\r\n >\r\n <div class=\"sidebar-nav-submenu__border\"></div>\r\n <fui-sidebar-nav-submenu\r\n [items]=\"item.items!\"\r\n [submenuLabel]=\"item.label || ''\"\r\n [isRoot]=\"false\"\r\n [depth]=\"depth() + 1\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <!-- Leaf item -->\r\n @if (item.routerLink) {\r\n <a\r\n class=\"sidebar-nav-menu__item\"\r\n routerLinkActive=\"sidebar-nav-menu__item--active\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams || undefined\"\r\n [fragment]=\"item.fragment || undefined\"\r\n [target]=\"item.target\"\r\n [title]=\"item.title\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"sidebar-nav-menu__item\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [title]=\"item.title\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n }\r\n }\r\n</ul>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:2px solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:1px solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"] }]
206
+ args: [{ selector: 'fui-sidebar-nav-submenu', standalone: true, imports: [RouterLink, RouterLinkActive, FuiIconComponent], template: "<ul\r\n class=\"sidebar-nav-submenu\"\r\n role=\"group\"\r\n [class.sidebar-nav-submenu--root]=\"isRoot()\"\r\n [attr.aria-label]=\"submenuLabel()\"\r\n>\r\n @for (item of items(); track item.id; let idx = $index) {\r\n @if (item.visible !== false) {\r\n @if (item.separator) {\r\n <li class=\"sidebar-nav-menu__separator\" role=\"separator\"></li>\r\n } @else if (item.sectionHeader) {\r\n <li class=\"sidebar-nav-menu__section-header\" role=\"heading\" [attr.aria-level]=\"depth() + 2\">\r\n <span class=\"sidebar-nav-menu__section-header-label\">{{ item.label }}</span>\r\n </li>\r\n } @else {\r\n <li\r\n class=\"sidebar-nav-menu__item-wrapper\"\r\n role=\"none\"\r\n [class.sidebar-nav-menu__item-wrapper--root]=\"isRoot()\"\r\n [class.sidebar-nav-menu__item-wrapper--expanded]=\"hasChildren(item) && isExpanded(item)\"\r\n >\r\n @if (hasChildren(item)) {\r\n <!-- Parent item with submenu -->\r\n <button\r\n class=\"sidebar-nav-menu__item sidebar-nav-menu__item--parent\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [class.sidebar-nav-menu__item--expanded]=\"isExpanded(item)\"\r\n [id]=\"item.id + '_trigger'\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"toggleExpand($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-chevron\"\r\n name=\"caret-right\"\r\n [class.sidebar-nav-menu__item-chevron--expanded]=\"isExpanded(item)\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n </button>\r\n\r\n <!-- Submenu content with left border -->\r\n @if (isExpanded(item)) {\r\n <div\r\n class=\"sidebar-nav-submenu__inline\"\r\n animate.enter=\"sidebar-nav-submenu__inline--enter\"\r\n animate.leave=\"sidebar-nav-submenu__inline--leave\"\r\n >\r\n <div class=\"sidebar-nav-submenu__border\"></div>\r\n <fui-sidebar-nav-submenu\r\n [items]=\"item.items!\"\r\n [submenuLabel]=\"item.label || ''\"\r\n [isRoot]=\"false\"\r\n [depth]=\"depth() + 1\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <!-- Leaf item -->\r\n @if (item.routerLink) {\r\n <a\r\n class=\"sidebar-nav-menu__item\"\r\n routerLinkActive=\"sidebar-nav-menu__item--active\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams || undefined\"\r\n [fragment]=\"item.fragment || undefined\"\r\n [target]=\"item.target\"\r\n [title]=\"item.title\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"sidebar-nav-menu__item\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [title]=\"item.title\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n }\r\n }\r\n</ul>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:var(--fui-state-focus-ring-width) solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:var(--fui-border-width-sm) solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"] }]
207
207
  }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], submenuLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "submenuLabel", required: false }] }], isRoot: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRoot", required: false }] }], depth: [{ type: i0.Input, args: [{ isSignal: true, alias: "depth", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
208
208
 
209
209
  class FuiSidebarNavSearchIntl extends FuiIntlBase {
@@ -423,7 +423,7 @@ class FuiSidebarNavMenuComponent {
423
423
  this.itemClick.emit(item);
424
424
  }
425
425
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiSidebarNavMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
426
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.6", type: FuiSidebarNavMenuComponent, isStandalone: true, selector: "fui-sidebar-nav-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, filterString: { classPropertyName: "filterString", publicName: "filterString", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterString: "filterStringChange", itemClick: "itemClick" }, host: { attributes: { "role": "navigation" }, properties: { "attr.aria-label": "ariaLabel()" }, classAttribute: "fui-sidebar-nav-menu" }, ngImport: i0, template: "<div class=\"fui-sidebar-nav-menu__header\">\r\n <ng-content select=\"[fuiSidebarNavHeader]\"></ng-content>\r\n</div>\r\n\r\n<fui-sidebar-nav-search [(filterString)]=\"filterString\" />\r\n\r\n<div class=\"fui-sidebar-nav-menu__body\">\r\n <fui-sidebar-nav-submenu\r\n [items]=\"_filteredItems()\"\r\n [submenuLabel]=\"ariaLabel()\"\r\n [isRoot]=\"true\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"fui-sidebar-nav-menu__footer\">\r\n <ng-content select=\"[fuiSidebarNavFooter]\"></ng-content>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:2px solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:1px solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"], dependencies: [{ kind: "component", type: SidebarNavSubmenuComponent, selector: "fui-sidebar-nav-submenu", inputs: ["items", "submenuLabel", "isRoot", "depth"], outputs: ["itemClick"] }, { kind: "component", type: FuiSidebarNavSearchComponent, selector: "fui-sidebar-nav-search", inputs: ["filterString", "placeholder"], outputs: ["filterStringChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
426
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.6", type: FuiSidebarNavMenuComponent, isStandalone: true, selector: "fui-sidebar-nav-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, filterString: { classPropertyName: "filterString", publicName: "filterString", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterString: "filterStringChange", itemClick: "itemClick" }, host: { attributes: { "role": "navigation" }, properties: { "attr.aria-label": "ariaLabel()" }, classAttribute: "fui-sidebar-nav-menu" }, ngImport: i0, template: "<div class=\"fui-sidebar-nav-menu__header\">\r\n <ng-content select=\"[fuiSidebarNavHeader]\"></ng-content>\r\n</div>\r\n\r\n<fui-sidebar-nav-search [(filterString)]=\"filterString\" />\r\n\r\n<div class=\"fui-sidebar-nav-menu__body\">\r\n <fui-sidebar-nav-submenu\r\n [items]=\"_filteredItems()\"\r\n [submenuLabel]=\"ariaLabel()\"\r\n [isRoot]=\"true\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"fui-sidebar-nav-menu__footer\">\r\n <ng-content select=\"[fuiSidebarNavFooter]\"></ng-content>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:var(--fui-state-focus-ring-width) solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:var(--fui-border-width-sm) solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"], dependencies: [{ kind: "component", type: SidebarNavSubmenuComponent, selector: "fui-sidebar-nav-submenu", inputs: ["items", "submenuLabel", "isRoot", "depth"], outputs: ["itemClick"] }, { kind: "component", type: FuiSidebarNavSearchComponent, selector: "fui-sidebar-nav-search", inputs: ["filterString", "placeholder"], outputs: ["filterStringChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
427
427
  }
428
428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiSidebarNavMenuComponent, decorators: [{
429
429
  type: Component,
@@ -431,7 +431,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
431
431
  role: 'navigation',
432
432
  '[attr.aria-label]': 'ariaLabel()',
433
433
  class: 'fui-sidebar-nav-menu',
434
- }, template: "<div class=\"fui-sidebar-nav-menu__header\">\r\n <ng-content select=\"[fuiSidebarNavHeader]\"></ng-content>\r\n</div>\r\n\r\n<fui-sidebar-nav-search [(filterString)]=\"filterString\" />\r\n\r\n<div class=\"fui-sidebar-nav-menu__body\">\r\n <fui-sidebar-nav-submenu\r\n [items]=\"_filteredItems()\"\r\n [submenuLabel]=\"ariaLabel()\"\r\n [isRoot]=\"true\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"fui-sidebar-nav-menu__footer\">\r\n <ng-content select=\"[fuiSidebarNavFooter]\"></ng-content>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:2px solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:1px solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"] }]
434
+ }, template: "<div class=\"fui-sidebar-nav-menu__header\">\r\n <ng-content select=\"[fuiSidebarNavHeader]\"></ng-content>\r\n</div>\r\n\r\n<fui-sidebar-nav-search [(filterString)]=\"filterString\" />\r\n\r\n<div class=\"fui-sidebar-nav-menu__body\">\r\n <fui-sidebar-nav-submenu\r\n [items]=\"_filteredItems()\"\r\n [submenuLabel]=\"ariaLabel()\"\r\n [isRoot]=\"true\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"fui-sidebar-nav-menu__footer\">\r\n <ng-content select=\"[fuiSidebarNavFooter]\"></ng-content>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}:host{--fui-snm-bg: var(--fui-bg-subtle);--fui-snm-item-color: var(--fui-text-secondary);--fui-snm-item-bg-hover: var(--fui-bg-muted);--fui-snm-item-bg-active: var(--fui-primary-10);--fui-snm-item-color-disabled: var(--fui-neutral-60);--fui-snm-separator-color: var(--fui-neutral-40);--fui-snm-section-header-color: var(--fui-neutral-60);--fui-snm-submenu-border-color: var(--fui-neutral-40);--fui-snm-item-radius: var(--fui-radius-sm);--fui-snm-item-gap: var(--fui-spacing-1);--fui-snm-item-padding-y: var(--fui-spacing-3);--fui-snm-item-padding-x: var(--fui-spacing-4);--fui-snm-submenu-indent: var(--fui-spacing-7);--fui-snm-section-header-padding-y: var(--fui-spacing-4);--fui-snm-section-header-padding-x: var(--fui-spacing-4);--fui-snm-submenu-border-width: 1px;--fui-snm-font-family: var(--fui-font-sans);--fui-snm-font-size: var(--fui-text-sm);--fui-snm-font-weight: var(--fui-weight-regular);--fui-snm-font-weight-parent: var(--fui-weight-regular);--fui-snm-section-header-font-size: var(--fui-text-xs);--fui-snm-section-header-font-weight: var(--fui-weight-regular);--fui-snm-section-header-letter-spacing: .04em;--fui-snm-icon-color: var(--fui-text-secondary);--fui-snm-transition-duration: var(--fui-duration-fast);--fui-snm-transition-easing: var(--fui-ease-out);display:flex;flex-direction:column;width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-color:var(--fui-snm-bg);box-sizing:border-box}.fui-sidebar-nav-menu__header{flex-shrink:0}.fui-sidebar-nav-menu__body{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--fui-spacing-4);padding-right:var(--fui-spacing-0)}.fui-sidebar-nav-menu__footer{flex-shrink:0}.sidebar-nav-submenu{display:flex;flex-direction:column;list-style:none;margin:0;padding:0;gap:var(--fui-spacing-1);padding-left:var(--fui-spacing-2)}.sidebar-nav-submenu--root{padding-right:var(--fui-spacing-4)}.sidebar-nav-menu__section-header{list-style:none;padding:var(--fui-snm-section-header-padding-y) var(--fui-snm-section-header-padding-x)}.sidebar-nav-menu__section-header-label{display:block;font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-section-header-font-size);font-weight:var(--fui-snm-section-header-font-weight);letter-spacing:var(--fui-snm-section-header-letter-spacing);text-transform:uppercase;color:var(--fui-snm-section-header-color);-webkit-user-select:none;user-select:none}.sidebar-nav-menu__item-wrapper{display:flex;flex-direction:column;position:relative}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item{font-size:var(--fui-text-base);color:var(--fui-text-primary)}.sidebar-nav-menu__item-wrapper--root>.sidebar-nav-menu__item .sidebar-nav-menu__item-icon{--fui-icon-size: var(--fui-icon-lg)}.sidebar-nav-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--fui-snm-item-gap);padding:var(--fui-snm-item-padding-y) var(--fui-snm-item-padding-x);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-snm-item-color);background:transparent;border:none;border-radius:var(--fui-snm-item-radius);font-family:var(--fui-snm-font-family);font-size:var(--fui-snm-font-size);font-weight:var(--fui-snm-font-weight);text-align:left;width:100%;box-sizing:border-box;outline:none;transition-property:background-color;transition-duration:var(--fui-snm-transition-duration);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item:hover:not(.sidebar-nav-menu__item--disabled){background-color:var(--fui-snm-item-bg-hover)}.sidebar-nav-menu__item:focus-visible{outline:var(--fui-state-focus-ring-width) solid var(--fui-primary-50);outline-offset:-2px}.sidebar-nav-menu__item--disabled{color:var(--fui-snm-item-color-disabled);opacity:.5;pointer-events:none;cursor:default}.sidebar-nav-menu__item--parent{font-weight:var(--fui-snm-font-weight-parent)}.sidebar-nav-menu__item[href]{color:var(--fui-snm-item-color);text-decoration:none}.sidebar-nav-menu__item--active{background-color:var(--fui-snm-item-bg-active)}.sidebar-nav-menu__item-content{display:flex;align-items:center;gap:var(--fui-spacing-3);min-width:0;flex:1}.sidebar-nav-menu__item-icon{flex-shrink:0;color:var(--fui-snm-icon-color);display:inline-flex;align-items:center;justify-content:center}.sidebar-nav-menu__item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav-menu__item-chevron{flex-shrink:0;color:var(--fui-snm-item-color);display:inline-flex;align-items:center;justify-content:center;transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.sidebar-nav-menu__item-chevron--expanded{transform:rotate(90deg)}.sidebar-nav-menu__separator{height:1px;background-color:var(--fui-snm-separator-color);list-style:none}.sidebar-nav-submenu__inline{position:relative;display:flex;flex-direction:row;overflow:hidden;will-change:transform,opacity}.sidebar-nav-submenu__inline .sidebar-nav-submenu{flex:1;padding-left:var(--fui-snm-submenu-indent);padding-top:var(--fui-spacing-1)}.sidebar-nav-submenu__inline--enter{animation:sidebar-nav-submenu-enter var(--fui-duration-moderate) var(--fui-ease-out) both}.sidebar-nav-submenu__inline--leave{animation:sidebar-nav-submenu-leave var(--fui-duration-fast) var(--fui-ease-out) both}@keyframes sidebar-nav-submenu-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-nav-submenu-leave{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}.sidebar-nav-submenu__border{position:relative;flex-shrink:0;width:0;margin-left:calc(var(--fui-snm-submenu-indent) - var(--fui-snm-submenu-border-width));border-bottom:var(--fui-border-width-sm) solid var(--fui-snm-submenu-border-color)}.sidebar-nav-submenu__border:before{content:\"\";position:absolute;top:0;bottom:var(--fui-spacing-2);left:0;width:1px;background-color:var(--fui-snm-submenu-border-color);border-radius:var(--fui-radius-xs)}@media(prefers-reduced-motion:reduce){.sidebar-nav-menu__item,.sidebar-nav-menu__item-chevron,.sidebar-nav-submenu__inline--enter,.sidebar-nav-submenu__inline--leave{transition:none;animation:none!important}}\n"] }]
435
435
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], filterString: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterString", required: false }] }, { type: i0.Output, args: ["filterStringChange"] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
436
436
 
437
437
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"raintonic-formaui-components-sidebar-nav-menu.mjs","sources":["../../../lib/components/sidebar-nav-menu/sidebar-nav-submenu.component.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-submenu.component.html","../../../lib/components/sidebar-nav-menu/sidebar-nav-search.intl.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-search.component.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-menu.component.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-menu.component.html","../../../lib/components/sidebar-nav-menu/expand-menu-items.ts","../../../lib/components/sidebar-nav-menu/raintonic-formaui-components-sidebar-nav-menu.ts"],"sourcesContent":["import { Component, effect, input, output, signal } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\n\r\n/**\r\n * Recursive submenu component for rendering nested menu items.\r\n *\r\n * Used internally by FuiSidebarNavMenuComponent. Renders a flat list\r\n * of items and recurses via &lt;sidebar-nav-submenu&gt; in the template\r\n * when an item has children.\r\n *\r\n * Keyboard navigation follows WAI-ARIA menu patterns:\r\n * - ArrowDown / ArrowUp: navigate between siblings\r\n * - ArrowRight: expand submenu\r\n * - ArrowLeft: collapse submenu / move focus to parent\r\n * - Enter / Space: activate item\r\n * - Home / End: first / last item\r\n */\r\n@Component({\r\n selector: 'fui-sidebar-nav-submenu',\r\n standalone: true,\r\n imports: [RouterLink, RouterLinkActive, FuiIconComponent],\r\n templateUrl: './sidebar-nav-submenu.component.html',\r\n styleUrl: './sidebar-nav-menu.component.scss',\r\n})\r\nexport class SidebarNavSubmenuComponent {\r\n /** Menu items to render (IDs already assigned by parent) */\r\n readonly items = input([] as MenuItem[]);\r\n\r\n /** Accessible label for this submenu group */\r\n readonly submenuLabel = input('');\r\n\r\n /** Whether this is the root level (applies root-level styles) */\r\n readonly isRoot = input(false);\r\n\r\n /** Nesting depth (0 = root). Used to compute aria-level on section headers. */\r\n readonly depth = input(0);\r\n\r\n /** Emitted when any clickable item is activated */\r\n readonly itemClick = output<MenuItem>();\r\n\r\n // Track expanded state per item id (Set of string IDs)\r\n readonly _expanded = signal(new Set<string>());\r\n\r\n constructor() {\r\n // Initialize expanded states from item data.\r\n // When the items input changes (new reference), manual user toggle state is\r\n // intentionally reset — auto-expansion from item.expanded takes priority.\r\n // Every `expanded: true` in the data is honoured (filtering and URL-based\r\n // auto-expansion may mark several branches at once); the accordion rule\r\n // only applies to user interaction (see toggleExpand / ArrowRight).\r\n effect(() => {\r\n const expanded = new Set<string>();\r\n\r\n const walk = (list: MenuItem[]) => {\r\n for (const it of list) {\r\n if (it.expanded && it.items?.length) {\r\n expanded.add(it.id!);\r\n }\r\n if (it.items) walk(it.items);\r\n }\r\n };\r\n walk(this.items());\r\n this._expanded.set(expanded);\r\n });\r\n }\r\n\r\n // ─── Public helpers (used in template) ───────────────────\r\n\r\n /** @internal Whether the item has child submenu items */\r\n hasChildren(item: MenuItem): boolean {\r\n return !!(item.items && item.items.length > 0);\r\n }\r\n\r\n /** @internal Whether the item's submenu is currently expanded */\r\n isExpanded(item: MenuItem): boolean {\r\n if (!this.hasChildren(item)) return false;\r\n return this._expanded().has(item.id!);\r\n }\r\n\r\n /** @internal Toggle submenu open/closed */\r\n toggleExpand(event: Event, item: MenuItem): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (item.disabled) return;\r\n\r\n const wasExpanded = this._expanded().has(item.id!);\r\n\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n const id = item.id!;\r\n\r\n if (wasExpanded) {\r\n // Collapse this item\r\n next.delete(id);\r\n } else {\r\n // Expand this item\r\n if (this.isRoot()) {\r\n // Accordion: close any other root items first\r\n next.clear();\r\n }\r\n next.add(id);\r\n }\r\n\r\n return next;\r\n });\r\n\r\n if (item.command) {\r\n item.command(event);\r\n }\r\n this.itemClick.emit(item);\r\n }\r\n\r\n /** @internal Handle click on a leaf (non-parent) item */\r\n onLeafClick(event: Event, item: MenuItem): void {\r\n if (item.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (item.command) {\r\n item.command(event);\r\n }\r\n\r\n this.itemClick.emit(item);\r\n }\r\n\r\n /** @internal Keyboard event handler */\r\n onKeydown(event: KeyboardEvent, item: MenuItem): void {\r\n if (item.disabled) return;\r\n\r\n const itemEl = event.currentTarget as HTMLElement | null;\r\n if (!itemEl) return;\r\n\r\n const listEl = itemEl.closest('ul') as HTMLElement | null;\r\n if (!listEl) return;\r\n\r\n // Collect all enabled items at this level\r\n const items = Array.from(listEl.querySelectorAll<HTMLElement>(':scope > li > .sidebar-nav-menu__item'));\r\n const currentIndex = items.indexOf(itemEl);\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._focusItemAt(items, currentIndex + 1, 1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._focusItemAt(items, currentIndex - 1, -1);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.hasChildren(item) && !this.isExpanded(item)) {\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n if (this.isRoot()) {\r\n // Accordion: close any other root items\r\n next.clear();\r\n }\r\n next.add(item.id!);\r\n return next;\r\n });\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n if (this.hasChildren(item) && this.isExpanded(item)) {\r\n event.preventDefault();\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n next.delete(item.id!);\r\n return next;\r\n });\r\n }\r\n if (this._hasParentSubmenu(itemEl)) {\r\n event.preventDefault();\r\n this._focusParent(itemEl);\r\n }\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (this.hasChildren(item)) {\r\n this.toggleExpand(event, item);\r\n } else {\r\n itemEl.click();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this._focusItemAt(items, 0, 1);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this._focusItemAt(items, items.length - 1, -1);\r\n break;\r\n }\r\n }\r\n\r\n // ─── Private helpers ─────────────────────────────────────\r\n\r\n private _focusItemAt(items: HTMLElement[], start: number, step: 1 | -1): void {\r\n let i = start;\r\n while (i >= 0 && i < items.length) {\r\n if (!items[i].classList.contains('sidebar-nav-menu__item--disabled')) {\r\n items[i].focus();\r\n return;\r\n }\r\n i += step;\r\n }\r\n }\r\n\r\n private _hasParentSubmenu(itemEl: HTMLElement): boolean {\r\n return !!itemEl.closest('fui-sidebar-nav-submenu')?.parentElement?.closest('li');\r\n }\r\n\r\n private _focusParent(itemEl: HTMLElement): void {\r\n const parentSubmenu = itemEl.closest('fui-sidebar-nav-submenu')?.parentElement?.closest('li');\r\n\r\n if (parentSubmenu) {\r\n const parentTrigger = parentSubmenu.querySelector<HTMLElement>('.sidebar-nav-menu__item--parent');\r\n parentTrigger?.focus();\r\n }\r\n }\r\n}\r\n","<ul\r\n class=\"sidebar-nav-submenu\"\r\n role=\"group\"\r\n [class.sidebar-nav-submenu--root]=\"isRoot()\"\r\n [attr.aria-label]=\"submenuLabel()\"\r\n>\r\n @for (item of items(); track item.id; let idx = $index) {\r\n @if (item.visible !== false) {\r\n @if (item.separator) {\r\n <li class=\"sidebar-nav-menu__separator\" role=\"separator\"></li>\r\n } @else if (item.sectionHeader) {\r\n <li class=\"sidebar-nav-menu__section-header\" role=\"heading\" [attr.aria-level]=\"depth() + 2\">\r\n <span class=\"sidebar-nav-menu__section-header-label\">{{ item.label }}</span>\r\n </li>\r\n } @else {\r\n <li\r\n class=\"sidebar-nav-menu__item-wrapper\"\r\n role=\"none\"\r\n [class.sidebar-nav-menu__item-wrapper--root]=\"isRoot()\"\r\n [class.sidebar-nav-menu__item-wrapper--expanded]=\"hasChildren(item) && isExpanded(item)\"\r\n >\r\n @if (hasChildren(item)) {\r\n <!-- Parent item with submenu -->\r\n <button\r\n class=\"sidebar-nav-menu__item sidebar-nav-menu__item--parent\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [class.sidebar-nav-menu__item--expanded]=\"isExpanded(item)\"\r\n [id]=\"item.id + '_trigger'\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"toggleExpand($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-chevron\"\r\n name=\"caret-right\"\r\n [class.sidebar-nav-menu__item-chevron--expanded]=\"isExpanded(item)\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n </button>\r\n\r\n <!-- Submenu content with left border -->\r\n @if (isExpanded(item)) {\r\n <div\r\n class=\"sidebar-nav-submenu__inline\"\r\n animate.enter=\"sidebar-nav-submenu__inline--enter\"\r\n animate.leave=\"sidebar-nav-submenu__inline--leave\"\r\n >\r\n <div class=\"sidebar-nav-submenu__border\"></div>\r\n <fui-sidebar-nav-submenu\r\n [items]=\"item.items!\"\r\n [submenuLabel]=\"item.label || ''\"\r\n [isRoot]=\"false\"\r\n [depth]=\"depth() + 1\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <!-- Leaf item -->\r\n @if (item.routerLink) {\r\n <a\r\n class=\"sidebar-nav-menu__item\"\r\n routerLinkActive=\"sidebar-nav-menu__item--active\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams || undefined\"\r\n [fragment]=\"item.fragment || undefined\"\r\n [target]=\"item.target\"\r\n [title]=\"item.title\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"sidebar-nav-menu__item\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [title]=\"item.title\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n }\r\n }\r\n</ul>\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiSidebarNavSearchIntl extends FuiIntlBase {\r\n /** Placeholder text for the search input. */\r\n searchPlaceholder = 'Cerca';\r\n /** aria-label for the search input. */\r\n searchInputAriaLabel = 'Filtra';\r\n /** aria-label for the clear-search button. */\r\n clearSearchAriaLabel = 'Pulisci';\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, input, model } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiSidebarNavSearchIntl } from './sidebar-nav-search.intl';\r\nimport { FuiInputDirective } from '@raintonic/formaui/components/input';\r\nimport { FuiFormFieldComponent, FuiPrefixDirective } from '@raintonic/formaui/components/form-field';\r\n\r\n/**\r\n * # FuiSidebarNavSearchComponent\r\n *\r\n * A standalone search input component designed to be placed inside the sidebar\r\n * navigation menu. Emits the current filter string so the parent component can\r\n * reactively filter menu items.\r\n *\r\n * ## Features\r\n * - Search input with magnifying-glass icon\r\n * - Clear button that appears when a query is entered\r\n * - Configurable placeholder text (falls back to `FuiSidebarNavSearchIntl` default)\r\n * - Two-way binding via `filterString` model\r\n * - Aria labels via `FuiSidebarNavSearchIntl` (overridable via DI)\r\n *\r\n * ## Usage\r\n *\r\n * ```html\r\n * <fui-sidebar-nav-search\r\n * [(filterString)]=\"myFilter\"\r\n * placeholder=\"Search…\"\r\n * />\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-sidebar-nav-search',\r\n standalone: true,\r\n imports: [FuiIconComponent, FuiInputDirective, FuiFormFieldComponent, FuiPrefixDirective],\r\n template: `\r\n <fui-form-field>\r\n <fui-icon fuiPrefix name=\"magnifying-glass\" color=\"var(--fui-text-disabled)\" size=\"sm\"></fui-icon>\r\n <input\r\n fuiInput\r\n #searchInput\r\n class=\"fui-sidebar-nav-search__input\"\r\n type=\"search\"\r\n [placeholder]=\"resolvedPlaceholder()\"\r\n [value]=\"filterString()\"\r\n (input)=\"filterString.set(searchInput.value)\"\r\n [attr.aria-label]=\"resolvedSearchInputAriaLabel()\"\r\n />\r\n </fui-form-field>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n flex-shrink: 0;\r\n padding: var(--fui-spacing-4) var(--fui-spacing-6);\r\n padding-bottom: 0px;\r\n --fui-bg-subtle: var(--fui-bg-default);\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FuiSidebarNavSearchComponent {\r\n readonly intl = inject(FuiSidebarNavSearchIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._cdr.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * The current filter string. Two-way bindable.\r\n */\r\n readonly filterString = model('');\r\n\r\n /**\r\n * Placeholder text for the search input.\r\n * Falls back to the Intl default when not set.\r\n */\r\n readonly placeholder = input<string | undefined>();\r\n\r\n /** Resolved placeholder: input override -> Intl default. */\r\n readonly resolvedPlaceholder = computed(() => this.placeholder() ?? this.intl.searchPlaceholder);\r\n\r\n /** Resolved search-input aria-label: Intl default. */\r\n readonly resolvedSearchInputAriaLabel = computed(() => this.intl.searchInputAriaLabel);\r\n\r\n /** Resolved clear-button aria-label: Intl default. */\r\n readonly resolvedClearSearchAriaLabel = computed(() => this.intl.clearSearchAriaLabel);\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { SidebarNavSubmenuComponent } from './sidebar-nav-submenu.component';\r\nimport { FuiSidebarNavSearchComponent } from './sidebar-nav-search.component';\r\n\r\n/**\r\n * # FuiSidebarNavMenuComponent\r\n *\r\n * A standalone sidebar navigation menu component with recursive,\r\n * multi-level submenus. Inspired by PrimeNG's TieredMenu model\r\n * with a minimal, structural approach.\r\n *\r\n * ## Features\r\n * - Unlimited nesting depth via recursive submenu template\r\n * - Inline expand/collapse submenus\r\n * - Built-in search input with clear button\r\n * - Routing integration via `routerLink` with automatic active detection\r\n * - Keyboard navigation (Arrow keys, Enter/Space, Home/End)\r\n * - Full ARIA support (`role=\"navigation\"`, `aria-expanded`, `aria-haspopup`)\r\n *\r\n * ## Usage\r\n *\r\n * ```html\r\n * <fui-sidebar-nav-menu\r\n * [items]=\"menuItems\"\r\n * [(filterString)]=\"myFilter\"\r\n * (itemClick)=\"onMenuItemClick($event)\"\r\n * />\r\n * ```\r\n *\r\n * ```typescript\r\n * import { FuiSidebarNavMenuComponent, MenuItem } from '@raintonic/formaui/components/sidebar-nav-menu';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiSidebarNavMenuComponent],\r\n * template: `...`,\r\n * })\r\n * export class MyLayout {\r\n * menuItems: MenuItem[] = [\r\n * { label: 'Dashboard', icon: 'house', routerLink: '/dashboard' },\r\n * {\r\n * label: 'Products',\r\n * icon: 'package',\r\n * items: [\r\n * { label: 'List', routerLink: '/products' },\r\n * { label: 'Categories', routerLink: '/categories' },\r\n * ],\r\n * },\r\n * { separator: true },\r\n * { label: 'Logout', command: () => this.logout() },\r\n * ];\r\n *\r\n * onMenuItemClick(item: MenuItem): void {\r\n * console.log('Menu item:', item.label);\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-sidebar-nav-menu',\r\n standalone: true,\r\n imports: [SidebarNavSubmenuComponent, FuiSidebarNavSearchComponent],\r\n templateUrl: './sidebar-nav-menu.component.html',\r\n styleUrl: './sidebar-nav-menu.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'navigation',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n class: 'fui-sidebar-nav-menu',\r\n },\r\n})\r\nexport class FuiSidebarNavMenuComponent {\r\n /**\r\n * Array of menu items to render.\r\n */\r\n readonly items = input<MenuItem[]>([]);\r\n\r\n /**\r\n * Accessible label for the navigation region.\r\n * @default 'Sidebar menu'\r\n */\r\n readonly ariaLabel = input('Sidebar menu');\r\n\r\n /**\r\n * Optional filter string. When set, the menu displays only items whose label\r\n * contains the filter text (case-insensitive, substring match). Parent items\r\n * with matching descendants remain visible so the filtered child can be reached.\r\n * Separators and section headers are hidden during filtering.\r\n *\r\n * This is a two-way bindable model signal — set it programmatically or wire it\r\n * to the built-in search component.\r\n */\r\n readonly filterString = model('');\r\n\r\n /**\r\n * Emitted when any clickable menu item is activated.\r\n */\r\n readonly itemClick = output<MenuItem>();\r\n\r\n /**\r\n * Pure derivation that assigns unique IDs without mutating consumer data.\r\n * Each item is shallow-copied; the tree is walked recursively.\r\n */\r\n readonly _readyItems = computed(() => {\r\n let counter = 0;\r\n const assignIds = (list: readonly MenuItem[]): MenuItem[] =>\r\n list.map((it) => {\r\n const copy = { ...it, id: it.id ?? `fui-mi-${++counter}` };\r\n if (copy.items) copy.items = assignIds(copy.items);\r\n return copy;\r\n });\r\n return assignIds(this.items());\r\n });\r\n\r\n /**\r\n * Filtered items based on `filterString`. When the filter is non-empty,\r\n * items are kept if their label matches (case-insensitive substring) or\r\n * if any descendant matches. Separators and section headers are hidden\r\n * during filtering.\r\n */\r\n readonly _filteredItems = computed(() => {\r\n const filter = this.filterString().trim().toLowerCase();\r\n const items = this._readyItems();\r\n\r\n if (!filter) return items;\r\n\r\n const filterTree = (list: MenuItem[]): MenuItem[] =>\r\n list\r\n .filter((it) => !it.separator && !it.sectionHeader)\r\n .filter((item) => {\r\n const childrenMatch = item.items?.length ? filterTree(item.items).length > 0 : false;\r\n return !!item.label?.toLowerCase().includes(filter) || childrenMatch;\r\n })\r\n .map((item) => {\r\n const filteredChildren = item.items?.length ? filterTree(item.items) : undefined;\r\n return filteredChildren?.length ? { ...item, expanded: true, items: filteredChildren } : item;\r\n });\r\n\r\n return filterTree(items);\r\n });\r\n\r\n /** @internal Pass-through handler from submenu */\r\n _onItemClick(item: MenuItem): void {\r\n this.itemClick.emit(item);\r\n }\r\n}\r\n","<div class=\"fui-sidebar-nav-menu__header\">\r\n <ng-content select=\"[fuiSidebarNavHeader]\"></ng-content>\r\n</div>\r\n\r\n<fui-sidebar-nav-search [(filterString)]=\"filterString\" />\r\n\r\n<div class=\"fui-sidebar-nav-menu__body\">\r\n <fui-sidebar-nav-submenu\r\n [items]=\"_filteredItems()\"\r\n [submenuLabel]=\"ariaLabel()\"\r\n [isRoot]=\"true\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"fui-sidebar-nav-menu__footer\">\r\n <ng-content select=\"[fuiSidebarNavFooter]\"></ng-content>\r\n</div>\r\n","import { MenuItem } from '@raintonic/formaui/core';\r\n\r\n/**\r\n * Walk a menu item tree and set `expanded: true` on every parent whose\r\n * descendant chain contains a `routerLink` that matches the current URL.\r\n *\r\n * The function is **immutable** — it clones items only when it needs to mutate\r\n * them, returning the same reference for untouched subtrees.\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * import { expandMenuItems } from '@raintonic/formaui/components/sidebar-nav-menu';\r\n *\r\n * const items = expandMenuItems(myMenuItems, '/products/categories');\r\n * ```\r\n *\r\n * @param items - Menu item tree\r\n * @param currentUrl - The current URL path (e.g. `'/products/categories'`)\r\n * @returns A new tree with `expanded` set on matching parent items\r\n */\r\nexport function expandMenuItems(items: readonly MenuItem[], currentUrl: string): MenuItem[] {\r\n const result: MenuItem[] = [];\r\n\r\n for (const item of items) {\r\n // Separators and section headers are never expandable — pass through unchanged\r\n if (item.separator || item.sectionHeader) {\r\n result.push(item);\r\n continue;\r\n }\r\n\r\n const hasChildMatch = item.items && containsActiveDescendant(item.items, currentUrl);\r\n\r\n if (hasChildMatch) {\r\n // Clone the item, set expanded, and recurse into children\r\n result.push({\r\n ...item,\r\n expanded: true,\r\n items: expandMenuItems(item.items!, currentUrl),\r\n });\r\n } else if (item.expanded) {\r\n // No descendants match — reset expanded to false so the consumer's initial\r\n // state doesn't leak through\r\n result.push({ ...item, expanded: false });\r\n } else {\r\n result.push(item);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns `true` if any item in the list has a `routerLink` matching\r\n * `currentUrl`, or if any descendant of an item matches (recursive).\r\n */\r\nfunction containsActiveDescendant(items: readonly MenuItem[], currentUrl: string): boolean {\r\n return items.some((item) => {\r\n if (matchesUrl(item.routerLink, currentUrl)) return true;\r\n if (item.items && containsActiveDescendant(item.items, currentUrl)) return true;\r\n return false;\r\n });\r\n}\r\n\r\n/**\r\n * Normalise and compare a `routerLink` value against the current URL string.\r\n */\r\nfunction matchesUrl(routerLink: string | any[] | undefined, currentUrl: string): boolean {\r\n if (!routerLink) return false;\r\n if (typeof routerLink === 'string') {\r\n return normalise(routerLink) === normalise(currentUrl);\r\n }\r\n // routerLink as array — join segments to form the path\r\n const segments = routerLink.map(String).filter(Boolean);\r\n return segments.length > 0 && normalise(segments.join('/')) === normalise(currentUrl);\r\n}\r\n\r\n/**\r\n * Strip query string, fragment, and leading/trailing slashes for comparison.\r\n * `Router.url` includes query params and fragment (e.g. `/products?page=2#top`),\r\n * which must not prevent the path from matching a plain `routerLink`.\r\n */\r\nfunction normalise(p: string): string {\r\n const pathOnly = p.split(/[?#]/)[0];\r\n return pathOnly.replace(/^\\/+|\\/+$/g, '');\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raintonic-formaui-components-sidebar-nav-menu.mjs","sources":["../../../lib/components/sidebar-nav-menu/sidebar-nav-submenu.component.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-submenu.component.html","../../../lib/components/sidebar-nav-menu/sidebar-nav-search.intl.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-search.component.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-menu.component.ts","../../../lib/components/sidebar-nav-menu/sidebar-nav-menu.component.html","../../../lib/components/sidebar-nav-menu/expand-menu-items.ts","../../../lib/components/sidebar-nav-menu/raintonic-formaui-components-sidebar-nav-menu.ts"],"sourcesContent":["import { Component, effect, input, output, signal } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\n\r\n/**\r\n * Recursive submenu component for rendering nested menu items.\r\n *\r\n * Used internally by FuiSidebarNavMenuComponent. Renders a flat list\r\n * of items and recurses via &lt;sidebar-nav-submenu&gt; in the template\r\n * when an item has children.\r\n *\r\n * Keyboard navigation follows WAI-ARIA menu patterns:\r\n * - ArrowDown / ArrowUp: navigate between siblings\r\n * - ArrowRight: expand submenu\r\n * - ArrowLeft: collapse submenu / move focus to parent\r\n * - Enter / Space: activate item\r\n * - Home / End: first / last item\r\n */\r\n@Component({\r\n selector: 'fui-sidebar-nav-submenu',\r\n standalone: true,\r\n imports: [RouterLink, RouterLinkActive, FuiIconComponent],\r\n templateUrl: './sidebar-nav-submenu.component.html',\r\n styleUrl: './sidebar-nav-menu.component.scss',\r\n})\r\nexport class SidebarNavSubmenuComponent {\r\n /** Menu items to render (IDs already assigned by parent) */\r\n readonly items = input([] as MenuItem[]);\r\n\r\n /** Accessible label for this submenu group */\r\n readonly submenuLabel = input('');\r\n\r\n /** Whether this is the root level (applies root-level styles) */\r\n readonly isRoot = input(false);\r\n\r\n /** Nesting depth (0 = root). Used to compute aria-level on section headers. */\r\n readonly depth = input(0);\r\n\r\n /** Emitted when any clickable item is activated */\r\n readonly itemClick = output<MenuItem>();\r\n\r\n // Track expanded state per item id (Set of string IDs)\r\n readonly _expanded = signal(new Set<string>());\r\n\r\n constructor() {\r\n // Initialize expanded states from item data.\r\n // When the items input changes (new reference), manual user toggle state is\r\n // intentionally reset — auto-expansion from item.expanded takes priority.\r\n // Every `expanded: true` in the data is honoured (filtering and URL-based\r\n // auto-expansion may mark several branches at once); the accordion rule\r\n // only applies to user interaction (see toggleExpand / ArrowRight).\r\n effect(() => {\r\n const expanded = new Set<string>();\r\n\r\n const walk = (list: MenuItem[]) => {\r\n for (const it of list) {\r\n if (it.expanded && it.items?.length) {\r\n expanded.add(it.id!);\r\n }\r\n if (it.items) walk(it.items);\r\n }\r\n };\r\n walk(this.items());\r\n this._expanded.set(expanded);\r\n });\r\n }\r\n\r\n // ─── Public helpers (used in template) ───────────────────\r\n\r\n /** @internal Whether the item has child submenu items */\r\n hasChildren(item: MenuItem): boolean {\r\n return !!(item.items && item.items.length > 0);\r\n }\r\n\r\n /** @internal Whether the item's submenu is currently expanded */\r\n isExpanded(item: MenuItem): boolean {\r\n if (!this.hasChildren(item)) return false;\r\n return this._expanded().has(item.id!);\r\n }\r\n\r\n /** @internal Toggle submenu open/closed */\r\n toggleExpand(event: Event, item: MenuItem): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (item.disabled) return;\r\n\r\n const wasExpanded = this._expanded().has(item.id!);\r\n\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n const id = item.id!;\r\n\r\n if (wasExpanded) {\r\n // Collapse this item\r\n next.delete(id);\r\n } else {\r\n // Expand this item\r\n if (this.isRoot()) {\r\n // Accordion: close any other root items first\r\n next.clear();\r\n }\r\n next.add(id);\r\n }\r\n\r\n return next;\r\n });\r\n\r\n if (item.command) {\r\n item.command(event);\r\n }\r\n this.itemClick.emit(item);\r\n }\r\n\r\n /** @internal Handle click on a leaf (non-parent) item */\r\n onLeafClick(event: Event, item: MenuItem): void {\r\n if (item.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (item.command) {\r\n item.command(event);\r\n }\r\n\r\n this.itemClick.emit(item);\r\n }\r\n\r\n /** @internal Keyboard event handler */\r\n onKeydown(event: KeyboardEvent, item: MenuItem): void {\r\n if (item.disabled) return;\r\n\r\n const itemEl = event.currentTarget as HTMLElement | null;\r\n if (!itemEl) return;\r\n\r\n const listEl = itemEl.closest('ul') as HTMLElement | null;\r\n if (!listEl) return;\r\n\r\n // Collect all enabled items at this level\r\n const items = Array.from(listEl.querySelectorAll<HTMLElement>(':scope > li > .sidebar-nav-menu__item'));\r\n const currentIndex = items.indexOf(itemEl);\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._focusItemAt(items, currentIndex + 1, 1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._focusItemAt(items, currentIndex - 1, -1);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.hasChildren(item) && !this.isExpanded(item)) {\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n if (this.isRoot()) {\r\n // Accordion: close any other root items\r\n next.clear();\r\n }\r\n next.add(item.id!);\r\n return next;\r\n });\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n if (this.hasChildren(item) && this.isExpanded(item)) {\r\n event.preventDefault();\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n next.delete(item.id!);\r\n return next;\r\n });\r\n }\r\n if (this._hasParentSubmenu(itemEl)) {\r\n event.preventDefault();\r\n this._focusParent(itemEl);\r\n }\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (this.hasChildren(item)) {\r\n this.toggleExpand(event, item);\r\n } else {\r\n itemEl.click();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this._focusItemAt(items, 0, 1);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this._focusItemAt(items, items.length - 1, -1);\r\n break;\r\n }\r\n }\r\n\r\n // ─── Private helpers ─────────────────────────────────────\r\n\r\n private _focusItemAt(items: HTMLElement[], start: number, step: 1 | -1): void {\r\n let i = start;\r\n while (i >= 0 && i < items.length) {\r\n if (!items[i].classList.contains('sidebar-nav-menu__item--disabled')) {\r\n items[i].focus();\r\n return;\r\n }\r\n i += step;\r\n }\r\n }\r\n\r\n private _hasParentSubmenu(itemEl: HTMLElement): boolean {\r\n return !!itemEl.closest('fui-sidebar-nav-submenu')?.parentElement?.closest('li');\r\n }\r\n\r\n private _focusParent(itemEl: HTMLElement): void {\r\n const parentSubmenu = itemEl.closest('fui-sidebar-nav-submenu')?.parentElement?.closest('li');\r\n\r\n if (parentSubmenu) {\r\n const parentTrigger = parentSubmenu.querySelector<HTMLElement>('.sidebar-nav-menu__item--parent');\r\n parentTrigger?.focus();\r\n }\r\n }\r\n}\r\n","<ul\r\n class=\"sidebar-nav-submenu\"\r\n role=\"group\"\r\n [class.sidebar-nav-submenu--root]=\"isRoot()\"\r\n [attr.aria-label]=\"submenuLabel()\"\r\n>\r\n @for (item of items(); track item.id; let idx = $index) {\r\n @if (item.visible !== false) {\r\n @if (item.separator) {\r\n <li class=\"sidebar-nav-menu__separator\" role=\"separator\"></li>\r\n } @else if (item.sectionHeader) {\r\n <li class=\"sidebar-nav-menu__section-header\" role=\"heading\" [attr.aria-level]=\"depth() + 2\">\r\n <span class=\"sidebar-nav-menu__section-header-label\">{{ item.label }}</span>\r\n </li>\r\n } @else {\r\n <li\r\n class=\"sidebar-nav-menu__item-wrapper\"\r\n role=\"none\"\r\n [class.sidebar-nav-menu__item-wrapper--root]=\"isRoot()\"\r\n [class.sidebar-nav-menu__item-wrapper--expanded]=\"hasChildren(item) && isExpanded(item)\"\r\n >\r\n @if (hasChildren(item)) {\r\n <!-- Parent item with submenu -->\r\n <button\r\n class=\"sidebar-nav-menu__item sidebar-nav-menu__item--parent\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [class.sidebar-nav-menu__item--expanded]=\"isExpanded(item)\"\r\n [id]=\"item.id + '_trigger'\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"toggleExpand($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-chevron\"\r\n name=\"caret-right\"\r\n [class.sidebar-nav-menu__item-chevron--expanded]=\"isExpanded(item)\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n </button>\r\n\r\n <!-- Submenu content with left border -->\r\n @if (isExpanded(item)) {\r\n <div\r\n class=\"sidebar-nav-submenu__inline\"\r\n animate.enter=\"sidebar-nav-submenu__inline--enter\"\r\n animate.leave=\"sidebar-nav-submenu__inline--leave\"\r\n >\r\n <div class=\"sidebar-nav-submenu__border\"></div>\r\n <fui-sidebar-nav-submenu\r\n [items]=\"item.items!\"\r\n [submenuLabel]=\"item.label || ''\"\r\n [isRoot]=\"false\"\r\n [depth]=\"depth() + 1\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n />\r\n </div>\r\n }\r\n } @else {\r\n <!-- Leaf item -->\r\n @if (item.routerLink) {\r\n <a\r\n class=\"sidebar-nav-menu__item\"\r\n routerLinkActive=\"sidebar-nav-menu__item--active\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams || undefined\"\r\n [fragment]=\"item.fragment || undefined\"\r\n [target]=\"item.target\"\r\n [title]=\"item.title\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"sidebar-nav-menu__item\"\r\n type=\"button\"\r\n [class.sidebar-nav-menu__item--disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? '-1' : '0'\"\r\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\r\n [title]=\"item.title\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onLeafClick($event, item)\"\r\n (keydown)=\"onKeydown($event, item)\"\r\n >\r\n <span class=\"sidebar-nav-menu__item-content\">\r\n @if (item.icon) {\r\n <fui-icon\r\n class=\"sidebar-nav-menu__item-icon\"\r\n [name]=\"item.icon\"\r\n size=\"md\"\r\n aria-hidden=\"true\"\r\n ></fui-icon>\r\n }\r\n <span class=\"sidebar-nav-menu__item-label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n }\r\n }\r\n</ul>\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiSidebarNavSearchIntl extends FuiIntlBase {\r\n /** Placeholder text for the search input. */\r\n searchPlaceholder = 'Cerca';\r\n /** aria-label for the search input. */\r\n searchInputAriaLabel = 'Filtra';\r\n /** aria-label for the clear-search button. */\r\n clearSearchAriaLabel = 'Pulisci';\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, input, model } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { FuiSidebarNavSearchIntl } from './sidebar-nav-search.intl';\r\nimport { FuiInputDirective } from '@raintonic/formaui/components/input';\r\nimport { FuiFormFieldComponent, FuiPrefixDirective } from '@raintonic/formaui/components/form-field';\r\n\r\n/**\r\n * # FuiSidebarNavSearchComponent\r\n *\r\n * A standalone search input component designed to be placed inside the sidebar\r\n * navigation menu. Emits the current filter string so the parent component can\r\n * reactively filter menu items.\r\n *\r\n * ## Features\r\n * - Search input with magnifying-glass icon\r\n * - Clear button that appears when a query is entered\r\n * - Configurable placeholder text (falls back to `FuiSidebarNavSearchIntl` default)\r\n * - Two-way binding via `filterString` model\r\n * - Aria labels via `FuiSidebarNavSearchIntl` (overridable via DI)\r\n *\r\n * ## Usage\r\n *\r\n * ```html\r\n * <fui-sidebar-nav-search\r\n * [(filterString)]=\"myFilter\"\r\n * placeholder=\"Search…\"\r\n * />\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-sidebar-nav-search',\r\n standalone: true,\r\n imports: [FuiIconComponent, FuiInputDirective, FuiFormFieldComponent, FuiPrefixDirective],\r\n template: `\r\n <fui-form-field>\r\n <fui-icon fuiPrefix name=\"magnifying-glass\" color=\"var(--fui-text-disabled)\" size=\"sm\"></fui-icon>\r\n <input\r\n fuiInput\r\n #searchInput\r\n class=\"fui-sidebar-nav-search__input\"\r\n type=\"search\"\r\n [placeholder]=\"resolvedPlaceholder()\"\r\n [value]=\"filterString()\"\r\n (input)=\"filterString.set(searchInput.value)\"\r\n [attr.aria-label]=\"resolvedSearchInputAriaLabel()\"\r\n />\r\n </fui-form-field>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n flex-shrink: 0;\r\n padding: var(--fui-spacing-4) var(--fui-spacing-6);\r\n padding-bottom: 0px;\r\n --fui-bg-subtle: var(--fui-bg-default);\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FuiSidebarNavSearchComponent {\r\n readonly intl = inject(FuiSidebarNavSearchIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._cdr.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * The current filter string. Two-way bindable.\r\n */\r\n readonly filterString = model('');\r\n\r\n /**\r\n * Placeholder text for the search input.\r\n * Falls back to the Intl default when not set.\r\n */\r\n readonly placeholder = input<string | undefined>();\r\n\r\n /** Resolved placeholder: input override -> Intl default. */\r\n readonly resolvedPlaceholder = computed(() => this.placeholder() ?? this.intl.searchPlaceholder);\r\n\r\n /** Resolved search-input aria-label: Intl default. */\r\n readonly resolvedSearchInputAriaLabel = computed(() => this.intl.searchInputAriaLabel);\r\n\r\n /** Resolved clear-button aria-label: Intl default. */\r\n readonly resolvedClearSearchAriaLabel = computed(() => this.intl.clearSearchAriaLabel);\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { SidebarNavSubmenuComponent } from './sidebar-nav-submenu.component';\r\nimport { FuiSidebarNavSearchComponent } from './sidebar-nav-search.component';\r\n\r\n/**\r\n * # FuiSidebarNavMenuComponent\r\n *\r\n * A standalone sidebar navigation menu component with recursive,\r\n * multi-level submenus. Inspired by PrimeNG's TieredMenu model\r\n * with a minimal, structural approach.\r\n *\r\n * ## Features\r\n * - Unlimited nesting depth via recursive submenu template\r\n * - Inline expand/collapse submenus\r\n * - Built-in search input with clear button\r\n * - Routing integration via `routerLink` with automatic active detection\r\n * - Keyboard navigation (Arrow keys, Enter/Space, Home/End)\r\n * - Full ARIA support (`role=\"navigation\"`, `aria-expanded`, `aria-haspopup`)\r\n *\r\n * ## Usage\r\n *\r\n * ```html\r\n * <fui-sidebar-nav-menu\r\n * [items]=\"menuItems\"\r\n * [(filterString)]=\"myFilter\"\r\n * (itemClick)=\"onMenuItemClick($event)\"\r\n * />\r\n * ```\r\n *\r\n * ```typescript\r\n * import { FuiSidebarNavMenuComponent, MenuItem } from '@raintonic/formaui/components/sidebar-nav-menu';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiSidebarNavMenuComponent],\r\n * template: `...`,\r\n * })\r\n * export class MyLayout {\r\n * menuItems: MenuItem[] = [\r\n * { label: 'Dashboard', icon: 'house', routerLink: '/dashboard' },\r\n * {\r\n * label: 'Products',\r\n * icon: 'package',\r\n * items: [\r\n * { label: 'List', routerLink: '/products' },\r\n * { label: 'Categories', routerLink: '/categories' },\r\n * ],\r\n * },\r\n * { separator: true },\r\n * { label: 'Logout', command: () => this.logout() },\r\n * ];\r\n *\r\n * onMenuItemClick(item: MenuItem): void {\r\n * console.log('Menu item:', item.label);\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-sidebar-nav-menu',\r\n standalone: true,\r\n imports: [SidebarNavSubmenuComponent, FuiSidebarNavSearchComponent],\r\n templateUrl: './sidebar-nav-menu.component.html',\r\n styleUrl: './sidebar-nav-menu.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'navigation',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n class: 'fui-sidebar-nav-menu',\r\n },\r\n})\r\nexport class FuiSidebarNavMenuComponent {\r\n /**\r\n * Array of menu items to render.\r\n */\r\n readonly items = input<MenuItem[]>([]);\r\n\r\n /**\r\n * Accessible label for the navigation region.\r\n * @default 'Sidebar menu'\r\n */\r\n readonly ariaLabel = input('Sidebar menu');\r\n\r\n /**\r\n * Optional filter string. When set, the menu displays only items whose label\r\n * contains the filter text (case-insensitive, substring match). Parent items\r\n * with matching descendants remain visible so the filtered child can be reached.\r\n * Separators and section headers are hidden during filtering.\r\n *\r\n * This is a two-way bindable model signal — set it programmatically or wire it\r\n * to the built-in search component.\r\n */\r\n readonly filterString = model('');\r\n\r\n /**\r\n * Emitted when any clickable menu item is activated.\r\n */\r\n readonly itemClick = output<MenuItem>();\r\n\r\n /**\r\n * Pure derivation that assigns unique IDs without mutating consumer data.\r\n * Each item is shallow-copied; the tree is walked recursively.\r\n */\r\n readonly _readyItems = computed(() => {\r\n let counter = 0;\r\n const assignIds = (list: readonly MenuItem[]): MenuItem[] =>\r\n list.map((it) => {\r\n const copy = { ...it, id: it.id ?? `fui-mi-${++counter}` };\r\n if (copy.items) copy.items = assignIds(copy.items);\r\n return copy;\r\n });\r\n return assignIds(this.items());\r\n });\r\n\r\n /**\r\n * Filtered items based on `filterString`. When the filter is non-empty,\r\n * items are kept if their label matches (case-insensitive substring) or\r\n * if any descendant matches. Separators and section headers are hidden\r\n * during filtering.\r\n */\r\n readonly _filteredItems = computed(() => {\r\n const filter = this.filterString().trim().toLowerCase();\r\n const items = this._readyItems();\r\n\r\n if (!filter) return items;\r\n\r\n const filterTree = (list: MenuItem[]): MenuItem[] =>\r\n list\r\n .filter((it) => !it.separator && !it.sectionHeader)\r\n .filter((item) => {\r\n const childrenMatch = item.items?.length ? filterTree(item.items).length > 0 : false;\r\n return !!item.label?.toLowerCase().includes(filter) || childrenMatch;\r\n })\r\n .map((item) => {\r\n const filteredChildren = item.items?.length ? filterTree(item.items) : undefined;\r\n return filteredChildren?.length ? { ...item, expanded: true, items: filteredChildren } : item;\r\n });\r\n\r\n return filterTree(items);\r\n });\r\n\r\n /** @internal Pass-through handler from submenu */\r\n _onItemClick(item: MenuItem): void {\r\n this.itemClick.emit(item);\r\n }\r\n}\r\n","<div class=\"fui-sidebar-nav-menu__header\">\r\n <ng-content select=\"[fuiSidebarNavHeader]\"></ng-content>\r\n</div>\r\n\r\n<fui-sidebar-nav-search [(filterString)]=\"filterString\" />\r\n\r\n<div class=\"fui-sidebar-nav-menu__body\">\r\n <fui-sidebar-nav-submenu\r\n [items]=\"_filteredItems()\"\r\n [submenuLabel]=\"ariaLabel()\"\r\n [isRoot]=\"true\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n />\r\n</div>\r\n\r\n<div class=\"fui-sidebar-nav-menu__footer\">\r\n <ng-content select=\"[fuiSidebarNavFooter]\"></ng-content>\r\n</div>\r\n","import { MenuItem } from '@raintonic/formaui/core';\r\n\r\n/**\r\n * Walk a menu item tree and set `expanded: true` on every parent whose\r\n * descendant chain contains a `routerLink` that matches the current URL.\r\n *\r\n * The function is **immutable** — it clones items only when it needs to mutate\r\n * them, returning the same reference for untouched subtrees.\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * import { expandMenuItems } from '@raintonic/formaui/components/sidebar-nav-menu';\r\n *\r\n * const items = expandMenuItems(myMenuItems, '/products/categories');\r\n * ```\r\n *\r\n * @param items - Menu item tree\r\n * @param currentUrl - The current URL path (e.g. `'/products/categories'`)\r\n * @returns A new tree with `expanded` set on matching parent items\r\n */\r\nexport function expandMenuItems(items: readonly MenuItem[], currentUrl: string): MenuItem[] {\r\n const result: MenuItem[] = [];\r\n\r\n for (const item of items) {\r\n // Separators and section headers are never expandable — pass through unchanged\r\n if (item.separator || item.sectionHeader) {\r\n result.push(item);\r\n continue;\r\n }\r\n\r\n const hasChildMatch = item.items && containsActiveDescendant(item.items, currentUrl);\r\n\r\n if (hasChildMatch) {\r\n // Clone the item, set expanded, and recurse into children\r\n result.push({\r\n ...item,\r\n expanded: true,\r\n items: expandMenuItems(item.items!, currentUrl),\r\n });\r\n } else if (item.expanded) {\r\n // No descendants match — reset expanded to false so the consumer's initial\r\n // state doesn't leak through\r\n result.push({ ...item, expanded: false });\r\n } else {\r\n result.push(item);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns `true` if any item in the list has a `routerLink` matching\r\n * `currentUrl`, or if any descendant of an item matches (recursive).\r\n */\r\nfunction containsActiveDescendant(items: readonly MenuItem[], currentUrl: string): boolean {\r\n return items.some((item) => {\r\n if (matchesUrl(item.routerLink, currentUrl)) return true;\r\n if (item.items && containsActiveDescendant(item.items, currentUrl)) return true;\r\n return false;\r\n });\r\n}\r\n\r\n/**\r\n * Normalise and compare a `routerLink` value against the current URL string.\r\n */\r\nfunction matchesUrl(routerLink: string | any[] | undefined, currentUrl: string): boolean {\r\n if (!routerLink) return false;\r\n if (typeof routerLink === 'string') {\r\n return normalise(routerLink) === normalise(currentUrl);\r\n }\r\n // routerLink as array — join segments to form the path\r\n const segments = routerLink.map(String).filter(Boolean);\r\n return segments.length > 0 && normalise(segments.join('/')) === normalise(currentUrl);\r\n}\r\n\r\n/**\r\n * Strip query string, fragment, and leading/trailing slashes for comparison.\r\n * `Router.url` includes query params and fragment (e.g. `/products?page=2#top`),\r\n * which must not prevent the path from matching a plain `routerLink`.\r\n */\r\nfunction normalise(p: string): string {\r\n const pathOnly = p.split(/[?#]/)[0];\r\n return pathOnly.replace(/^\\/+|\\/+$/g, '');\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -339,7 +339,7 @@ class FuiSliderComponent {
339
339
  useExisting: FuiSliderComponent,
340
340
  multi: true,
341
341
  },
342
- ], viewQueries: [{ propertyName: "_sliderContainer", first: true, predicate: ["sliderContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"fui-slider__container\" (click)=\"_onTrackClick($event)\" #sliderContainer>\r\n <div class=\"fui-slider__track\">\r\n <div\r\n class=\"fui-slider__track-fill\"\r\n [style.left.%]=\"range() ? _percentageLow() : 0\"\r\n [style.width.%]=\"range() ? _percentageHigh() - _percentageLow() : _percentage()\"\r\n ></div>\r\n </div>\r\n\r\n @if (showTicks()) {\r\n <div class=\"fui-slider__ticks\">\r\n @for (tick of _tickValues(); track tick) {\r\n <div\r\n class=\"fui-slider__tick\"\r\n [style.left.%]=\"_valueToPercent(tick)\"\r\n [class.fui-slider__tick--active]=\"_isTickActive(tick)\"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--low\"\r\n [style.left.%]=\"range() ? _percentageLow() : _percentage()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"range() ? _valueLow() : _value()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"range() ? _valueHigh() : max()\"\r\n [attr.aria-label]=\"range() ? (ariaLabelLow() || intl.minValueAriaLabel) : (ariaLabel() || null)\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'low')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'low')\"\r\n (keydown)=\"_onThumbKeydown($event, 'low')\"\r\n (focus)=\"_hovered.set('low')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'low' || _hovered() === 'low')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(range() ? _valueLow() : _value()) }}</div>\r\n }\r\n </div>\r\n\r\n @if (range()) {\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--high\"\r\n [style.left.%]=\"_percentageHigh()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"_valueHigh()\"\r\n [attr.aria-valuemin]=\"_valueLow()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-label]=\"ariaLabelHigh() || intl.maxValueAriaLabel\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'high')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'high')\"\r\n (keydown)=\"_onThumbKeydown($event, 'high')\"\r\n (focus)=\"_hovered.set('high')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'high' || _hovered() === 'high')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(_valueHigh()) }}</div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}.fui-slider{display:block;position:relative;width:100%;padding:10px 0;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fui-slider__container{position:relative;width:100%;height:20px;display:flex;align-items:center}.fui-slider__track{position:absolute;left:0;right:0;height:8px;border-radius:var(--fui-radius-pill, 999px);background-color:var(--fui-neutral-30, #e2e8f0);overflow:hidden}.fui-slider__track-fill{position:absolute;top:0;bottom:0;background-color:var(--fui-accent-bg);border-radius:var(--fui-radius-pill, 999px);transition-property:left,width;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__ticks{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);pointer-events:none}.fui-slider__tick{position:absolute;width:8px;height:8px;border-radius:50%;background-color:var(--fui-neutral-50, #94a3b8);transform:translate(-50%,-50%);top:50%;transition-property:background-color;transition-duration:var(--fui-duration-fast, .15s);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.fui-slider__tick--active{background-color:var(--fui-bg-subtle)}.fui-slider__thumb{position:absolute;width:20px;height:20px;border-radius:50%;background-color:var(--fui-bg-subtle);border:1px solid var(--fui-accent-bg);transform:translate(-50%);cursor:grab;z-index:2;outline:none;transition-property:left,transform,box-shadow;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__thumb:hover{box-shadow:0 0 0 6px color-mix(in srgb,var(--fui-primary-50) 15%,transparent)}.fui-slider__thumb:focus-visible{outline:2px solid var(--fui-primary-10)}.fui-slider__tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:4px 8px;background-color:var(--fui-bg-inverse, #1e293b);color:var(--fui-text-inverse, #fff);font-family:var(--fui-font-sans);font-size:var(--fui-text-sm, .75rem);font-weight:var(--fui-weight-medium, 500);line-height:1.2;white-space:nowrap;border-radius:var(--fui-radius-sm, 4px);pointer-events:none;transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-slider__tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--fui-bg-inverse, #1e293b)}.fui-slider--dragging .fui-slider__thumb{cursor:grabbing;transform:translate(-50%) scale(1.15);box-shadow:0 0 0 8px color-mix(in srgb,var(--fui-primary-50) 20%,transparent)}.fui-slider--dragging .fui-slider__track-fill{transition:none}.fui-slider--disabled{cursor:not-allowed;opacity:var(--fui-state-disabled-opacity, .38);pointer-events:none}.fui-slider--disabled .fui-slider__thumb{cursor:not-allowed}.fui-slider--range .fui-slider__thumb--high{z-index:3}@media(prefers-contrast:high){.fui-slider__thumb{border:2px solid CanvasText}.fui-slider__track{border:1px solid CanvasText}}@media(prefers-reduced-motion:reduce){.fui-slider__thumb,.fui-slider__track-fill,.fui-slider__tooltip,.fui-slider__tick{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
342
+ ], viewQueries: [{ propertyName: "_sliderContainer", first: true, predicate: ["sliderContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"fui-slider__container\" (click)=\"_onTrackClick($event)\" #sliderContainer>\r\n <div class=\"fui-slider__track\">\r\n <div\r\n class=\"fui-slider__track-fill\"\r\n [style.left.%]=\"range() ? _percentageLow() : 0\"\r\n [style.width.%]=\"range() ? _percentageHigh() - _percentageLow() : _percentage()\"\r\n ></div>\r\n </div>\r\n\r\n @if (showTicks()) {\r\n <div class=\"fui-slider__ticks\">\r\n @for (tick of _tickValues(); track tick) {\r\n <div\r\n class=\"fui-slider__tick\"\r\n [style.left.%]=\"_valueToPercent(tick)\"\r\n [class.fui-slider__tick--active]=\"_isTickActive(tick)\"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--low\"\r\n [style.left.%]=\"range() ? _percentageLow() : _percentage()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"range() ? _valueLow() : _value()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"range() ? _valueHigh() : max()\"\r\n [attr.aria-label]=\"range() ? (ariaLabelLow() || intl.minValueAriaLabel) : (ariaLabel() || null)\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'low')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'low')\"\r\n (keydown)=\"_onThumbKeydown($event, 'low')\"\r\n (focus)=\"_hovered.set('low')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'low' || _hovered() === 'low')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(range() ? _valueLow() : _value()) }}</div>\r\n }\r\n </div>\r\n\r\n @if (range()) {\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--high\"\r\n [style.left.%]=\"_percentageHigh()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"_valueHigh()\"\r\n [attr.aria-valuemin]=\"_valueLow()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-label]=\"ariaLabelHigh() || intl.maxValueAriaLabel\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'high')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'high')\"\r\n (keydown)=\"_onThumbKeydown($event, 'high')\"\r\n (focus)=\"_hovered.set('high')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'high' || _hovered() === 'high')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(_valueHigh()) }}</div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}.fui-slider{display:block;position:relative;width:100%;padding:10px 0;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fui-slider__container{position:relative;width:100%;height:20px;display:flex;align-items:center}.fui-slider__track{position:absolute;left:0;right:0;height:8px;border-radius:var(--fui-radius-pill, 999px);background-color:var(--fui-neutral-30, #e2e8f0);overflow:hidden}.fui-slider__track-fill{position:absolute;top:0;bottom:0;background-color:var(--fui-accent-bg);border-radius:var(--fui-radius-pill, 999px);transition-property:left,width;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__ticks{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);pointer-events:none}.fui-slider__tick{position:absolute;width:8px;height:8px;border-radius:50%;background-color:var(--fui-neutral-50, #94a3b8);transform:translate(-50%,-50%);top:50%;transition-property:background-color;transition-duration:var(--fui-duration-fast, .15s);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.fui-slider__tick--active{background-color:var(--fui-bg-subtle)}.fui-slider__thumb{position:absolute;width:20px;height:20px;border-radius:50%;background-color:var(--fui-bg-subtle);border:var(--fui-border-width-sm) solid var(--fui-accent-bg);transform:translate(-50%);cursor:grab;z-index:2;outline:none;transition-property:left,transform,box-shadow;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__thumb:hover{box-shadow:0 0 0 6px color-mix(in srgb,var(--fui-primary-50) 15%,transparent)}.fui-slider__thumb:focus-visible{outline:2px solid var(--fui-primary-10)}.fui-slider__tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:4px 8px;background-color:var(--fui-bg-inverse, #1e293b);color:var(--fui-text-inverse, #fff);font-family:var(--fui-font-sans);font-size:var(--fui-text-sm, .75rem);font-weight:var(--fui-weight-medium, 500);line-height:var(--fui-leading-tight);white-space:nowrap;border-radius:var(--fui-radius-sm, 4px);pointer-events:none;transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-slider__tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--fui-bg-inverse, #1e293b)}.fui-slider--dragging .fui-slider__thumb{cursor:grabbing;transform:translate(-50%) scale(1.15);box-shadow:0 0 0 8px color-mix(in srgb,var(--fui-primary-50) 20%,transparent)}.fui-slider--dragging .fui-slider__track-fill{transition:none}.fui-slider--disabled{cursor:not-allowed;opacity:var(--fui-state-disabled-opacity, .38);pointer-events:none}.fui-slider--disabled .fui-slider__thumb{cursor:not-allowed}.fui-slider--range .fui-slider__thumb--high{z-index:3}@media(prefers-contrast:high){.fui-slider__thumb{border:2px solid CanvasText}.fui-slider__track{border:1px solid CanvasText}}@media(prefers-reduced-motion:reduce){.fui-slider__thumb,.fui-slider__track-fill,.fui-slider__tooltip,.fui-slider__tick{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
343
343
  }
344
344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiSliderComponent, decorators: [{
345
345
  type: Component,
@@ -354,7 +354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
354
354
  useExisting: FuiSliderComponent,
355
355
  multi: true,
356
356
  },
357
- ], template: "<div class=\"fui-slider__container\" (click)=\"_onTrackClick($event)\" #sliderContainer>\r\n <div class=\"fui-slider__track\">\r\n <div\r\n class=\"fui-slider__track-fill\"\r\n [style.left.%]=\"range() ? _percentageLow() : 0\"\r\n [style.width.%]=\"range() ? _percentageHigh() - _percentageLow() : _percentage()\"\r\n ></div>\r\n </div>\r\n\r\n @if (showTicks()) {\r\n <div class=\"fui-slider__ticks\">\r\n @for (tick of _tickValues(); track tick) {\r\n <div\r\n class=\"fui-slider__tick\"\r\n [style.left.%]=\"_valueToPercent(tick)\"\r\n [class.fui-slider__tick--active]=\"_isTickActive(tick)\"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--low\"\r\n [style.left.%]=\"range() ? _percentageLow() : _percentage()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"range() ? _valueLow() : _value()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"range() ? _valueHigh() : max()\"\r\n [attr.aria-label]=\"range() ? (ariaLabelLow() || intl.minValueAriaLabel) : (ariaLabel() || null)\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'low')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'low')\"\r\n (keydown)=\"_onThumbKeydown($event, 'low')\"\r\n (focus)=\"_hovered.set('low')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'low' || _hovered() === 'low')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(range() ? _valueLow() : _value()) }}</div>\r\n }\r\n </div>\r\n\r\n @if (range()) {\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--high\"\r\n [style.left.%]=\"_percentageHigh()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"_valueHigh()\"\r\n [attr.aria-valuemin]=\"_valueLow()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-label]=\"ariaLabelHigh() || intl.maxValueAriaLabel\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'high')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'high')\"\r\n (keydown)=\"_onThumbKeydown($event, 'high')\"\r\n (focus)=\"_hovered.set('high')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'high' || _hovered() === 'high')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(_valueHigh()) }}</div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}.fui-slider{display:block;position:relative;width:100%;padding:10px 0;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fui-slider__container{position:relative;width:100%;height:20px;display:flex;align-items:center}.fui-slider__track{position:absolute;left:0;right:0;height:8px;border-radius:var(--fui-radius-pill, 999px);background-color:var(--fui-neutral-30, #e2e8f0);overflow:hidden}.fui-slider__track-fill{position:absolute;top:0;bottom:0;background-color:var(--fui-accent-bg);border-radius:var(--fui-radius-pill, 999px);transition-property:left,width;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__ticks{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);pointer-events:none}.fui-slider__tick{position:absolute;width:8px;height:8px;border-radius:50%;background-color:var(--fui-neutral-50, #94a3b8);transform:translate(-50%,-50%);top:50%;transition-property:background-color;transition-duration:var(--fui-duration-fast, .15s);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.fui-slider__tick--active{background-color:var(--fui-bg-subtle)}.fui-slider__thumb{position:absolute;width:20px;height:20px;border-radius:50%;background-color:var(--fui-bg-subtle);border:1px solid var(--fui-accent-bg);transform:translate(-50%);cursor:grab;z-index:2;outline:none;transition-property:left,transform,box-shadow;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__thumb:hover{box-shadow:0 0 0 6px color-mix(in srgb,var(--fui-primary-50) 15%,transparent)}.fui-slider__thumb:focus-visible{outline:2px solid var(--fui-primary-10)}.fui-slider__tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:4px 8px;background-color:var(--fui-bg-inverse, #1e293b);color:var(--fui-text-inverse, #fff);font-family:var(--fui-font-sans);font-size:var(--fui-text-sm, .75rem);font-weight:var(--fui-weight-medium, 500);line-height:1.2;white-space:nowrap;border-radius:var(--fui-radius-sm, 4px);pointer-events:none;transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-slider__tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--fui-bg-inverse, #1e293b)}.fui-slider--dragging .fui-slider__thumb{cursor:grabbing;transform:translate(-50%) scale(1.15);box-shadow:0 0 0 8px color-mix(in srgb,var(--fui-primary-50) 20%,transparent)}.fui-slider--dragging .fui-slider__track-fill{transition:none}.fui-slider--disabled{cursor:not-allowed;opacity:var(--fui-state-disabled-opacity, .38);pointer-events:none}.fui-slider--disabled .fui-slider__thumb{cursor:not-allowed}.fui-slider--range .fui-slider__thumb--high{z-index:3}@media(prefers-contrast:high){.fui-slider__thumb{border:2px solid CanvasText}.fui-slider__track{border:1px solid CanvasText}}@media(prefers-reduced-motion:reduce){.fui-slider__thumb,.fui-slider__track-fill,.fui-slider__tooltip,.fui-slider__tick{transition:none}}\n"] }]
357
+ ], template: "<div class=\"fui-slider__container\" (click)=\"_onTrackClick($event)\" #sliderContainer>\r\n <div class=\"fui-slider__track\">\r\n <div\r\n class=\"fui-slider__track-fill\"\r\n [style.left.%]=\"range() ? _percentageLow() : 0\"\r\n [style.width.%]=\"range() ? _percentageHigh() - _percentageLow() : _percentage()\"\r\n ></div>\r\n </div>\r\n\r\n @if (showTicks()) {\r\n <div class=\"fui-slider__ticks\">\r\n @for (tick of _tickValues(); track tick) {\r\n <div\r\n class=\"fui-slider__tick\"\r\n [style.left.%]=\"_valueToPercent(tick)\"\r\n [class.fui-slider__tick--active]=\"_isTickActive(tick)\"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--low\"\r\n [style.left.%]=\"range() ? _percentageLow() : _percentage()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"range() ? _valueLow() : _value()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"range() ? _valueHigh() : max()\"\r\n [attr.aria-label]=\"range() ? (ariaLabelLow() || intl.minValueAriaLabel) : (ariaLabel() || null)\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'low')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'low')\"\r\n (keydown)=\"_onThumbKeydown($event, 'low')\"\r\n (focus)=\"_hovered.set('low')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'low' || _hovered() === 'low')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(range() ? _valueLow() : _value()) }}</div>\r\n }\r\n </div>\r\n\r\n @if (range()) {\r\n <div\r\n class=\"fui-slider__thumb fui-slider__thumb--high\"\r\n [style.left.%]=\"_percentageHigh()\"\r\n role=\"slider\"\r\n [attr.aria-valuenow]=\"_valueHigh()\"\r\n [attr.aria-valuemin]=\"_valueLow()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-label]=\"ariaLabelHigh() || intl.maxValueAriaLabel\"\r\n aria-orientation=\"horizontal\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.tabindex]=\"disabled() ? -1 : 0\"\r\n (mousedown)=\"_onThumbMouseDown($event, 'high')\"\r\n (touchstart)=\"_onThumbTouchStart($event, 'high')\"\r\n (keydown)=\"_onThumbKeydown($event, 'high')\"\r\n (focus)=\"_hovered.set('high')\"\r\n (blur)=\"_hovered.set(null)\"\r\n >\r\n @if (showTooltip() && (_dragging() === 'high' || _hovered() === 'high')) {\r\n <div class=\"fui-slider__tooltip\">{{ formatLabel()(_valueHigh()) }}</div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-motion-fade-out{transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-in);transition-delay:0ms}.fui-motion-slide-in-bottom{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition-property:transform;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition-property:transform,opacity;transition-duration:var(--fui-duration-base);transition-timing-function:var(--fui-ease-out);transition-delay:0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-base) var(--fui-ease-out)}@keyframes fui-popover-enter{0%{opacity:0;transform:translateY(-14px)}60%{opacity:1}to{opacity:1;transform:translateY(0)}}.fui-slider{display:block;position:relative;width:100%;padding:10px 0;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fui-slider__container{position:relative;width:100%;height:20px;display:flex;align-items:center}.fui-slider__track{position:absolute;left:0;right:0;height:8px;border-radius:var(--fui-radius-pill, 999px);background-color:var(--fui-neutral-30, #e2e8f0);overflow:hidden}.fui-slider__track-fill{position:absolute;top:0;bottom:0;background-color:var(--fui-accent-bg);border-radius:var(--fui-radius-pill, 999px);transition-property:left,width;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__ticks{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);pointer-events:none}.fui-slider__tick{position:absolute;width:8px;height:8px;border-radius:50%;background-color:var(--fui-neutral-50, #94a3b8);transform:translate(-50%,-50%);top:50%;transition-property:background-color;transition-duration:var(--fui-duration-fast, .15s);transition-timing-function:var(--fui-ease-in-out);transition-delay:0ms}.fui-slider__tick--active{background-color:var(--fui-bg-subtle)}.fui-slider__thumb{position:absolute;width:20px;height:20px;border-radius:50%;background-color:var(--fui-bg-subtle);border:var(--fui-border-width-sm) solid var(--fui-accent-bg);transform:translate(-50%);cursor:grab;z-index:2;outline:none;transition-property:left,transform,box-shadow;transition-duration:var(--fui-duration-fast, 70ms);transition-timing-function:var(--fui-ease-in-out, cubic-bezier(.4, 0, .2, 1));transition-delay:0ms}.fui-slider__thumb:hover{box-shadow:0 0 0 6px color-mix(in srgb,var(--fui-primary-50) 15%,transparent)}.fui-slider__thumb:focus-visible{outline:2px solid var(--fui-primary-10)}.fui-slider__tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);padding:4px 8px;background-color:var(--fui-bg-inverse, #1e293b);color:var(--fui-text-inverse, #fff);font-family:var(--fui-font-sans);font-size:var(--fui-text-sm, .75rem);font-weight:var(--fui-weight-medium, 500);line-height:var(--fui-leading-tight);white-space:nowrap;border-radius:var(--fui-radius-sm, 4px);pointer-events:none;transition-property:opacity;transition-duration:var(--fui-duration-fast);transition-timing-function:var(--fui-ease-out);transition-delay:0ms}.fui-slider__tooltip:after{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--fui-bg-inverse, #1e293b)}.fui-slider--dragging .fui-slider__thumb{cursor:grabbing;transform:translate(-50%) scale(1.15);box-shadow:0 0 0 8px color-mix(in srgb,var(--fui-primary-50) 20%,transparent)}.fui-slider--dragging .fui-slider__track-fill{transition:none}.fui-slider--disabled{cursor:not-allowed;opacity:var(--fui-state-disabled-opacity, .38);pointer-events:none}.fui-slider--disabled .fui-slider__thumb{cursor:not-allowed}.fui-slider--range .fui-slider__thumb--high{z-index:3}@media(prefers-contrast:high){.fui-slider__thumb{border:2px solid CanvasText}.fui-slider__track{border:1px solid CanvasText}}@media(prefers-reduced-motion:reduce){.fui-slider__thumb,.fui-slider__track-fill,.fui-slider__tooltip,.fui-slider__tick{transition:none}}\n"] }]
358
358
  }], ctorParameters: () => [], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], range: [{ type: i0.Input, args: [{ isSignal: true, alias: "range", required: false }] }], showTicks: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTicks", required: false }] }], showTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTooltip", required: false }] }], formatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatLabel", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelLow: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelLow", required: false }] }], ariaLabelHigh: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelHigh", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], dragStart: [{ type: i0.Output, args: ["dragStart"] }], dragEnd: [{ type: i0.Output, args: ["dragEnd"] }], _sliderContainer: [{ type: i0.ViewChild, args: ['sliderContainer', { isSignal: true }] }] } });
359
359
 
360
360
  /**