@skewedaspect/sleekspace-ui 0.9.0 → 0.10.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 (210) hide show
  1. package/dist/components/Accordion/context.d.ts +4 -0
  2. package/dist/components/Autocomplete/SkAutocomplete.vue.d.ts +87 -0
  3. package/dist/components/Autocomplete/SkAutocompleteEmpty.vue.d.ts +17 -0
  4. package/dist/components/Autocomplete/SkAutocompleteGroup.vue.d.ts +17 -0
  5. package/dist/components/Autocomplete/SkAutocompleteGroupLabel.vue.d.ts +17 -0
  6. package/dist/components/Autocomplete/SkAutocompleteItem.vue.d.ts +39 -0
  7. package/dist/components/Autocomplete/SkAutocompleteSeparator.vue.d.ts +2 -0
  8. package/dist/components/Autocomplete/index.d.ts +7 -0
  9. package/dist/components/Autocomplete/types.d.ts +3 -0
  10. package/dist/components/Breadcrumbs/context.d.ts +4 -0
  11. package/dist/components/Button/SkButton.vue.d.ts +8 -1
  12. package/dist/components/Button/types.d.ts +2 -0
  13. package/dist/components/Card/SkCard.vue.d.ts +1 -1
  14. package/dist/components/ContextMenu/context.d.ts +3 -0
  15. package/dist/components/Dropdown/SkDropdown.vue.d.ts +1 -1
  16. package/dist/components/Dropdown/context.d.ts +3 -0
  17. package/dist/components/Field/SkField.vue.d.ts +7 -6
  18. package/dist/components/Input/SkInput.vue.d.ts +9 -2
  19. package/dist/components/Input/types.d.ts +2 -0
  20. package/dist/components/InputGroup/SkInputGroup.vue.d.ts +23 -0
  21. package/dist/components/InputGroup/SkInputGroupAddon.vue.d.ts +33 -0
  22. package/dist/components/InputGroup/types.d.ts +13 -0
  23. package/dist/components/NumberInput/SkNumberInput.vue.d.ts +15 -1
  24. package/dist/components/NumberInput/types.d.ts +2 -0
  25. package/dist/components/Pagination/context.d.ts +5 -0
  26. package/dist/components/Panel/SkPanel.vue.d.ts +1 -1
  27. package/dist/components/Panel/types.d.ts +2 -1
  28. package/dist/components/Radio/context.d.ts +4 -0
  29. package/dist/components/Select/SkSelect.vue.d.ts +7 -1
  30. package/dist/components/Select/types.d.ts +2 -0
  31. package/dist/components/Sidebar/SkSidebar.vue.d.ts +1 -1
  32. package/dist/components/Tabs/context.d.ts +6 -0
  33. package/dist/components/Textarea/SkTextarea.vue.d.ts +1 -1
  34. package/dist/components/Tooltip/SkTooltip.vue.d.ts +1 -1
  35. package/dist/composables/injectionKeys.d.ts +9 -0
  36. package/dist/global.d.ts +4 -0
  37. package/dist/index.d.ts +18 -0
  38. package/dist/sleekspace-ui.css +836 -280
  39. package/dist/sleekspace-ui.es.js +3759 -2545
  40. package/dist/sleekspace-ui.umd.js +3765 -2543
  41. package/dist/static/components/alert.d.ts +2 -1
  42. package/dist/static/components/avatar.d.ts +2 -1
  43. package/dist/static/components/breadcrumbs.d.ts +2 -1
  44. package/dist/static/components/button.d.ts +4 -2
  45. package/dist/static/components/card.d.ts +2 -1
  46. package/dist/static/components/checkbox.d.ts +2 -1
  47. package/dist/static/components/colorPicker.d.ts +2 -1
  48. package/dist/static/components/divider.d.ts +2 -1
  49. package/dist/static/components/dropdown.d.ts +2 -1
  50. package/dist/static/components/field.d.ts +2 -1
  51. package/dist/static/components/group.d.ts +2 -1
  52. package/dist/static/components/input.d.ts +4 -2
  53. package/dist/static/components/inputGroup.d.ts +8 -0
  54. package/dist/static/components/inputGroupAddon.d.ts +7 -0
  55. package/dist/static/components/navBar.d.ts +2 -1
  56. package/dist/static/components/numberInput.d.ts +4 -2
  57. package/dist/static/components/page.d.ts +2 -1
  58. package/dist/static/components/pagination.d.ts +2 -1
  59. package/dist/static/components/panel.d.ts +2 -1
  60. package/dist/static/components/progress.d.ts +2 -1
  61. package/dist/static/components/radio.d.ts +2 -1
  62. package/dist/static/components/select.d.ts +4 -2
  63. package/dist/static/components/sidebar.d.ts +2 -1
  64. package/dist/static/components/skeleton.d.ts +2 -1
  65. package/dist/static/components/slider.d.ts +2 -1
  66. package/dist/static/components/spinner.d.ts +2 -1
  67. package/dist/static/components/switchInput.d.ts +2 -1
  68. package/dist/static/components/table.d.ts +2 -1
  69. package/dist/static/components/tag.d.ts +2 -1
  70. package/dist/static/components/tagsInput.d.ts +2 -1
  71. package/dist/static/components/textarea.d.ts +2 -1
  72. package/dist/static/components/toolbar.d.ts +2 -1
  73. package/dist/static/components/tooltip.d.ts +2 -1
  74. package/dist/static/h.d.ts +2 -0
  75. package/dist/static/index.cjs.js +1 -1
  76. package/dist/static/index.d.ts +6 -0
  77. package/dist/static/index.es.js +366 -216
  78. package/dist/static/render.d.ts +2 -1
  79. package/dist/static/stringH.d.ts +2 -0
  80. package/dist/static/types.d.ts +5 -0
  81. package/dist/tailwind.css +222 -0
  82. package/dist/tokens.css +0 -223
  83. package/dist/types/corners.d.ts +1 -0
  84. package/dist/utils/slots.d.ts +6 -0
  85. package/llms-full.txt +17 -9
  86. package/package.json +9 -3
  87. package/src/components/Accordion/SkAccordion.vue +5 -2
  88. package/src/components/Accordion/SkAccordionItem.vue +7 -4
  89. package/src/components/Accordion/context.ts +23 -0
  90. package/src/components/Alert/SkAlert.vue +4 -2
  91. package/src/components/Autocomplete/SkAutocomplete.test.ts +83 -0
  92. package/src/components/Autocomplete/SkAutocomplete.vue +305 -0
  93. package/src/components/Autocomplete/SkAutocompleteEmpty.vue +39 -0
  94. package/src/components/Autocomplete/SkAutocompleteGroup.vue +46 -0
  95. package/src/components/Autocomplete/SkAutocompleteGroupLabel.vue +39 -0
  96. package/src/components/Autocomplete/SkAutocompleteItem.vue +85 -0
  97. package/src/components/Autocomplete/SkAutocompleteSeparator.vue +39 -0
  98. package/src/components/Autocomplete/index.ts +13 -0
  99. package/src/components/Autocomplete/types.ts +10 -0
  100. package/src/components/Breadcrumbs/SkBreadcrumbItem.vue +8 -3
  101. package/src/components/Breadcrumbs/SkBreadcrumbSeparator.vue +8 -2
  102. package/src/components/Breadcrumbs/SkBreadcrumbs.vue +11 -14
  103. package/src/components/Breadcrumbs/context.ts +20 -0
  104. package/src/components/Button/SkButton.vue +54 -11
  105. package/src/components/Button/types.ts +6 -0
  106. package/src/components/Card/SkCard.vue +12 -5
  107. package/src/components/Checkbox/SkCheckbox.vue +9 -2
  108. package/src/components/ColorPicker/SkColorPicker.vue +27 -5
  109. package/src/components/ContextMenu/SkContextMenu.vue +4 -1
  110. package/src/components/ContextMenu/SkContextMenuSubmenu.vue +5 -2
  111. package/src/components/ContextMenu/context.ts +17 -0
  112. package/src/components/Dropdown/SkDropdown.vue +2 -1
  113. package/src/components/Dropdown/SkDropdownSubmenu.vue +4 -3
  114. package/src/components/Dropdown/context.ts +16 -0
  115. package/src/components/Field/SkField.test.ts +88 -0
  116. package/src/components/Field/SkField.vue +15 -7
  117. package/src/components/Input/SkInput.test.ts +61 -0
  118. package/src/components/Input/SkInput.vue +42 -7
  119. package/src/components/Input/types.ts +2 -0
  120. package/src/components/InputGroup/SkInputGroup.test.ts +171 -0
  121. package/src/components/InputGroup/SkInputGroup.vue +131 -0
  122. package/src/components/InputGroup/SkInputGroupAddon.test.ts +104 -0
  123. package/src/components/InputGroup/SkInputGroupAddon.vue +107 -0
  124. package/src/components/InputGroup/types.ts +27 -0
  125. package/src/components/Listbox/SkListbox.vue +27 -6
  126. package/src/components/Modal/SkModal.vue +11 -4
  127. package/src/components/NavBar/SkNavBar.vue +5 -4
  128. package/src/components/NumberInput/SkNumberInput.vue +49 -8
  129. package/src/components/NumberInput/types.ts +2 -0
  130. package/src/components/Page/SkPage.vue +18 -15
  131. package/src/components/Pagination/SkPagination.vue +6 -3
  132. package/src/components/Pagination/SkPaginationItem.vue +8 -5
  133. package/src/components/Pagination/context.ts +19 -0
  134. package/src/components/Panel/types.ts +3 -2
  135. package/src/components/Popover/SkPopover.vue +11 -4
  136. package/src/components/Radio/SkRadio.vue +14 -4
  137. package/src/components/Radio/SkRadioGroup.vue +4 -2
  138. package/src/components/Radio/context.ts +17 -0
  139. package/src/components/Select/SkSelect.vue +39 -7
  140. package/src/components/Select/types.ts +2 -0
  141. package/src/components/Switch/SkSwitch.vue +14 -13
  142. package/src/components/Tabs/SkTab.vue +10 -3
  143. package/src/components/Tabs/SkTabList.vue +4 -2
  144. package/src/components/Tabs/SkTabs.vue +5 -3
  145. package/src/components/Tabs/context.ts +19 -0
  146. package/src/components/TagsInput/SkTagsInput.vue +28 -7
  147. package/src/components/Textarea/SkTextarea.vue +27 -6
  148. package/src/components/TreeView/SkTreeItem.vue +10 -2
  149. package/src/composables/injectionKeys.ts +52 -0
  150. package/src/index.ts +28 -0
  151. package/src/static/__tests__/parity.test.ts +2 -1
  152. package/src/static/__tests__/parityHarness.ts +5 -2
  153. package/src/static/components/__tests__/helpers.test.ts +191 -99
  154. package/src/static/components/alert.ts +12 -11
  155. package/src/static/components/avatar.ts +15 -16
  156. package/src/static/components/breadcrumbs.ts +3 -2
  157. package/src/static/components/button.ts +23 -27
  158. package/src/static/components/card.ts +3 -2
  159. package/src/static/components/checkbox.ts +11 -14
  160. package/src/static/components/colorPicker.ts +7 -9
  161. package/src/static/components/divider.ts +4 -3
  162. package/src/static/components/dropdown.ts +15 -6
  163. package/src/static/components/field.ts +32 -15
  164. package/src/static/components/group.ts +3 -2
  165. package/src/static/components/input.ts +20 -15
  166. package/src/static/components/inputGroup.ts +30 -0
  167. package/src/static/components/inputGroupAddon.ts +29 -0
  168. package/src/static/components/navBar.ts +30 -17
  169. package/src/static/components/numberInput.ts +17 -17
  170. package/src/static/components/page.ts +3 -2
  171. package/src/static/components/pagination.ts +3 -2
  172. package/src/static/components/panel.ts +3 -2
  173. package/src/static/components/progress.ts +3 -2
  174. package/src/static/components/radio.ts +14 -20
  175. package/src/static/components/select.ts +18 -15
  176. package/src/static/components/sidebar.ts +9 -13
  177. package/src/static/components/skeleton.ts +7 -10
  178. package/src/static/components/slider.ts +7 -9
  179. package/src/static/components/spinner.ts +22 -22
  180. package/src/static/components/switchInput.ts +12 -14
  181. package/src/static/components/table.ts +8 -10
  182. package/src/static/components/tag.ts +17 -11
  183. package/src/static/components/tagsInput.ts +3 -3
  184. package/src/static/components/textarea.ts +8 -13
  185. package/src/static/components/toolbar.ts +7 -10
  186. package/src/static/components/tooltip.ts +3 -2
  187. package/src/static/generated/defaults.ts +25 -9
  188. package/src/static/generated/propTypes.ts +19 -2
  189. package/src/static/h.ts +16 -0
  190. package/src/static/index.ts +8 -0
  191. package/src/static/render.test.ts +14 -10
  192. package/src/static/render.ts +33 -18
  193. package/src/static/specs.test.ts +1 -0
  194. package/src/static/specs.ts +22 -2
  195. package/src/static/stringH.ts +104 -0
  196. package/src/static/types.ts +25 -0
  197. package/src/styles/components/_autocomplete.scss +498 -0
  198. package/src/styles/components/_button.scss +55 -6
  199. package/src/styles/components/_index.scss +2 -0
  200. package/src/styles/components/_input-group.scss +292 -0
  201. package/src/styles/components/_input.scss +57 -9
  202. package/src/styles/components/_number-input.scss +88 -14
  203. package/src/styles/components/_select.scss +56 -9
  204. package/src/styles/mixins/_cut-border.scss +83 -0
  205. package/src/styles/tailwind.scss +262 -0
  206. package/src/styles/tokens.scss +8 -255
  207. package/src/types/corners.ts +10 -0
  208. package/src/utils/slots.test.ts +89 -0
  209. package/src/utils/slots.ts +80 -0
  210. package/web-types.json +392 -12
