@hellboy/ds 0.1.2

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 (137) hide show
  1. package/README.md +111 -0
  2. package/dist/index.css +3699 -0
  3. package/dist/index.css.map +1 -0
  4. package/dist/index.d.mts +1087 -0
  5. package/dist/index.d.ts +1087 -0
  6. package/dist/index.js +3391 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/index.mjs +3287 -0
  9. package/dist/index.mjs.map +1 -0
  10. package/dist/theme.css +55 -0
  11. package/hellboy-ds-0.1.2.tgz +0 -0
  12. package/package.json +42 -0
  13. package/src/components/badge/Badge.tsx +29 -0
  14. package/src/components/badge/index.ts +1 -0
  15. package/src/components/banner/Banner.tsx +48 -0
  16. package/src/components/banner/banner.css +44 -0
  17. package/src/components/banner/index.ts +1 -0
  18. package/src/components/button/button.tsx +127 -0
  19. package/src/components/button/index.ts +1 -0
  20. package/src/components/card/card.tsx +57 -0
  21. package/src/components/card/index.ts +1 -0
  22. package/src/components/checkbox/Checkbox.tsx +98 -0
  23. package/src/components/checkbox/index.ts +1 -0
  24. package/src/components/code-block/code-block.tsx +44 -0
  25. package/src/components/code-block/index.ts +1 -0
  26. package/src/components/color-control/color-control.tsx +322 -0
  27. package/src/components/color-control/index.ts +1 -0
  28. package/src/components/drag-handle/DragHandle.tsx +78 -0
  29. package/src/components/drag-handle/index.ts +1 -0
  30. package/src/components/drawer/drawer.tsx +82 -0
  31. package/src/components/drawer/index.ts +1 -0
  32. package/src/components/floating-bar/floating-bar.tsx +52 -0
  33. package/src/components/floating-bar/index.ts +2 -0
  34. package/src/components/footer/footer.tsx +28 -0
  35. package/src/components/footer/index.ts +1 -0
  36. package/src/components/grid/Grid.tsx +53 -0
  37. package/src/components/grid/index.ts +1 -0
  38. package/src/components/header/header.tsx +57 -0
  39. package/src/components/header/index.ts +1 -0
  40. package/src/components/icons/icons.tsx +44 -0
  41. package/src/components/icons/index.ts +1 -0
  42. package/src/components/index.ts +29 -0
  43. package/src/components/input/DatePicker.tsx +133 -0
  44. package/src/components/input/Input.tsx +220 -0
  45. package/src/components/input/InputDate.tsx +10 -0
  46. package/src/components/input/InputDateTime.tsx +10 -0
  47. package/src/components/input/InputEmail.tsx +10 -0
  48. package/src/components/input/InputField.tsx +137 -0
  49. package/src/components/input/InputNumber.tsx +10 -0
  50. package/src/components/input/InputPassword.tsx +10 -0
  51. package/src/components/input/InputSearch.tsx +10 -0
  52. package/src/components/input/InputTel.tsx +10 -0
  53. package/src/components/input/InputText.tsx +10 -0
  54. package/src/components/input/InputTime.tsx +10 -0
  55. package/src/components/input/InputUrl.tsx +10 -0
  56. package/src/components/input/TimePicker.tsx +151 -0
  57. package/src/components/input/index.ts +11 -0
  58. package/src/components/layout/Layout.tsx +244 -0
  59. package/src/components/layout/index.ts +1 -0
  60. package/src/components/list/List.tsx +159 -0
  61. package/src/components/list/index.ts +1 -0
  62. package/src/components/navbar/MenuCategory.tsx +20 -0
  63. package/src/components/navbar/MenuGroup.tsx +288 -0
  64. package/src/components/navbar/MenuItem.tsx +65 -0
  65. package/src/components/navbar/Navbar.tsx +23 -0
  66. package/src/components/navbar/index.ts +4 -0
  67. package/src/components/page/index.ts +1 -0
  68. package/src/components/page/page.tsx +46 -0
  69. package/src/components/page-index/PageIndex.tsx +275 -0
  70. package/src/components/page-index/index.ts +1 -0
  71. package/src/components/popover/index.ts +1 -0
  72. package/src/components/popover/popover.tsx +199 -0
  73. package/src/components/radio/Radio.tsx +176 -0
  74. package/src/components/radio/index.ts +1 -0
  75. package/src/components/section/index.ts +1 -0
  76. package/src/components/section/section.tsx +66 -0
  77. package/src/components/select/Select.tsx +212 -0
  78. package/src/components/select/index.ts +1 -0
  79. package/src/components/slider/Slider.tsx +267 -0
  80. package/src/components/slider/index.ts +1 -0
  81. package/src/components/switch/index.ts +1 -0
  82. package/src/components/switch/switch.tsx +99 -0
  83. package/src/components/table/Table.tsx +147 -0
  84. package/src/components/table/index.ts +1 -0
  85. package/src/components/theme-control/index.ts +1 -0
  86. package/src/components/theme-control/theme-control.tsx +78 -0
  87. package/src/components/tooltip/index.ts +1 -0
  88. package/src/components/tooltip/tooltip.tsx +207 -0
  89. package/src/contexts/NavbarTooltipContext.tsx +48 -0
  90. package/src/contexts/index.ts +1 -0
  91. package/src/foundations/motion.md +136 -0
  92. package/src/index.ts +40 -0
  93. package/src/style/_shared/field.css +69 -0
  94. package/src/style/components/badge/badge.css +74 -0
  95. package/src/style/components/button/button.css +244 -0
  96. package/src/style/components/card/card.css +69 -0
  97. package/src/style/components/checkbox.css +142 -0
  98. package/src/style/components/code-block/code-block.css +34 -0
  99. package/src/style/components/color-control/color-control.css +126 -0
  100. package/src/style/components/drag-handle/drag-handle.css +68 -0
  101. package/src/style/components/drawer/drawer.css +210 -0
  102. package/src/style/components/floating-bar/floating-bar.css +39 -0
  103. package/src/style/components/footer/footer.css +108 -0
  104. package/src/style/components/grid/grid.css +33 -0
  105. package/src/style/components/header/header.css +44 -0
  106. package/src/style/components/icons/icons.css +44 -0
  107. package/src/style/components/input/input.css +393 -0
  108. package/src/style/components/layout/layout.css +205 -0
  109. package/src/style/components/list/list.css +140 -0
  110. package/src/style/components/navbar/navbar.css +342 -0
  111. package/src/style/components/page/page.css +46 -0
  112. package/src/style/components/page-index/page-index.css +158 -0
  113. package/src/style/components/popover/popover.css +44 -0
  114. package/src/style/components/radio.css +178 -0
  115. package/src/style/components/section/section.css +67 -0
  116. package/src/style/components/select/select.css +143 -0
  117. package/src/style/components/slider/slider.css +159 -0
  118. package/src/style/components/switch/switch.css +267 -0
  119. package/src/style/components/table/table.css +108 -0
  120. package/src/style/components/theme-control/theme-control.css +35 -0
  121. package/src/style/components/tooltip/tooltip.css +52 -0
  122. package/src/style/foundations/global.css +316 -0
  123. package/src/style/foundations/motion.css +164 -0
  124. package/src/style/foundations/spacing.css +51 -0
  125. package/src/style/foundations/typography.css +39 -0
  126. package/src/style/foundations/z-index.css +81 -0
  127. package/src/style/modes/dark.css +146 -0
  128. package/src/style/modes/light.css +147 -0
  129. package/src/style/semantic.css +52 -0
  130. package/src/style/styles.css +51 -0
  131. package/src/style/themes/theme.json +37 -0
  132. package/src/utils/README.md +305 -0
  133. package/src/utils/USER_PREFERENCES.md +558 -0
  134. package/src/utils/theme.ts +127 -0
  135. package/src/utils/user-preferences.ts +577 -0
  136. package/tsconfig.json +25 -0
  137. package/tsup.config.ts +52 -0
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Input Component Styles
3
+ * Form input with label, icons, and accessibility support
4
+ * Uses action colors for focus states
5
+ */
6
+
7
+ @import '../../_shared/field.css';
8
+
9
+ .input-container {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: var(--spacing-2);
13
+ }
14
+
15
+ .input-container--full-width {
16
+ width: 100%;
17
+ }
18
+
19
+ .input__label {
20
+ font-size: var(--font-size-sm);
21
+ font-weight: 500;
22
+ color: var(--color-foreground-1);
23
+ cursor: pointer;
24
+ }
25
+
26
+ .input__wrapper {
27
+ position: relative;
28
+ display: flex;
29
+ align-items: center;
30
+ }
31
+
32
+ .input {
33
+ width: 100%;
34
+ font-family: inherit;
35
+ font-size: var(--font-size-base);
36
+ line-height: 1.5;
37
+ color: var(--color-foreground-1);
38
+ background-color: var(--color-bg-1);
39
+ border: none;
40
+ outline: 2px solid var(--color-foreground-3);
41
+ outline-offset: -2px;
42
+ border-radius: var(--radius-base);
43
+ padding: var(--spacing-2) var(--spacing-3);
44
+ transition: outline-color var(--transition-base), box-shadow var(--transition-base);
45
+ }
46
+
47
+ /* Size variants */
48
+ .input--sm {
49
+ font-size: var(--font-size-sm);
50
+ padding: var(--spacing-1) var(--spacing-2);
51
+ }
52
+
53
+ .input--lg {
54
+ font-size: var(--font-size-lg);
55
+ padding: var(--spacing-3) var(--spacing-4);
56
+ }
57
+
58
+ /* Error variant */
59
+ .input--error {
60
+ outline-color: hsla(var(--error-hue), var(--error-saturation), 50%, 1);
61
+ }
62
+
63
+ .input--error:focus {
64
+ outline-color: hsla(var(--error-hue), var(--error-saturation), 50%, 1);
65
+ box-shadow: 0 0 0 3px hsla(var(--error-hue), var(--error-saturation), var(--error-lightness), 0.1);
66
+ }
67
+
68
+ /* Disabled variant */
69
+ .input--disabled {
70
+ cursor: not-allowed;
71
+ opacity: 0.6;
72
+ background-color: var(--color-bg-2);
73
+ }
74
+
75
+ /* Focus state - uses action colors */
76
+ .input:focus {
77
+ outline-color: var(--color-action-primary);
78
+ box-shadow: 0 0 0 3px hsla(var(--accent-hue), var(--accent-saturation), var(--accent-lightness), 0.1);
79
+ }
80
+
81
+ /* Hover state */
82
+ .input:hover:not(:disabled):not(.input--error) {
83
+ outline-color: var(--color-action-primary-hover);
84
+ }
85
+ .input::placeholder {
86
+ color: var(--color-foreground-2);
87
+ opacity: 0.7;
88
+ }
89
+
90
+ /* Icon spacing */
91
+ .input--has-icon-left {
92
+ padding-left: var(--spacing-10);
93
+ }
94
+
95
+ .input--has-icon-right {
96
+ padding-right: var(--spacing-10);
97
+ }
98
+
99
+ .input--sm.input--has-icon-left {
100
+ padding-left: var(--spacing-8);
101
+ }
102
+
103
+ .input--sm.input--has-icon-right {
104
+ padding-right: var(--spacing-8);
105
+ }
106
+
107
+ .input--lg.input--has-icon-left {
108
+ padding-left: var(--spacing-12);
109
+ }
110
+
111
+ .input--lg.input--has-icon-right {
112
+ padding-right: var(--spacing-12);
113
+ }
114
+
115
+ /* Icons */
116
+ .input__icon {
117
+ position: absolute;
118
+ display: flex;
119
+ align-items: center;
120
+ justify-content: center;
121
+ color: var(--color-foreground-2);
122
+ pointer-events: none;
123
+ }
124
+
125
+ .input__icon--left {
126
+ left: var(--spacing-3);
127
+ }
128
+
129
+ .input__icon--right {
130
+ right: var(--spacing-3);
131
+ pointer-events: auto;
132
+ background: none;
133
+ border: none;
134
+ cursor: pointer;
135
+ padding: var(--spacing-1);
136
+ border-radius: var(--radius-sm);
137
+ transition: background-color var(--transition-fast);
138
+ }
139
+
140
+ .input__icon--right:hover:not(:disabled) {
141
+ background-color: var(--color-bg-3);
142
+ color: var(--color-action-primary-hover);
143
+ }
144
+
145
+ .input__icon--right:active:not(:disabled) {
146
+ background-color: var(--color-bg-2);
147
+ color: var(--color-action-primary-active);
148
+ }
149
+
150
+ .input__icon--right:disabled {
151
+ cursor: not-allowed;
152
+ opacity: 0.6;
153
+ }
154
+
155
+ /* Focus on icon (for password toggle) */
156
+ .input__icon--right:focus-visible {
157
+ outline: 2px solid var(--color-action-primary);
158
+ outline-offset: 2px;
159
+ }
160
+
161
+ /* Messages */
162
+ .input__message {
163
+ font-size: var(--font-size-sm);
164
+ margin: 0;
165
+ color: var(--color-foreground-2);
166
+ }
167
+
168
+ .input__message--error {
169
+ color: hsla(var(--error-hue), var(--error-saturation), 60%, 1);
170
+ }
171
+
172
+ /* Dark theme adjustments */
173
+ :root[data-theme="dark"] .input {
174
+ background-color: var(--color-bg-2);
175
+ }
176
+
177
+ /* Autofill styles */
178
+ .input:-webkit-autofill,
179
+ .input:-webkit-autofill:hover,
180
+ .input:-webkit-autofill:focus {
181
+ -webkit-text-fill-color: var(--color-foreground-1);
182
+ -webkit-box-shadow: 0 0 0 1000px var(--color-bg-1) inset;
183
+ transition: background-color 5000s ease-in-out 0s;
184
+ }
185
+
186
+ :root[data-theme="dark"] .input:-webkit-autofill,
187
+ :root[data-theme="dark"] .input:-webkit-autofill:hover,
188
+ :root[data-theme="dark"] .input:-webkit-autofill:focus {
189
+ -webkit-box-shadow: 0 0 0 1000px var(--color-bg-2) inset;
190
+ }
191
+
192
+ /* Hide default webkit search cancel button */
193
+ .input[type="search"]::-webkit-search-cancel-button {
194
+ -webkit-appearance: none;
195
+ appearance: none;
196
+ }
197
+
198
+ /* Date/Time Picker */
199
+ .input__datetime-picker {
200
+ padding: var(--spacing-3);
201
+ min-width: 300px;
202
+ }
203
+
204
+ .input__datetime-combined {
205
+ display: flex;
206
+ gap: var(--spacing-3);
207
+ }
208
+
209
+ .input__trigger-wrapper {
210
+ position: relative;
211
+ display: flex;
212
+ align-items: center;
213
+ width: 100%;
214
+ }
215
+
216
+ /* Date Picker */
217
+ .date-picker {
218
+ display: flex;
219
+ flex-direction: column;
220
+ gap: var(--spacing-2);
221
+ }
222
+
223
+ .date-picker__header {
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: space-between;
227
+ gap: var(--spacing-2);
228
+ padding-bottom: var(--spacing-2);
229
+ border-bottom: 1px solid var(--color-foreground-2);
230
+ }
231
+
232
+ .date-picker__nav {
233
+ background: none;
234
+ border: none;
235
+ color: var(--color-foreground-1);
236
+ font-size: var(--font-size-xl);
237
+ cursor: pointer;
238
+ padding: var(--spacing-1) var(--spacing-2);
239
+ border-radius: var(--radius-sm);
240
+ transition: background-color var(--transition-fast);
241
+ }
242
+
243
+ .date-picker__nav:hover:not(:disabled) {
244
+ background-color: var(--color-bg-3);
245
+ }
246
+
247
+ .date-picker__nav:disabled {
248
+ opacity: 0.5;
249
+ cursor: not-allowed;
250
+ }
251
+
252
+ .date-picker__title {
253
+ display: flex;
254
+ gap: var(--spacing-2);
255
+ align-items: center;
256
+ }
257
+
258
+ .date-picker__select {
259
+ background-color: var(--color-bg-1);
260
+ color: var(--color-foreground-1);
261
+ border: 1px solid var(--color-foreground-2);
262
+ border-radius: var(--radius-sm);
263
+ padding: var(--spacing-1) var(--spacing-2);
264
+ font-size: var(--font-size-sm);
265
+ cursor: pointer;
266
+ }
267
+
268
+ .date-picker__weekdays {
269
+ display: grid;
270
+ grid-template-columns: repeat(7, 1fr);
271
+ gap: var(--spacing-1);
272
+ margin-top: var(--spacing-2);
273
+ }
274
+
275
+ .date-picker__weekday {
276
+ text-align: center;
277
+ font-size: var(--font-size-xs);
278
+ font-weight: 600;
279
+ color: var(--color-foreground-2);
280
+ padding: var(--spacing-1);
281
+ }
282
+
283
+ .date-picker__days {
284
+ display: grid;
285
+ grid-template-columns: repeat(7, 1fr);
286
+ gap: var(--spacing-1);
287
+ }
288
+
289
+ .date-picker__day {
290
+ aspect-ratio: 1;
291
+ background: none;
292
+ border: none;
293
+ color: var(--color-foreground-1);
294
+ font-size: var(--font-size-sm);
295
+ cursor: pointer;
296
+ border-radius: var(--radius-sm);
297
+ transition: background-color var(--transition-fast);
298
+ padding: var(--spacing-1);
299
+ }
300
+
301
+ .date-picker__day:hover:not(:disabled):not(.date-picker__day--empty) {
302
+ background-color: var(--color-bg-3);
303
+ }
304
+
305
+ .date-picker__day--selected {
306
+ background-color: var(--color-action-primary) ;
307
+ color: white;
308
+ font-weight: 600;
309
+ }
310
+
311
+ .date-picker__day--empty {
312
+ cursor: default;
313
+ visibility: hidden;
314
+ }
315
+
316
+ .date-picker__day:disabled {
317
+ opacity: 0.5;
318
+ cursor: not-allowed;
319
+ }
320
+
321
+ /* Time Picker */
322
+ .time-picker {
323
+ display: flex;
324
+ gap: var(--spacing-2);
325
+ min-width: 240px;
326
+ }
327
+
328
+ .time-picker__column {
329
+ flex: 1;
330
+ display: flex;
331
+ flex-direction: column;
332
+ gap: var(--spacing-1);
333
+ }
334
+
335
+ .time-picker__label {
336
+ text-align: center;
337
+ font-size: var(--font-size-xs);
338
+ font-weight: 600;
339
+ color: var(--color-foreground-2);
340
+ padding: var(--spacing-1);
341
+ }
342
+
343
+ .time-picker__scroll {
344
+ max-height: 200px;
345
+ overflow-y: auto;
346
+ /* border: 1px solid var(--color-bg-3); */
347
+ border-radius: var(--radius-sm);
348
+ scrollbar-width: thin;
349
+ background: var(--color-bg-2);
350
+ }
351
+ /*
352
+ .time-picker__scroll::-webkit-scrollbar {
353
+ width: 6px;
354
+ }
355
+
356
+ .time-picker__scroll::-webkit-scrollbar-track {
357
+ background: var(--color-bg-2);
358
+ }
359
+ */
360
+ .time-picker__scroll::-webkit-scrollbar-thumb {
361
+ /* background: var(--color-foreground-2); */
362
+ border-radius: var(--radius-sm);
363
+ }
364
+
365
+ .time-picker__item {
366
+ width: 100%;
367
+ background: none;
368
+ border: none;
369
+ color: var(--color-foreground-1);
370
+ font-size: var(--font-size-sm);
371
+ padding: var(--spacing-2);
372
+ cursor: pointer;
373
+ transition: background-color var(--transition-fast);
374
+ text-align: center;
375
+ font-variant-numeric: tabular-nums;
376
+ }
377
+
378
+ .time-picker__item:hover:not(:disabled) {
379
+ background-color: var(--color-bg-3);
380
+ }
381
+
382
+ .time-picker__item--selected {
383
+ background-color: var(--color-action-primary) ;
384
+ color: white;
385
+ font-weight: 600;
386
+ }
387
+
388
+ .time-picker__item:disabled {
389
+ opacity: 0.5;
390
+ cursor: not-allowed;
391
+ }
392
+
393
+
@@ -0,0 +1,205 @@
1
+ /* Layout Component Styles */
2
+
3
+ /* Base Layout */
4
+ .layout {
5
+ min-height: 100vh;
6
+ }
7
+
8
+ /* ===== SINGLE VARIANT ===== */
9
+ /* coluna1 (main) */
10
+ .layout--single {
11
+ display: flex;
12
+ flex-direction: column;
13
+ }
14
+
15
+ .layout--single .layout__container {
16
+ flex: 1;
17
+ display: flex;
18
+ flex-direction: column;
19
+ }
20
+
21
+ .layout--single .layout__main {
22
+ flex: 1;
23
+ overflow-y: auto;
24
+ overflow-x: hidden;
25
+ display: flex;
26
+ flex-direction: column;
27
+ }
28
+
29
+ .layout--single .layout__header {
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .layout--single .layout__footer {
34
+ flex-shrink: 0;
35
+ }
36
+
37
+ .layout--single .layout__bottom-bar {
38
+ flex-shrink: 0;
39
+ }
40
+
41
+ /* ===== STACKED VARIANT ===== */
42
+ /* coluna1 (main + bottom bar) */
43
+ .layout--stacked {
44
+ display: flex;
45
+ flex-direction: column;
46
+ }
47
+
48
+ .layout--stacked .layout__container {
49
+ flex: 1;
50
+ display: flex;
51
+ flex-direction: column;
52
+ }
53
+
54
+ .layout--stacked .layout__main {
55
+ flex: 1;
56
+ overflow-y: auto;
57
+ overflow-x: hidden;
58
+ display: flex;
59
+ flex-direction: column;
60
+ }
61
+
62
+ .layout--stacked .layout__header {
63
+ flex-shrink: 0;
64
+ }
65
+
66
+ .layout--stacked .layout__footer {
67
+ flex-shrink: 0;
68
+ }
69
+
70
+ .layout--stacked .layout__bottom-bar {
71
+ flex-shrink: 0;
72
+ }
73
+
74
+ /* ===== SIDEBAR-MAIN-SIDEBAR VARIANT ===== */
75
+ /* coluna1 (sidebar) + coluna2 (page: header + main + footer) + coluna3 (sidebar) */
76
+ .layout--sidebar-main-sidebar {
77
+ display: flex;
78
+ flex-direction: row;
79
+ min-height: 100vh;
80
+ }
81
+
82
+ .layout--sidebar-main-sidebar .layout__container {
83
+ flex: 1;
84
+ display: flex;
85
+ flex-direction: column;
86
+ min-width: 0; /* Prevent flex overflow */
87
+ max-height: 100vh;
88
+ overflow-y: auto;
89
+ overflow-x: hidden;
90
+ }
91
+
92
+ .layout--sidebar-main-sidebar .layout__sidebar {
93
+ flex-shrink: 0;
94
+ /* width is set dynamically via inline styles */
95
+ max-height: 100vh;
96
+ background-color: var(--color-bg-1);
97
+ border-right: 1px solid var(--color-foreground-2);
98
+ border-right-color: rgba(0, 0, 0, 0.1);
99
+ overflow-y: auto;
100
+ overflow-x: hidden;
101
+ }
102
+
103
+ .layout--sidebar-main-sidebar .layout__sidebar--right {
104
+ border-right: none;
105
+ border-left: 1px solid var(--color-foreground-2);
106
+ border-left-color: rgba(0, 0, 0, 0.1);
107
+ background-color: var(--color-bg-2);
108
+ }
109
+
110
+ /* Drag Handle in Layout */
111
+ .layout--sidebar-main-sidebar .drag-handle {
112
+ flex-shrink: 0;
113
+ }
114
+
115
+ .layout--sidebar-main-sidebar .layout__container {
116
+ flex: 1;
117
+ display: flex;
118
+ flex-direction: column;
119
+ min-width: 0; /* Prevent flex overflow */
120
+ }
121
+
122
+ .layout--sidebar-main-sidebar .layout__main {
123
+ flex: 1;
124
+ overflow-y: auto;
125
+ overflow-x: hidden;
126
+ display: flex;
127
+ flex-direction: column;
128
+ }
129
+
130
+ .layout--sidebar-main-sidebar .layout__header {
131
+ flex-shrink: 0;
132
+ }
133
+
134
+ .layout--sidebar-main-sidebar .layout__footer {
135
+ flex-shrink: 0;
136
+ }
137
+
138
+ .layout--sidebar-main-sidebar .layout__bottom-bar {
139
+ flex-shrink: 0;
140
+ }
141
+
142
+ /* ===== SHARED STYLES ===== */
143
+ .layout__header,
144
+ .layout__page-header {
145
+ background-color: var(--color-bg-1);
146
+ border-bottom: 1px solid var(--color-foreground-2);
147
+ border-bottom-color: rgba(0, 0, 0, 0.1);
148
+ padding: var(--spacing-6) var(--spacing-4);
149
+ transition: all var(--transition-base, 0.2s ease);
150
+ }
151
+
152
+ .layout__footer,
153
+ .layout__page-footer {
154
+ background-color: var(--color-bg-1);
155
+ border-top: 1px solid var(--color-foreground-2);
156
+ border-top-color: rgba(0, 0, 0, 0.1);
157
+ /* padding: var(--spacing-6) var(--spacing-4); */
158
+ transition: all var(--transition-base, 0.2s ease);
159
+ margin-top: auto;
160
+ }
161
+
162
+
163
+
164
+ /* ===== RESPONSIVE ===== */
165
+ @media (max-width: 1024px) {
166
+ .layout--sidebar-main-sidebar .layout__sidebar {
167
+ width: 240px;
168
+ }
169
+ }
170
+
171
+ @media (max-width: 768px) {
172
+ .layout--sidebar-main-sidebar {
173
+ flex-direction: column;
174
+ }
175
+
176
+ .layout--sidebar-main-sidebar .layout__container {
177
+ flex-direction: column;
178
+ }
179
+
180
+ .layout--sidebar-main-sidebar .layout__sidebar {
181
+ width: 100%;
182
+ border-right: none;
183
+ border-bottom: 1px solid var(--color-foreground-2);
184
+ border-bottom-color: rgba(0, 0, 0, 0.1);
185
+ }
186
+
187
+ .layout--sidebar-main-sidebar .layout__sidebar--right {
188
+ border-left: none;
189
+ border-top: 1px solid var(--color-foreground-2);
190
+ border-top-color: rgba(0, 0, 0, 0.1);
191
+ border-bottom: none;
192
+ }
193
+ }
194
+
195
+ /* ===== BOTTOM BAR ===== */
196
+ .layout__bottom-bar {
197
+ flex-shrink: 0;
198
+ background-color: var(--color-bg-1);
199
+ border-top: 1px solid var(--color-foreground-2);
200
+ border-top-color: rgba(0, 0, 0, 0.1);
201
+ min-height: 60px;
202
+ display: flex;
203
+ align-items: center;
204
+ padding: 0 var(--spacing-4);
205
+ }
@@ -0,0 +1,140 @@
1
+ /**
2
+ * List Component Styles
3
+ * List and ListItem with action colors for interactive states
4
+ */
5
+
6
+ .list {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--spacing-1);
10
+ padding: 0;
11
+ margin: 0;
12
+ }
13
+
14
+ .list-item {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: var(--spacing-3);
18
+ padding: var(--spacing-1) var(--spacing-2);
19
+ border-radius: var(--radius-sm);
20
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-linear), color var(--motion-duration-fast) var(--motion-easing-linear);
21
+ color: var(--color-foreground-1);
22
+ background-color: transparent;
23
+ }
24
+
25
+ .list-item:not(:hover):not(:active) {
26
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-accelerate), color var(--motion-duration-fast) var(--motion-easing-accelerate);
27
+ }
28
+
29
+ /* Interactive items */
30
+ .list-item--interactive {
31
+ cursor: pointer;
32
+ user-select: none;
33
+ }
34
+
35
+ .list-item--interactive:hover:not(.list-item--disabled) {
36
+ background-color: var(--color-accent-hover);
37
+ }
38
+
39
+ .list-item--interactive:active:not(.list-item--disabled) {
40
+ background-color: var(--color-accent-active);
41
+ }
42
+
43
+ /* Focus state - uses action colors */
44
+ .list-item--interactive:focus-visible {
45
+ outline: 2px solid var(--color-action-primary);
46
+ outline-offset: 2px;
47
+ }
48
+
49
+ /* Selected state */
50
+ .list-item--selected {
51
+ background-color: hsla(
52
+ var(--accent-hue),
53
+ var(--accent-saturation),
54
+ var(--accent-lightness),
55
+ 0.12
56
+ );
57
+ color: var(--color-on-primary);
58
+ font-weight: 500;
59
+ }
60
+
61
+ .list-item--selected:hover:not(.list-item--disabled) {
62
+ background-color: var(--color-accent-active);
63
+ }
64
+
65
+ /* Disabled state */
66
+ .list-item--disabled {
67
+ cursor: not-allowed;
68
+ opacity: 0.5;
69
+ }
70
+
71
+ /* Icon */
72
+ .list-item__icon {
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ flex-shrink: 0;
77
+ color: var(--color-foreground-2);
78
+ }
79
+
80
+ .list-item--selected .list-item__icon {
81
+ color: var(--color-on-primary);
82
+ }
83
+
84
+ /* Content */
85
+ .list-item__content {
86
+ flex: 1;
87
+ font-size: var(--font-size-base);
88
+ display: flex;
89
+ flex-direction: column;
90
+ gap: var(--spacing-1);
91
+ }
92
+
93
+ /* Category */
94
+ .list-item__category {
95
+ font-size: var(--font-size-xs);
96
+ color: var(--color-foreground-3);
97
+ text-transform: uppercase;
98
+ letter-spacing: 0.5px;
99
+ font-weight: 600;
100
+ }
101
+
102
+ /* Category section */
103
+ .list-category {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: var(--spacing-2);
107
+ }
108
+
109
+ .list-category__title {
110
+ font-size: var(--font-size-sm);
111
+ font-weight: 600;
112
+ color: var(--color-foreground-2);
113
+ padding: var(--spacing-2) var(--spacing-2) 0;
114
+ text-transform: uppercase;
115
+ letter-spacing: 0.5px;
116
+ }
117
+
118
+ .list-category__items {
119
+ display: flex;
120
+ flex-direction: column;
121
+ gap: var(--spacing-1);
122
+ }
123
+
124
+ /* Selected indicator */
125
+ .list-item__indicator {
126
+ display: flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ flex-shrink: 0;
130
+ color: var(--color-action-primary);
131
+ }
132
+
133
+ /* Dark theme adjustments */
134
+ :root[data-theme="dark"] .list-item--interactive:hover:not(.list-item--disabled) {
135
+ background-color: var(--color-accent-hover);
136
+ }
137
+
138
+ :root[data-theme="dark"] .list-item--selected {
139
+ background-color: var(--color-accent-active);
140
+ }