osi-cards-lib 1.5.2 → 1.5.4

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 (108) hide show
  1. package/README.md +819 -14
  2. package/fesm2022/osi-cards-lib.mjs +21253 -12686
  3. package/index.d.ts +5240 -2510
  4. package/package.json +1 -1
  5. package/styles/_components.scss +6 -27
  6. package/styles/_index.scss +28 -0
  7. package/styles/_osi-cards-mixins.scss +430 -0
  8. package/styles/_osi-cards-tokens.scss +327 -0
  9. package/styles/_styles-scoped.scss +23 -44
  10. package/styles/_styles-standalone.scss +1564 -1195
  11. package/styles/bundles/_ai-card.scss +29 -56
  12. package/styles/bundles/_all.scss +4 -25
  13. package/styles/bundles/_base.scss +5 -6
  14. package/styles/bundles/_card-skeleton.scss +5 -0
  15. package/styles/bundles/_index.scss +6 -13
  16. package/styles/bundles/_sections.scss +2 -29
  17. package/styles/bundles/_tokens-only.scss +5 -0
  18. package/styles/bundles/ai-card.css +1 -1
  19. package/styles/bundles/ai-card.expanded.css +8175 -20768
  20. package/styles/bundles/all.css +1 -1
  21. package/styles/bundles/all.expanded.css +5067 -18374
  22. package/styles/bundles/base.css +1 -1
  23. package/styles/bundles/base.expanded.css +5562 -2460
  24. package/styles/bundles/sections.css +2 -0
  25. package/styles/bundles/sections.expanded.css +8458 -0
  26. package/styles/components/_ai-card-renderer.scss +5 -0
  27. package/styles/components/_badges.scss +5 -0
  28. package/styles/components/_hero-card.scss +5 -0
  29. package/styles/components/_image-fallback.scss +5 -0
  30. package/styles/components/cards/_ai-card.scss +91 -148
  31. package/styles/components/sections/_all-sections.generated.scss +41 -0
  32. package/styles/components/sections/_all-sections.scss +1079 -0
  33. package/styles/components/sections/_balanced-compact-system.scss +187 -0
  34. package/styles/components/sections/_compact-mixins.scss +181 -0
  35. package/styles/components/sections/_component-mixins.scss +454 -0
  36. package/styles/components/sections/_design-system.scss +351 -380
  37. package/styles/components/sections/_design-tokens.scss +301 -0
  38. package/styles/components/sections/_enhanced-design-variables.scss +148 -0
  39. package/styles/components/sections/_master-compact-system.scss +295 -0
  40. package/styles/components/sections/_master-dense-system.scss +237 -0
  41. package/styles/components/sections/_minimalistic-design.scss +269 -0
  42. package/styles/components/sections/_modern-effects.scss +412 -0
  43. package/styles/components/sections/_modern-sections.scss +336 -0
  44. package/styles/components/sections/_perfect-system.scss +205 -0
  45. package/styles/components/sections/_section-shell.scss +27 -123
  46. package/styles/components/sections/_section-types.generated.scss +27 -34
  47. package/styles/components/sections/_sections-all.scss +25 -0
  48. package/styles/components/sections/_sections-base.scss +161 -208
  49. package/styles/components/sections/_typography-system.scss +322 -0
  50. package/styles/components/sections/_ultra-compact-tokens.scss +352 -0
  51. package/styles/components/sections/_unified-section-style.scss +158 -0
  52. package/styles/components/sections/_utility-classes.scss +270 -0
  53. package/styles/components/sections/_visual-effects-library.scss +355 -0
  54. package/styles/core/_surface-layers.scss +9 -12
  55. package/styles/critical.scss +356 -0
  56. package/styles/design-system/_compact-theme.scss +160 -0
  57. package/styles/design-system/_section-base.scss +395 -0
  58. package/styles/design-system/_tokens.scss +238 -0
  59. package/styles/design-system/_unified-sections.scss +216 -0
  60. package/styles/layout/_feature-grid.scss +5 -0
  61. package/styles/layout/_masonry.scss +313 -37
  62. package/styles/micro-interactions.scss +5 -0
  63. package/styles/mixins/_section-mixins.scss +279 -0
  64. package/styles/non-critical.scss +641 -0
  65. package/styles/osi-cards-scoped.css +1 -1
  66. package/styles/osi-cards-scoped.expanded.css +4971 -17744
  67. package/styles/osi-cards-standalone.css +1 -1
  68. package/styles/osi-cards-standalone.expanded.css +5051 -17804
  69. package/styles/osi-cards-tokens.css +1 -1
  70. package/styles/osi-cards-tokens.expanded.css +193 -195
  71. package/styles/osi-cards.css +1 -1
  72. package/styles/osi-cards.expanded.css +4915 -17691
  73. package/styles/reset/_framework-reset.scss +5 -0
  74. package/styles/responsive.scss +5 -0
  75. package/styles/tokens/_master.scss +131 -127
  76. package/styles/_design-tokens.scss +0 -349
  77. package/styles/bundles/_section-analytics.scss +0 -10
  78. package/styles/bundles/_section-chart.scss +0 -10
  79. package/styles/bundles/_section-contact.scss +0 -11
  80. package/styles/bundles/_section-list.scss +0 -10
  81. package/styles/bundles/_section-news.scss +0 -10
  82. package/styles/bundles/_section-overview.scss +0 -10
  83. package/styles/bundles/section-analytics.css +0 -2
  84. package/styles/bundles/section-news.css +0 -2
  85. package/styles/bundles/section-overview.css +0 -2
  86. package/styles/components/sections/_analytics.scss +0 -288
  87. package/styles/components/sections/_brand-colors.scss +0 -259
  88. package/styles/components/sections/_chart.scss +0 -296
  89. package/styles/components/sections/_contact.scss +0 -265
  90. package/styles/components/sections/_event.scss +0 -285
  91. package/styles/components/sections/_fallback.scss +0 -175
  92. package/styles/components/sections/_financials.scss +0 -264
  93. package/styles/components/sections/_global-enforcement.scss +0 -757
  94. package/styles/components/sections/_info.scss +0 -230
  95. package/styles/components/sections/_list.scss +0 -260
  96. package/styles/components/sections/_map.scss +0 -208
  97. package/styles/components/sections/_network.scss +0 -122
  98. package/styles/components/sections/_news.scss +0 -98
  99. package/styles/components/sections/_overview.scss +0 -165
  100. package/styles/components/sections/_product.scss +0 -950
  101. package/styles/components/sections/_quotation.scss +0 -137
  102. package/styles/components/sections/_section-types.scss +0 -348
  103. package/styles/components/sections/_social-media.scss +0 -94
  104. package/styles/components/sections/_solutions.scss +0 -220
  105. package/styles/components/sections/_text-reference.scss +0 -141
  106. package/styles/components/sections/_unified-cards.scss +0 -124
  107. package/styles/core/_animations-shadow.scss +0 -763
  108. package/styles/core/_tokens-source.scss +0 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osi-cards-lib",