@@ -0,0 +1,498 @@
1
+ @use '@/styles/mixins' as *;
2
+
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+ // Autocomplete Component Styles
5
+ //----------------------------------------------------------------------------------------------------------------------
6
+
7
+ .sk-autocomplete
8
+ {
9
+ // Color tokens (can be overridden by custom colors)
10
+ --sk-autocomplete-color-base: var(--sk-neutral-base);
11
+ --sk-autocomplete-fg: var(--sk-neutral-text);
12
+
13
+ position: relative;
14
+ display: inline-flex;
15
+ width: 100%;
16
+
17
+ // Size variants
18
+ &.sk-sm
19
+ {
20
+ --sk-autocomplete-cut: 0.4rem;
21
+ }
22
+
23
+ &.sk-md
24
+ {
25
+ --sk-autocomplete-cut: 0.5rem;
26
+ }
27
+
28
+ &.sk-lg
29
+ {
30
+ --sk-autocomplete-cut: 0.6rem;
31
+ }
32
+
33
+ &.sk-xl
34
+ {
35
+ --sk-autocomplete-cut: 0.7rem;
36
+ }
37
+
38
+ // Kind variants
39
+ &.sk-neutral
40
+ {
41
+ --sk-autocomplete-color-base: var(--sk-neutral-base);
42
+ --sk-autocomplete-fg: var(--sk-neutral-text);
43
+ }
44
+
45
+ &.sk-primary
46
+ {
47
+ --sk-autocomplete-color-base: var(--sk-primary-base);
48
+ --sk-autocomplete-fg: var(--sk-primary-text);
49
+ }
50
+
51
+ &.sk-accent
52
+ {
53
+ --sk-autocomplete-color-base: var(--sk-accent-base);
54
+ --sk-autocomplete-fg: var(--sk-accent-text);
55
+ }
56
+
57
+ &.sk-info
58
+ {
59
+ --sk-autocomplete-color-base: var(--sk-info-base);
60
+ --sk-autocomplete-fg: var(--sk-info-text);
61
+ }
62
+
63
+ &.sk-success
64
+ {
65
+ --sk-autocomplete-color-base: var(--sk-success-base);
66
+ --sk-autocomplete-fg: var(--sk-success-text);
67
+ }
68
+
69
+ &.sk-warning
70
+ {
71
+ --sk-autocomplete-color-base: var(--sk-warning-base);
72
+ --sk-autocomplete-fg: var(--sk-warning-text);
73
+ }
74
+
75
+ &.sk-danger
76
+ {
77
+ --sk-autocomplete-color-base: var(--sk-danger-base);
78
+ --sk-autocomplete-fg: var(--sk-danger-text);
79
+ }
80
+
81
+ // Color kinds (direct palette access)
82
+ &.sk-neon-blue
83
+ {
84
+ --sk-autocomplete-color-base: var(--sk-neon-blue-base);
85
+ --sk-autocomplete-fg: var(--sk-neon-blue-text);
86
+ }
87
+
88
+ &.sk-neon-purple
89
+ {
90
+ --sk-autocomplete-color-base: var(--sk-neon-purple-base);
91
+ --sk-autocomplete-fg: var(--sk-neon-purple-text);
92
+ }
93
+
94
+ &.sk-neon-orange
95
+ {
96
+ --sk-autocomplete-color-base: var(--sk-neon-orange-base);
97
+ --sk-autocomplete-fg: var(--sk-neon-orange-text);
98
+ }
99
+
100
+ &.sk-neon-green
101
+ {
102
+ --sk-autocomplete-color-base: var(--sk-neon-green-base);
103
+ --sk-autocomplete-fg: var(--sk-neon-green-text);
104
+ }
105
+
106
+ &.sk-neon-mint
107
+ {
108
+ --sk-autocomplete-color-base: var(--sk-neon-mint-base);
109
+ --sk-autocomplete-fg: var(--sk-neon-mint-text);
110
+ }
111
+
112
+ &.sk-neon-pink
113
+ {
114
+ --sk-autocomplete-color-base: var(--sk-neon-pink-base);
115
+ --sk-autocomplete-fg: var(--sk-neon-pink-text);
116
+ }
117
+
118
+ &.sk-yellow
119
+ {
120
+ --sk-autocomplete-color-base: var(--sk-yellow-base);
121
+ --sk-autocomplete-fg: var(--sk-yellow-text);
122
+ }
123
+
124
+ &.sk-red
125
+ {
126
+ --sk-autocomplete-color-base: var(--sk-red-base);
127
+ --sk-autocomplete-fg: var(--sk-red-text);
128
+ }
129
+ }
130
+
131
+ //----------------------------------------------------------------------------------------------------------------------
132
+
133
+ .sk-autocomplete-anchor
134
+ {
135
+ display: flex;
136
+ align-items: center;
137
+ width: 100%;
138
+ position: relative;
139
+
140
+ @include cut-border(
141
+ $cut: var(--sk-autocomplete-cut),
142
+ $border-width: var(--sk-border-width-thin),
143
+ $border-color: var(--sk-autocomplete-color-base),
144
+ $corners: (top-right)
145
+ );
146
+
147
+ background: color-mix(
148
+ in oklch,
149
+ color-mix(in oklch, var(--sk-autocomplete-color-base) 75%, transparent 25%),
150
+ #000 65%
151
+ );
152
+
153
+ transition-property: background, border-color;
154
+ transition-duration: var(--sk-transition-duration-base);
155
+
156
+ &:focus-within
157
+ {
158
+ border-color: color-mix(in oklch, var(--sk-autocomplete-color-base), white 35%);
159
+ background: color-mix(
160
+ in oklch,
161
+ color-mix(in oklch, var(--sk-autocomplete-color-base) 75%, transparent 25%),
162
+ #000 25%
163
+ );
164
+ }
165
+
166
+ &:hover:not(:has(input:disabled))
167
+ {
168
+ border-color: color-mix(in oklch, var(--sk-autocomplete-color-base), white 20%);
169
+ }
170
+
171
+ &:has(input:disabled)
172
+ {
173
+ opacity: 0.5;
174
+ cursor: not-allowed;
175
+ }
176
+ }
177
+
178
+ //----------------------------------------------------------------------------------------------------------------------
179
+
180
+ .sk-autocomplete-input
181
+ {
182
+ flex: 1;
183
+ background: transparent;
184
+ border: none;
185
+ color: var(--sk-autocomplete-fg);
186
+ font-family: var(--sk-font-family-base);
187
+ outline: none;
188
+ cursor: text;
189
+
190
+ .sk-autocomplete.sk-sm &
191
+ {
192
+ height: 2rem;
193
+ padding: 0 var(--sk-space-sm);
194
+ font-size: 0.875rem;
195
+ }
196
+
197
+ .sk-autocomplete.sk-md &
198
+ {
199
+ height: 2.5rem;
200
+ padding: 0 var(--sk-space-md);
201
+ font-size: 1rem;
202
+ }
203
+
204
+ .sk-autocomplete.sk-lg &
205
+ {
206
+ height: 3rem;
207
+ padding: 0 var(--sk-space-md);
208
+ font-size: 1.125rem;
209
+ }
210
+
211
+ .sk-autocomplete.sk-xl &
212
+ {
213
+ height: 3.5rem;
214
+ padding: 0 var(--sk-space-md);
215
+ font-size: 1.25rem;
216
+ }
217
+
218
+ &::placeholder
219
+ {
220
+ color: color-mix(in oklch, var(--sk-autocomplete-fg), transparent 50%);
221
+ }
222
+
223
+ &:disabled
224
+ {
225
+ cursor: not-allowed;
226
+ }
227
+ }
228
+
229
+ //----------------------------------------------------------------------------------------------------------------------
230
+
231
+ .sk-autocomplete-cancel
232
+ {
233
+ display: flex;
234
+ align-items: center;
235
+ justify-content: center;
236
+ padding: 0 var(--sk-space-xs);
237
+ background: transparent;
238
+ border: none;
239
+ color: var(--sk-autocomplete-fg);
240
+ cursor: pointer;
241
+ flex-shrink: 0;
242
+ opacity: 0.65;
243
+ transition: opacity var(--sk-transition-duration-base);
244
+
245
+ &:hover
246
+ {
247
+ opacity: 1;
248
+ }
249
+
250
+ &:focus-visible
251
+ {
252
+ outline: var(--sk-border-width-base) solid var(--sk-autocomplete-color-base);
253
+ outline-offset: 2px;
254
+ }
255
+ }
256
+
257
+ //----------------------------------------------------------------------------------------------------------------------
258
+
259
+ .sk-autocomplete-trigger
260
+ {
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: center;
264
+ padding: 0 var(--sk-space-sm);
265
+ background: transparent;
266
+ border: none;
267
+ color: var(--sk-autocomplete-fg);
268
+ cursor: pointer;
269
+ flex-shrink: 0;
270
+
271
+ &:hover
272
+ {
273
+ opacity: 0.8;
274
+ }
275
+ }
276
+
277
+ //----------------------------------------------------------------------------------------------------------------------
278
+
279
+ .sk-autocomplete-content
280
+ {
281
+ --sk-autocomplete-color-base: var(--sk-neutral-base);
282
+ --sk-autocomplete-fg: var(--sk-neutral-text);
283
+
284
+ position: relative;
285
+ min-width: var(--reka-autocomplete-trigger-width);
286
+ max-height: 20rem;
287
+ overflow: auto;
288
+ padding: var(--sk-space-xs);
289
+ z-index: var(--sk-z-dropdown);
290
+
291
+ @include cut-border(
292
+ $cut: 0.625rem,
293
+ $border-width: var(--sk-border-width-thin),
294
+ $border-color: var(--sk-autocomplete-color-base),
295
+ $corners: (top-left)
296
+ );
297
+
298
+ background: color-mix(
299
+ in oklch,
300
+ color-mix(in oklch, var(--sk-autocomplete-color-base) 95%, transparent 5%),
301
+ #000 46.25%
302
+ );
303
+ color: var(--sk-autocomplete-fg);
304
+ box-shadow: var(--sk-shadow-lg);
305
+
306
+ // Kind variants (defined directly on content for portal support)
307
+ &.sk-neutral
308
+ {
309
+ --sk-autocomplete-color-base: var(--sk-neutral-base);
310
+ --sk-autocomplete-fg: var(--sk-neutral-text);
311
+ }
312
+
313
+ &.sk-primary
314
+ {
315
+ --sk-autocomplete-color-base: var(--sk-primary-base);
316
+ --sk-autocomplete-fg: var(--sk-primary-text);
317
+ }
318
+
319
+ &.sk-accent
320
+ {
321
+ --sk-autocomplete-color-base: var(--sk-accent-base);
322
+ --sk-autocomplete-fg: var(--sk-accent-text);
323
+ }
324
+
325
+ &.sk-info
326
+ {
327
+ --sk-autocomplete-color-base: var(--sk-info-base);
328
+ --sk-autocomplete-fg: var(--sk-info-text);
329
+ }
330
+
331
+ &.sk-success
332
+ {
333
+ --sk-autocomplete-color-base: var(--sk-success-base);
334
+ --sk-autocomplete-fg: var(--sk-success-text);
335
+ }
336
+
337
+ &.sk-warning
338
+ {
339
+ --sk-autocomplete-color-base: var(--sk-warning-base);
340
+ --sk-autocomplete-fg: var(--sk-warning-text);
341
+ }
342
+
343
+ &.sk-danger
344
+ {
345
+ --sk-autocomplete-color-base: var(--sk-danger-base);
346
+ --sk-autocomplete-fg: var(--sk-danger-text);
347
+ }
348
+
349
+ &.sk-neon-blue
350
+ {
351
+ --sk-autocomplete-color-base: var(--sk-neon-blue-base);
352
+ --sk-autocomplete-fg: var(--sk-neon-blue-text);
353
+ }
354
+
355
+ &.sk-neon-purple
356
+ {
357
+ --sk-autocomplete-color-base: var(--sk-neon-purple-base);
358
+ --sk-autocomplete-fg: var(--sk-neon-purple-text);
359
+ }
360
+
361
+ &.sk-neon-orange
362
+ {
363
+ --sk-autocomplete-color-base: var(--sk-neon-orange-base);
364
+ --sk-autocomplete-fg: var(--sk-neon-orange-text);
365
+ }
366
+
367
+ &.sk-neon-green
368
+ {
369
+ --sk-autocomplete-color-base: var(--sk-neon-green-base);
370
+ --sk-autocomplete-fg: var(--sk-neon-green-text);
371
+ }
372
+
373
+ &.sk-neon-mint
374
+ {
375
+ --sk-autocomplete-color-base: var(--sk-neon-mint-base);
376
+ --sk-autocomplete-fg: var(--sk-neon-mint-text);
377
+ }
378
+
379
+ &.sk-neon-pink
380
+ {
381
+ --sk-autocomplete-color-base: var(--sk-neon-pink-base);
382
+ --sk-autocomplete-fg: var(--sk-neon-pink-text);
383
+ }
384
+
385
+ &.sk-yellow
386
+ {
387
+ --sk-autocomplete-color-base: var(--sk-yellow-base);
388
+ --sk-autocomplete-fg: var(--sk-yellow-text);
389
+ }
390
+
391
+ &.sk-red
392
+ {
393
+ --sk-autocomplete-color-base: var(--sk-red-base);
394
+ --sk-autocomplete-fg: var(--sk-red-text);
395
+ }
396
+ }
397
+
398
+ //----------------------------------------------------------------------------------------------------------------------
399
+
400
+ .sk-autocomplete-item
401
+ {
402
+ position: relative;
403
+ display: flex;
404
+ align-items: center;
405
+ gap: var(--sk-space-md);
406
+ padding: var(--sk-space-xs) var(--sk-space-md);
407
+ cursor: pointer;
408
+ color: color-mix(in oklch, var(--sk-autocomplete-fg), black 15%);
409
+ font-size: 0.875rem;
410
+ outline: none;
411
+ user-select: none;
412
+
413
+ @include touch
414
+ {
415
+ min-height: 44px;
416
+ }
417
+
418
+ @include cut-border(
419
+ $cut: 0.5rem,
420
+ $border-width: var(--sk-border-width-thin),
421
+ $border-color: transparent,
422
+ $corners: (top-left bottom-right)
423
+ );
424
+
425
+ transition-property: background, color;
426
+ transition-duration: var(--sk-transition-duration-base);
427
+
428
+ &:hover:not([data-disabled])
429
+ {
430
+ background: color-mix(
431
+ in oklch,
432
+ color-mix(in oklch, var(--sk-autocomplete-color-base), black 30%),
433
+ transparent 10%
434
+ );
435
+ color: var(--sk-autocomplete-fg);
436
+ transition-duration: var(--sk-transition-duration-fast);
437
+ }
438
+
439
+ &[data-highlighted]
440
+ {
441
+ background: color-mix(
442
+ in oklch,
443
+ color-mix(in oklch, var(--sk-autocomplete-color-base), black 30%),
444
+ transparent 10%
445
+ );
446
+ color: var(--sk-autocomplete-fg);
447
+ outline: none;
448
+ }
449
+
450
+ &[data-disabled]
451
+ {
452
+ opacity: 0.5;
453
+ cursor: not-allowed;
454
+ }
455
+ }
456
+
457
+ //----------------------------------------------------------------------------------------------------------------------
458
+
459
+ .sk-autocomplete-separator
460
+ {
461
+ height: 1px;
462
+ margin: var(--sk-space-xs) 0;
463
+ background: color-mix(in oklch, var(--sk-autocomplete-color-base), transparent 70%);
464
+ }
465
+
466
+ //----------------------------------------------------------------------------------------------------------------------
467
+
468
+ .sk-autocomplete-empty
469
+ {
470
+ padding: var(--sk-space-md);
471
+ text-align: center;
472
+ color: color-mix(in oklch, var(--sk-autocomplete-fg), transparent 40%);
473
+ font-size: 0.875rem;
474
+ font-style: italic;
475
+ }
476
+
477
+ //----------------------------------------------------------------------------------------------------------------------
478
+
479
+ .sk-autocomplete-group
480
+ {
481
+ display: block;
482
+ }
483
+
484
+ //----------------------------------------------------------------------------------------------------------------------
485
+
486
+ .sk-autocomplete-group-label
487
+ {
488
+ display: block;
489
+ padding: var(--sk-space-xs) var(--sk-space-md);
490
+ font-size: 0.75rem;
491
+ font-weight: 600;
492
+ text-transform: uppercase;
493
+ letter-spacing: 0.05em;
494
+ color: color-mix(in oklch, var(--sk-autocomplete-fg), transparent 35%);
495
+ user-select: none;
496
+ }
497
+
498
+ //----------------------------------------------------------------------------------------------------------------------
@@ -165,6 +165,15 @@
165
165
  /// Hover border color - slightly lighter than base for emphasis
