osi-cards-lib 1.5.32 → 1.5.34

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.
Files changed (87) hide show
  1. package/fesm2022/osi-cards-lib.mjs +31889 -0
  2. package/fesm2022/osi-cards-lib.mjs.map +1 -0
  3. package/index.d.ts +11528 -0
  4. package/package.json +25 -13
  5. package/scripts/setup-angular-styles.js +169 -0
  6. package/styles/_components.scss +38 -0
  7. package/styles/_index.scss +25 -0
  8. package/styles/_osi-cards-mixins.scss +459 -0
  9. package/styles/_osi-cards-tokens.scss +333 -0
  10. package/styles/_styles-scoped.scss +81 -0
  11. package/styles/_styles.scss +26 -0
  12. package/styles/bundles/_ai-card.scss +245 -0
  13. package/styles/bundles/_all.scss +68 -0
  14. package/styles/bundles/_base.scss +60 -0
  15. package/styles/bundles/_card-skeleton.scss +290 -0
  16. package/styles/bundles/_index.scss +25 -0
  17. package/styles/bundles/_sections.scss +48 -0
  18. package/styles/bundles/_tokens-only.scss +139 -0
  19. package/styles/components/_ai-card-renderer.scss +104 -0
  20. package/styles/components/_badges.scss +317 -0
  21. package/styles/components/_card-actions.scss +169 -0
  22. package/styles/components/_card-footer.scss +47 -0
  23. package/styles/components/_component-styles.scss +205 -0
  24. package/styles/components/_empty-state.scss +630 -0
  25. package/styles/components/_hero-card.scss +422 -0
  26. package/styles/components/_image-fallback.scss +28 -0
  27. package/styles/components/_streaming-effects.scss +518 -0
  28. package/styles/components/cards/_ai-card.scss +718 -0
  29. package/styles/components/sections/_all-sections.generated.scss +41 -0
  30. package/styles/components/sections/_all-sections.scss +1086 -0
  31. package/styles/components/sections/_balanced-compact-system.scss +186 -0
  32. package/styles/components/sections/_compact-mixins.scss +180 -0
  33. package/styles/components/sections/_component-mixins.scss +454 -0
  34. package/styles/components/sections/_design-system.scss +477 -0
  35. package/styles/components/sections/_design-tokens.scss +308 -0
  36. package/styles/components/sections/_enhanced-design-variables.scss +147 -0
  37. package/styles/components/sections/_master-compact-system.scss +302 -0
  38. package/styles/components/sections/_master-dense-system.scss +239 -0
  39. package/styles/components/sections/_minimalistic-design.scss +268 -0
  40. package/styles/components/sections/_modern-effects.scss +392 -0
  41. package/styles/components/sections/_modern-sections.scss +351 -0
  42. package/styles/components/sections/_perfect-system.scss +204 -0
  43. package/styles/components/sections/_section-animations.scss +331 -0
  44. package/styles/components/sections/_section-shell.scss +337 -0
  45. package/styles/components/sections/_section-types.generated.scss +30 -0
  46. package/styles/components/sections/_sections-all.scss +26 -0
  47. package/styles/components/sections/_sections-base.scss +334 -0
  48. package/styles/components/sections/_typography-system.scss +327 -0
  49. package/styles/components/sections/_ultra-compact-tokens.scss +375 -0
  50. package/styles/components/sections/_unified-section-style.scss +157 -0
  51. package/styles/components/sections/_utility-classes.scss +567 -0
  52. package/styles/components/sections/_visual-effects-library.scss +374 -0
  53. package/styles/core/_animations.scss +1498 -0
  54. package/styles/core/_bootstrap-reset.scss +445 -0
  55. package/styles/core/_color-helpers.scss +46 -0
  56. package/styles/core/_global-unified.scss +118 -0
  57. package/styles/core/_global.scss +73 -0
  58. package/styles/core/_mixins.scss +491 -0
  59. package/styles/core/_surface-layers.scss +76 -0
  60. package/styles/core/_utilities.scss +326 -0
  61. package/styles/core/_variables-unified.scss +57 -0
  62. package/styles/core/_variables.scss +36 -0
  63. package/styles/core/variables/_colors-source.scss +34 -0
  64. package/styles/core/variables/_colors-unified.scss +26 -0
  65. package/styles/core/variables/_colors.scss +21 -0
  66. package/styles/critical.scss +353 -0
  67. package/styles/design-system/_compact-theme.scss +159 -0
  68. package/styles/design-system/_section-base.scss +426 -0
  69. package/styles/design-system/_tokens.scss +237 -0
  70. package/styles/design-system/_unified-sections.scss +215 -0
  71. package/styles/layout/_feature-grid.scss +322 -0
  72. package/styles/layout/_masonry.scss +734 -0
  73. package/styles/layout/_tilt.scss +244 -0
  74. package/styles/micro-interactions.scss +583 -0
  75. package/styles/mixins/_section-mixins.scss +280 -0
  76. package/styles/non-critical.scss +643 -0
  77. package/styles/reset/_framework-reset.scss +457 -0
  78. package/styles/reset/_index.scss +14 -0
  79. package/styles/reset/_shadow-reset.scss +383 -0
  80. package/styles/responsive.scss +326 -0
  81. package/styles/themes.scss +573 -0
  82. package/styles/tokens/_index.scss +92 -0
  83. package/styles/tokens/_master.scss +1404 -0
  84. package/styles/tokens/_section-tokens.generated.scss +140 -0
  85. package/postcss.config.js +0 -81
  86. package/section-registry.json +0 -3864
  87. package/section-registry.schema.json +0 -264
