soltana-ui 0.1.0

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 (104) hide show
  1. package/README.md +158 -0
  2. package/dist/config/index.d.ts +3 -0
  3. package/dist/config/index.js +7 -0
  4. package/dist/config/register.d.ts +27 -0
  5. package/dist/config/stylesheet.d.ts +13 -0
  6. package/dist/config/types.d.ts +177 -0
  7. package/dist/config/types.js +7 -0
  8. package/dist/config/validation.d.ts +29 -0
  9. package/dist/config/validation.js +59 -0
  10. package/dist/enhancers/accordion.d.ts +19 -0
  11. package/dist/enhancers/carousel.d.ts +21 -0
  12. package/dist/enhancers/collapsible.d.ts +14 -0
  13. package/dist/enhancers/color-picker.d.ts +20 -0
  14. package/dist/enhancers/combobox.d.ts +17 -0
  15. package/dist/enhancers/context-menu.d.ts +19 -0
  16. package/dist/enhancers/date-picker.d.ts +8 -0
  17. package/dist/enhancers/drawer.d.ts +11 -0
  18. package/dist/enhancers/dropdown.d.ts +17 -0
  19. package/dist/enhancers/hover-card.d.ts +15 -0
  20. package/dist/enhancers/index.d.ts +42 -0
  21. package/dist/enhancers/modal.d.ts +16 -0
  22. package/dist/enhancers/scroll-area.d.ts +14 -0
  23. package/dist/enhancers/tabs.d.ts +26 -0
  24. package/dist/enhancers/test-helpers.d.ts +20 -0
  25. package/dist/enhancers/test-utils.d.ts +10 -0
  26. package/dist/enhancers/toast.d.ts +24 -0
  27. package/dist/enhancers/tooltip.d.ts +15 -0
  28. package/dist/enhancers/tree.d.ts +24 -0
  29. package/dist/enhancers/utils/click-away.d.ts +7 -0
  30. package/dist/enhancers/utils/create-overlay-enhancer.d.ts +14 -0
  31. package/dist/enhancers/utils/focus-trap.d.ts +9 -0
  32. package/dist/enhancers/utils/generate-id.d.ts +6 -0
  33. package/dist/enhancers/utils/keyboard-nav.d.ts +21 -0
  34. package/dist/enhancers/utils/position.d.ts +30 -0
  35. package/dist/fonts/index.d.ts +20 -0
  36. package/dist/index.d.ts +9 -0
  37. package/dist/init.d.ts +16 -0
  38. package/dist/plugins/index.d.ts +2 -0
  39. package/dist/plugins/index.js +1 -0
  40. package/dist/plugins/postcss-soltana-treeshake.d.ts +10 -0
  41. package/dist/plugins/postcss-soltana-treeshake.js +149 -0
  42. package/dist/plugins/types.d.ts +9 -0
  43. package/dist/plugins/types.js +4 -0
  44. package/dist/soltana-ui.css +1 -0
  45. package/dist/soltana-ui.js +1702 -0
  46. package/dist/soltana-ui.umd.cjs +1 -0
  47. package/package.json +90 -0
  48. package/src/styles/_variables.scss +348 -0
  49. package/src/styles/base/_accessibility.scss +146 -0
  50. package/src/styles/base/_index.scss +12 -0
  51. package/src/styles/base/_register.scss +84 -0
  52. package/src/styles/base/_relief-system.scss +53 -0
  53. package/src/styles/base/_scrollbar.scss +40 -0
  54. package/src/styles/base/_transitions.scss +75 -0
  55. package/src/styles/base/_typography.scss +442 -0
  56. package/src/styles/components/_alert-dialogs.scss +75 -0
  57. package/src/styles/components/_badges.scss +215 -0
  58. package/src/styles/components/_buttons.scss +293 -0
  59. package/src/styles/components/_callouts.scss +99 -0
  60. package/src/styles/components/_cards.scss +97 -0
  61. package/src/styles/components/_carousels.scss +108 -0
  62. package/src/styles/components/_closes.scss +63 -0
  63. package/src/styles/components/_code.scss +75 -0
  64. package/src/styles/components/_collapsibles.scss +61 -0
  65. package/src/styles/components/_color-pickers.scss +211 -0
  66. package/src/styles/components/_comboboxes.scss +88 -0
  67. package/src/styles/components/_context-menus.scss +82 -0
  68. package/src/styles/components/_date-pickers.scss +165 -0
  69. package/src/styles/components/_feedback.scss +354 -0
  70. package/src/styles/components/_figures.scss +52 -0
  71. package/src/styles/components/_heros.scss +83 -0
  72. package/src/styles/components/_hover-cards.scss +55 -0
  73. package/src/styles/components/_images.scss +71 -0
  74. package/src/styles/components/_index.scss +41 -0
  75. package/src/styles/components/_indicators.scss +403 -0
  76. package/src/styles/components/_inputs.scss +409 -0
  77. package/src/styles/components/_layouts.scss +139 -0
  78. package/src/styles/components/_lists.scss +135 -0
  79. package/src/styles/components/_menus.scss +195 -0
  80. package/src/styles/components/_navigation.scss +325 -0
  81. package/src/styles/components/_overlays.scss +233 -0
  82. package/src/styles/components/_scroll-areas.scss +53 -0
  83. package/src/styles/components/_segmented-controls.scss +75 -0
  84. package/src/styles/components/_tables.scss +137 -0
  85. package/src/styles/components/_toasts.scss +111 -0
  86. package/src/styles/components/_toggles.scss +57 -0
  87. package/src/styles/components/_trees.scss +123 -0
  88. package/src/styles/decorative/_classical.scss +196 -0
  89. package/src/styles/decorative/_index.scss +7 -0
  90. package/src/styles/finishes/_index.scss +55 -0
  91. package/src/styles/index.scss +30 -0
  92. package/src/styles/reliefs/_index.scss +66 -0
  93. package/src/styles/reliefs/_neumorphic-tables.scss +92 -0
  94. package/src/styles/themes/_dark.scss +130 -0
  95. package/src/styles/themes/_index.scss +3 -0
  96. package/src/styles/themes/_light.scss +122 -0
  97. package/src/styles/themes/_sepia.scss +121 -0
  98. package/src/styles/utilities/_index.scss +13 -0
  99. package/src/styles/utilities/_layout.scss +100 -0
  100. package/src/styles/utilities/_mixins.scss +410 -0
  101. package/src/styles/utilities/_responsive.scss +46 -0
  102. package/src/styles/utilities/_sizing.scss +62 -0
  103. package/src/styles/utilities/_spacing.scss +12 -0
  104. package/src/styles/utilities/_visual.scss +436 -0
