ngx-com 0.0.1 → 0.0.4
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/fesm2022/ngx-com-components-avatar.mjs +772 -0
- package/fesm2022/ngx-com-components-avatar.mjs.map +1 -0
- package/fesm2022/ngx-com-components-badge.mjs +138 -0
- package/fesm2022/ngx-com-components-badge.mjs.map +1 -0
- package/fesm2022/ngx-com-components-button.mjs +146 -0
- package/fesm2022/ngx-com-components-button.mjs.map +1 -0
- package/fesm2022/ngx-com-components-calendar.mjs +5046 -0
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -0
- package/fesm2022/ngx-com-components-card.mjs +590 -0
- package/fesm2022/ngx-com-components-card.mjs.map +1 -0
- package/fesm2022/ngx-com-components-checkbox.mjs +344 -0
- package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -0
- package/fesm2022/ngx-com-components-collapsible.mjs +612 -0
- package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -0
- package/fesm2022/ngx-com-components-confirm.mjs +562 -0
- package/fesm2022/ngx-com-components-confirm.mjs.map +1 -0
- package/fesm2022/ngx-com-components-dropdown-testing.mjs +255 -0
- package/fesm2022/ngx-com-components-dropdown-testing.mjs.map +1 -0
- package/fesm2022/ngx-com-components-dropdown.mjs +2692 -0
- package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -0
- package/fesm2022/ngx-com-components-empty-state.mjs +382 -0
- package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -0
- package/fesm2022/ngx-com-components-form-field.mjs +924 -0
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -0
- package/fesm2022/ngx-com-components-icon.mjs +183 -0
- package/fesm2022/ngx-com-components-icon.mjs.map +1 -0
- package/fesm2022/ngx-com-components-item.mjs +578 -0
- package/fesm2022/ngx-com-components-item.mjs.map +1 -0
- package/fesm2022/ngx-com-components-menu.mjs +1200 -0
- package/fesm2022/ngx-com-components-menu.mjs.map +1 -0
- package/fesm2022/ngx-com-components-paginator.mjs +823 -0
- package/fesm2022/ngx-com-components-paginator.mjs.map +1 -0
- package/fesm2022/ngx-com-components-popover.mjs +901 -0
- package/fesm2022/ngx-com-components-popover.mjs.map +1 -0
- package/fesm2022/ngx-com-components-radio.mjs +621 -0
- package/fesm2022/ngx-com-components-radio.mjs.map +1 -0
- package/fesm2022/ngx-com-components-segmented-control.mjs +538 -0
- package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -0
- package/fesm2022/ngx-com-components-sort.mjs +368 -0
- package/fesm2022/ngx-com-components-sort.mjs.map +1 -0
- package/fesm2022/ngx-com-components-spinner.mjs +189 -0
- package/fesm2022/ngx-com-components-spinner.mjs.map +1 -0
- package/fesm2022/ngx-com-components-tabs.mjs +1522 -0
- package/fesm2022/ngx-com-components-tabs.mjs.map +1 -0
- package/fesm2022/ngx-com-components-tooltip.mjs +625 -0
- package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -0
- package/fesm2022/ngx-com-components.mjs +17 -0
- package/fesm2022/ngx-com-components.mjs.map +1 -0
- package/fesm2022/ngx-com-tokens.mjs +12 -0
- package/fesm2022/ngx-com-tokens.mjs.map +1 -0
- package/fesm2022/ngx-com-utils.mjs +601 -0
- package/fesm2022/ngx-com-utils.mjs.map +1 -0
- package/fesm2022/ngx-com.mjs +9 -23
- package/fesm2022/ngx-com.mjs.map +1 -1
- package/package.json +105 -1
- package/types/ngx-com-components-avatar.d.ts +409 -0
- package/types/ngx-com-components-badge.d.ts +97 -0
- package/types/ngx-com-components-button.d.ts +69 -0
- package/types/ngx-com-components-calendar.d.ts +1665 -0
- package/types/ngx-com-components-card.d.ts +373 -0
- package/types/ngx-com-components-checkbox.d.ts +116 -0
- package/types/ngx-com-components-collapsible.d.ts +379 -0
- package/types/ngx-com-components-confirm.d.ts +160 -0
- package/types/ngx-com-components-dropdown-testing.d.ts +116 -0
- package/types/ngx-com-components-dropdown.d.ts +938 -0
- package/types/ngx-com-components-empty-state.d.ts +269 -0
- package/types/ngx-com-components-form-field.d.ts +531 -0
- package/types/ngx-com-components-icon.d.ts +94 -0
- package/types/ngx-com-components-item.d.ts +336 -0
- package/types/ngx-com-components-menu.d.ts +479 -0
- package/types/ngx-com-components-paginator.d.ts +265 -0
- package/types/ngx-com-components-popover.d.ts +309 -0
- package/types/ngx-com-components-radio.d.ts +258 -0
- package/types/ngx-com-components-segmented-control.d.ts +274 -0
- package/types/ngx-com-components-sort.d.ts +133 -0
- package/types/ngx-com-components-spinner.d.ts +120 -0
- package/types/ngx-com-components-tabs.d.ts +396 -0
- package/types/ngx-com-components-tooltip.d.ts +200 -0
- package/types/ngx-com-components.d.ts +12 -0
- package/types/ngx-com-tokens.d.ts +7 -0
- package/types/ngx-com-utils.d.ts +424 -0
- package/types/ngx-com.d.ts +10 -7
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, Directive } from '@angular/core';
|
|
3
|
+
import { mergeClasses } from 'ngx-com/utils';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* CVA variants for the empty state container.
|
|
8
|
+
*
|
|
9
|
+
* @tokens `--color-foreground`, `--color-muted`, `--color-muted-foreground`
|
|
10
|
+
*/
|
|
11
|
+
const emptyStateVariants = cva('flex', {
|
|
12
|
+
variants: {
|
|
13
|
+
orientation: {
|
|
14
|
+
vertical: 'flex-col',
|
|
15
|
+
horizontal: 'flex-row',
|
|
16
|
+
},
|
|
17
|
+
align: {
|
|
18
|
+
center: 'items-center text-center',
|
|
19
|
+
start: 'items-start text-left',
|
|
20
|
+
},
|
|
21
|
+
size: {
|
|
22
|
+
sm: 'gap-2 py-4',
|
|
23
|
+
md: 'gap-3 py-6',
|
|
24
|
+
lg: 'gap-4 py-10',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
compoundVariants: [
|
|
28
|
+
{ orientation: 'horizontal', align: 'center', class: 'justify-center' },
|
|
29
|
+
{ orientation: 'horizontal', align: 'start', class: 'justify-start' },
|
|
30
|
+
],
|
|
31
|
+
defaultVariants: {
|
|
32
|
+
size: 'md',
|
|
33
|
+
align: 'center',
|
|
34
|
+
orientation: 'vertical',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* CVA variants for the empty state icon container.
|
|
39
|
+
*
|
|
40
|
+
* @tokens `--color-muted`, `--color-muted-foreground`
|
|
41
|
+
*/
|
|
42
|
+
const emptyStateIconVariants = cva('flex items-center justify-center shrink-0 bg-muted text-muted-foreground', {
|
|
43
|
+
variants: {
|
|
44
|
+
size: {
|
|
45
|
+
sm: 'size-10 rounded-lg',
|
|
46
|
+
md: 'size-14 rounded-xl',
|
|
47
|
+
lg: 'size-20 rounded-2xl',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
defaultVariants: {
|
|
51
|
+
size: 'md',
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* CVA variants for the empty state title.
|
|
56
|
+
*
|
|
57
|
+
* @tokens `--color-foreground`
|
|
58
|
+
*/
|
|
59
|
+
const emptyStateTitleVariants = cva('font-heading tracking-tight text-foreground', {
|
|
60
|
+
variants: {
|
|
61
|
+
size: {
|
|
62
|
+
sm: 'text-sm font-medium',
|
|
63
|
+
md: 'text-base font-semibold',
|
|
64
|
+
lg: 'text-lg font-semibold',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
defaultVariants: {
|
|
68
|
+
size: 'md',
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* CVA variants for the empty state description.
|
|
73
|
+
*
|
|
74
|
+
* @tokens `--color-muted-foreground`
|
|
75
|
+
*/
|
|
76
|
+
const emptyStateDescriptionVariants = cva('text-muted-foreground', {
|
|
77
|
+
variants: {
|
|
78
|
+
size: {
|
|
79
|
+
sm: 'text-xs max-w-[200px]',
|
|
80
|
+
md: 'text-sm max-w-xs',
|
|
81
|
+
lg: 'text-base max-w-sm',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
defaultVariants: {
|
|
85
|
+
size: 'md',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* CVA variants for the empty state actions container.
|
|
90
|
+
*/
|
|
91
|
+
const emptyStateActionsVariants = cva('flex flex-wrap items-center justify-center', {
|
|
92
|
+
variants: {
|
|
93
|
+
size: {
|
|
94
|
+
sm: 'gap-2 pt-1',
|
|
95
|
+
md: 'gap-2.5 pt-2',
|
|
96
|
+
lg: 'gap-3 pt-3',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
defaultVariants: {
|
|
100
|
+
size: 'md',
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Empty state component - a placeholder surface for when there is no data to display.
|
|
106
|
+
*
|
|
107
|
+
* Common use cases include:
|
|
108
|
+
* - Empty lists or tables ("No results found")
|
|
109
|
+
* - Initial states before user action ("Create your first project")
|
|
110
|
+
* - Search results with no matches ("No items match your search")
|
|
111
|
+
* - Error recovery states ("Something went wrong. Try again.")
|
|
112
|
+
*
|
|
113
|
+
* The component is a pure layout container that accepts projected content through attribute directives.
|
|
114
|
+
*
|
|
115
|
+
* @tokens `--color-muted`, `--color-muted-foreground`, `--color-foreground`
|
|
116
|
+
*
|
|
117
|
+
* @example Minimal empty state
|
|
118
|
+
* ```html
|
|
119
|
+
* <com-empty-state>
|
|
120
|
+
* <div comEmptyStateIcon>
|
|
121
|
+
* <com-icon name="inbox" size="xl" />
|
|
122
|
+
* </div>
|
|
123
|
+
* <h3 comEmptyStateTitle>No messages</h3>
|
|
124
|
+
* </com-empty-state>
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* @example Full empty state with description and action
|
|
128
|
+
* ```html
|
|
129
|
+
* <com-empty-state>
|
|
130
|
+
* <div comEmptyStateIcon>
|
|
131
|
+
* <com-icon name="folder-open" size="xl" />
|
|
132
|
+
* </div>
|
|
133
|
+
* <h3 comEmptyStateTitle>No projects yet</h3>
|
|
134
|
+
* <p comEmptyStateDescription>
|
|
135
|
+
* Create your first project to get started organizing your work.
|
|
136
|
+
* </p>
|
|
137
|
+
* <div comEmptyStateActions>
|
|
138
|
+
* <button comButton>Create Project</button>
|
|
139
|
+
* </div>
|
|
140
|
+
* </com-empty-state>
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* @example Search empty state with secondary action
|
|
144
|
+
* ```html
|
|
145
|
+
* <com-empty-state>
|
|
146
|
+
* <div comEmptyStateIcon>
|
|
147
|
+
* <com-icon name="search-x" size="xl" />
|
|
148
|
+
* </div>
|
|
149
|
+
* <h3 comEmptyStateTitle>No results found</h3>
|
|
150
|
+
* <p comEmptyStateDescription>
|
|
151
|
+
* Try adjusting your search terms or filters.
|
|
152
|
+
* </p>
|
|
153
|
+
* <div comEmptyStateActions>
|
|
154
|
+
* <button comButton variant="outline">Clear Filters</button>
|
|
155
|
+
* <button comButton>New Search</button>
|
|
156
|
+
* </div>
|
|
157
|
+
* </com-empty-state>
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* @example Small size for inline contexts
|
|
161
|
+
* ```html
|
|
162
|
+
* <com-empty-state size="sm">
|
|
163
|
+
* <div comEmptyStateIcon>
|
|
164
|
+
* <com-icon name="list" size="lg" />
|
|
165
|
+
* </div>
|
|
166
|
+
* <h4 comEmptyStateTitle>No items</h4>
|
|
167
|
+
* </com-empty-state>
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @example Large size for full-page empty states
|
|
171
|
+
* ```html
|
|
172
|
+
* <com-empty-state size="lg">
|
|
173
|
+
* <div comEmptyStateIcon>
|
|
174
|
+
* <com-icon name="rocket" size="2xl" />
|
|
175
|
+
* </div>
|
|
176
|
+
* <h2 comEmptyStateTitle>Welcome to Acme</h2>
|
|
177
|
+
* <p comEmptyStateDescription>
|
|
178
|
+
* Your dashboard is ready. Start by creating your first resource.
|
|
179
|
+
* </p>
|
|
180
|
+
* <div comEmptyStateActions>
|
|
181
|
+
* <button comButton size="lg">Get Started</button>
|
|
182
|
+
* </div>
|
|
183
|
+
* </com-empty-state>
|
|
184
|
+
* ```
|
|
185
|
+
*
|
|
186
|
+
* @example Horizontal orientation
|
|
187
|
+
* ```html
|
|
188
|
+
* <com-empty-state orientation="horizontal" align="start">
|
|
189
|
+
* <div comEmptyStateIcon>
|
|
190
|
+
* <com-icon name="alert-circle" size="lg" />
|
|
191
|
+
* </div>
|
|
192
|
+
* <h4 comEmptyStateTitle>No notifications</h4>
|
|
193
|
+
* <p comEmptyStateDescription>You're all caught up!</p>
|
|
194
|
+
* </com-empty-state>
|
|
195
|
+
* ```
|
|
196
|
+
*
|
|
197
|
+
* @example Left-aligned for sidebar contexts
|
|
198
|
+
* ```html
|
|
199
|
+
* <com-empty-state align="start">
|
|
200
|
+
* <div comEmptyStateIcon>
|
|
201
|
+
* <com-icon name="users" size="lg" />
|
|
202
|
+
* </div>
|
|
203
|
+
* <h4 comEmptyStateTitle>No team members</h4>
|
|
204
|
+
* <p comEmptyStateDescription>Invite people to collaborate.</p>
|
|
205
|
+
* <div comEmptyStateActions>
|
|
206
|
+
* <button comButton size="sm">Invite</button>
|
|
207
|
+
* </div>
|
|
208
|
+
* </com-empty-state>
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
class ComEmptyState {
|
|
212
|
+
/** Controls overall scale: icon container size, text sizes, spacing. */
|
|
213
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
214
|
+
/** Horizontal alignment of content. */
|
|
215
|
+
align = input('center', ...(ngDevMode ? [{ debugName: "align" }] : []));
|
|
216
|
+
/** Layout direction: vertical stacks content, horizontal places icon beside text. */
|
|
217
|
+
orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
|
|
218
|
+
/** Consumer CSS classes - merged with variant classes. */
|
|
219
|
+
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
|
|
220
|
+
computedClass = computed(() => mergeClasses(emptyStateVariants({
|
|
221
|
+
size: this.size(),
|
|
222
|
+
align: this.align(),
|
|
223
|
+
orientation: this.orientation(),
|
|
224
|
+
}), this.userClass()), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
|
|
225
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyState, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
226
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ComEmptyState, isStandalone: true, selector: "com-empty-state", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "computedClass()" } }, exportAs: ["comEmptyState"], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
227
|
+
}
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyState, decorators: [{
|
|
229
|
+
type: Component,
|
|
230
|
+
args: [{
|
|
231
|
+
selector: 'com-empty-state',
|
|
232
|
+
exportAs: 'comEmptyState',
|
|
233
|
+
template: `<ng-content />`,
|
|
234
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
235
|
+
encapsulation: ViewEncapsulation.None,
|
|
236
|
+
host: {
|
|
237
|
+
'[class]': 'computedClass()',
|
|
238
|
+
},
|
|
239
|
+
}]
|
|
240
|
+
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Empty state icon container directive - styled circular background for icon/illustration.
|
|
244
|
+
*
|
|
245
|
+
* Apply to a container element. Place any content inside (typically `com-icon`).
|
|
246
|
+
* Styling automatically adapts to the parent's `size` input.
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```html
|
|
250
|
+
* <div comEmptyStateIcon>
|
|
251
|
+
* <com-icon name="inbox" size="xl" />
|
|
252
|
+
* </div>
|
|
253
|
+
* ```
|
|
254
|
+
*
|
|
255
|
+
* @example With custom illustration
|
|
256
|
+
* ```html
|
|
257
|
+
* <div comEmptyStateIcon>
|
|
258
|
+
* <img src="/assets/empty-mailbox.svg" alt="" class="size-8" />
|
|
259
|
+
* </div>
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* @tokens `--color-muted`, `--color-muted-foreground`
|
|
263
|
+
*/
|
|
264
|
+
class ComEmptyStateIcon {
|
|
265
|
+
emptyState = inject(ComEmptyState);
|
|
266
|
+
computedClass = computed(() => emptyStateIconVariants({ size: this.emptyState.size() }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
|
|
267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
268
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComEmptyStateIcon, isStandalone: true, selector: "[comEmptyStateIcon]", host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
|
|
269
|
+
}
|
|
270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateIcon, decorators: [{
|
|
271
|
+
type: Directive,
|
|
272
|
+
args: [{
|
|
273
|
+
selector: '[comEmptyStateIcon]',
|
|
274
|
+
host: {
|
|
275
|
+
'[class]': 'computedClass()',
|
|
276
|
+
},
|
|
277
|
+
}]
|
|
278
|
+
}] });
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Empty state title directive - styled heading text.
|
|
282
|
+
*
|
|
283
|
+
* Apply to any heading element. Consumer picks the semantic level (h2, h3, etc.).
|
|
284
|
+
* Styling automatically adapts to the parent's `size` input.
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```html
|
|
288
|
+
* <h3 comEmptyStateTitle>No projects yet</h3>
|
|
289
|
+
* ```
|
|
290
|
+
*
|
|
291
|
+
* @tokens `--color-foreground`
|
|
292
|
+
*/
|
|
293
|
+
class ComEmptyStateTitle {
|
|
294
|
+
emptyState = inject(ComEmptyState);
|
|
295
|
+
computedClass = computed(() => emptyStateTitleVariants({ size: this.emptyState.size() }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
|
|
296
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
297
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComEmptyStateTitle, isStandalone: true, selector: "[comEmptyStateTitle]", host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
|
|
298
|
+
}
|
|
299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateTitle, decorators: [{
|
|
300
|
+
type: Directive,
|
|
301
|
+
args: [{
|
|
302
|
+
selector: '[comEmptyStateTitle]',
|
|
303
|
+
host: {
|
|
304
|
+
'[class]': 'computedClass()',
|
|
305
|
+
},
|
|
306
|
+
}]
|
|
307
|
+
}] });
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Empty state description directive - supporting text.
|
|
311
|
+
*
|
|
312
|
+
* Apply to a paragraph or text element.
|
|
313
|
+
* Styling automatically adapts to the parent's `size` input.
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```html
|
|
317
|
+
* <p comEmptyStateDescription>
|
|
318
|
+
* Create your first project to get started organizing your work.
|
|
319
|
+
* </p>
|
|
320
|
+
* ```
|
|
321
|
+
*
|
|
322
|
+
* @tokens `--color-muted-foreground`
|
|
323
|
+
*/
|
|
324
|
+
class ComEmptyStateDescription {
|
|
325
|
+
emptyState = inject(ComEmptyState);
|
|
326
|
+
computedClass = computed(() => emptyStateDescriptionVariants({ size: this.emptyState.size() }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
|
|
327
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
328
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComEmptyStateDescription, isStandalone: true, selector: "[comEmptyStateDescription]", host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
|
|
329
|
+
}
|
|
330
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateDescription, decorators: [{
|
|
331
|
+
type: Directive,
|
|
332
|
+
args: [{
|
|
333
|
+
selector: '[comEmptyStateDescription]',
|
|
334
|
+
host: {
|
|
335
|
+
'[class]': 'computedClass()',
|
|
336
|
+
},
|
|
337
|
+
}]
|
|
338
|
+
}] });
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Empty state actions directive - container for action buttons.
|
|
342
|
+
*
|
|
343
|
+
* Apply to a container element. Place buttons inside.
|
|
344
|
+
* Styling automatically adapts to the parent's `size` input.
|
|
345
|
+
*
|
|
346
|
+
* @example Single action
|
|
347
|
+
* ```html
|
|
348
|
+
* <div comEmptyStateActions>
|
|
349
|
+
* <button comButton>Create Project</button>
|
|
350
|
+
* </div>
|
|
351
|
+
* ```
|
|
352
|
+
*
|
|
353
|
+
* @example Multiple actions
|
|
354
|
+
* ```html
|
|
355
|
+
* <div comEmptyStateActions>
|
|
356
|
+
* <button comButton variant="outline">Clear Filters</button>
|
|
357
|
+
* <button comButton>New Search</button>
|
|
358
|
+
* </div>
|
|
359
|
+
* ```
|
|
360
|
+
*/
|
|
361
|
+
class ComEmptyStateActions {
|
|
362
|
+
emptyState = inject(ComEmptyState);
|
|
363
|
+
computedClass = computed(() => emptyStateActionsVariants({ size: this.emptyState.size() }), ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
|
|
364
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateActions, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
365
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ComEmptyStateActions, isStandalone: true, selector: "[comEmptyStateActions]", host: { properties: { "class": "computedClass()" } }, ngImport: i0 });
|
|
366
|
+
}
|
|
367
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComEmptyStateActions, decorators: [{
|
|
368
|
+
type: Directive,
|
|
369
|
+
args: [{
|
|
370
|
+
selector: '[comEmptyStateActions]',
|
|
371
|
+
host: {
|
|
372
|
+
'[class]': 'computedClass()',
|
|
373
|
+
},
|
|
374
|
+
}]
|
|
375
|
+
}] });
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Generated bundle index. Do not edit.
|
|
379
|
+
*/
|
|
380
|
+
|
|
381
|
+
export { ComEmptyState, ComEmptyStateActions, ComEmptyStateDescription, ComEmptyStateIcon, ComEmptyStateTitle, emptyStateActionsVariants, emptyStateDescriptionVariants, emptyStateIconVariants, emptyStateTitleVariants, emptyStateVariants };
|
|
382
|
+
//# sourceMappingURL=ngx-com-components-empty-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-com-components-empty-state.mjs","sources":["../../../projects/com/components/empty-state/empty-state.variants.ts","../../../projects/com/components/empty-state/empty-state.component.ts","../../../projects/com/components/empty-state/empty-state-icon.directive.ts","../../../projects/com/components/empty-state/empty-state-title.directive.ts","../../../projects/com/components/empty-state/empty-state-description.directive.ts","../../../projects/com/components/empty-state/empty-state-actions.directive.ts","../../../projects/com/components/empty-state/ngx-com-components-empty-state.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport type EmptyStateSize = 'sm' | 'md' | 'lg';\nexport type EmptyStateAlign = 'start' | 'center';\nexport type EmptyStateOrientation = 'vertical' | 'horizontal';\n\n/**\n * CVA variants for the empty state container.\n *\n * @tokens `--color-foreground`, `--color-muted`, `--color-muted-foreground`\n */\nexport const emptyStateVariants: (props?: {\n size?: EmptyStateSize;\n align?: EmptyStateAlign;\n orientation?: EmptyStateOrientation;\n}) => string = cva('flex', {\n variants: {\n orientation: {\n vertical: 'flex-col',\n horizontal: 'flex-row',\n },\n align: {\n center: 'items-center text-center',\n start: 'items-start text-left',\n },\n size: {\n sm: 'gap-2 py-4',\n md: 'gap-3 py-6',\n lg: 'gap-4 py-10',\n },\n },\n compoundVariants: [\n { orientation: 'horizontal', align: 'center', class: 'justify-center' },\n { orientation: 'horizontal', align: 'start', class: 'justify-start' },\n ],\n defaultVariants: {\n size: 'md',\n align: 'center',\n orientation: 'vertical',\n },\n});\n\n/**\n * CVA variants for the empty state icon container.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`\n */\nexport const emptyStateIconVariants: (props?: { size?: EmptyStateSize }) => string = cva(\n 'flex items-center justify-center shrink-0 bg-muted text-muted-foreground',\n {\n variants: {\n size: {\n sm: 'size-10 rounded-lg',\n md: 'size-14 rounded-xl',\n lg: 'size-20 rounded-2xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n/**\n * CVA variants for the empty state title.\n *\n * @tokens `--color-foreground`\n */\nexport const emptyStateTitleVariants: (props?: { size?: EmptyStateSize }) => string = cva(\n 'font-heading tracking-tight text-foreground',\n {\n variants: {\n size: {\n sm: 'text-sm font-medium',\n md: 'text-base font-semibold',\n lg: 'text-lg font-semibold',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n/**\n * CVA variants for the empty state description.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const emptyStateDescriptionVariants: (props?: { size?: EmptyStateSize }) => string = cva(\n 'text-muted-foreground',\n {\n variants: {\n size: {\n sm: 'text-xs max-w-[200px]',\n md: 'text-sm max-w-xs',\n lg: 'text-base max-w-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n/**\n * CVA variants for the empty state actions container.\n */\nexport const emptyStateActionsVariants: (props?: { size?: EmptyStateSize }) => string = cva(\n 'flex flex-wrap items-center justify-center',\n {\n variants: {\n size: {\n sm: 'gap-2 pt-1',\n md: 'gap-2.5 pt-2',\n lg: 'gap-3 pt-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { mergeClasses } from 'ngx-com/utils';\nimport { emptyStateVariants } from './empty-state.variants';\nimport type { EmptyStateSize, EmptyStateAlign, EmptyStateOrientation } from './empty-state.variants';\n\n/**\n * Empty state component - a placeholder surface for when there is no data to display.\n *\n * Common use cases include:\n * - Empty lists or tables (\"No results found\")\n * - Initial states before user action (\"Create your first project\")\n * - Search results with no matches (\"No items match your search\")\n * - Error recovery states (\"Something went wrong. Try again.\")\n *\n * The component is a pure layout container that accepts projected content through attribute directives.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-foreground`\n *\n * @example Minimal empty state\n * ```html\n * <com-empty-state>\n * <div comEmptyStateIcon>\n * <com-icon name=\"inbox\" size=\"xl\" />\n * </div>\n * <h3 comEmptyStateTitle>No messages</h3>\n * </com-empty-state>\n * ```\n *\n * @example Full empty state with description and action\n * ```html\n * <com-empty-state>\n * <div comEmptyStateIcon>\n * <com-icon name=\"folder-open\" size=\"xl\" />\n * </div>\n * <h3 comEmptyStateTitle>No projects yet</h3>\n * <p comEmptyStateDescription>\n * Create your first project to get started organizing your work.\n * </p>\n * <div comEmptyStateActions>\n * <button comButton>Create Project</button>\n * </div>\n * </com-empty-state>\n * ```\n *\n * @example Search empty state with secondary action\n * ```html\n * <com-empty-state>\n * <div comEmptyStateIcon>\n * <com-icon name=\"search-x\" size=\"xl\" />\n * </div>\n * <h3 comEmptyStateTitle>No results found</h3>\n * <p comEmptyStateDescription>\n * Try adjusting your search terms or filters.\n * </p>\n * <div comEmptyStateActions>\n * <button comButton variant=\"outline\">Clear Filters</button>\n * <button comButton>New Search</button>\n * </div>\n * </com-empty-state>\n * ```\n *\n * @example Small size for inline contexts\n * ```html\n * <com-empty-state size=\"sm\">\n * <div comEmptyStateIcon>\n * <com-icon name=\"list\" size=\"lg\" />\n * </div>\n * <h4 comEmptyStateTitle>No items</h4>\n * </com-empty-state>\n * ```\n *\n * @example Large size for full-page empty states\n * ```html\n * <com-empty-state size=\"lg\">\n * <div comEmptyStateIcon>\n * <com-icon name=\"rocket\" size=\"2xl\" />\n * </div>\n * <h2 comEmptyStateTitle>Welcome to Acme</h2>\n * <p comEmptyStateDescription>\n * Your dashboard is ready. Start by creating your first resource.\n * </p>\n * <div comEmptyStateActions>\n * <button comButton size=\"lg\">Get Started</button>\n * </div>\n * </com-empty-state>\n * ```\n *\n * @example Horizontal orientation\n * ```html\n * <com-empty-state orientation=\"horizontal\" align=\"start\">\n * <div comEmptyStateIcon>\n * <com-icon name=\"alert-circle\" size=\"lg\" />\n * </div>\n * <h4 comEmptyStateTitle>No notifications</h4>\n * <p comEmptyStateDescription>You're all caught up!</p>\n * </com-empty-state>\n * ```\n *\n * @example Left-aligned for sidebar contexts\n * ```html\n * <com-empty-state align=\"start\">\n * <div comEmptyStateIcon>\n * <com-icon name=\"users\" size=\"lg\" />\n * </div>\n * <h4 comEmptyStateTitle>No team members</h4>\n * <p comEmptyStateDescription>Invite people to collaborate.</p>\n * <div comEmptyStateActions>\n * <button comButton size=\"sm\">Invite</button>\n * </div>\n * </com-empty-state>\n * ```\n */\n@Component({\n selector: 'com-empty-state',\n exportAs: 'comEmptyState',\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComEmptyState {\n /** Controls overall scale: icon container size, text sizes, spacing. */\n readonly size: InputSignal<EmptyStateSize> = input<EmptyStateSize>('md');\n\n /** Horizontal alignment of content. */\n readonly align: InputSignal<EmptyStateAlign> = input<EmptyStateAlign>('center');\n\n /** Layout direction: vertical stacks content, horizontal places icon beside text. */\n readonly orientation: InputSignal<EmptyStateOrientation> = input<EmptyStateOrientation>('vertical');\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n emptyStateVariants({\n size: this.size(),\n align: this.align(),\n orientation: this.orientation(),\n }),\n this.userClass()\n )\n );\n}\n","import { computed, Directive, inject, type Signal } from '@angular/core';\nimport { ComEmptyState } from './empty-state.component';\nimport { emptyStateIconVariants } from './empty-state.variants';\n\n/**\n * Empty state icon container directive - styled circular background for icon/illustration.\n *\n * Apply to a container element. Place any content inside (typically `com-icon`).\n * Styling automatically adapts to the parent's `size` input.\n *\n * @example\n * ```html\n * <div comEmptyStateIcon>\n * <com-icon name=\"inbox\" size=\"xl\" />\n * </div>\n * ```\n *\n * @example With custom illustration\n * ```html\n * <div comEmptyStateIcon>\n * <img src=\"/assets/empty-mailbox.svg\" alt=\"\" class=\"size-8\" />\n * </div>\n * ```\n *\n * @tokens `--color-muted`, `--color-muted-foreground`\n */\n@Directive({\n selector: '[comEmptyStateIcon]',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComEmptyStateIcon {\n private readonly emptyState = inject(ComEmptyState);\n\n protected readonly computedClass: Signal<string> = computed(() =>\n emptyStateIconVariants({ size: this.emptyState.size() })\n );\n}\n","import { computed, Directive, inject, type Signal } from '@angular/core';\nimport { ComEmptyState } from './empty-state.component';\nimport { emptyStateTitleVariants } from './empty-state.variants';\n\n/**\n * Empty state title directive - styled heading text.\n *\n * Apply to any heading element. Consumer picks the semantic level (h2, h3, etc.).\n * Styling automatically adapts to the parent's `size` input.\n *\n * @example\n * ```html\n * <h3 comEmptyStateTitle>No projects yet</h3>\n * ```\n *\n * @tokens `--color-foreground`\n */\n@Directive({\n selector: '[comEmptyStateTitle]',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComEmptyStateTitle {\n private readonly emptyState = inject(ComEmptyState);\n\n protected readonly computedClass: Signal<string> = computed(() =>\n emptyStateTitleVariants({ size: this.emptyState.size() })\n );\n}\n","import { computed, Directive, inject, type Signal } from '@angular/core';\nimport { ComEmptyState } from './empty-state.component';\nimport { emptyStateDescriptionVariants } from './empty-state.variants';\n\n/**\n * Empty state description directive - supporting text.\n *\n * Apply to a paragraph or text element.\n * Styling automatically adapts to the parent's `size` input.\n *\n * @example\n * ```html\n * <p comEmptyStateDescription>\n * Create your first project to get started organizing your work.\n * </p>\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Directive({\n selector: '[comEmptyStateDescription]',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComEmptyStateDescription {\n private readonly emptyState = inject(ComEmptyState);\n\n protected readonly computedClass: Signal<string> = computed(() =>\n emptyStateDescriptionVariants({ size: this.emptyState.size() })\n );\n}\n","import { computed, Directive, inject, type Signal } from '@angular/core';\nimport { ComEmptyState } from './empty-state.component';\nimport { emptyStateActionsVariants } from './empty-state.variants';\n\n/**\n * Empty state actions directive - container for action buttons.\n *\n * Apply to a container element. Place buttons inside.\n * Styling automatically adapts to the parent's `size` input.\n *\n * @example Single action\n * ```html\n * <div comEmptyStateActions>\n * <button comButton>Create Project</button>\n * </div>\n * ```\n *\n * @example Multiple actions\n * ```html\n * <div comEmptyStateActions>\n * <button comButton variant=\"outline\">Clear Filters</button>\n * <button comButton>New Search</button>\n * </div>\n * ```\n */\n@Directive({\n selector: '[comEmptyStateActions]',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComEmptyStateActions {\n private readonly emptyState = inject(ComEmptyState);\n\n protected readonly computedClass: Signal<string> = computed(() =>\n emptyStateActionsVariants({ size: this.emptyState.size() })\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|