@skewedaspect/sleekspace-ui 0.8.1 → 0.9.1

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 (191) hide show
  1. package/dist/components/Dropdown/SkDropdown.vue.d.ts +9 -1
  2. package/dist/components/Dropdown/types.d.ts +2 -1
  3. package/dist/components/NavBar/SkNavBar.vue.d.ts +9 -1
  4. package/dist/components/NavBar/context.d.ts +2 -0
  5. package/dist/components/NavBar/types.d.ts +5 -1
  6. package/dist/components/NumberInput/SkNumberInput.vue.d.ts +8 -0
  7. package/dist/components/Page/SkPage.vue.d.ts +9 -0
  8. package/dist/components/ScrollArea/SkScrollArea.vue.d.ts +105 -4
  9. package/dist/composables/useCustomColors.d.ts +18 -56
  10. package/{src → dist}/global.d.ts +6 -2
  11. package/dist/sleekspace-ui.css +4257 -1253
  12. package/dist/sleekspace-ui.es.js +300 -170
  13. package/dist/sleekspace-ui.umd.js +299 -169
  14. package/dist/static/classes.d.ts +18 -0
  15. package/dist/static/components/alert.d.ts +12 -0
  16. package/dist/static/components/avatar.d.ts +9 -0
  17. package/dist/static/components/breadcrumbs.d.ts +6 -0
  18. package/dist/static/components/button.d.ts +13 -0
  19. package/dist/static/components/card.d.ts +5 -0
  20. package/dist/static/components/checkbox.d.ts +10 -0
  21. package/dist/static/components/colorPicker.d.ts +8 -0
  22. package/dist/static/components/divider.d.ts +8 -0
  23. package/dist/static/components/dropdown.d.ts +8 -0
  24. package/dist/static/components/field.d.ts +15 -0
  25. package/dist/static/components/group.d.ts +5 -0
  26. package/dist/static/components/input.d.ts +14 -0
  27. package/dist/static/components/navBar.d.ts +16 -0
  28. package/dist/static/components/numberInput.d.ts +15 -0
  29. package/dist/static/components/page.d.ts +9 -0
  30. package/dist/static/components/pagination.d.ts +5 -0
  31. package/dist/static/components/panel.d.ts +11 -0
  32. package/dist/static/components/progress.d.ts +9 -0
  33. package/dist/static/components/radio.d.ts +11 -0
  34. package/dist/static/components/select.d.ts +10 -0
  35. package/dist/static/components/sidebar.d.ts +9 -0
  36. package/dist/static/components/skeleton.d.ts +11 -0
  37. package/dist/static/components/slider.d.ts +12 -0
  38. package/dist/static/components/spinner.d.ts +12 -0
  39. package/dist/static/components/switchInput.d.ts +10 -0
  40. package/dist/static/components/table.d.ts +12 -0
  41. package/dist/static/components/tag.d.ts +8 -0
  42. package/dist/static/components/tagsInput.d.ts +7 -0
  43. package/dist/static/components/textarea.d.ts +12 -0
  44. package/dist/static/components/toolbar.d.ts +12 -0
  45. package/dist/static/components/tooltip.d.ts +7 -0
  46. package/dist/static/escape.d.ts +2 -0
  47. package/dist/static/index.cjs.js +1 -0
  48. package/dist/static/index.d.ts +68 -0
  49. package/dist/static/index.es.js +732 -0
  50. package/dist/static/render.d.ts +12 -0
  51. package/dist/static/specs.d.ts +2 -0
  52. package/dist/static/types.d.ts +43 -0
  53. package/dist/tokens.css +322 -0
  54. package/dist/types/index.d.ts +36 -0
  55. package/dist/utils/slots.d.ts +6 -0
  56. package/docs/guides/installation.md +8 -2
  57. package/docs/guides/pure-css/_meta.yaml +8 -0
  58. package/docs/guides/pure-css/class-api.md +1070 -0
  59. package/docs/guides/pure-css/custom-elements.md +574 -0
  60. package/docs/guides/pure-css/index.md +86 -0
  61. package/docs/guides/pure-css/limitations.md +152 -0
  62. package/docs/guides/pure-css/static-helpers.md +1203 -0
  63. package/llms-full.txt +3739 -261
  64. package/package.json +19 -5
  65. package/src/components/Alert/SkAlert.vue +4 -2
  66. package/src/components/Breadcrumbs/SkBreadcrumbs.vue +6 -12
  67. package/src/components/Button/SkButton.vue +8 -5
  68. package/src/components/Card/SkCard.vue +13 -5
  69. package/src/components/Checkbox/SkCheckbox.vue +9 -2
  70. package/src/components/ContextMenu/SkContextMenuRadioGroup.vue +4 -1
  71. package/src/components/Dropdown/SkDropdown.vue +20 -3
  72. package/src/components/Dropdown/SkDropdownRadioGroup.vue +4 -1
  73. package/src/components/Dropdown/types.ts +2 -1
  74. package/src/components/Modal/SkModal.vue +11 -4
  75. package/src/components/NavBar/SkNavBar.vue +19 -8
  76. package/src/components/NavBar/context.ts +4 -2
  77. package/src/components/NavBar/types.ts +6 -1
  78. package/src/components/NumberInput/SkNumberInput.vue +10 -1
  79. package/src/components/Page/SkPage.vue +29 -15
  80. package/src/components/Panel/SkPanel.vue +2 -1
  81. package/src/components/Popover/SkPopover.vue +11 -4
  82. package/src/components/Radio/SkRadio.vue +9 -2
  83. package/src/components/ScrollArea/SkScrollArea.vue +78 -5
  84. package/src/components/Switch/SkSwitch.vue +14 -13
  85. package/src/components/Tabs/SkTab.vue +7 -2
  86. package/src/components/TreeView/SkTreeItem.vue +10 -2
  87. package/src/components/TreeView/SkTreeView.vue +7 -2
  88. package/src/composables/useCustomColors.ts +86 -77
  89. package/src/composables/usePortalContext.test.ts +0 -2
  90. package/src/shims.d.ts +10 -0
  91. package/src/static/__tests__/parity.test.ts +717 -0
  92. package/src/static/__tests__/parityHarness.test.ts +98 -0
  93. package/src/static/__tests__/parityHarness.ts +260 -0
  94. package/src/static/classes.test.ts +82 -0
  95. package/src/static/classes.ts +111 -0
  96. package/src/static/components/__tests__/helpers.test.ts +837 -0
  97. package/src/static/components/alert.ts +117 -0
  98. package/src/static/components/avatar.ts +86 -0
  99. package/src/static/components/breadcrumbs.ts +28 -0
  100. package/src/static/components/button.ts +75 -0
  101. package/src/static/components/card.ts +27 -0
  102. package/src/static/components/checkbox.ts +48 -0
  103. package/src/static/components/colorPicker.ts +45 -0
  104. package/src/static/components/divider.ts +39 -0
  105. package/src/static/components/dropdown.ts +36 -0
  106. package/src/static/components/field.ts +86 -0
  107. package/src/static/components/group.ts +27 -0
  108. package/src/static/components/input.ts +55 -0
  109. package/src/static/components/navBar.ts +94 -0
  110. package/src/static/components/numberInput.ts +64 -0
  111. package/src/static/components/page.ts +31 -0
  112. package/src/static/components/pagination.ts +27 -0
  113. package/src/static/components/panel.ts +33 -0
  114. package/src/static/components/progress.ts +31 -0
  115. package/src/static/components/radio.ts +53 -0
  116. package/src/static/components/select.ts +51 -0
  117. package/src/static/components/sidebar.ts +85 -0
  118. package/src/static/components/skeleton.ts +66 -0
  119. package/src/static/components/slider.ts +50 -0
  120. package/src/static/components/spinner.ts +94 -0
  121. package/src/static/components/switchInput.ts +49 -0
  122. package/src/static/components/table.ts +88 -0
  123. package/src/static/components/tag.ts +76 -0
  124. package/src/static/components/tagsInput.ts +35 -0
  125. package/src/static/components/textarea.ts +53 -0
  126. package/src/static/components/toolbar.ts +74 -0
  127. package/src/static/components/tooltip.ts +29 -0
  128. package/src/static/escape.test.ts +53 -0
  129. package/src/static/escape.ts +28 -0
  130. package/src/static/generated/defaults.ts +379 -0
  131. package/src/static/generated/propTypes.ts +426 -0
  132. package/src/static/index.ts +116 -0
  133. package/src/static/render.test.ts +83 -0
  134. package/src/static/render.ts +76 -0
  135. package/src/static/specs.test.ts +58 -0
  136. package/src/static/specs.ts +230 -0
  137. package/src/static/types.ts +176 -0
  138. package/src/styles/__tests__/testHelpers.ts +97 -0
  139. package/src/styles/base/_custom-elements.scss +51 -0
  140. package/src/styles/base/_index.scss +4 -0
  141. package/src/styles/components/__tests__/componentSelectors.test.ts +2575 -0
  142. package/src/styles/components/_alert.scss +82 -39
  143. package/src/styles/components/_avatar.scss +102 -47
  144. package/src/styles/components/_breadcrumbs.scss +39 -37
  145. package/src/styles/components/_button.scss +58 -5
  146. package/src/styles/components/_card.scss +64 -2
  147. package/src/styles/components/_checkbox.scss +35 -5
  148. package/src/styles/components/_color-picker.scss +48 -13
  149. package/src/styles/components/_divider.scss +86 -52
  150. package/src/styles/components/_dropdown.scss +214 -0
  151. package/src/styles/components/_field.scss +76 -23
  152. package/src/styles/components/_group.scss +190 -79
  153. package/src/styles/components/_index.scss +1 -0
  154. package/src/styles/components/_input.scss +81 -5
  155. package/src/styles/components/_menu.scss +1 -1
  156. package/src/styles/components/_navbar.scss +76 -45
  157. package/src/styles/components/_number-input.scss +98 -85
  158. package/src/styles/components/_page.scss +82 -23
  159. package/src/styles/components/_pagination.scss +240 -212
  160. package/src/styles/components/_panel.scss +268 -122
  161. package/src/styles/components/_progress.scss +120 -70
  162. package/src/styles/components/_radio.scss +35 -5
  163. package/src/styles/components/_scroll-area.scss +50 -22
  164. package/src/styles/components/_select.scss +40 -9
  165. package/src/styles/components/_sidebar.scss +59 -34
  166. package/src/styles/components/_skeleton.scss +111 -65
  167. package/src/styles/components/_slider.scss +34 -10
  168. package/src/styles/components/_spinner.scss +107 -56
  169. package/src/styles/components/_switch.scss +36 -5
  170. package/src/styles/components/_table.scss +150 -166
  171. package/src/styles/components/_tag.scss +244 -154
  172. package/src/styles/components/_tags-input.scss +46 -12
  173. package/src/styles/components/_textarea.scss +36 -5
  174. package/src/styles/components/_toolbar.scss +85 -31
  175. package/src/styles/components/_tooltip.scss +172 -3
  176. package/src/styles/mixins/_cut-border.scss +18 -4
  177. package/src/styles/mixins/_dual-selector.scss +192 -0
  178. package/src/styles/mixins/_index.scss +1 -0
  179. package/src/styles/mixins/dualSelector.test.ts +151 -0
  180. package/src/styles/themes/_colorful.scss +25 -0
  181. package/src/styles/themes/_greyscale.scss +25 -0
  182. package/src/styles/themes/_shade-scale.scss +39 -0
  183. package/src/styles/tokens/_semantic-color-kinds.scss +66 -0
  184. package/src/{types.ts → types/index.ts} +19 -11
  185. package/src/utils/slots.ts +75 -0
  186. package/web-types.json +980 -137
  187. package/dist/composables/useCustomColors.test.d.ts +0 -1
  188. package/dist/composables/useFocusTrap.test.d.ts +0 -1
  189. package/dist/composables/usePortalContext.test.d.ts +0 -1
  190. package/dist/styles/mixins/fluidSize.test.d.ts +0 -1
  191. package/dist/types.d.ts +0 -29
