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,403 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Indicator Components
3
+ // ---------------------------------------------------------------------------
4
+ // Steppers, timelines, keyboard keys, stats, description lists, empty
5
+ // states, and ratings.
6
+ // ---------------------------------------------------------------------------
7
+
8
+ @use '../base/register' as *;
9
+ @use '../base/transitions' as *;
10
+
11
+ // ============================================================================
12
+ // STEPPER
13
+ // ============================================================================
14
+
15
+ .stepper {
16
+ display: flex;
17
+ align-items: flex-start;
18
+ gap: 0;
19
+ }
20
+
21
+ .stepper-vertical {
22
+ flex-direction: column;
23
+
24
+ .step {
25
+ flex-direction: row;
26
+ align-items: flex-start;
27
+ }
28
+
29
+ .step-connector {
30
+ width: 2px;
31
+ height: 2rem;
32
+ min-height: 2rem;
33
+ margin: 0.25rem auto;
34
+ }
35
+ }
36
+
37
+ .step {
38
+ display: flex;
39
+ flex-direction: column;
40
+ align-items: center;
41
+ flex: 1;
42
+ position: relative;
43
+ }
44
+
45
+ .step-indicator {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ width: 2rem;
50
+ height: 2rem;
51
+ border-radius: var(--radius-full);
52
+ border: 2px solid var(--border-strong);
53
+ background-color: var(--relief-surface-raised);
54
+ font-size: var(--text-xs);
55
+ font-weight: var(--font-bold);
56
+ color: var(--text-secondary);
57
+ flex-shrink: 0;
58
+ @include transition-interactive(var(--transition-normal));
59
+ }
60
+
61
+ .step-content {
62
+ text-align: center;
63
+ margin-top: 0.5rem;
64
+ font-size: var(--text-sm);
65
+ color: var(--text-secondary);
66
+ }
67
+
68
+ .step-connector {
69
+ flex: 1;
70
+ height: 2px;
71
+ background-color: var(--border-default);
72
+ align-self: center;
73
+ margin: 0 0.25rem;
74
+ margin-top: 1rem;
75
+ }
76
+
77
+ // Stepper states
78
+ .step.active .step-indicator {
79
+ border-color: var(--accent-primary);
80
+ color: var(--accent-primary);
81
+ background-color: color-mix(in srgb, var(--accent-primary) 10%, transparent);
82
+ }
83
+
84
+ .step.completed .step-indicator {
85
+ border-color: var(--color-success);
86
+ background-color: var(--color-success);
87
+ color: var(--text-inverse);
88
+ }
89
+
90
+ .step.completed .step-connector {
91
+ background-color: var(--color-success);
92
+ }
93
+
94
+ // ============================================================================
95
+ // TIMELINE
96
+ // ============================================================================
97
+
98
+ .timeline {
99
+ position: relative;
100
+ padding-left: 2rem;
101
+
102
+ &::before {
103
+ content: '';
104
+ position: absolute;
105
+ left: 0.5rem;
106
+ top: 0;
107
+ bottom: 0;
108
+ width: 2px;
109
+ background-color: var(--border-default);
110
+ }
111
+ }
112
+
113
+ .timeline-item {
114
+ position: relative;
115
+ padding-bottom: 1.5rem;
116
+
117
+ &:last-child {
118
+ padding-bottom: 0;
119
+ }
120
+ }
121
+
122
+ .timeline-marker {
123
+ position: absolute;
124
+ left: -1.625rem;
125
+ top: 0.25rem;
126
+ width: 0.75rem;
127
+ height: 0.75rem;
128
+ border-radius: var(--radius-full);
129
+ border: 2px solid var(--accent-primary);
130
+ background-color: var(--surface-bg);
131
+ }
132
+
133
+ .timeline-content {
134
+ font-size: var(--text-sm);
135
+ line-height: 1.5;
136
+ }
137
+
138
+ // ============================================================================
139
+ // KBD (Keyboard Key)
140
+ // ============================================================================
141
+
142
+ .kbd {
143
+ display: inline-flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ min-width: 1.5rem;
147
+ padding: 0.125rem 0.375rem;
148
+ font-family: var(--font-mono);
149
+ font-size: var(--text-xs);
150
+ line-height: 1.4;
151
+ color: var(--text-primary);
152
+ background-color: var(--kbd-bg);
153
+ border: 1px solid var(--kbd-border);
154
+ border-radius: var(--radius-md);
155
+ box-shadow:
156
+ inset 0 -1px 0 var(--kbd-border),
157
+ 0 1px 2px rgb(var(--shadow-color) / 8%);
158
+ }
159
+
160
+ .kbd-sm {
161
+ font-size: var(--text-2xs);
162
+ padding: 0 0.25rem;
163
+ min-width: 1.125rem;
164
+ }
165
+
166
+ .kbd-lg {
167
+ font-size: var(--text-sm);
168
+ padding: 0.25rem 0.5rem;
169
+ min-width: 2rem;
170
+ }
171
+
172
+ // ============================================================================
173
+ // STAT (Metric Display)
174
+ // ============================================================================
175
+
176
+ .stat-group {
177
+ display: flex;
178
+ flex-wrap: wrap;
179
+ gap: 1.5rem;
180
+ }
181
+
182
+ .stat {
183
+ display: flex;
184
+ flex-direction: column;
185
+ gap: 0.25rem;
186
+ }
187
+
188
+ .stat-value {
189
+ font-size: var(--text-3xl);
190
+ font-weight: var(--font-bold);
191
+ letter-spacing: var(--tracking-refined);
192
+ color: var(--text-primary);
193
+ line-height: 1.2;
194
+ }
195
+
196
+ .stat-label {
197
+ font-size: var(--text-sm);
198
+ color: var(--text-secondary);
199
+ letter-spacing: var(--tracking-elegant);
200
+ }
201
+
202
+ .stat-delta {
203
+ font-size: var(--text-sm);
204
+ font-weight: var(--font-medium);
205
+
206
+ &.positive {
207
+ color: var(--color-success-text);
208
+ }
209
+
210
+ &.negative {
211
+ color: var(--color-error-text);
212
+ }
213
+ }
214
+
215
+ // ============================================================================
216
+ // DESCRIPTION LIST
217
+ // ============================================================================
218
+
219
+ .dl {
220
+ margin: 0;
221
+ }
222
+
223
+ .dl dt {
224
+ font-size: var(--text-sm);
225
+ font-weight: var(--font-semibold);
226
+ color: var(--text-secondary);
227
+ letter-spacing: var(--tracking-elegant);
228
+ }
229
+
230
+ .dl dd {
231
+ margin: 0;
232
+ font-size: var(--text-sm);
233
+ color: var(--text-primary);
234
+ padding-bottom: 0.75rem;
235
+ }
236
+
237
+ .dl-horizontal {
238
+ display: grid;
239
+ grid-template-columns: auto 1fr;
240
+ gap: 0.25rem 1.5rem;
241
+
242
+ dd {
243
+ padding-bottom: 0.5rem;
244
+ }
245
+ }
246
+
247
+ .dl-stacked {
248
+ dt {
249
+ padding-top: 0.75rem;
250
+ border-top: 1px solid var(--border-default);
251
+ }
252
+
253
+ dt:first-child {
254
+ padding-top: 0;
255
+ border-top: 0;
256
+ }
257
+
258
+ dd {
259
+ padding-bottom: 0.75rem;
260
+ }
261
+ }
262
+
263
+ // ============================================================================
264
+ // SHARED STATE LAYOUT PLACEHOLDERS
265
+ // ============================================================================
266
+
267
+ %centered-state-layout {
268
+ display: flex;
269
+ flex-direction: column;
270
+ align-items: center;
271
+ justify-content: center;
272
+ text-align: center;
273
+ padding: 3rem 1.5rem;
274
+ }
275
+
276
+ %state-heading {
277
+ font-weight: var(--font-semibold);
278
+ color: var(--text-primary);
279
+ margin-bottom: 0.5rem;
280
+ }
281
+
282
+ %state-description {
283
+ font-size: var(--text-sm);
284
+ color: var(--text-secondary);
285
+ max-width: 24rem;
286
+ margin-bottom: 1.5rem;
287
+ }
288
+
289
+ %state-actions {
290
+ display: flex;
291
+ gap: 0.75rem;
292
+ }
293
+
294
+ // ============================================================================
295
+ // EMPTY STATE
296
+ // ============================================================================
297
+
298
+ .empty-state {
299
+ @extend %centered-state-layout;
300
+ }
301
+
302
+ .empty-state-icon {
303
+ font-size: var(--text-4xl);
304
+ color: var(--text-muted);
305
+ margin-bottom: 1rem;
306
+ opacity: 0.5;
307
+ }
308
+
309
+ .empty-state-heading {
310
+ @extend %state-heading;
311
+ font-size: var(--text-lg);
312
+ }
313
+
314
+ .empty-state-description {
315
+ @extend %state-description;
316
+ }
317
+
318
+ .empty-state-action {
319
+ @extend %state-actions;
320
+ }
321
+
322
+ // ============================================================================
323
+ // RESULT / OUTCOME
324
+ // ============================================================================
325
+
326
+ .result {
327
+ @extend %centered-state-layout;
328
+ }
329
+
330
+ .result-icon {
331
+ font-size: var(--text-4xl);
332
+ margin-bottom: 1rem;
333
+
334
+ svg {
335
+ width: 3rem;
336
+ height: 3rem;
337
+ }
338
+ }
339
+
340
+ .result-title {
341
+ @extend %state-heading;
342
+ font-size: var(--text-xl);
343
+ }
344
+
345
+ .result-subtitle {
346
+ @extend %state-description;
347
+ }
348
+
349
+ .result-actions {
350
+ @extend %state-actions;
351
+ }
352
+
353
+ @each $type in (success, warning, error, info) {
354
+ .result-#{$type} .result-icon {
355
+ color: var(--color-#{$type}-text);
356
+ }
357
+ }
358
+
359
+ // ============================================================================
360
+ // RATING
361
+ // ============================================================================
362
+
363
+ .rating {
364
+ display: inline-flex;
365
+ gap: 0.125rem;
366
+ }
367
+
368
+ .rating-star {
369
+ width: 1.25rem;
370
+ height: 1.25rem;
371
+ background-color: var(--border-strong);
372
+ clip-path: polygon(
373
+ 50% 0%,
374
+ 61% 35%,
375
+ 98% 35%,
376
+ 68% 57%,
377
+ 79% 91%,
378
+ 50% 70%,
379
+ 21% 91%,
380
+ 32% 57%,
381
+ 2% 35%,
382
+ 39% 35%
383
+ );
384
+ transition: background-color var(--transition-normal) var(--easing-in-out);
385
+
386
+ &.filled {
387
+ background-color: var(--color-warning);
388
+ }
389
+
390
+ &.half {
391
+ background: linear-gradient(90deg, var(--color-warning) 50%, var(--border-strong) 50%);
392
+ }
393
+ }
394
+
395
+ .rating-sm .rating-star {
396
+ width: 0.875rem;
397
+ height: 0.875rem;
398
+ }
399
+
400
+ .rating-lg .rating-star {
401
+ width: 1.75rem;
402
+ height: 1.75rem;
403
+ }