@shival99/z-ui 1.9.12 → 1.9.14
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/assets/css/base.css +0 -16
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs +129 -12
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +142 -8
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +65 -16
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-chat.mjs +18 -7
- package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +7 -2
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-filter.mjs +150 -3
- package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +13 -6
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs +61 -0
- package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +13 -33
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-switch.mjs +16 -6
- package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +510 -24
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +27 -2
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs +44 -260
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-upload.mjs +1 -4
- package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-providers.mjs +7 -2
- package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-services.mjs +441 -182
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-utils.mjs +6 -1
- package/fesm2022/shival99-z-ui-utils.mjs.map +1 -1
- package/package.json +5 -1
- package/types/shival99-z-ui-components-z-accordion.d.ts +22 -4
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +33 -7
- package/types/shival99-z-ui-components-z-breadcrumb.d.ts +13 -3
- package/types/shival99-z-ui-components-z-chat.d.ts +1 -0
- package/types/shival99-z-ui-components-z-drawer.d.ts +2 -0
- package/types/shival99-z-ui-components-z-filter.d.ts +17 -0
- package/types/shival99-z-ui-components-z-modal.d.ts +4 -1
- package/types/shival99-z-ui-components-z-select.d.ts +1 -1
- package/types/shival99-z-ui-components-z-skeleton-auto.d.ts +35 -0
- package/types/shival99-z-ui-components-z-skeleton.d.ts +3 -7
- package/types/shival99-z-ui-components-z-switch.d.ts +7 -1
- package/types/shival99-z-ui-components-z-table.d.ts +268 -6
- package/types/shival99-z-ui-components-z-tabs.d.ts +3 -3
- package/types/shival99-z-ui-components-z-timeline.d.ts +24 -60
- package/types/shival99-z-ui-providers.d.ts +6 -2
- package/types/shival99-z-ui-services.d.ts +43 -1
- package/types/shival99-z-ui-utils.d.ts +2 -1
|
@@ -1,222 +1,79 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
+
import { input, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
4
|
import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
|
|
4
5
|
import { zMergeClasses } from '@shival99/z-ui/utils';
|
|
5
6
|
import { cva } from 'class-variance-authority';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
// Host container
|
|
9
|
+
const zTimelineVariants = cva(['relative block'], {
|
|
8
10
|
variants: {
|
|
9
11
|
zSize: {
|
|
10
12
|
sm: 'text-sm',
|
|
11
13
|
default: 'text-base',
|
|
12
14
|
lg: 'text-lg',
|
|
13
15
|
},
|
|
14
|
-
zLayout: {
|
|
15
|
-
default: '',
|
|
16
|
-
reversed: '',
|
|
17
|
-
alternate: 'sm:max-w-4xl sm:mx-auto',
|
|
18
|
-
},
|
|
19
16
|
},
|
|
20
17
|
defaultVariants: {
|
|
21
18
|
zSize: 'default',
|
|
22
|
-
zLayout: 'default',
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
const zTimelineItemVariants = cva(['group relative pb-10 last:pb-0'], {
|
|
26
|
-
variants: {
|
|
27
|
-
zLayout: {
|
|
28
|
-
default: 'pl-8 sm:pl-44',
|
|
29
|
-
reversed: 'pr-8 sm:pr-44 text-right',
|
|
30
|
-
alternate: 'pl-8 sm:pl-0 sm:grid sm:grid-cols-[1fr_24px_1fr] sm:gap-4',
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
defaultVariants: {
|
|
34
|
-
zLayout: 'default',
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
const zTimelineHeaderVariants = cva([
|
|
38
|
-
'mb-1 flex flex-col items-start',
|
|
39
|
-
'before:absolute before:h-full before:-translate-x-1/2 before:translate-y-3 before:self-start before:w-px',
|
|
40
|
-
'group-last:before:hidden',
|
|
41
|
-
], {
|
|
42
|
-
variants: {
|
|
43
|
-
hasIcon: {
|
|
44
|
-
true: '',
|
|
45
|
-
false: [
|
|
46
|
-
'after:absolute after:box-content after:h-2 after:w-2 after:-translate-x-1/2 after:translate-y-1.5 after:rounded-full after:border-4 after:border-primary-foreground/95 after:bg-primary',
|
|
47
|
-
],
|
|
48
|
-
},
|
|
49
|
-
zColor: {
|
|
50
|
-
default: '',
|
|
51
|
-
primary: '',
|
|
52
|
-
success: '',
|
|
53
|
-
warning: '',
|
|
54
|
-
error: '',
|
|
55
|
-
info: '',
|
|
56
|
-
},
|
|
57
|
-
zLineStyle: {
|
|
58
|
-
solid: 'before:bg-border',
|
|
59
|
-
dashed: 'before:border-l before:border-dashed before:border-border before:bg-transparent',
|
|
60
|
-
},
|
|
61
|
-
zLayout: {
|
|
62
|
-
default: 'before:left-2 after:left-2 sm:flex-row sm:before:left-0 sm:before:ml-[10rem] sm:after:left-0 sm:after:ml-[10rem]',
|
|
63
|
-
reversed: 'items-end before:right-2 after:right-2 before:translate-x-1/2 after:translate-x-1/2 sm:flex-row-reverse sm:before:right-0 sm:before:mr-[10rem] sm:after:right-0 sm:after:mr-[10rem]',
|
|
64
|
-
alternate: 'before:left-2 after:left-2 sm:before:hidden sm:after:hidden',
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
compoundVariants: [
|
|
68
|
-
{ hasIcon: false, zColor: 'default', class: 'after:bg-foreground' },
|
|
69
|
-
{ hasIcon: false, zColor: 'primary', class: 'after:bg-primary after:border-primary/20' },
|
|
70
|
-
{ hasIcon: false, zColor: 'success', class: 'after:bg-green-500 after:border-green-500/20' },
|
|
71
|
-
{ hasIcon: false, zColor: 'warning', class: 'after:bg-amber-500 after:border-amber-500/20' },
|
|
72
|
-
{ hasIcon: false, zColor: 'error', class: 'after:bg-destructive after:border-destructive/20' },
|
|
73
|
-
{ hasIcon: false, zColor: 'info', class: 'after:bg-blue-500 after:border-blue-500/20' },
|
|
74
|
-
{ hasIcon: true, zLayout: 'default', class: 'sm:pl-[1.375rem] sm:before:ml-[10.75rem]' },
|
|
75
|
-
{ hasIcon: true, zLayout: 'reversed', class: 'sm:pr-[1.375rem] sm:before:mr-[10.75rem]' },
|
|
76
|
-
],
|
|
77
|
-
defaultVariants: {
|
|
78
|
-
hasIcon: false,
|
|
79
|
-
zColor: 'default',
|
|
80
|
-
zLineStyle: 'solid',
|
|
81
|
-
zLayout: 'default',
|
|
82
19
|
},
|
|
83
20
|
});
|
|
84
|
-
|
|
21
|
+
// Outer dot ring
|
|
22
|
+
const zTimelineDotVariants = cva(['flex shrink-0 items-center justify-center rounded-full bg-primary/10 transition-colors duration-300'], {
|
|
85
23
|
variants: {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
},
|
|
91
|
-
defaultVariants: {
|
|
92
|
-
zLineStyle: 'solid',
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
const zTimelineLineVariants = cva(['absolute top-0 -bottom-8 left-1/2 -translate-x-1/2 w-px group-last:hidden'], {
|
|
96
|
-
variants: {
|
|
97
|
-
zLineStyle: {
|
|
98
|
-
solid: 'bg-border',
|
|
99
|
-
dashed: 'border-l border-dashed border-border',
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
defaultVariants: {
|
|
103
|
-
zLineStyle: 'solid',
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
const zTimelineDotCircleVariants = cva(['h-2 w-2 rounded-full border-4 border-primary-foreground/95 shrink-0 relative z-10 box-content'], {
|
|
107
|
-
variants: {
|
|
108
|
-
zColor: {
|
|
109
|
-
default: 'bg-primary',
|
|
110
|
-
primary: 'bg-primary border-primary/20',
|
|
111
|
-
success: 'bg-green-500 border-green-500/20',
|
|
112
|
-
warning: 'bg-amber-500 border-amber-500/20',
|
|
113
|
-
error: 'bg-destructive border-destructive/20',
|
|
114
|
-
info: 'bg-blue-500 border-blue-500/20',
|
|
24
|
+
zSize: {
|
|
25
|
+
sm: 'size-4.5',
|
|
26
|
+
default: 'size-6',
|
|
27
|
+
lg: 'size-7',
|
|
115
28
|
},
|
|
116
29
|
},
|
|
117
30
|
defaultVariants: {
|
|
118
|
-
|
|
31
|
+
zSize: 'default',
|
|
119
32
|
},
|
|
120
33
|
});
|
|
121
|
-
|
|
34
|
+
// Inner dot
|
|
35
|
+
const zTimelineInnerDotVariants = cva(['rounded-full bg-primary transition-colors duration-300'], {
|
|
122
36
|
variants: {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
warning: 'bg-amber-500 text-white',
|
|
128
|
-
error: 'bg-destructive text-destructive-foreground',
|
|
129
|
-
info: 'bg-blue-500 text-white',
|
|
130
|
-
},
|
|
131
|
-
zIconStyle: {
|
|
132
|
-
filled: 'size-6',
|
|
133
|
-
outline: 'size-5 bg-background',
|
|
134
|
-
},
|
|
135
|
-
zLayout: {
|
|
136
|
-
default: 'left-2 sm:left-0 sm:ml-[10.75rem]',
|
|
137
|
-
reversed: 'right-2 translate-x-1/2 sm:right-0 sm:mr-[10.75rem]',
|
|
138
|
-
alternate: 'left-2 sm:hidden',
|
|
37
|
+
zSize: {
|
|
38
|
+
sm: 'size-2',
|
|
39
|
+
default: 'size-3',
|
|
40
|
+
lg: 'size-3.5',
|
|
139
41
|
},
|
|
140
42
|
},
|
|
141
|
-
compoundVariants: [
|
|
142
|
-
{ zIconStyle: 'outline', zColor: 'default', class: '!text-foreground !bg-background !size-7' },
|
|
143
|
-
{ zIconStyle: 'outline', zColor: 'primary', class: '!text-foreground !bg-background !size-7' },
|
|
144
|
-
{ zIconStyle: 'outline', zColor: 'success', class: '!text-green-500 !bg-background !size-7' },
|
|
145
|
-
{ zIconStyle: 'outline', zColor: 'warning', class: '!text-amber-500 !bg-background !size-7' },
|
|
146
|
-
{ zIconStyle: 'outline', zColor: 'error', class: '!text-destructive !bg-background !size-7' },
|
|
147
|
-
{ zIconStyle: 'outline', zColor: 'info', class: '!text-blue-500 !bg-background !size-7' },
|
|
148
|
-
],
|
|
149
43
|
defaultVariants: {
|
|
150
|
-
|
|
151
|
-
zIconStyle: 'filled',
|
|
152
|
-
zLayout: 'default',
|
|
44
|
+
zSize: 'default',
|
|
153
45
|
},
|
|
154
46
|
});
|
|
155
|
-
|
|
47
|
+
// Time badge
|
|
48
|
+
const zTimelineTimeBadgeVariants = cva([
|
|
49
|
+
'inline-flex w-fit shrink-0 items-center justify-center rounded-sm bg-primary px-2 py-0.5 text-sm font-medium text-primary-foreground transition-colors duration-300',
|
|
50
|
+
], {
|
|
156
51
|
variants: {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
warning: 'bg-amber-500 text-white',
|
|
162
|
-
error: 'bg-destructive text-destructive-foreground',
|
|
163
|
-
info: 'bg-blue-500 text-white',
|
|
164
|
-
},
|
|
165
|
-
zIconStyle: {
|
|
166
|
-
filled: '',
|
|
167
|
-
outline: 'bg-background',
|
|
52
|
+
zSize: {
|
|
53
|
+
sm: 'text-xs',
|
|
54
|
+
default: 'text-sm',
|
|
55
|
+
lg: 'text-sm',
|
|
168
56
|
},
|
|
169
57
|
},
|
|
170
|
-
compoundVariants: [
|
|
171
|
-
{ zIconStyle: 'outline', zColor: 'default', class: 'text-foreground border-foreground' },
|
|
172
|
-
{ zIconStyle: 'outline', zColor: 'primary', class: 'text-primary border-2 border-primary bg-background' },
|
|
173
|
-
{ zIconStyle: 'outline', zColor: 'success', class: 'text-green-500 border-2 border-green-500 bg-background' },
|
|
174
|
-
{ zIconStyle: 'outline', zColor: 'warning', class: 'text-amber-500 border-2 border-amber-500 bg-background' },
|
|
175
|
-
{ zIconStyle: 'outline', zColor: 'error', class: 'text-destructive border-2 border-destructive bg-background' },
|
|
176
|
-
{ zIconStyle: 'outline', zColor: 'info', class: 'text-blue-500 border-2 border-blue-500 bg-background' },
|
|
177
|
-
],
|
|
178
58
|
defaultVariants: {
|
|
179
|
-
|
|
180
|
-
zIconStyle: 'filled',
|
|
59
|
+
zSize: 'default',
|
|
181
60
|
},
|
|
182
61
|
});
|
|
183
|
-
|
|
62
|
+
// Title
|
|
63
|
+
const zTimelineTitleVariants = cva(['font-medium leading-snug text-foreground'], {
|
|
184
64
|
variants: {
|
|
185
65
|
zSize: {
|
|
186
66
|
sm: 'text-base',
|
|
187
|
-
default: 'text-xl',
|
|
188
|
-
lg: 'text-2xl',
|
|
67
|
+
default: 'text-lg md:text-xl lg:text-2xl',
|
|
68
|
+
lg: 'text-xl md:text-2xl',
|
|
189
69
|
},
|
|
190
70
|
},
|
|
191
71
|
defaultVariants: {
|
|
192
72
|
zSize: 'default',
|
|
193
73
|
},
|
|
194
74
|
});
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
|
|
198
|
-
'mb-3 h-6 w-36 translate-y-0.5 justify-center uppercase',
|
|
199
|
-
'sm:absolute sm:mb-0',
|
|
200
|
-
], {
|
|
201
|
-
variants: {
|
|
202
|
-
zVariant: {
|
|
203
|
-
default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',
|
|
204
|
-
secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
205
|
-
outline: 'border-border text-foreground',
|
|
206
|
-
muted: 'border-transparent bg-muted text-muted-foreground',
|
|
207
|
-
},
|
|
208
|
-
zLayout: {
|
|
209
|
-
default: 'left-0',
|
|
210
|
-
reversed: 'right-0',
|
|
211
|
-
alternate: 'sm:static sm:translate-y-0 sm:mb-0',
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
defaultVariants: {
|
|
215
|
-
zVariant: 'default',
|
|
216
|
-
zLayout: 'default',
|
|
217
|
-
},
|
|
218
|
-
});
|
|
219
|
-
const zTimelineDescriptionVariants = cva(['text-muted-foreground'], {
|
|
75
|
+
// Description
|
|
76
|
+
const zTimelineDescriptionVariants = cva(['text-muted-foreground leading-relaxed'], {
|
|
220
77
|
variants: {
|
|
221
78
|
zSize: {
|
|
222
79
|
sm: 'text-xs',
|
|
@@ -228,106 +85,33 @@ const zTimelineDescriptionVariants = cva(['text-muted-foreground'], {
|
|
|
228
85
|
zSize: 'default',
|
|
229
86
|
},
|
|
230
87
|
});
|
|
231
|
-
const zTimelineContentVariants = cva([''], {
|
|
232
|
-
variants: {
|
|
233
|
-
zContentStyle: {
|
|
234
|
-
simple: '',
|
|
235
|
-
card: 'rounded-[0.3125rem] border border-border bg-card px-3 py-2 shadow-xs',
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
defaultVariants: {
|
|
239
|
-
zContentStyle: 'simple',
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
const zTimelineAlternateSideVariants = cva(['flex'], {
|
|
243
|
-
variants: {
|
|
244
|
-
side: {
|
|
245
|
-
left: 'justify-end text-right',
|
|
246
|
-
right: 'justify-start text-left',
|
|
247
|
-
},
|
|
248
|
-
},
|
|
249
|
-
defaultVariants: {
|
|
250
|
-
side: 'left',
|
|
251
|
-
},
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
class ZTimelineClassPipe {
|
|
255
|
-
transform(type, options = {}) {
|
|
256
|
-
const { item, layout, lineStyle, iconStyle, timeVariant, side } = options;
|
|
257
|
-
switch (type) {
|
|
258
|
-
case 'item':
|
|
259
|
-
return zTimelineItemVariants({ zLayout: layout });
|
|
260
|
-
case 'header':
|
|
261
|
-
return zTimelineHeaderVariants({
|
|
262
|
-
hasIcon: !!item?.icon,
|
|
263
|
-
zColor: item?.color ?? 'default',
|
|
264
|
-
zLineStyle: lineStyle,
|
|
265
|
-
zLayout: layout,
|
|
266
|
-
});
|
|
267
|
-
case 'icon':
|
|
268
|
-
return zTimelineIconVariants({
|
|
269
|
-
zColor: item?.color ?? 'default',
|
|
270
|
-
zIconStyle: iconStyle,
|
|
271
|
-
zLayout: layout,
|
|
272
|
-
});
|
|
273
|
-
case 'iconCenter':
|
|
274
|
-
return zTimelineIconCenterVariants({
|
|
275
|
-
zColor: item?.color ?? 'default',
|
|
276
|
-
zIconStyle: iconStyle,
|
|
277
|
-
});
|
|
278
|
-
case 'dot':
|
|
279
|
-
return zTimelineDotVariants({ zLineStyle: lineStyle });
|
|
280
|
-
case 'line':
|
|
281
|
-
return zTimelineLineVariants({ zLineStyle: lineStyle });
|
|
282
|
-
case 'dotCircle':
|
|
283
|
-
return zTimelineDotCircleVariants({ zColor: item?.color ?? 'default' });
|
|
284
|
-
case 'time':
|
|
285
|
-
return zTimelineTimeVariants({ zVariant: timeVariant, zLayout: layout });
|
|
286
|
-
case 'side':
|
|
287
|
-
return zTimelineAlternateSideVariants({ side });
|
|
288
|
-
default:
|
|
289
|
-
return '';
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZTimelineClassPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
293
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: ZTimelineClassPipe, isStandalone: true, name: "zTimelineClass" });
|
|
294
|
-
}
|
|
295
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZTimelineClassPipe, decorators: [{
|
|
296
|
-
type: Pipe,
|
|
297
|
-
args: [{ name: 'zTimelineClass', standalone: true }]
|
|
298
|
-
}] });
|
|
299
88
|
|
|
300
89
|
class ZTimelineComponent {
|
|
301
90
|
class = input('', ...(ngDevMode ? [{ debugName: "class" }] : []));
|
|
302
91
|
zItems = input([], ...(ngDevMode ? [{ debugName: "zItems" }] : []));
|
|
303
92
|
zSize = input('default', ...(ngDevMode ? [{ debugName: "zSize" }] : []));
|
|
304
|
-
zTimeVariant = input('default', ...(ngDevMode ? [{ debugName: "zTimeVariant" }] : []));
|
|
305
|
-
zLineStyle = input('solid', ...(ngDevMode ? [{ debugName: "zLineStyle" }] : []));
|
|
306
|
-
zIconStyle = input('filled', ...(ngDevMode ? [{ debugName: "zIconStyle" }] : []));
|
|
307
93
|
zLayout = input('default', ...(ngDevMode ? [{ debugName: "zLayout" }] : []));
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
dotClasses = computed(() => zTimelineDotVariants({ zLineStyle: this.zLineStyle() }), ...(ngDevMode ? [{ debugName: "dotClasses" }] : []));
|
|
313
|
-
lineClasses = computed(() => zTimelineLineVariants({ zLineStyle: this.zLineStyle() }), ...(ngDevMode ? [{ debugName: "lineClasses" }] : []));
|
|
94
|
+
hostClasses = computed(() => zMergeClasses(zTimelineVariants({ zSize: this.zSize() }), this.class()), ...(ngDevMode ? [{ debugName: "hostClasses" }] : []));
|
|
95
|
+
dotClasses = computed(() => zTimelineDotVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "dotClasses" }] : []));
|
|
96
|
+
innerDotClasses = computed(() => zTimelineInnerDotVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "innerDotClasses" }] : []));
|
|
97
|
+
badgeClasses = computed(() => zTimelineTimeBadgeVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "badgeClasses" }] : []));
|
|
314
98
|
titleClasses = computed(() => zTimelineTitleVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "titleClasses" }] : []));
|
|
315
99
|
descriptionClasses = computed(() => zTimelineDescriptionVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "descriptionClasses" }] : []));
|
|
316
|
-
|
|
317
|
-
|
|
100
|
+
isCareer = computed(() => this.zLayout() === 'career', ...(ngDevMode ? [{ debugName: "isCareer" }] : []));
|
|
101
|
+
isAlternate = computed(() => this.zLayout() === 'alternate', ...(ngDevMode ? [{ debugName: "isAlternate" }] : []));
|
|
318
102
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
319
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ZTimelineComponent, isStandalone: true, selector: "z-timeline", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zTimeVariant: { classPropertyName: "zTimeVariant", publicName: "zTimeVariant", isSignal: true, isRequired: false, transformFunction: null }, zLineStyle: { classPropertyName: "zLineStyle", publicName: "zLineStyle", isSignal: true, isRequired: false, transformFunction: null }, zIconStyle: { classPropertyName: "zIconStyle", publicName: "zIconStyle", isSignal: true, isRequired: false, transformFunction: null }, zLayout: { classPropertyName: "zLayout", publicName: "zLayout", isSignal: true, isRequired: false, transformFunction: null }, zContentStyle: { classPropertyName: "zContentStyle", publicName: "zContentStyle", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: "@for (item of zItems(); track item.id ?? $index; let isEven = $even) {\n <div [class]=\"itemClasses()\">\n @if (item.icon) {\n <div [class]=\"'icon' | zTimelineClass: { item: item, layout: zLayout(), iconStyle: zIconStyle() }\">\n <z-icon [zType]=\"item.icon\" [zSize]=\"iconSize()\" />\n </div>\n }\n\n @if (isAlternate()) {\n <div [class]=\"'side' | zTimelineClass: { side: 'left' }\">\n @if (isEven) {\n @if (item.time) {\n <div [class]=\"'time' | zTimelineClass: { layout: zLayout(), timeVariant: zTimeVariant() }\">\n {{ item.time }}\n </div>\n }\n } @else {\n <div [class]=\"contentClasses()\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <div [class]=\"descriptionClasses()\">{{ item.description }}</div>\n }\n </div>\n }\n </div>\n\n <div [class]=\"dotClasses()\">\n <div [class]=\"lineClasses()\"></div>\n @if (item.icon) {\n <div [class]=\"'iconCenter' | zTimelineClass: { item: item, iconStyle: zIconStyle() }\">\n <z-icon [zType]=\"item.icon\" [zSize]=\"iconSize()\" />\n </div>\n } @else {\n <div [class]=\"'dotCircle' | zTimelineClass: { item: item }\"></div>\n }\n </div>\n\n <div [class]=\"'side' | zTimelineClass: { side: 'right' }\">\n @if (isEven) {\n <div [class]=\"contentClasses()\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <div [class]=\"descriptionClasses()\">{{ item.description }}</div>\n }\n </div>\n } @else {\n @if (item.time) {\n <div [class]=\"'time' | zTimelineClass: { layout: zLayout(), timeVariant: zTimeVariant() }\">\n {{ item.time }}\n </div>\n }\n }\n </div>\n } @else {\n <div [class]=\"'header' | zTimelineClass: { item: item, layout: zLayout(), lineStyle: zLineStyle() }\">\n @if (item.time) {\n <div [class]=\"'time' | zTimelineClass: { layout: zLayout(), timeVariant: zTimeVariant() }\">\n {{ item.time }}\n </div>\n }\n <div [class]=\"contentClasses()\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <div [class]=\"descriptionClasses()\">{{ item.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n}\n", dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "pipe", type: ZTimelineClassPipe, name: "zTimelineClass" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
103
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ZTimelineComponent, isStandalone: true, selector: "z-timeline", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zItems: { classPropertyName: "zItems", publicName: "zItems", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zLayout: { classPropertyName: "zLayout", publicName: "zLayout", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: "@if (isCareer()) {\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- CAREER / EXPERIENCE LAYOUT -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"mx-auto w-full max-w-3xl px-2 sm:px-4\">\n <div class=\"relative ml-3\">\n <div class=\"bg-border absolute top-3 bottom-3 left-0 w-0.5\"></div>\n\n @for (item of zItems(); track item.id ?? $index; let isLast = $last) {\n <article class=\"relative pb-10 pl-8\" [class.pb-0]=\"isLast\">\n <span\n class=\"bg-background border-primary absolute top-2 left-0 z-[1] size-3 -translate-x-1/2 rounded-full border-2\"></span>\n\n <div class=\"space-y-3\">\n <div class=\"flex items-center gap-2.5\">\n <div class=\"bg-accent flex size-9 shrink-0 items-center justify-center rounded-full\">\n <z-icon [zType]=\"item.icon ?? 'lucideBuilding2'\" zSize=\"18\" class=\"text-muted-foreground\" />\n </div>\n <span class=\"text-base font-medium\">{{ item.company ?? item.subtitle ?? 'Experience' }}</span>\n </div>\n\n <div class=\"space-y-2\">\n <h3 class=\"text-foreground text-xl leading-tight font-semibold tracking-[-0.01em]\">{{ item.title }}</h3>\n @if (item.period || item.time) {\n <div class=\"text-muted-foreground flex items-center gap-2 text-sm\">\n <z-icon zType=\"lucideCalendar\" zSize=\"15\" class=\"shrink-0\" />\n <span>{{ item.period ?? item.time }}</span>\n </div>\n }\n </div>\n\n @if (item.description) {\n <p class=\"text-muted-foreground text-sm leading-relaxed sm:text-base\">{{ item.description }}</p>\n }\n\n @if (item.technologies?.length) {\n <div class=\"flex flex-wrap gap-2\">\n @for (tech of item.technologies; track tech) {\n <span\n class=\"bg-secondary text-secondary-foreground inline-flex items-center rounded-full border px-2.5 py-1 text-xs font-medium\">\n {{ tech }}\n </span>\n }\n </div>\n }\n\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </article>\n }\n </div>\n </div>\n} @else if (isAlternate()) {\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- ALTERNATE / ZIGZAG LAYOUT -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"relative mx-auto max-w-7xl space-y-4\">\n @for (item of zItems(); track item.id ?? $index; let isEven = $even) {\n <div class=\"flex items-start md:flex-row\" [class.md:flex-row-reverse]=\"!isEven\">\n <!-- Opposite-side badge (desktop only) -->\n <div\n class=\"hidden w-full md:flex md:flex-1 md:items-start\"\n [class.md:justify-end]=\"isEven\"\n [class.md:justify-start]=\"!isEven\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\">{{ item.time }}</span>\n }\n </div>\n\n <!-- Center marker column -->\n <div class=\"relative flex flex-col items-center pr-4 md:px-4\">\n <div class=\"z-40 flex items-center justify-center\">\n <span [class]=\"dotClasses()\">\n <span [class]=\"innerDotClasses()\"></span>\n </span>\n </div>\n </div>\n\n <!-- Content side -->\n <div class=\"w-full md:flex md:flex-1\" [class.md:justify-start]=\"isEven\" [class.md:justify-end]=\"!isEven\">\n <!-- Mobile badge -->\n @if (item.time) {\n <span [class]=\"badgeClasses()\" class=\"mb-4 block text-left md:hidden\">{{ item.time }}</span>\n }\n\n <div>\n <!-- Card -->\n <div\n class=\"bg-card text-card-foreground mb-8 flex flex-col gap-6 overflow-hidden rounded-xl border py-6 shadow-sm md:max-w-136\">\n <div class=\"space-y-4 px-6\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <p [class]=\"descriptionClasses()\">{{ item.description }}</p>\n }\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Vertical line (absolute, behind everything) -->\n <div class=\"bg-border absolute top-3 bottom-3 left-3 w-0.5 overflow-hidden md:left-1/2 md:-translate-x-1/2\">\n <div class=\"bg-primary absolute inset-x-0 top-0 w-0.5 rounded-full\" style=\"height: 100%; opacity: 1\"></div>\n </div>\n </div>\n} @else {\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- DEFAULT / CHANGELOG LAYOUT -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @for (item of zItems(); track item.id ?? $index; let isLast = $last) {\n <div class=\"relative flex justify-end gap-2\">\n <!-- Left: badge + subtitle (desktop only) -->\n <div class=\"flex w-36 flex-col items-end gap-2 self-start pb-4 max-md:hidden\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\">{{ item.time }}</span>\n }\n @if (item.subtitle) {\n <div class=\"text-muted-foreground text-right text-sm font-medium\">{{ item.subtitle }}</div>\n }\n </div>\n\n <!-- Center: dot + line -->\n <div class=\"relative flex flex-col items-center\">\n <div class=\"bg-background relative z-[1] flex size-6 items-center justify-center rounded-full\">\n <span [class]=\"dotClasses()\">\n <span [class]=\"innerDotClasses()\"></span>\n </span>\n </div>\n @if (!isLast) {\n <span class=\"bg-border absolute top-6 bottom-0 left-1/2 w-px -translate-x-1/2\"></span>\n <span class=\"w-px flex-1\"></span>\n }\n </div>\n\n <!-- Right: content -->\n <div class=\"flex flex-1 flex-col gap-4 pb-11 pl-3 md:pl-6 lg:pl-9\">\n <!-- Mobile badge + subtitle -->\n <div class=\"flex flex-col gap-2 md:hidden\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\" class=\"w-fit text-xs\">{{ item.time }}</span>\n }\n @if (item.subtitle) {\n <div class=\"font-medium\">{{ item.subtitle }}</div>\n }\n </div>\n\n <!-- Content -->\n <div class=\"space-y-4\">\n <div class=\"space-y-3\">\n <h3 [class]=\"titleClasses()\">{{ item.title }}</h3>\n @if (item.description) {\n <p [class]=\"descriptionClasses()\">{{ item.description }}</p>\n }\n </div>\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
320
104
|
}
|
|
321
105
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZTimelineComponent, decorators: [{
|
|
322
106
|
type: Component,
|
|
323
|
-
args: [{ selector: 'z-timeline', imports: [
|
|
107
|
+
args: [{ selector: 'z-timeline', imports: [NgTemplateOutlet, ZIconComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
324
108
|
'[class]': 'hostClasses()',
|
|
325
|
-
}, template: "@for (item of zItems(); track item.id ?? $index; let
|
|
326
|
-
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "zItems", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }],
|
|
109
|
+
}, template: "@if (isCareer()) {\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- CAREER / EXPERIENCE LAYOUT -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"mx-auto w-full max-w-3xl px-2 sm:px-4\">\n <div class=\"relative ml-3\">\n <div class=\"bg-border absolute top-3 bottom-3 left-0 w-0.5\"></div>\n\n @for (item of zItems(); track item.id ?? $index; let isLast = $last) {\n <article class=\"relative pb-10 pl-8\" [class.pb-0]=\"isLast\">\n <span\n class=\"bg-background border-primary absolute top-2 left-0 z-[1] size-3 -translate-x-1/2 rounded-full border-2\"></span>\n\n <div class=\"space-y-3\">\n <div class=\"flex items-center gap-2.5\">\n <div class=\"bg-accent flex size-9 shrink-0 items-center justify-center rounded-full\">\n <z-icon [zType]=\"item.icon ?? 'lucideBuilding2'\" zSize=\"18\" class=\"text-muted-foreground\" />\n </div>\n <span class=\"text-base font-medium\">{{ item.company ?? item.subtitle ?? 'Experience' }}</span>\n </div>\n\n <div class=\"space-y-2\">\n <h3 class=\"text-foreground text-xl leading-tight font-semibold tracking-[-0.01em]\">{{ item.title }}</h3>\n @if (item.period || item.time) {\n <div class=\"text-muted-foreground flex items-center gap-2 text-sm\">\n <z-icon zType=\"lucideCalendar\" zSize=\"15\" class=\"shrink-0\" />\n <span>{{ item.period ?? item.time }}</span>\n </div>\n }\n </div>\n\n @if (item.description) {\n <p class=\"text-muted-foreground text-sm leading-relaxed sm:text-base\">{{ item.description }}</p>\n }\n\n @if (item.technologies?.length) {\n <div class=\"flex flex-wrap gap-2\">\n @for (tech of item.technologies; track tech) {\n <span\n class=\"bg-secondary text-secondary-foreground inline-flex items-center rounded-full border px-2.5 py-1 text-xs font-medium\">\n {{ tech }}\n </span>\n }\n </div>\n }\n\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </article>\n }\n </div>\n </div>\n} @else if (isAlternate()) {\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- ALTERNATE / ZIGZAG LAYOUT -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <div class=\"relative mx-auto max-w-7xl space-y-4\">\n @for (item of zItems(); track item.id ?? $index; let isEven = $even) {\n <div class=\"flex items-start md:flex-row\" [class.md:flex-row-reverse]=\"!isEven\">\n <!-- Opposite-side badge (desktop only) -->\n <div\n class=\"hidden w-full md:flex md:flex-1 md:items-start\"\n [class.md:justify-end]=\"isEven\"\n [class.md:justify-start]=\"!isEven\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\">{{ item.time }}</span>\n }\n </div>\n\n <!-- Center marker column -->\n <div class=\"relative flex flex-col items-center pr-4 md:px-4\">\n <div class=\"z-40 flex items-center justify-center\">\n <span [class]=\"dotClasses()\">\n <span [class]=\"innerDotClasses()\"></span>\n </span>\n </div>\n </div>\n\n <!-- Content side -->\n <div class=\"w-full md:flex md:flex-1\" [class.md:justify-start]=\"isEven\" [class.md:justify-end]=\"!isEven\">\n <!-- Mobile badge -->\n @if (item.time) {\n <span [class]=\"badgeClasses()\" class=\"mb-4 block text-left md:hidden\">{{ item.time }}</span>\n }\n\n <div>\n <!-- Card -->\n <div\n class=\"bg-card text-card-foreground mb-8 flex flex-col gap-6 overflow-hidden rounded-xl border py-6 shadow-sm md:max-w-136\">\n <div class=\"space-y-4 px-6\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <p [class]=\"descriptionClasses()\">{{ item.description }}</p>\n }\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Vertical line (absolute, behind everything) -->\n <div class=\"bg-border absolute top-3 bottom-3 left-3 w-0.5 overflow-hidden md:left-1/2 md:-translate-x-1/2\">\n <div class=\"bg-primary absolute inset-x-0 top-0 w-0.5 rounded-full\" style=\"height: 100%; opacity: 1\"></div>\n </div>\n </div>\n} @else {\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n <!-- DEFAULT / CHANGELOG LAYOUT -->\n <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n @for (item of zItems(); track item.id ?? $index; let isLast = $last) {\n <div class=\"relative flex justify-end gap-2\">\n <!-- Left: badge + subtitle (desktop only) -->\n <div class=\"flex w-36 flex-col items-end gap-2 self-start pb-4 max-md:hidden\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\">{{ item.time }}</span>\n }\n @if (item.subtitle) {\n <div class=\"text-muted-foreground text-right text-sm font-medium\">{{ item.subtitle }}</div>\n }\n </div>\n\n <!-- Center: dot + line -->\n <div class=\"relative flex flex-col items-center\">\n <div class=\"bg-background relative z-[1] flex size-6 items-center justify-center rounded-full\">\n <span [class]=\"dotClasses()\">\n <span [class]=\"innerDotClasses()\"></span>\n </span>\n </div>\n @if (!isLast) {\n <span class=\"bg-border absolute top-6 bottom-0 left-1/2 w-px -translate-x-1/2\"></span>\n <span class=\"w-px flex-1\"></span>\n }\n </div>\n\n <!-- Right: content -->\n <div class=\"flex flex-1 flex-col gap-4 pb-11 pl-3 md:pl-6 lg:pl-9\">\n <!-- Mobile badge + subtitle -->\n <div class=\"flex flex-col gap-2 md:hidden\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\" class=\"w-fit text-xs\">{{ item.time }}</span>\n }\n @if (item.subtitle) {\n <div class=\"font-medium\">{{ item.subtitle }}</div>\n }\n </div>\n\n <!-- Content -->\n <div class=\"space-y-4\">\n <div class=\"space-y-3\">\n <h3 [class]=\"titleClasses()\">{{ item.title }}</h3>\n @if (item.description) {\n <p [class]=\"descriptionClasses()\">{{ item.description }}</p>\n }\n </div>\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </div>\n </div>\n }\n}\n" }]
|
|
110
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "zItems", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLayout", required: false }] }] } });
|
|
327
111
|
|
|
328
112
|
/**
|
|
329
113
|
* Generated bundle index. Do not edit.
|
|
330
114
|
*/
|
|
331
115
|
|
|
332
|
-
export {
|
|
116
|
+
export { ZTimelineComponent, zTimelineDescriptionVariants, zTimelineDotVariants, zTimelineInnerDotVariants, zTimelineTimeBadgeVariants, zTimelineTitleVariants, zTimelineVariants };
|
|
333
117
|
//# sourceMappingURL=shival99-z-ui-components-z-timeline.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-timeline.mjs","sources":["../../../../libs/core-ui/components/z-timeline/z-timeline.variants.ts","../../../../libs/core-ui/components/z-timeline/pipes/z-timeline-class.pipe.ts","../../../../libs/core-ui/components/z-timeline/z-timeline.component.ts","../../../../libs/core-ui/components/z-timeline/z-timeline.component.html","../../../../libs/core-ui/components/z-timeline/shival99-z-ui-components-z-timeline.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zTimelineVariants = cva(['block relative'], {\n variants: {\n zSize: {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n },\n zLayout: {\n default: '',\n reversed: '',\n alternate: 'sm:max-w-4xl sm:mx-auto',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zLayout: 'default',\n },\n});\n\nexport const zTimelineItemVariants = cva(['group relative pb-10 last:pb-0'], {\n variants: {\n zLayout: {\n default: 'pl-8 sm:pl-44',\n reversed: 'pr-8 sm:pr-44 text-right',\n alternate: 'pl-8 sm:pl-0 sm:grid sm:grid-cols-[1fr_24px_1fr] sm:gap-4',\n },\n },\n defaultVariants: {\n zLayout: 'default',\n },\n});\n\nexport const zTimelineHeaderVariants = cva(\n [\n 'mb-1 flex flex-col items-start',\n 'before:absolute before:h-full before:-translate-x-1/2 before:translate-y-3 before:self-start before:w-px',\n 'group-last:before:hidden',\n ],\n {\n variants: {\n hasIcon: {\n true: '',\n false: [\n 'after:absolute after:box-content after:h-2 after:w-2 after:-translate-x-1/2 after:translate-y-1.5 after:rounded-full after:border-4 after:border-primary-foreground/95 after:bg-primary',\n ],\n },\n zColor: {\n default: '',\n primary: '',\n success: '',\n warning: '',\n error: '',\n info: '',\n },\n zLineStyle: {\n solid: 'before:bg-border',\n dashed: 'before:border-l before:border-dashed before:border-border before:bg-transparent',\n },\n zLayout: {\n default:\n 'before:left-2 after:left-2 sm:flex-row sm:before:left-0 sm:before:ml-[10rem] sm:after:left-0 sm:after:ml-[10rem]',\n reversed:\n 'items-end before:right-2 after:right-2 before:translate-x-1/2 after:translate-x-1/2 sm:flex-row-reverse sm:before:right-0 sm:before:mr-[10rem] sm:after:right-0 sm:after:mr-[10rem]',\n alternate: 'before:left-2 after:left-2 sm:before:hidden sm:after:hidden',\n },\n },\n compoundVariants: [\n { hasIcon: false, zColor: 'default', class: 'after:bg-foreground' },\n { hasIcon: false, zColor: 'primary', class: 'after:bg-primary after:border-primary/20' },\n { hasIcon: false, zColor: 'success', class: 'after:bg-green-500 after:border-green-500/20' },\n { hasIcon: false, zColor: 'warning', class: 'after:bg-amber-500 after:border-amber-500/20' },\n { hasIcon: false, zColor: 'error', class: 'after:bg-destructive after:border-destructive/20' },\n { hasIcon: false, zColor: 'info', class: 'after:bg-blue-500 after:border-blue-500/20' },\n { hasIcon: true, zLayout: 'default', class: 'sm:pl-[1.375rem] sm:before:ml-[10.75rem]' },\n { hasIcon: true, zLayout: 'reversed', class: 'sm:pr-[1.375rem] sm:before:mr-[10.75rem]' },\n ],\n defaultVariants: {\n hasIcon: false,\n zColor: 'default',\n zLineStyle: 'solid',\n zLayout: 'default',\n },\n }\n);\n\nexport const zTimelineDotVariants = cva(['hidden sm:flex relative z-10 flex-col items-center'], {\n variants: {\n zLineStyle: {\n solid: '',\n dashed: '',\n },\n },\n defaultVariants: {\n zLineStyle: 'solid',\n },\n});\n\nexport const zTimelineLineVariants = cva(\n ['absolute top-0 -bottom-8 left-1/2 -translate-x-1/2 w-px group-last:hidden'],\n {\n variants: {\n zLineStyle: {\n solid: 'bg-border',\n dashed: 'border-l border-dashed border-border',\n },\n },\n defaultVariants: {\n zLineStyle: 'solid',\n },\n }\n);\n\nexport const zTimelineDotCircleVariants = cva(\n ['h-2 w-2 rounded-full border-4 border-primary-foreground/95 shrink-0 relative z-10 box-content'],\n {\n variants: {\n zColor: {\n default: 'bg-primary',\n primary: 'bg-primary border-primary/20',\n success: 'bg-green-500 border-green-500/20',\n warning: 'bg-amber-500 border-amber-500/20',\n error: 'bg-destructive border-destructive/20',\n info: 'bg-blue-500 border-blue-500/20',\n },\n },\n defaultVariants: {\n zColor: 'default',\n },\n }\n);\n\nexport const zTimelineIconVariants = cva(\n ['absolute z-10 -translate-x-1/2 translate-y-0.5 flex items-center justify-center rounded-full'],\n {\n variants: {\n zColor: {\n default: 'text-foreground bg-background',\n primary: 'bg-primary text-primary-foreground',\n success: 'bg-green-500 text-white',\n warning: 'bg-amber-500 text-white',\n error: 'bg-destructive text-destructive-foreground',\n info: 'bg-blue-500 text-white',\n },\n zIconStyle: {\n filled: 'size-6',\n outline: 'size-5 bg-background',\n },\n zLayout: {\n default: 'left-2 sm:left-0 sm:ml-[10.75rem]',\n reversed: 'right-2 translate-x-1/2 sm:right-0 sm:mr-[10.75rem]',\n alternate: 'left-2 sm:hidden',\n },\n },\n compoundVariants: [\n { zIconStyle: 'outline', zColor: 'default', class: '!text-foreground !bg-background !size-7' },\n { zIconStyle: 'outline', zColor: 'primary', class: '!text-foreground !bg-background !size-7' },\n { zIconStyle: 'outline', zColor: 'success', class: '!text-green-500 !bg-background !size-7' },\n { zIconStyle: 'outline', zColor: 'warning', class: '!text-amber-500 !bg-background !size-7' },\n { zIconStyle: 'outline', zColor: 'error', class: '!text-destructive !bg-background !size-7' },\n { zIconStyle: 'outline', zColor: 'info', class: '!text-blue-500 !bg-background !size-7' },\n ],\n defaultVariants: {\n zColor: 'default',\n zIconStyle: 'filled',\n zLayout: 'default',\n },\n }\n);\n\nexport const zTimelineIconCenterVariants = cva(\n ['flex size-6 items-center justify-center rounded-full shrink-0 relative z-10'],\n {\n variants: {\n zColor: {\n default: 'text-foreground bg-background border-2 border-foreground',\n primary: 'bg-primary text-primary-foreground',\n success: 'bg-green-500 text-white',\n warning: 'bg-amber-500 text-white',\n error: 'bg-destructive text-destructive-foreground',\n info: 'bg-blue-500 text-white',\n },\n zIconStyle: {\n filled: '',\n outline: 'bg-background',\n },\n },\n compoundVariants: [\n { zIconStyle: 'outline', zColor: 'default', class: 'text-foreground border-foreground' },\n { zIconStyle: 'outline', zColor: 'primary', class: 'text-primary border-2 border-primary bg-background' },\n { zIconStyle: 'outline', zColor: 'success', class: 'text-green-500 border-2 border-green-500 bg-background' },\n { zIconStyle: 'outline', zColor: 'warning', class: 'text-amber-500 border-2 border-amber-500 bg-background' },\n { zIconStyle: 'outline', zColor: 'error', class: 'text-destructive border-2 border-destructive bg-background' },\n { zIconStyle: 'outline', zColor: 'info', class: 'text-blue-500 border-2 border-blue-500 bg-background' },\n ],\n defaultVariants: {\n zColor: 'default',\n zIconStyle: 'filled',\n },\n }\n);\n\nexport const zTimelineTitleVariants = cva(['font-bold text-primary'], {\n variants: {\n zSize: {\n sm: 'text-base',\n default: 'text-xl',\n lg: 'text-2xl',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport const zTimelineTimeVariants = cva(\n [\n 'inline-flex items-center rounded-[0.25rem] border px-2.5 py-0.5 text-xs font-semibold transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'mb-3 h-6 w-36 translate-y-0.5 justify-center uppercase',\n 'sm:absolute sm:mb-0',\n ],\n {\n variants: {\n zVariant: {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n outline: 'border-border text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n },\n zLayout: {\n default: 'left-0',\n reversed: 'right-0',\n alternate: 'sm:static sm:translate-y-0 sm:mb-0',\n },\n },\n defaultVariants: {\n zVariant: 'default',\n zLayout: 'default',\n },\n }\n);\n\nexport const zTimelineDescriptionVariants = cva(['text-muted-foreground'], {\n variants: {\n zSize: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport const zTimelineContentVariants = cva([''], {\n variants: {\n zContentStyle: {\n simple: '',\n card: 'rounded-[0.3125rem] border border-border bg-card px-3 py-2 shadow-xs',\n },\n },\n defaultVariants: {\n zContentStyle: 'simple',\n },\n});\n\nexport const zTimelineAlternateSideVariants = cva(['flex'], {\n variants: {\n side: {\n left: 'justify-end text-right',\n right: 'justify-start text-left',\n },\n },\n defaultVariants: {\n side: 'left',\n },\n});\n\nexport type ZTimelineVariants = VariantProps<typeof zTimelineVariants>;\nexport type ZTimelineItemVariants = VariantProps<typeof zTimelineItemVariants>;\nexport type ZTimelineHeaderVariants = VariantProps<typeof zTimelineHeaderVariants>;\nexport type ZTimelineIconVariants = VariantProps<typeof zTimelineIconVariants>;\nexport type ZTimelineTimeVariants = VariantProps<typeof zTimelineTimeVariants>;\nexport type ZTimelineContentVariants = VariantProps<typeof zTimelineContentVariants>;\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTimelineClassOptions, ZTimelineClassType } from '../z-timeline.types';\nimport {\n zTimelineAlternateSideVariants,\n zTimelineDotCircleVariants,\n zTimelineDotVariants,\n zTimelineHeaderVariants,\n zTimelineIconCenterVariants,\n zTimelineIconVariants,\n zTimelineItemVariants,\n zTimelineLineVariants,\n zTimelineTimeVariants,\n} from '../z-timeline.variants';\n\n@Pipe({ name: 'zTimelineClass', standalone: true })\nexport class ZTimelineClassPipe implements PipeTransform {\n transform(type: ZTimelineClassType, options: ZTimelineClassOptions = {}): string {\n const { item, layout, lineStyle, iconStyle, timeVariant, side } = options;\n\n switch (type) {\n case 'item':\n return zTimelineItemVariants({ zLayout: layout });\n\n case 'header':\n return zTimelineHeaderVariants({\n hasIcon: !!item?.icon,\n zColor: item?.color ?? 'default',\n zLineStyle: lineStyle,\n zLayout: layout,\n });\n\n case 'icon':\n return zTimelineIconVariants({\n zColor: item?.color ?? 'default',\n zIconStyle: iconStyle,\n zLayout: layout,\n });\n\n case 'iconCenter':\n return zTimelineIconCenterVariants({\n zColor: item?.color ?? 'default',\n zIconStyle: iconStyle,\n });\n\n case 'dot':\n return zTimelineDotVariants({ zLineStyle: lineStyle });\n\n case 'line':\n return zTimelineLineVariants({ zLineStyle: lineStyle });\n\n case 'dotCircle':\n return zTimelineDotCircleVariants({ zColor: item?.color ?? 'default' });\n\n case 'time':\n return zTimelineTimeVariants({ zVariant: timeVariant, zLayout: layout });\n\n case 'side':\n return zTimelineAlternateSideVariants({ side });\n\n default:\n return '';\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ZTimelineClassPipe } from './pipes';\nimport type {\n ZTimelineContentStyle,\n ZTimelineIconStyle,\n ZTimelineItem,\n ZTimelineLayout,\n ZTimelineLineStyle,\n ZTimelineSize,\n} from './z-timeline.types';\nimport {\n zTimelineContentVariants,\n zTimelineDescriptionVariants,\n zTimelineDotVariants,\n zTimelineItemVariants,\n zTimelineLineVariants,\n zTimelineTitleVariants,\n zTimelineVariants,\n} from './z-timeline.variants';\n\n@Component({\n selector: 'z-timeline',\n imports: [ZIconComponent, ZTimelineClassPipe],\n standalone: true,\n templateUrl: './z-timeline.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZTimelineComponent {\n public readonly class = input<ClassValue>('');\n public readonly zItems = input<ZTimelineItem[]>([]);\n public readonly zSize = input<ZTimelineSize>('default');\n public readonly zTimeVariant = input<'default' | 'secondary' | 'outline' | 'muted'>('default');\n public readonly zLineStyle = input<ZTimelineLineStyle>('solid');\n public readonly zIconStyle = input<ZTimelineIconStyle>('filled');\n public readonly zLayout = input<ZTimelineLayout>('default');\n public readonly zContentStyle = input<ZTimelineContentStyle>('simple');\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses(zTimelineVariants({ zSize: this.zSize(), zLayout: this.zLayout() }), this.class())\n );\n\n protected readonly isAlternate = computed(() => this.zLayout() === 'alternate');\n protected readonly itemClasses = computed(() => zTimelineItemVariants({ zLayout: this.zLayout() }));\n protected readonly dotClasses = computed(() => zTimelineDotVariants({ zLineStyle: this.zLineStyle() }));\n protected readonly lineClasses = computed(() => zTimelineLineVariants({ zLineStyle: this.zLineStyle() }));\n protected readonly titleClasses = computed(() => zTimelineTitleVariants({ zSize: this.zSize() }));\n protected readonly descriptionClasses = computed(() => zTimelineDescriptionVariants({ zSize: this.zSize() }));\n protected readonly contentClasses = computed(() => zTimelineContentVariants({ zContentStyle: this.zContentStyle() }));\n protected readonly iconSize = computed(() => (this.zIconStyle() === 'outline' ? '18' : '14'));\n}\n","@for (item of zItems(); track item.id ?? $index; let isEven = $even) {\n <div [class]=\"itemClasses()\">\n @if (item.icon) {\n <div [class]=\"'icon' | zTimelineClass: { item: item, layout: zLayout(), iconStyle: zIconStyle() }\">\n <z-icon [zType]=\"item.icon\" [zSize]=\"iconSize()\" />\n </div>\n }\n\n @if (isAlternate()) {\n <div [class]=\"'side' | zTimelineClass: { side: 'left' }\">\n @if (isEven) {\n @if (item.time) {\n <div [class]=\"'time' | zTimelineClass: { layout: zLayout(), timeVariant: zTimeVariant() }\">\n {{ item.time }}\n </div>\n }\n } @else {\n <div [class]=\"contentClasses()\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <div [class]=\"descriptionClasses()\">{{ item.description }}</div>\n }\n </div>\n }\n </div>\n\n <div [class]=\"dotClasses()\">\n <div [class]=\"lineClasses()\"></div>\n @if (item.icon) {\n <div [class]=\"'iconCenter' | zTimelineClass: { item: item, iconStyle: zIconStyle() }\">\n <z-icon [zType]=\"item.icon\" [zSize]=\"iconSize()\" />\n </div>\n } @else {\n <div [class]=\"'dotCircle' | zTimelineClass: { item: item }\"></div>\n }\n </div>\n\n <div [class]=\"'side' | zTimelineClass: { side: 'right' }\">\n @if (isEven) {\n <div [class]=\"contentClasses()\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <div [class]=\"descriptionClasses()\">{{ item.description }}</div>\n }\n </div>\n } @else {\n @if (item.time) {\n <div [class]=\"'time' | zTimelineClass: { layout: zLayout(), timeVariant: zTimeVariant() }\">\n {{ item.time }}\n </div>\n }\n }\n </div>\n } @else {\n <div [class]=\"'header' | zTimelineClass: { item: item, layout: zLayout(), lineStyle: zLineStyle() }\">\n @if (item.time) {\n <div [class]=\"'time' | zTimelineClass: { layout: zLayout(), timeVariant: zTimeVariant() }\">\n {{ item.time }}\n </div>\n }\n <div [class]=\"contentClasses()\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <div [class]=\"descriptionClasses()\">{{ item.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-timeline.mjs","sources":["../../../../libs/core-ui/components/z-timeline/z-timeline.variants.ts","../../../../libs/core-ui/components/z-timeline/z-timeline.component.ts","../../../../libs/core-ui/components/z-timeline/z-timeline.component.html","../../../../libs/core-ui/components/z-timeline/shival99-z-ui-components-z-timeline.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// Host container\nexport const zTimelineVariants = cva(['relative block'], {\n variants: {\n zSize: {\n sm: 'text-sm',\n default: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\n// Outer dot ring\nexport const zTimelineDotVariants = cva(\n ['flex shrink-0 items-center justify-center rounded-full bg-primary/10 transition-colors duration-300'],\n {\n variants: {\n zSize: {\n sm: 'size-4.5',\n default: 'size-6',\n lg: 'size-7',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\n// Inner dot\nexport const zTimelineInnerDotVariants = cva(['rounded-full bg-primary transition-colors duration-300'], {\n variants: {\n zSize: {\n sm: 'size-2',\n default: 'size-3',\n lg: 'size-3.5',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\n// Time badge\nexport const zTimelineTimeBadgeVariants = cva(\n [\n 'inline-flex w-fit shrink-0 items-center justify-center rounded-sm bg-primary px-2 py-0.5 text-sm font-medium text-primary-foreground transition-colors duration-300',\n ],\n {\n variants: {\n zSize: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-sm',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\n// Title\nexport const zTimelineTitleVariants = cva(['font-medium leading-snug text-foreground'], {\n variants: {\n zSize: {\n sm: 'text-base',\n default: 'text-lg md:text-xl lg:text-2xl',\n lg: 'text-xl md:text-2xl',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\n// Description\nexport const zTimelineDescriptionVariants = cva(['text-muted-foreground leading-relaxed'], {\n variants: {\n zSize: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZTimelineVariants = VariantProps<typeof zTimelineVariants>;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { ZTimelineItem, ZTimelineLayout, ZTimelineSize } from './z-timeline.types';\nimport {\n zTimelineDescriptionVariants,\n zTimelineDotVariants,\n zTimelineInnerDotVariants,\n zTimelineTimeBadgeVariants,\n zTimelineTitleVariants,\n zTimelineVariants,\n} from './z-timeline.variants';\n\n@Component({\n selector: 'z-timeline',\n imports: [NgTemplateOutlet, ZIconComponent],\n standalone: true,\n templateUrl: './z-timeline.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZTimelineComponent {\n public readonly class = input<ClassValue>('');\n public readonly zItems = input<ZTimelineItem[]>([]);\n public readonly zSize = input<ZTimelineSize>('default');\n public readonly zLayout = input<ZTimelineLayout>('default');\n\n protected readonly hostClasses = computed(() =>\n zMergeClasses(zTimelineVariants({ zSize: this.zSize() }), this.class())\n );\n\n protected readonly dotClasses = computed(() => zTimelineDotVariants({ zSize: this.zSize() }));\n\n protected readonly innerDotClasses = computed(() => zTimelineInnerDotVariants({ zSize: this.zSize() }));\n\n protected readonly badgeClasses = computed(() => zTimelineTimeBadgeVariants({ zSize: this.zSize() }));\n\n protected readonly titleClasses = computed(() => zTimelineTitleVariants({ zSize: this.zSize() }));\n\n protected readonly descriptionClasses = computed(() => zTimelineDescriptionVariants({ zSize: this.zSize() }));\n\n protected readonly isCareer = computed(() => this.zLayout() === 'career');\n\n protected readonly isAlternate = computed(() => this.zLayout() === 'alternate');\n}\n","@if (isCareer()) {\n <!-- ══════════════════════════════════════════════════════════ -->\n <!-- CAREER / EXPERIENCE LAYOUT -->\n <!-- ══════════════════════════════════════════════════════════ -->\n <div class=\"mx-auto w-full max-w-3xl px-2 sm:px-4\">\n <div class=\"relative ml-3\">\n <div class=\"bg-border absolute top-3 bottom-3 left-0 w-0.5\"></div>\n\n @for (item of zItems(); track item.id ?? $index; let isLast = $last) {\n <article class=\"relative pb-10 pl-8\" [class.pb-0]=\"isLast\">\n <span\n class=\"bg-background border-primary absolute top-2 left-0 z-[1] size-3 -translate-x-1/2 rounded-full border-2\"></span>\n\n <div class=\"space-y-3\">\n <div class=\"flex items-center gap-2.5\">\n <div class=\"bg-accent flex size-9 shrink-0 items-center justify-center rounded-full\">\n <z-icon [zType]=\"item.icon ?? 'lucideBuilding2'\" zSize=\"18\" class=\"text-muted-foreground\" />\n </div>\n <span class=\"text-base font-medium\">{{ item.company ?? item.subtitle ?? 'Experience' }}</span>\n </div>\n\n <div class=\"space-y-2\">\n <h3 class=\"text-foreground text-xl leading-tight font-semibold tracking-[-0.01em]\">{{ item.title }}</h3>\n @if (item.period || item.time) {\n <div class=\"text-muted-foreground flex items-center gap-2 text-sm\">\n <z-icon zType=\"lucideCalendar\" zSize=\"15\" class=\"shrink-0\" />\n <span>{{ item.period ?? item.time }}</span>\n </div>\n }\n </div>\n\n @if (item.description) {\n <p class=\"text-muted-foreground text-sm leading-relaxed sm:text-base\">{{ item.description }}</p>\n }\n\n @if (item.technologies?.length) {\n <div class=\"flex flex-wrap gap-2\">\n @for (tech of item.technologies; track tech) {\n <span\n class=\"bg-secondary text-secondary-foreground inline-flex items-center rounded-full border px-2.5 py-1 text-xs font-medium\">\n {{ tech }}\n </span>\n }\n </div>\n }\n\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </article>\n }\n </div>\n </div>\n} @else if (isAlternate()) {\n <!-- ══════════════════════════════════════════════════════════ -->\n <!-- ALTERNATE / ZIGZAG LAYOUT -->\n <!-- ══════════════════════════════════════════════════════════ -->\n <div class=\"relative mx-auto max-w-7xl space-y-4\">\n @for (item of zItems(); track item.id ?? $index; let isEven = $even) {\n <div class=\"flex items-start md:flex-row\" [class.md:flex-row-reverse]=\"!isEven\">\n <!-- Opposite-side badge (desktop only) -->\n <div\n class=\"hidden w-full md:flex md:flex-1 md:items-start\"\n [class.md:justify-end]=\"isEven\"\n [class.md:justify-start]=\"!isEven\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\">{{ item.time }}</span>\n }\n </div>\n\n <!-- Center marker column -->\n <div class=\"relative flex flex-col items-center pr-4 md:px-4\">\n <div class=\"z-40 flex items-center justify-center\">\n <span [class]=\"dotClasses()\">\n <span [class]=\"innerDotClasses()\"></span>\n </span>\n </div>\n </div>\n\n <!-- Content side -->\n <div class=\"w-full md:flex md:flex-1\" [class.md:justify-start]=\"isEven\" [class.md:justify-end]=\"!isEven\">\n <!-- Mobile badge -->\n @if (item.time) {\n <span [class]=\"badgeClasses()\" class=\"mb-4 block text-left md:hidden\">{{ item.time }}</span>\n }\n\n <div>\n <!-- Card -->\n <div\n class=\"bg-card text-card-foreground mb-8 flex flex-col gap-6 overflow-hidden rounded-xl border py-6 shadow-sm md:max-w-136\">\n <div class=\"space-y-4 px-6\">\n <div [class]=\"titleClasses()\">{{ item.title }}</div>\n @if (item.description) {\n <p [class]=\"descriptionClasses()\">{{ item.description }}</p>\n }\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Vertical line (absolute, behind everything) -->\n <div class=\"bg-border absolute top-3 bottom-3 left-3 w-0.5 overflow-hidden md:left-1/2 md:-translate-x-1/2\">\n <div class=\"bg-primary absolute inset-x-0 top-0 w-0.5 rounded-full\" style=\"height: 100%; opacity: 1\"></div>\n </div>\n </div>\n} @else {\n <!-- ══════════════════════════════════════════════════════════ -->\n <!-- DEFAULT / CHANGELOG LAYOUT -->\n <!-- ══════════════════════════════════════════════════════════ -->\n @for (item of zItems(); track item.id ?? $index; let isLast = $last) {\n <div class=\"relative flex justify-end gap-2\">\n <!-- Left: badge + subtitle (desktop only) -->\n <div class=\"flex w-36 flex-col items-end gap-2 self-start pb-4 max-md:hidden\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\">{{ item.time }}</span>\n }\n @if (item.subtitle) {\n <div class=\"text-muted-foreground text-right text-sm font-medium\">{{ item.subtitle }}</div>\n }\n </div>\n\n <!-- Center: dot + line -->\n <div class=\"relative flex flex-col items-center\">\n <div class=\"bg-background relative z-[1] flex size-6 items-center justify-center rounded-full\">\n <span [class]=\"dotClasses()\">\n <span [class]=\"innerDotClasses()\"></span>\n </span>\n </div>\n @if (!isLast) {\n <span class=\"bg-border absolute top-6 bottom-0 left-1/2 w-px -translate-x-1/2\"></span>\n <span class=\"w-px flex-1\"></span>\n }\n </div>\n\n <!-- Right: content -->\n <div class=\"flex flex-1 flex-col gap-4 pb-11 pl-3 md:pl-6 lg:pl-9\">\n <!-- Mobile badge + subtitle -->\n <div class=\"flex flex-col gap-2 md:hidden\">\n @if (item.time) {\n <span [class]=\"badgeClasses()\" class=\"w-fit text-xs\">{{ item.time }}</span>\n }\n @if (item.subtitle) {\n <div class=\"font-medium\">{{ item.subtitle }}</div>\n }\n </div>\n\n <!-- Content -->\n <div class=\"space-y-4\">\n <div class=\"space-y-3\">\n <h3 [class]=\"titleClasses()\">{{ item.title }}</h3>\n @if (item.description) {\n <p [class]=\"descriptionClasses()\">{{ item.description }}</p>\n }\n </div>\n @if (item.contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"item.contentTemplate\" />\n }\n </div>\n </div>\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -46,10 +46,7 @@ const zUploadDropzoneVariants = cva([
|
|
|
46
46
|
zStatus: 'default',
|
|
47
47
|
},
|
|
48
48
|
});
|
|
49
|
-
const zUploadFileItemVariants = cva([
|
|
50
|
-
'relative flex items-center gap-3 rounded-sm border border-input bg-background p-3',
|
|
51
|
-
'transition-all duration-200',
|
|
52
|
-
], {
|
|
49
|
+
const zUploadFileItemVariants = cva(['relative flex items-center gap-3 rounded-sm border border-input bg-background p-3', 'transition-all duration-200'], {
|
|
53
50
|
variants: {
|
|
54
51
|
zStatus: {
|
|
55
52
|
pending: '',
|