@@ -9,7 +9,8 @@
9
9
  // Tag Design Tokens
10
10
  //----------------------------------------------------------------------------------------------------------------------
11
11
 
12
- .sk-tag
12
+ .sk-tag,
13
+ sk-tag
13
14
  {
14
15
  //------------------------------------------------------------------------------------------------------------------
15
16
  // Size System Tokens
@@ -188,7 +189,8 @@
188
189
  // Base Tag Styles
189
190
  //----------------------------------------------------------------------------------------------------------------------
190
191
 
191
- .sk-tag
192
+ .sk-tag,
193
+ sk-tag
192
194
  {
193
195
  // Base styles
194
196
  // position: relative anchors the cut-border fallback's ::before (Safari, Firefox — no corner-shape).
@@ -230,158 +232,6 @@
230
232
  color: var(--sk-kind-color, var(--sk-tag-color-base));
231
233
  }
232
234
 
233
- //------------------------------------------------------------------------------------------------------------------
234
- // Size variants
235
- //------------------------------------------------------------------------------------------------------------------
236
-
237
- &.sk-sm
238
- {
239
- --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-sm) / var(--sk-tag-radius-factor));
240
-
241
- height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-sm));
242
- padding-left: var(--sk-tag-padding-base);
243
- padding-right: var(--sk-tag-padding-base);
244
- font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-sm));
245
-
246
- @include cut-border(
247
- $cut: var(--sk-tag-cut-size),
248
- $border-width: var(--sk-tag-border-width),
249
- $border-color: var(--sk-tag-border-color),
250
- $corners: (bottom-left top-right)
251
- );
252
- }
253
-
254
- &.sk-md
255
- {
256
- --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-md) / var(--sk-tag-radius-factor));
257
-
258
- height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-md));
259
- padding-left: var(--sk-tag-padding-base);
260
- padding-right: var(--sk-tag-padding-base);
261
- font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-md));
262
-
263
- @include cut-border(
264
- $cut: var(--sk-tag-cut-size),
265
- $border-width: var(--sk-tag-border-width),
266
- $border-color: var(--sk-tag-border-color),
267
- $corners: (bottom-left top-right)
268
- );
269
- }
270
-
271
- &.sk-lg
272
- {
273
- --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-lg) / var(--sk-tag-radius-factor));
274
-
275
- height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-lg));
276
- padding-left: var(--sk-tag-padding-base);
277
- padding-right: var(--sk-tag-padding-base);
278
- font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-lg));
279
-
280
- @include cut-border(
281
- $cut: var(--sk-tag-cut-size),
282
- $border-width: var(--sk-tag-border-width),
283
- $border-color: var(--sk-tag-border-color),
284
- $corners: (bottom-left top-right)
285
- );
286
- }
287
-
288
- &.sk-xl
289
- {
290
- --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-xl) / var(--sk-tag-radius-factor));
291
-
292
- height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-xl));
293
- padding-left: var(--sk-tag-padding-base);
294
- padding-right: var(--sk-tag-padding-base);
295
- font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-xl));
296
-
297
- @include cut-border(
298
- $cut: var(--sk-tag-cut-size),
299
- $border-width: var(--sk-tag-border-width),
300
- $border-color: var(--sk-tag-border-color),
301
- $corners: (bottom-left top-right)
302
- );
303
- }
304
-
305
- //------------------------------------------------------------------------------------------------------------------
306
- // Variant: Solid
307
- //------------------------------------------------------------------------------------------------------------------
308
-
309
- &.sk-solid
310
- {
311
- @each $kind in $kinds
312
- {
313
- @include tag-solid-kind($kind);
314
- }
315
- }
316
-
317
- //------------------------------------------------------------------------------------------------------------------
318
- // Variant: Outline
319
- //------------------------------------------------------------------------------------------------------------------
320
-
321
- &.sk-outline
322
- {
323
- @each $kind in $kinds
324
- {
325
- @include tag-outline-kind($kind);
326
- }
327
-
328
- // Special case: neutral text and border are lighter for better differentiation
329
- &.sk-neutral
330
- {
331
- --sk-tag-border-color: color-mix(in oklch, var(--sk-tag-border-base), white 25%);
332
- color: color-mix(in oklch, var(--sk-tag-color-base), white 50%);
333
- }
334
- }
335
-
336
- //------------------------------------------------------------------------------------------------------------------
337
- // Variant: Subtle
338
- //------------------------------------------------------------------------------------------------------------------
339
-
340
- &.sk-subtle
341
- {
342
- @each $kind in $kinds
343
- {
344
- @include tag-subtle-kind($kind);
345
- }
346
-
347
- // Special case: neutral text and border are lighter (halfway to white) for better differentiation
348
- &.sk-neutral
349
- {
350
- --sk-tag-border-color: oklch(
351
- from color-mix(in oklch, var(--sk-tag-border-base), white 50%)
352
- l c h / var(--sk-tag-subtle-border-opacity)
353
- );
354
- color: color-mix(in oklch, var(--sk-tag-color-base), white 50%);
355
- }
356
- }
357
-
358
- //------------------------------------------------------------------------------------------------------------------
359
- // Variant: Ghost
360
- //------------------------------------------------------------------------------------------------------------------
361
-
362
- &.sk-ghost
363
- {
364
- @each $kind in $kinds
365
- {
366
- @include tag-ghost-kind($kind);
367
- }
368
-
369
- // Special case: neutral text is lighter (halfway to white) for better differentiation
370
- &.sk-neutral
371
- {
372
- color: color-mix(in oklch, var(--sk-tag-color-base), white 50%);
373
- }
374
- }
375
-
376
- //------------------------------------------------------------------------------------------------------------------
377
- // Removable tag
378
- //------------------------------------------------------------------------------------------------------------------
379
-
380
- &.sk-removable
381
- {
382
- padding-right: calc(var(--sk-tag-padding-base) * 0.5);
383
- }
384
-
385
235
  //------------------------------------------------------------------------------------------------------------------
