@xui/breadcrumb 2.0.0-alpha.11 → 2.0.0-alpha.13
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.
- package/README.md +142 -156
- package/fesm2022/xui-breadcrumb.mjs +27 -19
- package/fesm2022/xui-breadcrumb.mjs.map +1 -1
- package/package.json +4 -4
- package/types/xui-breadcrumb.d.ts +9 -9
package/README.md
CHANGED
|
@@ -1,89 +1,103 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
1
|
+
<h1 align="center">xUI</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<strong>90 Angular components, one npm package each, themed from a single token layer.</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://xuijs.org">Documentation</a> ·
|
|
9
|
+
<a href="https://develop--67d2b4c756077a325913e5d9.chromatic.com/?globals=theme:dark">Storybook</a> ·
|
|
10
|
+
<a href="https://stackblitz.com/fork/xui">StackBlitz</a> ·
|
|
11
|
+
<a href="#components">Components</a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://github.com/rikarin/xui/actions/workflows/release.yml"><img src="https://github.com/rikarin/xui/actions/workflows/release.yml/badge.svg?branch=master" alt="Build status" /></a>
|
|
16
|
+
<a href="https://www.npmjs.com/package/@xui/core"><img src="https://img.shields.io/npm/v/%40xui/core.svg" alt="npm version" /></a>
|
|
17
|
+
<a href="https://www.npmjs.com/org/xui"><img src="https://img.shields.io/npm/dm/%40xui/core.svg" alt="Downloads" /></a>
|
|
18
|
+
<a href="https://app.netlify.com/sites/xui/deploys"><img src="https://api.netlify.com/api/v1/badges/fa0cfd14-97df-47fa-8a7c-152e6d4cfda2/deploy-status" alt="Netlify status" /></a>
|
|
3
19
|
</p>
|
|
4
20
|
|
|
5
21
|
---
|
|
6
22
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
[](https://app.netlify.com/sites/xui/deploys)
|
|
23
|
+
xUI is an Angular 22 component library styled with Tailwind CSS 4. You compose it from directives and
|
|
24
|
+
standalone components rather than configuring one monolith, and the set goes well past the
|
|
25
|
+
primitives: data tables, dock managers, omnibars, node graphs and date ranges are packages here, not
|
|
26
|
+
things you are left to build.
|
|
12
27
|
|
|
13
|
-
|
|
28
|
+
```ts
|
|
29
|
+
import { XuiButtonImports } from '@xui/button';
|
|
30
|
+
|
|
31
|
+
@Component({
|
|
32
|
+
imports: [XuiButtonImports],
|
|
33
|
+
template: `<button xuiButton color="primary">Save changes</button>`
|
|
34
|
+
})
|
|
35
|
+
export class Example {}
|
|
36
|
+
```
|
|
14
37
|
|
|
15
38
|
## Features
|
|
16
39
|
|
|
17
|
-
- **
|
|
18
|
-
|
|
19
|
-
- **
|
|
20
|
-
|
|
21
|
-
- **
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
| Spinner | [](https://www.npmjs.com/package/%40xui/spinner)<br />[](https://www.npmjs.com/package/%40xui/spinner)<br />[](https://bundlephobia.com/result?p=%40xui/spinner) | Spinner component |
|
|
53
|
-
| Status | [](https://www.npmjs.com/package/%40xui/status)<br />[](https://www.npmjs.com/package/%40xui/status)<br />[](https://bundlephobia.com/result?p=%40xui/status) | Status component |
|
|
54
|
-
| Table | [](https://www.npmjs.com/package/%40xui/table)<br />[](https://www.npmjs.com/package/%40xui/table)<br />[](https://bundlephobia.com/result?p=%40xui/table) | Table component |
|
|
55
|
-
|
|
56
|
-
## Installation
|
|
57
|
-
|
|
58
|
-
Install package with **PNPM**
|
|
40
|
+
- **One package per component.** Install `@xui/button` and you ship a button, not a library. Each
|
|
41
|
+
package exports an imports barrel for standalone components.
|
|
42
|
+
- **Signals throughout.** Signal inputs, `OnPush` and zoneless change detection; no `zone.js`
|
|
43
|
+
required.
|
|
44
|
+
- **Themed by tokens, not overrides.** Components style themselves with `bg-surface`,
|
|
45
|
+
`text-foreground-muted`, `border-error-muted`. Light and dark both work without a single `dark:`
|
|
46
|
+
class, and re-colouring an intent is one CSS variable.
|
|
47
|
+
- **Typed variants.** Every visual axis is a typed input backed by
|
|
48
|
+
[CVA](https://cva.style), and the `class` input merges through `tailwind-merge` — your utility
|
|
49
|
+
wins instead of fighting the component's.
|
|
50
|
+
- **Angular CDK underneath.** Overlays, focus traps, roving tabindex, typeahead, drag and drop and
|
|
51
|
+
bidi come from `@angular/cdk`, so keyboard behaviour and RTL are not reimplemented per component.
|
|
52
|
+
- **Built for coding agents.** An MCP server and an agent skill expose the real API of every
|
|
53
|
+
package — see [AI coding agents](#ai-coding-agents).
|
|
54
|
+
|
|
55
|
+
## Requirements
|
|
56
|
+
|
|
57
|
+
| | |
|
|
58
|
+
| ----------------------- | --- |
|
|
59
|
+
| Angular | 22 |
|
|
60
|
+
| Tailwind CSS | 4 |
|
|
61
|
+
| Node (development only) | 24 |
|
|
62
|
+
|
|
63
|
+
## Getting started
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
ng add @xui/core
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
That installs the core package and wires your global stylesheet: the theme import, the CDK overlay
|
|
70
|
+
stylesheet, and a `@source` glob pointing at the published packages. It is idempotent, so running it
|
|
71
|
+
again only adds what is missing. Use `nx add @xui/core` in an Nx workspace, and `--skip-overlay` if
|
|
72
|
+
you will not use dialogs, drawers, popovers, tooltips, menus or toasts.
|
|
73
|
+
|
|
74
|
+
Then add the components you need:
|
|
59
75
|
|
|
60
76
|
```bash
|
|
61
|
-
pnpm
|
|
77
|
+
pnpm add @xui/button @xui/dialog @xui/icon
|
|
62
78
|
```
|
|
63
79
|
|
|
64
80
|
## Theming
|
|
65
81
|
|
|
66
|
-
|
|
67
|
-
`text-foreground-muted`, `border-error-muted` — that resolve through the token layer shipped with
|
|
68
|
-
`@xui/core`. Import it once, after Tailwind:
|
|
82
|
+
To wire the styles by hand, import the token layer once after Tailwind:
|
|
69
83
|
|
|
70
84
|
```css
|
|
71
85
|
@import 'tailwindcss';
|
|
72
86
|
@import '@xui/core/styles/theme.css';
|
|
73
87
|
|
|
74
|
-
/* Only needed
|
|
75
|
-
|
|
88
|
+
/* Only needed for an overlay surface — popover, tooltip, menu, dialog, drawer
|
|
89
|
+
or toast. Without it, overlays render in the document flow. */
|
|
76
90
|
@import '@angular/cdk/overlay-prebuilt.css';
|
|
77
91
|
|
|
78
|
-
/*
|
|
92
|
+
/* Tailwind only emits utilities it can see, and it cannot see node_modules by default. */
|
|
79
93
|
@source '../node_modules/@xui';
|
|
80
94
|
```
|
|
81
95
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
96
|
+
Put `.dark` (or `[data-theme='dark']`) on `<html>` to switch themes; with neither present the theme
|
|
97
|
+
follows `prefers-color-scheme`. Both selectors work on any element, so a subtree can render in the
|
|
98
|
+
opposite theme.
|
|
85
99
|
|
|
86
|
-
Re-theme by overriding tokens after the import
|
|
100
|
+
Re-theme by overriding tokens after the import. The `darker` / `lighter` / `subtle` / `muted` /
|
|
87
101
|
`emphasis` steps of each intent are derived, so one declaration re-colours the whole ramp:
|
|
88
102
|
|
|
89
103
|
```css
|
|
@@ -93,37 +107,48 @@ Re-theme by overriding tokens after the import — the `darker` / `lighter` / `s
|
|
|
93
107
|
}
|
|
94
108
|
```
|
|
95
109
|
|
|
96
|
-
|
|
97
|
-
|
|
110
|
+
Controls share one density scale — 24 / 30 / 40px for `sm` / default / `lg` — so a button, an input
|
|
111
|
+
and a date field on the same row line up. Override `--control-height-md` to re-tune the library.
|
|
98
112
|
|
|
99
|
-
|
|
113
|
+
The full token reference, rendered in both themes, is the **Design tokens** page in Storybook.
|
|
100
114
|
|
|
101
|
-
|
|
115
|
+
## Components
|
|
102
116
|
|
|
103
|
-
|
|
117
|
+
<details>
|
|
118
|
+
<summary><strong>All 90 packages</strong>, grouped as they appear in Storybook</summary>
|
|
104
119
|
|
|
105
|
-
|
|
120
|
+
<br />
|
|
106
121
|
|
|
107
|
-
|
|
122
|
+
**Foundations** — [`@xui/icon`](https://www.npmjs.com/package/@xui/icon) · [`@xui/link`](https://www.npmjs.com/package/@xui/link) · [`@xui/text`](https://www.npmjs.com/package/@xui/text)
|
|
108
123
|
|
|
109
|
-
|
|
110
|
-
pnpm start
|
|
111
|
-
```
|
|
124
|
+
**Actions** — [`@xui/button`](https://www.npmjs.com/package/@xui/button) · [`@xui/button-group`](https://www.npmjs.com/package/@xui/button-group) · [`@xui/hotkeys`](https://www.npmjs.com/package/@xui/hotkeys)
|
|
112
125
|
|
|
113
|
-
|
|
126
|
+
**Forms** — [`@xui/cascader`](https://www.npmjs.com/package/@xui/cascader) · [`@xui/checkbox`](https://www.npmjs.com/package/@xui/checkbox) · [`@xui/color-picker`](https://www.npmjs.com/package/@xui/color-picker) · [`@xui/control-card`](https://www.npmjs.com/package/@xui/control-card) · [`@xui/control-group`](https://www.npmjs.com/package/@xui/control-group) · [`@xui/editable-text`](https://www.npmjs.com/package/@xui/editable-text) · [`@xui/file-input`](https://www.npmjs.com/package/@xui/file-input) · [`@xui/form-field`](https://www.npmjs.com/package/@xui/form-field) · [`@xui/html-select`](https://www.npmjs.com/package/@xui/html-select) · [`@xui/input`](https://www.npmjs.com/package/@xui/input) · [`@xui/input-otp`](https://www.npmjs.com/package/@xui/input-otp) · [`@xui/label`](https://www.npmjs.com/package/@xui/label) · [`@xui/multi-select`](https://www.npmjs.com/package/@xui/multi-select) · [`@xui/numeric-input`](https://www.npmjs.com/package/@xui/numeric-input) · [`@xui/radio`](https://www.npmjs.com/package/@xui/radio) · [`@xui/rate`](https://www.npmjs.com/package/@xui/rate) · [`@xui/rich-text-editor`](https://www.npmjs.com/package/@xui/rich-text-editor) · [`@xui/segmented-control`](https://www.npmjs.com/package/@xui/segmented-control) · [`@xui/select`](https://www.npmjs.com/package/@xui/select) · [`@xui/slider`](https://www.npmjs.com/package/@xui/slider) · [`@xui/suggest`](https://www.npmjs.com/package/@xui/suggest) · [`@xui/switch`](https://www.npmjs.com/package/@xui/switch) · [`@xui/tag-input`](https://www.npmjs.com/package/@xui/tag-input) · [`@xui/textarea`](https://www.npmjs.com/package/@xui/textarea) · [`@xui/transfer`](https://www.npmjs.com/package/@xui/transfer) · [`@xui/tree-select`](https://www.npmjs.com/package/@xui/tree-select) · [`@xui/upload`](https://www.npmjs.com/package/@xui/upload)
|
|
114
127
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
128
|
+
**Date & time** — [`@xui/date-input`](https://www.npmjs.com/package/@xui/date-input) · [`@xui/date-picker`](https://www.npmjs.com/package/@xui/date-picker) · [`@xui/date-range-input`](https://www.npmjs.com/package/@xui/date-range-input) · [`@xui/date-range-picker`](https://www.npmjs.com/package/@xui/date-range-picker) · [`@xui/time-picker`](https://www.npmjs.com/package/@xui/time-picker) · [`@xui/timezone-select`](https://www.npmjs.com/package/@xui/timezone-select)
|
|
129
|
+
|
|
130
|
+
**Data display** — [`@xui/avatar`](https://www.npmjs.com/package/@xui/avatar) · [`@xui/badge`](https://www.npmjs.com/package/@xui/badge) · [`@xui/card`](https://www.npmjs.com/package/@xui/card) · [`@xui/card-list`](https://www.npmjs.com/package/@xui/card-list) · [`@xui/carousel`](https://www.npmjs.com/package/@xui/carousel) · [`@xui/data-table`](https://www.npmjs.com/package/@xui/data-table) · [`@xui/descriptions`](https://www.npmjs.com/package/@xui/descriptions) · [`@xui/entity-title`](https://www.npmjs.com/package/@xui/entity-title) · [`@xui/kbd`](https://www.npmjs.com/package/@xui/kbd) · [`@xui/statistic`](https://www.npmjs.com/package/@xui/statistic) · [`@xui/status`](https://www.npmjs.com/package/@xui/status) · [`@xui/table`](https://www.npmjs.com/package/@xui/table) · [`@xui/tag`](https://www.npmjs.com/package/@xui/tag) · [`@xui/timeline`](https://www.npmjs.com/package/@xui/timeline) · [`@xui/tree`](https://www.npmjs.com/package/@xui/tree)
|
|
131
|
+
|
|
132
|
+
**Navigation** — [`@xui/breadcrumb`](https://www.npmjs.com/package/@xui/breadcrumb) · [`@xui/menubar`](https://www.npmjs.com/package/@xui/menubar) · [`@xui/navbar`](https://www.npmjs.com/package/@xui/navbar) · [`@xui/navigation-menu`](https://www.npmjs.com/package/@xui/navigation-menu) · [`@xui/pagination`](https://www.npmjs.com/package/@xui/pagination) · [`@xui/panel-stack`](https://www.npmjs.com/package/@xui/panel-stack) · [`@xui/steps`](https://www.npmjs.com/package/@xui/steps) · [`@xui/tabs`](https://www.npmjs.com/package/@xui/tabs)
|
|
133
|
+
|
|
134
|
+
**Overlays** — [`@xui/alert`](https://www.npmjs.com/package/@xui/alert) · [`@xui/alert-dialog`](https://www.npmjs.com/package/@xui/alert-dialog) · [`@xui/context-menu`](https://www.npmjs.com/package/@xui/context-menu) · [`@xui/dialog`](https://www.npmjs.com/package/@xui/dialog) · [`@xui/drawer`](https://www.npmjs.com/package/@xui/drawer) · [`@xui/menu`](https://www.npmjs.com/package/@xui/menu) · [`@xui/omnibar`](https://www.npmjs.com/package/@xui/omnibar) · [`@xui/popover`](https://www.npmjs.com/package/@xui/popover) · [`@xui/toast`](https://www.npmjs.com/package/@xui/toast) · [`@xui/tooltip`](https://www.npmjs.com/package/@xui/tooltip)
|
|
135
|
+
|
|
136
|
+
**Feedback** — [`@xui/callout`](https://www.npmjs.com/package/@xui/callout) · [`@xui/non-ideal-state`](https://www.npmjs.com/package/@xui/non-ideal-state) · [`@xui/progress-bar`](https://www.npmjs.com/package/@xui/progress-bar) · [`@xui/result`](https://www.npmjs.com/package/@xui/result) · [`@xui/skeleton`](https://www.npmjs.com/package/@xui/skeleton) · [`@xui/spinner`](https://www.npmjs.com/package/@xui/spinner)
|
|
137
|
+
|
|
138
|
+
**Layout** — [`@xui/accordion`](https://www.npmjs.com/package/@xui/accordion) · [`@xui/aspect-ratio`](https://www.npmjs.com/package/@xui/aspect-ratio) · [`@xui/collapse`](https://www.npmjs.com/package/@xui/collapse) · [`@xui/divider`](https://www.npmjs.com/package/@xui/divider) · [`@xui/dock-manager`](https://www.npmjs.com/package/@xui/dock-manager) · [`@xui/overflow-list`](https://www.npmjs.com/package/@xui/overflow-list) · [`@xui/scroll-area`](https://www.npmjs.com/package/@xui/scroll-area) · [`@xui/section`](https://www.npmjs.com/package/@xui/section) · [`@xui/splitter`](https://www.npmjs.com/package/@xui/splitter)
|
|
139
|
+
|
|
140
|
+
**Visualisation** — [`@xui/echarts`](https://www.npmjs.com/package/@xui/echarts) · [`@xui/konva`](https://www.npmjs.com/package/@xui/konva) · [`@xui/node-graph`](https://www.npmjs.com/package/@xui/node-graph)
|
|
141
|
+
|
|
142
|
+
</details>
|
|
118
143
|
|
|
119
144
|
## AI coding agents
|
|
120
145
|
|
|
121
146
|
Two pieces of tooling teach coding agents how to build with xUI.
|
|
122
147
|
|
|
123
|
-
**MCP server** — [`@xui/mcp`](
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
148
|
+
**MCP server** — [`@xui/mcp`](libs/mcp/README.md) exposes every package's real API (selectors, signal
|
|
149
|
+
inputs, variant axes, outputs), the design tokens, the docs and the Storybook examples as MCP tools.
|
|
150
|
+
It extracts them from the library sources, so every package is covered and the answers match the
|
|
151
|
+
installed version.
|
|
127
152
|
|
|
128
153
|
```json
|
|
129
154
|
{
|
|
@@ -133,85 +158,46 @@ answers match the installed version.
|
|
|
133
158
|
}
|
|
134
159
|
```
|
|
135
160
|
|
|
136
|
-
In this
|
|
137
|
-
once so it exists.
|
|
161
|
+
In this repository `.mcp.json` already points at `dist/libs/mcp/src/server.js` — run
|
|
162
|
+
`pnpm nx build mcp` once so it exists.
|
|
138
163
|
|
|
139
|
-
**Skill** — [`skills/xui`](
|
|
164
|
+
**Skill** — [`skills/xui`](skills/xui/SKILL.md) is the procedural knowledge: the three-layer
|
|
140
165
|
architecture, discovery through the MCP server, composition and styling rules, theming, the
|
|
141
166
|
generators, and the conventions for authoring a package inside the monorepo. `.claude/skills/xui`
|
|
142
167
|
links to it for agents working in this repository.
|
|
143
168
|
|
|
144
|
-
##
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
- [ ] Input OTP
|
|
180
|
-
- [ ] Toggle Group
|
|
181
|
-
|
|
182
|
-
### Additional
|
|
183
|
-
|
|
184
|
-
- [ ] Decagram
|
|
185
|
-
- [ ] Settings
|
|
186
|
-
- [ ] Drawer
|
|
187
|
-
- [ ] Panel Bar
|
|
188
|
-
- [ ] Textarea
|
|
189
|
-
- [ ] Time Picker
|
|
190
|
-
- [ ] Image Upload
|
|
191
|
-
- [ ] Banner
|
|
192
|
-
- [ ] Snack bar
|
|
193
|
-
|
|
194
|
-
## Opinionated "components"
|
|
195
|
-
|
|
196
|
-
- [ ] Graph View (Nodes)
|
|
197
|
-
- [ ] Analysis
|
|
198
|
-
- [ ] Charts (NG Charts?)
|
|
199
|
-
|
|
200
|
-
## CLI
|
|
201
|
-
|
|
202
|
-
Make cli to install the components
|
|
203
|
-
|
|
204
|
-
## TODO
|
|
205
|
-
|
|
206
|
-
- Button
|
|
207
|
-
|
|
208
|
-
- Icon
|
|
209
|
-
- Shine
|
|
210
|
-
|
|
211
|
-
- Breadcrumb
|
|
212
|
-
|
|
213
|
-
- fix styling issues
|
|
214
|
-
- on hover stuff
|
|
215
|
-
- data driven component
|
|
216
|
-
|
|
217
|
-
- adjust generator to generate stories into the apps/storybook
|
|
169
|
+
## Browser support
|
|
170
|
+
|
|
171
|
+
The browsers Angular itself supports — see the
|
|
172
|
+
[Angular browser support policy](https://angular.dev/reference/versions#browser-support).
|
|
173
|
+
|
|
174
|
+
## Development
|
|
175
|
+
|
|
176
|
+
The workspace is [Nx](https://nx.dev) + pnpm.
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
pnpm install
|
|
180
|
+
pnpm start # documentation site on :4200
|
|
181
|
+
pnpm storybook # component gallery on :4400
|
|
182
|
+
pnpm nx serve admin # the example admin application
|
|
183
|
+
pnpm test # unit tests
|
|
184
|
+
pnpm nx test-storybook ui-storybook # render every story in headless Chromium
|
|
185
|
+
pnpm build # build every package
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Commits follow [Conventional Commits](https://www.conventionalcommits.org) and are linted — the
|
|
189
|
+
release is cut from them. See [docs/releasing.md](docs/releasing.md) for how a version is published,
|
|
190
|
+
[apps/ui-storybook/README.md](apps/ui-storybook/README.md) before writing stories, and
|
|
191
|
+
[apps/app/README.md](apps/app/README.md) for the documentation site, whose component pages are
|
|
192
|
+
generated from those same stories, and [apps/admin/README.md](apps/admin/README.md) for the example
|
|
193
|
+
admin application — a full app built from these packages, which is the fastest way to see how they
|
|
194
|
+
fit together.
|
|
195
|
+
|
|
196
|
+
## Contributing
|
|
197
|
+
|
|
198
|
+
Bugs and ideas are welcome in [issues](https://github.com/Rikarin/xui/issues). For a change of any
|
|
199
|
+
size, open an issue first so the API can be agreed before the code exists.
|
|
200
|
+
|
|
201
|
+
## License
|
|
202
|
+
|
|
203
|
+
See [LICENSE](LICENSE).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, computed, Directive, ChangeDetectionStrategy, Component, booleanAttribute, contentChild, TemplateRef, numberAttribute, output } from '@angular/core';
|
|
2
|
+
import { input, computed, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, booleanAttribute, contentChild, TemplateRef, numberAttribute, output } from '@angular/core';
|
|
3
3
|
import { xui } from '@xui/core';
|
|
4
4
|
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
5
5
|
import { matMoreHorizRound, matChevronRightRound } from '@ng-icons/material-icons/round';
|
|
@@ -15,12 +15,13 @@ class XuiBreadcrumb {
|
|
|
15
15
|
computedClass = computed(() => xui(this.class()), /* @ts-ignore */
|
|
16
16
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
17
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 });
|
|
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()" } }, exportAs: ["xuiBreadcrumb"], ngImport: i0 });
|
|
19
19
|
}
|
|
20
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumb, decorators: [{
|
|
21
21
|
type: Directive,
|
|
22
22
|
args: [{
|
|
23
23
|
selector: '[xuiBreadcrumb]',
|
|
24
|
+
exportAs: 'xuiBreadcrumb',
|
|
24
25
|
host: {
|
|
25
26
|
role: 'navigation',
|
|
26
27
|
'[class]': 'computedClass()',
|
|
@@ -40,7 +41,7 @@ class XuiBreadcrumbEllipsis {
|
|
|
40
41
|
<ng-icon xui size="sm" name="matMoreHorizRound" />
|
|
41
42
|
<span class="sr-only">More</span>
|
|
42
43
|
</span>
|
|
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", "
|
|
44
|
+
`, 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", "label"], exportAs: ["xuiIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
44
45
|
}
|
|
45
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbEllipsis, decorators: [{
|
|
46
47
|
type: Component,
|
|
@@ -49,6 +50,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
49
50
|
imports: [NgIcon, XuiIcon],
|
|
50
51
|
providers: [provideIcons({ matMoreHorizRound })],
|
|
51
52
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
53
|
+
encapsulation: ViewEncapsulation.None,
|
|
52
54
|
template: `
|
|
53
55
|
<span role="presentation" aria-hidden="true" [class]="computedClass()">
|
|
54
56
|
<ng-icon xui size="sm" name="matMoreHorizRound" />
|
|
@@ -65,12 +67,13 @@ class XuiBreadcrumbItem {
|
|
|
65
67
|
computedClass = computed(() => xui('inline-flex items-center gap-1.5', this.active() && '[&>*]:font-semibold', this.class()), /* @ts-ignore */
|
|
66
68
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
67
69
|
/** @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 });
|
|
70
|
+
/** @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()" } }, exportAs: ["xuiBreadcrumbItem"], ngImport: i0 });
|
|
69
71
|
}
|
|
70
72
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbItem, decorators: [{
|
|
71
73
|
type: Directive,
|
|
72
74
|
args: [{
|
|
73
75
|
selector: '[xuiBreadcrumbItem]',
|
|
76
|
+
exportAs: 'xuiBreadcrumbItem',
|
|
74
77
|
host: {
|
|
75
78
|
'[class]': 'computedClass()'
|
|
76
79
|
}
|
|
@@ -97,15 +100,16 @@ class XuiBreadcrumbLink {
|
|
|
97
100
|
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
98
101
|
/** Renders the crumb as unreachable without dropping it from the trail. */
|
|
99
102
|
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
100
|
-
computedClass = computed(() => xui('hover:text-foreground rounded-sm transition-colors
|
|
103
|
+
computedClass = computed(() => xui('hover:text-foreground rounded-sm transition-colors', this.disabled() && 'text-foreground-muted pointer-events-none opacity-60 hover:text-inherit', this.class()), /* @ts-ignore */
|
|
101
104
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
102
105
|
/** @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 });
|
|
106
|
+
/** @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" } }, exportAs: ["xuiBreadcrumbLink"], ngImport: i0 });
|
|
104
107
|
}
|
|
105
108
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbLink, decorators: [{
|
|
106
109
|
type: Directive,
|
|
107
110
|
args: [{
|
|
108
111
|
selector: '[xuiBreadcrumbLink]',
|
|
112
|
+
exportAs: 'xuiBreadcrumbLink',
|
|
109
113
|
host: {
|
|
110
114
|
'[class]': 'computedClass()',
|
|
111
115
|
'[attr.aria-disabled]': 'disabled() || null',
|
|
@@ -117,15 +121,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
117
121
|
class XuiBreadcrumbList {
|
|
118
122
|
class = input('', /* @ts-ignore */
|
|
119
123
|
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
120
|
-
computedClass = computed(() => xui('flex flex-wrap items-center gap-1.5 break-words text-sm text-
|
|
124
|
+
computedClass = computed(() => xui('flex flex-wrap items-center gap-1.5 break-words text-sm text-foreground-subtle sm:gap-2.5', this.class()), /* @ts-ignore */
|
|
121
125
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
122
126
|
/** @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 });
|
|
127
|
+
/** @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()" } }, exportAs: ["xuiBreadcrumbList"], ngImport: i0 });
|
|
124
128
|
}
|
|
125
129
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbList, decorators: [{
|
|
126
130
|
type: Directive,
|
|
127
131
|
args: [{
|
|
128
132
|
selector: '[xuiBreadcrumbList]',
|
|
133
|
+
exportAs: 'xuiBreadcrumbList',
|
|
129
134
|
host: {
|
|
130
135
|
'[class]': 'computedClass()'
|
|
131
136
|
}
|
|
@@ -138,12 +143,13 @@ class XuiBreadcrumbPage {
|
|
|
138
143
|
computedClass = computed(() => xui('font-normal text-foreground', this.class()), /* @ts-ignore */
|
|
139
144
|
...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
|
|
140
145
|
/** @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 });
|
|
146
|
+
/** @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()" } }, exportAs: ["xuiBreadcrumbPage"], ngImport: i0 });
|
|
142
147
|
}
|
|
143
148
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbPage, decorators: [{
|
|
144
149
|
type: Directive,
|
|
145
150
|
args: [{
|
|
146
151
|
selector: '[xuiBreadcrumbPage]',
|
|
152
|
+
exportAs: 'xuiBreadcrumbPage',
|
|
147
153
|
host: {
|
|
148
154
|
role: 'link',
|
|
149
155
|
'aria-disabled': 'true',
|
|
@@ -163,7 +169,7 @@ class XuiBreadcrumbSeparator {
|
|
|
163
169
|
<ng-content>
|
|
164
170
|
<ng-icon name="matChevronRightRound" />
|
|
165
171
|
</ng-content>
|
|
166
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
172
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
167
173
|
}
|
|
168
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbSeparator, decorators: [{
|
|
169
175
|
type: Component,
|
|
@@ -173,6 +179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
173
179
|
imports: [NgIcon],
|
|
174
180
|
providers: [provideIcons({ matChevronRightRound })],
|
|
175
181
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
182
|
+
encapsulation: ViewEncapsulation.None,
|
|
176
183
|
host: {
|
|
177
184
|
role: 'presentation',
|
|
178
185
|
'aria-hidden': 'true',
|
|
@@ -189,29 +196,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
189
196
|
/** Replaces the default rendering of every crumb. */
|
|
190
197
|
class XuiBreadcrumbsItem {
|
|
191
198
|
/** @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 });
|
|
199
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: XuiBreadcrumbsItem, isStandalone: true, selector: "ng-template[xuiBreadcrumbsItem]", exportAs: ["xuiBreadcrumbsItem"], ngImport: i0 });
|
|
193
200
|
}
|
|
194
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsItem, decorators: [{
|
|
195
202
|
type: Directive,
|
|
196
|
-
args: [{ selector: 'ng-template[xuiBreadcrumbsItem]' }]
|
|
203
|
+
args: [{ selector: 'ng-template[xuiBreadcrumbsItem]', exportAs: 'xuiBreadcrumbsItem' }]
|
|
197
204
|
}] });
|
|
198
205
|
/** Replaces the default rendering of the current crumb only. */
|
|
199
206
|
class XuiBreadcrumbsCurrent {
|
|
200
207
|
/** @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 });
|
|
208
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: XuiBreadcrumbsCurrent, isStandalone: true, selector: "ng-template[xuiBreadcrumbsCurrent]", exportAs: ["xuiBreadcrumbsCurrent"], ngImport: i0 });
|
|
202
209
|
}
|
|
203
210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsCurrent, decorators: [{
|
|
204
211
|
type: Directive,
|
|
205
|
-
args: [{ selector: 'ng-template[xuiBreadcrumbsCurrent]' }]
|
|
212
|
+
args: [{ selector: 'ng-template[xuiBreadcrumbsCurrent]', exportAs: 'xuiBreadcrumbsCurrent' }]
|
|
206
213
|
}] });
|
|
207
214
|
/** Replaces the ellipsis shown in place of the collapsed crumbs. */
|
|
208
215
|
class XuiBreadcrumbsOverflow {
|
|
209
216
|
/** @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 });
|
|
217
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: XuiBreadcrumbsOverflow, isStandalone: true, selector: "ng-template[xuiBreadcrumbsOverflow]", exportAs: ["xuiBreadcrumbsOverflow"], ngImport: i0 });
|
|
211
218
|
}
|
|
212
219
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbsOverflow, decorators: [{
|
|
213
220
|
type: Directive,
|
|
214
|
-
args: [{ selector: 'ng-template[xuiBreadcrumbsOverflow]' }]
|
|
221
|
+
args: [{ selector: 'ng-template[xuiBreadcrumbsOverflow]', exportAs: 'xuiBreadcrumbsOverflow' }]
|
|
215
222
|
}] });
|
|
216
223
|
/**
|
|
217
224
|
* A breadcrumb trail built from an array, collapsing to fit its container.
|
|
@@ -265,7 +272,7 @@ class XuiBreadcrumbs {
|
|
|
265
272
|
[items]="items()"
|
|
266
273
|
[collapseFrom]="collapseFrom()"
|
|
267
274
|
[minVisibleItems]="minVisibleItems()"
|
|
268
|
-
(
|
|
275
|
+
(overflowChange)="overflow.emit($event)"
|
|
269
276
|
>
|
|
270
277
|
<ng-template xuiOverflowListItem let-item let-index="index">
|
|
271
278
|
<span xuiBreadcrumbItem class="whitespace-nowrap">
|
|
@@ -343,7 +350,7 @@ class XuiBreadcrumbs {
|
|
|
343
350
|
<span class="truncate">{{ item.text }}</span>
|
|
344
351
|
}
|
|
345
352
|
</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", "
|
|
353
|
+
`, 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"], exportAs: ["xuiBreadcrumbItem"] }, { kind: "directive", type: XuiBreadcrumbLink, selector: "[xuiBreadcrumbLink]", inputs: ["class", "disabled"], exportAs: ["xuiBreadcrumbLink"] }, { kind: "directive", type: XuiBreadcrumbPage, selector: "[xuiBreadcrumbPage]", inputs: ["class"], exportAs: ["xuiBreadcrumbPage"] }, { kind: "component", type: XuiBreadcrumbSeparator, selector: "[xuiBreadcrumbSeparator]", inputs: ["class"] }, { kind: "directive", type: XuiIcon, selector: "ng-icon[xui]", inputs: ["class", "size", "color", "label"], exportAs: ["xuiIcon"] }, { kind: "component", type: XuiOverflowList, selector: "xui-overflow-list", inputs: ["class", "items", "collapseFrom", "minVisibleItems", "alwaysRenderOverflow", "itemRole"], outputs: ["overflowChange"] }, { kind: "directive", type: XuiOverflowListItem, selector: "ng-template[xuiOverflowListItem]", exportAs: ["xuiOverflowListItem"] }, { kind: "directive", type: XuiOverflowListOverflow, selector: "ng-template[xuiOverflowListOverflow]", exportAs: ["xuiOverflowListOverflow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
347
354
|
}
|
|
348
355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiBreadcrumbs, decorators: [{
|
|
349
356
|
type: Component,
|
|
@@ -365,6 +372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
365
372
|
],
|
|
366
373
|
hostDirectives: [{ directive: XuiBreadcrumb, inputs: ['aria-label'] }],
|
|
367
374
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
375
|
+
encapsulation: ViewEncapsulation.None,
|
|
368
376
|
template: `
|
|
369
377
|
<xui-overflow-list
|
|
370
378
|
role="list"
|
|
@@ -373,7 +381,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
373
381
|
[items]="items()"
|
|
374
382
|
[collapseFrom]="collapseFrom()"
|
|
375
383
|
[minVisibleItems]="minVisibleItems()"
|
|
376
|
-
(
|
|
384
|
+
(overflowChange)="overflow.emit($event)"
|
|
377
385
|
>
|
|
378
386
|
<ng-template xuiOverflowListItem let-item let-index="index">
|
|
379
387
|
<span xuiBreadcrumbItem class="whitespace-nowrap">
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xui-breadcrumb.mjs","sources":["../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-ellipsis.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-item.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-link.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-list.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-page.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-separator.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumbs.ts","../../../../../../libs/ui/breadcrumb/xui/src/index.ts","../../../../../../libs/ui/breadcrumb/xui/src/xui-breadcrumb.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumb]',\n host: {\n role: 'navigation',\n '[class]': 'computedClass()',\n '[attr.aria-label]': 'ariaLabel()'\n }\n})\nexport class XuiBreadcrumb {\n readonly class = input<ClassValue>('');\n readonly ariaLabel = input<string>('breadcrumb', { alias: 'aria-label' });\n\n protected readonly computedClass = computed(() => xui(this.class()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matMoreHorizRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport { XuiIcon } from '@xui/icon';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'xui-breadcrumb-ellipsis',\n imports: [NgIcon, XuiIcon],\n providers: [provideIcons({ matMoreHorizRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span role=\"presentation\" aria-hidden=\"true\" [class]=\"computedClass()\">\n <ng-icon xui size=\"sm\" name=\"matMoreHorizRound\" />\n <span class=\"sr-only\">More</span>\n </span>\n `\n})\nexport class XuiBreadcrumbEllipsis {\n readonly class = input<ClassValue>('');\n protected readonly computedClass = computed(() => xui('flex items-center justify-center', this.class()));\n}\n","import { Directive, booleanAttribute, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumbItem]',\n host: {\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbItem {\n readonly class = input<ClassValue>('');\n readonly active = input(false, { transform: booleanAttribute });\n\n protected readonly computedClass = computed(() =>\n xui('inline-flex items-center gap-1.5', this.active() && '[&>*]:font-semibold', this.class())\n );\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n/**\n * A navigable crumb.\n *\n * ```html\n * <a xuiBreadcrumbLink href=\"/projects\">Projects</a>\n * <a xuiBreadcrumbLink [routerLink]=\"['/projects']\">Projects</a>\n * ```\n *\n * This is styling and disabled semantics only — it deliberately does not\n * compose `RouterLink`. Doing so made every breadcrumb fail to render without a\n * `Router` in the injector, routed or not, because host directives are\n * instantiated unconditionally. Applying `routerLink` alongside it costs the\n * consumer nothing and keeps `@angular/router` optional.\n */\n@Directive({\n selector: '[xuiBreadcrumbLink]',\n host: {\n '[class]': 'computedClass()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.tabindex]': 'disabled() ? -1 : null'\n }\n})\nexport class XuiBreadcrumbLink {\n /** The user-defined classes. Merged last so they win over the base classes. */\n readonly class = input<ClassValue>('');\n\n /** Renders the crumb as unreachable without dropping it from the trail. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly computedClass = computed(() =>\n xui(\n 'hover:text-foreground rounded-sm transition-colors focus-visible:outline-5 focus-visible:outline-offset-2',\n this.disabled() && 'text-foreground-muted pointer-events-none opacity-60 hover:text-inherit',\n this.class()\n )\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumbList]',\n host: {\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbList {\n readonly class = input<ClassValue>('');\n\n protected readonly computedClass = computed(() =>\n xui('flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5', this.class())\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumbPage]',\n host: {\n role: 'link',\n 'aria-disabled': 'true',\n 'aria-current': 'page',\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbPage {\n readonly class = input<ClassValue>('');\n\n protected readonly computedClass = computed(() => xui('font-normal text-foreground', this.class()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matChevronRightRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[xuiBreadcrumbSeparator]',\n imports: [NgIcon],\n providers: [provideIcons({ matChevronRightRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'presentation',\n 'aria-hidden': 'true',\n '[class]': 'computedClass()'\n },\n template: `\n <ng-content>\n <ng-icon name=\"matChevronRightRound\" />\n </ng-content>\n `\n})\nexport class XuiBreadcrumbSeparator {\n readonly class = input<ClassValue>('');\n\n protected readonly computedClass = computed(() =>\n xui('flex items-center justify-center [&>ng-icon]:text-[14px] [&>ng-icon]:flex!', this.class())\n );\n}\n","import type { NumberInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n computed,\n contentChild,\n input,\n numberAttribute,\n output\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { NgIcon } from '@ng-icons/core';\nimport { xui } from '@xui/core';\nimport { XuiIcon } from '@xui/icon';\nimport {\n XuiOverflowList,\n XuiOverflowListItem,\n XuiOverflowListOverflow,\n type XuiOverflowBoundary\n} from '@xui/overflow-list';\nimport type { ClassValue } from 'clsx';\nimport { XuiBreadcrumb } from './breadcrumb';\nimport { XuiBreadcrumbEllipsis } from './breadcrumb-ellipsis';\nimport { XuiBreadcrumbItem } from './breadcrumb-item';\nimport { XuiBreadcrumbLink } from './breadcrumb-link';\nimport { XuiBreadcrumbPage } from './breadcrumb-page';\nimport { XuiBreadcrumbSeparator } from './breadcrumb-separator';\n\n/** One crumb of a data-driven trail. */\nexport interface XuiBreadcrumbData {\n /** The label. */\n text?: string;\n\n /** Name of a registered `@ng-icons` icon, shown before the label. */\n icon?: string;\n\n /** Plain navigation. Mutually exclusive with `link`. */\n href?: string;\n\n /** Router navigation. Only this pulls `@angular/router` into the page. */\n link?: RouterLink['routerLink'];\n\n target?: string;\n\n /** Keeps the crumb in the trail but makes it unreachable. */\n disabled?: boolean;\n\n /** Forces the current crumb. Defaults to the last item. */\n current?: boolean;\n}\n\n/** Context handed to the crumb templates. */\nexport interface XuiBreadcrumbContext<T> {\n $implicit: T;\n index: number;\n current: boolean;\n}\n\n/** Context handed to the overflow template. */\nexport interface XuiBreadcrumbsOverflowContext<T> {\n $implicit: T[];\n count: number;\n}\n\n/** Replaces the default rendering of every crumb. */\n@Directive({ selector: 'ng-template[xuiBreadcrumbsItem]' })\nexport class XuiBreadcrumbsItem {}\n\n/** Replaces the default rendering of the current crumb only. */\n@Directive({ selector: 'ng-template[xuiBreadcrumbsCurrent]' })\nexport class XuiBreadcrumbsCurrent {}\n\n/** Replaces the ellipsis shown in place of the collapsed crumbs. */\n@Directive({ selector: 'ng-template[xuiBreadcrumbsOverflow]' })\nexport class XuiBreadcrumbsOverflow {}\n\n/**\n * A breadcrumb trail built from an array, collapsing to fit its container.\n *\n * ```html\n * <xui-breadcrumbs [items]=\"crumbs()\" (itemClick)=\"open($event)\" />\n * ```\n *\n * This is the assembled form of the breadcrumb parts, wired to\n * `xui-overflow-list` so crumbs that do not fit fold into an ellipsis. Compose\n * the parts directly when the markup has to differ; reach for this when the\n * trail is data.\n *\n * The collapsed crumbs are handed to the overflow template, so a menu can be\n * hung off the ellipsis. Without one they are not lost — the template receives\n * them and `(overflow)` reports them.\n *\n * An `icon` names an `@ng-icons` icon that the application registers; this\n * package cannot know the set in advance.\n */\n@Component({\n selector: 'xui-breadcrumbs',\n imports: [\n NgIcon,\n NgTemplateOutlet,\n RouterLink,\n XuiBreadcrumbEllipsis,\n XuiBreadcrumbItem,\n XuiBreadcrumbLink,\n XuiBreadcrumbPage,\n XuiBreadcrumbSeparator,\n XuiIcon,\n XuiOverflowList,\n XuiOverflowListItem,\n XuiOverflowListOverflow\n ],\n hostDirectives: [{ directive: XuiBreadcrumb, inputs: ['aria-label'] }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <xui-overflow-list\n role=\"list\"\n itemRole=\"listitem\"\n class=\"text-foreground-muted gap-1.5 text-sm\"\n [items]=\"items()\"\n [collapseFrom]=\"collapseFrom()\"\n [minVisibleItems]=\"minVisibleItems()\"\n (overflow)=\"overflow.emit($event)\"\n >\n <ng-template xuiOverflowListItem let-item let-index=\"index\">\n <span xuiBreadcrumbItem class=\"whitespace-nowrap\">\n @if (index > 0) {\n <span xuiBreadcrumbSeparator></span>\n }\n <ng-container\n *ngTemplateOutlet=\"\n isCurrent(index)\n ? (currentTemplate() ?? itemTemplate() ?? defaultCurrent)\n : (itemTemplate() ?? defaultCrumb);\n context: { $implicit: item, index: index, current: isCurrent(index) }\n \"\n />\n </span>\n </ng-template>\n\n <ng-template xuiOverflowListOverflow let-hidden let-count=\"count\">\n <span xuiBreadcrumbItem class=\"whitespace-nowrap\">\n @if (collapseFrom() === 'end') {\n <span xuiBreadcrumbSeparator></span>\n }\n <ng-container\n *ngTemplateOutlet=\"overflowTemplate() ?? defaultOverflow; context: { $implicit: hidden, count: count }\"\n />\n </span>\n </ng-template>\n </xui-overflow-list>\n\n <ng-template #defaultOverflow>\n <xui-breadcrumb-ellipsis />\n </ng-template>\n\n <ng-template #defaultCurrent let-item>\n <span xuiBreadcrumbPage class=\"inline-flex items-center gap-1.5\">\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </span>\n </ng-template>\n\n <ng-template #defaultCrumb let-item>\n @if (item.link) {\n <a\n xuiBreadcrumbLink\n class=\"inline-flex items-center gap-1.5\"\n [routerLink]=\"item.link\"\n [attr.target]=\"item.target\"\n [disabled]=\"item.disabled\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </a>\n } @else if (item.href) {\n <a\n xuiBreadcrumbLink\n class=\"inline-flex items-center gap-1.5\"\n [href]=\"item.href\"\n [attr.target]=\"item.target\"\n [disabled]=\"item.disabled\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </a>\n } @else {\n <span xuiBreadcrumbLink class=\"inline-flex items-center gap-1.5\" [disabled]=\"item.disabled\">\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </span>\n }\n </ng-template>\n\n <ng-template #crumbBody let-item>\n @if (item.icon) {\n <ng-icon xui size=\"sm\" class=\"shrink-0\" [name]=\"item.icon\" />\n }\n @if (item.text) {\n <span class=\"truncate\">{{ item.text }}</span>\n }\n </ng-template>\n `,\n host: {\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbs<T extends XuiBreadcrumbData = XuiBreadcrumbData> {\n readonly itemTemplate = contentChild(XuiBreadcrumbsItem, { read: TemplateRef });\n readonly currentTemplate = contentChild(XuiBreadcrumbsCurrent, { read: TemplateRef });\n readonly overflowTemplate = contentChild(XuiBreadcrumbsOverflow, { read: TemplateRef });\n\n /** The user-defined classes. Merged last so they win over the base classes. */\n readonly class = input<ClassValue>('');\n readonly items = input.required<readonly T[]>();\n\n /** Which end collapses. A trail collapses from the start, keeping where you are. */\n readonly collapseFrom = input<XuiOverflowBoundary>('start');\n\n /** Never collapse below this many crumbs, however narrow the container gets. */\n readonly minVisibleItems = input<number, NumberInput>(0, { transform: numberAttribute });\n\n /** Emits the collapsed crumbs whenever the set changes. */\n readonly overflow = output<T[]>();\n\n /** Emits when a navigable crumb is activated. A crumb with neither `href` nor `link` is not. */\n readonly itemClick = output<T>();\n\n protected readonly computedClass = computed(() => xui('block min-w-0', this.class()));\n\n /** The last crumb is where you are, unless an item says otherwise. */\n protected isCurrent(index: number): boolean {\n return this.items()[index]?.current ?? index === this.items().length - 1;\n }\n}\n","import { XuiBreadcrumb } from './lib/breadcrumb';\nimport { XuiBreadcrumbEllipsis } from './lib/breadcrumb-ellipsis';\nimport { XuiBreadcrumbItem } from './lib/breadcrumb-item';\nimport { XuiBreadcrumbLink } from './lib/breadcrumb-link';\nimport { XuiBreadcrumbList } from './lib/breadcrumb-list';\nimport { XuiBreadcrumbPage } from './lib/breadcrumb-page';\nimport { XuiBreadcrumbSeparator } from './lib/breadcrumb-separator';\nimport { XuiBreadcrumbs, XuiBreadcrumbsCurrent, XuiBreadcrumbsItem, XuiBreadcrumbsOverflow } from './lib/breadcrumbs';\n\nexport * from './lib/breadcrumb';\nexport * from './lib/breadcrumb-ellipsis';\nexport * from './lib/breadcrumb-item';\nexport * from './lib/breadcrumb-link';\nexport * from './lib/breadcrumb-list';\nexport * from './lib/breadcrumb-page';\nexport * from './lib/breadcrumb-separator';\nexport * from './lib/breadcrumbs';\n\nexport const XuiBreadcrumbImports = [\n XuiBreadcrumb,\n XuiBreadcrumbEllipsis,\n XuiBreadcrumbItem,\n XuiBreadcrumbLink,\n XuiBreadcrumbList,\n XuiBreadcrumbPage,\n XuiBreadcrumbSeparator,\n XuiBreadcrumbs,\n XuiBreadcrumbsCurrent,\n XuiBreadcrumbsItem,\n XuiBreadcrumbsOverflow\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.XuiBreadcrumb"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xui-breadcrumb.mjs","sources":["../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-ellipsis.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-item.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-link.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-list.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-page.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumb-separator.ts","../../../../../../libs/ui/breadcrumb/xui/src/lib/breadcrumbs.ts","../../../../../../libs/ui/breadcrumb/xui/src/index.ts","../../../../../../libs/ui/breadcrumb/xui/src/xui-breadcrumb.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumb]',\n exportAs: 'xuiBreadcrumb',\n host: {\n role: 'navigation',\n '[class]': 'computedClass()',\n '[attr.aria-label]': 'ariaLabel()'\n }\n})\nexport class XuiBreadcrumb {\n readonly class = input<ClassValue>('');\n readonly ariaLabel = input<string>('breadcrumb', { alias: 'aria-label' });\n\n protected readonly computedClass = computed(() => xui(this.class()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matMoreHorizRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport { XuiIcon } from '@xui/icon';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'xui-breadcrumb-ellipsis',\n imports: [NgIcon, XuiIcon],\n providers: [provideIcons({ matMoreHorizRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <span role=\"presentation\" aria-hidden=\"true\" [class]=\"computedClass()\">\n <ng-icon xui size=\"sm\" name=\"matMoreHorizRound\" />\n <span class=\"sr-only\">More</span>\n </span>\n `\n})\nexport class XuiBreadcrumbEllipsis {\n readonly class = input<ClassValue>('');\n protected readonly computedClass = computed(() => xui('flex items-center justify-center', this.class()));\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumbItem]',\n exportAs: 'xuiBreadcrumbItem',\n host: {\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbItem {\n readonly class = input<ClassValue>('');\n readonly active = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly computedClass = computed(() =>\n xui('inline-flex items-center gap-1.5', this.active() && '[&>*]:font-semibold', this.class())\n );\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n/**\n * A navigable crumb.\n *\n * ```html\n * <a xuiBreadcrumbLink href=\"/projects\">Projects</a>\n * <a xuiBreadcrumbLink [routerLink]=\"['/projects']\">Projects</a>\n * ```\n *\n * This is styling and disabled semantics only — it deliberately does not\n * compose `RouterLink`. Doing so made every breadcrumb fail to render without a\n * `Router` in the injector, routed or not, because host directives are\n * instantiated unconditionally. Applying `routerLink` alongside it costs the\n * consumer nothing and keeps `@angular/router` optional.\n */\n@Directive({\n selector: '[xuiBreadcrumbLink]',\n exportAs: 'xuiBreadcrumbLink',\n host: {\n '[class]': 'computedClass()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.tabindex]': 'disabled() ? -1 : null'\n }\n})\nexport class XuiBreadcrumbLink {\n /** The user-defined classes. Merged last so they win over the base classes. */\n readonly class = input<ClassValue>('');\n\n /** Renders the crumb as unreachable without dropping it from the trail. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly computedClass = computed(() =>\n xui(\n 'hover:text-foreground rounded-sm transition-colors',\n this.disabled() && 'text-foreground-muted pointer-events-none opacity-60 hover:text-inherit',\n this.class()\n )\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumbList]',\n exportAs: 'xuiBreadcrumbList',\n host: {\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbList {\n readonly class = input<ClassValue>('');\n\n protected readonly computedClass = computed(() =>\n xui('flex flex-wrap items-center gap-1.5 break-words text-sm text-foreground-subtle sm:gap-2.5', this.class())\n );\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[xuiBreadcrumbPage]',\n exportAs: 'xuiBreadcrumbPage',\n host: {\n role: 'link',\n 'aria-disabled': 'true',\n 'aria-current': 'page',\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbPage {\n readonly class = input<ClassValue>('');\n\n protected readonly computedClass = computed(() => xui('font-normal text-foreground', this.class()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matChevronRightRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[xuiBreadcrumbSeparator]',\n imports: [NgIcon],\n providers: [provideIcons({ matChevronRightRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'presentation',\n 'aria-hidden': 'true',\n '[class]': 'computedClass()'\n },\n template: `\n <ng-content>\n <ng-icon name=\"matChevronRightRound\" />\n </ng-content>\n `\n})\nexport class XuiBreadcrumbSeparator {\n readonly class = input<ClassValue>('');\n\n protected readonly computedClass = computed(() =>\n xui('flex items-center justify-center [&>ng-icon]:text-[14px] [&>ng-icon]:flex!', this.class())\n );\n}\n","import type { NumberInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n input,\n numberAttribute,\n output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { NgIcon } from '@ng-icons/core';\nimport { xui } from '@xui/core';\nimport { XuiIcon } from '@xui/icon';\nimport {\n XuiOverflowList,\n XuiOverflowListItem,\n XuiOverflowListOverflow,\n type XuiOverflowBoundary\n} from '@xui/overflow-list';\nimport type { ClassValue } from 'clsx';\nimport { XuiBreadcrumb } from './breadcrumb';\nimport { XuiBreadcrumbEllipsis } from './breadcrumb-ellipsis';\nimport { XuiBreadcrumbItem } from './breadcrumb-item';\nimport { XuiBreadcrumbLink } from './breadcrumb-link';\nimport { XuiBreadcrumbPage } from './breadcrumb-page';\nimport { XuiBreadcrumbSeparator } from './breadcrumb-separator';\n\n/** One crumb of a data-driven trail. */\nexport interface XuiBreadcrumbData {\n /** The label. */\n text?: string;\n\n /** Name of a registered `@ng-icons` icon, shown before the label. */\n icon?: string;\n\n /** Plain navigation. Mutually exclusive with `link`. */\n href?: string;\n\n /** Router navigation. Only this pulls `@angular/router` into the page. */\n link?: RouterLink['routerLink'];\n\n target?: string;\n\n /** Keeps the crumb in the trail but makes it unreachable. */\n disabled?: boolean;\n\n /** Forces the current crumb. Defaults to the last item. */\n current?: boolean;\n}\n\n/** Context handed to the crumb templates. */\nexport interface XuiBreadcrumbContext<T> {\n $implicit: T;\n index: number;\n current: boolean;\n}\n\n/** Context handed to the overflow template. */\nexport interface XuiBreadcrumbsOverflowContext<T> {\n $implicit: T[];\n count: number;\n}\n\n/** Replaces the default rendering of every crumb. */\n@Directive({ selector: 'ng-template[xuiBreadcrumbsItem]', exportAs: 'xuiBreadcrumbsItem' })\nexport class XuiBreadcrumbsItem {}\n\n/** Replaces the default rendering of the current crumb only. */\n@Directive({ selector: 'ng-template[xuiBreadcrumbsCurrent]', exportAs: 'xuiBreadcrumbsCurrent' })\nexport class XuiBreadcrumbsCurrent {}\n\n/** Replaces the ellipsis shown in place of the collapsed crumbs. */\n@Directive({ selector: 'ng-template[xuiBreadcrumbsOverflow]', exportAs: 'xuiBreadcrumbsOverflow' })\nexport class XuiBreadcrumbsOverflow {}\n\n/**\n * A breadcrumb trail built from an array, collapsing to fit its container.\n *\n * ```html\n * <xui-breadcrumbs [items]=\"crumbs()\" (itemClick)=\"open($event)\" />\n * ```\n *\n * This is the assembled form of the breadcrumb parts, wired to\n * `xui-overflow-list` so crumbs that do not fit fold into an ellipsis. Compose\n * the parts directly when the markup has to differ; reach for this when the\n * trail is data.\n *\n * The collapsed crumbs are handed to the overflow template, so a menu can be\n * hung off the ellipsis. Without one they are not lost — the template receives\n * them and `(overflow)` reports them.\n *\n * An `icon` names an `@ng-icons` icon that the application registers; this\n * package cannot know the set in advance.\n */\n@Component({\n selector: 'xui-breadcrumbs',\n imports: [\n NgIcon,\n NgTemplateOutlet,\n RouterLink,\n XuiBreadcrumbEllipsis,\n XuiBreadcrumbItem,\n XuiBreadcrumbLink,\n XuiBreadcrumbPage,\n XuiBreadcrumbSeparator,\n XuiIcon,\n XuiOverflowList,\n XuiOverflowListItem,\n XuiOverflowListOverflow\n ],\n hostDirectives: [{ directive: XuiBreadcrumb, inputs: ['aria-label'] }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <xui-overflow-list\n role=\"list\"\n itemRole=\"listitem\"\n class=\"text-foreground-muted gap-1.5 text-sm\"\n [items]=\"items()\"\n [collapseFrom]=\"collapseFrom()\"\n [minVisibleItems]=\"minVisibleItems()\"\n (overflowChange)=\"overflow.emit($event)\"\n >\n <ng-template xuiOverflowListItem let-item let-index=\"index\">\n <span xuiBreadcrumbItem class=\"whitespace-nowrap\">\n @if (index > 0) {\n <span xuiBreadcrumbSeparator></span>\n }\n <ng-container\n *ngTemplateOutlet=\"\n isCurrent(index)\n ? (currentTemplate() ?? itemTemplate() ?? defaultCurrent)\n : (itemTemplate() ?? defaultCrumb);\n context: { $implicit: item, index: index, current: isCurrent(index) }\n \"\n />\n </span>\n </ng-template>\n\n <ng-template xuiOverflowListOverflow let-hidden let-count=\"count\">\n <span xuiBreadcrumbItem class=\"whitespace-nowrap\">\n @if (collapseFrom() === 'end') {\n <span xuiBreadcrumbSeparator></span>\n }\n <ng-container\n *ngTemplateOutlet=\"overflowTemplate() ?? defaultOverflow; context: { $implicit: hidden, count: count }\"\n />\n </span>\n </ng-template>\n </xui-overflow-list>\n\n <ng-template #defaultOverflow>\n <xui-breadcrumb-ellipsis />\n </ng-template>\n\n <ng-template #defaultCurrent let-item>\n <span xuiBreadcrumbPage class=\"inline-flex items-center gap-1.5\">\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </span>\n </ng-template>\n\n <ng-template #defaultCrumb let-item>\n @if (item.link) {\n <a\n xuiBreadcrumbLink\n class=\"inline-flex items-center gap-1.5\"\n [routerLink]=\"item.link\"\n [attr.target]=\"item.target\"\n [disabled]=\"item.disabled\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </a>\n } @else if (item.href) {\n <a\n xuiBreadcrumbLink\n class=\"inline-flex items-center gap-1.5\"\n [href]=\"item.href\"\n [attr.target]=\"item.target\"\n [disabled]=\"item.disabled\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </a>\n } @else {\n <span xuiBreadcrumbLink class=\"inline-flex items-center gap-1.5\" [disabled]=\"item.disabled\">\n <ng-container *ngTemplateOutlet=\"crumbBody; context: { $implicit: item }\" />\n </span>\n }\n </ng-template>\n\n <ng-template #crumbBody let-item>\n @if (item.icon) {\n <ng-icon xui size=\"sm\" class=\"shrink-0\" [name]=\"item.icon\" />\n }\n @if (item.text) {\n <span class=\"truncate\">{{ item.text }}</span>\n }\n </ng-template>\n `,\n host: {\n '[class]': 'computedClass()'\n }\n})\nexport class XuiBreadcrumbs<T extends XuiBreadcrumbData = XuiBreadcrumbData> {\n readonly itemTemplate = contentChild(XuiBreadcrumbsItem, { read: TemplateRef });\n readonly currentTemplate = contentChild(XuiBreadcrumbsCurrent, { read: TemplateRef });\n readonly overflowTemplate = contentChild(XuiBreadcrumbsOverflow, { read: TemplateRef });\n\n /** The user-defined classes. Merged last so they win over the base classes. */\n readonly class = input<ClassValue>('');\n readonly items = input.required<readonly T[]>();\n\n /** Which end collapses. A trail collapses from the start, keeping where you are. */\n readonly collapseFrom = input<XuiOverflowBoundary>('start');\n\n /** Never collapse below this many crumbs, however narrow the container gets. */\n readonly minVisibleItems = input<number, NumberInput>(0, { transform: numberAttribute });\n\n /** Emits the collapsed crumbs whenever the set changes. */\n readonly overflow = output<T[]>();\n\n /** Emits when a navigable crumb is activated. A crumb with neither `href` nor `link` is not. */\n readonly itemClick = output<T>();\n\n protected readonly computedClass = computed(() => xui('block min-w-0', this.class()));\n\n /** The last crumb is where you are, unless an item says otherwise. */\n protected isCurrent(index: number): boolean {\n return this.items()[index]?.current ?? index === this.items().length - 1;\n }\n}\n","import { XuiBreadcrumb } from './lib/breadcrumb';\nimport { XuiBreadcrumbEllipsis } from './lib/breadcrumb-ellipsis';\nimport { XuiBreadcrumbItem } from './lib/breadcrumb-item';\nimport { XuiBreadcrumbLink } from './lib/breadcrumb-link';\nimport { XuiBreadcrumbList } from './lib/breadcrumb-list';\nimport { XuiBreadcrumbPage } from './lib/breadcrumb-page';\nimport { XuiBreadcrumbSeparator } from './lib/breadcrumb-separator';\nimport { XuiBreadcrumbs, XuiBreadcrumbsCurrent, XuiBreadcrumbsItem, XuiBreadcrumbsOverflow } from './lib/breadcrumbs';\n\nexport * from './lib/breadcrumb';\nexport * from './lib/breadcrumb-ellipsis';\nexport * from './lib/breadcrumb-item';\nexport * from './lib/breadcrumb-link';\nexport * from './lib/breadcrumb-list';\nexport * from './lib/breadcrumb-page';\nexport * from './lib/breadcrumb-separator';\nexport * from './lib/breadcrumbs';\n\nexport const XuiBreadcrumbImports = [\n XuiBreadcrumb,\n XuiBreadcrumbEllipsis,\n XuiBreadcrumbItem,\n XuiBreadcrumbLink,\n XuiBreadcrumbList,\n XuiBreadcrumbPage,\n XuiBreadcrumbSeparator,\n XuiBreadcrumbs,\n XuiBreadcrumbsCurrent,\n XuiBreadcrumbsItem,\n XuiBreadcrumbsOverflow\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.XuiBreadcrumb"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xui/breadcrumb",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.13",
|
|
4
4
|
"description": "Modern Angular 22 UI Library based on TailwindCSS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"@angular/router": "22",
|
|
43
43
|
"@ng-icons/core": "34",
|
|
44
44
|
"@ng-icons/material-icons": "34",
|
|
45
|
-
"@xui/core": "2.0.0-alpha.
|
|
46
|
-
"@xui/icon": "2.0.0-alpha.
|
|
47
|
-
"@xui/overflow-list": "2.0.0-alpha.
|
|
45
|
+
"@xui/core": "2.0.0-alpha.13",
|
|
46
|
+
"@xui/icon": "2.0.0-alpha.13",
|
|
47
|
+
"@xui/overflow-list": "2.0.0-alpha.13",
|
|
48
48
|
"clsx": "^2.1.1"
|
|
49
49
|
},
|
|
50
50
|
"publishConfig": {
|
|
@@ -10,7 +10,7 @@ declare class XuiBreadcrumb {
|
|
|
10
10
|
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
11
11
|
protected readonly computedClass: _angular_core.Signal<string>;
|
|
12
12
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumb, never>;
|
|
13
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumb, "[xuiBreadcrumb]",
|
|
13
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumb, "[xuiBreadcrumb]", ["xuiBreadcrumb"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
declare class XuiBreadcrumbEllipsis {
|
|
@@ -22,10 +22,10 @@ declare class XuiBreadcrumbEllipsis {
|
|
|
22
22
|
|
|
23
23
|
declare class XuiBreadcrumbItem {
|
|
24
24
|
readonly class: _angular_core.InputSignal<ClassValue>;
|
|
25
|
-
readonly active: _angular_core.InputSignalWithTransform<boolean,
|
|
25
|
+
readonly active: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
26
26
|
protected readonly computedClass: _angular_core.Signal<string>;
|
|
27
27
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbItem, never>;
|
|
28
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbItem, "[xuiBreadcrumbItem]",
|
|
28
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbItem, "[xuiBreadcrumbItem]", ["xuiBreadcrumbItem"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
@@ -49,21 +49,21 @@ declare class XuiBreadcrumbLink {
|
|
|
49
49
|
readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
50
50
|
protected readonly computedClass: _angular_core.Signal<string>;
|
|
51
51
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbLink, never>;
|
|
52
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbLink, "[xuiBreadcrumbLink]",
|
|
52
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbLink, "[xuiBreadcrumbLink]", ["xuiBreadcrumbLink"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
declare class XuiBreadcrumbList {
|
|
56
56
|
readonly class: _angular_core.InputSignal<ClassValue>;
|
|
57
57
|
protected readonly computedClass: _angular_core.Signal<string>;
|
|
58
58
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbList, never>;
|
|
59
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbList, "[xuiBreadcrumbList]",
|
|
59
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbList, "[xuiBreadcrumbList]", ["xuiBreadcrumbList"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
declare class XuiBreadcrumbPage {
|
|
63
63
|
readonly class: _angular_core.InputSignal<ClassValue>;
|
|
64
64
|
protected readonly computedClass: _angular_core.Signal<string>;
|
|
65
65
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbPage, never>;
|
|
66
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbPage, "[xuiBreadcrumbPage]",
|
|
66
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbPage, "[xuiBreadcrumbPage]", ["xuiBreadcrumbPage"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
declare class XuiBreadcrumbSeparator {
|
|
@@ -103,17 +103,17 @@ interface XuiBreadcrumbsOverflowContext<T> {
|
|
|
103
103
|
/** Replaces the default rendering of every crumb. */
|
|
104
104
|
declare class XuiBreadcrumbsItem {
|
|
105
105
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbsItem, never>;
|
|
106
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbsItem, "ng-template[xuiBreadcrumbsItem]",
|
|
106
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbsItem, "ng-template[xuiBreadcrumbsItem]", ["xuiBreadcrumbsItem"], {}, {}, never, never, true, never>;
|
|
107
107
|
}
|
|
108
108
|
/** Replaces the default rendering of the current crumb only. */
|
|
109
109
|
declare class XuiBreadcrumbsCurrent {
|
|
110
110
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbsCurrent, never>;
|
|
111
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbsCurrent, "ng-template[xuiBreadcrumbsCurrent]",
|
|
111
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbsCurrent, "ng-template[xuiBreadcrumbsCurrent]", ["xuiBreadcrumbsCurrent"], {}, {}, never, never, true, never>;
|
|
112
112
|
}
|
|
113
113
|
/** Replaces the ellipsis shown in place of the collapsed crumbs. */
|
|
114
114
|
declare class XuiBreadcrumbsOverflow {
|
|
115
115
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<XuiBreadcrumbsOverflow, never>;
|
|
116
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbsOverflow, "ng-template[xuiBreadcrumbsOverflow]",
|
|
116
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<XuiBreadcrumbsOverflow, "ng-template[xuiBreadcrumbsOverflow]", ["xuiBreadcrumbsOverflow"], {}, {}, never, never, true, never>;
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
119
|
* A breadcrumb trail built from an array, collapsing to fit its container.
|