uisuite 1.0.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 +225 -0
- package/esm2022/lib/button/button.component.mjs +91 -0
- package/esm2022/public-api.mjs +10 -0
- package/esm2022/uisuite.mjs +5 -0
- package/fesm2022/uisuite.mjs +106 -0
- package/fesm2022/uisuite.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/button/button.component.d.ts +52 -0
- package/package.json +44 -0
- package/public-api.d.ts +2 -0
- package/uisuite-1.0.0.tgz +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# UIsuite
|
|
2
|
+
|
|
3
|
+
Enterprise-grade Angular UI component library designed for ERP SAAS applications and enterprise software. Built with a focus on consistency, accessibility, and designer-friendly customization.
|
|
4
|
+
|
|
5
|
+
## 🚀 Features
|
|
6
|
+
|
|
7
|
+
- ✨ **Modern & Clean Design** - Professional UI components that look great out of the box
|
|
8
|
+
- 🎨 **Fully Customizable** - CSS custom properties for easy theming
|
|
9
|
+
- ♿ **Accessible** - WCAG compliant with proper ARIA attributes and keyboard navigation
|
|
10
|
+
- 📦 **Tree-shakeable** - Only import what you need
|
|
11
|
+
- 🔧 **Reactive Forms Support** - Full integration with Angular reactive forms
|
|
12
|
+
- 📱 **Responsive** - Mobile-first design approach
|
|
13
|
+
- 🎯 **TypeScript** - Full type safety and IntelliSense support
|
|
14
|
+
|
|
15
|
+
## 📦 Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install uisuite
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 🎯 Quick Start
|
|
22
|
+
|
|
23
|
+
### 1. Import Components
|
|
24
|
+
|
|
25
|
+
UIsuite uses standalone components, so you can import them directly:
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { Component } from '@angular/core';
|
|
29
|
+
import { UiButtonComponent, UiInputComponent, UiModalComponent } from 'uisuite';
|
|
30
|
+
|
|
31
|
+
@Component({
|
|
32
|
+
selector: 'app-root',
|
|
33
|
+
standalone: true,
|
|
34
|
+
imports: [UiButtonComponent, UiInputComponent, UiModalComponent],
|
|
35
|
+
template: `
|
|
36
|
+
<ui-button variant="primary">Click Me</ui-button>
|
|
37
|
+
<ui-input placeholder="Enter text"></ui-input>
|
|
38
|
+
`
|
|
39
|
+
})
|
|
40
|
+
export class AppComponent {}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Import Styles
|
|
44
|
+
|
|
45
|
+
Add the UIsuite stylesheet to your global styles (e.g., `styles.scss`):
|
|
46
|
+
|
|
47
|
+
```scss
|
|
48
|
+
@import 'uisuite/styles/uisuite';
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Or import in your `angular.json`:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"styles": [
|
|
56
|
+
"node_modules/uisuite/styles/uisuite.scss",
|
|
57
|
+
"src/styles.scss"
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 📚 Components
|
|
63
|
+
|
|
64
|
+
### Button
|
|
65
|
+
|
|
66
|
+
Versatile button component with multiple variants and sizes.
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<ui-button variant="primary" size="medium">Primary Button</ui-button>
|
|
70
|
+
<ui-button variant="secondary">Secondary Button</ui-button>
|
|
71
|
+
<ui-button variant="outline">Outline Button</ui-button>
|
|
72
|
+
<ui-button variant="ghost">Ghost Button</ui-button>
|
|
73
|
+
<ui-button variant="danger">Danger Button</ui-button>
|
|
74
|
+
<ui-button [loading]="true">Loading...</ui-button>
|
|
75
|
+
<ui-button [disabled]="true">Disabled</ui-button>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Props:**
|
|
79
|
+
- `variant`: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'
|
|
80
|
+
- `size`: 'small' | 'medium' | 'large'
|
|
81
|
+
- `disabled`: boolean
|
|
82
|
+
- `loading`: boolean
|
|
83
|
+
- `fullWidth`: boolean
|
|
84
|
+
|
|
85
|
+
### Input
|
|
86
|
+
|
|
87
|
+
Form input with validation states and character counting.
|
|
88
|
+
|
|
89
|
+
```html
|
|
90
|
+
<ui-input
|
|
91
|
+
type="email"
|
|
92
|
+
placeholder="Enter email"
|
|
93
|
+
[formControl]="emailControl"
|
|
94
|
+
></ui-input>
|
|
95
|
+
|
|
96
|
+
<ui-input
|
|
97
|
+
placeholder="With character limit"
|
|
98
|
+
[maxLength]="100"
|
|
99
|
+
[showCharCount]="true"
|
|
100
|
+
></ui-input>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Props:**
|
|
104
|
+
- `type`: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search'
|
|
105
|
+
- `size`: 'small' | 'medium' | 'large'
|
|
106
|
+
- `placeholder`: string
|
|
107
|
+
- `disabled`: boolean
|
|
108
|
+
- `readonly`: boolean
|
|
109
|
+
- `required`: boolean
|
|
110
|
+
- `invalid`: boolean
|
|
111
|
+
- `maxLength`: number
|
|
112
|
+
- `showCharCount`: boolean
|
|
113
|
+
|
|
114
|
+
### Checkbox
|
|
115
|
+
|
|
116
|
+
Checkbox with indeterminate state support.
|
|
117
|
+
|
|
118
|
+
```html
|
|
119
|
+
<ui-checkbox label="Accept terms"></ui-checkbox>
|
|
120
|
+
<ui-checkbox [formControl]="agreeControl">I agree</ui-checkbox>
|
|
121
|
+
<ui-checkbox [indeterminate]="true"></ui-checkbox>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Props:**
|
|
125
|
+
- `label`: string
|
|
126
|
+
- `disabled`: boolean
|
|
127
|
+
- `indeterminate`: boolean
|
|
128
|
+
|
|
129
|
+
### Modal
|
|
130
|
+
|
|
131
|
+
Flexible modal/dialog component.
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<ui-modal
|
|
135
|
+
[(isOpen)]="showModal"
|
|
136
|
+
title="Confirm Action"
|
|
137
|
+
size="medium"
|
|
138
|
+
[showFooter]="true"
|
|
139
|
+
>
|
|
140
|
+
<p>Are you sure you want to proceed?</p>
|
|
141
|
+
|
|
142
|
+
<div modal-footer>
|
|
143
|
+
<ui-button variant="ghost" (click)="showModal = false">Cancel</ui-button>
|
|
144
|
+
<ui-button variant="primary" (click)="confirm()">Confirm</ui-button>
|
|
145
|
+
</div>
|
|
146
|
+
</ui-modal>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Props:**
|
|
150
|
+
- `isOpen`: boolean
|
|
151
|
+
- `title`: string
|
|
152
|
+
- `size`: 'small' | 'medium' | 'large' | 'fullscreen'
|
|
153
|
+
- `showHeader`: boolean
|
|
154
|
+
- `showFooter`: boolean
|
|
155
|
+
- `showCloseButton`: boolean
|
|
156
|
+
- `closeOnBackdropClick`: boolean
|
|
157
|
+
- `closeOnEscape`: boolean
|
|
158
|
+
|
|
159
|
+
**Events:**
|
|
160
|
+
- `(closed)`: Emitted when modal closes
|
|
161
|
+
- `(opened)`: Emitted when modal opens
|
|
162
|
+
|
|
163
|
+
## 🎨 Theming
|
|
164
|
+
|
|
165
|
+
UIsuite uses CSS custom properties for easy customization. Override these variables in your global stylesheet:
|
|
166
|
+
|
|
167
|
+
```css
|
|
168
|
+
:root {
|
|
169
|
+
/* Primary colors */
|
|
170
|
+
--ui-color-primary-600: #your-brand-color;
|
|
171
|
+
--ui-color-primary-700: #your-brand-color-dark;
|
|
172
|
+
|
|
173
|
+
/* Spacing */
|
|
174
|
+
--ui-spacing-4: 1rem;
|
|
175
|
+
|
|
176
|
+
/* Border radius */
|
|
177
|
+
--ui-radius-md: 0.5rem;
|
|
178
|
+
|
|
179
|
+
/* Typography */
|
|
180
|
+
--ui-font-family-base: 'Your Font', sans-serif;
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## 🔧 Reactive Forms Integration
|
|
185
|
+
|
|
186
|
+
All form components implement `ControlValueAccessor` for seamless integration with Angular reactive forms:
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
190
|
+
import { UiInputComponent, UiCheckboxComponent } from 'uisuite';
|
|
191
|
+
|
|
192
|
+
@Component({
|
|
193
|
+
selector: 'app-form',
|
|
194
|
+
standalone: true,
|
|
195
|
+
imports: [ReactiveFormsModule, UiInputComponent, UiCheckboxComponent],
|
|
196
|
+
template: `
|
|
197
|
+
<form [formGroup]="form">
|
|
198
|
+
<ui-input formControlName="email" type="email"></ui-input>
|
|
199
|
+
<ui-checkbox formControlName="agree"></ui-checkbox>
|
|
200
|
+
</form>
|
|
201
|
+
`
|
|
202
|
+
})
|
|
203
|
+
export class FormComponent {
|
|
204
|
+
form = new FormGroup({
|
|
205
|
+
email: new FormControl(''),
|
|
206
|
+
agree: new FormControl(false)
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## 📖 Documentation
|
|
212
|
+
|
|
213
|
+
For detailed documentation and examples, visit [your-docs-url]
|
|
214
|
+
|
|
215
|
+
## 🤝 Contributing
|
|
216
|
+
|
|
217
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
218
|
+
|
|
219
|
+
## 📄 License
|
|
220
|
+
|
|
221
|
+
MIT © [Your Name]
|
|
222
|
+
|
|
223
|
+
## 🙏 Support
|
|
224
|
+
|
|
225
|
+
If you like this project, please give it a ⭐ on [GitHub](https://github.com/yourusername/uisuite)!
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Button Component - Based on shadcn/ui
|
|
6
|
+
*
|
|
7
|
+
* A versatile button component with multiple variants and sizes.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```html
|
|
11
|
+
* <uButton>Click me</uButton>
|
|
12
|
+
* <uButton variant="outline" size="sm">Small Outline</uButton>
|
|
13
|
+
* <uButton variant="destructive">Delete</uButton>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class ButtonComponent {
|
|
17
|
+
/**
|
|
18
|
+
* Button variant
|
|
19
|
+
* - default: Primary button style
|
|
20
|
+
* - outline: Outlined button
|
|
21
|
+
* - ghost: Minimal button with no border
|
|
22
|
+
* - destructive: For destructive actions (delete, remove, etc.)
|
|
23
|
+
* - secondary: Secondary action button
|
|
24
|
+
* - link: Renders as a link-styled button
|
|
25
|
+
*/
|
|
26
|
+
variant = 'default';
|
|
27
|
+
/**
|
|
28
|
+
* Button size
|
|
29
|
+
* - default: Standard button size
|
|
30
|
+
* - sm: Small button
|
|
31
|
+
* - lg: Large button
|
|
32
|
+
* - icon: Square icon button (default size)
|
|
33
|
+
* - icon-sm: Small square icon button
|
|
34
|
+
* - icon-lg: Large square icon button
|
|
35
|
+
*/
|
|
36
|
+
size = 'default';
|
|
37
|
+
/**
|
|
38
|
+
* HTML button type
|
|
39
|
+
*/
|
|
40
|
+
type = 'button';
|
|
41
|
+
/**
|
|
42
|
+
* Whether the button is disabled
|
|
43
|
+
*/
|
|
44
|
+
disabled = false;
|
|
45
|
+
/**
|
|
46
|
+
* ARIA label for accessibility
|
|
47
|
+
*/
|
|
48
|
+
ariaLabel;
|
|
49
|
+
get buttonClasses() {
|
|
50
|
+
return [
|
|
51
|
+
'u-button',
|
|
52
|
+
`u-button--${this.variant}`,
|
|
53
|
+
`u-button--${this.size}`
|
|
54
|
+
].filter(Boolean).join(' ');
|
|
55
|
+
}
|
|
56
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
57
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ButtonComponent, isStandalone: true, selector: "uButton", inputs: { variant: "variant", size: "size", type: "type", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: `
|
|
58
|
+
<button
|
|
59
|
+
[type]="type"
|
|
60
|
+
[disabled]="disabled"
|
|
61
|
+
[class]="buttonClasses"
|
|
62
|
+
[attr.aria-label]="ariaLabel"
|
|
63
|
+
>
|
|
64
|
+
<ng-content></ng-content>
|
|
65
|
+
</button>
|
|
66
|
+
`, isInline: true, styles: [".u-button{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.375rem;font-size:.875rem;font-weight:500;transition:all .15s ease;cursor:pointer;border:1px solid transparent;outline:none}.u-button:focus-visible{outline:2px solid hsl(240,5%,64.9%);outline-offset:2px}.u-button:disabled{pointer-events:none;opacity:.5}.u-button--default{height:2.5rem;padding:.5rem 1rem}.u-button--sm{height:2.25rem;padding:.5rem .75rem;font-size:.813rem}.u-button--lg{height:2.75rem;padding:.5rem 2rem}.u-button--icon{height:2.5rem;width:2.5rem;padding:0}.u-button--icon-sm{height:2.25rem;width:2.25rem;padding:0}.u-button--icon-lg{height:2.75rem;width:2.75rem;padding:0}.u-button--default{background-color:#18181b;color:#fafafa}.u-button--default:hover:not(:disabled){background-color:#18181be6}.u-button--default:active:not(:disabled){background-color:#18181bcc}.u-button--outline{background-color:transparent;border-color:#e4e4e7;color:#09090b}.u-button--outline:hover:not(:disabled){background-color:#f4f4f5;border-color:#e4e4e7}.u-button--outline:active:not(:disabled){background-color:#e4e4e7}.u-button--ghost{background-color:transparent;border-color:transparent;color:#09090b}.u-button--ghost:hover:not(:disabled){background-color:#f4f4f5}.u-button--ghost:active:not(:disabled){background-color:#e4e4e7}.u-button--destructive{background-color:#ef4444;color:#fafafa}.u-button--destructive:hover:not(:disabled){background-color:#ef4444e6}.u-button--destructive:active:not(:disabled){background-color:#ef4444cc}.u-button--secondary{background-color:#f4f4f5;color:#18181b}.u-button--secondary:hover:not(:disabled){background-color:#e4e4e7}.u-button--secondary:active:not(:disabled){background-color:#d6d6db}.u-button--link{background-color:transparent;border-color:transparent;color:#18181b;text-decoration:underline;text-underline-offset:4px}.u-button--link:hover:not(:disabled){text-decoration:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
67
|
+
}
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
69
|
+
type: Component,
|
|
70
|
+
args: [{ selector: 'uButton', standalone: true, imports: [CommonModule], template: `
|
|
71
|
+
<button
|
|
72
|
+
[type]="type"
|
|
73
|
+
[disabled]="disabled"
|
|
74
|
+
[class]="buttonClasses"
|
|
75
|
+
[attr.aria-label]="ariaLabel"
|
|
76
|
+
>
|
|
77
|
+
<ng-content></ng-content>
|
|
78
|
+
</button>
|
|
79
|
+
`, styles: [".u-button{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.375rem;font-size:.875rem;font-weight:500;transition:all .15s ease;cursor:pointer;border:1px solid transparent;outline:none}.u-button:focus-visible{outline:2px solid hsl(240,5%,64.9%);outline-offset:2px}.u-button:disabled{pointer-events:none;opacity:.5}.u-button--default{height:2.5rem;padding:.5rem 1rem}.u-button--sm{height:2.25rem;padding:.5rem .75rem;font-size:.813rem}.u-button--lg{height:2.75rem;padding:.5rem 2rem}.u-button--icon{height:2.5rem;width:2.5rem;padding:0}.u-button--icon-sm{height:2.25rem;width:2.25rem;padding:0}.u-button--icon-lg{height:2.75rem;width:2.75rem;padding:0}.u-button--default{background-color:#18181b;color:#fafafa}.u-button--default:hover:not(:disabled){background-color:#18181be6}.u-button--default:active:not(:disabled){background-color:#18181bcc}.u-button--outline{background-color:transparent;border-color:#e4e4e7;color:#09090b}.u-button--outline:hover:not(:disabled){background-color:#f4f4f5;border-color:#e4e4e7}.u-button--outline:active:not(:disabled){background-color:#e4e4e7}.u-button--ghost{background-color:transparent;border-color:transparent;color:#09090b}.u-button--ghost:hover:not(:disabled){background-color:#f4f4f5}.u-button--ghost:active:not(:disabled){background-color:#e4e4e7}.u-button--destructive{background-color:#ef4444;color:#fafafa}.u-button--destructive:hover:not(:disabled){background-color:#ef4444e6}.u-button--destructive:active:not(:disabled){background-color:#ef4444cc}.u-button--secondary{background-color:#f4f4f5;color:#18181b}.u-button--secondary:hover:not(:disabled){background-color:#e4e4e7}.u-button--secondary:active:not(:disabled){background-color:#d6d6db}.u-button--link{background-color:transparent;border-color:transparent;color:#18181b;text-decoration:underline;text-underline-offset:4px}.u-button--link:hover:not(:disabled){text-decoration:none}\n"] }]
|
|
80
|
+
}], propDecorators: { variant: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], size: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], type: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], disabled: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], ariaLabel: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}] } });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL2xpYi9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBSy9DOzs7Ozs7Ozs7OztHQVdHO0FBaUJILE1BQU0sT0FBTyxlQUFlO0lBQ3hCOzs7Ozs7OztPQVFHO0lBQ00sT0FBTyxHQUFrQixTQUFTLENBQUM7SUFFNUM7Ozs7Ozs7O09BUUc7SUFDTSxJQUFJLEdBQWUsU0FBUyxDQUFDO0lBRXRDOztPQUVHO0lBQ00sSUFBSSxHQUFrQyxRQUFRLENBQUM7SUFFeEQ7O09BRUc7SUFDTSxRQUFRLEdBQVksS0FBSyxDQUFDO0lBRW5DOztPQUVHO0lBQ00sU0FBUyxDQUFVO0lBRTVCLElBQUksYUFBYTtRQUNiLE9BQU87WUFDSCxVQUFVO1lBQ1YsYUFBYSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNCLGFBQWEsSUFBSSxDQUFDLElBQUksRUFBRTtTQUMzQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0E1Q1EsZUFBZTs0RkFBZixlQUFlLDZLQVpkOzs7Ozs7Ozs7R0FTWCxvOURBVlcsWUFBWTs7NEZBYWIsZUFBZTtrQkFoQjNCLFNBQVM7K0JBQ0ksU0FBUyxjQUNQLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOzs7Ozs7Ozs7R0FTWDs4QkFhVSxPQUFPO3NCQUFmLEtBQUs7Z0JBV0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IHR5cGUgQnV0dG9uVmFyaWFudCA9ICdkZWZhdWx0JyB8ICdvdXRsaW5lJyB8ICdnaG9zdCcgfCAnZGVzdHJ1Y3RpdmUnIHwgJ3NlY29uZGFyeScgfCAnbGluayc7XG5leHBvcnQgdHlwZSBCdXR0b25TaXplID0gJ2RlZmF1bHQnIHwgJ3NtJyB8ICdsZycgfCAnaWNvbicgfCAnaWNvbi1zbScgfCAnaWNvbi1sZyc7XG5cbi8qKlxuICogQnV0dG9uIENvbXBvbmVudCAtIEJhc2VkIG9uIHNoYWRjbi91aVxuICogXG4gKiBBIHZlcnNhdGlsZSBidXR0b24gY29tcG9uZW50IHdpdGggbXVsdGlwbGUgdmFyaWFudHMgYW5kIHNpemVzLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHVCdXR0b24+Q2xpY2sgbWU8L3VCdXR0b24+XG4gKiA8dUJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzbVwiPlNtYWxsIE91dGxpbmU8L3VCdXR0b24+XG4gKiA8dUJ1dHRvbiB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIj5EZWxldGU8L3VCdXR0b24+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1QnV0dG9uJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgW3R5cGVdPVwidHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzZXNcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2J1dHRvbj5cbiAgYCxcbiAgICBzdHlsZVVybHM6IFsnLi9idXR0b24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Db21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEJ1dHRvbiB2YXJpYW50XG4gICAgICogLSBkZWZhdWx0OiBQcmltYXJ5IGJ1dHRvbiBzdHlsZVxuICAgICAqIC0gb3V0bGluZTogT3V0bGluZWQgYnV0dG9uXG4gICAgICogLSBnaG9zdDogTWluaW1hbCBidXR0b24gd2l0aCBubyBib3JkZXJcbiAgICAgKiAtIGRlc3RydWN0aXZlOiBGb3IgZGVzdHJ1Y3RpdmUgYWN0aW9ucyAoZGVsZXRlLCByZW1vdmUsIGV0Yy4pXG4gICAgICogLSBzZWNvbmRhcnk6IFNlY29uZGFyeSBhY3Rpb24gYnV0dG9uXG4gICAgICogLSBsaW5rOiBSZW5kZXJzIGFzIGEgbGluay1zdHlsZWQgYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KCkgdmFyaWFudDogQnV0dG9uVmFyaWFudCA9ICdkZWZhdWx0JztcblxuICAgIC8qKlxuICAgICAqIEJ1dHRvbiBzaXplXG4gICAgICogLSBkZWZhdWx0OiBTdGFuZGFyZCBidXR0b24gc2l6ZVxuICAgICAqIC0gc206IFNtYWxsIGJ1dHRvblxuICAgICAqIC0gbGc6IExhcmdlIGJ1dHRvblxuICAgICAqIC0gaWNvbjogU3F1YXJlIGljb24gYnV0dG9uIChkZWZhdWx0IHNpemUpXG4gICAgICogLSBpY29uLXNtOiBTbWFsbCBzcXVhcmUgaWNvbiBidXR0b25cbiAgICAgKiAtIGljb24tbGc6IExhcmdlIHNxdWFyZSBpY29uIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNpemU6IEJ1dHRvblNpemUgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiBIVE1MIGJ1dHRvbiB0eXBlXG4gICAgICovXG4gICAgQElucHV0KCkgdHlwZTogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCcgPSAnYnV0dG9uJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBUklBIGxhYmVsIGZvciBhY2Nlc3NpYmlsaXR5XG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuXG4gICAgZ2V0IGJ1dHRvbkNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICd1LWJ1dHRvbicsXG4gICAgICAgICAgICBgdS1idXR0b24tLSR7dGhpcy52YXJpYW50fWAsXG4gICAgICAgICAgICBgdS1idXR0b24tLSR7dGhpcy5zaXplfWBcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of uisuite
|
|
3
|
+
*
|
|
4
|
+
* This file exports all components, directives, and services.
|
|
5
|
+
*/
|
|
6
|
+
// Version
|
|
7
|
+
export const UISUITE_VERSION = '0.0.0';
|
|
8
|
+
// Components
|
|
9
|
+
export * from './lib/button/button.component';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB1aXN1aXRlXG4gKiBcbiAqIFRoaXMgZmlsZSBleHBvcnRzIGFsbCBjb21wb25lbnRzLCBkaXJlY3RpdmVzLCBhbmQgc2VydmljZXMuXG4gKi9cblxuLy8gVmVyc2lvblxuZXhwb3J0IGNvbnN0IFVJU1VJVEVfVkVSU0lPTiA9ICcwLjAuMCc7XG5cbi8vIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlzdWl0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL3Vpc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Button Component - Based on shadcn/ui
|
|
7
|
+
*
|
|
8
|
+
* A versatile button component with multiple variants and sizes.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <uButton>Click me</uButton>
|
|
13
|
+
* <uButton variant="outline" size="sm">Small Outline</uButton>
|
|
14
|
+
* <uButton variant="destructive">Delete</uButton>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
class ButtonComponent {
|
|
18
|
+
/**
|
|
19
|
+
* Button variant
|
|
20
|
+
* - default: Primary button style
|
|
21
|
+
* - outline: Outlined button
|
|
22
|
+
* - ghost: Minimal button with no border
|
|
23
|
+
* - destructive: For destructive actions (delete, remove, etc.)
|
|
24
|
+
* - secondary: Secondary action button
|
|
25
|
+
* - link: Renders as a link-styled button
|
|
26
|
+
*/
|
|
27
|
+
variant = 'default';
|
|
28
|
+
/**
|
|
29
|
+
* Button size
|
|
30
|
+
* - default: Standard button size
|
|
31
|
+
* - sm: Small button
|
|
32
|
+
* - lg: Large button
|
|
33
|
+
* - icon: Square icon button (default size)
|
|
34
|
+
* - icon-sm: Small square icon button
|
|
35
|
+
* - icon-lg: Large square icon button
|
|
36
|
+
*/
|
|
37
|
+
size = 'default';
|
|
38
|
+
/**
|
|
39
|
+
* HTML button type
|
|
40
|
+
*/
|
|
41
|
+
type = 'button';
|
|
42
|
+
/**
|
|
43
|
+
* Whether the button is disabled
|
|
44
|
+
*/
|
|
45
|
+
disabled = false;
|
|
46
|
+
/**
|
|
47
|
+
* ARIA label for accessibility
|
|
48
|
+
*/
|
|
49
|
+
ariaLabel;
|
|
50
|
+
get buttonClasses() {
|
|
51
|
+
return [
|
|
52
|
+
'u-button',
|
|
53
|
+
`u-button--${this.variant}`,
|
|
54
|
+
`u-button--${this.size}`
|
|
55
|
+
].filter(Boolean).join(' ');
|
|
56
|
+
}
|
|
57
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
58
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ButtonComponent, isStandalone: true, selector: "uButton", inputs: { variant: "variant", size: "size", type: "type", disabled: "disabled", ariaLabel: "ariaLabel" }, ngImport: i0, template: `
|
|
59
|
+
<button
|
|
60
|
+
[type]="type"
|
|
61
|
+
[disabled]="disabled"
|
|
62
|
+
[class]="buttonClasses"
|
|
63
|
+
[attr.aria-label]="ariaLabel"
|
|
64
|
+
>
|
|
65
|
+
<ng-content></ng-content>
|
|
66
|
+
</button>
|
|
67
|
+
`, isInline: true, styles: [".u-button{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.375rem;font-size:.875rem;font-weight:500;transition:all .15s ease;cursor:pointer;border:1px solid transparent;outline:none}.u-button:focus-visible{outline:2px solid hsl(240,5%,64.9%);outline-offset:2px}.u-button:disabled{pointer-events:none;opacity:.5}.u-button--default{height:2.5rem;padding:.5rem 1rem}.u-button--sm{height:2.25rem;padding:.5rem .75rem;font-size:.813rem}.u-button--lg{height:2.75rem;padding:.5rem 2rem}.u-button--icon{height:2.5rem;width:2.5rem;padding:0}.u-button--icon-sm{height:2.25rem;width:2.25rem;padding:0}.u-button--icon-lg{height:2.75rem;width:2.75rem;padding:0}.u-button--default{background-color:#18181b;color:#fafafa}.u-button--default:hover:not(:disabled){background-color:#18181be6}.u-button--default:active:not(:disabled){background-color:#18181bcc}.u-button--outline{background-color:transparent;border-color:#e4e4e7;color:#09090b}.u-button--outline:hover:not(:disabled){background-color:#f4f4f5;border-color:#e4e4e7}.u-button--outline:active:not(:disabled){background-color:#e4e4e7}.u-button--ghost{background-color:transparent;border-color:transparent;color:#09090b}.u-button--ghost:hover:not(:disabled){background-color:#f4f4f5}.u-button--ghost:active:not(:disabled){background-color:#e4e4e7}.u-button--destructive{background-color:#ef4444;color:#fafafa}.u-button--destructive:hover:not(:disabled){background-color:#ef4444e6}.u-button--destructive:active:not(:disabled){background-color:#ef4444cc}.u-button--secondary{background-color:#f4f4f5;color:#18181b}.u-button--secondary:hover:not(:disabled){background-color:#e4e4e7}.u-button--secondary:active:not(:disabled){background-color:#d6d6db}.u-button--link{background-color:transparent;border-color:transparent;color:#18181b;text-decoration:underline;text-underline-offset:4px}.u-button--link:hover:not(:disabled){text-decoration:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
70
|
+
type: Component,
|
|
71
|
+
args: [{ selector: 'uButton', standalone: true, imports: [CommonModule], template: `
|
|
72
|
+
<button
|
|
73
|
+
[type]="type"
|
|
74
|
+
[disabled]="disabled"
|
|
75
|
+
[class]="buttonClasses"
|
|
76
|
+
[attr.aria-label]="ariaLabel"
|
|
77
|
+
>
|
|
78
|
+
<ng-content></ng-content>
|
|
79
|
+
</button>
|
|
80
|
+
`, styles: [".u-button{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;border-radius:.375rem;font-size:.875rem;font-weight:500;transition:all .15s ease;cursor:pointer;border:1px solid transparent;outline:none}.u-button:focus-visible{outline:2px solid hsl(240,5%,64.9%);outline-offset:2px}.u-button:disabled{pointer-events:none;opacity:.5}.u-button--default{height:2.5rem;padding:.5rem 1rem}.u-button--sm{height:2.25rem;padding:.5rem .75rem;font-size:.813rem}.u-button--lg{height:2.75rem;padding:.5rem 2rem}.u-button--icon{height:2.5rem;width:2.5rem;padding:0}.u-button--icon-sm{height:2.25rem;width:2.25rem;padding:0}.u-button--icon-lg{height:2.75rem;width:2.75rem;padding:0}.u-button--default{background-color:#18181b;color:#fafafa}.u-button--default:hover:not(:disabled){background-color:#18181be6}.u-button--default:active:not(:disabled){background-color:#18181bcc}.u-button--outline{background-color:transparent;border-color:#e4e4e7;color:#09090b}.u-button--outline:hover:not(:disabled){background-color:#f4f4f5;border-color:#e4e4e7}.u-button--outline:active:not(:disabled){background-color:#e4e4e7}.u-button--ghost{background-color:transparent;border-color:transparent;color:#09090b}.u-button--ghost:hover:not(:disabled){background-color:#f4f4f5}.u-button--ghost:active:not(:disabled){background-color:#e4e4e7}.u-button--destructive{background-color:#ef4444;color:#fafafa}.u-button--destructive:hover:not(:disabled){background-color:#ef4444e6}.u-button--destructive:active:not(:disabled){background-color:#ef4444cc}.u-button--secondary{background-color:#f4f4f5;color:#18181b}.u-button--secondary:hover:not(:disabled){background-color:#e4e4e7}.u-button--secondary:active:not(:disabled){background-color:#d6d6db}.u-button--link{background-color:transparent;border-color:transparent;color:#18181b;text-decoration:underline;text-underline-offset:4px}.u-button--link:hover:not(:disabled){text-decoration:none}\n"] }]
|
|
81
|
+
}], propDecorators: { variant: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], size: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], type: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], disabled: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], ariaLabel: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}] } });
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* Public API Surface of uisuite
|
|
95
|
+
*
|
|
96
|
+
* This file exports all components, directives, and services.
|
|
97
|
+
*/
|
|
98
|
+
// Version
|
|
99
|
+
const UISUITE_VERSION = '0.0.0';
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Generated bundle index. Do not edit.
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
export { ButtonComponent, UISUITE_VERSION };
|
|
106
|
+
//# sourceMappingURL=uisuite.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uisuite.mjs","sources":["../../../projects/uisuite/src/lib/button/button.component.ts","../../../projects/uisuite/src/public-api.ts","../../../projects/uisuite/src/uisuite.ts"],"sourcesContent":["import { Component, Input, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'default' | 'outline' | 'ghost' | 'destructive' | 'secondary' | 'link';\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg';\n\n/**\n * Button Component - Based on shadcn/ui\n * \n * A versatile button component with multiple variants and sizes.\n * \n * @example\n * ```html\n * <uButton>Click me</uButton>\n * <uButton variant=\"outline\" size=\"sm\">Small Outline</uButton>\n * <uButton variant=\"destructive\">Delete</uButton>\n * ```\n */\n@Component({\n selector: 'uButton',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button\n [type]=\"type\"\n [disabled]=\"disabled\"\n [class]=\"buttonClasses\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <ng-content></ng-content>\n </button>\n `,\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent {\n /**\n * Button variant\n * - default: Primary button style\n * - outline: Outlined button\n * - ghost: Minimal button with no border\n * - destructive: For destructive actions (delete, remove, etc.)\n * - secondary: Secondary action button\n * - link: Renders as a link-styled button\n */\n @Input() variant: ButtonVariant = 'default';\n\n /**\n * Button size\n * - default: Standard button size\n * - sm: Small button\n * - lg: Large button\n * - icon: Square icon button (default size)\n * - icon-sm: Small square icon button\n * - icon-lg: Large square icon button\n */\n @Input() size: ButtonSize = 'default';\n\n /**\n * HTML button type\n */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Whether the button is disabled\n */\n @Input() disabled: boolean = false;\n\n /**\n * ARIA label for accessibility\n */\n @Input() ariaLabel?: string;\n\n get buttonClasses(): string {\n return [\n 'u-button',\n `u-button--${this.variant}`,\n `u-button--${this.size}`\n ].filter(Boolean).join(' ');\n }\n}\n","/*\n * Public API Surface of uisuite\n * \n * This file exports all components, directives, and services.\n */\n\n// Version\nexport const UISUITE_VERSION = '0.0.0';\n\n// Components\nexport * from './lib/button/button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAMA;;;;;;;;;;;AAWG;MAiBU,eAAe,CAAA;AACxB;;;;;;;;AAQG;IACM,OAAO,GAAkB,SAAS,CAAC;AAE5C;;;;;;;;AAQG;IACM,IAAI,GAAe,SAAS,CAAC;AAEtC;;AAEG;IACM,IAAI,GAAkC,QAAQ,CAAC;AAExD;;AAEG;IACM,QAAQ,GAAY,KAAK,CAAC;AAEnC;;AAEG;AACM,IAAA,SAAS,CAAU;AAE5B,IAAA,IAAI,aAAa,GAAA;QACb,OAAO;YACH,UAAU;YACV,CAAa,UAAA,EAAA,IAAI,CAAC,OAAO,CAAE,CAAA;YAC3B,CAAa,UAAA,EAAA,IAAI,CAAC,IAAI,CAAE,CAAA;SAC3B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/B;wGA5CQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAZd,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;AASX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,64DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAVW,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAab,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EACb,QAAA,EAAA,CAAA;;;;;;;;;AASX,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,64DAAA,CAAA,EAAA,CAAA;8BAaU,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAWG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAKG,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;ACtEV;;;;AAIG;AAEH;AACO,MAAM,eAAe,GAAG;;ACP/B;;AAEG;;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export type ButtonVariant = 'default' | 'outline' | 'ghost' | 'destructive' | 'secondary' | 'link';
|
|
3
|
+
export type ButtonSize = 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg';
|
|
4
|
+
/**
|
|
5
|
+
* Button Component - Based on shadcn/ui
|
|
6
|
+
*
|
|
7
|
+
* A versatile button component with multiple variants and sizes.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```html
|
|
11
|
+
* <uButton>Click me</uButton>
|
|
12
|
+
* <uButton variant="outline" size="sm">Small Outline</uButton>
|
|
13
|
+
* <uButton variant="destructive">Delete</uButton>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare class ButtonComponent {
|
|
17
|
+
/**
|
|
18
|
+
* Button variant
|
|
19
|
+
* - default: Primary button style
|
|
20
|
+
* - outline: Outlined button
|
|
21
|
+
* - ghost: Minimal button with no border
|
|
22
|
+
* - destructive: For destructive actions (delete, remove, etc.)
|
|
23
|
+
* - secondary: Secondary action button
|
|
24
|
+
* - link: Renders as a link-styled button
|
|
25
|
+
*/
|
|
26
|
+
variant: ButtonVariant;
|
|
27
|
+
/**
|
|
28
|
+
* Button size
|
|
29
|
+
* - default: Standard button size
|
|
30
|
+
* - sm: Small button
|
|
31
|
+
* - lg: Large button
|
|
32
|
+
* - icon: Square icon button (default size)
|
|
33
|
+
* - icon-sm: Small square icon button
|
|
34
|
+
* - icon-lg: Large square icon button
|
|
35
|
+
*/
|
|
36
|
+
size: ButtonSize;
|
|
37
|
+
/**
|
|
38
|
+
* HTML button type
|
|
39
|
+
*/
|
|
40
|
+
type: 'button' | 'submit' | 'reset';
|
|
41
|
+
/**
|
|
42
|
+
* Whether the button is disabled
|
|
43
|
+
*/
|
|
44
|
+
disabled: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* ARIA label for accessibility
|
|
47
|
+
*/
|
|
48
|
+
ariaLabel?: string;
|
|
49
|
+
get buttonClasses(): string;
|
|
50
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
|
|
51
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "uButton", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
52
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "uisuite",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Enterprise Angular UI component library for ERP SAAS applications. Designer-friendly, consistent, and accessible components.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"angular",
|
|
7
|
+
"ui",
|
|
8
|
+
"components",
|
|
9
|
+
"library",
|
|
10
|
+
"erp",
|
|
11
|
+
"saas",
|
|
12
|
+
"design-system",
|
|
13
|
+
"ui-library",
|
|
14
|
+
"angular-components",
|
|
15
|
+
"enterprise"
|
|
16
|
+
],
|
|
17
|
+
"author": "Your Name",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/yourusername/uisuite"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@angular/common": "^18.0.0",
|
|
25
|
+
"@angular/core": "^18.0.0"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"tslib": "^2.3.0"
|
|
29
|
+
},
|
|
30
|
+
"sideEffects": false,
|
|
31
|
+
"module": "fesm2022/uisuite.mjs",
|
|
32
|
+
"typings": "index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
"./package.json": {
|
|
35
|
+
"default": "./package.json"
|
|
36
|
+
},
|
|
37
|
+
".": {
|
|
38
|
+
"types": "./index.d.ts",
|
|
39
|
+
"esm2022": "./esm2022/uisuite.mjs",
|
|
40
|
+
"esm": "./esm2022/uisuite.mjs",
|
|
41
|
+
"default": "./fesm2022/uisuite.mjs"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
package/public-api.d.ts
ADDED
|
Binary file
|