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,583 @@
1
+ /**
2
+ * OSI Cards - Micro-Interactions
3
+ *
4
+ * Delightful micro-animations and interactions for enhanced UX.
5
+ */
6
+
7
+ // ============================================
8
+ // Animation Variables
9
+ // ============================================
10
+
11
+ :root {
12
+ --osi-ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
13
+ --osi-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
14
+ --osi-ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
15
+ --osi-ease-in-out-circ: cubic-bezier(0.85, 0, 0.15, 1);
16
+ --osi-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275);
17
+
18
+ --osi-duration-instant: 50ms;
19
+ --osi-duration-fast: 150ms;
20
+ --osi-duration-normal: 250ms;
21
+ --osi-duration-slow: 400ms;
22
+ --osi-duration-slower: 600ms;
23
+ }
24
+
25
+ // Respect reduced motion preference
26
+ @media (prefers-reduced-motion: reduce) {
27
+ :root {
28
+ --osi-duration-instant: 0ms;
29
+ --osi-duration-fast: 0ms;
30
+ --osi-duration-normal: 0ms;
31
+ --osi-duration-slow: 0ms;
32
+ --osi-duration-slower: 0ms;
33
+ }
34
+ }
35
+
36
+ // ============================================
37
+ // Button Interactions
38
+ // ============================================
39
+
40
+ .osi-action-button {
41
+ position: relative;
42
+ overflow: hidden;
43
+ transition:
44
+ transform var(--osi-duration-fast) var(--osi-ease-out-quart),
45
+ box-shadow var(--osi-duration-fast) var(--osi-ease-out-quart),
46
+ background-color var(--osi-duration-fast) var(--osi-ease-out-quart);
47
+
48
+ // Ripple effect container
49
+ &::before {
50
+ content: "";
51
+ position: absolute;
52
+ inset: 0;
53
+ background: radial-gradient(
54
+ circle at var(--ripple-x, 50%) var(--ripple-y, 50%),
55
+ rgba(255, 255, 255, 0.3) 0%,
56
+ transparent 70%
57
+ );
58
+ opacity: 0;
59
+ transform: scale(0);
60
+ transition:
61
+ opacity var(--osi-duration-normal) var(--osi-ease-out-quart),
62
+ transform var(--osi-duration-slow) var(--osi-ease-out-expo);
63
+ }
64
+
65
+ &:hover {
66
+ transform: translateY(-2px);
67
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
68
+ }
69
+
70
+ &:active {
71
+ transform: translateY(0) scale(0.98);
72
+
73
+ &::before {
74
+ opacity: 1;
75
+ transform: scale(2);
76
+ }
77
+ }
78
+
79
+ &:focus-visible {
80
+ outline: none;
81
+ box-shadow:
82
+ 0 0 0 2px var(--osi-card-background, #fff),
83
+ 0 0 0 4px var(--osi-card-accent, #6366f1);
84
+ }
85
+ }
86
+
87
+ // ============================================
88
+ // Card Hover Effects
89
+ // ============================================
90
+
91
+ .osi-card-container {
92
+ transition:
93
+ box-shadow var(--osi-duration-normal) var(--osi-ease-out-quart),
94
+ background var(--osi-duration-normal) var(--osi-ease-out-quart);
95
+
96
+ &:hover {
97
+ box-shadow:
98
+ 0 12px 40px rgba(0, 0, 0, 0.12),
99
+ 0 4px 8px rgba(0, 0, 0, 0.08);
100
+ background: var(--osi-section-item-background-hover, var(--osi-card-background));
101
+ }
102
+
103
+ // Subtle glow on hover
104
+ &::after {
105
+ content: "";
106
+ position: absolute;
107
+ inset: -2px;
108
+ border-radius: inherit;
109
+ background: linear-gradient(
110
+ 135deg,
111
+ rgba(var(--osi-card-accent-rgb, 99, 102, 241), 0.1),
112
+ transparent 60%
113
+ );
114
+ opacity: 0;
115
+ z-index: -1;
116
+ transition: opacity var(--osi-duration-normal) var(--osi-ease-out-quart);
117
+ }
118
+
119
+ &:hover::after {
120
+ opacity: 1;
121
+ }
122
+ }
123
+
124
+ // ============================================
125
+ // Section Entrance Animations
126
+ // ============================================
127
+
128
+ @keyframes section-enter {
129
+ from {
130
+ opacity: 0;
131
+ transform: translate3d(0, 20px, 0) scale(0.96);
132
+ }
133
+ to {
134
+ opacity: 1;
135
+ transform: translate3d(0, 0, 0) scale(1);
136
+ }
137
+ }
138
+
139
+ @keyframes section-enter-left {
140
+ from {
141
+ opacity: 0;
142
+ transform: translate3d(-20px, 0, 0);
143
+ }
144
+ to {
145
+ opacity: 1;
146
+ transform: translate3d(0, 0, 0);
147
+ }
148
+ }
149
+
150
+ @keyframes section-enter-scale {
151
+ from {
152
+ opacity: 0;
153
+ transform: translate3d(0, 0, 0) scale(0.9);
154
+ }
155
+ to {
156
+ opacity: 1;
157
+ transform: translate3d(0, 0, 0) scale(1);
158
+ }
159
+ }
160
+
161
+ .ai-section {
162
+ animation: section-enter var(--osi-duration-slow) var(--osi-ease-out-expo) both;
163
+
164
+ @for $i from 1 through 10 {
165
+ &:nth-child(#{$i}) {
166
+ animation-delay: #{$i * 80}ms;
167
+ }
168
+ }
169
+ }
170
+
171
+ // ============================================
172
+ // Field Value Reveal
173
+ // ============================================
174
+
175
+ @keyframes value-reveal {
176
+ from {
177
+ opacity: 0;
178
+ transform: translate3d(0, 8px, 0);
179
+ filter: blur(4px);
180
+ }
181
+ to {
182
+ opacity: 1;
183
+ transform: translate3d(0, 0, 0);
184
+ filter: blur(0);
185
+ }
186
+ }
187
+
188
+ .field-value {
189
+ animation: value-reveal var(--osi-duration-normal) var(--osi-ease-out-quart) both;
190
+ }
191
+
192
+ // ============================================
193
+ // Metric Counter Animation
194
+ // ============================================
195
+
196
+ @keyframes metric-pop {
197
+ 0% {
198
+ transform: translate3d(0, 0, 0) scale(0.8);
199
+ opacity: 0;
200
+ }
201
+ 50% {
202
+ transform: translate3d(0, 0, 0) scale(1.05);
203
+ }
204
+ 100% {
205
+ transform: translate3d(0, 0, 0) scale(1);
206
+ opacity: 1;
207
+ }
208
+ }
209
+
210
+ .metric-value {
211
+ animation: metric-pop var(--osi-duration-slow) var(--osi-spring) both;
212
+ }
213
+
214
+ // ============================================
215
+ // Trend Indicator Animation
216
+ // ============================================
217
+
218
+ @keyframes trend-up {
219
+ 0% {
220
+ transform: translate3d(0, 4px, 0);
221
+ opacity: 0;
222
+ }
223
+ 100% {
224
+ transform: translate3d(0, 0, 0);
225
+ opacity: 1;
226
+ }
227
+ }
228
+
229
+ @keyframes trend-down {
230
+ 0% {
231
+ transform: translate3d(0, -4px, 0);
232
+ opacity: 0;
233
+ }
234
+ 100% {
235
+ transform: translate3d(0, 0, 0);
236
+ opacity: 1;
237
+ }
238
+ }
239
+
240
+ .trend-indicator {
241
+ &--up {
242
+ animation: trend-up var(--osi-duration-normal) var(--osi-ease-out-back) both;
243
+ color: var(--osi-card-success, #22c55e);
244
+ }
245
+
246
+ &--down {
247
+ animation: trend-down var(--osi-duration-normal) var(--osi-ease-out-back) both;
248
+ color: var(--osi-card-destructive, #ef4444);
249
+ }
250
+ }
251
+
252
+ // ============================================
253
+ // Progress Bar Animation
254
+ // ============================================
255
+
256
+ @keyframes progress-fill {
257
+ from {
258
+ transform: scaleX(0);
259
+ }
260
+ to {
261
+ transform: scaleX(var(--progress, 0));
262
+ }
263
+ }
264
+
265
+ .progress-bar {
266
+ position: relative;
267
+ height: 8px;
268
+ background: var(--osi-card-border, #e5e7eb);
269
+ border-radius: 4px;
270
+ overflow: hidden;
271
+
272
+ &__fill {
273
+ position: absolute;
274
+ inset: 0;
275
+ background: var(--osi-card-accent, #6366f1);
276
+ transform-origin: left;
277
+ animation: progress-fill var(--osi-duration-slower) var(--osi-ease-out-expo) both;
278
+ animation-delay: var(--osi-duration-fast);
279
+ }
280
+
281
+ // Shimmer effect
282
+ &::after {
283
+ content: "";
284
+ position: absolute;
285
+ inset: 0;
286
+ background: linear-gradient(
287
+ 90deg,
288
+ transparent 0%,
289
+ rgba(255, 255, 255, 0.4) 50%,
290
+ transparent 100%
291
+ );
292
+ transform: translateX(-100%);
293
+ animation: shimmer 2s infinite;
294
+ }
295
+ }
296
+
297
+ @keyframes shimmer {
298
+ to {
299
+ transform: translateX(100%);
300
+ }
301
+ }
302
+
303
+ // ============================================
304
+ // Skeleton Loading
305
+ // ============================================
306
+
307
+ @keyframes skeleton-pulse {
308
+ 0%,
309
+ 100% {
310
+ opacity: 1;
311
+ }
312
+ 50% {
313
+ opacity: 0.5;
314
+ }
315
+ }
316
+
317
+ @keyframes skeleton-wave {
318
+ 0% {
319
+ background-position: -200% 0;
320
+ }
321
+ 100% {
322
+ background-position: 200% 0;
323
+ }
324
+ }
325
+
326
+ .skeleton {
327
+ background: linear-gradient(
328
+ 90deg,
329
+ var(--osi-card-border, #e5e7eb) 0%,
330
+ #f3f4f6 50%,
331
+ var(--osi-card-border, #e5e7eb) 100%
332
+ );
333
+ background-size: 200% 100%;
334
+ animation: skeleton-wave 1.5s ease-in-out infinite;
335
+ border-radius: 4px;
336
+ }
337
+
338
+ // ============================================
339
+ // Icon Interactions
340
+ // ============================================
341
+
342
+ .icon-interactive {
343
+ transition:
344
+ transform var(--osi-duration-fast) var(--osi-ease-out-back),
345
+ color var(--osi-duration-fast) var(--osi-ease-out-quart);
346
+
347
+ &:hover {
348
+ transform: scale(1.15);
349
+ color: var(--osi-card-accent, #6366f1);
350
+ }
351
+
352
+ &:active {
353
+ transform: scale(0.95);
354
+ }
355
+ }
356
+
357
+ // Rotating refresh icon
358
+ .icon-spin {
359
+ animation: icon-rotate 1s linear infinite;
360
+ }
361
+
362
+ @keyframes icon-rotate {
363
+ to {
364
+ transform: rotate(360deg);
365
+ }
366
+ }
367
+
368
+ // ============================================
369
+ // Checkbox/Toggle Animations
370
+ // ============================================
371
+
372
+ @keyframes check-mark {
373
+ 0% {
374
+ stroke-dashoffset: 24;
375
+ }
376
+ 100% {
377
+ stroke-dashoffset: 0;
378
+ }
379
+ }
380
+
381
+ .checkbox-icon {
382
+ stroke-dasharray: 24;
383
+ stroke-dashoffset: 24;
384
+
385
+ .checkbox:checked ~ & {
386
+ animation: check-mark var(--osi-duration-normal) var(--osi-ease-out-quart) forwards;
387
+ }
388
+ }
389
+
390
+ // ============================================
391
+ // Tooltip Animation
392
+ // ============================================
393
+
394
+ @keyframes tooltip-enter {
395
+ from {
396
+ opacity: 0;
397
+ transform: translate3d(0, 4px, 0) scale(0.95);
398
+ }
399
+ to {
400
+ opacity: 1;
401
+ transform: translate3d(0, 0, 0) scale(1);
402
+ }
403
+ }
404
+
405
+ .tooltip {
406
+ animation: tooltip-enter var(--osi-duration-fast) var(--osi-ease-out-quart) both;
407
+ }
408
+
409
+ // ============================================
410
+ // Card Actions Stagger
411
+ // ============================================
412
+
413
+ .osi-card-actions {
414
+ .osi-action-button {
415
+ @for $i from 1 through 5 {
416
+ &:nth-child(#{$i}) {
417
+ animation: section-enter var(--osi-duration-normal) var(--osi-ease-out-quart) both;
418
+ animation-delay: #{300 + ($i * 50)}ms;
419
+ }
420
+ }
421
+ }
422
+ }
423
+
424
+ // ============================================
425
+ // Streaming Effect
426
+ // ============================================
427
+
428
+ @keyframes typing-cursor {
429
+ 0%,
430
+ 100% {
431
+ opacity: 1;
432
+ }
433
+ 50% {
434
+ opacity: 0;
435
+ }
436
+ }
437
+
438
+ .streaming-cursor {
439
+ display: inline-block;
440
+ width: 2px;
441
+ height: 1em;
442
+ background: var(--osi-card-accent, #6366f1);
443
+ animation: typing-cursor 0.8s ease-in-out infinite;
444
+ vertical-align: text-bottom;
445
+ margin-left: 2px;
446
+ }
447
+
448
+ // ============================================
449
+ // Focus Ring Animation
450
+ // ============================================
451
+
452
+ @keyframes focus-ring-pulse {
453
+ 0%,
454
+ 100% {
455
+ box-shadow:
456
+ 0 0 0 2px var(--osi-card-background, #fff),
457
+ 0 0 0 4px var(--osi-card-accent, #6366f1);
458
+ }
459
+ 50% {
460
+ box-shadow:
461
+ 0 0 0 2px var(--osi-card-background, #fff),
462
+ 0 0 0 6px rgba(var(--osi-card-accent-rgb, 99, 102, 241), 0.5);
463
+ }
464
+ }
465
+
466
+ .focus-animated:focus-visible {
467
+ outline: none;
468
+ animation: focus-ring-pulse 1.5s ease-in-out infinite;
469
+ }
470
+
471
+ // ============================================
472
+ // Shake Animation (for errors)
473
+ // ============================================
474
+
475
+ @keyframes shake {
476
+ 0%,
477
+ 100% {
478
+ transform: translate3d(0, 0, 0);
479
+ }
480
+ 10%,
481
+ 30%,
482
+ 50%,
483
+ 70%,
484
+ 90% {
485
+ transform: translate3d(-4px, 0, 0);
486
+ }
487
+ 20%,
488
+ 40%,
489
+ 60%,
490
+ 80% {
491
+ transform: translate3d(4px, 0, 0);
492
+ }
493
+ }
494
+
495
+ .shake {
496
+ animation: shake var(--osi-duration-slow) var(--osi-ease-out-quart);
497
+ }
498
+
499
+ // ============================================
500
+ // Success Animation
501
+ // ============================================
502
+
503
+ @keyframes success-pop {
504
+ 0% {
505
+ transform: translate3d(0, 0, 0) scale(0);
506
+ opacity: 0;
507
+ }
508
+ 50% {
509
+ transform: translate3d(0, 0, 0) scale(1.2);
510
+ }
511
+ 100% {
512
+ transform: translate3d(0, 0, 0) scale(1);
513
+ opacity: 1;
514
+ }
515
+ }
516
+
517
+ .success-icon {
518
+ animation: success-pop var(--osi-duration-normal) var(--osi-spring) both;
519
+ }
520
+
521
+ // ============================================
522
+ // Fade In/Out Utilities
523
+ // ============================================
524
+
525
+ @keyframes fade-in {
526
+ from {
527
+ opacity: 0;
528
+ }
529
+ to {
530
+ opacity: 1;
531
+ }
532
+ }
533
+
534
+ @keyframes fade-out {
535
+ from {
536
+ opacity: 1;
537
+ }
538
+ to {
539
+ opacity: 0;
540
+ }
541
+ }
542
+
543
+ .fade-in {
544
+ animation: fade-in var(--osi-duration-normal) var(--osi-ease-out-quart) both;
545
+ }
546
+
547
+ .fade-out {
548
+ animation: fade-out var(--osi-duration-normal) var(--osi-ease-out-quart) both;
549
+ }
550
+
551
+ // ============================================
552
+ // Slide Utilities
553
+ // ============================================
554
+
555
+ @keyframes slide-in-up {
556
+ from {
557
+ opacity: 0;
558
+ transform: translate3d(0, 16px, 0);
559
+ }
560
+ to {
561
+ opacity: 1;
562
+ transform: translate3d(0, 0, 0);
563
+ }
564
+ }
565
+
566
+ @keyframes slide-in-down {
567
+ from {
568
+ opacity: 0;
569
+ transform: translate3d(0, -16px, 0);
570
+ }
571
+ to {
572
+ opacity: 1;
573
+ transform: translate3d(0, 0, 0);
574
+ }
575
+ }
576
+
577
+ .slide-in-up {
578
+ animation: slide-in-up var(--osi-duration-normal) var(--osi-ease-out-quart) both;
579
+ }
580
+
581
+ .slide-in-down {
582
+ animation: slide-in-down var(--osi-duration-normal) var(--osi-ease-out-quart) both;
583
+ }