@xui/breadcrumb 2.0.0-alpha.1 → 2.0.0-alpha.11

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.
@@ -1,29 +1,54 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, Component, booleanAttribute, Directive, NgModule } from '@angular/core';
2
+ import { input, computed, Directive, ChangeDetectionStrategy, Component, booleanAttribute, contentChild, TemplateRef, numberAttribute, output } from '@angular/core';
3
+ import { xui } from '@xui/core';
3
4
  import { NgIcon, provideIcons } from '@ng-icons/core';
4
5
  import { matMoreHorizRound, matChevronRightRound } from '@ng-icons/material-icons/round';
5
- import { xui } from '@xui/core';
6
- import { XuiIconDirective } from '@xui/icon';
7
- import * as i1 from '@angular/router';
6
+ import { XuiIcon } from '@xui/icon';
7
+ import { NgTemplateOutlet } from '@angular/common';
8
8
  import { RouterLink } from '@angular/router';
9
+ import { XuiOverflowList, XuiOverflowListItem, XuiOverflowListOverflow } from '@xui/overflow-list';
9
10
 
10
- class XuiBreadcrumbEllipsisComponent {
11
- class = input('');
12
- computedClass = computed(() => xui('flex items-center justify-center', this.class()));
13
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbEllipsisComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbEllipsisComponent, isStandalone: true, selector: "xui-breadcrumb-ellipsis", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideIcons({ matMoreHorizRound })], ngImport: i0, template: `
11
+ class XuiBreadcrumb {
12
+ class = input('', /* @ts-ignore */
13
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
14
+ ariaLabel = input('breadcrumb', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
15
+ computedClass = computed(() => xui(this.class()), /* @ts-ignore */
16
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
17
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumb, isStandalone: true, selector: "[xuiBreadcrumb]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, properties: { "class": "computedClass()", "attr.aria-label": "ariaLabel()" } }, ngImport: i0 });
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumb, decorators: [{
21
+ type: Directive,
22
+ args: [{
23
+ selector: '[xuiBreadcrumb]',
24
+ host: {
25
+ role: 'navigation',
26
+ '[class]': 'computedClass()',
27
+ '[attr.aria-label]': 'ariaLabel()'
28
+ }
29
+ }]
30
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
31
+
32
+ class XuiBreadcrumbEllipsis {
33
+ class = input('', /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
35
+ computedClass = computed(() => xui('flex items-center justify-center', this.class()), /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
37
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumbEllipsis, isStandalone: true, selector: "xui-breadcrumb-ellipsis", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideIcons({ matMoreHorizRound })], ngImport: i0, template: `
15
39
  <span role="presentation" aria-hidden="true" [class]="computedClass()">
16
40
  <ng-icon xui size="sm" name="matMoreHorizRound" />
17
41
  <span class="sr-only">More</span>
18
42
  </span>
19
- `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: XuiIconDirective, selector: "ng-icon[xui]", inputs: ["size"] }] });
43
+ `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: XuiIcon, selector: "ng-icon[xui]", inputs: ["class", "size", "color", "title"], exportAs: ["xuiIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
44
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbEllipsisComponent, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbEllipsis, decorators: [{
22
46
  type: Component,
23
47
  args: [{
24
48
  selector: 'xui-breadcrumb-ellipsis',
25
- imports: [NgIcon, XuiIconDirective],
49
+ imports: [NgIcon, XuiIcon],
26
50
  providers: [provideIcons({ matMoreHorizRound })],
51
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
52
  template: `
28
53
  <span role="presentation" aria-hidden="true" [class]="computedClass()">
29
54
  <ng-icon xui size="sm" name="matMoreHorizRound" />
@@ -31,16 +56,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImpor
31
56
  </span>
32
57
  `
33
58
  }]
34
- }] });
59
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
35
60
 