386
236
  // Tag content
387
237
  //------------------------------------------------------------------------------------------------------------------
@@ -425,3 +275,243 @@
425
275
  }
426
276
 
427
277
  //----------------------------------------------------------------------------------------------------------------------
278
+ // Kind Variants
279
+ //----------------------------------------------------------------------------------------------------------------------
280
+
281
+ @each $kind in $kinds
282
+ {
283
+ @include kind-variant('tag', $kind)
284
+ {
285
+ --sk-tag-color-base: var(--sk-#{ $kind }-base);
286
+ --sk-tag-fg: var(--sk-#{ $kind }-text);
287
+ --sk-kind-color: var(--sk-#{ $kind }-base);
288
+ --sk-tag-border-color: var(--sk-tag-border-base);
289
+ background-color: var(--sk-tag-bg);
290
+ color: var(--sk-tag-fg);
291
+ }
292
+ }
293
+
294
+ //----------------------------------------------------------------------------------------------------------------------
295
+ // Size Variants
296
+ //----------------------------------------------------------------------------------------------------------------------
297
+
298
+ @include size-variant('tag', 'xs')
299
+ {
300
+ --sk-tag-cut-size: calc(var(--sk-tag-height-base) * 0.667 / var(--sk-tag-radius-factor));
301
+
302
+ height: calc(var(--sk-tag-height-base) * 0.667);
303
+ padding-left: calc(var(--sk-tag-padding-base) * 0.75);
304
+ padding-right: calc(var(--sk-tag-padding-base) * 0.75);
305
+ font-size: calc(var(--sk-tag-font-size-base) * 0.833);
306
+
307
+ @include cut-border(
308
+ $cut: var(--sk-tag-cut-size),
309
+ $border-width: var(--sk-tag-border-width),
310
+ $border-color: var(--sk-tag-border-color),
311
+ $corners: (bottom-left top-right)
312
+ );
313
+ }
314
+
315
+ @include size-variant('tag', 'sm')
316
+ {
317
+ --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-sm) / var(--sk-tag-radius-factor));
318
+
319
+ height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-sm));
320
+ padding-left: var(--sk-tag-padding-base);
321
+ padding-right: var(--sk-tag-padding-base);
322
+ font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-sm));
323
+
324
+ @include cut-border(
325
+ $cut: var(--sk-tag-cut-size),
326
+ $border-width: var(--sk-tag-border-width),
327
+ $border-color: var(--sk-tag-border-color),
328
+ $corners: (bottom-left top-right)
329
+ );
330
+ }
331
+
332
+ @include size-variant('tag', 'md')
333
+ {
334
+ --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-md) / var(--sk-tag-radius-factor));
335
+
336
+ height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-md));
337
+ padding-left: var(--sk-tag-padding-base);
338
+ padding-right: var(--sk-tag-padding-base);
339
+ font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-md));
340
+
341
+ @include cut-border(
342
+ $cut: var(--sk-tag-cut-size),
343
+ $border-width: var(--sk-tag-border-width),
344
+ $border-color: var(--sk-tag-border-color),
345
+ $corners: (bottom-left top-right)
346
+ );
347
+ }
348
+
349
+ @include size-variant('tag', 'lg')
350
+ {
351
+ --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-lg) / var(--sk-tag-radius-factor));
352
+
353
+ height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-lg));
354
+ padding-left: var(--sk-tag-padding-base);
355
+ padding-right: var(--sk-tag-padding-base);
356
+ font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-lg));
357
+
358
+ @include cut-border(
359
+ $cut: var(--sk-tag-cut-size),
360
+ $border-width: var(--sk-tag-border-width),
361
+ $border-color: var(--sk-tag-border-color),
362
+ $corners: (bottom-left top-right)
363
+ );
364
+ }
365
+
366
+ @include size-variant('tag', 'xl')
367
+ {
368
+ --sk-tag-cut-size: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-xl) / var(--sk-tag-radius-factor));
369
+
370
+ height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-xl));
371
+ padding-left: var(--sk-tag-padding-base);
372
+ padding-right: var(--sk-tag-padding-base);
373
+ font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-xl));
374
+
375
+ @include cut-border(
376
+ $cut: var(--sk-tag-cut-size),
377
+ $border-width: var(--sk-tag-border-width),
378
+ $border-color: var(--sk-tag-border-color),
379
+ $corners: (bottom-left top-right)
380
+ );
381
+ }
382
+
383
+ //----------------------------------------------------------------------------------------------------------------------
384
+ // Variant Variants (solid / outline / subtle / ghost)
385
+ //----------------------------------------------------------------------------------------------------------------------
386
+
387
+ @include variant-variant('tag', 'solid')
388
+ {
389
+ // Variant token anchor — ensures the top-level selector pair is emitted.
390
+ --sk-tag-variant: solid;
391
+
392
+ @each $kind in $kinds
393
+ {
394
+ @include tag-solid-kind($kind);
395
+ }
396
+ }
397
+
398
+ @include variant-variant('tag', 'outline')
399
+ {
400
+ // Variant token anchor — ensures the top-level selector pair is emitted.
401
+ --sk-tag-variant: outline;
402
+
403
+ @each $kind in $kinds
404
+ {
405
+ @include tag-outline-kind($kind);
406
+ }
407
+
408
+ // Special case: neutral text and border are lighter for better differentiation
409
+ &.sk-neutral
410
+ {
411
+ --sk-tag-border-color: color-mix(in oklch, var(--sk-tag-border-base), white 25%);
412
+ color: color-mix(in oklch, var(--sk-tag-color-base), white 50%);
413
+ }
414
+ }
415
+
416
+ @include variant-variant('tag', 'subtle')
417
+ {
418
+ // Variant token anchor — ensures the top-level selector pair is emitted.
419
+ --sk-tag-variant: subtle;
420
+
421
+ @each $kind in $kinds
422
+ {
423
+ @include tag-subtle-kind($kind);
424
+ }
425
+
426
+ // Special case: neutral text and border are lighter (halfway to white) for better differentiation
427
+ &.sk-neutral
428
+ {
429
+ --sk-tag-border-color: oklch(
430
+ from color-mix(in oklch, var(--sk-tag-border-base), white 50%)
431
+ l c h / var(--sk-tag-subtle-border-opacity)
432
+ );
433
+ color: color-mix(in oklch, var(--sk-tag-color-base), white 50%);
434
+ }
435
+ }
436
+
437
+ @include variant-variant('tag', 'ghost')
438
+ {
439
+ // Variant token anchor — ensures the top-level selector pair is emitted.
440
+ --sk-tag-variant: ghost;
441
+
442
+ @each $kind in $kinds
443
+ {
444
+ @include tag-ghost-kind($kind);
445
+ }
446
+
447
+ // Special case: neutral text is lighter (halfway to white) for better differentiation
448
+ &.sk-neutral
449
+ {
450
+ color: color-mix(in oklch, var(--sk-tag-color-base), white 50%);
451
+ }
452
+ }
453
+
454
+ //----------------------------------------------------------------------------------------------------------------------
455
+ // Boolean Modifiers
456
+ //----------------------------------------------------------------------------------------------------------------------
457
+
458
+ @include bool-modifier('tag', 'removable')
459
+ {
460
+ padding-right: calc(var(--sk-tag-padding-base) * 0.5);
461
+ }
462
+
463
+ //----------------------------------------------------------------------------------------------------------------------
464
+ // Defaults When Absent
465
+ //----------------------------------------------------------------------------------------------------------------------
466
+
467
+ // Default kind: neutral
468
+ $_tag-kind-not: '';
469
+ @each $kind in $kinds
470
+ {
471
+ $_tag-kind-not: $_tag-kind-not + ':not(.sk-' + $kind + ')';
472
+ }
473
+
474
+ .sk-tag:where(#{ $_tag-kind-not })
475
+ {
476
+ --sk-tag-color-base: var(--sk-neutral-base);
477
+ --sk-tag-fg: var(--sk-neutral-text);
478
+ --sk-kind-color: var(--sk-neutral-base);
479
+ --sk-tag-border-color: var(--sk-tag-border-base);
480
+ background-color: var(--sk-tag-bg);
481
+ color: var(--sk-tag-fg);
482
+ }
483
+
484
+ // Default size: md
485
+ @include defaults-when-absent('tag', 'sk-size-')
486
+ {
487
+ height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-md));
488
+ padding-left: var(--sk-tag-padding-base);
489
+ padding-right: var(--sk-tag-padding-base);
490
+ font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-md));
491
+ }
492
+
493
+ //----------------------------------------------------------------------------------------------------------------------
494
+ // Custom-Element API Defaults (attribute-absence path)
495
+ //----------------------------------------------------------------------------------------------------------------------
496
+
497
+ // Default kind: neutral
498
+ @include defaults-when-no-attr('tag', 'kind')
499
+ {
500
+ --sk-tag-color-base: var(--sk-neutral-base);
501
+ --sk-tag-fg: var(--sk-neutral-text);
502
+ --sk-kind-color: var(--sk-neutral-base);
503
+ --sk-tag-border-color: var(--sk-tag-border-base);
504
+ background-color: var(--sk-tag-bg);
505
+ color: var(--sk-tag-fg);
506
+ }
507
+
508
+ // Default size: md
509
+ @include defaults-when-no-attr('tag', 'size')
510
+ {
511
+ height: calc(var(--sk-tag-height-base) * var(--sk-tag-scale-md));
512
+ padding-left: var(--sk-tag-padding-base);
513
+ padding-right: var(--sk-tag-padding-base);
514
+ font-size: calc(var(--sk-tag-font-size-base) * var(--sk-tag-font-scale-md));
515
+ }
516
+
517
+ //----------------------------------------------------------------------------------------------------------------------
@@ -1,4 +1,5 @@
1
- @use '@/styles/mixins/cut-border' as *;
1
+ @use '../mixins/cut-border' as *;
2
+ @use '../theme/variables' as *;
2
3
 
