wally-ui 1.11.0 β 1.11.2
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 +89 -93
- package/package.json +1 -1
- package/playground/showcase/src/app/components/carousel/carousel.ts +2 -1
- package/playground/showcase/src/app/pages/documentation/components/breadcrumb-docs/breadcrumb-docs.html +186 -114
- package/playground/showcase/src/app/pages/documentation/components/button-docs/button-docs.examples.ts +114 -0
- package/playground/showcase/src/app/pages/documentation/components/button-docs/button-docs.html +516 -248
- package/playground/showcase/src/app/pages/documentation/components/button-docs/button-docs.ts +11 -0
- package/playground/showcase/src/app/pages/documentation/components/carousel-docs/carousel-docs.html +326 -253
- package/playground/showcase/src/app/pages/documentation/components/components.html +136 -74
- package/playground/showcase/src/app/pages/documentation/components/input-docs/input-docs.html +370 -292
- package/playground/showcase/src/app/pages/documentation/documentation.html +204 -153
- package/playground/showcase/src/app/pages/home/home.html +153 -50
- package/playground/showcase/src/app/pages/home/home.ts +2 -1
- package/playground/showcase/src/app/pages/mcp/mcp.html +235 -179
package/README.md
CHANGED
|
@@ -1,161 +1,157 @@
|
|
|
1
1
|
# Wally UI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A modern Angular component library with individual component installation, Tailwind CSS styling, and enterprise-grade accessibility.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/wally-ui)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
-
**[Live
|
|
8
|
+
**[Live Documentation](https://wally-ui.com/)**
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Installation
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
- **Tailwind Powered**: Beautiful, customizable styling with Tailwind CSS v3/v4
|
|
17
|
-
|
|
18
|
-
## Requirements
|
|
12
|
+
### List all available components
|
|
13
|
+
```bash
|
|
14
|
+
npx wally-ui list
|
|
15
|
+
```
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
### Install a component
|
|
18
|
+
```bash
|
|
19
|
+
npx wally-ui add button
|
|
20
|
+
npx wally-ui add input
|
|
21
|
+
npx wally-ui add carousel
|
|
22
|
+
npx wally-ui add breadcrumb
|
|
23
|
+
```
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
Components are installed directly into `src/app/components/wally-ui/{component}/`
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|-----------|--------|-------------|
|
|
27
|
-
| **Input** | β
**New** | Full-featured input with validation, loading states, and FormGroup support |
|
|
28
|
-
| **Button** | π§ Under Construction | Versatile button with loading states and notifications |
|
|
29
|
-
| **Breadcrumb** | π§ Under Construction | Navigation breadcrumb component |
|
|
27
|
+
## Requirements
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
- Tailwind CSS v3 or v4
|
|
30
|
+
- Node.js 18+
|
|
31
|
+
- Angular 17+
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
# Install the Input component (recommended for forms)
|
|
36
|
-
npx wally-ui add input
|
|
33
|
+
## Available Components
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
| Component | Status | Features |
|
|
36
|
+
|-----------|--------|----------|
|
|
37
|
+
| **Button** | Production | Variants (primary, secondary), loading states, ARIA support |
|
|
38
|
+
| **Input** | Production | Form integration, validation, password toggle, loading states |
|
|
39
|
+
| **Carousel** | Production | Touch gestures, keyboard navigation, circular buffer algorithm |
|
|
40
|
+
| **Breadcrumb** | Production | Semantic HTML, ARIA navigation, responsive design |
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
npx wally-ui list
|
|
43
|
-
```
|
|
42
|
+
## Quick Start
|
|
44
43
|
|
|
45
|
-
###
|
|
44
|
+
### Basic Usage
|
|
46
45
|
```typescript
|
|
47
46
|
import { Component } from '@angular/core';
|
|
48
|
-
import {
|
|
47
|
+
import { Button } from './components/wally-ui/button/button';
|
|
49
48
|
|
|
50
49
|
@Component({
|
|
51
50
|
selector: 'app-example',
|
|
52
|
-
imports: [
|
|
51
|
+
imports: [Button],
|
|
53
52
|
template: `
|
|
54
|
-
<wally-
|
|
55
|
-
label="Email Address"
|
|
56
|
-
type="email"
|
|
57
|
-
placeholder="Enter your email">
|
|
58
|
-
</wally-input>
|
|
53
|
+
<wally-button variant="primary">Click me</wally-button>
|
|
59
54
|
`
|
|
60
55
|
})
|
|
61
56
|
export class ExampleComponent {}
|
|
62
57
|
```
|
|
63
58
|
|
|
64
|
-
###
|
|
59
|
+
### Reactive Forms Integration
|
|
65
60
|
```typescript
|
|
66
|
-
import {
|
|
61
|
+
import { Component } from '@angular/core';
|
|
62
|
+
import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
67
63
|
import { Input } from './components/wally-ui/input/input';
|
|
68
64
|
|
|
69
65
|
@Component({
|
|
66
|
+
selector: 'app-form',
|
|
70
67
|
imports: [Input, ReactiveFormsModule],
|
|
71
68
|
template: `
|
|
72
|
-
<form [formGroup]="
|
|
69
|
+
<form [formGroup]="form">
|
|
73
70
|
<wally-input
|
|
74
71
|
formControlName="email"
|
|
75
72
|
label="Email"
|
|
76
|
-
type="email"
|
|
77
|
-
[valid]="isFieldValid('email')"
|
|
78
|
-
[errorMessage]="getFieldError('email')">
|
|
73
|
+
type="email">
|
|
79
74
|
</wally-input>
|
|
80
75
|
</form>
|
|
81
76
|
`
|
|
82
77
|
})
|
|
83
78
|
export class FormComponent {
|
|
84
|
-
|
|
79
|
+
form = this.fb.group({
|
|
85
80
|
email: ['', [Validators.required, Validators.email]]
|
|
86
81
|
});
|
|
82
|
+
|
|
83
|
+
constructor(private fb: FormBuilder) {}
|
|
87
84
|
}
|
|
88
85
|
```
|
|
89
86
|
|
|
90
|
-
##
|
|
87
|
+
## Component Examples
|
|
91
88
|
|
|
92
|
-
|
|
89
|
+
### Button Component
|
|
90
|
+
```html
|
|
91
|
+
<!-- Variants -->
|
|
92
|
+
<wally-button variant="primary">Primary Button</wally-button>
|
|
93
|
+
<wally-button variant="secondary">Secondary Button</wally-button>
|
|
93
94
|
|
|
95
|
+
<!-- States -->
|
|
96
|
+
<wally-button [loading]="true">Loading...</wally-button>
|
|
97
|
+
<wally-button [disabled]="true">Disabled</wally-button>
|
|
94
98
|
```
|
|
95
|
-
src/app/components/wally-ui/
|
|
96
|
-
βββ input/
|
|
97
|
-
β βββ input.ts # Component logic with Angular signals
|
|
98
|
-
β βββ input.html # Template with Tailwind styling
|
|
99
|
-
βββ button/
|
|
100
|
-
βββ button.ts
|
|
101
|
-
βββ button.html
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Features Showcase
|
|
105
99
|
|
|
106
|
-
### Input Component
|
|
100
|
+
### Input Component
|
|
107
101
|
```html
|
|
108
|
-
<!--
|
|
102
|
+
<!-- Basic input -->
|
|
109
103
|
<wally-input label="Username" placeholder="Enter username"></wally-input>
|
|
110
|
-
<wally-input [loading]="true" placeholder="Processing..."></wally-input>
|
|
111
|
-
<wally-input [valid]="true" placeholder="Valid input"></wally-input>
|
|
112
|
-
<wally-input errorMessage="Field is required"></wally-input>
|
|
113
|
-
<wally-input [disabled]="true" placeholder="Disabled input"></wally-input>
|
|
114
104
|
|
|
115
105
|
<!-- Password with toggle -->
|
|
116
106
|
<wally-input type="password" label="Password"></wally-input>
|
|
117
107
|
|
|
118
|
-
<!--
|
|
119
|
-
<wally-input
|
|
108
|
+
<!-- States -->
|
|
109
|
+
<wally-input [loading]="true"></wally-input>
|
|
110
|
+
<wally-input [valid]="true"></wally-input>
|
|
111
|
+
<wally-input errorMessage="Required field"></wally-input>
|
|
120
112
|
```
|
|
121
113
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
|
|
114
|
+
### Carousel Component
|
|
115
|
+
```html
|
|
116
|
+
<wally-carousel>
|
|
117
|
+
<div>Slide 1</div>
|
|
118
|
+
<div>Slide 2</div>
|
|
119
|
+
<div>Slide 3</div>
|
|
120
|
+
</wally-carousel>
|
|
121
|
+
```
|
|
130
122
|
|
|
131
|
-
|
|
123
|
+
### Breadcrumb Component
|
|
124
|
+
```html
|
|
125
|
+
<wally-breadcrumb [items]="[
|
|
126
|
+
{ label: 'Home', link: '/' },
|
|
127
|
+
{ label: 'Components', link: '/components' },
|
|
128
|
+
{ label: 'Button' }
|
|
129
|
+
]"></wally-breadcrumb>
|
|
130
|
+
```
|
|
132
131
|
|
|
133
|
-
|
|
132
|
+
## Project Structure
|
|
134
133
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
-
|
|
138
|
-
|
|
134
|
+
Components install into:
|
|
135
|
+
```
|
|
136
|
+
src/app/components/wally-ui/{component}/
|
|
137
|
+
βββ {component}.ts # Component logic
|
|
138
|
+
βββ {component}.html # Template
|
|
139
|
+
```
|
|
139
140
|
|
|
140
|
-
##
|
|
141
|
+
## Features
|
|
141
142
|
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
143
|
+
- Zero configuration - install only what you need
|
|
144
|
+
- Enterprise-grade accessibility with ARIA support
|
|
145
|
+
- Dark mode support out of the box
|
|
146
|
+
- Server-Side Rendering compatible
|
|
147
|
+
- Angular Signals architecture
|
|
148
|
+
- TypeScript interfaces included
|
|
149
|
+
- Copy-paste ready examples
|
|
145
150
|
|
|
146
|
-
##
|
|
151
|
+
## Documentation
|
|
147
152
|
|
|
148
|
-
|
|
149
|
-
- [ ] **Modal Component** - Overlay dialogs and popups
|
|
150
|
-
- [ ] **Table Component** - Data tables with sorting and pagination
|
|
151
|
-
- [ ] **Form Component** - Complete form wrapper with validation
|
|
152
|
-
- [ ] **Card Component** - Content containers
|
|
153
|
-
- [ ] **Badge Component** - Status indicators
|
|
153
|
+
Full documentation and live examples: **[wally-ui.com](https://wally-ui.com/)**
|
|
154
154
|
|
|
155
155
|
## License
|
|
156
156
|
|
|
157
|
-
MIT
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
**Built with for the Angular community**
|
|
157
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Component, signal, ViewChild, ElementRef, AfterViewInit, Renderer2, OnDestroy, HostListener, WritableSignal, input, InputSignal } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { it } from 'node:test';
|
|
3
4
|
|
|
4
5
|
@Component({
|
|
5
6
|
selector: 'wally-carousel',
|
|
6
7
|
imports: [CommonModule],
|
|
7
8
|
templateUrl: './carousel.html',
|
|
8
9
|
})
|
|
9
|
-
export class Carousel implements AfterViewInit
|
|
10
|
+
export class Carousel implements AfterViewInit {
|
|
10
11
|
@ViewChild('carouselContainer', { static: false }) carouselContainer!: ElementRef;
|
|
11
12
|
|
|
12
13
|
isNavigationIndicator: InputSignal<boolean> = input<boolean>(false);
|