36
- class XuiBreadcrumbItemDirective {
37
- class = input('');
38
- active = input(false, { transform: booleanAttribute });
39
- computedClass = computed(() => xui('inline-flex items-center gap-1.5', this.active() && '[&>*]:font-semibold', this.class()));
40
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
41
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbItemDirective, isStandalone: true, selector: "[xuiBreadcrumbItem]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
61
+ class XuiBreadcrumbItem {
62
+ class = input('', /* @ts-ignore */
63
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
64
+ active = input(false, { ...(ngDevMode ? { debugName: "active" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
65
+ computedClass = computed(() => xui('inline-flex items-center gap-1.5', this.active() && '[&>*]:font-semibold', this.class()), /* @ts-ignore */
66
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
67
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
68
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumbItem, isStandalone: true, selector: "[xuiBreadcrumbItem]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
42
69
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbItemDirective, decorators: [{
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbItem, decorators: [{
44
71
  type: Directive,
45
72
  args: [{
46
73
  selector: '[xuiBreadcrumbItem]',
@@ -48,50 +75,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImpor
48
75
  '[class]': 'computedClass()'
49
76
  }
50
77
  }]
51
- }] });
78
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }] } });
52
79
 
53
- class XuiBreadcrumbLinkDirective {
54
- class = input('');
55
- link = input();
56
- computedClass = computed(() => xui('transition-colors hover:text-foreground', this.class()));
57
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
58
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbLinkDirective, isStandalone: true, selector: "[xuiBreadcrumbLink]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, hostDirectives: [{ directive: i1.RouterLink, inputs: ["target", "target", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo", "preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl", "routerLink", "link"] }], ngImport: i0 });
80
+ /**
81
+ * A navigable crumb.
82
+ *
83
+ * ```html
84
+ * <a xuiBreadcrumbLink href="/projects">Projects</a>
85
+ * <a xuiBreadcrumbLink [routerLink]="['/projects']">Projects</a>
86
+ * ```
87
+ *
88
+ * This is styling and disabled semantics only — it deliberately does not
89
+ * compose `RouterLink`. Doing so made every breadcrumb fail to render without a
90
+ * `Router` in the injector, routed or not, because host directives are
91
+ * instantiated unconditionally. Applying `routerLink` alongside it costs the
92
+ * consumer nothing and keeps `@angular/router` optional.
93
+ */
94
+ class XuiBreadcrumbLink {
95
+ /** The user-defined classes. Merged last so they win over the base classes. */
96
+ class = input('', /* @ts-ignore */
97
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
98
+ /** Renders the crumb as unreachable without dropping it from the trail. */
99
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
100
+ computedClass = computed(() => xui('hover:text-foreground rounded-sm transition-colors focus-visible:outline-5 focus-visible:outline-offset-2', this.disabled() && 'text-foreground-muted pointer-events-none opacity-60 hover:text-inherit', this.class()), /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
102
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbLink, deps: [], target: i0.ɵɵFactoryTarget.Directive });
103
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumbLink, isStandalone: true, selector: "[xuiBreadcrumbLink]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()", "attr.aria-disabled": "disabled() || null", "attr.tabindex": "disabled() ? -1 : null" } }, ngImport: i0 });
59
104
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbLinkDirective, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbLink, decorators: [{
61
106
  type: Directive,
62
107
  args: [{
63
108
  selector: '[xuiBreadcrumbLink]',
64
- hostDirectives: [
65
- {
66
- directive: RouterLink,
67
- inputs: [
68
- 'target',
69
- 'queryParams',
70
- 'fragment',
71
- 'queryParamsHandling',
72
- 'state',
73
- 'info',
74
- 'relativeTo',
75
- 'preserveFragment',
76
- 'skipLocationChange',
77
- 'replaceUrl',
78
- 'routerLink: link'
79
- ]
80
- }
81
- ],
82
109
  host: {
83
- '[class]': 'computedClass()'
110
+ '[class]': 'computedClass()',
111
+ '[attr.aria-disabled]': 'disabled() || null',
112
+ '[attr.tabindex]': 'disabled() ? -1 : null'
84
113
  }
85
114
  }]
86
- }] });
115
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
87
116
 