166
166
  --sk-button-border-hover: color-mix(in oklch, var(--sk-button-color-base), white 12.68%);
167
167
 
168
+ //------------------------------------------------------------------------------------------------------------------
169
+ // Per-corner cut sizes (toggled on by .sk-cut-* classes / corners= attribute)
170
+ //------------------------------------------------------------------------------------------------------------------
171
+
172
+ --sk-button-cut-tl: 0px;
173
+ --sk-button-cut-tr: 0px;
174
+ --sk-button-cut-br: 0px;
175
+ --sk-button-cut-bl: 0px;
176
+
168
177
  //------------------------------------------------------------------------------------------------------------------
169
178
  // Chrome sizing tokens (set by size variants, consumed by .sk-button-chrome)
170
179
  //------------------------------------------------------------------------------------------------------------------
@@ -782,6 +791,46 @@ $_button-kind-not: '';
782
791
  }
783
792
  }
784
793
 
794
+ //----------------------------------------------------------------------------------------------------------------------
795
+ // Default cuts: top-left + bottom-right — the iconic SleekSpace button bevel.
796
+ //----------------------------------------------------------------------------------------------------------------------
797
+
798
+ @include defaults-when-absent('button', 'sk-cut-')
799
+ {
800
+ --sk-button-cut-tl: var(--sk-button-current-cut-size);
801
+ --sk-button-cut-br: var(--sk-button-current-cut-size);
802
+ }
803
+
804
+ @include defaults-when-no-attr('button', 'corners')
805
+ {
806
+ --sk-button-cut-tl: var(--sk-button-current-cut-size);
807
+ --sk-button-cut-br: var(--sk-button-current-cut-size);
808
+ }
809
+
810
+ //----------------------------------------------------------------------------------------------------------------------
811
+ // Per-corner classes / corners="..." values.
812
+ //----------------------------------------------------------------------------------------------------------------------
813
+
814
+ @include list-modifier('button', 'cut', 'top-left', 'corners')
815
+ {
816
+ --sk-button-cut-tl: var(--sk-button-current-cut-size);
817
+ }
818
+
819
+ @include list-modifier('button', 'cut', 'top-right', 'corners')
820
+ {
821
+ --sk-button-cut-tr: var(--sk-button-current-cut-size);
822
+ }
823
+
824
+ @include list-modifier('button', 'cut', 'bottom-right', 'corners')
825
+ {
826
+ --sk-button-cut-br: var(--sk-button-current-cut-size);
827
+ }
828
+
829
+ @include list-modifier('button', 'cut', 'bottom-left', 'corners')
830
+ {
831
+ --sk-button-cut-bl: var(--sk-button-current-cut-size);
832
+ }
833
+
785
834
  //----------------------------------------------------------------------------------------------------------------------
