osi-cards-lib 1.5.30 → 1.5.32

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 (88) hide show
  1. package/README.md +58 -20
  2. package/package.json +13 -25
  3. package/postcss.config.js +81 -0
  4. package/section-registry.json +3864 -0
  5. package/section-registry.schema.json +264 -0
  6. package/fesm2022/osi-cards-lib.mjs +0 -31878
  7. package/fesm2022/osi-cards-lib.mjs.map +0 -1
  8. package/index.d.ts +0 -11522
  9. package/scripts/setup-angular-styles.js +0 -169
  10. package/styles/_components.scss +0 -38
  11. package/styles/_index.scss +0 -25
  12. package/styles/_osi-cards-mixins.scss +0 -459
  13. package/styles/_osi-cards-tokens.scss +0 -333
  14. package/styles/_styles-scoped.scss +0 -81
  15. package/styles/_styles.scss +0 -26
  16. package/styles/bundles/_ai-card.scss +0 -245
  17. package/styles/bundles/_all.scss +0 -68
  18. package/styles/bundles/_base.scss +0 -60
  19. package/styles/bundles/_card-skeleton.scss +0 -290
  20. package/styles/bundles/_index.scss +0 -25
  21. package/styles/bundles/_sections.scss +0 -48
  22. package/styles/bundles/_tokens-only.scss +0 -139
  23. package/styles/components/_ai-card-renderer.scss +0 -104
  24. package/styles/components/_badges.scss +0 -317
  25. package/styles/components/_card-actions.scss +0 -169
  26. package/styles/components/_card-footer.scss +0 -47
  27. package/styles/components/_component-styles.scss +0 -205
  28. package/styles/components/_empty-state.scss +0 -630
  29. package/styles/components/_hero-card.scss +0 -422
  30. package/styles/components/_image-fallback.scss +0 -28
  31. package/styles/components/_streaming-effects.scss +0 -518
  32. package/styles/components/cards/_ai-card.scss +0 -718
  33. package/styles/components/sections/_all-sections.generated.scss +0 -41
  34. package/styles/components/sections/_all-sections.scss +0 -1086
  35. package/styles/components/sections/_balanced-compact-system.scss +0 -186
  36. package/styles/components/sections/_compact-mixins.scss +0 -180
  37. package/styles/components/sections/_component-mixins.scss +0 -454
  38. package/styles/components/sections/_design-system.scss +0 -477
  39. package/styles/components/sections/_design-tokens.scss +0 -308
  40. package/styles/components/sections/_enhanced-design-variables.scss +0 -147
  41. package/styles/components/sections/_master-compact-system.scss +0 -302
  42. package/styles/components/sections/_master-dense-system.scss +0 -239
  43. package/styles/components/sections/_minimalistic-design.scss +0 -268
  44. package/styles/components/sections/_modern-effects.scss +0 -392
  45. package/styles/components/sections/_modern-sections.scss +0 -351
  46. package/styles/components/sections/_perfect-system.scss +0 -204
  47. package/styles/components/sections/_section-animations.scss +0 -331
  48. package/styles/components/sections/_section-shell.scss +0 -337
  49. package/styles/components/sections/_section-types.generated.scss +0 -30
  50. package/styles/components/sections/_sections-all.scss +0 -26
  51. package/styles/components/sections/_sections-base.scss +0 -334
  52. package/styles/components/sections/_typography-system.scss +0 -327
  53. package/styles/components/sections/_ultra-compact-tokens.scss +0 -375
  54. package/styles/components/sections/_unified-section-style.scss +0 -157
  55. package/styles/components/sections/_utility-classes.scss +0 -567
  56. package/styles/components/sections/_visual-effects-library.scss +0 -374
  57. package/styles/core/_animations.scss +0 -1498
  58. package/styles/core/_bootstrap-reset.scss +0 -445
  59. package/styles/core/_color-helpers.scss +0 -46
  60. package/styles/core/_global-unified.scss +0 -118
  61. package/styles/core/_global.scss +0 -73
  62. package/styles/core/_mixins.scss +0 -491
  63. package/styles/core/_surface-layers.scss +0 -76
  64. package/styles/core/_utilities.scss +0 -326
  65. package/styles/core/_variables-unified.scss +0 -57
  66. package/styles/core/_variables.scss +0 -36
  67. package/styles/core/variables/_colors-source.scss +0 -34
  68. package/styles/core/variables/_colors-unified.scss +0 -26
  69. package/styles/core/variables/_colors.scss +0 -21
  70. package/styles/critical.scss +0 -353
  71. package/styles/design-system/_compact-theme.scss +0 -159
  72. package/styles/design-system/_section-base.scss +0 -426
  73. package/styles/design-system/_tokens.scss +0 -237
  74. package/styles/design-system/_unified-sections.scss +0 -215
  75. package/styles/layout/_feature-grid.scss +0 -322
  76. package/styles/layout/_masonry.scss +0 -734
  77. package/styles/layout/_tilt.scss +0 -244
  78. package/styles/micro-interactions.scss +0 -583
  79. package/styles/mixins/_section-mixins.scss +0 -280
  80. package/styles/non-critical.scss +0 -643
  81. package/styles/reset/_framework-reset.scss +0 -457
  82. package/styles/reset/_index.scss +0 -14
  83. package/styles/reset/_shadow-reset.scss +0 -383
  84. package/styles/responsive.scss +0 -326
  85. package/styles/themes.scss +0 -573
  86. package/styles/tokens/_index.scss +0 -92
  87. package/styles/tokens/_master.scss +0 -1404
  88. package/styles/tokens/_section-tokens.generated.scss +0 -140
@@ -1,351 +0,0 @@
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
- }
@@ -1,204 +0,0 @@
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
- }