88
- class XuiBreadcrumbListDirective {
89
- class = input('');
90
- computedClass = computed(() => xui('flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5', this.class()));
91
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
92
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbListDirective, isStandalone: true, selector: "[xuiBreadcrumbList]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
117
+ class XuiBreadcrumbList {
118
+ class = input('', /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
120
+ computedClass = computed(() => xui('flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5', this.class()), /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
122
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
123
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumbList, isStandalone: true, selector: "[xuiBreadcrumbList]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
93
124
  }
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbListDirective, decorators: [{
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbList, decorators: [{
95
126
  type: Directive,
96
127
  args: [{
97
128
  selector: '[xuiBreadcrumbList]',
@@ -99,115 +130,351 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImpor
99
130
  '[class]': 'computedClass()'
100
131
  }
101
132
  }]
102
- }] });
133
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
103
134
 
104
- class XuiBreadcrumbPageDirective {
105
- class = input('');
106
- computedClass = computed(() => xui('font-normal text-foreground', this.class()));
107
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbPageDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
108
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbPageDirective, isStandalone: true, selector: "[xuiBreadcrumbPage]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "link" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
135
+ class XuiBreadcrumbPage {
136
+ class = input('', /* @ts-ignore */
137
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
138
+ computedClass = computed(() => xui('font-normal text-foreground', this.class()), /* @ts-ignore */
139
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
140
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbPage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
141
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumbPage, isStandalone: true, selector: "[xuiBreadcrumbPage]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "link", "aria-disabled": "true", "aria-current": "page" }, properties: { "class": "computedClass()" } }, ngImport: i0 });
109
142
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbPageDirective, decorators: [{
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbPage, decorators: [{
111
144
  type: Directive,
112
145
  args: [{
113
146
  selector: '[xuiBreadcrumbPage]',
114
147
  host: {
115
148
  role: 'link',
149
+ 'aria-disabled': 'true',
150
+ 'aria-current': 'page',
116
151
  '[class]': 'computedClass()'
117
- // TODO
118
- // '[attr.aria-disabled]': 'disabled',
119
- // '[attr.aria-current]': 'page',
120
152
  }
121
153
  }]
122
- }] });
154
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
123
155
 
124
- class XuiBreadcrumbSeparatorComponent {
125
- class = input('');
126
- computedClass = computed(() => xui('flex items-center justify-center [&>ng-icon]:w-3.5 [&>ng-icon]:h-3.5 [&>ng-icon]:flex', this.class()));
127
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
128
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbSeparatorComponent, isStandalone: true, selector: "[xuiBreadcrumbSeparator]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, properties: { "class": "computedClass()", "attr.aria-hidden": "true" } }, providers: [provideIcons({ matChevronRightRound })], ngImport: i0, template: `
156
+ class XuiBreadcrumbSeparator {
157
+ class = input('', /* @ts-ignore */
158
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
159
+ computedClass = computed(() => xui('flex items-center justify-center [&>ng-icon]:text-[14px] [&>ng-icon]:flex!', this.class()), /* @ts-ignore */
160
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
161
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
162
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: XuiBreadcrumbSeparator, isStandalone: true, selector: "[xuiBreadcrumbSeparator]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation", "aria-hidden": "true" }, properties: { "class": "computedClass()" } }, providers: [provideIcons({ matChevronRightRound })], ngImport: i0, template: `
129
163
  <ng-content>
130
- <ng-icon size="sm" xui name="matChevronRightRound" />
164
+ <ng-icon name="matChevronRightRound" />
131
165
  </ng-content>
132
- `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: XuiIconDirective, selector: "ng-icon[xui]", inputs: ["size"] }] });
166
+ `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
133
167
  }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbSeparatorComponent, decorators: [{
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbSeparator, decorators: [{
135
169
  type: Component,
136
170
  args: [{
137
171
  // eslint-disable-next-line @angular-eslint/component-selector
138
172
  selector: '[xuiBreadcrumbSeparator]',
139
- imports: [NgIcon, XuiIconDirective],
173
+ imports: [NgIcon],
140
174
  providers: [provideIcons({ matChevronRightRound })],
175
+ changeDetection: ChangeDetectionStrategy.OnPush,
141
176
  host: {
142
177
  role: 'presentation',
143
- '[class]': 'computedClass()',
144
- '[attr.aria-hidden]': 'true'
178
+ 'aria-hidden': 'true',
179
+ '[class]': 'computedClass()'
145
180
  },
146
181
  template: `
147
182
  <ng-content>
148
- <ng-icon size="sm" xui name="matChevronRightRound" />
183
+ <ng-icon name="matChevronRightRound" />
149
184
  </ng-content>
150
185
  `
151
186
  }]
152
- }] });
187
+ }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
153
188
 
154
- class XuiBreadcrumbDirective {
155
- class = input('');
156
- ariaLabel = input('breadcrumb', { alias: 'aria-label' });
157
- computedClass = computed(() => xui('', this.class()));
158
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
159
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: XuiBreadcrumbDirective, isStandalone: true, selector: "[xuiBreadcrumb]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, properties: { "class": "computedClass()", "attr.aria-label": "ariaLabel()" } }, ngImport: i0 });
189
+ /** Replaces the default rendering of every crumb. */
190
+ class XuiBreadcrumbsItem {
191
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
192
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: XuiBreadcrumbsItem, isStandalone: true, selector: "ng-template[xuiBreadcrumbsItem]", ngImport: i0 });
160
193
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbDirective, decorators: [{
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsItem, decorators: [{
162
195
  type: Directive,
196
+ args: [{ selector: 'ng-template[xuiBreadcrumbsItem]' }]
197
+ }] });
198
+ /** Replaces the default rendering of the current crumb only. */
199
+ class XuiBreadcrumbsCurrent {
200
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsCurrent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
201
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: XuiBreadcrumbsCurrent, isStandalone: true, selector: "ng-template[xuiBreadcrumbsCurrent]", ngImport: i0 });
202
+ }
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsCurrent, decorators: [{
204
+ type: Directive,
205
+ args: [{ selector: 'ng-template[xuiBreadcrumbsCurrent]' }]
206
+ }] });
207
+ /** Replaces the ellipsis shown in place of the collapsed crumbs. */
208
+ class XuiBreadcrumbsOverflow {
209
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsOverflow, deps: [], target: i0.ɵɵFactoryTarget.Directive });
210
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: XuiBreadcrumbsOverflow, isStandalone: true, selector: "ng-template[xuiBreadcrumbsOverflow]", ngImport: i0 });
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsOverflow, decorators: [{
213
+ type: Directive,
214
+ args: [{ selector: 'ng-template[xuiBreadcrumbsOverflow]' }]
215
+ }] });
216
+ /**
217
+ * A breadcrumb trail built from an array, collapsing to fit its container.
218
+ *
219
+ * ```html
220
+ * <xui-breadcrumbs [items]="crumbs()" (itemClick)="open($event)" />
221
+ * ```
222
+ *
223
+ * This is the assembled form of the breadcrumb parts, wired to
224
+ * `xui-overflow-list` so crumbs that do not fit fold into an ellipsis. Compose
225
+ * the parts directly when the markup has to differ; reach for this when the
226
+ * trail is data.
227
+ *
228
+ * The collapsed crumbs are handed to the overflow template, so a menu can be
229
+ * hung off the ellipsis. Without one they are not lost — the template receives
230
+ * them and `(overflow)` reports them.
231
+ *
232
+ * An `icon` names an `@ng-icons` icon that the application registers; this
233
+ * package cannot know the set in advance.
234
+ */
235
+ class XuiBreadcrumbs {
236
+ itemTemplate = contentChild(XuiBreadcrumbsItem, { ...(ngDevMode ? { debugName: "itemTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef });
237
+ currentTemplate = contentChild(XuiBreadcrumbsCurrent, { ...(ngDevMode ? { debugName: "currentTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef });
238
+ overflowTemplate = contentChild(XuiBreadcrumbsOverflow, { ...(ngDevMode ? { debugName: "overflowTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef });
239
+ /** The user-defined classes. Merged last so they win over the base classes. */
240
+ class = input('', /* @ts-ignore */
241
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
242
+ items = input.required(/* @ts-ignore */
243
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
244
+ /** Which end collapses. A trail collapses from the start, keeping where you are. */
245
+ collapseFrom = input('start', /* @ts-ignore */
246
+ ...(ngDevMode ? [{ debugName: "collapseFrom" }] : /* istanbul ignore next */ []));
247
+ /** Never collapse below this many crumbs, however narrow the container gets. */
248
+ minVisibleItems = input(0, { ...(ngDevMode ? { debugName: "minVisibleItems" } : /* istanbul ignore next */ {}), transform: numberAttribute });
249
+ /** Emits the collapsed crumbs whenever the set changes. */
250
+ overflow = output();
251
+ /** Emits when a navigable crumb is activated. A crumb with neither `href` nor `link` is not. */
252
+ itemClick = output();
253
+ computedClass = computed(() => xui('block min-w-0', this.class()), /* @ts-ignore */
254
+ ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
255
+ /** The last crumb is where you are, unless an item says otherwise. */
256
+ isCurrent(index) {
257
+ return this.items()[index]?.current ?? index === this.items().length - 1;
258
+ }
259
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbs, deps: [], target: i0.ɵɵFactoryTarget.Component });
260
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: XuiBreadcrumbs, isStandalone: true, selector: "xui-breadcrumbs", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, collapseFrom: { classPropertyName: "collapseFrom", publicName: "collapseFrom", isSignal: true, isRequired: false, transformFunction: null }, minVisibleItems: { classPropertyName: "minVisibleItems", publicName: "minVisibleItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overflow: "overflow", itemClick: "itemClick" }, host: { properties: { "class": "computedClass()" } }, queries: [{ propertyName: "itemTemplate", first: true, predicate: XuiBreadcrumbsItem, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "currentTemplate", first: true, predicate: XuiBreadcrumbsCurrent, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "overflowTemplate", first: true, predicate: XuiBreadcrumbsOverflow, descendants: true, read: TemplateRef, isSignal: true }], hostDirectives: [{ directive: XuiBreadcrumb, inputs: ["aria-label", "aria-label"] }], ngImport: i0, template: `
261
+ <xui-overflow-list
262
+ role="list"
263
+ itemRole="listitem"
264
+ class="text-foreground-muted gap-1.5 text-sm"
265
+ [items]="items()"
266
+ [collapseFrom]="collapseFrom()"
267
+ [minVisibleItems]="minVisibleItems()"
268
+ (overflow)="overflow.emit($event)"
269
+ >
270
+ <ng-template xuiOverflowListItem let-item let-index="index">
271
+ <span xuiBreadcrumbItem class="whitespace-nowrap">
272
+ @if (index > 0) {
273
+ <span xuiBreadcrumbSeparator></span>
274
+ }
275
+ <ng-container
276
+ *ngTemplateOutlet="
277
+ isCurrent(index)
278
+ ? (currentTemplate() ?? itemTemplate() ?? defaultCurrent)
279
+ : (itemTemplate() ?? defaultCrumb);
280
+ context: { $implicit: item, index: index, current: isCurrent(index) }
281
+ "
282
+ />
283
+ </span>
284
+ </ng-template>
285
+
286
+ <ng-template xuiOverflowListOverflow let-hidden let-count="count">
287
+ <span xuiBreadcrumbItem class="whitespace-nowrap">
288
+ @if (collapseFrom() === 'end') {
289
+ <span xuiBreadcrumbSeparator></span>
290
+ }
291
+ <ng-container
292
+ *ngTemplateOutlet="overflowTemplate() ?? defaultOverflow; context: { $implicit: hidden, count: count }"
293
+ />
294
+ </span>
295
+ </ng-template>
296
+ </xui-overflow-list>
297
+
298
+ <ng-template #defaultOverflow>
299
+ <xui-breadcrumb-ellipsis />
300
+ </ng-template>
301
+
302
+ <ng-template #defaultCurrent let-item>
303
+ <span xuiBreadcrumbPage class="inline-flex items-center gap-1.5">
304
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
305
+ </span>
306
+ </ng-template>
307
+
308
+ <ng-template #defaultCrumb let-item>
309
+ @if (item.link) {
310
+ <a
311
+ xuiBreadcrumbLink
312
+ class="inline-flex items-center gap-1.5"
313
+ [routerLink]="item.link"
314
+ [attr.target]="item.target"
315
+ [disabled]="item.disabled"
316
+ (click)="itemClick.emit(item)"
317
+ >
318
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
319
+ </a>
320
+ } @else if (item.href) {
321
+ <a
322
+ xuiBreadcrumbLink
323
+ class="inline-flex items-center gap-1.5"
324
+ [href]="item.href"
325
+ [attr.target]="item.target"
326
+ [disabled]="item.disabled"
327
+ (click)="itemClick.emit(item)"
328
+ >
329
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
330
+ </a>
331
+ } @else {
332
+ <span xuiBreadcrumbLink class="inline-flex items-center gap-1.5" [disabled]="item.disabled">
333
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
334
+ </span>
335
+ }
336
+ </ng-template>
337
+
338
+ <ng-template #crumbBody let-item>
339
+ @if (item.icon) {
340
+ <ng-icon xui size="sm" class="shrink-0" [name]="item.icon" />
341
+ }
342
+ @if (item.text) {
343
+ <span class="truncate">{{ item.text }}</span>
344
+ }
345
+ </ng-template>
346
+ `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: XuiBreadcrumbEllipsis, selector: "xui-breadcrumb-ellipsis", inputs: ["class"] }, { kind: "directive", type: XuiBreadcrumbItem, selector: "[xuiBreadcrumbItem]", inputs: ["class", "active"] }, { kind: "directive", type: XuiBreadcrumbLink, selector: "[xuiBreadcrumbLink]", inputs: ["class", "disabled"] }, { kind: "directive", type: XuiBreadcrumbPage, selector: "[xuiBreadcrumbPage]", inputs: ["class"] }, { kind: "component", type: XuiBreadcrumbSeparator, selector: "[xuiBreadcrumbSeparator]", inputs: ["class"] }, { kind: "directive", type: XuiIcon, selector: "ng-icon[xui]", inputs: ["class", "size", "color", "title"], exportAs: ["xuiIcon"] }, { kind: "component", type: XuiOverflowList, selector: "xui-overflow-list", inputs: ["class", "items", "collapseFrom", "minVisibleItems", "alwaysRenderOverflow", "itemRole"], outputs: ["overflow"] }, { kind: "directive", type: XuiOverflowListItem, selector: "ng-template[xuiOverflowListItem]" }, { kind: "directive", type: XuiOverflowListOverflow, selector: "ng-template[xuiOverflowListOverflow]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
347
+ }
348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbs, decorators: [{
349
+ type: Component,
163
350
  args: [{
164
- selector: '[xuiBreadcrumb]',
351
+ selector: 'xui-breadcrumbs',
352
+ imports: [
353
+ NgIcon,
354
+ NgTemplateOutlet,
355
+ RouterLink,
356
+ XuiBreadcrumbEllipsis,
357
+ XuiBreadcrumbItem,
358
+ XuiBreadcrumbLink,
359
+ XuiBreadcrumbPage,
360
+ XuiBreadcrumbSeparator,
361
+ XuiIcon,
362
+ XuiOverflowList,
363
+ XuiOverflowListItem,
364
+ XuiOverflowListOverflow
365
+ ],
366
+ hostDirectives: [{ directive: XuiBreadcrumb, inputs: ['aria-label'] }],
367
+ changeDetection: ChangeDetectionStrategy.OnPush,
368
+ template: `
369
+ <xui-overflow-list
370
+ role="list"
371
+ itemRole="listitem"
372
+ class="text-foreground-muted gap-1.5 text-sm"
373
+ [items]="items()"
374
+ [collapseFrom]="collapseFrom()"
375
+ [minVisibleItems]="minVisibleItems()"
376
+ (overflow)="overflow.emit($event)"
377
+ >
378
+ <ng-template xuiOverflowListItem let-item let-index="index">
379
+ <span xuiBreadcrumbItem class="whitespace-nowrap">
380
+ @if (index > 0) {
381
+ <span xuiBreadcrumbSeparator></span>
382
+ }
383
+ <ng-container
384
+ *ngTemplateOutlet="
385
+ isCurrent(index)
386
+ ? (currentTemplate() ?? itemTemplate() ?? defaultCurrent)
387
+ : (itemTemplate() ?? defaultCrumb);
388
+ context: { $implicit: item, index: index, current: isCurrent(index) }
389
+ "
390
+ />
391
+ </span>
392
+ </ng-template>
393
+
394
+ <ng-template xuiOverflowListOverflow let-hidden let-count="count">
395
+ <span xuiBreadcrumbItem class="whitespace-nowrap">
396
+ @if (collapseFrom() === 'end') {
397
+ <span xuiBreadcrumbSeparator></span>
398
+ }
399
+ <ng-container
400
+ *ngTemplateOutlet="overflowTemplate() ?? defaultOverflow; context: { $implicit: hidden, count: count }"
401
+ />
402
+ </span>
403
+ </ng-template>
404
+ </xui-overflow-list>
405
+
406
+ <ng-template #defaultOverflow>
407
+ <xui-breadcrumb-ellipsis />
408
+ </ng-template>
409
+
410
+ <ng-template #defaultCurrent let-item>
411
+ <span xuiBreadcrumbPage class="inline-flex items-center gap-1.5">
412
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
413
+ </span>
414
+ </ng-template>
415
+
416
+ <ng-template #defaultCrumb let-item>
417
+ @if (item.link) {
418
+ <a
419
+ xuiBreadcrumbLink
420
+ class="inline-flex items-center gap-1.5"
421
+ [routerLink]="item.link"
422
+ [attr.target]="item.target"
423
+ [disabled]="item.disabled"
424
+ (click)="itemClick.emit(item)"
425
+ >
426
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
427
+ </a>
428
+ } @else if (item.href) {
429
+ <a
430
+ xuiBreadcrumbLink
431
+ class="inline-flex items-center gap-1.5"
432
+ [href]="item.href"
433
+ [attr.target]="item.target"
434
+ [disabled]="item.disabled"
435
+ (click)="itemClick.emit(item)"
436
+ >
437
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
438
+ </a>
439
+ } @else {
440
+ <span xuiBreadcrumbLink class="inline-flex items-center gap-1.5" [disabled]="item.disabled">
441
+ <ng-container *ngTemplateOutlet="crumbBody; context: { $implicit: item }" />
442
+ </span>
443
+ }
444
+ </ng-template>
445
+
446
+ <ng-template #crumbBody let-item>
447
+ @if (item.icon) {
448
+ <ng-icon xui size="sm" class="shrink-0" [name]="item.icon" />
449
+ }
450
+ @if (item.text) {
451
+ <span class="truncate">{{ item.text }}</span>
452
+ }
453
+ </ng-template>
454
+ `,
165
455
  host: {
166
- role: 'navigation',
167
- '[class]': 'computedClass()',
168
- '[attr.aria-label]': 'ariaLabel()'
456
+ '[class]': 'computedClass()'
169
457
  }
170
458
  }]
171
- }] });
459
+ }], propDecorators: { itemTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => XuiBreadcrumbsItem), { ...{ read: TemplateRef }, isSignal: true }] }], currentTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => XuiBreadcrumbsCurrent), { ...{ read: TemplateRef }, isSignal: true }] }], overflowTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => XuiBreadcrumbsOverflow), { ...{ read: TemplateRef }, isSignal: true }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], collapseFrom: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseFrom", required: false }] }], minVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "minVisibleItems", required: false }] }], overflow: [{ type: i0.Output, args: ["overflow"] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
172
460
 
173
461
  const XuiBreadcrumbImports = [
174
- XuiBreadcrumbDirective,
175
- XuiBreadcrumbEllipsisComponent,
176
- XuiBreadcrumbItemDirective,
177
- XuiBreadcrumbLinkDirective,
178
- XuiBreadcrumbListDirective,
179
- XuiBreadcrumbPageDirective,
180
- XuiBreadcrumbSeparatorComponent
462
+ XuiBreadcrumb,
463
+ XuiBreadcrumbEllipsis,
464
+ XuiBreadcrumbItem,
465
+ XuiBreadcrumbLink,
466
+ XuiBreadcrumbList,
467
+ XuiBreadcrumbPage,
468
+ XuiBreadcrumbSeparator,
469
+ XuiBreadcrumbs,
470
+ XuiBreadcrumbsCurrent,
471
+ XuiBreadcrumbsItem,
472
+ XuiBreadcrumbsOverflow
181
473
  ];
182
- class XuiBreadcrumbModule {
183
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
184
- /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbModule, imports: [XuiBreadcrumbDirective,
185
- XuiBreadcrumbEllipsisComponent,
186
- XuiBreadcrumbItemDirective,
187
- XuiBreadcrumbLinkDirective,
188
- XuiBreadcrumbListDirective,
189
- XuiBreadcrumbPageDirective,
190
- XuiBreadcrumbSeparatorComponent], exports: [XuiBreadcrumbDirective,
191
- XuiBreadcrumbEllipsisComponent,
192
- XuiBreadcrumbItemDirective,
193
- XuiBreadcrumbLinkDirective,
194
- XuiBreadcrumbListDirective,
195
- XuiBreadcrumbPageDirective,
196
- XuiBreadcrumbSeparatorComponent] });
197
- /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbModule, imports: [XuiBreadcrumbEllipsisComponent,
198
- XuiBreadcrumbSeparatorComponent] });
199
- }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: XuiBreadcrumbModule, decorators: [{
201
- type: NgModule,
202
- args: [{
203
- imports: [...XuiBreadcrumbImports],
204
- exports: [...XuiBreadcrumbImports]
205
- }]
206
- }] });
207
474
 
208
475
  /**
209
476
  * Generated bundle index. Do not edit.
210
477
  */
211
478
 
212
- export { XuiBreadcrumbDirective, XuiBreadcrumbEllipsisComponent, XuiBreadcrumbImports, XuiBreadcrumbItemDirective, XuiBreadcrumbLinkDirective, XuiBreadcrumbListDirective, XuiBreadcrumbModule, XuiBreadcrumbPageDirective, XuiBreadcrumbSeparatorComponent };
479
+ export { XuiBreadcrumb, XuiBreadcrumbEllipsis, XuiBreadcrumbImports, XuiBreadcrumbItem, XuiBreadcrumbLink, XuiBreadcrumbList, XuiBreadcrumbPage, XuiBreadcrumbSeparator, XuiBreadcrumbs, XuiBreadcrumbsCurrent, XuiBreadcrumbsItem, XuiBreadcrumbsOverflow };
213
480
  //# sourceMappingURL=xui-breadcrumb.mjs.map