wally-ui 1.0.17 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -4
- package/package.json +1 -1
- package/playground/showcase/src/app/app.routes.ts +4 -0
- package/playground/showcase/src/app/components/breadcrumb/breadcrumb.html +18 -0
- package/playground/showcase/src/app/components/breadcrumb/breadcrumb.ts +20 -0
- package/playground/showcase/src/app/components/button/button.html +6 -12
- package/playground/showcase/src/app/components/button/button.ts +7 -2
- package/playground/showcase/src/app/core/services/ai-prompt.service.ts +43 -0
- package/playground/showcase/src/app/pages/components/breadcrumb-docs/breadcrumb-docs.html +208 -0
- package/playground/showcase/src/app/pages/components/breadcrumb-docs/breadcrumb-docs.ts +43 -0
- package/playground/showcase/src/app/pages/components/button-docs/button-docs.css +0 -0
- package/playground/showcase/src/app/pages/components/button-docs/button-docs.html +455 -0
- package/playground/showcase/src/app/pages/components/{button/button.spec.ts → button-docs/button-docs.spec.ts} +5 -5
- package/playground/showcase/src/app/pages/components/button-docs/button-docs.ts +41 -0
- package/playground/showcase/src/app/pages/components/components.html +126 -9
- package/playground/showcase/src/app/pages/components/components.routes.ts +5 -1
- package/playground/showcase/src/app/pages/components/components.ts +6 -2
- package/playground/showcase/src/app/pages/home/home.html +16 -4
- package/playground/showcase/src/app/pages/mcp/mcp.css +1 -0
- package/playground/showcase/src/app/pages/mcp/mcp.html +196 -0
- package/playground/showcase/src/app/pages/mcp/mcp.spec.ts +23 -0
- package/playground/showcase/src/app/pages/mcp/mcp.ts +16 -0
- package/playground/showcase/src/app/pages/components/button/button.html +0 -192
- package/playground/showcase/src/app/pages/components/button/button.ts +0 -12
- /package/playground/showcase/src/app/pages/components/{button/button.css → breadcrumb-docs/breadcrumb-docs.css} +0 -0
package/README.md
CHANGED
|
@@ -1,10 +1,79 @@
|
|
|
1
1
|
# Wally UI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A modern Angular component library built with standalone components and Tailwind CSS. Wally UI provides a collection of reusable, accessible components that integrate seamlessly into your Angular applications.
|
|
4
4
|
|
|
5
5
|
**[Live Demo](https://wally-ui.com/)**
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- Built for Angular 17+ with standalone component architecture
|
|
10
|
+
- Server-Side Rendering (SSR) support
|
|
11
|
+
- Dark mode support out of the box
|
|
12
|
+
- Tailwind CSS v3/v4 styling
|
|
13
|
+
- TypeScript interfaces and type safety
|
|
14
|
+
- Individual component installation
|
|
15
|
+
- Zero configuration setup
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
- Angular 17+ (required for standalone component support)
|
|
20
|
+
- Tailwind CSS v3 or v4
|
|
21
|
+
- Node.js 18+
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
Install components individually using the CLI:
|
|
26
|
+
|
|
8
27
|
```bash
|
|
9
|
-
|
|
10
|
-
npx wally-ui
|
|
28
|
+
# Install specific component
|
|
29
|
+
npx wally-ui add button
|
|
30
|
+
|
|
31
|
+
# List all available components
|
|
32
|
+
npx wally-ui list
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Project Structure
|
|
36
|
+
|
|
37
|
+
When installing a component, Wally UI creates the following structure:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
src/
|
|
41
|
+
└── app/
|
|
42
|
+
└── components/
|
|
43
|
+
└── wally-ui/
|
|
44
|
+
└── button/
|
|
45
|
+
├── button.ts
|
|
46
|
+
└── button.html
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Quick Start
|
|
50
|
+
|
|
51
|
+
1. Install a component:
|
|
52
|
+
```bash
|
|
53
|
+
npx wally-ui add button
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
2. Import and use in your component:
|
|
57
|
+
```typescript
|
|
58
|
+
import { Component } from '@angular/core';
|
|
59
|
+
import { Button } from './components/wally-ui/button/button';
|
|
60
|
+
|
|
61
|
+
@Component({
|
|
62
|
+
selector: 'app-example',
|
|
63
|
+
imports: [Button],
|
|
64
|
+
template: `<wally-button text="Click me"></wally-button>`
|
|
65
|
+
})
|
|
66
|
+
export class ExampleComponent {}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Development Status
|
|
70
|
+
|
|
71
|
+
Wally UI is currently in experimental development. Components are being actively developed and new features are continuously added. More components will be available soon.
|
|
72
|
+
|
|
73
|
+
## Documentation
|
|
74
|
+
|
|
75
|
+
Visit [wally-ui.com](https://wally-ui.com/) for complete documentation, examples, and component API references.
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT
|
package/package.json
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<nav class="">
|
|
2
|
+
<div class="flex items-center space-x-2 text-sm text-gray-700 dark:text-gray-400">
|
|
3
|
+
@for (item of items(); track item.label; let isLast = $last) {
|
|
4
|
+
@if (!isLast && item.url) {
|
|
5
|
+
<a
|
|
6
|
+
[routerLink]="item.url"
|
|
7
|
+
class="hover:text-blue-500 transition-colors">
|
|
8
|
+
{{ item.label }}
|
|
9
|
+
</a>
|
|
10
|
+
<span class="text-gray-400 dark:text-gray-600">/</span>
|
|
11
|
+
} @else {
|
|
12
|
+
<span class="text-[#0a0a0a] dark:text-white font-medium">
|
|
13
|
+
{{ item.label }}
|
|
14
|
+
</span>
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
</div>
|
|
18
|
+
</nav>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Component, input, InputSignal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { RouterModule } from '@angular/router';
|
|
4
|
+
|
|
5
|
+
export interface BreadcrumbItem {
|
|
6
|
+
label: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@Component({
|
|
11
|
+
selector: 'wally-breadcrumb',
|
|
12
|
+
imports: [
|
|
13
|
+
CommonModule,
|
|
14
|
+
RouterModule
|
|
15
|
+
],
|
|
16
|
+
templateUrl: './breadcrumb.html',
|
|
17
|
+
})
|
|
18
|
+
export class Breadcrumb {
|
|
19
|
+
items: InputSignal<BreadcrumbItem[]> = input<BreadcrumbItem[]>([]);
|
|
20
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
<button [type]="type()" [disabled]="disabled() || loading()" class="
|
|
1
|
+
<button [type]="type()" [disabled]="disabled() || loading()" (click)="handleClick()" class="
|
|
2
2
|
group
|
|
3
3
|
relative
|
|
4
4
|
w-full
|
|
5
|
-
flex items-center justify-center
|
|
5
|
+
flex items-center justify-center gap-2
|
|
6
|
+
text-white text-sm font-medium dark:text-[#0a0a0a]
|
|
6
7
|
bg-[#0a0a0a] hover:bg-[#0a0a0a]/85
|
|
7
8
|
disabled:bg-[#0a0a0a]/85
|
|
8
9
|
dark:bg-white dark:hover:bg-white/85
|
|
@@ -10,7 +11,7 @@
|
|
|
10
11
|
disabled:pointer-events-none
|
|
11
12
|
p-2.5
|
|
12
13
|
rounded-md
|
|
13
|
-
transition
|
|
14
|
+
transition duration-300 ease-in-out
|
|
14
15
|
antialiased
|
|
15
16
|
cursor-pointer
|
|
16
17
|
">
|
|
@@ -25,7 +26,7 @@
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
@if (loading()) {
|
|
28
|
-
<svg class="
|
|
29
|
+
<svg class="size-4 animate-spin text-white dark:text-[#0a0a0a]" xmlns="http://www.w3.org/2000/svg" fill="none"
|
|
29
30
|
viewBox="0 0 24 24">
|
|
30
31
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
31
32
|
<path class="opacity-75" fill="currentColor"
|
|
@@ -34,12 +35,5 @@
|
|
|
34
35
|
</svg>
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
<
|
|
38
|
-
text-white
|
|
39
|
-
text-sm
|
|
40
|
-
font-medium
|
|
41
|
-
dark:text-[#0a0a0a]
|
|
42
|
-
">
|
|
43
|
-
{{ text() }}
|
|
44
|
-
</span>
|
|
38
|
+
<ng-content></ng-content>
|
|
45
39
|
</button>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, input, InputSignal } from '@angular/core';
|
|
1
|
+
import { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
|
|
4
4
|
@Component({
|
|
@@ -10,9 +10,14 @@ import { CommonModule } from '@angular/common';
|
|
|
10
10
|
templateUrl: './button.html',
|
|
11
11
|
})
|
|
12
12
|
export class Button {
|
|
13
|
-
text: InputSignal<string> = input<string>('Wally Button');
|
|
14
13
|
type: InputSignal<string> = input<string>('button');
|
|
15
14
|
disabled: InputSignal<boolean> = input<boolean>(false);
|
|
16
15
|
loading: InputSignal<boolean> = input<boolean>(false);
|
|
17
16
|
showNotification: InputSignal<boolean> = input<boolean>(false);
|
|
17
|
+
|
|
18
|
+
click: OutputEmitterRef<void> = output<void>();
|
|
19
|
+
|
|
20
|
+
handleClick(): void {
|
|
21
|
+
this.click.emit();
|
|
22
|
+
}
|
|
18
23
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
|
|
2
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Injectable({
|
|
5
|
+
providedIn: 'root'
|
|
6
|
+
})
|
|
7
|
+
export class AiPromptService {
|
|
8
|
+
|
|
9
|
+
constructor(@Inject(PLATFORM_ID) private platformId: Object) {}
|
|
10
|
+
|
|
11
|
+
generateClaudeUrl(pageUrl?: string): string {
|
|
12
|
+
const url = pageUrl || this.getCurrentUrl();
|
|
13
|
+
const basePrompt = `I'm looking at this Wally UI documentation: ${url} Help me understand how to use it. Be ready to explain concepts, give examples, or help debug based on it.`;
|
|
14
|
+
|
|
15
|
+
return `https://claude.ai/new?q=${encodeURIComponent(basePrompt)}`;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
generateChatGptUrl(pageUrl?: string): string {
|
|
19
|
+
const url = pageUrl || this.getCurrentUrl();
|
|
20
|
+
const basePrompt = `I'm looking at this Wally UI documentation: ${url} Help me understand how to use it. Be ready to explain concepts, give examples, or help debug based on it.`;
|
|
21
|
+
|
|
22
|
+
return `https://chatgpt.com/?prompt=${encodeURIComponent(basePrompt)}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private getCurrentUrl(): string {
|
|
26
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
27
|
+
return window.location.href;
|
|
28
|
+
}
|
|
29
|
+
// Fallback for SSR - you can customize this
|
|
30
|
+
return 'https://wally-ui.com/components/button';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
generateCustomPromptUrl(aiService: 'claude' | 'chatgpt', customPrompt: string, pageUrl?: string): string {
|
|
34
|
+
const url = pageUrl || this.getCurrentUrl();
|
|
35
|
+
const fullPrompt = `${customPrompt} ${url}`;
|
|
36
|
+
|
|
37
|
+
if (aiService === 'claude') {
|
|
38
|
+
return `https://claude.ai/new?q=${encodeURIComponent(fullPrompt)}`;
|
|
39
|
+
} else {
|
|
40
|
+
return `https://chatgpt.com/?prompt=${encodeURIComponent(fullPrompt)}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
<div class="font-mono">
|
|
2
|
+
<div class="max-w-4xl mx-auto p-6">
|
|
3
|
+
<div class="mb-4">
|
|
4
|
+
<wally-breadcrumb [items]="breadcrumbItems"></wally-breadcrumb>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<h1 class="text-2xl font-bold mb-4 text-[#0a0a0a] dark:text-white">
|
|
8
|
+
Breadcrumb
|
|
9
|
+
</h1>
|
|
10
|
+
<p class="text-gray-700 dark:text-gray-400 mb-6">
|
|
11
|
+
A navigation component that shows the current page location within a hierarchy.
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<div class="flex flex-wrap gap-2 mb-6">
|
|
15
|
+
<a [href]="claudeUrl" target="_blank"
|
|
16
|
+
class="inline-flex items-center gap-2 px-3 py-1.5 text-xs bg-gray-200 dark:bg-[#121212] text-gray-600 dark:text-gray-300 rounded-lg hover:bg-gray-300 dark:hover:bg-[#1a1a1a] hover:text-[#0a0a0a] dark:hover:text-white transition-colors">
|
|
17
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6" viewBox="0 0 24 24">
|
|
18
|
+
<path fill="currentColor"
|
|
19
|
+
d="m4.714 15.956l4.718-2.648l.079-.23l-.08-.128h-.23l-.79-.048l-2.695-.073l-2.337-.097l-2.265-.122l-.57-.121l-.535-.704l.055-.353l.48-.321l.685.06l1.518.104l2.277.157l1.651.098l2.447.255h.389l.054-.158l-.133-.097l-.103-.098l-2.356-1.596l-2.55-1.688l-1.336-.972l-.722-.491L2 6.223l-.158-1.008l.656-.722l.88.06l.224.061l.893.686l1.906 1.476l2.49 1.833l.364.304l.146-.104l.018-.072l-.164-.274l-1.354-2.446l-1.445-2.49l-.644-1.032l-.17-.619a3 3 0 0 1-.103-.729L6.287.133L6.7 0l.995.134l.42.364l.619 1.415L9.735 4.14l1.555 3.03l.455.898l.243.832l.09.255h.159V9.01l.127-1.706l.237-2.095l.23-2.695l.08-.76l.376-.91l.747-.492l.583.28l.48.685l-.067.444l-.286 1.851l-.558 2.903l-.365 1.942h.213l.243-.242l.983-1.306l1.652-2.064l.728-.82l.85-.904l.547-.431h1.032l.759 1.129l-.34 1.166l-1.063 1.347l-.88 1.142l-1.263 1.7l-.79 1.36l.074.11l.188-.02l2.853-.606l1.542-.28l1.84-.315l.832.388l.09.395l-.327.807l-1.967.486l-2.307.462l-3.436.813l-.043.03l.049.061l1.548.146l.662.036h1.62l3.018.225l.79.522l.473.638l-.08.485l-1.213.62l-1.64-.389l-3.825-.91l-1.31-.329h-.183v.11l1.093 1.068l2.003 1.81l2.508 2.33l.127.578l-.321.455l-.34-.049l-2.204-1.657l-.85-.747l-1.925-1.62h-.127v.17l.443.649l2.343 3.521l.122 1.08l-.17.353l-.607.213l-.668-.122l-1.372-1.924l-1.415-2.168l-1.141-1.943l-.14.08l-.674 7.254l-.316.37l-.728.28l-.607-.461l-.322-.747l.322-1.476l.388-1.924l.316-1.53l.285-1.9l.17-.632l-.012-.042l-.14.018l-1.432 1.967l-2.18 2.945l-1.724 1.845l-.413.164l-.716-.37l.066-.662l.401-.589l2.386-3.036l1.439-1.882l.929-1.086l-.006-.158h-.055L4.138 18.56l-1.13.146l-.485-.456l.06-.746l.231-.243l1.907-1.312Z" />
|
|
20
|
+
</svg>
|
|
21
|
+
|
|
22
|
+
Open in Claude
|
|
23
|
+
</a>
|
|
24
|
+
|
|
25
|
+
<a [href]="chatGptUrl" target="_blank"
|
|
26
|
+
class="inline-flex items-center gap-2 px-3 py-1.5 text-xs bg-gray-200 dark:bg-[#121212] text-gray-600 dark:text-gray-300 rounded-lg hover:bg-gray-300 dark:hover:bg-[#1a1a1a] hover:text-[#0a0a0a] dark:hover:text-white transition-colors">
|
|
27
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6" viewBox="0 0 48 48">
|
|
28
|
+
<path fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"
|
|
29
|
+
d="M18.38 27.94v-14.4l11.19-6.46c6.2-3.58 17.3 5.25 12.64 13.33" />
|
|
30
|
+
<path fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"
|
|
31
|
+
d="m18.38 20.94l12.47-7.2l11.19 6.46c6.2 3.58 4.1 17.61-5.23 17.61" />
|
|
32
|
+
<path fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"
|
|
33
|
+
d="m24.44 17.44l12.47 7.2v12.93c0 7.16-13.2 12.36-17.86 4.28" />
|
|
34
|
+
<path fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"
|
|
35
|
+
d="M30.5 21.2v14.14L19.31 41.8c-6.2 3.58-17.3-5.25-12.64-13.33" />
|
|
36
|
+
<path fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"
|
|
37
|
+
d="m30.5 27.94l-12.47 7.2l-11.19-6.46c-6.21-3.59-4.11-17.61 5.22-17.61" />
|
|
38
|
+
<path fill="none" stroke="currentColor" stroke-width="3" stroke-linejoin="round"
|
|
39
|
+
d="m24.44 31.44l-12.47-7.2V11.31c0-7.16 13.2-12.36 17.86-4.28" />
|
|
40
|
+
</svg>
|
|
41
|
+
|
|
42
|
+
Open in ChatGPT
|
|
43
|
+
</a>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<!-- Installation -->
|
|
47
|
+
<section class="mb-8">
|
|
48
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Installation</h2>
|
|
49
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg">
|
|
50
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
51
|
+
npx wally-ui add breadcrumb
|
|
52
|
+
</code>
|
|
53
|
+
</div>
|
|
54
|
+
</section>
|
|
55
|
+
|
|
56
|
+
<!-- Preview -->
|
|
57
|
+
<section class="mb-8">
|
|
58
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">
|
|
59
|
+
Preview
|
|
60
|
+
</h2>
|
|
61
|
+
<div class="p-6 border rounded-lg bg-white dark:bg-[#121212] h-60">
|
|
62
|
+
<div class="flex items-center justify-center h-full">
|
|
63
|
+
<wally-breadcrumb [items]="exampleBreadcrumbs"></wally-breadcrumb>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</section>
|
|
67
|
+
|
|
68
|
+
<!-- Import -->
|
|
69
|
+
<section class="mb-8">
|
|
70
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Import</h2>
|
|
71
|
+
<div class="space-y-4">
|
|
72
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg">
|
|
73
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
74
|
+
import {{ '{' }} Breadcrumb, BreadcrumbItem {{ '}' }} from './components/wally-ui/breadcrumb/breadcrumb';
|
|
75
|
+
</code>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg">
|
|
79
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
80
|
+
@Component({{ '{' }}<br>
|
|
81
|
+
selector: 'app-example',<br>
|
|
82
|
+
imports: [Breadcrumb],<br>
|
|
83
|
+
templateUrl: './example.html',<br>
|
|
84
|
+
styleUrl: './example.css'<br>
|
|
85
|
+
{{ '}' }})
|
|
86
|
+
</code>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</section>
|
|
90
|
+
|
|
91
|
+
<!-- Basic Usage -->
|
|
92
|
+
<section class="mb-8">
|
|
93
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Basic Usage</h2>
|
|
94
|
+
|
|
95
|
+
<div class="space-y-8">
|
|
96
|
+
<div>
|
|
97
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg mb-4">
|
|
98
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
99
|
+
{{ '<' }}wally-breadcrumb [items]="breadcrumbItems"{{ '>' }}{{ '<' }}/wally-breadcrumb{{ '>' }}
|
|
100
|
+
</code>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="p-6 border rounded-lg bg-white dark:bg-[#121212]">
|
|
103
|
+
<wally-breadcrumb [items]="simpleBreadcrumbs"></wally-breadcrumb>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</section>
|
|
108
|
+
|
|
109
|
+
<!-- Examples -->
|
|
110
|
+
<section class="mb-8">
|
|
111
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Examples</h2>
|
|
112
|
+
|
|
113
|
+
<div class="space-y-8">
|
|
114
|
+
<!-- Multi-level Breadcrumb -->
|
|
115
|
+
<div>
|
|
116
|
+
<h3 class="text-md font-medium mb-3 text-[#0a0a0a] dark:text-white">Multi-level Navigation</h3>
|
|
117
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg mb-4">
|
|
118
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
119
|
+
breadcrumbItems: BreadcrumbItem[] = [<br>
|
|
120
|
+
{{ '{' }} label: 'Home', url: '/' {{ '}' }},<br>
|
|
121
|
+
{{ '{' }} label: 'Components', url: '/components' {{ '}' }},<br>
|
|
122
|
+
{{ '{' }} label: 'Button' {{ '}' }}<br>
|
|
123
|
+
];
|
|
124
|
+
</code>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="p-6 border rounded-lg bg-white dark:bg-[#121212]">
|
|
127
|
+
<wally-breadcrumb [items]="exampleBreadcrumbs"></wally-breadcrumb>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<!-- Single Item -->
|
|
132
|
+
<div>
|
|
133
|
+
<h3 class="text-md font-medium mb-3 text-[#0a0a0a] dark:text-white">Single Item</h3>
|
|
134
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg mb-4">
|
|
135
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
136
|
+
breadcrumbItems: BreadcrumbItem[] = [<br>
|
|
137
|
+
{{ '{' }} label: 'Components' {{ '}' }}<br>
|
|
138
|
+
];
|
|
139
|
+
</code>
|
|
140
|
+
</div>
|
|
141
|
+
<div class="p-6 border rounded-lg bg-white dark:bg-[#121212]">
|
|
142
|
+
<wally-breadcrumb [items]="simpleBreadcrumbs"></wally-breadcrumb>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</section>
|
|
147
|
+
|
|
148
|
+
<!-- Properties -->
|
|
149
|
+
<section class="mb-8">
|
|
150
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Properties</h2>
|
|
151
|
+
|
|
152
|
+
<div class="space-y-4">
|
|
153
|
+
<div class="p-4 bg-gray-200 dark:bg-[#121212] rounded-lg">
|
|
154
|
+
<div class="font-mono text-sm mb-2">
|
|
155
|
+
<span class="text-blue-600 dark:text-blue-400">items</span><span class="text-[#0a0a0a] dark:text-white">:
|
|
156
|
+
</span>
|
|
157
|
+
<span class="text-purple-600 dark:text-purple-400">BreadcrumbItem[]</span> <span
|
|
158
|
+
class="text-[#0a0a0a] dark:text-white"> = </span>
|
|
159
|
+
<span class="text-green-600 dark:text-green-400">[]</span>
|
|
160
|
+
<span class="text-[#0a0a0a] dark:text-white">;</span>
|
|
161
|
+
</div>
|
|
162
|
+
<p class="text-sm text-gray-700 dark:text-gray-400">Array of breadcrumb items to display</p>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
</section>
|
|
166
|
+
|
|
167
|
+
<!-- Interface -->
|
|
168
|
+
<section class="mb-8">
|
|
169
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Interface</h2>
|
|
170
|
+
|
|
171
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg">
|
|
172
|
+
<code class="text-sm text-[#0a0a0a] dark:text-white">
|
|
173
|
+
interface BreadcrumbItem {{ '{' }}<br>
|
|
174
|
+
label: string;<br>
|
|
175
|
+
url?: string;<br>
|
|
176
|
+
{{ '}' }}
|
|
177
|
+
</code>
|
|
178
|
+
</div>
|
|
179
|
+
</section>
|
|
180
|
+
|
|
181
|
+
<!-- Under Construction -->
|
|
182
|
+
<section class="mb-8">
|
|
183
|
+
<h2 class="text-lg font-semibold mb-4 text-[#0a0a0a] dark:text-white">Under Construction</h2>
|
|
184
|
+
|
|
185
|
+
<div class="space-y-4">
|
|
186
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg">
|
|
187
|
+
<div class="flex items-center gap-2 mb-2">
|
|
188
|
+
<h3 class="text-md font-medium text-[#0a0a0a] dark:text-white">Custom Separators</h3>
|
|
189
|
+
<span class="text-xs bg-yellow-500 text-black px-2 py-1 rounded">Under Construction</span>
|
|
190
|
+
</div>
|
|
191
|
+
<p class="text-sm text-gray-700 dark:text-gray-400">
|
|
192
|
+
Support for custom separator characters and icons between breadcrumb items.
|
|
193
|
+
</p>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<div class="bg-gray-200 dark:bg-[#121212] p-4 rounded-lg">
|
|
197
|
+
<div class="flex items-center gap-2 mb-2">
|
|
198
|
+
<h3 class="text-md font-medium text-[#0a0a0a] dark:text-white">Dropdown Overflow</h3>
|
|
199
|
+
<span class="text-xs bg-yellow-500 text-black px-2 py-1 rounded">Under Construction</span>
|
|
200
|
+
</div>
|
|
201
|
+
<p class="text-sm text-gray-700 dark:text-gray-400">
|
|
202
|
+
Collapse breadcrumb items into a dropdown when there are too many to display.
|
|
203
|
+
</p>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</section>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
import { Breadcrumb, BreadcrumbItem } from '../../../components/breadcrumb/breadcrumb';
|
|
4
|
+
|
|
5
|
+
import { AiPromptService } from '../../../core/services/ai-prompt.service';
|
|
6
|
+
|
|
7
|
+
@Component({
|
|
8
|
+
selector: 'app-breadcrumb-docs',
|
|
9
|
+
imports: [
|
|
10
|
+
Breadcrumb
|
|
11
|
+
],
|
|
12
|
+
templateUrl: './breadcrumb-docs.html',
|
|
13
|
+
styleUrl: './breadcrumb-docs.css'
|
|
14
|
+
})
|
|
15
|
+
export class BreadcrumbDocs {
|
|
16
|
+
breadcrumbItems: BreadcrumbItem[] = [
|
|
17
|
+
{ label: 'Home', url: '/' },
|
|
18
|
+
{ label: 'Components', url: '/components' },
|
|
19
|
+
{ label: 'Breadcrumb' }
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
exampleBreadcrumbs: BreadcrumbItem[] = [
|
|
23
|
+
{ label: 'Home', url: '/' },
|
|
24
|
+
{ label: 'Components', url: '/components' },
|
|
25
|
+
{ label: 'Breadcrumb' }
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
simpleBreadcrumbs: BreadcrumbItem[] = [
|
|
29
|
+
{ label: 'Components' }
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
constructor(
|
|
33
|
+
private aiPromptService: AiPromptService
|
|
34
|
+
) { }
|
|
35
|
+
|
|
36
|
+
get claudeUrl(): string {
|
|
37
|
+
return this.aiPromptService.generateClaudeUrl();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get chatGptUrl(): string {
|
|
41
|
+
return this.aiPromptService.generateChatGptUrl();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
File without changes
|