3
4
  //----------------------------------------------------------------------------------------------------------------------
4
5
  // TagsInput Component Styles
@@ -17,23 +18,33 @@
17
18
  display: inline-flex;
18
19
  width: 100%;
19
20
 
21
+ // Default: md when no sk-size-* class is present (zero-specificity, explicit class wins)
22
+ &:where(:not([class*="sk-size-"]))
23
+ {
24
+ --sk-tags-input-cut: 0.5rem;
25
+ }
26
+
20
27
  // Size variants
21
- &.sk-sm
28
+ &.sk-sm,
29
+ &.sk-size-sm
22
30
  {
23
31
  --sk-tags-input-cut: 0.4rem;
24
32
  }
25
33
 
26
- &.sk-md
34
+ &.sk-md,
35
+ &.sk-size-md
27
36
  {
28
37
  --sk-tags-input-cut: 0.5rem;
29
38
  }
30
39
 
31
- &.sk-lg
40
+ &.sk-lg,
41
+ &.sk-size-lg
32
42
  {
33
43
  --sk-tags-input-cut: 0.6rem;
34
44
  }
35
45
 
36
- &.sk-xl
46
+ &.sk-xl,
47
+ &.sk-size-xl
37
48
  {
38
49
  --sk-tags-input-cut: 0.7rem;
39
50
  }