@@ -0,0 +1,454 @@
1
+ // =====================================================================
2
+ // ADVANCED COMPONENT MIXINS
3
+ // =====================================================================
4
+ //
5
+ // Pre-built component patterns for common UI elements.
6
+ // Combines design tokens, effects, and best practices.
7
+ //
8
+ // =====================================================================
9
+
10
+ @use "design-tokens" as *;
11
+ @use "modern-effects" as effects;
12
+ @use "sections-base" as base;
13
+
14
+ // =====================================================================
15
+ // ENHANCED CARD VARIANTS
16
+ // =====================================================================
17
+
18
+ @mixin card-elevated {
19
+ @include base.card;
20
+ @include effects.elevated-card;
21
+ @include effects.shimmer-effect;
22
+ }
23
+
24
+ @mixin card-glass {
25
+ @include effects.glass-card;
26
+ padding: var(--spacing-base);
27
+ border-radius: var(--radius-lg);
28
+ }
29
+
30
+ @mixin card-neumorphic {
31
+ @include effects.neumorphic-card(true);
32
+ padding: var(--spacing-base);
33
+ }
34
+
35
+ @mixin card-with-gradient {
36
+ @include base.card;
37
+ @include effects.gradient-background;
38
+ @include effects.gradient-accent-top;
39
+ }
40
+
41
+ // =====================================================================
42
+ // STAT/METRIC CARDS
43
+ // =====================================================================
44
+
45
+ @mixin stat-card {
46
+ @include base.card;
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: var(--spacing-xs);
50
+ padding: var(--spacing-base);
51
+ min-height: 100px;
52
+ transition: var(--transition-colors), var(--transition-transform);
53
+
54
+ &:hover {
55
+ transform: translateY(calc(var(--motion-distance-xs) * -1));
56
+ }
57
+
58
+ @media (prefers-reduced-motion: reduce) {
59
+ &:hover {
60
+ transform: none;
61
+ }
62
+ }
63
+ }
64
+
65
+ @mixin stat-label {
66
+ font-size: var(--text-xs);
67
+ font-weight: var(--font-semibold);
68
+ text-transform: uppercase;
69
+ letter-spacing: 0.05em;
70
+ color: var(--muted-foreground);
71
+ }
72
+
73
+ @mixin stat-value {
74
+ font-size: var(--text-3xl);
75
+ font-weight: var(--font-bold);
76
+ line-height: var(--leading-tight);
77
+ color: var(--foreground);
78
+ letter-spacing: -0.02em;
79
+ }
80
+
81
+ @mixin stat-change($direction: "neutral") {
82
+ display: inline-flex;
83
+ align-items: center;
84
+ gap: var(--spacing-xs);
85
+ font-size: var(--text-sm);
86
+ font-weight: var(--font-semibold);
87
+
88
+ @if $direction == "positive" {
89
+ color: var(--status-success);
90
+ } @else if $direction == "negative" {
91
+ color: var(--status-error);
92
+ } @else {
93
+ color: var(--muted-foreground);
94
+ }
95
+ }
96
+
97
+ // =====================================================================
98
+ // BADGES & CHIPS
99
+ // =====================================================================
100
+
101
+ @mixin badge-modern($variant: "default") {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ gap: var(--spacing-xs);
105
+ padding: var(--spacing-xs) var(--spacing-sm);
106
+ font-size: var(--text-xs);
107
+ font-weight: var(--font-semibold);
108
+ letter-spacing: 0.03em;
109
+ border-radius: var(--radius-full);
110
+ white-space: nowrap;
111
+ transition: var(--transition-colors);
112
+
113
+ @if $variant == "primary" {
114
+ background: var(--accent-color-10);
115
+ color: var(--accent);
116
+ border: var(--border-width-default) solid var(--accent-color);
117
+ } @else if $variant == "success" {
118
+ background: var(--status-success-10);
119
+ color: var(--status-success);
120
+ } @else if $variant == "warning" {
121
+ background: var(--status-warning-10);
122
+ color: var(--status-warning);
123
+ } @else if $variant == "error" {
124
+ background: var(--status-error-10);
125
+ color: var(--status-error);
126
+ } @else {
127
+ background: var(--muted);
128
+ color: var(--muted-foreground);
129
+ }
130
+
131
+ &:hover {
132
+ opacity: 0.9;
133
+ }
134
+ }
135
+
136
+ @mixin chip-removable {
137
+ @include badge-modern;
138
+ padding-right: var(--spacing-xs);
139
+ cursor: pointer;
140
+
141
+ .chip-remove {
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ width: var(--icon-sm);
146
+ height: var(--icon-sm);
147
+ border-radius: 50%;
148
+ transition: var(--transition-colors);
149
+
150
+ &:hover {
151
+ background: var(--osi-section-item-background-hover);
152
+ }
153
+ }
154
+ }
155
+
156
+ // =====================================================================
157
+ // AVATAR COMPONENTS
158
+ // =====================================================================
159
+
160
+ @mixin avatar($size: 40px) {
161
+ width: $size;
162
+ height: $size;
163
+ border-radius: 50%;
164
+ overflow: hidden;
165
+ flex-shrink: 0;
166
+ position: relative;
167
+ background: var(--accent-color-10);
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: center;
171
+
172
+ img {
173
+ width: 100%;
174
+ height: 100%;
175
+ object-fit: cover;
176
+ }
177
+
178
+ // Fallback initials
179
+ &::before {
180
+ font-size: calc($size * 0.4);
181
+ font-weight: var(--font-semibold);
182
+ color: var(--accent);
183
+ }
184
+ }
185
+
186
+ @mixin avatar-group {
187
+ display: flex;
188
+ align-items: center;
189
+ flex-direction: row-reverse;
190
+ padding-left: var(--spacing-sm);
191
+
192
+ .avatar {
193
+ margin-left: calc(var(--spacing-sm) * -1);
194
+ border: var(--border-width-accent-sm) solid var(--osi-section-item-background);
195
+ transition: transform var(--duration-fast) var(--ease-out);
196
+
197
+ &:hover {
198
+ transform: translateY(calc(var(--motion-distance-xs) * -1));
199
+ z-index: 1;
200
+ }
201
+ }
202
+
203
+ @media (prefers-reduced-motion: reduce) {
204
+ .avatar:hover {
205
+ transform: none;
206
+ }
207
+ }
208
+ }
209
+
210
+ // =====================================================================
211
+ // ICON BUTTONS
212
+ // =====================================================================
213
+
214
+ @mixin icon-button($size: 36px) {
215
+ width: $size;
216
+ height: $size;
217
+ display: inline-flex;
218
+ align-items: center;
219
+ justify-content: center;
220
+ border-radius: var(--radius-md);
221
+ background: transparent;
222
+ border: none;
223
+ color: var(--foreground);
224
+ cursor: pointer;
225
+ transition: var(--transition-colors);
226
+ position: relative;
227
+
228
+ &:hover {
229
+ background: var(--muted);
230
+ }
231
+
232
+ &:active {
233
+ background: var(--border);
234
+ }
235
+
236
+ &:focus-visible {
237
+ outline: var(--border-width-accent-sm) solid var(--accent);
238
+ outline-offset: var(--border-width-accent-sm);
239
+ }
240
+
241
+ lucide-icon,
242
+ svg {
243
+ width: calc($size * 0.55);
244
+ height: calc($size * 0.55);
245
+ }
246
+ }
247
+
248
+ // =====================================================================
249
+ // PROGRESS INDICATORS
250
+ // =====================================================================
251
+
252
+ @mixin progress-bar($height: 4px) {
253
+ width: 100%;
254
+ height: $height;
255
+ background: var(--muted);
256
+ border-radius: var(--radius-full);
257
+ overflow: hidden;
258
+ position: relative;
259
+
260
+ .progress-fill {
261
+ height: 100%;
262
+ background: var(--accent);
263
+ border-radius: inherit;
264
+ transition: width var(--duration-slow) var(--ease-out);
265
+ }
266
+ }
267
+
268
+ @mixin progress-circle($size: 40px, $stroke: 4px) {
269
+ width: $size;
270
+ height: $size;
271
+ position: relative;
272
+
273
+ svg {
274
+ width: 100%;
275
+ height: 100%;
276
+ transform: rotate(-90deg);
277
+
278
+ circle {
279
+ fill: none;
280
+ stroke-width: $stroke;
281
+ cx: calc($size / 2);
282
+ cy: calc($size / 2);
283
+ r: calc(($size - $stroke) / 2);
284
+
285
+ &.track {
286
+ stroke: var(--muted);
287
+ }
288
+
289
+ &.progress {
290
+ stroke: var(--accent);
291
+ stroke-linecap: round;
292
+ transition: stroke-dashoffset var(--duration-slow) var(--ease-out);
293
+ }
294
+ }
295
+ }
296
+ }
297
+
298
+ // =====================================================================
299
+ // TOOLTIP
300
+ // =====================================================================
301
+
302
+ @mixin tooltip {
303
+ position: absolute;
304
+ z-index: var(--z-tooltip);
305
+ padding: var(--spacing-xs) var(--spacing-sm);
306
+ background: rgba(0, 0, 0, 0.9);
307
+ color: white;
308
+ font-size: var(--text-xs);
309
+ font-weight: var(--font-medium);
310
+ border-radius: var(--radius-md);
311
+ white-space: nowrap;
312
+ pointer-events: none;
313
+ opacity: 0;
314
+ transition: opacity var(--duration-fast) var(--ease-out);
315
+
316
+ // Arrow
317
+ &::before {
318
+ content: "";
319
+ position: absolute;
320
+ width: 0;
321
+ height: 0;
322
+ border-style: solid;
323
+ }
324
+
325
+ &[data-placement="top"] {
326
+ bottom: calc(100% + 8px);
327
+ left: 50%;
328
+ transform: translateX(-50%);
329
+
330
+ &::before {
331
+ top: 100%;
332
+ left: 50%;
333
+ transform: translateX(-50%);
334
+ border-width: 4px 4px 0 4px;
335
+ border-color: rgba(0, 0, 0, 0.9) transparent transparent transparent;
336
+ }
337
+ }
338
+
339
+ &[data-placement="bottom"] {
340
+ top: calc(100% + 8px);
341
+ left: 50%;
342
+ transform: translateX(-50%);
343
+
344
+ &::before {
345
+ bottom: 100%;
346
+ left: 50%;
347
+ transform: translateX(-50%);
348
+ border-width: 0 4px 4px 4px;
349
+ border-color: transparent transparent rgba(0, 0, 0, 0.9) transparent;
350
+ }
351
+ }
352
+ }
353
+
354
+ // =====================================================================
355
+ // DIVIDER
356
+ // =====================================================================
357
+
358
+ @mixin divider($orientation: "horizontal") {
359
+ @if $orientation == "horizontal" {
360
+ width: 100%;
361
+ height: 1px;
362
+ background: var(--border);
363
+ margin: var(--spacing-md) 0;
364
+ } @else {
365
+ width: 1px;
366
+ height: 100%;
367
+ background: var(--border);
368
+ margin: 0 var(--spacing-md);
369
+ }
370
+ }
371
+
372
+ // =====================================================================
373
+ // INPUT FIELD
374
+ // =====================================================================
375
+
376
+ @mixin input-field {
377
+ width: 100%;
378
+ padding: var(--spacing-sm) var(--spacing-md);
379
+ font-size: var(--text-base);
380
+ font-weight: var(--font-normal);
381
+ color: var(--foreground);
382
+ background: var(--osi-section-item-background);
383
+ border: var(--osi-section-item-border);
384
+ border-radius: var(--osi-section-item-border-radius);
385
+ outline: none;
386
+ transition: var(--osi-section-item-transition);
387
+
388
+ &:hover {
389
+ border-color: var(--osi-section-item-border-hover);
390
+ }
391
+
392
+ &:focus {
393
+ border-color: var(--accent);
394
+ box-shadow: 0 0 0 3px rgba(var(--accent-rgb), 0.1);
395
+ }
396
+
397
+ &::placeholder {
398
+ color: var(--muted-foreground);
399
+ }
400
+
401
+ &:disabled {
402
+ opacity: var(--state-disabled-opacity);
403
+ cursor: not-allowed;
404
+ }
405
+ }
406
+
407
+ // =====================================================================
408
+ // SKELETON LOADER
409
+ // =====================================================================
410
+
411
+ @mixin skeleton($width: 100%, $height: 16px) {
412
+ width: $width;
413
+ height: $height;
414
+ @include effects.skeleton-loading;
415
+ }
416
+
417
+ // =====================================================================
418
+ // EMPTY STATE
419
+ // =====================================================================
420
+
421
+ @mixin empty-state-modern {
422
+ display: flex;
423
+ flex-direction: column;
424
+ align-items: center;
425
+ justify-content: center;
426
+ gap: var(--spacing-md);
427
+ padding: var(--spacing-2xl);
428
+ text-align: center;
429
+
430
+ .empty-icon {
431
+ width: 64px;
432
+ height: 64px;
433
+ color: var(--muted-foreground);
434
+ opacity: 0.3;
435
+ }
436
+
437
+ .empty-title {
438
+ font-size: var(--text-lg);
439
+ font-weight: var(--font-semibold);
440
+ color: var(--foreground);
441
+ margin: 0;
442
+ }
443
+
444
+ .empty-description {
445
+ font-size: var(--text-base);
446
+ color: var(--muted-foreground);
447
+ max-width: 400px;
448
+ margin: 0;
449
+ }
450
+
451
+ .empty-action {
452
+ margin-top: var(--spacing-sm);
453
+ }
454
+ }