@rokkit/themes 1.0.0-next.125 → 1.0.0-next.128

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 +118 -9
  2. package/build.mjs +237 -0
  3. package/package.json +43 -28
  4. package/src/base/breadcrumbs.css +46 -0
  5. package/src/base/button.css +247 -0
  6. package/src/base/card.css +36 -0
  7. package/src/base/carousel.css +122 -12
  8. package/src/base/connector.css +92 -0
  9. package/src/base/display.css +91 -0
  10. package/src/base/floating-action.css +388 -0
  11. package/src/base/floating-navigation.css +381 -0
  12. package/src/base/grid.css +93 -0
  13. package/src/base/index.css +39 -0
  14. package/src/base/input.css +198 -39
  15. package/src/base/item.css +78 -0
  16. package/src/base/list.css +179 -0
  17. package/src/base/menu.css +274 -0
  18. package/src/base/pill.css +57 -0
  19. package/src/base/progress.css +28 -15
  20. package/src/base/range.css +121 -0
  21. package/src/base/rating.css +40 -0
  22. package/src/base/reveal.css +37 -0
  23. package/src/base/search-filter.css +132 -0
  24. package/src/base/select.css +411 -0
  25. package/src/base/shine.css +14 -0
  26. package/src/base/stepper.css +140 -0
  27. package/src/base/switch.css +152 -0
  28. package/src/base/table.css +143 -33
  29. package/src/base/tabs.css +171 -0
  30. package/src/base/tilt.css +14 -0
  31. package/src/base/timeline.css +84 -0
  32. package/src/base/toggle.css +138 -0
  33. package/src/base/toolbar.css +337 -0
  34. package/src/base/tree.css +195 -11
  35. package/src/base/upload-progress.css +155 -0
  36. package/src/base/upload-target.css +67 -0
  37. package/src/glass/button.css +152 -0
  38. package/src/glass/floating-action.css +61 -0
  39. package/src/glass/floating-navigation.css +74 -0
  40. package/src/glass/index.css +23 -0
  41. package/src/glass/input.css +124 -0
  42. package/src/glass/list.css +122 -0
  43. package/src/glass/menu.css +92 -0
  44. package/src/glass/range.css +61 -0
  45. package/src/glass/search-filter.css +49 -0
  46. package/src/glass/select.css +178 -0
  47. package/src/glass/switch.css +28 -0
  48. package/src/glass/table.css +87 -0
  49. package/src/glass/tabs.css +58 -0
  50. package/src/glass/timeline.css +46 -0
  51. package/src/glass/toggle.css +48 -0
  52. package/src/glass/toolbar.css +84 -0
  53. package/src/glass/tree.css +104 -0
  54. package/src/index.css +18 -0
  55. package/src/index.js +25 -2
  56. package/src/material/button.css +153 -0
  57. package/src/material/floating-action.css +60 -0
  58. package/src/material/floating-navigation.css +74 -0
  59. package/src/material/index.css +23 -0
  60. package/src/material/input.css +118 -40
  61. package/src/material/list.css +90 -64
  62. package/src/material/menu.css +92 -0
  63. package/src/material/range.css +62 -0
  64. package/src/material/search-filter.css +49 -0
  65. package/src/material/select.css +170 -0
  66. package/src/material/switch.css +28 -0
  67. package/src/material/table.css +87 -0
  68. package/src/material/tabs.css +62 -0
  69. package/src/material/timeline.css +46 -0
  70. package/src/material/toggle.css +48 -0
  71. package/src/material/toolbar.css +84 -0
  72. package/src/material/tree.css +100 -0
  73. package/src/minimal/button.css +152 -0
  74. package/src/minimal/floating-action.css +59 -0
  75. package/src/minimal/floating-navigation.css +70 -0
  76. package/src/minimal/index.css +23 -0
  77. package/src/minimal/input.css +81 -120
  78. package/src/minimal/list.css +90 -104
  79. package/src/minimal/menu.css +88 -0
  80. package/src/minimal/range.css +61 -0
  81. package/src/minimal/search-filter.css +49 -0
  82. package/src/minimal/select.css +168 -0
  83. package/src/minimal/switch.css +28 -0
  84. package/src/minimal/table.css +87 -0
  85. package/src/minimal/tabs.css +53 -31
  86. package/src/minimal/timeline.css +45 -0
  87. package/src/minimal/toggle.css +48 -0
  88. package/src/minimal/toolbar.css +84 -0
  89. package/src/minimal/tree.css +100 -0
  90. package/src/rokkit/button.css +225 -0
  91. package/src/rokkit/connector.css +11 -0
  92. package/src/rokkit/floating-action.css +65 -0
  93. package/src/rokkit/floating-navigation.css +83 -0
  94. package/src/rokkit/grid.css +46 -0
  95. package/src/rokkit/index.css +27 -0
  96. package/src/rokkit/input.css +130 -0
  97. package/src/rokkit/list.css +127 -0
  98. package/src/rokkit/menu.css +93 -0
  99. package/src/rokkit/range.css +62 -0
  100. package/src/rokkit/search-filter.css +49 -0
  101. package/src/rokkit/select.css +185 -0
  102. package/src/rokkit/switch.css +28 -0
  103. package/src/rokkit/table.css +68 -38
  104. package/src/rokkit/tabs.css +82 -0
  105. package/src/rokkit/timeline.css +46 -0
  106. package/src/rokkit/toggle.css +36 -52
  107. package/src/rokkit/toolbar.css +84 -0
  108. package/src/rokkit/tree.css +123 -0
  109. package/src/rokkit/upload-progress.css +102 -0
  110. package/src/rokkit/upload-target.css +50 -0
  111. package/src/base/alert.css +0 -30
  112. package/src/base/animation.css +0 -37
  113. package/src/base/atoms.css +0 -58
  114. package/src/base/core.css +0 -107
  115. package/src/base/layout.css +0 -65
  116. package/src/base/molecules.css +0 -109
  117. package/src/base/organisms.css +0 -66
  118. package/src/base/scrollbar.css +0 -16
  119. package/src/base/toggles.css +0 -17
  120. package/src/base.css +0 -13
  121. package/src/markdown.css +0 -955
  122. package/src/material/base.css +0 -12
  123. package/src/material/form.css +0 -30
  124. package/src/material.css +0 -9
  125. package/src/minimal/base.css +0 -8
  126. package/src/minimal/form.css +0 -87
  127. package/src/minimal.css +0 -11
  128. package/src/mixins/mixins.scss +0 -66
  129. package/src/mixins/palette.scss +0 -48
  130. package/src/prism.css +0 -102
  131. package/src/rokkit/alert.css +0 -4
  132. package/src/rokkit/atoms.css +0 -52
  133. package/src/rokkit/carousel.css +0 -19
  134. package/src/rokkit/layout.css +0 -17
  135. package/src/rokkit/molecules.css +0 -124
  136. package/src/rokkit/organisms.css +0 -307
  137. package/src/rokkit.css +0 -11