@@ -188,20 +199,23 @@
188
199
  }
189
200
 
190
201
  // Size variants
191
- .sk-tags-input.sk-sm &
202
+ .sk-tags-input.sk-sm &,
203
+ .sk-tags-input.sk-size-sm &
192
204
  {
193
205
  min-height: 2rem;
194
206
  padding: calc(var(--sk-space-xs) / 2);
195
207
  gap: calc(var(--sk-space-xs) / 2);
196
208
  }
197
209
 
198
- .sk-tags-input.sk-lg &
210
+ .sk-tags-input.sk-lg &,
211
+ .sk-tags-input.sk-size-lg &
199
212
  {
200
213
  min-height: 3rem;
201
214
  padding: var(--sk-space-sm);
202
215
  }
203
216
 
204
- .sk-tags-input.sk-xl &
217
+ .sk-tags-input.sk-xl &,
218
+ .sk-tags-input.sk-size-xl &
205
219
  {
206
220
  min-height: 3.5rem;
207
221
  padding: var(--sk-space-sm);
@@ -246,22 +260,26 @@
246
260
  padding: 0;
247
261
 
248
262
  // Size variants
249
- .sk-tags-input.sk-sm &
263
+ .sk-tags-input.sk-sm &,
264
+ .sk-tags-input.sk-size-sm &
250
265
  {
251
266
  font-size: 0.875rem;
252
267
  }
253
268
 
254
- .sk-tags-input.sk-md &
269
+ .sk-tags-input.sk-md &,
270
+ .sk-tags-input.sk-size-md &
255
271
  {
256
272
  font-size: 1rem;
257
273
  }
258
274
 
259
- .sk-tags-input.sk-lg &
275
+ .sk-tags-input.sk-lg &,
276
+ .sk-tags-input.sk-size-lg &
260
277
  {
261
278
  font-size: 1.125rem;
262
279
  }
263
280
 
264
- .sk-tags-input.sk-xl &
281
+ .sk-tags-input.sk-xl &,
282
+ .sk-tags-input.sk-size-xl &
265
283
  {
266
284
  font-size: 1.25rem;
267
285
  }
@@ -278,3 +296,19 @@
278
296
  }