3
- "version": "1.5.2",
3
+ "version": "1.5.4",
4
4
  "description": "Standalone OSI Cards library for Angular applications with CSS Layer support for easy style overrides",
5
5
  "keywords": [
6
6
  "angular",
@@ -1,13 +1,13 @@
1
1
  /* ===================================================================
2
2
  SHARED COMPONENT STYLES BUNDLE
3
-
3
+
4
4
  This file contains all component imports shared across all entry points:
5
5
  - _styles.scss (demo app, :root scope)
6
6
  - _styles-scoped.scss (integration, .osi-cards-container scope)
7
7
  - _styles-standalone.scss (full isolation with Bootstrap reset)
8
-
8
+
9
9
  Each entry point imports this bundle after setting up its scope and variables.
10
-
10
+
11
11
  Note: Using @import here as Sass @use/@forward requires restructuring
12
12
  the entire SCSS architecture. These warnings can be safely ignored
13
13
  until Dart Sass 3.0.0 when migration will be required.
@@ -33,27 +33,6 @@
33
33
 
34
34
  // Component styles
35
35
  @import "components/cards/ai-card";
36
- @import "components/sections/design-system"; /* Master design system - must import first */
37
- @import "components/sections/sections-base";
38
- @import "components/sections/section-types";
39
- @import "components/sections/section-shell";
40
- @import "components/sections/overview";
41
- @import "components/sections/analytics";
42
- @import "components/sections/news";
43
- @import "components/sections/social-media";
44
- @import "components/sections/info";
45
- @import "components/sections/map";
46
- @import "components/sections/list";
47
- @import "components/sections/contact";
48
- @import "components/sections/network";
49
- @import "components/sections/product";
50
- @import "components/sections/chart";
51
- @import "components/sections/event";
52
- @import "components/sections/financials";
53
- @import "components/sections/solutions";
54
- @import "components/sections/quotation";
55
- @import "components/sections/text-reference";
56
- @import "components/sections/brand-colors";
57
- @import "components/sections/fallback";
58
- @import "components/sections/unified-cards"; /* Must be last to override all section-specific styles */
59
- @import "components/sections/global-enforcement"; /* GLOBAL ENFORCEMENT - MUST BE ABSOLUTELY LAST to enforce all settings */
36
+
37
+ // All section styles (consolidated)
38
+ @import "components/sections/sections-all";
@@ -0,0 +1,28 @@
1
+ /**
2
+ * OSI Cards Style System
3
+ * Single entry point for all styles
4
+ *
5
+ * Usage in applications:
6
+ * @use 'osi-cards-lib/styles' as osi;
7
+ *
8
+ * Or import individual parts:
9
+ * @use 'osi-cards-lib/styles/tokens' as tokens;
10
+ * @use 'osi-cards-lib/styles/mixins' as mixins;
11
+ */
12
+
13
+ // Design tokens (CSS custom properties)
14
+ @forward 'osi-cards-tokens';
15
+
16
+ // SCSS mixins and utilities
17
+ @forward 'osi-cards-mixins';
18
+
19
+ // Component styles
20
+ @forward 'components/card' as card-*;
21
+ @forward 'components/section' as section-*;
22
+
23
+ // Optional: Theme utilities
24
+ @forward 'themes/light' as light-*;
25
+ @forward 'themes/dark' as dark-*;
26
+
27
+
28
+
@@ -0,0 +1,430 @@
1
+ /**
2
+ * OSI Cards SCSS Mixins
3
+ * Reusable style patterns for components
4
+ *
5
+ * Usage:
6
+ * @use 'osi-cards-mixins' as mixins;
7
+ *
8
+ * .my-component {
9
+ * @include mixins.card-base;
10
+ * }
11
+ */
12
+
13
+ // ============================================================================
14
+ // CARD MIXINS
15
+ // ============================================================================
16
+
17
+ /// Base card styles
18
+ @mixin card-base {
19
+ background: var(--osi-card-bg, white);
20
+ border: 1px solid var(--osi-card-border, var(--osi-neutral-200));
21
+ border-radius: var(--osi-card-radius, var(--osi-radius-xl));
22
+ box-shadow: var(--osi-card-shadow, var(--osi-shadow-md));
23
+ }
24
+
25
+ /// Card hover state
26
+ @mixin card-hover {
27
+ transition: transform var(--osi-duration-200) var(--osi-ease-out),
28
+ box-shadow var(--osi-duration-200) var(--osi-ease-out);
29
+
30
+ &:hover {
31
+ transform: translateY(-2px);
32
+ box-shadow: var(--osi-shadow-lg);
33
+ }
34
+ }
35
+
36
+ /// Card interactive (clickable)
37
+ @mixin card-interactive {
38
+ @include card-hover;
39
+ cursor: pointer;
40
+
41
+ &:active {
42
+ transform: translateY(0);
43
+ box-shadow: var(--osi-shadow-sm);
44
+ }
45
+
46
+ &:focus-visible {
47
+ outline: 2px solid var(--osi-primary-500);
48
+ outline-offset: 2px;
49
+ }
50
+ }
51
+
52
+ // ============================================================================
53
+ // SECTION MIXINS
54
+ // ============================================================================
55
+
56
+ /// Base section styles
57
+ @mixin section-base {
58
+ padding: var(--osi-spacing-4);
59
+
60
+ & + & {
61
+ border-top: 1px solid var(--osi-border-default);
62
+ }
63
+ }
64
+
65
+ /// Section header styles
66
+ @mixin section-header {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: var(--osi-spacing-2);
70
+ margin-bottom: var(--osi-spacing-3);
71
+ font-size: var(--osi-text-sm);
72
+ font-weight: var(--osi-font-semibold);
73
+ color: var(--osi-section-header-color);
74
+ text-transform: uppercase;
75
+ letter-spacing: 0.05em;
76
+ }
77
+
78
+ /// Section content styles
79
+ @mixin section-content {
80
+ color: var(--osi-section-content-color);
81
+ font-size: var(--osi-text-sm);
82
+ line-height: var(--osi-leading-relaxed);
83
+ }
84
+
85
+ // ============================================================================
86
+ // FIELD MIXINS
87
+ // ============================================================================
88
+
89
+ /// Field container
90
+ @mixin field-container {
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: var(--osi-field-gap);
94
+ }
95
+
96
+ /// Field label
97
+ @mixin field-label {
98
+ font-size: var(--osi-text-xs);
99
+ font-weight: var(--osi-font-medium);
100
+ color: var(--osi-field-label-color);
101
+ text-transform: uppercase;
102
+ letter-spacing: 0.05em;
103
+ }
104
+
105
+ /// Field value
106
+ @mixin field-value {
107
+ font-size: var(--osi-text-base);
108
+ font-weight: var(--osi-font-medium);
109
+ color: var(--osi-field-value-color);
110
+ }
111
+
112
+ /// Field value large (for metrics)
113
+ @mixin field-value-lg {
114
+ font-size: var(--osi-text-2xl);
115
+ font-weight: var(--osi-font-bold);
116
+ color: var(--osi-field-value-color);
117
+ line-height: var(--osi-leading-tight);
118
+ }
119
+
120
+ // ============================================================================
121
+ // GRID MIXINS
122
+ // ============================================================================
123
+
124
+ /// Responsive grid container
125
+ @mixin grid-container($min-column: 200px, $gap: var(--osi-grid-gap)) {
126
+ display: grid;
127
+ grid-template-columns: repeat(auto-fit, minmax($min-column, 1fr));
128
+ gap: $gap;
129
+ }
130
+
131
+ /// Fixed column grid
132
+ @mixin grid-fixed($columns: 2, $gap: var(--osi-grid-gap)) {
133
+ display: grid;
134
+ grid-template-columns: repeat($columns, 1fr);
135
+ gap: $gap;
136
+ }
137
+
138
+ /// Masonry-like grid (using CSS grid)
139
+ @mixin masonry-grid($min-column: 250px) {
140
+ display: grid;
141
+ grid-template-columns: repeat(auto-fill, minmax($min-column, 1fr));
142
+ grid-auto-rows: 20px;
143
+ gap: var(--osi-spacing-4);
144
+ }
145
+
146
+ // ============================================================================
147
+ // TYPOGRAPHY MIXINS
148
+ // ============================================================================
149
+
150
+ /// Heading styles
151
+ @mixin heading($level: 1) {
152
+ font-family: var(--osi-font-sans);
153
+ font-weight: var(--osi-font-bold);
154
+ line-height: var(--osi-leading-tight);
155
+ color: var(--osi-text-primary);
156
+
157
+ @if $level == 1 {
158
+ font-size: var(--osi-text-3xl);
159
+ } @else if $level == 2 {
160
+ font-size: var(--osi-text-2xl);
161
+ } @else if $level == 3 {
162
+ font-size: var(--osi-text-xl);
163
+ } @else if $level == 4 {
164
+ font-size: var(--osi-text-lg);
165
+ } @else {
166
+ font-size: var(--osi-text-base);
167
+ }
168
+ }
169
+
170
+ /// Body text
171
+ @mixin body-text {
172
+ font-family: var(--osi-font-sans);
173
+ font-size: var(--osi-text-base);
174
+ font-weight: var(--osi-font-normal);
175
+ line-height: var(--osi-leading-normal);
176
+ color: var(--osi-text-secondary);
177
+ }
178
+
179
+ /// Small text
180
+ @mixin small-text {
181
+ font-size: var(--osi-text-sm);
182
+ color: var(--osi-text-tertiary);
183
+ }
184
+
185
+ /// Truncate text with ellipsis
186
+ @mixin truncate {
187
+ overflow: hidden;
188
+ text-overflow: ellipsis;
189
+ white-space: nowrap;
190
+ }
191
+
192
+ /// Multi-line truncate
193
+ @mixin line-clamp($lines: 2) {
194
+ display: -webkit-box;
195
+ -webkit-line-clamp: $lines;
196
+ -webkit-box-orient: vertical;
197
+ overflow: hidden;
198
+ }
199
+
200
+ // ============================================================================
201
+ // BUTTON MIXINS
202
+ // ============================================================================
203
+
204
+ /// Base button styles
205
+ @mixin button-base {
206
+ display: inline-flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ gap: var(--osi-spacing-2);
210
+ padding: var(--osi-btn-padding-y) var(--osi-btn-padding-x);
211
+ font-size: var(--osi-btn-font-size);
212
+ font-weight: var(--osi-btn-font-weight);
213
+ border-radius: var(--osi-btn-radius);
214
+ border: none;
215
+ cursor: pointer;
216
+ transition: all var(--osi-duration-150) var(--osi-ease-out);
217
+
218
+ &:disabled {
219
+ opacity: 0.5;
220
+ cursor: not-allowed;
221
+ }
222
+
223
+ &:focus-visible {
224
+ outline: 2px solid var(--osi-primary-500);
225
+ outline-offset: 2px;
226
+ }
227
+ }
228
+
229
+ /// Primary button
230
+ @mixin button-primary {
231
+ @include button-base;
232
+ background: var(--osi-primary-500);
233
+ color: white;
234
+
235
+ &:hover:not(:disabled) {
236
+ background: var(--osi-primary-600);
237
+ }
238
+
239
+ &:active:not(:disabled) {
240
+ background: var(--osi-primary-700);
241
+ }
242
+ }
243
+
244
+ /// Secondary button
245
+ @mixin button-secondary {
246
+ @include button-base;
247
+ background: var(--osi-neutral-100);
248
+ color: var(--osi-text-primary);
249
+
250
+ &:hover:not(:disabled) {
251
+ background: var(--osi-neutral-200);
252
+ }
253
+
254
+ &:active:not(:disabled) {
255
+ background: var(--osi-neutral-300);
256
+ }
257
+ }
258
+
259
+ /// Ghost button
260
+ @mixin button-ghost {
261
+ @include button-base;
262
+ background: transparent;
263
+ color: var(--osi-text-secondary);
264
+
265
+ &:hover:not(:disabled) {
266
+ background: var(--osi-neutral-100);
267
+ color: var(--osi-text-primary);
268
+ }
269
+ }
270
+
271
+ // ============================================================================
272
+ // UTILITY MIXINS
273
+ // ============================================================================
274
+
275
+ /// Visually hidden (for screen readers)
276
+ @mixin visually-hidden {
277
+ position: absolute !important;
278
+ width: 1px !important;
279
+ height: 1px !important;
280
+ padding: 0 !important;
281
+ margin: -1px !important;
282
+ overflow: hidden !important;
283
+ clip: rect(0, 0, 0, 0) !important;
284
+ white-space: nowrap !important;
285
+ border: 0 !important;
286
+ }
287
+
288
+ /// Reset list styles
289
+ @mixin list-reset {
290
+ list-style: none;
291
+ margin: 0;
292
+ padding: 0;
293
+ }
294
+
295
+ /// Reset button styles
296
+ @mixin button-reset {
297
+ appearance: none;
298
+ background: none;
299
+ border: none;
300
+ padding: 0;
301
+ margin: 0;
302
+ font: inherit;
303
+ color: inherit;
304
+ cursor: pointer;
305
+ }
306
+
307
+ /// Flexbox center
308
+ @mixin flex-center {
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: center;
312
+ }
313
+
314
+ /// Flex column
315
+ @mixin flex-column {
316
+ display: flex;
317
+ flex-direction: column;
318
+ }
319
+
320
+ /// Flex between
321
+ @mixin flex-between {
322
+ display: flex;
323
+ align-items: center;
324
+ justify-content: space-between;
325
+ }
326
+
327
+ /// Absolute fill (position absolute, fill container)
328
+ @mixin absolute-fill {
329
+ position: absolute;
330
+ inset: 0;
331
+ }
332
+
333
+ /// Fixed fill (position fixed, fill viewport)
334
+ @mixin fixed-fill {
335
+ position: fixed;
336
+ inset: 0;
337
+ }
338
+
339
+ // ============================================================================
340
+ // RESPONSIVE MIXINS
341
+ // ============================================================================
342
+
343
+ /// Mobile-first breakpoint
344
+ @mixin breakpoint($size) {
345
+ @if $size == 'sm' {
346
+ @media (min-width: 640px) { @content; }
347
+ } @else if $size == 'md' {
348
+ @media (min-width: 768px) { @content; }
349
+ } @else if $size == 'lg' {
350
+ @media (min-width: 1024px) { @content; }
351
+ } @else if $size == 'xl' {
352
+ @media (min-width: 1280px) { @content; }
353
+ } @else if $size == '2xl' {
354
+ @media (min-width: 1536px) { @content; }
355
+ }
356
+ }
357
+
358
+ /// Max-width breakpoint
359
+ @mixin breakpoint-down($size) {
360
+ @if $size == 'sm' {
361
+ @media (max-width: 639px) { @content; }
362
+ } @else if $size == 'md' {
363
+ @media (max-width: 767px) { @content; }
364
+ } @else if $size == 'lg' {
365
+ @media (max-width: 1023px) { @content; }
366
+ } @else if $size == 'xl' {
367
+ @media (max-width: 1279px) { @content; }
368
+ }
369
+ }
370
+
371
+ // ============================================================================
372
+ // ANIMATION MIXINS
373
+ // ============================================================================
374
+
375
+ /// Fade in animation
376
+ @mixin fade-in($duration: var(--osi-duration-200)) {
377
+ animation: osi-fade-in $duration var(--osi-ease-out);
378
+ }
379
+
380
+ /// Slide up animation
381
+ @mixin slide-up($duration: var(--osi-duration-300)) {
382
+ animation: osi-slide-up $duration var(--osi-ease-out);
383
+ }
384
+
385
+ /// Pulse animation
386
+ @mixin pulse($duration: 2s) {
387
+ animation: osi-pulse $duration infinite;
388
+ }
389
+
390
+ /// Loading shimmer
391
+ @mixin loading-shimmer {
392
+ background: linear-gradient(
393
+ 90deg,
394
+ var(--osi-neutral-200) 25%,
395
+ var(--osi-neutral-100) 50%,
396
+ var(--osi-neutral-200) 75%
397
+ );
398
+ background-size: 200% 100%;
399
+ animation: osi-shimmer 1.5s infinite;
400
+ }
401
+
402
+ // Keyframe definitions
403
+ @keyframes osi-fade-in {
404
+ from { opacity: 0; }
405
+ to { opacity: 1; }
406
+ }
407
+
408
+ @keyframes osi-slide-up {
409
+ from {
410
+ opacity: 0;
411
+ transform: translateY(10px);
412
+ }
413
+ to {
414
+ opacity: 1;
415
+ transform: translateY(0);
416
+ }
417
+ }
418
+
419
+ @keyframes osi-pulse {
420
+ 0%, 100% { opacity: 1; }
421
+ 50% { opacity: 0.5; }
422
+ }
423
+
424
+ @keyframes osi-shimmer {
425
+ 0% { background-position: 200% 0; }
426
+ 100% { background-position: -200% 0; }
427
+ }
428
+
429
+
430
+