@forgeroute/ui 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "@forgeroute/ui",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
7
- "@angular/forms": ">=22.0.0"
7
+ "@angular/forms": ">=22.0.0",
8
+ "@angular/router": ">=22.0.0",
9
+ "@angular/platform-browser": ">=22.0.0"
8
10
  },
9
11
  "peerDependenciesMeta": {
10
12
  "@angular/forms": {
@@ -0,0 +1,94 @@
1
+ /* ═══ Alive Animations ═══ */
2
+ /* Global utility classes for page-load entrance animations */
3
+ /* Use --i CSS variable for stagger delay: [style.--i]="$index" */
4
+
5
+ @keyframes fadeUp {
6
+ from { opacity: 0; transform: translateY(6px); }
7
+ to { opacity: 1; }
8
+ }
9
+
10
+ @keyframes rowFadeUp {
11
+ from { opacity: 0; transform: translateY(6px); }
12
+ }
13
+
14
+ @keyframes dotPulse {
15
+ 0%, 100% { opacity: 1; transform: scale(1); }
16
+ 50% { opacity: .5; transform: scale(1.3); }
17
+ }
18
+
19
+ @keyframes cardBreathe {
20
+ 0%, 100% { box-shadow: 0 0 0 rgba(59,130,246,0); border-color: #e2e8f0; }
21
+ 50% { box-shadow: 0 4px 24px rgba(59,130,246,.08); border-color: #93c5fd; }
22
+ }
23
+
24
+ // ── Table rows ──
25
+ // Applied automatically by ui-data-table (rows and cards).
26
+ // The stagger is capped at 8 steps (240ms) so a 50-row page never starts its last row ~1.5s late.
27
+ .alive-row {
28
+ animation: rowFadeUp .3s ease backwards;
29
+ animation-delay: calc(min(var(--i, 0), 8) * 30ms);
30
+ }
31
+
32
+ // ── Page/toolbar header ──
33
+ .alive-header {
34
+ animation: fadeUp .3s ease both;
35
+ }
36
+
37
+ // ── Detail page cards ──
38
+ .alive-card {
39
+ animation: fadeUp .4s ease both;
40
+ animation-delay: calc(var(--i, 0) * 80ms);
41
+ }
42
+
43
+ // Auto-stagger for card containers
44
+ .alive-cards > * {
45
+ animation: fadeUp .4s ease both;
46
+ @for $n from 1 through 12 {
47
+ &:nth-child(#{$n}) { animation-delay: #{($n - 1) * 80}ms; }
48
+ }
49
+ }
50
+
51
+ // ── Snapshot / KPI metrics ──
52
+ .alive-metric {
53
+ animation: fadeUp .35s ease both;
54
+ animation-delay: calc(var(--i, 0) * 50ms);
55
+ }
56
+
57
+ // ── Breathing card border ──
58
+ .alive-breathe {
59
+ animation: cardBreathe 4s ease-in-out infinite;
60
+ }
61
+
62
+ // ── Status dots ──
63
+ .alive-dot {
64
+ display: inline-block;
65
+ width: 6px;
66
+ height: 6px;
67
+ border-radius: 50%;
68
+ animation: dotPulse 2.5s ease-in-out infinite;
69
+
70
+ &.dot-success { background: #22c55e; }
71
+ &.dot-warning { background: #f59e0b; }
72
+ &.dot-danger { background: #ef4444; }
73
+ &.dot-info { background: #3b82f6; }
74
+ }
75
+
76
+ // ── Badge entrance ──
77
+ .alive-badge {
78
+ animation: fadeUp .25s ease both;
79
+ }
80
+
81
+ // ── Generic stagger ──
82
+ .alive-stagger {
83
+ animation: fadeUp .35s ease both;
84
+ animation-delay: calc(var(--i, 0) * 60ms);
85
+ }
86
+
87
+ // ── Accessibility ──
88
+ @media (prefers-reduced-motion: reduce) {
89
+ .alive-row, .alive-card, .alive-header, .alive-metric,
90
+ .alive-breathe, .alive-dot, .alive-badge, .alive-stagger,
91
+ .alive-cards > * {
92
+ animation: none !important;
93
+ }
94
+ }