279
297
 
280
298
  //----------------------------------------------------------------------------------------------------------------------
299
+ // Defaults-when-absent: kind — neutral when no explicit kind class is present.
300
+ //----------------------------------------------------------------------------------------------------------------------
301
+
302
+ $_tags-input-kind-not: '';
303
+ @each $kind in $kinds
304
+ {
305
+ $_tags-input-kind-not: $_tags-input-kind-not + ':not(.sk-' + $kind + ')';
306
+ }
307
+
308
+ .sk-tags-input:where(#{ $_tags-input-kind-not })
309
+ {
310
+ --sk-tags-input-color-base: var(--sk-neutral-base);
311
+ --sk-tags-input-fg: var(--sk-neutral-text);
312
+ }
313
+
314
+ //----------------------------------------------------------------------------------------------------------------------
@@ -1,4 +1,5 @@
1
- @use '@/styles/mixins/cut-border' as *;
1
+ @use '../mixins/cut-border' as *;
2
+ @use '../theme/variables' as *;
2
3
 
3
4
  //----------------------------------------------------------------------------------------------------------------------
4
5
  // Textarea Component Styles
@@ -39,7 +40,18 @@
39
40
  transition-duration: var(--sk-transition-duration-base);
40
41
 
41
42
  // Size variants
42
- &.sk-sm
43
+
44
+ // Default: md when no sk-size-* class is present (zero-specificity, explicit class wins)
45
+ &:where(:not([class*="sk-size-"]))
46
+ {
47
+ padding: 0.75rem 1rem;
48
+ font-size: 1rem;
49
+ line-height: 1.5;
50
+ --sk-textarea-cut: 0.5rem;
51
+ }
52
+
53
+ &.sk-sm,
54
+ &.sk-size-sm
43
55
  {
44
56
  padding: 0.75rem 1rem;
45
57
  font-size: 0.875rem;
@@ -47,7 +59,8 @@
47
59
  --sk-textarea-cut: 0.4rem;
48
60
  }
49
61
 
50
- &.sk-md
62
+ &.sk-md,
63
+ &.sk-size-md
51
64
  {
52
65
  padding: 0.75rem 1rem;
53
66
  font-size: 1rem;
@@ -55,7 +68,8 @@
55
68
  --sk-textarea-cut: 0.5rem;
56
69
  }
57
70
 
58
- &.sk-lg
71
+ &.sk-lg,
72
+ &.sk-size-lg
59
73
  {
60
74
  padding: 0.75rem 1rem;
61
75
  font-size: 1.125rem;
@@ -63,7 +77,8 @@
63
77
  --sk-textarea-cut: 0.6rem;
64
78
  }
65
79
 
66
- &.sk-xl
80
+ &.sk-xl,
81
+ &.sk-size-xl
67
82
  {
68
83
  padding: 0.75rem 1rem;
69
84
  font-size: 1.25rem;
@@ -207,3 +222,19 @@
207
222
  }
208
223
 
209
224
  //----------------------------------------------------------------------------------------------------------------------
225
+ // Defaults-when-absent: kind — neutral when no explicit kind class is present.
226
+ //----------------------------------------------------------------------------------------------------------------------
227
+
228
+ $_textarea-kind-not: '';
229
+ @each $kind in $kinds
230
+ {
231
+ $_textarea-kind-not: $_textarea-kind-not + ':not(.sk-' + $kind + ')';
232
+ }
233
+
234
+ .sk-textarea:where(#{ $_textarea-kind-not })
235
+ {
236
+ --sk-textarea-color-base: var(--sk-neutral-base);
237
+ --sk-textarea-fg: var(--sk-neutral-text);
238
+ }
239
+
240
+ //----------------------------------------------------------------------------------------------------------------------