@rokkit/themes 1.0.0-next.14 → 1.0.0-next.140

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 (125) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +106 -9
  3. package/build.mjs +235 -0
  4. package/dist/base.css +4934 -0
  5. package/dist/glass.css +1400 -0
  6. package/dist/index.css +10991 -0
  7. package/dist/material.css +1435 -0
  8. package/dist/minimal.css +1389 -0
  9. package/dist/rokkit.css +1829 -0
  10. package/package.json +53 -52
  11. package/src/base/breadcrumbs.css +47 -0
  12. package/src/base/button.css +254 -0
  13. package/src/base/card.css +36 -0
  14. package/src/base/carousel.css +128 -0
  15. package/src/base/connector.css +92 -0
  16. package/src/base/display.css +91 -0
  17. package/src/base/floating-action.css +388 -0
  18. package/src/base/floating-navigation.css +405 -0
  19. package/src/base/graph-paper.css +83 -0
  20. package/src/base/grid.css +93 -0
  21. package/src/base/index.css +40 -0
  22. package/src/base/input.css +238 -0
  23. package/src/base/item.css +78 -0
  24. package/src/base/list.css +179 -0
  25. package/src/base/menu.css +274 -0
  26. package/src/base/pill.css +57 -0
  27. package/src/base/progress.css +34 -0
  28. package/src/base/range.css +121 -0
  29. package/src/base/rating.css +42 -0
  30. package/src/base/reveal.css +37 -0
  31. package/src/base/search-filter.css +132 -0
  32. package/src/base/select.css +411 -0
  33. package/src/base/shine.css +14 -0
  34. package/src/base/stepper.css +140 -0
  35. package/src/base/switch.css +152 -0
  36. package/src/base/table.css +159 -0
  37. package/src/base/tabs.css +171 -0
  38. package/src/base/tilt.css +14 -0
  39. package/src/base/timeline.css +84 -0
  40. package/src/base/toggle.css +138 -0
  41. package/src/base/toolbar.css +337 -0
  42. package/src/base/tree.css +235 -0
  43. package/src/base/upload-progress.css +155 -0
  44. package/src/base/upload-target.css +67 -0
  45. package/src/glass/button.css +153 -0
  46. package/src/glass/card.css +66 -0
  47. package/src/glass/floating-action.css +61 -0
  48. package/src/glass/floating-navigation.css +74 -0
  49. package/src/glass/index.css +23 -0
  50. package/src/glass/input.css +126 -0
  51. package/src/glass/list.css +122 -0
  52. package/src/glass/menu.css +92 -0
  53. package/src/glass/range.css +61 -0
  54. package/src/glass/search-filter.css +49 -0
  55. package/src/glass/select.css +178 -0
  56. package/src/glass/switch.css +28 -0
  57. package/src/glass/table.css +87 -0
  58. package/src/glass/tabs.css +58 -0
  59. package/src/glass/timeline.css +46 -0
  60. package/src/glass/toggle.css +48 -0
  61. package/src/glass/toolbar.css +84 -0
  62. package/src/glass/tree.css +110 -0
  63. package/src/index.css +18 -0
  64. package/src/index.js +25 -2
  65. package/src/material/button.css +157 -0
  66. package/src/material/card.css +61 -0
  67. package/src/material/floating-action.css +60 -0
  68. package/src/material/floating-navigation.css +74 -0
  69. package/src/material/index.css +23 -0
  70. package/src/material/input.css +159 -0
  71. package/src/material/list.css +126 -0
  72. package/src/material/menu.css +92 -0
  73. package/src/material/range.css +62 -0
  74. package/src/material/search-filter.css +49 -0
  75. package/src/material/select.css +170 -0
  76. package/src/material/switch.css +28 -0
  77. package/src/material/table.css +91 -0
  78. package/src/material/tabs.css +62 -0
  79. package/src/material/timeline.css +46 -0
  80. package/src/material/toggle.css +48 -0
  81. package/src/material/toolbar.css +85 -0
  82. package/src/material/tree.css +103 -0
  83. package/src/minimal/button.css +155 -0
  84. package/src/minimal/card.css +61 -0
  85. package/src/minimal/floating-action.css +59 -0
  86. package/src/minimal/floating-navigation.css +70 -0
  87. package/src/minimal/index.css +23 -0
  88. package/src/minimal/input.css +119 -0
  89. package/src/minimal/list.css +126 -0
  90. package/src/minimal/menu.css +88 -0
  91. package/src/minimal/range.css +61 -0
  92. package/src/minimal/search-filter.css +49 -0
  93. package/src/minimal/select.css +170 -0
  94. package/src/minimal/switch.css +28 -0
  95. package/src/minimal/table.css +89 -0
  96. package/src/minimal/tabs.css +68 -0
  97. package/src/minimal/timeline.css +45 -0
  98. package/src/minimal/toggle.css +48 -0
  99. package/src/minimal/toolbar.css +85 -0
  100. package/src/minimal/tree.css +106 -0
  101. package/src/palette.css +7 -0
  102. package/src/rokkit/button.css +254 -0
  103. package/src/rokkit/card.css +64 -0
  104. package/src/rokkit/connector.css +11 -0
  105. package/src/rokkit/floating-action.css +65 -0
  106. package/src/rokkit/floating-navigation.css +83 -0
  107. package/src/rokkit/grid.css +46 -0
  108. package/src/rokkit/index.css +27 -0
  109. package/src/rokkit/input.css +134 -0
  110. package/src/rokkit/list.css +132 -0
  111. package/src/rokkit/menu.css +93 -0
  112. package/src/rokkit/range.css +62 -0
  113. package/src/rokkit/search-filter.css +49 -0
  114. package/src/rokkit/select.css +190 -0
  115. package/src/rokkit/switch.css +28 -0
  116. package/src/rokkit/table.css +89 -0
  117. package/src/rokkit/tabs.css +87 -0
  118. package/src/rokkit/timeline.css +46 -0
  119. package/src/rokkit/toggle.css +48 -0
  120. package/src/rokkit/toolbar.css +84 -0
  121. package/src/rokkit/tree.css +149 -0
  122. package/src/rokkit/upload-progress.css +102 -0
  123. package/src/rokkit/upload-target.css +50 -0
  124. package/src/constants.js +0 -4
  125. package/src/utils.js +0 -88
