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.
- package/fesm2022/osi-cards-lib.mjs +31889 -0
- package/fesm2022/osi-cards-lib.mjs.map +1 -0
- package/index.d.ts +11528 -0
- package/package.json +25 -13
- package/scripts/setup-angular-styles.js +169 -0
- package/styles/_components.scss +38 -0
- package/styles/_index.scss +25 -0
- package/styles/_osi-cards-mixins.scss +459 -0
- package/styles/_osi-cards-tokens.scss +333 -0
- package/styles/_styles-scoped.scss +81 -0
- package/styles/_styles.scss +26 -0
- package/styles/bundles/_ai-card.scss +245 -0
- package/styles/bundles/_all.scss +68 -0
- package/styles/bundles/_base.scss +60 -0
- package/styles/bundles/_card-skeleton.scss +290 -0
- package/styles/bundles/_index.scss +25 -0
- package/styles/bundles/_sections.scss +48 -0
- package/styles/bundles/_tokens-only.scss +139 -0
- package/styles/components/_ai-card-renderer.scss +104 -0
- package/styles/components/_badges.scss +317 -0
- package/styles/components/_card-actions.scss +169 -0
- package/styles/components/_card-footer.scss +47 -0
- package/styles/components/_component-styles.scss +205 -0
- package/styles/components/_empty-state.scss +630 -0
- package/styles/components/_hero-card.scss +422 -0
- package/styles/components/_image-fallback.scss +28 -0
- package/styles/components/_streaming-effects.scss +518 -0
- package/styles/components/cards/_ai-card.scss +718 -0
- package/styles/components/sections/_all-sections.generated.scss +41 -0
- package/styles/components/sections/_all-sections.scss +1086 -0
- package/styles/components/sections/_balanced-compact-system.scss +186 -0
- package/styles/components/sections/_compact-mixins.scss +180 -0
- package/styles/components/sections/_component-mixins.scss +454 -0
- package/styles/components/sections/_design-system.scss +477 -0
- package/styles/components/sections/_design-tokens.scss +308 -0
- package/styles/components/sections/_enhanced-design-variables.scss +147 -0
- package/styles/components/sections/_master-compact-system.scss +302 -0
- package/styles/components/sections/_master-dense-system.scss +239 -0
- package/styles/components/sections/_minimalistic-design.scss +268 -0
- package/styles/components/sections/_modern-effects.scss +392 -0
- package/styles/components/sections/_modern-sections.scss +351 -0
- package/styles/components/sections/_perfect-system.scss +204 -0
- package/styles/components/sections/_section-animations.scss +331 -0
- package/styles/components/sections/_section-shell.scss +337 -0
- package/styles/components/sections/_section-types.generated.scss +30 -0
- package/styles/components/sections/_sections-all.scss +26 -0
- package/styles/components/sections/_sections-base.scss +334 -0
- package/styles/components/sections/_typography-system.scss +327 -0
- package/styles/components/sections/_ultra-compact-tokens.scss +375 -0
- package/styles/components/sections/_unified-section-style.scss +157 -0
- package/styles/components/sections/_utility-classes.scss +567 -0
- package/styles/components/sections/_visual-effects-library.scss +374 -0
- package/styles/core/_animations.scss +1498 -0
- package/styles/core/_bootstrap-reset.scss +445 -0
- package/styles/core/_color-helpers.scss +46 -0
- package/styles/core/_global-unified.scss +118 -0
- package/styles/core/_global.scss +73 -0
- package/styles/core/_mixins.scss +491 -0
- package/styles/core/_surface-layers.scss +76 -0
- package/styles/core/_utilities.scss +326 -0
- package/styles/core/_variables-unified.scss +57 -0
- package/styles/core/_variables.scss +36 -0
- package/styles/core/variables/_colors-source.scss +34 -0
- package/styles/core/variables/_colors-unified.scss +26 -0
- package/styles/core/variables/_colors.scss +21 -0
- package/styles/critical.scss +353 -0
- package/styles/design-system/_compact-theme.scss +159 -0
- package/styles/design-system/_section-base.scss +426 -0
- package/styles/design-system/_tokens.scss +237 -0
- package/styles/design-system/_unified-sections.scss +215 -0
- package/styles/layout/_feature-grid.scss +322 -0
- package/styles/layout/_masonry.scss +734 -0
- package/styles/layout/_tilt.scss +244 -0
- package/styles/micro-interactions.scss +583 -0
- package/styles/mixins/_section-mixins.scss +280 -0
- package/styles/non-critical.scss +643 -0
- package/styles/reset/_framework-reset.scss +457 -0
- package/styles/reset/_index.scss +14 -0
- package/styles/reset/_shadow-reset.scss +383 -0
- package/styles/responsive.scss +326 -0
- package/styles/themes.scss +573 -0
- package/styles/tokens/_index.scss +92 -0
- package/styles/tokens/_master.scss +1404 -0
- package/styles/tokens/_section-tokens.generated.scss +140 -0
- package/postcss.config.js +0 -81
- package/section-registry.json +0 -3864
- package/section-registry.schema.json +0 -264
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSI Cards Design Tokens
|
|
3
|
+
* Single Source of Truth for all design tokens
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* @use 'osi-cards-tokens' as tokens;
|
|
7
|
+
*
|
|
8
|
+
* .my-component {
|
|
9
|
+
* color: var(--osi-text-primary);
|
|
10
|
+
* padding: var(--osi-spacing-md);
|
|
11
|
+
* }
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// COLOR PALETTE
|
|
16
|
+
// ============================================================================
|
|
17
|
+
|
|
18
|
+
:root {
|
|
19
|
+
// Primary Colors
|
|
20
|
+
--osi-primary-50: #fef4f2;
|
|
21
|
+
--osi-primary-100: #fee5e2;
|
|
22
|
+
--osi-primary-200: #fdd0c8;
|
|
23
|
+
--osi-primary-300: #fbb0a3;
|
|
24
|
+
--osi-primary-400: #f78370;
|
|
25
|
+
--osi-primary-500: #ec5a45;
|
|
26
|
+
--osi-primary-600: #d93e27;
|
|
27
|
+
--osi-primary-700: #b6311d;
|
|
28
|
+
--osi-primary-800: #972c1c;
|
|
29
|
+
--osi-primary-900: #7d2a1d;
|
|
30
|
+
|
|
31
|
+
// Neutral Colors
|
|
32
|
+
--osi-neutral-50: #f8fafc;
|
|
33
|
+
--osi-neutral-100: #f1f5f9;
|
|
34
|
+
--osi-neutral-200: #e2e8f0;
|
|
35
|
+
--osi-neutral-300: #cbd5e1;
|
|
36
|
+
--osi-neutral-400: #94a3b8;
|
|
37
|
+
--osi-neutral-500: #64748b;
|
|
38
|
+
--osi-neutral-600: #475569;
|
|
39
|
+
--osi-neutral-700: #334155;
|
|
40
|
+
--osi-neutral-800: #1e293b;
|
|
41
|
+
--osi-neutral-900: #0f172a;
|
|
42
|
+
|
|
43
|
+
// Semantic Colors
|
|
44
|
+
--osi-success-50: #f0fdf4;
|
|
45
|
+
--osi-success-500: #22c55e;
|
|
46
|
+
--osi-success-700: #15803d;
|
|
47
|
+
|
|
48
|
+
--osi-warning-50: #fffbeb;
|
|
49
|
+
--osi-warning-500: #f59e0b;
|
|
50
|
+
--osi-warning-700: #b45309;
|
|
51
|
+
|
|
52
|
+
--osi-error-50: #fef2f2;
|
|
53
|
+
--osi-error-500: #ef4444;
|
|
54
|
+
--osi-error-700: #b91c1c;
|
|
55
|
+
|
|
56
|
+
--osi-info-50: #eff6ff;
|
|
57
|
+
--osi-info-500: #3b82f6;
|
|
58
|
+
--osi-info-700: #1d4ed8;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// TYPOGRAPHY
|
|
63
|
+
// ============================================================================
|
|
64
|
+
|
|
65
|
+
:root {
|
|
66
|
+
// Font Families
|
|
67
|
+
--osi-font-sans:
|
|
68
|
+
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
69
|
+
--osi-font-mono: "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
70
|
+
|
|
71
|
+
// Font Sizes - COMPACT MODE (reduced by ~10-15%)
|
|
72
|
+
--osi-text-xs: 0.625rem; // 10px (was 12px)
|
|
73
|
+
--osi-text-sm: 0.8125rem; // 13px (was 14px)
|
|
74
|
+
--osi-text-base: 0.9375rem; // 15px (was 16px)
|
|
75
|
+
--osi-text-lg: 1.0625rem; // 17px (was 18px)
|
|
76
|
+
--osi-text-xl: 1.1875rem; // 19px (was 20px)
|
|
77
|
+
--osi-text-2xl: 1.375rem; // 22px (was 24px)
|
|
78
|
+
--osi-text-3xl: 1.75rem; // 28px (was 30px)
|
|
79
|
+
--osi-text-4xl: 2.125rem; // 34px (was 36px)
|
|
80
|
+
|
|
81
|
+
// Line Heights
|
|
82
|
+
--osi-leading-tight: 1.25;
|
|
83
|
+
--osi-leading-snug: 1.375;
|
|
84
|
+
--osi-leading-normal: 1.5;
|
|
85
|
+
--osi-leading-relaxed: 1.625;
|
|
86
|
+
|
|
87
|
+
// Font Weights
|
|
88
|
+
--osi-font-normal: 400;
|
|
89
|
+
--osi-font-medium: 500;
|
|
90
|
+
--osi-font-semibold: 600;
|
|
91
|
+
--osi-font-bold: 700;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// SPACING
|
|
96
|
+
// ============================================================================
|
|
97
|
+
|
|
98
|
+
:root {
|
|
99
|
+
--osi-spacing-0: 0;
|
|
100
|
+
--osi-spacing-px: 1px;
|
|
101
|
+
--osi-spacing-0_5: 0.125rem; // 2px
|
|
102
|
+
--osi-spacing-1: 0.25rem; // 4px
|
|
103
|
+
--osi-spacing-1_5: 0.375rem; // 6px
|
|
104
|
+
--osi-spacing-2: 0.5rem; // 8px
|
|
105
|
+
--osi-spacing-2_5: 0.625rem; // 10px
|
|
106
|
+
--osi-spacing-3: 0.75rem; // 12px
|
|
107
|
+
--osi-spacing-3_5: 0.875rem; // 14px
|
|
108
|
+
--osi-spacing-4: 1rem; // 16px
|
|
109
|
+
--osi-spacing-5: 1.25rem; // 20px
|
|
110
|
+
--osi-spacing-6: 1.5rem; // 24px
|
|
111
|
+
--osi-spacing-7: 1.75rem; // 28px
|
|
112
|
+
--osi-spacing-8: 2rem; // 32px
|
|
113
|
+
--osi-spacing-9: 2.25rem; // 36px
|
|
114
|
+
--osi-spacing-10: 2.5rem; // 40px
|
|
115
|
+
--osi-spacing-12: 3rem; // 48px
|
|
116
|
+
--osi-spacing-14: 3.5rem; // 56px
|
|
117
|
+
--osi-spacing-16: 4rem; // 64px
|
|
118
|
+
--osi-spacing-20: 5rem; // 80px
|
|
119
|
+
--osi-spacing-24: 6rem; // 96px
|
|
120
|
+
|
|
121
|
+
// Semantic spacing aliases (DEFAULT)
|
|
122
|
+
--osi-spacing-xs: var(--osi-spacing-1);
|
|
123
|
+
--osi-spacing-sm: var(--osi-spacing-2);
|
|
124
|
+
--osi-spacing-md: var(--osi-spacing-4);
|
|
125
|
+
--osi-spacing-lg: var(--osi-spacing-6);
|
|
126
|
+
--osi-spacing-xl: var(--osi-spacing-8);
|
|
127
|
+
--osi-spacing-2xl: var(--osi-spacing-12);
|
|
128
|
+
|
|
129
|
+
// COMPACT MODE - Reduced spacing (25-30% smaller)
|
|
130
|
+
--osi-spacing-compact-xs: var(--osi-spacing-0_5); // 2px (was 4px)
|
|
131
|
+
--osi-spacing-compact-sm: var(--osi-spacing-1_5); // 6px (was 8px)
|
|
132
|
+
--osi-spacing-compact-md: var(--osi-spacing-3); // 12px (was 16px)
|
|
133
|
+
--osi-spacing-compact-lg: var(--osi-spacing-4); // 16px (was 24px)
|
|
134
|
+
--osi-spacing-compact-xl: var(--osi-spacing-6); // 24px (was 32px)
|
|
135
|
+
--osi-spacing-compact-2xl: var(--osi-spacing-8); // 32px (was 48px)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// ============================================================================
|
|
139
|
+
// BORDERS & RADIUS
|
|
140
|
+
// ============================================================================
|
|
141
|
+
|
|
142
|
+
:root {
|
|
143
|
+
// Border Radius
|
|
144
|
+
--osi-radius-none: 0;
|
|
145
|
+
--osi-radius-sm: 0.125rem; // 2px
|
|
146
|
+
--osi-radius-default: 0.25rem; // 4px
|
|
147
|
+
--osi-radius-md: 0.375rem; // 6px
|
|
148
|
+
--osi-radius-lg: 0.5rem; // 8px
|
|
149
|
+
--osi-radius-xl: 0.75rem; // 12px
|
|
150
|
+
--osi-radius-2xl: 1rem; // 16px
|
|
151
|
+
--osi-radius-3xl: 1.5rem; // 24px
|
|
152
|
+
--osi-radius-full: 9999px;
|
|
153
|
+
|
|
154
|
+
// Border Widths
|
|
155
|
+
--osi-border-0: 0;
|
|
156
|
+
--osi-border-1: 1px;
|
|
157
|
+
--osi-border-2: 2px;
|
|
158
|
+
--osi-border-4: 4px;
|
|
159
|
+
--osi-border-8: 8px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// SHADOWS
|
|
164
|
+
// ============================================================================
|
|
165
|
+
|
|
166
|
+
:root {
|
|
167
|
+
--osi-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
168
|
+
--osi-shadow-default: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
169
|
+
--osi-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
170
|
+
--osi-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
171
|
+
--osi-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
172
|
+
--osi-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
173
|
+
--osi-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
|
|
174
|
+
--osi-shadow-none: 0 0 #0000;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// ANIMATIONS
|
|
179
|
+
// ============================================================================
|
|
180
|
+
|
|
181
|
+
:root {
|
|
182
|
+
// Durations
|
|
183
|
+
--osi-duration-75: 75ms;
|
|
184
|
+
--osi-duration-100: 100ms;
|
|
185
|
+
--osi-duration-150: 150ms;
|
|
186
|
+
--osi-duration-200: 200ms;
|
|
187
|
+
--osi-duration-300: 300ms;
|
|
188
|
+
--osi-duration-500: 500ms;
|
|
189
|
+
--osi-duration-700: 700ms;
|
|
190
|
+
--osi-duration-1000: 1000ms;
|
|
191
|
+
|
|
192
|
+
// Timing Functions
|
|
193
|
+
--osi-ease-linear: linear;
|
|
194
|
+
--osi-ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
195
|
+
--osi-ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
196
|
+
--osi-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
197
|
+
--osi-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Z-INDEX
|
|
202
|
+
// ============================================================================
|
|
203
|
+
|
|
204
|
+
:root {
|
|
205
|
+
--osi-z-0: 0;
|
|
206
|
+
--osi-z-10: 10;
|
|
207
|
+
--osi-z-20: 20;
|
|
208
|
+
--osi-z-30: 30;
|
|
209
|
+
--osi-z-40: 40;
|
|
210
|
+
--osi-z-50: 50;
|
|
211
|
+
--osi-z-auto: auto;
|
|
212
|
+
|
|
213
|
+
// Semantic z-index
|
|
214
|
+
--osi-z-dropdown: 1000;
|
|
215
|
+
--osi-z-sticky: 1020;
|
|
216
|
+
--osi-z-fixed: 1030;
|
|
217
|
+
--osi-z-modal-backdrop: 1040;
|
|
218
|
+
--osi-z-modal: 1050;
|
|
219
|
+
--osi-z-popover: 1060;
|
|
220
|
+
--osi-z-tooltip: 1070;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ============================================================================
|
|
224
|
+
// COMPONENT TOKENS
|
|
225
|
+
// ============================================================================
|
|
226
|
+
|
|
227
|
+
:root {
|
|
228
|
+
// Card tokens
|
|
229
|
+
--osi-card-bg: white;
|
|
230
|
+
--osi-card-border: var(--osi-neutral-200);
|
|
231
|
+
--osi-card-radius: var(--osi-radius-xl);
|
|
232
|
+
--osi-card-shadow: var(--osi-shadow-md);
|
|
233
|
+
--osi-card-padding: var(--osi-spacing-4);
|
|
234
|
+
|
|
235
|
+
// Section tokens
|
|
236
|
+
--osi-section-gap: var(--osi-spacing-3);
|
|
237
|
+
--osi-section-header-color: var(--osi-neutral-800);
|
|
238
|
+
--osi-section-content-color: var(--osi-neutral-600);
|
|
239
|
+
|
|
240
|
+
// Field tokens
|
|
241
|
+
--osi-field-label-color: var(--osi-neutral-500);
|
|
242
|
+
--osi-field-value-color: var(--osi-neutral-900);
|
|
243
|
+
--osi-field-gap: var(--osi-spacing-1);
|
|
244
|
+
|
|
245
|
+
// Grid tokens
|
|
246
|
+
--osi-grid-columns: 12;
|
|
247
|
+
--osi-grid-gap: var(--osi-spacing-4);
|
|
248
|
+
--osi-grid-min-column: 200px;
|
|
249
|
+
|
|
250
|
+
// Button tokens
|
|
251
|
+
--osi-btn-padding-x: var(--osi-spacing-4);
|
|
252
|
+
--osi-btn-padding-y: var(--osi-spacing-2);
|
|
253
|
+
--osi-btn-radius: var(--osi-radius-md);
|
|
254
|
+
--osi-btn-font-size: var(--osi-text-sm);
|
|
255
|
+
--osi-btn-font-weight: var(--osi-font-medium);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// ============================================================================
|
|
259
|
+
// THEME-SPECIFIC TOKENS (Light)
|
|
260
|
+
// ============================================================================
|
|
261
|
+
|
|
262
|
+
:root,
|
|
263
|
+
[data-theme="light"] {
|
|
264
|
+
--osi-bg-primary: white;
|
|
265
|
+
--osi-bg-secondary: var(--osi-neutral-50);
|
|
266
|
+
--osi-bg-tertiary: var(--osi-neutral-100);
|
|
267
|
+
|
|
268
|
+
--osi-text-primary: var(--osi-neutral-900);
|
|
269
|
+
--osi-text-secondary: var(--osi-neutral-600);
|
|
270
|
+
--osi-text-tertiary: var(--osi-neutral-400);
|
|
271
|
+
--osi-text-inverse: white;
|
|
272
|
+
|
|
273
|
+
--osi-border-default: var(--osi-neutral-200);
|
|
274
|
+
--osi-border-strong: var(--osi-neutral-300);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// ============================================================================
|
|
278
|
+
// THEME-SPECIFIC TOKENS (Dark)
|
|
279
|
+
// ============================================================================
|
|
280
|
+
|
|
281
|
+
[data-theme="dark"] {
|
|
282
|
+
--osi-bg-primary: var(--osi-neutral-900);
|
|
283
|
+
--osi-bg-secondary: var(--osi-neutral-800);
|
|
284
|
+
--osi-bg-tertiary: var(--osi-neutral-700);
|
|
285
|
+
|
|
286
|
+
--osi-text-primary: var(--osi-neutral-50);
|
|
287
|
+
--osi-text-secondary: var(--osi-neutral-300);
|
|
288
|
+
--osi-text-tertiary: var(--osi-neutral-500);
|
|
289
|
+
--osi-text-inverse: var(--osi-neutral-900);
|
|
290
|
+
|
|
291
|
+
--osi-border-default: var(--osi-neutral-700);
|
|
292
|
+
--osi-border-strong: var(--osi-neutral-600);
|
|
293
|
+
|
|
294
|
+
// Override card tokens for dark
|
|
295
|
+
--osi-card-bg: var(--osi-neutral-800);
|
|
296
|
+
--osi-card-border: var(--osi-neutral-700);
|
|
297
|
+
|
|
298
|
+
// Override section tokens
|
|
299
|
+
--osi-section-header-color: var(--osi-neutral-100);
|
|
300
|
+
--osi-section-content-color: var(--osi-neutral-300);
|
|
301
|
+
|
|
302
|
+
// Override field tokens
|
|
303
|
+
--osi-field-label-color: var(--osi-neutral-400);
|
|
304
|
+
--osi-field-value-color: var(--osi-neutral-100);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// ============================================================================
|
|
308
|
+
// PRINT STYLES
|
|
309
|
+
// ============================================================================
|
|
310
|
+
|
|
311
|
+
@media print {
|
|
312
|
+
:root {
|
|
313
|
+
--osi-card-shadow: none;
|
|
314
|
+
--osi-card-border: var(--osi-neutral-300);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// ============================================================================
|
|
319
|
+
// REDUCED MOTION
|
|
320
|
+
// ============================================================================
|
|
321
|
+
|
|
322
|
+
@media (prefers-reduced-motion: reduce) {
|
|
323
|
+
:root {
|
|
324
|
+
--osi-duration-75: 0ms;
|
|
325
|
+
--osi-duration-100: 0ms;
|
|
326
|
+
--osi-duration-150: 0ms;
|
|
327
|
+
--osi-duration-200: 0ms;
|
|
328
|
+
--osi-duration-300: 0ms;
|
|
329
|
+
--osi-duration-500: 0ms;
|
|
330
|
+
--osi-duration-700: 0ms;
|
|
331
|
+
--osi-duration-1000: 0ms;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/* ===================================================================
|
|
2
|
+
OSI CARDS STYLES - Scoped Integration Entry Point
|
|
3
|
+
|
|
4
|
+
Wraps all styles in .osi-cards-container to prevent CSS leakage.
|
|
5
|
+
Uses same CSS variables as demo app, just scoped to container.
|
|
6
|
+
|
|
7
|
+
CSS Layer Strategy:
|
|
8
|
+
- All library styles are in the 'osi-cards' layer
|
|
9
|
+
- Consumer styles outside this layer have higher priority
|
|
10
|
+
- Easy to override: just write your CSS normally, no !important needed
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
1. Import this file in your styles or angular.json
|
|
14
|
+
2. Wrap your OSI Cards components in <div class="osi-cards-container">
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
<div class="osi-cards-container" data-theme="day">
|
|
18
|
+
<app-ai-card-renderer [cardConfig]="card"></app-ai-card-renderer>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
Overriding styles:
|
|
22
|
+
// Your styles (outside @layer) automatically override library styles
|
|
23
|
+
.osi-cards-container .ai-card-title {
|
|
24
|
+
font-size: 2rem; // This will override library default
|
|
25
|
+
}
|
|
26
|
+
=================================================================== */
|
|
27
|
+
|
|
28
|
+
/* Declare the layer first for proper cascade ordering */
|
|
29
|
+
@layer osi-cards;
|
|
30
|
+
|
|
31
|
+
/* All library styles go in the osi-cards layer */
|
|
32
|
+
@layer osi-cards {
|
|
33
|
+
.osi-cards-container {
|
|
34
|
+
// Container base styles - transparent with 8px padding
|
|
35
|
+
display: flex;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
align-items: flex-start;
|
|
38
|
+
padding: 8px;
|
|
39
|
+
background: transparent !important;
|
|
40
|
+
background-color: transparent !important;
|
|
41
|
+
|
|
42
|
+
// Preserve 3D transforms for tilt effects
|
|
43
|
+
perspective: 1200px;
|
|
44
|
+
transform-style: preserve-3d;
|
|
45
|
+
|
|
46
|
+
// Responsive: reduce padding on mobile
|
|
47
|
+
@media (max-width: 480px) {
|
|
48
|
+
padding: 4px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Bootstrap isolation - must come first to reset external Bootstrap variables
|
|
52
|
+
@import "core/bootstrap-reset";
|
|
53
|
+
|
|
54
|
+
// Scoped variables (applies tokens to & selector)
|
|
55
|
+
@import "core/variables-unified";
|
|
56
|
+
|
|
57
|
+
// Core styles (scoped versions where needed)
|
|
58
|
+
@import "core/mixins";
|
|
59
|
+
@import "core/surface-layers";
|
|
60
|
+
@import "core/global-unified";
|
|
61
|
+
@import "core/utilities";
|
|
62
|
+
@import "core/animations";
|
|
63
|
+
|
|
64
|
+
// Layout styles
|
|
65
|
+
@import "layout/tilt";
|
|
66
|
+
@import "layout/masonry";
|
|
67
|
+
@import "layout/feature-grid";
|
|
68
|
+
|
|
69
|
+
// Streaming effects (must come after animations)
|
|
70
|
+
@import "components/streaming-effects";
|
|
71
|
+
|
|
72
|
+
// Hero card and feature card styles
|
|
73
|
+
@import "components/hero-card";
|
|
74
|
+
|
|
75
|
+
// Component styles (SAME files as demo app)
|
|
76
|
+
@import "components/cards/ai-card";
|
|
77
|
+
|
|
78
|
+
// All section styles (consolidated)
|
|
79
|
+
@import "components/sections/sections-all";
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* ===================================================================
|
|
2
|
+
OSI CARDS STYLES - Demo App Entry Point
|
|
3
|
+
|
|
4
|
+
For use in the demo/documentation app. Applies styles to :root.
|
|
5
|
+
Imports shared component bundle after setting up variables.
|
|
6
|
+
|
|
7
|
+
CSS Layer Strategy:
|
|
8
|
+
- All library styles are in the 'osi-cards' layer
|
|
9
|
+
- Consumer styles outside this layer have higher priority
|
|
10
|
+
|
|
11
|
+
Note: Using @import inside @layer as @use cannot be used in @layer blocks.
|
|
12
|
+
The Sass @import deprecation warnings can be safely ignored until
|
|
13
|
+
Dart Sass 3.0.0 when migration will be required.
|
|
14
|
+
=================================================================== */
|
|
15
|
+
|
|
16
|
+
/* Declare the layer first for proper cascade ordering */
|
|
17
|
+
@layer osi-cards;
|
|
18
|
+
|
|
19
|
+
/* All library styles go in the osi-cards layer */
|
|
20
|
+
@layer osi-cards {
|
|
21
|
+
// Core variables (applies to :root)
|
|
22
|
+
@import "core/variables";
|
|
23
|
+
|
|
24
|
+
// Shared component styles
|
|
25
|
+
@import "components";
|
|
26
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// AI CARD COMPONENT BUNDLE
|
|
3
|
+
// ============================================
|
|
4
|
+
//
|
|
5
|
+
// Self-contained bundle for the AI Card Renderer component.
|
|
6
|
+
// Includes all styles needed to render AI cards with any section type.
|
|
7
|
+
//
|
|
8
|
+
// Usage in Shadow DOM component:
|
|
9
|
+
// @use 'osi-cards-lib/styles/bundles/ai-card';
|
|
10
|
+
//
|
|
11
|
+
// ============================================
|
|
12
|
+
|
|
13
|
+
// 1. Master tokens (single source of truth)
|
|
14
|
+
@use "../tokens/master" as *;
|
|
15
|
+
|
|
16
|
+
// 2. Shadow DOM reset (full isolation)
|
|
17
|
+
@use "../reset/shadow-reset";
|
|
18
|
+
|
|
19
|
+
// 3. Generate CSS custom properties
|
|
20
|
+
// Use "demo" mode to match demo app appearance exactly
|
|
21
|
+
:host {
|
|
22
|
+
@include osi-theme-base("demo", true);
|
|
23
|
+
@include osi-tokens("demo", true);
|
|
24
|
+
|
|
25
|
+
// Block display - let content determine height
|
|
26
|
+
display: block;
|
|
27
|
+
width: 100%;
|
|
28
|
+
min-height: 0; // Allow flex children to shrink
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Primary: Use :host([data-theme]) for explicit Shadow DOM scope (most reliable)
|
|
32
|
+
// Fallback: :host-context for cases where parent sets data-theme
|
|
33
|
+
:host([data-theme="night"]) {
|
|
34
|
+
@include osi-theme-dark("demo", true);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
:host([data-theme="day"]) {
|
|
38
|
+
@include osi-theme-light("demo", true);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Fallback: Support parent context (for backward compatibility)
|
|
42
|
+
// Note: Safari may have inconsistent :host-context behavior, so :host([data-theme]) is preferred
|
|
43
|
+
:host-context([data-theme="night"]) {
|
|
44
|
+
@include osi-theme-dark("demo", true);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:host-context([data-theme="day"]) {
|
|
48
|
+
@include osi-theme-light("demo", true);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 4. Core styles required for AI card
|
|
52
|
+
@import "../core/mixins";
|
|
53
|
+
@import "../core/surface-layers";
|
|
54
|
+
@import "../core/utilities";
|
|
55
|
+
|
|
56
|
+
// 4a. Animations (keyframes + utility classes)
|
|
57
|
+
@import "../core/animations";
|
|
58
|
+
|
|
59
|
+
// 5. Layout
|
|
60
|
+
@import "../layout/tilt";
|
|
61
|
+
@import "../layout/masonry";
|
|
62
|
+
@import "../layout/feature-grid";
|
|
63
|
+
|
|
64
|
+
// 5a. Hero card styles
|
|
65
|
+
@import "../components/hero-card";
|
|
66
|
+
|
|
67
|
+
// 5b. Streaming effects
|
|
68
|
+
@import "../components/streaming-effects";
|
|
69
|
+
|
|
70
|
+
// 5c. Component styles for ViewEncapsulation.None components
|
|
71
|
+
// (masonry-grid, section-renderer, card-actions, card-streaming-indicator, etc.)
|
|
72
|
+
@import "../components/_component-styles";
|
|
73
|
+
|
|
74
|
+
// 6. AI Card specific styles
|
|
75
|
+
@import "../components/cards/ai-card";
|
|
76
|
+
@import "../components/_empty-state";
|
|
77
|
+
|
|
78
|
+
// 6a. Utility classes (w-full, h-full, flex-1, min-h-0, etc.)
|
|
79
|
+
@import "../components/sections/_utility-classes";
|
|
80
|
+
|
|
81
|
+
// 7. Section Styles (consolidated)
|
|
82
|
+
// Design system + sections base + section shell + all section types
|
|
83
|
+
@import "../components/sections/sections-all";
|
|
84
|
+
|
|
85
|
+
// 7a. Additional design tokens for Shadow DOM
|
|
86
|
+
// Convert :root selectors to :host for Shadow DOM compatibility
|
|
87
|
+
:host {
|
|
88
|
+
// Spacing scale
|
|
89
|
+
--spacing-none: 0;
|
|
90
|
+
--spacing-xs: 4px;
|
|
91
|
+
--spacing-sm: 8px;
|
|
92
|
+
--spacing-md: 12px;
|
|
93
|
+
--spacing-base: 16px;
|
|
94
|
+
--spacing-lg: 20px;
|
|
95
|
+
--spacing-xl: 28px;
|
|
96
|
+
--spacing-2xl: 40px;
|
|
97
|
+
--spacing-3xl: 56px;
|
|
98
|
+
|
|
99
|
+
// Compact mode variations
|
|
100
|
+
--spacing-compact-xs: 3px;
|
|
101
|
+
--spacing-compact-sm: 6px;
|
|
102
|
+
--spacing-compact-md: 9px;
|
|
103
|
+
--spacing-compact-base: 12px;
|
|
104
|
+
--spacing-compact-lg: 16px;
|
|
105
|
+
|
|
106
|
+
// Section-specific sizing
|
|
107
|
+
--section-card-min-height: 110px;
|
|
108
|
+
--section-card-compact-height: 90px;
|
|
109
|
+
--section-header-gap: var(--spacing-md);
|
|
110
|
+
--section-content-gap: var(--spacing-sm);
|
|
111
|
+
--section-card-gap: var(--spacing-md);
|
|
112
|
+
--section-card-padding: var(--spacing-md);
|
|
113
|
+
|
|
114
|
+
// Typography
|
|
115
|
+
--text-md: 0.875rem;
|
|
116
|
+
--font-light: 300;
|
|
117
|
+
--font-normal: 400;
|
|
118
|
+
--font-medium: 500;
|
|
119
|
+
--font-semibold: 600;
|
|
120
|
+
--font-bold: 700;
|
|
121
|
+
--font-extrabold: 800;
|
|
122
|
+
--leading-tight: 1.2;
|
|
123
|
+
--leading-snug: 1.3;
|
|
124
|
+
--leading-normal: 1.4;
|
|
125
|
+
--leading-relaxed: 1.5;
|
|
126
|
+
--leading-loose: 1.75;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// 8. Component-specific optimizations (from demo app)
|
|
130
|
+
// Register CSS custom properties for browser-native interpolation
|
|
131
|
+
@supports (background: paint(id)) {
|
|
132
|
+
@property --tilt-x {
|
|
133
|
+
syntax: "<angle>";
|
|
134
|
+
initial-value: 0deg;
|
|
135
|
+
inherits: false;
|
|
136
|
+
}
|
|
137
|
+
@property --tilt-y {
|
|
138
|
+
syntax: "<angle>";
|
|
139
|
+
initial-value: 0deg;
|
|
140
|
+
inherits: false;
|
|
141
|
+
}
|
|
142
|
+
@property --glow-blur {
|
|
143
|
+
syntax: "<length>";
|
|
144
|
+
initial-value: 8px;
|
|
145
|
+
inherits: false;
|
|
146
|
+
}
|
|
147
|
+
@property --glow-color {
|
|
148
|
+
syntax: "<color>";
|
|
149
|
+
initial-value: rgba(255, 121, 0, 0.225);
|
|
150
|
+
inherits: false;
|
|
151
|
+
}
|
|
152
|
+
@property --reflection-opacity {
|
|
153
|
+
syntax: "<number>";
|
|
154
|
+
initial-value: 0;
|
|
155
|
+
inherits: false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Card container wrapper - CSS containment for performance
|
|
160
|
+
.card-container-wrapper {
|
|
161
|
+
contain: layout style;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Note: Tilt and glow container styles are already included from _tilt.scss import above
|
|
165
|
+
// The tilt effect should work automatically via the tilt-container class
|
|
166
|
+
|
|
167
|
+
// Card surface styles - matching demo app exactly
|
|
168
|
+
// These ensure the card has proper background and border in Shadow DOM
|
|
169
|
+
// Theme-aware: uses CSS variables but with fallbacks for night theme
|
|
170
|
+
.ai-card-surface {
|
|
171
|
+
// Use theme variables, but ensure they're applied with proper specificity
|
|
172
|
+
// The theme mixins set these, but we need to ensure they're not overridden
|
|
173
|
+
border: var(--osi-card-border, 1px solid rgba(255, 255, 255, 0.08)) !important;
|
|
174
|
+
background: var(--osi-card-background, rgba(20, 20, 20, 0.6)) !important;
|
|
175
|
+
backdrop-filter: var(--osi-card-backdrop-filter, blur(12px)) !important;
|
|
176
|
+
-webkit-backdrop-filter: var(--osi-card-backdrop-filter, blur(12px)) !important;
|
|
177
|
+
box-shadow: var(--osi-card-shadow, 0 4px 24px -1px rgba(0, 0, 0, 0.2)) !important;
|
|
178
|
+
transition: var(--osi-card-transition-border, all 0.4s cubic-bezier(0.4, 0, 0.2, 1)) !important;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.ai-card-surface:hover {
|
|
182
|
+
border: var(--osi-card-border-hover, 1px solid rgba(255, 121, 0, 0.5)) !important;
|
|
183
|
+
background: var(--osi-card-background-hover, rgba(30, 30, 30, 0.8)) !important;
|
|
184
|
+
box-shadow: var(--osi-card-shadow-hover, 0 20px 40px -5px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 121, 0, 0.2)) !important;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Section highlight animation for URL fragment scrolling
|
|
188
|
+
.section-highlight {
|
|
189
|
+
animation: section-pulse 2s ease-out;
|
|
190
|
+
position: relative;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.section-highlight::after {
|
|
194
|
+
content: "";
|
|
195
|
+
position: absolute;
|
|
196
|
+
inset: -4px;
|
|
197
|
+
border: 2px solid rgba(255, 121, 0, 0.6);
|
|
198
|
+
border-radius: 14px;
|
|
199
|
+
pointer-events: none;
|
|
200
|
+
animation: section-border-fade 2s ease-out forwards;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@keyframes section-pulse {
|
|
204
|
+
0%,
|
|
205
|
+
100% {
|
|
206
|
+
transform: scale(1);
|
|
207
|
+
}
|
|
208
|
+
50% {
|
|
209
|
+
transform: scale(1.01);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@keyframes section-border-fade {
|
|
214
|
+
0% {
|
|
215
|
+
opacity: 1;
|
|
216
|
+
box-shadow: 0 0 20px rgba(255, 121, 0, 0.4);
|
|
217
|
+
}
|
|
218
|
+
100% {
|
|
219
|
+
opacity: 0;
|
|
220
|
+
box-shadow: 0 0 0 rgba(255, 121, 0, 0);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// 10. Action buttons and footer (enforced styles for Shadow DOM)
|
|
225
|
+
@import "../components/card-actions";
|
|
226
|
+
@import "../components/card-footer";
|
|
227
|
+
|
|
228
|
+
// 11. Accessibility support
|
|
229
|
+
@media (prefers-reduced-motion: reduce) {
|
|
230
|
+
:host {
|
|
231
|
+
@include osi-tokens-reduced-motion();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
@media (prefers-contrast: high) {
|
|
236
|
+
:host {
|
|
237
|
+
@include osi-tokens-high-contrast();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
@media (forced-colors: active) {
|
|
242
|
+
:host {
|
|
243
|
+
@include osi-tokens-forced-colors();
|
|
244
|
+
}
|
|
245
|
+
}
|