786
835
  // Inner Visual Chrome
787
836
  //
@@ -802,16 +851,16 @@ $_button-kind-not: '';
802
851
  font-weight: var(--sk-button-font-weight);
803
852
  font-size: var(--sk-button-current-font-size);
804
853
  line-height: var(--sk-button-line-height);
805
- border-width: var(--sk-button-border-width);
806
- border-style: solid;
807
854
  flex-shrink: 0;
808
855
  box-sizing: border-box;
809
856
 
810
- @include cut-border(
811
- $cut: var(--sk-button-current-cut-size),
857
+ @include cut-border-vars(
858
+ $tl: var(--sk-button-cut-tl),
859
+ $tr: var(--sk-button-cut-tr),
860
+ $br: var(--sk-button-cut-br),
861
+ $bl: var(--sk-button-cut-bl),
812
862
  $border-width: var(--sk-button-border-width),
813
- $border-color: var(--sk-button-border-color),
814
- $corners: (top-left bottom-right)
863
+ $border-color: var(--sk-button-border-color)
815
864
  );
816
865
 
817
866
  // Apply glow shadow (only works in modern browsers with corner-shape support)
@@ -8,6 +8,7 @@
8
8
  {
9
9
  @include meta.load-css('accordion');
10
10
  @include meta.load-css('alert');
11
+ @include meta.load-css('autocomplete');
11
12
  @include meta.load-css('avatar');
12
13
  @include meta.load-css('breadcrumbs');
13
14
  @include meta.load-css('button');
@@ -20,6 +21,7 @@
20
21
  @include meta.load-css('field');
21
22
  @include meta.load-css('group');
22
23
  @include meta.load-css('input');
24
+ @include meta.load-css('input-group');
23
25
  @include meta.load-css('listbox');
24
26
  @include meta.load-css('menu');
25
27
  @include meta.load-css('modal');