@@ -0,0 +1,238 @@
1
+ /* Base structural styles for form fields and inputs */
2
+
3
+ /* Form root: vertical stack */
4
+ [data-form-root] {
5
+ @apply flex flex-col gap-3;
6
+ }
7
+
8
+ /* Form field container */
9
+ [data-form-field] {
10
+ @apply flex flex-col;
11
+ }
12
+
13
+ /* Separator between form fields */
14
+ [data-form-separator] {
15
+ @apply border-surface-z2 my-1 border-t;
16
+ }
17
+
18
+ /* Form group (fieldset for nested objects) */
19
+ [data-form-group] {
20
+ @apply border-surface-z2 m-0 flex flex-col gap-3 border-l border-none p-0 pl-3;
21
+ }
22
+
23
+ [data-form-group-label] {
24
+ @apply pb-1 text-xs font-semibold;
25
+ }
26
+
27
+ /* Validation report */
28
+ [data-validation-report] {
29
+ @apply flex flex-col gap-2;
30
+ }
31
+
32
+ [data-validation-group] {
33
+ @apply flex flex-col gap-0.5;
34
+ }
35
+
36
+ [data-validation-group-header] {
37
+ @apply flex items-center gap-1.5 py-1 text-xs font-semibold;
38
+ }
39
+
40
+ [data-validation-count] {
41
+ @apply inline-flex h-[18px] min-w-[18px] items-center justify-center rounded-full px-1 text-[10px] font-bold;
42
+ }
43
+
44
+ [data-severity='error'] > [data-validation-group-header] {
45
+ @apply text-error;
46
+ }
47
+
48
+ [data-severity='error'] [data-validation-count] {
49
+ @apply bg-error-z1 text-error-z7;
50
+ }
51
+
52
+ [data-severity='warning'] > [data-validation-group-header] {
53
+ @apply text-warning;
54
+ }
55
+
56
+ [data-severity='warning'] [data-validation-count] {
57
+ @apply bg-warning-z1 text-warning-z7;
58
+ }
59
+
60
+ [data-severity='info'] > [data-validation-group-header] {
61
+ @apply text-info;
62
+ }
63
+
64
+ [data-severity='info'] [data-validation-count] {
65
+ @apply bg-info-z1 text-info-z7;
66
+ }
67
+
68
+ [data-severity='success'] > [data-validation-group-header] {
69
+ @apply text-success;
70
+ }
71
+
72
+ [data-severity='success'] [data-validation-count] {
73
+ @apply bg-success-z1 text-success-z7;
74
+ }
75
+
76
+ [data-validation-item] {
77
+ @apply rounded px-2 py-0.5 text-left text-xs;
78
+ }
79
+
80
+ button[data-validation-item] {
81
+ @apply hover:bg-surface-z1 cursor-pointer border-none bg-transparent;
82
+ }
83
+
84
+ /* Form actions (submit/reset buttons) */
85
+ [data-form-actions] {
86
+ @apply flex flex-row justify-end gap-2 pt-2;
87
+ }
88
+
89
+ button[data-form-submit],
90
+ button[data-form-reset] {
91
+ @apply border-surface-z3 bg-surface-z1 hover:bg-surface-z2 cursor-pointer rounded border px-4 py-1.5 text-sm transition-colors;
92
+ }
93
+
94
+ button[data-form-submit] {
95
+ @apply bg-primary text-on-primary border-primary hover:opacity-90;
96
+ }
97
+
98
+ button[data-form-submit]:disabled,
99
+ button[data-form-reset]:disabled {
100
+ @apply cursor-not-allowed opacity-50;
101
+ }
102
+
103
+ /* Submitting state: reduce interactivity */
104
+ [data-form-submitting] > :not([data-form-actions]) {
105
+ @apply pointer-events-none opacity-60;
106
+ }
107
+
108
+ /* Field root container */
109
+ [data-field-root] {
110
+ @apply box-border flex flex-col;
111
+ }
112
+
113
+ /* Field wrapper: vertical by default */
114
+ [data-field-root] > [data-field] {
115
+ @apply flex flex-col gap-1;
116
+ }
117
+
118
+ /* Checkbox and switch: inline layout */
119
+ [data-field-type='switch'] > [data-field],
120
+ [data-field-type='checkbox'] > [data-field] {
121
+ @apply flex-row items-center gap-2;
122
+ }
123
+
124
+ /* Select: stretch to fill input wrapper — display:flex eliminates inline-block gap */
125
+ [data-input-root] [data-select] {
126
+ @apply flex-1 self-stretch;
127
+ display: flex;
128
+ }
129
+
130
+ [data-input-root] [data-select] [data-select-trigger] {
131
+ @apply flex-1 self-stretch;
132
+ min-width: 0;
133
+ }
134
+
135
+ /* Checkbox icon */
136
+ [data-checkbox-root] {
137
+ @apply flex items-center;
138
+ }
139
+
140
+ /* Label: fills available space */
141
+ [data-field] > label {
142
+ @apply flex-1 text-xs;
143
+ }
144
+
145
+ /* Info field: horizontal layout */
146
+ [data-field-type='info'] > [data-field] {
147
+ @apply flex-row items-center justify-between;
148
+ }
149
+
150
+ [data-field-info] {
151
+ @apply font-mono text-xs;
152
+ }
153
+
154
+ /* Numeric/date input alignment */
155
+ [data-field-type='number'] input,
156
+ [data-field-type='integer'] input,
157
+ [data-field-type='date'] input,
158
+ [data-field-type='time'] input {
159
+ @apply text-right;
160
+ }
161
+
162
+ /* Input wrapper: horizontal for input + icon */
163
+ [data-input-root] {
164
+ @apply flex flex-row items-center;
165
+ }
166
+
167
+ /* Input elements fill available width */
168
+ [data-input-root] input,
169
+ [data-input-root] textarea,
170
+ [data-input-root] select {
171
+ @apply m-0 min-w-0 flex-1 leading-loose transition-all;
172
+ }
173
+
174
+ /* Icons inside inputs */
175
+ [data-input-root] [data-icon] {
176
+ @apply aspect-square min-h-full flex-shrink-0;
177
+ }
178
+
179
+ /* Description below input */
180
+ [data-description] {
181
+ @apply text-xs leading-snug;
182
+ }
183
+
184
+ /* Validation message */
185
+ [data-message] {
186
+ @apply text-xs leading-snug;
187
+ }
188
+
189
+ /* Checkbox icon: focus handling */
190
+ [data-checkbox-icon] {
191
+ @apply focus:outline-none;
192
+ }
193
+
194
+ /* Range slider thumb */
195
+ input[type='range']::-webkit-slider-thumb {
196
+ appearance: none;
197
+ height: 16px;
198
+ width: 16px;
199
+ border-radius: 50%;
200
+ background: rgba(var(--color-primary-500));
201
+ cursor: pointer;
202
+ }
203
+
204
+ input[type='range']::-moz-range-thumb {
205
+ height: 16px;
206
+ width: 16px;
207
+ border-radius: 50%;
208
+ background: rgba(var(--color-primary-500));
209
+ cursor: pointer;
210
+ border: none;
211
+ }
212
+
213
+ /* Color input */
214
+ input[type='color'] {
215
+ appearance: none;
216
+ -webkit-appearance: none;
217
+ -moz-appearance: none;
218
+ background: none;
219
+ @apply p-0;
220
+ }
221
+
222
+ [data-input-root] [data-input-icon] {
223
+ @apply mx-2 aspect-square min-h-full flex-shrink-0;
224
+ }
225
+
226
+ /* Responsive adjustments */
227
+ @media (max-width: 640px) {
228
+ [data-field-root] {
229
+ @apply p-1;
230
+ }
231
+ [data-field] {
232
+ @apply min-h-7 gap-1;
233
+ }
234
+ [data-description],
235
+ [data-message] {
236
+ @apply text-sm;
237
+ }
238
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Item Content - Base Structural Styles
3
+ *
4
+ * Shared styles for icon, text, description, and badge elements
5
+ * used by List, Tree, and other components.
6
+ */
7
+
8
+ /* =============================================================================
9
+ Item Icon
10
+ ============================================================================= */
11
+
12
+ [data-item-icon] {
13
+ flex-shrink: 0;
14
+ }
15
+
16
+ /* =============================================================================
17
+ Item Avatar
18
+ ============================================================================= */
19
+
20
+ [data-item-avatar] {
21
+ flex-shrink: 0;
22
+ width: 1.5em;
23
+ height: 1.5em;
24
+ border-radius: 9999px;
25
+ object-fit: cover;
26
+ }
27
+
28
+ /* =============================================================================
29
+ Item Text Container
30
+ ============================================================================= */
31
+
32
+ [data-item-text] {
33
+ display: flex;
34
+ flex-direction: column;
35
+ flex: 1;
36
+ min-width: 0;
37
+ }
38
+
39
+ [data-item-label] {
40
+ font-weight: 500;
41
+ white-space: nowrap;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
44
+ }
45
+
46
+ [data-item-description] {
47
+ font-size: 0.75em;
48
+ white-space: nowrap;
49
+ overflow: hidden;
50
+ text-overflow: ellipsis;
51
+ }
52
+
53
+ /* =============================================================================
54
+ Item Badge
55
+ ============================================================================= */
56
+
57
+ [data-item-badge] {
58
+ flex-shrink: 0;
59
+ margin-left: auto;
60
+ padding: 0.125rem 0.375rem;
61
+ font-size: 0.75em;
62
+ font-weight: 500;
63
+ border-radius: 9999px;
64
+ }
65
+
66
+ /* =============================================================================
67
+ Item Shortcut
68
+ ============================================================================= */
69
+
70
+ [data-item-shortcut] {
71
+ flex-shrink: 0;
72
+ margin-left: auto;
73
+ padding: 0.125rem 0.375rem;
74
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
75
+ font-size: 0.75em;
76
+ font-weight: 500;
77
+ border-radius: 0.25rem;
78
+ }
@@ -0,0 +1,179 @@
1
+ /**
2
+ * List - Base Structural Styles
3
+ *
4
+ * These styles provide layout, positioning, and basic structure.
5
+ * No colors, shadows, or visual theming - those belong in theme styles.
6
+ */
7
+
8
+ /* =============================================================================
9
+ List Container
10
+ ============================================================================= */
11
+
12
+ [data-list] {
13
+ display: flex;
14
+ flex-direction: column;
15
+ }
16
+
17
+ [data-list][data-disabled='true'] {
18
+ pointer-events: none;
19
+ opacity: 0.5;
20
+ }
21
+
22
+ [dir='rtl'] [data-list] [data-list-item] {
23
+ flex-direction: row-reverse;
24
+ text-align: right;
25
+ }
26
+
27
+ /* =============================================================================
28
+ List Items (shared for links and buttons)
29
+ ============================================================================= */
30
+
31
+ [data-list-item] {
32
+ display: flex;
33
+ align-items: center;
34
+ width: 100%;
35
+ text-align: left;
36
+ text-decoration: none;
37
+ cursor: pointer;
38
+ transition:
39
+ background-color 150ms ease,
40
+ color 150ms ease;
41
+ }
42
+
43
+ a[data-list-item],
44
+ button[data-list-item] {
45
+ display: flex;
46
+ align-items: center;
47
+ gap: 0.75rem;
48
+ padding: 0.375rem 0.75rem;
49
+ font-size: 0.875rem;
50
+ text-decoration: none;
51
+ cursor: pointer;
52
+ transition:
53
+ background-color 150ms ease,
54
+ color 150ms ease;
55
+ }
56
+
57
+ [data-list-item][data-disabled='true'],
58
+ [data-list-item]:disabled {
59
+ pointer-events: none;
60
+ opacity: 0.5;
61
+ cursor: not-allowed;
62
+ }
63
+
64
+ [data-list-item]:focus {
65
+ outline: none;
66
+ }
67
+
68
+ /* Size variants for items */
69
+ [data-list][data-size='sm'] [data-list-item],
70
+ [data-list][data-size='sm'] a[data-list-item],
71
+ [data-list][data-size='sm'] button[data-list-item] {
72
+ gap: 0.5rem;
73
+ padding: 0.25rem 0.5rem;
74
+ font-size: 0.75rem;
75
+ }
76
+
77
+ [data-list][data-size='md'] [data-list-item],
78
+ [data-list]:not([data-size]) [data-list-item],
79
+ [data-list][data-size='md'] a[data-list-item],
80
+ [data-list]:not([data-size]) a[data-list-item],
81
+ [data-list][data-size='md'] button[data-list-item],
82
+ [data-list]:not([data-size]) button[data-list-item] {
83
+ gap: 0.625rem;
84
+ padding: 0.375rem 0.75rem;
85
+ font-size: 0.875rem;
86
+ }
87
+
88
+ [data-list][data-size='lg'] [data-list-item],
89
+ [data-list][data-size='lg'] a[data-list-item],
90
+ [data-list][data-size='lg'] button[data-list-item] {
91
+ gap: 0.75rem;
92
+ padding: 0.5rem 1rem;
93
+ font-size: 1rem;
94
+ }
95
+
96
+ /* =============================================================================
97
+ Item Elements - uses shared [data-item-*] from item.css
98
+ ============================================================================= */
99
+
100
+ /* =============================================================================
101
+ Groups
102
+ ============================================================================= */
103
+
104
+ [data-list-group] {
105
+ display: flex;
106
+ align-items: center;
107
+ width: 100%;
108
+ gap: 0.5rem;
109
+ padding-block: 0.25rem;
110
+ font-size: 0.75rem;
111
+ font-weight: 600;
112
+ text-transform: uppercase;
113
+ letter-spacing: 0.05em;
114
+ cursor: pointer;
115
+ transition: color 150ms ease;
116
+ }
117
+
118
+ /* Non-collapsible group labels are not interactive */
119
+ [data-list]:not([data-collapsible='true']) [data-list-group] {
120
+ cursor: default;
121
+ }
122
+
123
+ [data-list-group]:focus {
124
+ outline: none;
125
+ }
126
+
127
+ /* Group label sizes */
128
+ [data-list][data-size='sm'] [data-list-group] {
129
+ padding: 0.25rem 0.5rem;
130
+ }
131
+ [data-list][data-size='md'] [data-list-group],
132
+ [data-list]:not([data-size]) [data-list-group] {
133
+ padding: 0.375rem 0.75rem;
134
+ }
135
+ [data-list][data-size='lg'] [data-list-group] {
136
+ padding: 0.5rem 1rem;
137
+ }
138
+
139
+ /* Group item content — inherits font from [data-list-group], label stays inline */
140
+ [data-list-group] > [data-item-icon] {
141
+ opacity: 0.7;
142
+ }
143
+
144
+ [data-list-group] > [data-item-text] {
145
+ display: contents;
146
+ }
147
+
148
+ [data-list-group] [data-item-label] {
149
+ font-weight: inherit;
150
+ }
151
+
152
+ /* Expand/collapse chevron — pushed to the right edge */
153
+ [data-list-expand-icon] {
154
+ flex-shrink: 0;
155
+ margin-left: auto;
156
+ transition: transform 150ms ease;
157
+ }
158
+
159
+ /* =============================================================================
160
+ Multi-selection
161
+ ============================================================================= */
162
+
163
+ [data-list][data-multiselect='true'] [data-list-item] {
164
+ user-select: none;
165
+ }
166
+
167
+ /* =============================================================================
168
+ Separator / Spacer
169
+ ============================================================================= */
170
+
171
+ [data-list-separator] {
172
+ height: 1px;
173
+ margin-block: 0.25rem;
174
+ border: none;
175
+ }
176
+
177
+ [data-list-spacer] {
178
+ height: 0.5rem;
179
+ }