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,351 @@
1
+ // =====================================================================
2
+ // UNIFIED SECTIONS - Master Token Based Design System
3
+ // =====================================================================
4
+ //
5
+ // Uses all tokens from master.scss for consistent, minimalistic design.
6
+ // No hardcoded values - everything references CSS variables.
7
+ //
8
+ // =====================================================================
9
+
10
+ @use "../../tokens/master" as *;
11
+
12
+ // =====================================================================
13
+ // UNIFIED CARD - Single Source
14
+ // =====================================================================
15
+
16
+ @mixin unified-card {
17
+ // Background & Border - from CSS vars
18
+ background: var(--osi-section-item-background);
19
+ border: var(--osi-section-item-border);
20
+ border-radius: var(--osi-section-item-border-radius);
21
+
22
+ // Layout
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: var(--card-element-gap-md);
26
+ padding: var(--space-3) var(--space-4);
27
+
28
+ // Interaction
29
+ cursor: pointer;
30
+ position: relative;
31
+ overflow: hidden;
32
+ box-sizing: border-box;
33
+
34
+ // Smooth transitions - subtle
35
+ transition:
36
+ background var(--duration-normal) var(--ease-out-smooth),
37
+ border-color var(--duration-normal) var(--ease-out-smooth),
38
+ box-shadow var(--duration-normal) var(--ease-out-smooth);
39
+
40
+ &:hover {
41
+ background: var(--osi-section-item-background-hover);
42
+ border-color: var(--osi-section-item-border-hover);
43
+ box-shadow: var(--osi-section-item-shadow-hover);
44
+ }
45
+
46
+ &:focus-visible {
47
+ outline: var(--border-width-accent-sm) solid var(--accent);
48
+ outline-offset: var(--border-width-accent-sm);
49
+ }
50
+
51
+ @media (prefers-reduced-motion: reduce) {
52
+ transition: none;
53
+ }
54
+ }
55
+
56
+ // =====================================================================
57
+ // TYPOGRAPHY - Consistent Hierarchy
58
+ // =====================================================================
59
+
60
+ @mixin type-label {
61
+ font-size: var(--card-label-font-size);
62
+ font-weight: var(--card-label-font-weight);
63
+ letter-spacing: var(--card-label-letter-spacing);
64
+ text-transform: var(--card-label-text-transform);
65
+ color: var(--muted-foreground);
66
+ line-height: var(--card-label-line-height);
67
+ }
68
+
69
+ @mixin type-value {
70
+ font-size: var(--card-value-font-size);
71
+ font-weight: var(--card-value-font-weight);
72
+ letter-spacing: var(--card-value-letter-spacing);
73
+ color: var(--foreground);
74
+ line-height: var(--card-value-line-height);
75
+ }
76
+
77
+ @mixin type-value-large {
78
+ font-size: var(--card-value-font-size-large);
79
+ font-weight: var(--card-value-font-weight);
80
+ letter-spacing: var(--card-value-letter-spacing);
81
+ color: var(--foreground);
82
+ line-height: var(--card-value-line-height);
83
+ }
84
+
85
+ @mixin type-title {
86
+ font-size: var(--card-title-font-size);
87
+ font-weight: var(--card-title-font-weight);
88
+ letter-spacing: var(--card-title-letter-spacing);
89
+ color: var(--foreground);
90
+ line-height: var(--card-title-line-height);
91
+ margin: 0;
92
+ }
93
+
94
+ @mixin type-subtitle {
95
+ font-size: var(--card-subtitle-font-size);
96
+ font-weight: var(--card-subtitle-font-weight);
97
+ letter-spacing: var(--card-subtitle-letter-spacing);
98
+ color: var(--muted-foreground);
99
+ line-height: var(--card-subtitle-line-height);
100
+ }
101
+
102
+ @mixin type-meta {
103
+ font-size: var(--card-meta-font-size);
104
+ font-weight: var(--card-meta-font-weight);
105
+ color: var(--muted-foreground);
106
+ line-height: var(--card-meta-line-height);
107
+ }
108
+
109
+ // =====================================================================
110
+ // BADGES - Consistent styling
111
+ // =====================================================================
112
+
113
+ @mixin badge {
114
+ display: inline-flex;
115
+ align-items: center;
116
+ gap: var(--space-1);
117
+ padding: var(--space-1) var(--space-2);
118
+ font-size: var(--card-text-small-font-size);
119
+ font-weight: 600;
120
+ letter-spacing: 0.04em;
121
+ text-transform: uppercase;
122
+ color: var(--accent);
123
+ background: #{$brand-color-10};
124
+ border-radius: var(--radius-xs);
125
+ white-space: nowrap;
126
+ }
127
+
128
+ @mixin badge-status {
129
+ &.status--completed,
130
+ &.status--success {
131
+ color: var(--status-success);
132
+ background: var(--status-success-bg);
133
+ }
134
+ &.status--active,
135
+ &.status--in-progress {
136
+ color: var(--accent);
137
+ background: #{$brand-color-10};
138
+ }
139
+ &.status--pending,
140
+ &.status--warning {
141
+ color: var(--status-warning);
142
+ background: var(--status-warning-bg);
143
+ }
144
+ &.status--blocked,
145
+ &.status--cancelled,
146
+ &.status--error {
147
+ color: var(--status-error);
148
+ background: var(--status-error-bg);
149
+ }
150
+ }
151
+
152
+ // =====================================================================
153
+ // TREND INDICATORS
154
+ // =====================================================================
155
+
156
+ @mixin trend {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ gap: var(--space-1);
160
+ font-size: var(--card-meta-font-size);
161
+ font-weight: 600;
162
+
163
+ lucide-icon,
164
+ svg {
165
+ width: var(--icon-xs);
166
+ height: var(--icon-xs);
167
+ }
168
+
169
+ &.trend--up {
170
+ color: #{$osi-color-trend-up};
171
+ }
172
+ &.trend--down {
173
+ color: #{$osi-color-trend-down};
174
+ }
175
+ &.trend--stable {
176
+ color: #{$osi-color-trend-stable};
177
+ }
178
+ }
179
+
180
+ // =====================================================================
181
+ // PROGRESS BAR
182
+ // =====================================================================
183
+
184
+ @mixin progress-track {
185
+ width: 100%;
186
+ height: var(--border-width-accent);
187
+ background: var(--muted);
188
+ border-radius: var(--radius-full);
189
+ overflow: hidden;
190
+ margin-top: var(--space-2);
191
+ }
192
+
193
+ @mixin progress-bar {
194
+ height: 100%;
195
+ background: var(--accent);
196
+ border-radius: inherit;
197
+ transition: width var(--duration-slow) var(--ease-out-smooth);
198
+ }
199
+
200
+ // =====================================================================
201
+ // ICON CONTAINERS
202
+ // =====================================================================
203
+
204
+ @mixin icon-container($size: var(--icon-lg)) {
205
+ display: flex;
206
+ align-items: center;
207
+ justify-content: center;
208
+ width: $size;
209
+ height: $size;
210
+ color: var(--accent);
211
+ flex-shrink: 0;
212
+
213
+ lucide-icon,
214
+ svg {
215
+ width: calc($size * 0.6);
216
+ height: calc($size * 0.6);
217
+ }
218
+ }
219
+
220
+ @mixin icon-bg($size: var(--icon-lg)) {
221
+ @include icon-container($size);
222
+ background: #{$brand-color-10};
223
+ border-radius: var(--radius-sm);
224
+ }
225
+
226
+ // =====================================================================
227
+ // AVATARS
228
+ // =====================================================================
229
+
230
+ @mixin avatar($size: 32px) {
231
+ width: $size;
232
+ height: $size;
233
+ border-radius: var(--radius-full);
234
+ background: #{$brand-color-15};
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+ flex-shrink: 0;
239
+ overflow: hidden;
240
+
241
+ img {
242
+ width: 100%;
243
+ height: 100%;
244
+ object-fit: cover;
245
+ }
246
+
247
+ &__initials {
248
+ font-size: calc($size * 0.35);
249
+ font-weight: 600;
250
+ color: var(--accent);
251
+ }
252
+ }
253
+
254
+ // =====================================================================
255
+ // EMPTY STATES
256
+ // =====================================================================
257
+
258
+ @mixin empty-state {
259
+ display: flex;
260
+ flex-direction: column;
261
+ align-items: center;
262
+ justify-content: center;
263
+ gap: var(--space-3);
264
+ padding: var(--space-6) var(--space-4);
265
+ text-align: center;
266
+ color: var(--muted-foreground);
267
+ background: var(--osi-section-item-background);
268
+ border-radius: var(--osi-section-item-border-radius);
269
+ border: var(--border-width-default) dashed var(--border);
270
+
271
+ lucide-icon,
272
+ svg {
273
+ opacity: 0.4;
274
+ width: var(--icon-lg);
275
+ height: var(--icon-lg);
276
+ }
277
+
278
+ p {
279
+ margin: 0;
280
+ @include type-subtitle;
281
+ }
282
+ }
283
+
284
+ // =====================================================================
285
+ // GRID LAYOUTS
286
+ // =====================================================================
287
+
288
+ @mixin grid($min-width: 180px, $gap: var(--section-card-gap)) {
289
+ display: grid;
290
+ grid-template-columns: repeat(auto-fit, minmax($min-width, 1fr));
291
+ gap: $gap;
292
+ width: 100%;
293
+
294
+ @media (max-width: 480px) {
295
+ grid-template-columns: 1fr;
296
+ gap: var(--gap-sm);
297
+ }
298
+ }
299
+
300
+ @mixin stack($gap: var(--gap-sm)) {
301
+ display: flex;
302
+ flex-direction: column;
303
+ gap: $gap;
304
+ width: 100%;
305
+ }
306
+
307
+ @mixin row($gap: var(--gap-md)) {
308
+ display: flex;
309
+ flex-direction: row;
310
+ align-items: center;
311
+ gap: $gap;
312
+ width: 100%;
313
+ }
314
+
315
+ // =====================================================================
316
+ // STREAMING ANIMATIONS
317
+ // =====================================================================
318
+
319
+ @keyframes unified-stream-in {
320
+ 0% {
321
+ opacity: 0;
322
+ transform: translate3d(0, var(--motion-distance-sm), 0);
323
+ }
324
+ 100% {
325
+ opacity: 1;
326
+ transform: translate3d(0, 0, 0);
327
+ }
328
+ }
329
+
330
+ @mixin stream-animation {
331
+ &.section-item-streaming,
332
+ &.item-streaming,
333
+ &.field-streaming {
334
+ animation: unified-stream-in var(--duration-moderate) var(--ease-out-smooth)
335
+ var(--animation-fill-mode);
336
+ }
337
+
338
+ &.section-item-entered,
339
+ &.item-entered,
340
+ &.field-entered {
341
+ animation: none;
342
+ }
343
+
344
+ @for $i from 0 through 15 {
345
+ &.section-item-stagger-#{$i},
346
+ &.item-stagger-#{$i},
347
+ &.field-stagger-#{$i} {
348
+ animation-delay: calc(#{$i} * var(--stagger-delay-base));
349
+ }
350
+ }
351
+ }
@@ -0,0 +1,204 @@
1
+ // =====================================================================
2
+ // PERFECT SYSTEM - Based on Solutions Section
3
+ // =====================================================================
4
+ //
5
+ // This is the PERFECT balance found in the Solutions section
6
+ // Apply this exact style to ALL sections
7
+ //
8
+ // =====================================================================
9
+
10
+ @use "../../tokens/master" as *;
11
+
12
+ // =====================================================================
13
+ // PERFECT SPACING (From Solutions Section)
14
+ // =====================================================================
15
+
16
+ :root {
17
+ // Card spacing (comfortable, not cramped)
18
+ --perfect-card-padding: 16px 14px;
19
+ --perfect-card-padding-mobile: 14px 12px;
20
+ --perfect-gap: 12px; // Between elements in card
21
+ --perfect-gap-mobile: 10px;
22
+ --perfect-grid-gap: 14px; // Between cards
23
+ --perfect-grid-gap-mobile: 12px;
24
+ --perfect-section-gap: 12px; // Between header and content
25
+ }
26
+
27
+ // =====================================================================
28
+ // PERFECT CARD MIXIN
29
+ // =====================================================================
30
+
31
+ @mixin perfect-card {
32
+ position: relative;
33
+ background: var(--surface);
34
+ border: 1px solid var(--border);
35
+ border-radius: var(--radius-md);
36
+ padding: 16px 14px;
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 12px;
40
+ transition: all 300ms var(--ease-out);
41
+
42
+ // Bottom accent line (like Solutions)
43
+ &::after {
44
+ content: "";
45
+ position: absolute;
46
+ bottom: 0;
47
+ left: 0;
48
+ right: 0;
49
+ height: 2px;
50
+ background: linear-gradient(90deg, var(--accent) 0%, transparent 100%);
51
+ opacity: 0;
52
+ transition: opacity 300ms var(--ease-out);
53
+ }
54
+
55
+ &:hover {
56
+ transform: translateY(-3px);
57
+ box-shadow: var(--shadow-lg);
58
+
59
+ &::after {
60
+ opacity: 0.8;
61
+ }
62
+ }
63
+ }
64
+
65
+ // =====================================================================
66
+ // PERFECT LIST CONTAINER
67
+ // =====================================================================
68
+
69
+ @mixin perfect-list {
70
+ background: var(--surface);
71
+ border: 1px solid var(--border);
72
+ border-radius: var(--radius-md);
73
+ padding: 10px 12px;
74
+ }
75
+
76
+ // =====================================================================
77
+ // PERFECT LIST ITEM
78
+ // =====================================================================
79
+
80
+ @mixin perfect-item {
81
+ padding: 12px 10px;
82
+ border-radius: var(--radius-sm);
83
+ transition: all 200ms var(--ease-out);
84
+
85
+ &:not(:last-child) {
86
+ border-bottom: 1px solid var(--border);
87
+ }
88
+
89
+ &:hover {
90
+ background: var(--surface-raised);
91
+ }
92
+ }
93
+
94
+ // =====================================================================
95
+ // PERFECT TYPOGRAPHY
96
+ // =====================================================================
97
+
98
+ @mixin perfect-title {
99
+ font-size: 0.9375rem; // 15px
100
+ font-weight: var(--font-semibold);
101
+ line-height: 1.4;
102
+ color: var(--foreground);
103
+ margin: 0;
104
+ transition: color 200ms var(--ease-out);
105
+ }
106
+
107
+ @mixin perfect-body {
108
+ font-size: 0.75rem; // 12px
109
+ line-height: 1.6;
110
+ color: var(--muted-foreground);
111
+ margin: 0;
112
+ opacity: 0.9;
113
+ }
114
+
115
+ @mixin perfect-label {
116
+ font-size: 0.65rem; // 10.4px
117
+ font-weight: var(--font-semibold);
118
+ letter-spacing: 0.05em;
119
+ text-transform: uppercase;
120
+ color: var(--muted-foreground);
121
+ opacity: 0.7;
122
+ }
123
+
124
+ @mixin perfect-value {
125
+ font-size: 1.25rem; // 20px
126
+ font-weight: var(--font-bold);
127
+ line-height: 1.2;
128
+ color: var(--foreground);
129
+ font-variant-numeric: tabular-nums;
130
+ }
131
+
132
+ @mixin perfect-meta {
133
+ font-size: 0.7rem; // 11.2px
134
+ color: var(--muted-foreground);
135
+ opacity: 0.7;
136
+ }
137
+
138
+ // =====================================================================
139
+ // PERFECT GRID SYSTEM
140
+ // =====================================================================
141
+
142
+ @mixin perfect-grid-200px {
143
+ display: grid;
144
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
145
+ gap: 14px;
146
+
147
+ @media (max-width: 768px) {
148
+ gap: 12px;
149
+ }
150
+
151
+ @media (max-width: 640px) {
152
+ grid-template-columns: repeat(2, 1fr);
153
+ gap: 10px;
154
+ }
155
+
156
+ @media (max-width: 420px) {
157
+ grid-template-columns: 1fr;
158
+ }
159
+ }
160
+
161
+ @mixin perfect-grid-280px {
162
+ display: grid;
163
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
164
+ gap: 14px;
165
+
166
+ @media (max-width: 768px) {
167
+ grid-template-columns: repeat(2, 1fr);
168
+ gap: 12px;
169
+ }
170
+
171
+ @media (max-width: 480px) {
172
+ grid-template-columns: 1fr;
173
+ gap: 10px;
174
+ }
175
+ }
176
+
177
+ // =====================================================================
178
+ // PERFECT META FOOTER (Like Solutions)
179
+ // =====================================================================
180
+
181
+ @mixin perfect-meta-footer {
182
+ display: flex;
183
+ align-items: center;
184
+ justify-content: space-between;
185
+ gap: 10px;
186
+ margin-top: auto;
187
+ padding-top: 10px;
188
+ border-top: 1px solid var(--border);
189
+ }
190
+
191
+ // =====================================================================
192
+ // REDUCED MOTION
193
+ // =====================================================================
194
+
195
+ @mixin perfect-reduced-motion {
196
+ @media (prefers-reduced-motion: reduce) {
197
+ transition: none;
198
+ animation: none;
199
+
200
+ &:hover {
201
+ transform: none;
202
+ }
203
+ }
204
+ }