@@ -0,0 +1,354 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Feedback Components
3
+ // ---------------------------------------------------------------------------
4
+ // Alerts, tooltips, progress bars, and skeleton loaders.
5
+ // Uses --relief-* variables for automatic relief switching.
6
+ // ---------------------------------------------------------------------------
7
+
8
+ @use 'sass:list';
9
+ @use '../base/transitions' as *;
10
+
11
+ // ============================================================================
12
+ // ALERTS
13
+ // ============================================================================
14
+
15
+ .alert {
16
+ display: flex;
17
+ align-items: flex-start;
18
+ gap: 0.75rem;
19
+ padding: 1rem 1.25rem;
20
+ border-radius: var(--radius-xl);
21
+ font-size: var(--text-sm);
22
+ line-height: 1.5;
23
+ border-left: 3px solid transparent;
24
+ @include transition-feedback;
25
+ }
26
+
27
+ @each $type in (success, warning, error, info) {
28
+ .alert-#{$type} {
29
+ background-color: var(--color-#{$type}-subtle);
30
+ color: var(--color-#{$type}-text);
31
+ border-left-color: var(--color-#{$type});
32
+ }
33
+ }
34
+
35
+ .alert-dismissible {
36
+ position: relative;
37
+ padding-right: 3rem;
38
+
39
+ .close {
40
+ position: absolute;
41
+ top: 0.75rem;
42
+ right: 0.75rem;
43
+ }
44
+ }
45
+
46
+ // ============================================================================
47
+ // TOOLTIP
48
+ // ============================================================================
49
+
50
+ // Shared visual properties for both CSS-only and JS-enhanced tooltips.
51
+ %tooltip-visual {
52
+ padding: 0.375rem 0.75rem;
53
+ font-size: var(--text-xs);
54
+ font-weight: var(--font-medium);
55
+ white-space: nowrap;
56
+ color: var(--tooltip-text);
57
+ background-color: var(--tooltip-bg);
58
+ border-radius: var(--radius-lg);
59
+ border: 1px solid var(--border-subtle);
60
+ box-shadow: var(--relief-shadow-sm);
61
+ }
62
+
63
+ .tooltip {
64
+ position: relative;
65
+
66
+ &::after {
67
+ content: attr(data-tooltip);
68
+ position: absolute;
69
+ bottom: calc(100% + 8px);
70
+ left: 50%;
71
+ transform: translateX(-50%);
72
+ @extend %tooltip-visual;
73
+ opacity: 0;
74
+ pointer-events: none;
75
+ transition: opacity var(--transition-normal) var(--easing-in-out);
76
+ z-index: var(--z-tooltip);
77
+ }
78
+
79
+ &:hover::after {
80
+ opacity: 1;
81
+ }
82
+ }
83
+
84
+ // ---- Tooltip position variants ----
85
+ // Default (.tooltip) positions above. These variants override placement.
86
+
87
+ .tooltip-bottom::after {
88
+ bottom: auto;
89
+ top: calc(100% + 8px);
90
+ }
91
+
92
+ .tooltip-left::after {
93
+ bottom: auto;
94
+ top: 50%;
95
+ left: auto;
96
+ right: calc(100% + 8px);
97
+ transform: translateY(-50%);
98
+ }
99
+
100
+ .tooltip-right::after {
101
+ bottom: auto;
102
+ top: 50%;
103
+ left: calc(100% + 8px);
104
+ transform: translateY(-50%);
105
+ }
106
+
107
+ // JS-enhanced tooltips created by initTooltips(). Distinguished from CSS-only
108
+ // `::after` tooltips above via the [role="tooltip"] attribute selector.
109
+ .tooltip[role='tooltip'] {
110
+ position: fixed;
111
+ top: var(--tooltip-top, 0);
112
+ left: var(--tooltip-left, 0);
113
+ z-index: var(--z-tooltip);
114
+ pointer-events: none;
115
+ opacity: 0;
116
+ transition: opacity var(--transition-normal) var(--easing-in-out);
117
+ @extend %tooltip-visual;
118
+
119
+ &.active {
120
+ opacity: 1;
121
+ }
122
+ }
123
+
124
+ // ============================================================================
125
+ // PROGRESS BAR
126
+ // ============================================================================
127
+
128
+ .progress {
129
+ width: 100%;
130
+ height: 0.5rem;
131
+ background-color: var(--surface-3);
132
+ border-radius: var(--radius-full);
133
+ overflow: hidden;
134
+ box-shadow: var(--relief-shadow-inset);
135
+ @include transition-feedback;
136
+ }
137
+
138
+ .progress-bar {
139
+ height: 100%;
140
+ background: linear-gradient(
141
+ 90deg,
142
+ var(--accent-primary-active),
143
+ var(--accent-primary),
144
+ var(--accent-primary-hover)
145
+ );
146
+ border-radius: var(--radius-full);
147
+ transition: width var(--transition-slower) var(--easing-in-out);
148
+ position: relative;
149
+
150
+ &::after {
151
+ content: '';
152
+ position: absolute;
153
+ top: 0;
154
+ left: 0;
155
+ right: 0;
156
+ height: 50%;
157
+ background: linear-gradient(180deg, rgb(var(--highlight-color) / 15%), transparent);
158
+ }
159
+ }
160
+
161
+ $progress-variants: (
162
+ success: (
163
+ color-mix(in srgb, var(--color-success), black 35%),
164
+ var(--color-success),
165
+ ),
166
+ warning: (
167
+ color-mix(in srgb, var(--color-warning), black 35%),
168
+ var(--color-warning),
169
+ ),
170
+ error: (
171
+ color-mix(in srgb, var(--color-error), black 35%),
172
+ var(--color-error),
173
+ ),
174
+ );
175
+
176
+ @each $name, $colors in $progress-variants {
177
+ .progress-#{$name} .progress-bar {
178
+ background: linear-gradient(90deg, list.nth($colors, 1), list.nth($colors, 2));
179
+ }
180
+ }
181
+
182
+ // ============================================================================
183
+ // SKELETON
184
+ // ============================================================================
185
+
186
+ @keyframes skeleton-pulse {
187
+ 0%,
188
+ 100% {
189
+ opacity: 1;
190
+ }
191
+
192
+ 50% {
193
+ opacity: 0.4;
194
+ }
195
+ }
196
+
197
+ @mixin skeleton-base {
198
+ background-color: var(--surface-3);
199
+ border-radius: var(--radius-md);
200
+ animation: skeleton-pulse 2s var(--easing-in-out-soft) infinite;
201
+ }
202
+
203
+ .skeleton {
204
+ @include skeleton-base;
205
+ }
206
+
207
+ .skeleton-text {
208
+ @include skeleton-base;
209
+ height: 1rem;
210
+ margin-bottom: 0.5rem;
211
+ }
212
+
213
+ .skeleton-circle {
214
+ @include skeleton-base;
215
+ border-radius: var(--radius-full);
216
+ }
217
+
218
+ // ============================================================================
219
+ // SPINNER
220
+ // ============================================================================
221
+
222
+ @keyframes spinner-rotate {
223
+ to {
224
+ transform: rotate(360deg);
225
+ }
226
+ }
227
+
228
+ .spinner {
229
+ display: inline-block;
230
+ width: 1.5rem;
231
+ height: 1.5rem;
232
+ border: 2px solid var(--border-default);
233
+ border-top-color: var(--accent-primary);
234
+ border-radius: var(--radius-full);
235
+ animation: spinner-rotate 0.6s linear infinite;
236
+ }
237
+
238
+ .spinner-sm {
239
+ width: 1rem;
240
+ height: 1rem;
241
+ border-width: 1.5px;
242
+ }
243
+
244
+ .spinner-lg {
245
+ width: 2.5rem;
246
+ height: 2.5rem;
247
+ border-width: 3px;
248
+ }
249
+
250
+ // Dots variant
251
+ @keyframes spinner-dots-pulse {
252
+ 0%,
253
+ 80%,
254
+ 100% {
255
+ transform: scale(0);
256
+ opacity: 0.5;
257
+ }
258
+
259
+ 40% {
260
+ transform: scale(1);
261
+ opacity: 1;
262
+ }
263
+ }
264
+
265
+ .spinner-dots {
266
+ display: inline-flex;
267
+ gap: 0.25rem;
268
+ align-items: center;
269
+
270
+ &::before,
271
+ &::after,
272
+ span {
273
+ content: '';
274
+ display: block;
275
+ width: 0.5rem;
276
+ height: 0.5rem;
277
+ border-radius: var(--radius-full);
278
+ background-color: var(--accent-primary);
279
+ animation: spinner-dots-pulse 1.4s var(--easing-in-out) infinite both;
280
+ }
281
+
282
+ &::before {
283
+ animation-delay: -0.32s;
284
+ }
285
+
286
+ span {
287
+ animation-delay: -0.16s;
288
+ }
289
+ }
290
+
291
+ // ============================================================================
292
+ // RADIAL PROGRESS
293
+ // ============================================================================
294
+
295
+ .radial-progress {
296
+ --progress: 0;
297
+ --size: 4rem;
298
+ --track-width: 4px;
299
+
300
+ position: relative;
301
+ display: inline-flex;
302
+ align-items: center;
303
+ justify-content: center;
304
+ width: var(--size);
305
+ height: var(--size);
306
+ border-radius: var(--radius-full);
307
+ background: conic-gradient(
308
+ var(--accent-primary) calc(var(--progress) * 1%),
309
+ var(--surface-3) calc(var(--progress) * 1%)
310
+ );
311
+
312
+ &::before {
313
+ content: '';
314
+ position: absolute;
315
+ inset: var(--track-width);
316
+ border-radius: var(--radius-full);
317
+ background-color: var(--surface-bg);
318
+ }
319
+
320
+ // Content (percentage text) sits above the mask
321
+ > * {
322
+ position: relative;
323
+ font-size: var(--text-xs);
324
+ font-weight: var(--font-semibold);
325
+ color: var(--text-primary);
326
+ }
327
+ }
328
+
329
+ .radial-progress-sm {
330
+ --size: 2.5rem;
331
+ --track-width: 3px;
332
+
333
+ > * {
334
+ font-size: var(--text-2xs);
335
+ }
336
+ }
337
+
338
+ .radial-progress-lg {
339
+ --size: 6rem;
340
+ --track-width: 6px;
341
+
342
+ > * {
343
+ font-size: var(--text-sm);
344
+ }
345
+ }
346
+
347
+ @each $type in (success, warning, error, info) {
348
+ .radial-progress-#{$type} {
349
+ background: conic-gradient(
350
+ var(--color-#{$type}) calc(var(--progress) * 1%),
351
+ var(--surface-3) calc(var(--progress) * 1%)
352
+ );
353
+ }
354
+ }
@@ -0,0 +1,52 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Figure Components
3
+ // ---------------------------------------------------------------------------
4
+ // Responsive image containers with captions and card-style variant.
5
+ // ---------------------------------------------------------------------------
6
+
7
+ @use '../base/register' as *;
8
+ @use '../base/transitions' as *;
9
+
10
+ // ============================================================================
11
+ // FIGURE
12
+ // ============================================================================
13
+
14
+ .figure {
15
+ display: inline-block;
16
+ margin: 0;
17
+ }
18
+
19
+ .figure-img {
20
+ display: block;
21
+ max-width: 100%;
22
+ height: auto;
23
+ border-radius: var(--radius-md);
24
+ }
25
+
26
+ .figure-caption {
27
+ margin-top: 0.5rem;
28
+ font-size: var(--text-sm);
29
+ color: var(--text-secondary);
30
+ line-height: 1.5;
31
+ }
32
+
33
+ .figure-caption-center {
34
+ text-align: center;
35
+ }
36
+
37
+ // Card-style figure with relief/finish integration
38
+ .figure-card {
39
+ padding: 0.75rem;
40
+ border-radius: var(--radius-lg);
41
+ @include relief-container;
42
+ @include finish-surface;
43
+ @include transition-interactive(var(--transition-normal));
44
+
45
+ .figure-img {
46
+ border-radius: var(--radius-md);
47
+ }
48
+
49
+ .figure-caption {
50
+ padding: 0.25rem 0.25rem 0;
51
+ }
52
+ }
@@ -0,0 +1,83 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Hero Components
3
+ // ---------------------------------------------------------------------------
4
+ // Full-width or contained hero sections with title, subtitle, and actions.
5
+ // ---------------------------------------------------------------------------
6
+
7
+ @use '../base/register' as *;
8
+ @use '../base/transitions' as *;
9
+
10
+ // ============================================================================
11
+ // HERO
12
+ // ============================================================================
13
+
14
+ .hero {
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: center;
18
+ justify-content: center;
19
+ text-align: center;
20
+ padding: 4rem 2rem;
21
+ border-radius: var(--radius-xl);
22
+ @include relief-container;
23
+ @include finish-surface;
24
+ @include transition-interactive(var(--transition-normal));
25
+ }
26
+
27
+ .hero-title {
28
+ font-family: var(--font-serif);
29
+ font-size: var(--text-4xl);
30
+ font-weight: var(--font-bold);
31
+ letter-spacing: var(--tracking-refined);
32
+ color: var(--text-primary);
33
+ line-height: 1.2;
34
+ margin: 0 0 1rem;
35
+ }
36
+
37
+ .hero-subtitle {
38
+ font-size: var(--text-lg);
39
+ color: var(--text-secondary);
40
+ max-width: 36rem;
41
+ line-height: 1.6;
42
+ margin: 0 0 2rem;
43
+ }
44
+
45
+ .hero-actions {
46
+ display: flex;
47
+ flex-wrap: wrap;
48
+ gap: 0.75rem;
49
+ justify-content: center;
50
+ }
51
+
52
+ // Size variants
53
+ .hero-sm {
54
+ padding: 2.5rem 1.5rem;
55
+
56
+ .hero-title {
57
+ font-size: var(--text-2xl);
58
+ }
59
+
60
+ .hero-subtitle {
61
+ font-size: var(--text-base);
62
+ margin-bottom: 1.5rem;
63
+ }
64
+ }
65
+
66
+ .hero-lg {
67
+ padding: 6rem 3rem;
68
+
69
+ .hero-title {
70
+ font-size: var(--text-5xl);
71
+ }
72
+
73
+ .hero-subtitle {
74
+ font-size: var(--text-xl);
75
+ max-width: 42rem;
76
+ }
77
+ }
78
+
79
+ // Full-bleed variant (no border-radius, no border)
80
+ .hero-full {
81
+ border-radius: 0;
82
+ border: none;
83
+ }
@@ -0,0 +1,55 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Hover Card Component
3
+ // ---------------------------------------------------------------------------
4
+ // Rich tooltip-like card triggered by hover. Uses positioned floating
5
+ // surface with tier-aware relief and finish.
6
+ // ---------------------------------------------------------------------------
7
+
8
+ @use '../base/register' as *;
9
+
10
+ .hover-card {
11
+ position: relative;
12
+ display: inline-block;
13
+ }
14
+
15
+ .hover-card-trigger {
16
+ cursor: pointer;
17
+ }
18
+
19
+ .hover-card-content {
20
+ position: absolute;
21
+ top: var(--hover-card-top, 0);
22
+ left: var(--hover-card-left, 0);
23
+ z-index: var(--z-popover);
24
+ width: 20rem;
25
+ padding: 1rem;
26
+ border-radius: var(--radius-xl);
27
+ border: 1px solid var(--border-default);
28
+ box-shadow: var(--relief-shadow-lg);
29
+ @include finish-surface(var(--popover-bg));
30
+ opacity: 0;
31
+ pointer-events: none;
32
+ transform: translateY(-0.25rem);
33
+ transition:
34
+ opacity var(--transition-normal) var(--easing-in-out),
35
+ transform var(--transition-normal) var(--easing-in-out);
36
+
37
+ &.active {
38
+ opacity: 1;
39
+ pointer-events: auto;
40
+ transform: translateY(0);
41
+ }
42
+ }
43
+
44
+ .hover-card-sm {
45
+ .hover-card-content {
46
+ width: 14rem;
47
+ padding: 0.75rem;
48
+ }
49
+ }
50
+
51
+ .hover-card-lg {
52
+ .hover-card-content {
53
+ width: 28rem;
54
+ }
55
+ }
@@ -0,0 +1,71 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Image Components
3
+ // ---------------------------------------------------------------------------
4
+ // Responsive images, rounded variants, thumbnail treatment, and
5
+ // aspect-ratio containers.
6
+ // Uses --relief-* and --finish-* variables for tier integration.
7
+ // ---------------------------------------------------------------------------
8
+
9
+ @use '../base/register' as *;
10
+
11
+ // ============================================================================
12
+ // BASE IMAGE
13
+ // ============================================================================
14
+
15
+ .img {
16
+ max-width: 100%;
17
+ height: auto;
18
+ display: block;
19
+ }
20
+
21
+ // ============================================================================
22
+ // VARIANTS
23
+ // ============================================================================
24
+
25
+ .img-rounded {
26
+ border-radius: var(--radius-xl);
27
+ }
28
+
29
+ .img-circle {
30
+ border-radius: var(--radius-full);
31
+ }
32
+
33
+ .img-thumbnail {
34
+ padding: 0.25rem;
35
+ @include relief-container;
36
+ @include finish-surface;
37
+ border-radius: var(--radius-lg);
38
+ }
39
+
40
+ // ============================================================================
41
+ // ASPECT RATIO CONTAINER
42
+ // ============================================================================
43
+
44
+ .aspect-ratio {
45
+ position: relative;
46
+ width: 100%;
47
+ aspect-ratio: var(--aspect-ratio, 16 / 9);
48
+ overflow: hidden;
49
+
50
+ > img,
51
+ > video,
52
+ > iframe {
53
+ position: absolute;
54
+ inset: 0;
55
+ width: 100%;
56
+ height: 100%;
57
+ object-fit: cover;
58
+ }
59
+ }
60
+
61
+ .aspect-ratio-square {
62
+ --aspect-ratio: 1 / 1;
63
+ }
64
+
65
+ .aspect-ratio-video {
66
+ --aspect-ratio: 16 / 9;
67
+ }
68
+
69
+ .aspect-ratio-photo {
70
+ --aspect-ratio: 4 / 3;
71
+ }
@@ -0,0 +1,41 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Components Index
3
+ // ---------------------------------------------------------------------------
4
+ // Aggregates all component partials.
5
+ // Naming: most components use flat class names (e.g. .card, .card-header).
6
+ // _layouts.scss and _segmented-controls.scss use BEM notation (e.g.
7
+ // .page-layout__sidebar, .segmented-control__option) for tightly-coupled
8
+ // parent/child structures where the child has no standalone meaning.
9
+ // ---------------------------------------------------------------------------
10
+
11
+ @forward 'buttons';
12
+ @forward 'inputs';
13
+ @forward 'cards';
14
+ @forward 'badges';
15
+ @forward 'feedback';
16
+ @forward 'navigation';
17
+ @forward 'overlays';
18
+ @forward 'toggles';
19
+ @forward 'closes';
20
+ @forward 'toasts';
21
+ @forward 'menus';
22
+ @forward 'lists';
23
+ @forward 'indicators';
24
+ @forward 'segmented-controls';
25
+ @forward 'tables';
26
+ @forward 'layouts';
27
+ @forward 'callouts';
28
+ @forward 'figures';
29
+ @forward 'heros';
30
+ @forward 'code';
31
+ @forward 'images';
32
+ @forward 'collapsibles';
33
+ @forward 'alert-dialogs';
34
+ @forward 'comboboxes';
35
+ @forward 'hover-cards';
36
+ @forward 'context-menus';
37
+ @forward 'carousels';
38
+ @forward 'scroll-areas';
39
+ @forward 'date-pickers';
40
+ @forward 'color-pickers';
41
+ @forward 'trees';