@@ -1,67 +1,226 @@
1
- /* Layout Styles for InputField (base/input.css)
2
- - Only structure, spacing, sizing, flex, and layout-related properties
3
- - No colors, gradients, or theme tokens here
4
- - Uses data-attribute selectors, not tag or class names
5
- */
1
+ /* Base structural styles for form fields and inputs */
6
2
 
7
- /* Root container: vertical stack, spacing, border radius, border width */
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 */
8
109
  [data-field-root] {
9
- @apply box-border flex flex-col gap-1 rounded-md border p-2;
110
+ @apply box-border flex flex-col;
10
111
  }
11
112
 
12
- /* Disabled state: layout only (theme handles color/cursor) */
13
- [data-field-root][data-field-disabled] {
14
- /* No layout changes needed for disabled in base */
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;
15
122
  }
16
123
 
17
- /* Error state: layout only (theme handles color/bg) */
18
- [data-field-root][data-field-state='fail'] {
19
- /* No layout changes needed for error in base */
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;
20
128
  }
21
129
 
22
- /* Label: spacing and font size */
23
- [data-field-root] > label,
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 */
24
141
  [data-field] > label {
25
- @apply mb-1 text-xs leading-tight;
26
- display: block;
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;
27
160
  }
28
161
 
29
- /* Input wrapper: horizontal layout for input and icon */
30
- [data-field] {
31
- @apply flex min-h-8 items-center gap-2;
162
+ /* Input wrapper: horizontal for input + icon */
163
+ [data-input-root] {
164
+ @apply flex flex-row items-center;
32
165
  }
33
166
 
34
- /* Icon inside input: size and alignment */
35
- [data-field] [data-icon] {
36
- @apply h-5 w-5 flex-shrink-0;
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;
37
172
  }
38
173
 
39
- /* Input element: fill available width, spacing */
40
- [data-field] input,
41
- [data-field] textarea,
42
- [data-field] select {
43
- @apply box-border min-w-0 flex-1;
174
+ /* Icons inside inputs */
175
+ [data-input-root] [data-icon] {
176
+ @apply aspect-square min-h-full flex-shrink-0;
44
177
  }
45
178
 
46
179
  /* Description below input */
47
180
  [data-description] {
48
- @apply mt-1 text-xs leading-snug;
181
+ @apply text-xs leading-snug;
49
182
  }
50
183
 
51
- /* Message below input (validation, info, etc.) */
184
+ /* Validation message */
52
185
  [data-message] {
53
- @apply mt-1 text-xs leading-snug;
186
+ @apply text-xs leading-snug;
54
187
  }
55
- [data-field-root] > [data-field] {
56
- @apply flex flex-col gap-2;
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;
57
211
  }
58
212
 
59
- /* Checkbox and switch inline with input */
60
- [data-field-root][data-field-type='switch'] > [data-field] {
61
- @applyf flex-row items-center;
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;
62
220
  }
63
- [data-field-root][data-field-type='checkbox'] > [data-field] {
64
- @applyf flex-row-reverse items-center;
221
+
222
+ [data-input-root] [data-input-icon] {
223
+ @apply mx-2 aspect-square min-h-full flex-shrink-0;
65
224
  }
66
225
 
67
226
  /* Responsive adjustments */
@@ -74,6 +233,6 @@
74
233
  }
75
234
  [data-description],
76
235
  [data-message] {
77
- @apply text-[11px];
236
+ @apply text-sm;
78
237
  }
79
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
+ }