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,195 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Menu Components
3
+ // ---------------------------------------------------------------------------
4
+ // Popovers and dropdown menus.
5
+ // Uses --relief-* and --finish-* variables for tier integration.
6
+ // Scope: This file provides styles for dropdown menus (.dropdown) and
7
+ // generic popovers (.popover). Context menus are NOT included here — they
8
+ // are handled by the contextmenu enhancer with its own activation mechanism
9
+ // and positioning logic.
10
+ // ---------------------------------------------------------------------------
11
+
12
+ @use '../base/register' as *;
13
+ @use '../base/accessibility' as *;
14
+ @use '../base/transitions' as *;
15
+
16
+ // ============================================================================
17
+ // POPOVER
18
+ // ============================================================================
19
+
20
+ .popover {
21
+ position: absolute;
22
+ z-index: var(--z-popover);
23
+ border-radius: var(--radius-xl);
24
+ border: 1px solid var(--popover-border);
25
+ box-shadow: var(--relief-shadow-lg);
26
+ @include finish-surface(var(--popover-bg));
27
+ opacity: 0;
28
+ pointer-events: none;
29
+ transition: opacity var(--transition-normal) var(--easing-in-out);
30
+
31
+ &.active {
32
+ opacity: 1;
33
+ pointer-events: auto;
34
+ }
35
+ }
36
+
37
+ .popover-header {
38
+ padding: 0.75rem 1rem;
39
+ font-size: var(--text-sm);
40
+ font-weight: var(--font-semibold);
41
+ letter-spacing: var(--tracking-elegant);
42
+ border-bottom: 1px solid var(--border-subtle);
43
+ }
44
+
45
+ .popover-body {
46
+ padding: 0.75rem 1rem;
47
+ font-size: var(--text-sm);
48
+ line-height: 1.5;
49
+ }
50
+
51
+ // ---- Position variants ----
52
+
53
+ .popover-top {
54
+ bottom: calc(100% + 8px);
55
+ left: 50%;
56
+ transform: translateX(-50%);
57
+ }
58
+
59
+ .popover-bottom {
60
+ top: calc(100% + 8px);
61
+ left: 50%;
62
+ transform: translateX(-50%);
63
+ }
64
+
65
+ .popover-left {
66
+ right: calc(100% + 8px);
67
+ top: 50%;
68
+ transform: translateY(-50%);
69
+ }
70
+
71
+ .popover-right {
72
+ left: calc(100% + 8px);
73
+ top: 50%;
74
+ transform: translateY(-50%);
75
+ }
76
+
77
+ // ---- Size variants ----
78
+
79
+ .popover-sm {
80
+ max-width: 16rem;
81
+ }
82
+
83
+ .popover-lg {
84
+ max-width: 32rem;
85
+ }
86
+
87
+ // ============================================================================
88
+ // DROPDOWN
89
+ // ============================================================================
90
+
91
+ .dropdown {
92
+ position: relative;
93
+ display: inline-block;
94
+ }
95
+
96
+ .dropdown-toggle {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ gap: 0.375rem;
100
+ cursor: pointer;
101
+
102
+ &::after {
103
+ content: '';
104
+ display: inline-block;
105
+ width: 0.5em;
106
+ height: 0.5em;
107
+ border-right: 2px solid currentcolor;
108
+ border-bottom: 2px solid currentcolor;
109
+ transform: rotate(45deg);
110
+ margin-top: -0.25em;
111
+ transition: transform var(--transition-normal) var(--easing-in-out);
112
+ }
113
+ }
114
+
115
+ .dropdown-menu {
116
+ position: absolute;
117
+ top: 100%;
118
+ left: 0;
119
+ z-index: var(--z-dropdown);
120
+ min-width: 12rem;
121
+ padding: 0.375rem 0;
122
+ margin-top: 0.25rem;
123
+ border-radius: var(--radius-xl);
124
+ border: 1px solid var(--border-default);
125
+ box-shadow: var(--relief-shadow-lg);
126
+ @include finish-surface(var(--surface-1));
127
+ opacity: 0;
128
+ pointer-events: none;
129
+ transform: translateY(-0.25rem);
130
+ transition:
131
+ opacity var(--transition-normal) var(--easing-in-out),
132
+ transform var(--transition-normal) var(--easing-in-out);
133
+
134
+ &.active {
135
+ opacity: 1;
136
+ pointer-events: auto;
137
+ transform: translateY(0);
138
+ }
139
+ }
140
+
141
+ .dropdown-end .dropdown-menu {
142
+ left: auto;
143
+ right: 0;
144
+ }
145
+
146
+ .dropdown-item {
147
+ display: flex;
148
+ align-items: center;
149
+ gap: 0.5rem;
150
+ width: 100%;
151
+ padding: 0.5rem 1rem;
152
+ font-size: var(--text-sm);
153
+ font-family: var(--font-sans);
154
+ color: var(--text-primary);
155
+ background: none;
156
+ border: none;
157
+ cursor: pointer;
158
+ text-align: left;
159
+ white-space: nowrap;
160
+ @include transition-interactive(var(--transition-normal));
161
+
162
+ @include hover-state {
163
+ color: var(--accent-primary);
164
+ }
165
+
166
+ &:focus-visible {
167
+ @include focus-ring-outline($inset: true);
168
+ }
169
+
170
+ &.active {
171
+ color: var(--accent-primary);
172
+ background-color: var(--state-active);
173
+ }
174
+
175
+ &:disabled,
176
+ &.disabled {
177
+ color: var(--state-disabled-text);
178
+ pointer-events: none;
179
+ }
180
+ }
181
+
182
+ .dropdown-divider {
183
+ border: none;
184
+ border-top: 1px solid var(--border-subtle);
185
+ margin: 0.25rem 0;
186
+ }
187
+
188
+ .dropdown-header {
189
+ padding: 0.375rem 1rem;
190
+ font-size: var(--text-xs);
191
+ font-weight: var(--font-semibold);
192
+ color: var(--text-muted);
193
+ letter-spacing: var(--tracking-display);
194
+ text-transform: uppercase;
195
+ }
@@ -0,0 +1,325 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Navigation Components
3
+ // ---------------------------------------------------------------------------
4
+ // Nav items, tabs, navbar, breadcrumbs, and pagination styles.
5
+ // Uses --relief-* variables for automatic relief switching.
6
+ // ---------------------------------------------------------------------------
7
+
8
+ @use 'sass:map';
9
+ @use '../variables' as *;
10
+ @use '../base/register' as *;
11
+ @use '../base/transitions' as *;
12
+
13
+ // ============================================================================
14
+ // NAV
15
+ // ============================================================================
16
+
17
+ .nav {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: 0.25rem;
21
+ }
22
+
23
+ .nav-item {
24
+ padding: 0.5rem 1rem;
25
+ font-size: var(--text-sm);
26
+ font-weight: var(--font-medium);
27
+ letter-spacing: var(--tracking-elegant);
28
+ color: var(--text-secondary);
29
+ border-radius: var(--radius-lg);
30
+ cursor: pointer;
31
+ @include transition-interactive(var(--transition-normal));
32
+ user-select: none;
33
+ border: none;
34
+ background: none;
35
+ font-family: var(--font-sans);
36
+
37
+ @include hover-state {
38
+ color: var(--text-primary);
39
+ }
40
+
41
+ &.active {
42
+ color: var(--accent-primary);
43
+ background-color: var(--state-active);
44
+ }
45
+ }
46
+
47
+ // ============================================================================
48
+ // TABS
49
+ // ============================================================================
50
+
51
+ .tabs {
52
+ display: flex;
53
+ border-bottom: 2px solid var(--border-default);
54
+ gap: 0;
55
+ overflow-x: auto;
56
+ @include transition-feedback;
57
+ }
58
+
59
+ .tab {
60
+ position: relative;
61
+ padding: 0.75rem 1.25rem;
62
+ font-size: var(--text-sm);
63
+ font-weight: var(--font-medium);
64
+ letter-spacing: var(--tracking-elegant);
65
+ color: var(--text-secondary);
66
+ cursor: pointer;
67
+ white-space: nowrap;
68
+ border: none;
69
+ background: none;
70
+ font-family: var(--font-sans);
71
+ transition:
72
+ color var(--transition-normal) var(--easing-in-out),
73
+ background-color var(--transition-normal) var(--easing-in-out);
74
+
75
+ &::after {
76
+ content: '';
77
+ position: absolute;
78
+ bottom: -2px;
79
+ left: 0;
80
+ right: 0;
81
+ height: 2px;
82
+ background-color: transparent;
83
+ @include transition-property(background-color);
84
+ }
85
+
86
+ @include hover-state {
87
+ color: var(--text-primary);
88
+ }
89
+
90
+ &.active {
91
+ color: var(--accent-primary);
92
+
93
+ &::after {
94
+ background-color: var(--accent-primary);
95
+ }
96
+ }
97
+ }
98
+
99
+ // Tabs beveled variant
100
+ .tabs-beveled {
101
+ position: relative;
102
+ border-bottom: 3px solid var(--border-strong);
103
+
104
+ &::before {
105
+ content: '';
106
+ position: absolute;
107
+ bottom: -6px;
108
+ left: 0;
109
+ right: 0;
110
+ height: 3px;
111
+ background: repeating-linear-gradient(
112
+ 90deg,
113
+ var(--accent-decorative) 0,
114
+ var(--accent-decorative) 8px,
115
+ transparent 8px,
116
+ transparent 16px
117
+ );
118
+ opacity: 0.3;
119
+ }
120
+ }
121
+
122
+ // ============================================================================
123
+ // NAVBAR
124
+ // ============================================================================
125
+
126
+ .navbar {
127
+ display: flex;
128
+ align-items: center;
129
+ justify-content: space-between;
130
+ padding: 0.75rem 1.5rem;
131
+ @include finish-surface;
132
+ border-bottom: 1px solid var(--relief-border, var(--border-default));
133
+ }
134
+
135
+ .navbar-brand {
136
+ font-size: var(--text-lg);
137
+ font-weight: var(--font-bold);
138
+ letter-spacing: var(--tracking-elegant);
139
+ color: var(--text-primary);
140
+ text-decoration: none;
141
+ flex-shrink: 0;
142
+ }
143
+
144
+ .navbar-nav {
145
+ display: flex;
146
+ align-items: center;
147
+ gap: 0.25rem;
148
+ list-style: none;
149
+ margin: 0;
150
+ padding: 0;
151
+ }
152
+
153
+ .navbar-collapse {
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 1rem;
157
+
158
+ @media (max-width: #{map.get($breakpoints, md) - 1px}) {
159
+ display: none;
160
+
161
+ &.active {
162
+ display: flex;
163
+ flex-direction: column;
164
+ position: absolute;
165
+ top: 100%;
166
+ left: 0;
167
+ right: 0;
168
+ @include finish-surface(var(--surface-1));
169
+ border-bottom: 1px solid var(--border-default);
170
+ padding: 0.75rem 1.5rem;
171
+ box-shadow: var(--relief-shadow);
172
+ z-index: var(--z-dropdown);
173
+
174
+ .navbar-nav {
175
+ flex-direction: column;
176
+ width: 100%;
177
+ }
178
+ }
179
+ }
180
+ }
181
+
182
+ .navbar-toggler {
183
+ display: none;
184
+ padding: 0.375rem 0.5rem;
185
+ background: none;
186
+ border: 1px solid var(--border-default);
187
+ border-radius: var(--radius-md);
188
+ color: var(--text-secondary);
189
+ cursor: pointer;
190
+ @include transition-interactive(var(--transition-normal));
191
+
192
+ &:hover {
193
+ color: var(--text-primary);
194
+ background-color: var(--state-hover);
195
+ }
196
+
197
+ @media (max-width: #{map.get($breakpoints, md) - 1px}) {
198
+ display: inline-flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ width: 2.25rem;
202
+ height: 2.25rem;
203
+ }
204
+ }
205
+
206
+ .navbar-fixed {
207
+ position: fixed;
208
+ top: 0;
209
+ left: 0;
210
+ right: 0;
211
+ z-index: var(--z-dropdown);
212
+ }
213
+
214
+ .navbar-sticky {
215
+ position: sticky;
216
+ top: 0;
217
+ z-index: var(--z-dropdown);
218
+ }
219
+
220
+ // ============================================================================
221
+ // BREADCRUMBS
222
+ // ============================================================================
223
+
224
+ .breadcrumb {
225
+ display: flex;
226
+ flex-wrap: wrap;
227
+ align-items: center;
228
+ gap: 0;
229
+ list-style: none;
230
+ padding: 0;
231
+ margin: 0;
232
+ font-size: var(--text-sm);
233
+ }
234
+
235
+ .breadcrumb-item {
236
+ display: inline-flex;
237
+ align-items: center;
238
+ color: var(--text-secondary);
239
+
240
+ a {
241
+ color: var(--text-secondary);
242
+ text-decoration: none;
243
+ transition: color var(--transition-normal) var(--easing-in-out);
244
+
245
+ &:hover {
246
+ color: var(--accent-primary);
247
+ }
248
+ }
249
+
250
+ + .breadcrumb-item::before {
251
+ content: var(--breadcrumb-separator, '/');
252
+ padding: 0 0.5rem;
253
+ color: var(--text-muted);
254
+ }
255
+
256
+ &.active {
257
+ color: var(--text-primary);
258
+ font-weight: var(--font-medium);
259
+ }
260
+ }
261
+
262
+ // ============================================================================
263
+ // PAGINATION
264
+ // ============================================================================
265
+
266
+ .pagination {
267
+ display: flex;
268
+ align-items: center;
269
+ gap: 0;
270
+ list-style: none;
271
+ padding: 0;
272
+ margin: 0;
273
+ }
274
+
275
+ .page-item {
276
+ @include edge-radius($child: '.page-link');
277
+
278
+ &.active .page-link {
279
+ background-color: var(--accent-primary);
280
+ color: var(--text-inverse);
281
+ border-color: var(--accent-primary);
282
+ }
283
+
284
+ &.disabled .page-link {
285
+ color: var(--state-disabled-text);
286
+ pointer-events: none;
287
+ background-color: var(--state-disabled-bg);
288
+ }
289
+ }
290
+
291
+ .page-link {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ min-width: 2.25rem;
296
+ height: 2.25rem;
297
+ padding: 0.25rem 0.625rem;
298
+ font-size: var(--text-sm);
299
+ font-family: var(--font-sans);
300
+ color: var(--text-secondary);
301
+ background: none;
302
+ border: 1px solid var(--border-default);
303
+ margin-left: -1px;
304
+ cursor: pointer;
305
+ text-decoration: none;
306
+ @include transition-interactive(var(--transition-normal));
307
+
308
+ @include hover-state {
309
+ color: var(--accent-primary);
310
+ }
311
+ }
312
+
313
+ .pagination-sm .page-link {
314
+ min-width: 1.75rem;
315
+ height: 1.75rem;
316
+ font-size: var(--text-xs);
317
+ padding: 0.125rem 0.375rem;
318
+ }
319
+
320
+ .pagination-lg .page-link {
321
+ min-width: 2.75rem;
322
+ height: 2.75rem;
323
+ font-size: var(--text-base);
324
+ padding: 0.375rem 0.75rem;
325
+ }