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,383 +0,0 @@
1
- // ============================================
2
- // SHADOW DOM RESET
3
- // ============================================
4
- //
5
- // Comprehensive reset for Shadow DOM encapsulated components.
6
- // This ensures components are completely isolated from host app styles.
7
- //
8
- // Usage: Include at the top of component style bundles
9
- //
10
- // ============================================
11
-
12
- @use "../tokens/master" as tokens;
13
-
14
- // ============================================
15
- // HOST ELEMENT RESET
16
- // ============================================
17
-
18
- :host {
19
- // Reset ALL inherited properties to initial state
20
- // This prevents any host app styles from leaking in
21
- all: initial;
22
-
23
- // Re-establish essential display properties
24
- display: block !important;
25
- position: relative;
26
- box-sizing: border-box;
27
- width: 100% !important;
28
- min-height: 0; // Allow content to determine height
29
- visibility: visible !important;
30
- opacity: 1 !important;
31
-
32
- // Transparent container with 8px padding (library default)
33
- // Must be set here immediately after all:initial to ensure application
34
- padding: 8px;
35
- background: transparent !important;
36
- background-color: transparent !important;
37
-
38
- // Typography - inherit from host but with fallbacks
39
- font-family:
40
- Helvetica,
41
- "Helvetica Neue",
42
- -apple-system,
43
- BlinkMacSystemFont,
44
- "Segoe UI",
45
- Roboto,
46
- Arial,
47
- sans-serif;
48
- font-size: var(--font-size-base, 14px);
49
- line-height: 1.5;
50
- color: var(--foreground, #{tokens.$osi-foreground-light});
51
-
52
- // Text rendering
53
- -webkit-font-smoothing: antialiased;
54
- -moz-osx-font-smoothing: grayscale;
55
- text-rendering: optimizeLegibility;
56
- font-feature-settings: "kern" 1;
57
-
58
- // Prevent text selection issues
59
- -webkit-tap-highlight-color: transparent;
60
-
61
- // Contain styles within shadow boundary
62
- contain: layout style;
63
-
64
- // Responsive: reduce padding on mobile
65
- @media (max-width: 480px) {
66
- padding: 4px;
67
- }
68
- }
69
-
70
- // Host context variations
71
- :host([hidden]) {
72
- display: none !important;
73
- }
74
-
75
- :host([disabled]) {
76
- pointer-events: none;
77
- opacity: 0.6;
78
- }
79
-
80
- // ============================================
81
- // UNIVERSAL BOX MODEL RESET
82
- // ============================================
83
-
84
- *,
85
- *::before,
86
- *::after {
87
- box-sizing: border-box;
88
- margin: 0;
89
- padding: 0;
90
-
91
- // Reset borders
92
- border-width: 0;
93
- border-style: solid;
94
- border-color: currentColor;
95
- }
96
-
97
- // ============================================
98
- // TYPOGRAPHY RESET
99
- // ============================================
100
-
101
- // Headings - with explicit font sizes matching demo app
102
- h1,
103
- h2,
104
- h3,
105
- h4,
106
- h5,
107
- h6 {
108
- margin: 0;
109
- line-height: 1.2;
110
- font-family: inherit;
111
- }
112
-
113
- h1 {
114
- font-size: var(--text-2xl, 1.5rem);
115
- font-weight: var(--font-weight-medium, 500);
116
- }
117
-
118
- h2 {
119
- font-size: var(--text-xl, 1.25rem);
120
- font-weight: var(--font-weight-medium, 500);
121
- }
122
-
123
- h3 {
124
- font-size: var(--text-lg, 1.125rem);
125
- font-weight: var(--font-weight-medium, 500);
126
- }
127
-
128
- h4 {
129
- font-size: var(--text-base, 1rem);
130
- font-weight: var(--font-weight-medium, 500);
131
- }
132
-
133
- h5 {
134
- font-size: var(--text-sm, 0.875rem);
135
- font-weight: var(--font-weight-medium, 500);
136
- }
137
-
138
- h6 {
139
- font-size: var(--text-xs, 0.75rem);
140
- font-weight: var(--font-weight-medium, 500);
141
- }
142
-
143
- // Paragraphs and text
144
- p {
145
- font-size: var(--text-base, 1rem);
146
- font-weight: var(--font-weight-normal, 400);
147
- line-height: 1.5;
148
- margin: 0;
149
- }
150
-
151
- span,
152
- div {
153
- margin: 0;
154
- padding: 0;
155
- }
156
-
157
- // Links
158
- a {
159
- color: inherit;
160
- text-decoration: inherit;
161
- cursor: pointer;
162
-
163
- &:focus-visible {
164
- outline: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
165
- outline-offset: 2px;
166
- border-radius: 2px;
167
- }
168
- }
169
-
170
- // Lists
171
- ul,
172
- ol {
173
- list-style: none;
174
- margin: 0;
175
- padding: 0;
176
- }
177
-
178
- li {
179
- margin: 0;
180
- padding: 0;
181
- }
182
-
183
- // ============================================
184
- // FORM ELEMENTS RESET
185
- // ============================================
186
-
187
- button,
188
- input,
189
- optgroup,
190
- select,
191
- textarea {
192
- font-family: inherit;
193
- font-size: 100%;
194
- font-weight: inherit;
195
- line-height: inherit;
196
- color: inherit;
197
- margin: 0;
198
- padding: 0;
199
- background: transparent;
200
- border: none;
201
- }
202
-
203
- button,
204
- [type="button"],
205
- [type="reset"],
206
- [type="submit"] {
207
- cursor: pointer;
208
- -webkit-appearance: button;
209
- background-color: transparent;
210
- background-image: none;
211
-
212
- &:focus-visible {
213
- outline: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
214
- outline-offset: 2px;
215
- }
216
- }
217
-
218
- // Remove default button styles
219
- button::-moz-focus-inner,
220
- [type="button"]::-moz-focus-inner,
221
- [type="reset"]::-moz-focus-inner,
222
- [type="submit"]::-moz-focus-inner {
223
- border-style: none;
224
- padding: 0;
225
- }
226
-
227
- // ============================================
228
- // MEDIA ELEMENTS RESET
229
- // ============================================
230
-
231
- img,
232
- svg,
233
- video,
234
- canvas,
235
- audio,
236
- iframe,
237
- embed,
238
- object {
239
- display: block;
240
- vertical-align: middle;
241
- max-width: 100%;
242
- height: auto;
243
- }
244
-
245
- img,
246
- video {
247
- max-width: 100%;
248
- height: auto;
249
- }
250
-
251
- svg {
252
- fill: currentColor;
253
- }
254
-
255
- // ============================================
256
- // LUCIDE ICON SPECIFIC STYLES
257
- // ============================================
258
-
259
- // Lucide icons use stroke-based SVGs, not fill
260
- lucide-icon,
261
- lucide-angular {
262
- display: inline-flex !important;
263
- align-items: center !important;
264
- justify-content: center !important;
265
- vertical-align: middle !important;
266
- flex-shrink: 0;
267
-
268
- svg {
269
- display: block !important;
270
- width: inherit !important;
271
- height: inherit !important;
272
- stroke: currentColor !important;
273
- fill: none !important;
274
- stroke-width: 2 !important;
275
- stroke-linecap: round !important;
276
- stroke-linejoin: round !important;
277
- }
278
- }
279
-
280
- // ============================================
281
- // TABLE RESET
282
- // ============================================
283
-
284
- table {
285
- text-indent: 0;
286
- border-color: inherit;
287
- border-collapse: collapse;
288
- }
289
-
290
- // ============================================
291
- // INTERACTIVE ELEMENTS
292
- // ============================================
293
-
294
- // Summary element (disclosure widget)
295
- summary {
296
- display: list-item;
297
- cursor: pointer;
298
- }
299
-
300
- // Prevent text selection on interactive elements
301
- [role="button"] {
302
- cursor: pointer;
303
- }
304
-
305
- // ============================================
306
- // ACCESSIBILITY ENHANCEMENTS
307
- // ============================================
308
-
309
- // Focus visible styles for keyboard navigation
310
- :focus-visible {
311
- outline: 2px solid var(--color-brand, #{tokens.$osi-color-brand});
312
- outline-offset: 2px;
313
- }
314
-
315
- // Remove focus outline for mouse users
316
- :focus:not(:focus-visible) {
317
- outline: none;
318
- }
319
-
320
- // Reduced motion support
321
- @media (prefers-reduced-motion: reduce) {
322
- *,
323
- *::before,
324
- *::after {
325
- animation-duration: 0.01ms !important;
326
- animation-iteration-count: 1 !important;
327
- transition-duration: 0.01ms !important;
328
- scroll-behavior: auto !important;
329
- }
330
- }
331
-
332
- // High contrast mode support
333
- @media (prefers-contrast: high) {
334
- * {
335
- border-color: currentColor !important;
336
- }
337
- }
338
-
339
- // ============================================
340
- // SCROLLBAR STYLING
341
- // ============================================
342
-
343
- // Webkit scrollbar styling (Chrome, Safari, Edge)
344
- ::-webkit-scrollbar {
345
- width: 8px;
346
- height: 8px;
347
- }
348
-
349
- ::-webkit-scrollbar-track {
350
- background: var(--muted, #{tokens.$osi-gray-200});
351
- border-radius: 4px;
352
- }
353
-
354
- ::-webkit-scrollbar-thumb {
355
- background: var(--muted-foreground, #{tokens.$osi-gray-400});
356
- border-radius: 4px;
357
-
358
- &:hover {
359
- background: var(--foreground, #{tokens.$osi-foreground-light});
360
- }
361
- }
362
-
363
- // Firefox scrollbar styling
364
- * {
365
- scrollbar-width: thin;
366
- scrollbar-color: var(--muted-foreground, #{tokens.$osi-gray-400})
367
- var(--muted, #{tokens.$osi-gray-200});
368
- }
369
-
370
- // ============================================
371
- // PRINT STYLES
372
- // ============================================
373
-
374
- @media print {
375
- *,
376
- *::before,
377
- *::after {
378
- background: transparent !important;
379
- color: black !important;
380
- box-shadow: none !important;
381
- text-shadow: none !important;
382
- }
383
- }
@@ -1,326 +0,0 @@
1
- /**
2
- * OSI Cards - Responsive Design System
3
- *
4
- * Breakpoints and responsive utilities for cards and sections.
5
- */
6
-
7
- // ============================================
8
- // Breakpoint Variables
9
- // ============================================
10
-
11
- $breakpoints: (
12
- "xs": 320px,
13
- "sm": 480px,
14
- "md": 768px,
15
- "lg": 1024px,
16
- "xl": 1280px,
17
- "2xl": 1536px,
18
- );
19
-
20
- // ============================================
21
- // Responsive Mixins
22
- // ============================================
23
-
24
- /// Media query for minimum width (mobile-first)
25
- @mixin responsive($breakpoint) {
26
- @if map-has-key($breakpoints, $breakpoint) {
27
- @media (min-width: map-get($breakpoints, $breakpoint)) {
28
- @content;
29
- }
30
- } @else {
31
- @media (min-width: $breakpoint) {
32
- @content;
33
- }
34
- }
35
- }
36
-
37
- /// Media query for maximum width
38
- @mixin responsive-down($breakpoint) {
39
- @if map-has-key($breakpoints, $breakpoint) {
40
- @media (max-width: #{map-get($breakpoints, $breakpoint) - 1px}) {
41
- @content;
42
- }
43
- } @else {
44
- @media (max-width: #{$breakpoint - 1px}) {
45
- @content;
46
- }
47
- }
48
- }
49
-
50
- /// Media query for range
51
- @mixin responsive-between($min, $max) {
52
- $min-width: if(map-has-key($breakpoints, $min), map-get($breakpoints, $min), $min);
53
- $max-width: if(map-has-key($breakpoints, $max), map-get($breakpoints, $max), $max);
54
-
55
- @media (min-width: $min-width) and (max-width: #{$max-width - 1px}) {
56
- @content;
57
- }
58
- }
59
-
60
- // ============================================
61
- // Container Queries
62
- // ============================================
63
-
64
- @mixin container($name: card) {
65
- container-type: inline-size;
66
- container-name: $name;
67
- }
68
-
69
- @mixin container-query($name, $min-width: null, $max-width: null) {
70
- @if $min-width and $max-width {
71
- @container #{$name} (min-width: #{$min-width}) and (max-width: #{$max-width}) {
72
- @content;
73
- }
74
- } @else if $min-width {
75
- @container #{$name} (min-width: #{$min-width}) {
76
- @content;
77
- }
78
- } @else if $max-width {
79
- @container #{$name} (max-width: #{$max-width}) {
80
- @content;
81
- }
82
- }
83
- }
84
-
85
- // ============================================
86
- // Card Responsive Styles
87
- // ============================================
88
-
89
- .osi-card-container {
90
- @include container(card);
91
-
92
- // Base mobile styles
93
- --card-padding: 0.75rem;
94
- --card-gap: 0.5rem;
95
- --card-title-size: 1rem;
96
- --section-title-size: 0.875rem;
97
- --field-label-size: 0.75rem;
98
- --field-value-size: 0.875rem;
99
-
100
- @include responsive("sm") {
101
- --card-padding: 1rem;
102
- --card-gap: 0.75rem;
103
- --card-title-size: 1.125rem;
104
- }
105
-
106
- @include responsive("md") {
107
- --card-padding: 1.25rem;
108
- --card-gap: 1rem;
109
- --card-title-size: 1.25rem;
110
- --section-title-size: 1rem;
111
- }
112
-
113
- @include responsive("lg") {
114
- --card-padding: 1.5rem;
115
- --card-gap: 1.25rem;
116
- --card-title-size: 1.375rem;
117
- }
118
- }
119
-
120
- // ============================================
121
- // Grid Responsive Utilities
122
- // ============================================
123
-
124
- .masonry-container {
125
- // Mobile: 1 column
126
- --masonry-columns: 1;
127
-
128
- @include responsive("sm") {
129
- --masonry-columns: 2;
130
- }
131
-
132
- @include responsive("lg") {
133
- --masonry-columns: 3;
134
- }
135
-
136
- @include responsive("xl") {
137
- --masonry-columns: 4;
138
- }
139
- }
140
-
141
- // Container query based columns
142
- .masonry-container--container-responsive {
143
- @include container-query(card, $min-width: 400px) {
144
- --masonry-columns: 2;
145
- }
146
-
147
- @include container-query(card, $min-width: 700px) {
148
- --masonry-columns: 3;
149
- }
150
-
151
- @include container-query(card, $min-width: 1000px) {
152
- --masonry-columns: 4;
153
- }
154
- }
155
-
156
- // ============================================
157
- // Section Responsive Styles
158
- // ============================================
159
-
160
- .ai-section {
161
- // Info section: stack fields on mobile
162
- &--info {
163
- .section-field-grid {
164
- grid-template-columns: 1fr;
165
-
166
- @include responsive("sm") {
167
- grid-template-columns: repeat(2, 1fr);
168
- }
169
-
170
- @include responsive("lg") {
171
- grid-template-columns: repeat(3, 1fr);
172
- }
173
- }
174
- }
175
-
176
- // Analytics section: adjust metric sizes
177
- &--analytics {
178
- .metric-grid {
179
- grid-template-columns: 1fr;
180
-
181
- @include responsive("xs") {
182
- grid-template-columns: repeat(2, 1fr);
183
- }
184
-
185
- @include responsive("md") {
186
- grid-template-columns: repeat(3, 1fr);
187
- }
188
- }
189
-
190
- .metric-value {
191
- font-size: 1.5rem;
192
-
193
- @include responsive("md") {
194
- font-size: 2rem;
195
- }
196
- }
197
- }
198
-
199
- // Timeline section: horizontal on desktop
200
- &--timeline {
201
- .timeline-items {
202
- flex-direction: column;
203
-
204
- @include responsive("lg") {
205
- flex-direction: row;
206
- overflow-x: auto;
207
- scroll-snap-type: x mandatory;
208
-
209
- > * {
210
- scroll-snap-align: start;
211
- min-width: 280px;
212
- }
213
- }
214
- }
215
- }
216
-
217
- // Contact section: adjust layout
218
- &--contact {
219
- .contact-grid {
220
- grid-template-columns: 1fr;
221
-
222
- @include responsive("sm") {
223
- grid-template-columns: repeat(2, 1fr);
224
- }
225
- }
226
- }
227
- }
228
-
229
- // ============================================
230
- // Typography Responsive Utilities
231
- // ============================================
232
-
233
- .text-responsive {
234
- font-size: clamp(0.875rem, 2vw, 1rem);
235
- line-height: 1.5;
236
- }
237
-
238
- .heading-responsive {
239
- font-size: clamp(1.25rem, 4vw, 2rem);
240
- line-height: 1.2;
241
- }
242
-
243
- // ============================================
244
- // Spacing Responsive Utilities
245
- // ============================================
246
-
247
- .space-responsive {
248
- padding: clamp(0.5rem, 2vw, 1.5rem);
249
- }
250
-
251
- .gap-responsive {
252
- gap: clamp(0.5rem, 2vw, 1rem);
253
- }
254
-
255
- // ============================================
256
- // Touch Target Utilities
257
- // ============================================
258
-
259
- .touch-target {
260
- min-height: 44px;
261
- min-width: 44px;
262
-
263
- @include responsive("lg") {
264
- min-height: 36px;
265
- min-width: 36px;
266
- }
267
- }
268
-
269
- // ============================================
270
- // Visibility Utilities
271
- // ============================================
272
-
273
- .hide-mobile {
274
- @include responsive-down("md") {
275
- display: none !important;
276
- }
277
- }
278
-
279
- .hide-desktop {
280
- @include responsive("md") {
281
- display: none !important;
282
- }
283
- }
284
-
285
- .show-mobile {
286
- display: none !important;
287
-
288
- @include responsive-down("md") {
289
- display: block !important;
290
- }
291
- }
292
-
293
- .show-desktop {
294
- display: none !important;
295
-
296
- @include responsive("md") {
297
- display: block !important;
298
- }
299
- }
300
-
301
- // ============================================
302
- // Print Styles
303
- // ============================================
304
-
305
- @media print {
306
- .osi-card-container {
307
- --card-padding: 1rem;
308
- box-shadow: none;
309
- border: 1px solid #ddd;
310
- break-inside: avoid;
311
- }
312
-
313
- .masonry-container {
314
- --masonry-columns: 2;
315
- display: block;
316
-
317
- .masonry-item {
318
- break-inside: avoid;
319
- margin-bottom: 1rem;
320
- }
321
- }
322
-
323
- .hide-print {
324
- display: none !important;
325
- }
326
- }