@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.
- package/dist/components/Dropdown/SkDropdown.vue.d.ts +9 -1
- package/dist/components/Dropdown/types.d.ts +2 -1
- package/dist/components/NavBar/SkNavBar.vue.d.ts +9 -1
- package/dist/components/NavBar/context.d.ts +2 -0
- package/dist/components/NavBar/types.d.ts +5 -1
- package/dist/components/NumberInput/SkNumberInput.vue.d.ts +8 -0
- package/dist/components/Page/SkPage.vue.d.ts +9 -0
- package/dist/components/ScrollArea/SkScrollArea.vue.d.ts +105 -4
- package/dist/composables/useCustomColors.d.ts +18 -56
- package/{src → dist}/global.d.ts +6 -2
- package/dist/sleekspace-ui.css +4257 -1253
- package/dist/sleekspace-ui.es.js +300 -170
- package/dist/sleekspace-ui.umd.js +299 -169
- package/dist/static/classes.d.ts +18 -0
- package/dist/static/components/alert.d.ts +12 -0
- package/dist/static/components/avatar.d.ts +9 -0
- package/dist/static/components/breadcrumbs.d.ts +6 -0
- package/dist/static/components/button.d.ts +13 -0
- package/dist/static/components/card.d.ts +5 -0
- package/dist/static/components/checkbox.d.ts +10 -0
- package/dist/static/components/colorPicker.d.ts +8 -0
- package/dist/static/components/divider.d.ts +8 -0
- package/dist/static/components/dropdown.d.ts +8 -0
- package/dist/static/components/field.d.ts +15 -0
- package/dist/static/components/group.d.ts +5 -0
- package/dist/static/components/input.d.ts +14 -0
- package/dist/static/components/navBar.d.ts +16 -0
- package/dist/static/components/numberInput.d.ts +15 -0
- package/dist/static/components/page.d.ts +9 -0
- package/dist/static/components/pagination.d.ts +5 -0
- package/dist/static/components/panel.d.ts +11 -0
- package/dist/static/components/progress.d.ts +9 -0
- package/dist/static/components/radio.d.ts +11 -0
- package/dist/static/components/select.d.ts +10 -0
- package/dist/static/components/sidebar.d.ts +9 -0
- package/dist/static/components/skeleton.d.ts +11 -0
- package/dist/static/components/slider.d.ts +12 -0
- package/dist/static/components/spinner.d.ts +12 -0
- package/dist/static/components/switchInput.d.ts +10 -0
- package/dist/static/components/table.d.ts +12 -0
- package/dist/static/components/tag.d.ts +8 -0
- package/dist/static/components/tagsInput.d.ts +7 -0
- package/dist/static/components/textarea.d.ts +12 -0
- package/dist/static/components/toolbar.d.ts +12 -0
- package/dist/static/components/tooltip.d.ts +7 -0
- package/dist/static/escape.d.ts +2 -0
- package/dist/static/index.cjs.js +1 -0
- package/dist/static/index.d.ts +68 -0
- package/dist/static/index.es.js +732 -0
- package/dist/static/render.d.ts +12 -0
- package/dist/static/specs.d.ts +2 -0
- package/dist/static/types.d.ts +43 -0
- package/dist/tokens.css +322 -0
- package/dist/types/index.d.ts +36 -0
- package/dist/utils/slots.d.ts +6 -0
- package/docs/guides/installation.md +8 -2
- package/docs/guides/pure-css/_meta.yaml +8 -0
- package/docs/guides/pure-css/class-api.md +1070 -0
- package/docs/guides/pure-css/custom-elements.md +574 -0
- package/docs/guides/pure-css/index.md +86 -0
- package/docs/guides/pure-css/limitations.md +152 -0
- package/docs/guides/pure-css/static-helpers.md +1203 -0
- package/llms-full.txt +3739 -261
- package/package.json +19 -5
- package/src/components/Alert/SkAlert.vue +4 -2
- package/src/components/Breadcrumbs/SkBreadcrumbs.vue +6 -12
- package/src/components/Button/SkButton.vue +8 -5
- package/src/components/Card/SkCard.vue +13 -5
- package/src/components/Checkbox/SkCheckbox.vue +9 -2
- package/src/components/ContextMenu/SkContextMenuRadioGroup.vue +4 -1
- package/src/components/Dropdown/SkDropdown.vue +20 -3
- package/src/components/Dropdown/SkDropdownRadioGroup.vue +4 -1
- package/src/components/Dropdown/types.ts +2 -1
- package/src/components/Modal/SkModal.vue +11 -4
- package/src/components/NavBar/SkNavBar.vue +19 -8
- package/src/components/NavBar/context.ts +4 -2
- package/src/components/NavBar/types.ts +6 -1
- package/src/components/NumberInput/SkNumberInput.vue +10 -1
- package/src/components/Page/SkPage.vue +29 -15
- package/src/components/Panel/SkPanel.vue +2 -1
- package/src/components/Popover/SkPopover.vue +11 -4
- package/src/components/Radio/SkRadio.vue +9 -2
- package/src/components/ScrollArea/SkScrollArea.vue +78 -5
- package/src/components/Switch/SkSwitch.vue +14 -13
- package/src/components/Tabs/SkTab.vue +7 -2
- package/src/components/TreeView/SkTreeItem.vue +10 -2
- package/src/components/TreeView/SkTreeView.vue +7 -2
- package/src/composables/useCustomColors.ts +86 -77
- package/src/composables/usePortalContext.test.ts +0 -2
- package/src/shims.d.ts +10 -0
- package/src/static/__tests__/parity.test.ts +717 -0
- package/src/static/__tests__/parityHarness.test.ts +98 -0
- package/src/static/__tests__/parityHarness.ts +260 -0
- package/src/static/classes.test.ts +82 -0
- package/src/static/classes.ts +111 -0
- package/src/static/components/__tests__/helpers.test.ts +837 -0
- package/src/static/components/alert.ts +117 -0
- package/src/static/components/avatar.ts +86 -0
- package/src/static/components/breadcrumbs.ts +28 -0
- package/src/static/components/button.ts +75 -0
- package/src/static/components/card.ts +27 -0
- package/src/static/components/checkbox.ts +48 -0
- package/src/static/components/colorPicker.ts +45 -0
- package/src/static/components/divider.ts +39 -0
- package/src/static/components/dropdown.ts +36 -0
- package/src/static/components/field.ts +86 -0
- package/src/static/components/group.ts +27 -0
- package/src/static/components/input.ts +55 -0
- package/src/static/components/navBar.ts +94 -0
- package/src/static/components/numberInput.ts +64 -0
- package/src/static/components/page.ts +31 -0
- package/src/static/components/pagination.ts +27 -0
- package/src/static/components/panel.ts +33 -0
- package/src/static/components/progress.ts +31 -0
- package/src/static/components/radio.ts +53 -0
- package/src/static/components/select.ts +51 -0
- package/src/static/components/sidebar.ts +85 -0
- package/src/static/components/skeleton.ts +66 -0
- package/src/static/components/slider.ts +50 -0
- package/src/static/components/spinner.ts +94 -0
- package/src/static/components/switchInput.ts +49 -0
- package/src/static/components/table.ts +88 -0
- package/src/static/components/tag.ts +76 -0
- package/src/static/components/tagsInput.ts +35 -0
- package/src/static/components/textarea.ts +53 -0
- package/src/static/components/toolbar.ts +74 -0
- package/src/static/components/tooltip.ts +29 -0
- package/src/static/escape.test.ts +53 -0
- package/src/static/escape.ts +28 -0
- package/src/static/generated/defaults.ts +379 -0
- package/src/static/generated/propTypes.ts +426 -0
- package/src/static/index.ts +116 -0
- package/src/static/render.test.ts +83 -0
- package/src/static/render.ts +76 -0
- package/src/static/specs.test.ts +58 -0
- package/src/static/specs.ts +230 -0
- package/src/static/types.ts +176 -0
- package/src/styles/__tests__/testHelpers.ts +97 -0
- package/src/styles/base/_custom-elements.scss +51 -0
- package/src/styles/base/_index.scss +4 -0
- package/src/styles/components/__tests__/componentSelectors.test.ts +2575 -0
- package/src/styles/components/_alert.scss +82 -39
- package/src/styles/components/_avatar.scss +102 -47
- package/src/styles/components/_breadcrumbs.scss +39 -37
- package/src/styles/components/_button.scss +58 -5
- package/src/styles/components/_card.scss +64 -2
- package/src/styles/components/_checkbox.scss +35 -5
- package/src/styles/components/_color-picker.scss +48 -13
- package/src/styles/components/_divider.scss +86 -52
- package/src/styles/components/_dropdown.scss +214 -0
- package/src/styles/components/_field.scss +76 -23
- package/src/styles/components/_group.scss +190 -79
- package/src/styles/components/_index.scss +1 -0
- package/src/styles/components/_input.scss +81 -5
- package/src/styles/components/_menu.scss +1 -1
- package/src/styles/components/_navbar.scss +76 -45
- package/src/styles/components/_number-input.scss +98 -85
- package/src/styles/components/_page.scss +82 -23
- package/src/styles/components/_pagination.scss +240 -212
- package/src/styles/components/_panel.scss +268 -122
- package/src/styles/components/_progress.scss +120 -70
- package/src/styles/components/_radio.scss +35 -5
- package/src/styles/components/_scroll-area.scss +50 -22
- package/src/styles/components/_select.scss +40 -9
- package/src/styles/components/_sidebar.scss +59 -34
- package/src/styles/components/_skeleton.scss +111 -65
- package/src/styles/components/_slider.scss +34 -10
- package/src/styles/components/_spinner.scss +107 -56
- package/src/styles/components/_switch.scss +36 -5
- package/src/styles/components/_table.scss +150 -166
- package/src/styles/components/_tag.scss +244 -154
- package/src/styles/components/_tags-input.scss +46 -12
- package/src/styles/components/_textarea.scss +36 -5
- package/src/styles/components/_toolbar.scss +85 -31
- package/src/styles/components/_tooltip.scss +172 -3
- package/src/styles/mixins/_cut-border.scss +18 -4
- package/src/styles/mixins/_dual-selector.scss +192 -0
- package/src/styles/mixins/_index.scss +1 -0
- package/src/styles/mixins/dualSelector.test.ts +151 -0
- package/src/styles/themes/_colorful.scss +25 -0
- package/src/styles/themes/_greyscale.scss +25 -0
- package/src/styles/themes/_shade-scale.scss +39 -0
- package/src/styles/tokens/_semantic-color-kinds.scss +66 -0
- package/src/{types.ts → types/index.ts} +19 -11
- package/src/utils/slots.ts +75 -0
- package/web-types.json +980 -137
- package/dist/composables/useCustomColors.test.d.ts +0 -1
- package/dist/composables/useFocusTrap.test.d.ts +0 -1
- package/dist/composables/usePortalContext.test.d.ts +0 -1
- package/dist/styles/mixins/fluidSize.test.d.ts +0 -1
- package/dist/types.d.ts +0 -29
|
@@ -0,0 +1,1070 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Class API Reference
|
|
3
|
+
description: Complete reference for Sleekspace's sk-* CSS class modifiers — kinds, sizes, variants, and structural wrappers for every component.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Class API Reference
|
|
7
|
+
|
|
8
|
+
The class API is Sleekspace's lowest-level styling surface. Grab the compiled CSS,
|
|
9
|
+
add the right `sk-*` classes to your HTML, and you're done. No Vue, no JS, no build tool required.
|
|
10
|
+
|
|
11
|
+
## Concepts
|
|
12
|
+
|
|
13
|
+
Every component has one **base class** (`sk-panel`, `sk-button`, etc.) plus **modifier classes**
|
|
14
|
+
that toggle kinds, sizes, states, and other boolean options. Modifiers stack on the same element.
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<!-- base only -->
|
|
18
|
+
<div class="sk-panel">…</div>
|
|
19
|
+
|
|
20
|
+
<!-- base + kind + size -->
|
|
21
|
+
<div class="sk-panel sk-primary sk-lg">…</div>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**You do not need to specify modifiers to get defaults.** If you omit `kind`, components render
|
|
25
|
+
in their default kind (usually `sk-neutral`). If you omit `size`, they render at `sk-md`.
|
|
26
|
+
Explicit classes override defaults; omitting them triggers the built-in default via
|
|
27
|
+
zero-specificity `:where()` selectors.
|
|
28
|
+
|
|
29
|
+
**Kind classes** are shared across most components: `sk-neutral`, `sk-primary`, `sk-accent`,
|
|
30
|
+
`sk-info`, `sk-success`, `sk-warning`, `sk-danger`, plus the extended palette
|
|
31
|
+
`sk-boulder`, `sk-neon-blue`, `sk-neon-green`, `sk-neon-red`, `sk-neon-yellow`.
|
|
32
|
+
|
|
33
|
+
**Size classes** are also shared: `sk-xs`, `sk-sm`, `sk-md` (default), `sk-lg`, `sk-xl`.
|
|
34
|
+
|
|
35
|
+
**Custom colors** can override the kind via inline CSS variables — see the per-component
|
|
36
|
+
note for the relevant variable name.
|
|
37
|
+
|
|
38
|
+
For container components you can also use the
|
|
39
|
+
[custom-element form](./custom-elements.md) as an alternative to class-based markup.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Component Reference
|
|
44
|
+
|
|
45
|
+
### Panel
|
|
46
|
+
|
|
47
|
+
**Base class:** `sk-panel`
|
|
48
|
+
|
|
49
|
+
**Modifiers:**
|
|
50
|
+
|
|
51
|
+
| Class | Effect | Default |
|
|
52
|
+
|-------|--------|---------|
|
|
53
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
54
|
+
| `sk-xs` … `sk-xl` | Corner decoration size | `sk-md` |
|
|
55
|
+
| `sk-cut-top-left`, `sk-cut-top-right`, `sk-cut-bottom-right`, `sk-cut-bottom-left` | Which corners are beveled | `sk-cut-bottom-right` |
|
|
56
|
+
| `sk-decoration-top-left` / … | Which corner shows the accent stripe | `sk-decoration-bottom-right` |
|
|
57
|
+
| `sk-no-border` | Remove border | off |
|
|
58
|
+
| `sk-no-decoration` | Hide accent stripe | off |
|
|
59
|
+
|
|
60
|
+
**Custom color var:** `--sk-panel-color-base`
|
|
61
|
+
|
|
62
|
+
**Rendered HTML:**
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<div class="sk-panel sk-primary sk-lg sk-cut-top-left sk-cut-bottom-right sk-decoration-top-left">
|
|
66
|
+
<p>Primary panel with diagonal cuts.</p>
|
|
67
|
+
</div>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
[See Vue docs →](/components/panel)
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### Card
|
|
75
|
+
|
|
76
|
+
**Base class:** `sk-card`
|
|
77
|
+
|
|
78
|
+
**Modifiers:**
|
|
79
|
+
|
|
80
|
+
| Class | Effect | Default |
|
|
81
|
+
|-------|--------|---------|
|
|
82
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
83
|
+
|
|
84
|
+
The card shell is the outer container. Inner structure (header, media, footer) is composed
|
|
85
|
+
with child elements — the static helper leaves slotting to you.
|
|
86
|
+
|
|
87
|
+
**Custom color var:** `--sk-panel-color-base`
|
|
88
|
+
|
|
89
|
+
**Rendered HTML:**
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<div class="sk-card sk-accent">
|
|
93
|
+
<div class="sk-card-header"><h3>Card Title</h3></div>
|
|
94
|
+
<div class="sk-card-body"><p>Content here.</p></div>
|
|
95
|
+
</div>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
[See Vue docs →](/components/card)
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### Alert
|
|
103
|
+
|
|
104
|
+
**Base class:** `sk-alert`
|
|
105
|
+
|
|
106
|
+
**Modifiers:**
|
|
107
|
+
|
|
108
|
+
| Class | Effect | Default |
|
|
109
|
+
|-------|--------|---------|
|
|
110
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-info` |
|
|
111
|
+
| `sk-subtle` | Lower-contrast background variant | off |
|
|
112
|
+
|
|
113
|
+
The element should carry `role="alert"` for accessibility.
|
|
114
|
+
|
|
115
|
+
The static helper emits a two-wrapper structure: an optional icon div followed by a content
|
|
116
|
+
wrapper. When building the class API form by hand, mirror this structure so CSS spacing rules
|
|
117
|
+
apply correctly:
|
|
118
|
+
|
|
119
|
+
**Rendered HTML (info kind, default — with icon):**
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<div class="sk-alert sk-info" role="alert">
|
|
123
|
+
<div class="sk-alert-icon">
|
|
124
|
+
<!-- info SVG icon -->
|
|
125
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
126
|
+
<circle cx="12" cy="12" r="10"></circle>
|
|
127
|
+
<line x1="12" y1="16" x2="12" y2="12"></line>
|
|
128
|
+
<circle cx="12" cy="8" r="0.5" fill="currentColor"></circle>
|
|
129
|
+
</svg>
|
|
130
|
+
</div>
|
|
131
|
+
<div class="sk-alert-content">
|
|
132
|
+
<p>Something to note.</p>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Rendered HTML (neutral kind — no icon):**
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<div class="sk-alert sk-neutral" role="alert">
|
|
141
|
+
<div class="sk-alert-content">
|
|
142
|
+
<p>Deployment paused — review the diff before continuing.</p>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Icons are auto-selected for the four feedback kinds (info, success, warning, danger).
|
|
148
|
+
Non-feedback kinds (neutral, primary, accent) render without an icon container.
|
|
149
|
+
|
|
150
|
+
**Custom color var:** `--sk-alert-color-base`
|
|
151
|
+
|
|
152
|
+
[See Vue docs →](/components/alert)
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### Divider
|
|
157
|
+
|
|
158
|
+
**Base class:** `sk-divider`
|
|
159
|
+
|
|
160
|
+
**Modifiers:**
|
|
161
|
+
|
|
162
|
+
| Class | Effect | Default |
|
|
163
|
+
|-------|--------|---------|
|
|
164
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
165
|
+
| `sk-horizontal` / `sk-vertical` | Layout axis | `sk-horizontal` |
|
|
166
|
+
| `sk-md` / `sk-xs` … `sk-xl` | Line thickness | `sk-md` |
|
|
167
|
+
| `sk-subtle` | Lower-contrast line | off |
|
|
168
|
+
|
|
169
|
+
Note: the divider emits an `<hr>` element (not a `<div>`), and uses `sk-horizontal` / `sk-vertical`
|
|
170
|
+
directly (not `sk-orientation-*`). The element carries `role="separator"` automatically.
|
|
171
|
+
|
|
172
|
+
**Rendered HTML:**
|
|
173
|
+
|
|
174
|
+
```html
|
|
175
|
+
<hr class="sk-divider sk-horizontal sk-neutral sk-md" role="separator">
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
[See Vue docs →](/components/divider)
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### Page
|
|
183
|
+
|
|
184
|
+
**Base class:** `sk-page`
|
|
185
|
+
|
|
186
|
+
**Modifiers:**
|
|
187
|
+
|
|
188
|
+
| Class | Effect | Default |
|
|
189
|
+
|-------|--------|---------|
|
|
190
|
+
| `sk-fixed-header` | Stick header to viewport top | off |
|
|
191
|
+
| `sk-fixed-footer` | Stick footer to viewport bottom | off |
|
|
192
|
+
| `sk-flush` | Remove outer padding | off |
|
|
193
|
+
|
|
194
|
+
`sk-page` is a layout shell. Inner regions use `sk-page-header`, `sk-page-main`,
|
|
195
|
+
`sk-page-sidebar`, `sk-page-aside`, and `sk-page-footer` as child elements.
|
|
196
|
+
|
|
197
|
+
**Rendered HTML:**
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<div class="sk-page sk-fixed-header">
|
|
201
|
+
<header class="sk-page-header">…</header>
|
|
202
|
+
<main class="sk-page-main">…</main>
|
|
203
|
+
</div>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
[See Vue docs →](/components/page)
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
### Group
|
|
211
|
+
|
|
212
|
+
**Base class:** `sk-group`
|
|
213
|
+
|
|
214
|
+
**Modifiers:**
|
|
215
|
+
|
|
216
|
+
| Class | Effect | Default |
|
|
217
|
+
|-------|--------|---------|
|
|
218
|
+
| `sk-horizontal` / `sk-vertical` | Flex direction | `sk-horizontal` |
|
|
219
|
+
|
|
220
|
+
Groups child elements with joined borders, removing intermediate gaps and rounding only
|
|
221
|
+
outer corners.
|
|
222
|
+
|
|
223
|
+
**Rendered HTML:**
|
|
224
|
+
|
|
225
|
+
```html
|
|
226
|
+
<div class="sk-group sk-horizontal">
|
|
227
|
+
<button class="sk-button sk-neutral" type="button">
|
|
228
|
+
<span class="sk-button-chrome">A</span>
|
|
229
|
+
</button>
|
|
230
|
+
<button class="sk-button sk-neutral" type="button">
|
|
231
|
+
<span class="sk-button-chrome">B</span>
|
|
232
|
+
</button>
|
|
233
|
+
</div>
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
[See Vue docs →](/components/group)
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### Skeleton
|
|
241
|
+
|
|
242
|
+
**Base class:** `sk-skeleton`
|
|
243
|
+
|
|
244
|
+
**Modifiers:**
|
|
245
|
+
|
|
246
|
+
| Class | Effect | Default |
|
|
247
|
+
|-------|--------|---------|
|
|
248
|
+
| `sk-text` / `sk-circular` / `sk-rectangular` / `sk-square` | Shape variant | `sk-text` |
|
|
249
|
+
| `sk-shimmer` | Shimmer animation | `sk-shimmer` (default on) |
|
|
250
|
+
| `sk-pulse` | Pulse animation | off |
|
|
251
|
+
|
|
252
|
+
Note: the variant class names are `sk-text`, `sk-circular`, `sk-rectangular`, `sk-square`
|
|
253
|
+
(not `sk-shape-*`). The static helper defaults animation to `sk-shimmer`; omit both
|
|
254
|
+
`sk-shimmer` and `sk-pulse` for a static (no-animation) skeleton.
|
|
255
|
+
|
|
256
|
+
Width and height are set via inline style — they have no CSS class equivalent.
|
|
257
|
+
|
|
258
|
+
**Rendered HTML:**
|
|
259
|
+
|
|
260
|
+
```html
|
|
261
|
+
<!-- text skeleton with shimmer (defaults) -->
|
|
262
|
+
<div class="sk-skeleton sk-text sk-shimmer"></div>
|
|
263
|
+
|
|
264
|
+
<!-- rect skeleton with explicit dimensions -->
|
|
265
|
+
<div class="sk-skeleton sk-rectangular sk-shimmer" style="width: 200px; height: 40px;"></div>
|
|
266
|
+
|
|
267
|
+
<!-- circular avatar placeholder -->
|
|
268
|
+
<div class="sk-skeleton sk-circular sk-pulse" style="width: 48px; height: 48px;"></div>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
[See Vue docs →](/components/skeleton)
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
### Progress
|
|
276
|
+
|
|
277
|
+
**Base class:** `sk-progress`
|
|
278
|
+
|
|
279
|
+
**Modifiers:**
|
|
280
|
+
|
|
281
|
+
| Class | Effect | Default |
|
|
282
|
+
|-------|--------|---------|
|
|
283
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
284
|
+
| `sk-xs` … `sk-xl` | Bar height | `sk-md` |
|
|
285
|
+
| `sk-indeterminate` | Animated indeterminate state | off |
|
|
286
|
+
|
|
287
|
+
Uses the `<progress>` element natively. Pass `value` and `max` attributes.
|
|
288
|
+
|
|
289
|
+
**Rendered HTML:**
|
|
290
|
+
|
|
291
|
+
```html
|
|
292
|
+
<progress class="sk-progress sk-primary sk-sm" value="40" max="100"></progress>
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
[See Vue docs →](/components/progress)
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
### Spinner
|
|
300
|
+
|
|
301
|
+
**Base class:** `sk-spinner`
|
|
302
|
+
|
|
303
|
+
**Modifiers:**
|
|
304
|
+
|
|
305
|
+
| Class | Effect | Default |
|
|
306
|
+
|-------|--------|---------|
|
|
307
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-primary` |
|
|
308
|
+
| `sk-xs` … `sk-xl` | Spinner diameter | `sk-md` |
|
|
309
|
+
| `sk-variant-circular` / `sk-variant-dots` / `sk-variant-crosshair` | Visual style | `sk-variant-circular` |
|
|
310
|
+
|
|
311
|
+
The spinner emits ARIA attributes (`role="status"`, `aria-live="polite"`, `aria-label="Loading"`)
|
|
312
|
+
and a variant-specific inner DOM. Mirror this structure when using the class API directly:
|
|
313
|
+
|
|
314
|
+
**Rendered HTML (circular — default):**
|
|
315
|
+
|
|
316
|
+
```html
|
|
317
|
+
<div class="sk-spinner sk-primary sk-md sk-variant-circular"
|
|
318
|
+
role="status" aria-live="polite" aria-label="Loading">
|
|
319
|
+
<div class="sk-spinner-circular">
|
|
320
|
+
<div class="sk-arc sk-arc-large"></div>
|
|
321
|
+
<div class="sk-arc sk-arc-small"></div>
|
|
322
|
+
</div>
|
|
323
|
+
</div>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Rendered HTML (dots):**
|
|
327
|
+
|
|
328
|
+
```html
|
|
329
|
+
<div class="sk-spinner sk-accent sk-lg sk-variant-dots"
|
|
330
|
+
role="status" aria-live="polite" aria-label="Loading">
|
|
331
|
+
<div class="sk-spinner-dots">
|
|
332
|
+
<div class="sk-dot"></div>
|
|
333
|
+
<div class="sk-dot"></div>
|
|
334
|
+
<div class="sk-dot"></div>
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**Rendered HTML (crosshair):**
|
|
340
|
+
|
|
341
|
+
```html
|
|
342
|
+
<div class="sk-spinner sk-neutral sk-md sk-variant-crosshair"
|
|
343
|
+
role="status" aria-live="polite" aria-label="Loading">
|
|
344
|
+
<div class="sk-crosshair-loader"></div>
|
|
345
|
+
</div>
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
[See Vue docs →](/components/spinner)
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
### NavBar
|
|
353
|
+
|
|
354
|
+
**Base class:** `sk-navbar`
|
|
355
|
+
|
|
356
|
+
**Modifiers:**
|
|
357
|
+
|
|
358
|
+
| Class | Effect | Default |
|
|
359
|
+
|-------|--------|---------|
|
|
360
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
361
|
+
| `sk-sticky` | Position sticky at viewport top | on (default) |
|
|
362
|
+
|
|
363
|
+
The navbar emits a content wrapper with optional slot regions inside. Each slot region is
|
|
364
|
+
only emitted when it has content:
|
|
365
|
+
|
|
366
|
+
**Rendered HTML (with leading, brand, nav, and actions):**
|
|
367
|
+
|
|
368
|
+
```html
|
|
369
|
+
<nav class="sk-navbar sk-neutral sk-sticky">
|
|
370
|
+
<div class="sk-navbar-content">
|
|
371
|
+
<div class="sk-navbar-leading"><!-- sidebar toggle --></div>
|
|
372
|
+
<div class="sk-navbar-brand">MySite</div>
|
|
373
|
+
<div class="sk-navbar-nav">
|
|
374
|
+
<a href="/docs">Docs</a>
|
|
375
|
+
</div>
|
|
376
|
+
<div class="sk-navbar-actions"><!-- user menu --></div>
|
|
377
|
+
</div>
|
|
378
|
+
</nav>
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Rendered HTML (brand + nav only):**
|
|
382
|
+
|
|
383
|
+
```html
|
|
384
|
+
<nav class="sk-navbar sk-neutral sk-sticky">
|
|
385
|
+
<div class="sk-navbar-content">
|
|
386
|
+
<div class="sk-navbar-brand">MySite</div>
|
|
387
|
+
<div class="sk-navbar-nav">…</div>
|
|
388
|
+
</div>
|
|
389
|
+
</nav>
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**Custom color vars:** `--sk-navbar-color-base`, `--sk-navbar-fg`
|
|
393
|
+
|
|
394
|
+
[See Vue docs →](/components/navbar)
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
### Toolbar
|
|
399
|
+
|
|
400
|
+
**Base class:** `sk-toolbar`
|
|
401
|
+
|
|
402
|
+
**Modifiers:**
|
|
403
|
+
|
|
404
|
+
| Class | Effect | Default |
|
|
405
|
+
|-------|--------|---------|
|
|
406
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
407
|
+
| `sk-horizontal` / `sk-vertical` | Layout axis | `sk-horizontal` |
|
|
408
|
+
| `sk-cut-top-left`, `sk-cut-top-right`, `sk-cut-bottom-right`, `sk-cut-bottom-left` | Beveled corners | all four (default) |
|
|
409
|
+
|
|
410
|
+
The element should carry `role="toolbar"`. Orientation uses `sk-horizontal` / `sk-vertical`
|
|
411
|
+
directly (not `sk-orientation-*`). By default all four corners are cut.
|
|
412
|
+
|
|
413
|
+
**Rendered HTML:**
|
|
414
|
+
|
|
415
|
+
```html
|
|
416
|
+
<div class="sk-toolbar sk-neutral sk-horizontal sk-cut-top-left sk-cut-top-right sk-cut-bottom-right sk-cut-bottom-left"
|
|
417
|
+
role="toolbar">
|
|
418
|
+
<button class="sk-button sk-neutral" type="button">
|
|
419
|
+
<span class="sk-button-chrome">Cut</span>
|
|
420
|
+
</button>
|
|
421
|
+
<button class="sk-button sk-neutral" type="button">
|
|
422
|
+
<span class="sk-button-chrome">Copy</span>
|
|
423
|
+
</button>
|
|
424
|
+
</div>
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
**Custom color vars:** `--sk-toolbar-color-base`, `--sk-toolbar-fg`
|
|
428
|
+
|
|
429
|
+
[See Vue docs →](/components/toolbar)
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
### Sidebar
|
|
434
|
+
|
|
435
|
+
**Base class:** `sk-sidebar`
|
|
436
|
+
|
|
437
|
+
**Modifiers (on `<aside>`):**
|
|
438
|
+
|
|
439
|
+
| Class | Effect | Default |
|
|
440
|
+
|-------|--------|---------|
|
|
441
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
442
|
+
| `sk-sidebar-right` | Mount on the right side | off (left) |
|
|
443
|
+
| `sk-dense` | Compact item padding | off |
|
|
444
|
+
|
|
445
|
+
The sidebar emits a rich inner structure. Drawer open/close behavior is Vue-only; the class
|
|
446
|
+
API form is always visible. Inner panel corner is `sk-cut-bottom-right` (left side) or
|
|
447
|
+
`sk-cut-bottom-left` (right side).
|
|
448
|
+
|
|
449
|
+
**Rendered HTML (left sidebar, neutral):**
|
|
450
|
+
|
|
451
|
+
```html
|
|
452
|
+
<aside class="sk-sidebar sk-neutral">
|
|
453
|
+
<div class="sk-panel sk-neutral sk-md sk-cut-bottom-right sk-decoration-bottom-right sk-sidebar-panel">
|
|
454
|
+
<div class="sk-panel-scroll-content">
|
|
455
|
+
<nav class="sk-sidebar-nav">
|
|
456
|
+
<!-- navigation links -->
|
|
457
|
+
</nav>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
</aside>
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
[See Vue docs →](/components/sidebar)
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
### Breadcrumbs
|
|
468
|
+
|
|
469
|
+
**Base class:** `sk-breadcrumbs`
|
|
470
|
+
|
|
471
|
+
**Modifiers:**
|
|
472
|
+
|
|
473
|
+
| Class | Effect | Default |
|
|
474
|
+
|-------|--------|---------|
|
|
475
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
476
|
+
|
|
477
|
+
Uses a `<nav>` element. Add `aria-label="Breadcrumbs"` for accessibility.
|
|
478
|
+
|
|
479
|
+
**Rendered HTML:**
|
|
480
|
+
|
|
481
|
+
```html
|
|
482
|
+
<nav class="sk-breadcrumbs sk-neutral" aria-label="Breadcrumbs">
|
|
483
|
+
<ol>
|
|
484
|
+
<li><a href="/">Home</a></li>
|
|
485
|
+
<li><a href="/docs">Docs</a></li>
|
|
486
|
+
<li aria-current="page">Installation</li>
|
|
487
|
+
</ol>
|
|
488
|
+
</nav>
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
[See Vue docs →](/components/breadcrumbs)
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
### Pagination
|
|
496
|
+
|
|
497
|
+
**Base class:** `sk-pagination`
|
|
498
|
+
|
|
499
|
+
**Modifiers:**
|
|
500
|
+
|
|
501
|
+
| Class | Effect | Default |
|
|
502
|
+
|-------|--------|---------|
|
|
503
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
504
|
+
|
|
505
|
+
Uses a `<nav>` element. Add `aria-label="Pagination"`.
|
|
506
|
+
|
|
507
|
+
**Rendered HTML:**
|
|
508
|
+
|
|
509
|
+
```html
|
|
510
|
+
<nav class="sk-pagination sk-neutral" aria-label="Pagination">
|
|
511
|
+
<button class="sk-button sk-neutral" type="button" aria-label="Previous">
|
|
512
|
+
<span class="sk-button-chrome">‹</span>
|
|
513
|
+
</button>
|
|
514
|
+
<button class="sk-button sk-primary" type="button" aria-current="page">
|
|
515
|
+
<span class="sk-button-chrome">1</span>
|
|
516
|
+
</button>
|
|
517
|
+
<button class="sk-button sk-neutral" type="button">
|
|
518
|
+
<span class="sk-button-chrome">2</span>
|
|
519
|
+
</button>
|
|
520
|
+
<button class="sk-button sk-neutral" type="button" aria-label="Next">
|
|
521
|
+
<span class="sk-button-chrome">›</span>
|
|
522
|
+
</button>
|
|
523
|
+
</nav>
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
[See Vue docs →](/components/pagination)
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
### Tag
|
|
531
|
+
|
|
532
|
+
**Base class:** `sk-tag`
|
|
533
|
+
|
|
534
|
+
**Modifiers:**
|
|
535
|
+
|
|
536
|
+
| Class | Effect | Default |
|
|
537
|
+
|-------|--------|---------|
|
|
538
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
539
|
+
| `sk-xs` … `sk-xl` | Tag size | `sk-md` |
|
|
540
|
+
| `sk-solid` / `sk-outline` / `sk-ghost` | Visual variant | `sk-solid` |
|
|
541
|
+
| `sk-removable` | Show remove affordance | off |
|
|
542
|
+
|
|
543
|
+
Uses a `<span>` element. Content must be wrapped in `<span class="sk-tag-content">`. When
|
|
544
|
+
`sk-removable` is present, include the remove button after the content span.
|
|
545
|
+
|
|
546
|
+
**Rendered HTML (simple):**
|
|
547
|
+
|
|
548
|
+
```html
|
|
549
|
+
<span class="sk-tag sk-accent sk-solid sk-sm">
|
|
550
|
+
<span class="sk-tag-content">Beta</span>
|
|
551
|
+
</span>
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
**Rendered HTML (removable):**
|
|
555
|
+
|
|
556
|
+
```html
|
|
557
|
+
<span class="sk-tag sk-neutral sk-solid sk-md sk-removable">
|
|
558
|
+
<span class="sk-tag-content">design-system</span>
|
|
559
|
+
<button type="button" class="sk-tag-remove" aria-label="Remove">
|
|
560
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"
|
|
561
|
+
viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
562
|
+
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
563
|
+
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
564
|
+
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
565
|
+
</svg>
|
|
566
|
+
</button>
|
|
567
|
+
</span>
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
**Custom color vars:** `--sk-tag-color-base`, `--sk-tag-fg`
|
|
571
|
+
|
|
572
|
+
[See Vue docs →](/components/tag)
|
|
573
|
+
|
|
574
|
+
---
|
|
575
|
+
|
|
576
|
+
### Avatar
|
|
577
|
+
|
|
578
|
+
**Base class:** `sk-avatar`
|
|
579
|
+
|
|
580
|
+
**Modifiers:**
|
|
581
|
+
|
|
582
|
+
| Class | Effect | Default |
|
|
583
|
+
|-------|--------|---------|
|
|
584
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
585
|
+
| `sk-xs` … `sk-xl` | Avatar size | `sk-md` |
|
|
586
|
+
|
|
587
|
+
Note: there is no `shape` modifier — the Vue component does not expose a shape prop; avatars
|
|
588
|
+
are always circular.
|
|
589
|
+
|
|
590
|
+
The inner content follows a priority chain: image (`src`) → initials text → default person icon SVG.
|
|
591
|
+
|
|
592
|
+
**Rendered HTML (with image):**
|
|
593
|
+
|
|
594
|
+
```html
|
|
595
|
+
<div class="sk-avatar sk-neutral sk-md">
|
|
596
|
+
<img src="/avatar.jpg" alt="User name" class="sk-avatar-image">
|
|
597
|
+
</div>
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
**Rendered HTML (with initials):**
|
|
601
|
+
|
|
602
|
+
```html
|
|
603
|
+
<div class="sk-avatar sk-primary sk-lg">
|
|
604
|
+
<span class="sk-avatar-initials">AB</span>
|
|
605
|
+
</div>
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
**Rendered HTML (fallback icon, no src or initials):**
|
|
609
|
+
|
|
610
|
+
```html
|
|
611
|
+
<div class="sk-avatar sk-neutral sk-md">
|
|
612
|
+
<svg class="sk-avatar-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
613
|
+
<path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"></path>
|
|
614
|
+
</svg>
|
|
615
|
+
</div>
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
**Custom color vars:** `--sk-avatar-color-base`, `--sk-avatar-fg`
|
|
619
|
+
|
|
620
|
+
[See Vue docs →](/components/avatar)
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
### Field
|
|
625
|
+
|
|
626
|
+
**Base class:** `sk-field`
|
|
627
|
+
|
|
628
|
+
**Modifiers:**
|
|
629
|
+
|
|
630
|
+
| Class | Effect | Default |
|
|
631
|
+
|-------|--------|---------|
|
|
632
|
+
| `sk-label-top` / `sk-label-left` / `sk-label-right` | Label placement | `sk-label-top` |
|
|
633
|
+
| `sk-has-error` | Error state styling | off |
|
|
634
|
+
|
|
635
|
+
Wrap a label + input in a field for consistent layout and error messaging. The input wrapper
|
|
636
|
+
div is always emitted. Label, description, and error paragraphs are optional.
|
|
637
|
+
|
|
638
|
+
**Rendered HTML (with label):**
|
|
639
|
+
|
|
640
|
+
```html
|
|
641
|
+
<div class="sk-field sk-label-top">
|
|
642
|
+
<label for="email" class="sk-field-label">Email</label>
|
|
643
|
+
<div class="sk-field-input-wrapper">
|
|
644
|
+
<input class="sk-input sk-neutral" id="email" type="email" />
|
|
645
|
+
</div>
|
|
646
|
+
</div>
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
**Rendered HTML (with error):**
|
|
650
|
+
|
|
651
|
+
```html
|
|
652
|
+
<div class="sk-field sk-label-top sk-has-error">
|
|
653
|
+
<label for="email" class="sk-field-label">Email</label>
|
|
654
|
+
<div class="sk-field-input-wrapper">
|
|
655
|
+
<input class="sk-input sk-neutral" id="email" type="email" />
|
|
656
|
+
</div>
|
|
657
|
+
<p id="email-error" class="sk-field-error">Please enter a valid email address.</p>
|
|
658
|
+
</div>
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
**Rendered HTML (required field):**
|
|
662
|
+
|
|
663
|
+
```html
|
|
664
|
+
<div class="sk-field sk-label-top">
|
|
665
|
+
<label for="name" class="sk-field-label">
|
|
666
|
+
Name<span class="sk-field-required">*</span>
|
|
667
|
+
</label>
|
|
668
|
+
<div class="sk-field-input-wrapper">
|
|
669
|
+
<input class="sk-input sk-neutral" id="name" type="text" required />
|
|
670
|
+
</div>
|
|
671
|
+
</div>
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
[See Vue docs →](/components/field)
|
|
675
|
+
|
|
676
|
+
---
|
|
677
|
+
|
|
678
|
+
### Table
|
|
679
|
+
|
|
680
|
+
**Base class:** `sk-table`
|
|
681
|
+
|
|
682
|
+
**Modifiers:**
|
|
683
|
+
|
|
684
|
+
| Class | Effect | Default |
|
|
685
|
+
|-------|--------|---------|
|
|
686
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
687
|
+
| `sk-default` / other variants | Visual variant | `sk-default` |
|
|
688
|
+
| `sk-striped` | Alternating row backgrounds | off |
|
|
689
|
+
| `sk-hoverable` | Row hover highlight | on (default) |
|
|
690
|
+
| `sk-bordered` | Outer border | on (default) |
|
|
691
|
+
| `sk-no-inner-borders` | Suppress inner cell borders | on (default — inner borders off) |
|
|
692
|
+
| `sk-subtle` | Reduced contrast | off |
|
|
693
|
+
|
|
694
|
+
The table is wrapped in a `sk-table-wrapper` div. Both elements receive modifier classes.
|
|
695
|
+
|
|
696
|
+
**Rendered HTML (defaults):**
|
|
697
|
+
|
|
698
|
+
```html
|
|
699
|
+
<div class="sk-table-wrapper sk-table-wrapper-neutral">
|
|
700
|
+
<table class="sk-table sk-neutral sk-default sk-hoverable sk-bordered sk-no-inner-borders">
|
|
701
|
+
<thead>
|
|
702
|
+
<tr><th>Name</th><th>Role</th></tr>
|
|
703
|
+
</thead>
|
|
704
|
+
<tbody>
|
|
705
|
+
<tr><td>Alice</td><td>Engineer</td></tr>
|
|
706
|
+
</tbody>
|
|
707
|
+
</table>
|
|
708
|
+
</div>
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
**Rendered HTML (striped, dark background, subtle):**
|
|
712
|
+
|
|
713
|
+
```html
|
|
714
|
+
<div class="sk-table-wrapper sk-table-wrapper-neutral sk-dark-background sk-subtle">
|
|
715
|
+
<table class="sk-table sk-neutral sk-default sk-striped sk-hoverable sk-bordered sk-no-inner-borders sk-subtle">
|
|
716
|
+
<thead><tr><th>Name</th></tr></thead>
|
|
717
|
+
<tbody><tr><td>Alice</td></tr></tbody>
|
|
718
|
+
</table>
|
|
719
|
+
</div>
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
**Custom color vars:** `--sk-table-color-base`, `--sk-table-fg`
|
|
723
|
+
|
|
724
|
+
[See Vue docs →](/components/table)
|
|
725
|
+
|
|
726
|
+
---
|
|
727
|
+
|
|
728
|
+
### Tooltip
|
|
729
|
+
|
|
730
|
+
**Base class:** `sk-tooltip`
|
|
731
|
+
|
|
732
|
+
**Modifiers:**
|
|
733
|
+
|
|
734
|
+
| Class | Effect | Default |
|
|
735
|
+
|-------|--------|---------|
|
|
736
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
737
|
+
| `sk-solid` / `sk-outline` | Visual variant | `sk-solid` |
|
|
738
|
+
| `sk-placement-top` / `sk-placement-right` / `sk-placement-bottom` / `sk-placement-left` | Tooltip position | `sk-placement-top` |
|
|
739
|
+
|
|
740
|
+
The element should carry `role="tooltip"`. The Vue version includes a JS-managed trigger
|
|
741
|
+
and positioning engine — the class API is for static rendering of pre-positioned tooltips.
|
|
742
|
+
|
|
743
|
+
**Rendered HTML:**
|
|
744
|
+
|
|
745
|
+
```html
|
|
746
|
+
<div class="sk-tooltip sk-neutral sk-solid sk-placement-top" role="tooltip">
|
|
747
|
+
Click to expand
|
|
748
|
+
</div>
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
[See Vue docs →](/components/tooltip)
|
|
752
|
+
|
|
753
|
+
---
|
|
754
|
+
|
|
755
|
+
### Button
|
|
756
|
+
|
|
757
|
+
**Base class:** `sk-button`
|
|
758
|
+
|
|
759
|
+
**Modifiers:**
|
|
760
|
+
|
|
761
|
+
| Class | Effect | Default |
|
|
762
|
+
|-------|--------|---------|
|
|
763
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
764
|
+
| `sk-xs` … `sk-xl` | Button size | `sk-md` |
|
|
765
|
+
| `sk-solid` / `sk-outline` / `sk-ghost` | Visual variant | `sk-solid` |
|
|
766
|
+
| `sk-loading` | Spinner + aria-busy | off |
|
|
767
|
+
| `sk-pressed` | aria-pressed state | off |
|
|
768
|
+
| `sk-dense` | Compact padding | off |
|
|
769
|
+
|
|
770
|
+
Button children must be wrapped in `<span class="sk-button-chrome">`.
|
|
771
|
+
|
|
772
|
+
**Rendered HTML (button element):**
|
|
773
|
+
|
|
774
|
+
```html
|
|
775
|
+
<button class="sk-button sk-primary sk-lg sk-solid" type="button">
|
|
776
|
+
<span class="sk-button-chrome">Launch</span>
|
|
777
|
+
</button>
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
**Rendered HTML (anchor variant):**
|
|
781
|
+
|
|
782
|
+
```html
|
|
783
|
+
<a class="sk-button sk-accent sk-outline" href="/docs">
|
|
784
|
+
<span class="sk-button-chrome">Read the docs</span>
|
|
785
|
+
</a>
|
|
786
|
+
```
|
|
787
|
+
|
|
788
|
+
[See Vue docs →](/components/button)
|
|
789
|
+
|
|
790
|
+
---
|
|
791
|
+
|
|
792
|
+
### Input
|
|
793
|
+
|
|
794
|
+
**Base class:** `sk-input`
|
|
795
|
+
|
|
796
|
+
**Modifiers:**
|
|
797
|
+
|
|
798
|
+
| Class | Effect | Default |
|
|
799
|
+
|-------|--------|---------|
|
|
800
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
801
|
+
| `sk-xs` … `sk-xl` | Input size | `sk-md` |
|
|
802
|
+
|
|
803
|
+
Apply directly to the `<input>` element.
|
|
804
|
+
|
|
805
|
+
**Rendered HTML:**
|
|
806
|
+
|
|
807
|
+
```html
|
|
808
|
+
<input class="sk-input sk-neutral" type="text" placeholder="Search…" />
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
[See Vue docs →](/components/input)
|
|
812
|
+
|
|
813
|
+
---
|
|
814
|
+
|
|
815
|
+
### Textarea
|
|
816
|
+
|
|
817
|
+
**Base class:** `sk-textarea`
|
|
818
|
+
|
|
819
|
+
**Modifiers:**
|
|
820
|
+
|
|
821
|
+
| Class | Effect | Default |
|
|
822
|
+
|-------|--------|---------|
|
|
823
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
824
|
+
| `sk-xs` … `sk-xl` | Textarea size | `sk-md` |
|
|
825
|
+
|
|
826
|
+
**Rendered HTML:**
|
|
827
|
+
|
|
828
|
+
```html
|
|
829
|
+
<textarea class="sk-textarea sk-neutral" rows="4" placeholder="Enter description…"></textarea>
|
|
830
|
+
```
|
|
831
|
+
|
|
832
|
+
[See Vue docs →](/components/textarea)
|
|
833
|
+
|
|
834
|
+
---
|
|
835
|
+
|
|
836
|
+
### Select
|
|
837
|
+
|
|
838
|
+
**Base class:** `sk-select`
|
|
839
|
+
|
|
840
|
+
**Modifiers:**
|
|
841
|
+
|
|
842
|
+
| Class | Effect | Default |
|
|
843
|
+
|-------|--------|---------|
|
|
844
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
845
|
+
| `sk-xs` … `sk-xl` | Select size | `sk-md` |
|
|
846
|
+
|
|
847
|
+
Apply to the native `<select>` element. The popup uses native browser styling; appearance
|
|
848
|
+
can be overridden with `appearance: base-select` in Chromium.
|
|
849
|
+
|
|
850
|
+
**Rendered HTML:**
|
|
851
|
+
|
|
852
|
+
```html
|
|
853
|
+
<select class="sk-select sk-neutral">
|
|
854
|
+
<option value="">Choose…</option>
|
|
855
|
+
<option value="a">Option A</option>
|
|
856
|
+
</select>
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
[See Vue docs →](/components/select)
|
|
860
|
+
|
|
861
|
+
---
|
|
862
|
+
|
|
863
|
+
### Slider
|
|
864
|
+
|
|
865
|
+
**Base class:** `sk-slider`
|
|
866
|
+
|
|
867
|
+
**Modifiers:**
|
|
868
|
+
|
|
869
|
+
| Class | Effect | Default |
|
|
870
|
+
|-------|--------|---------|
|
|
871
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
872
|
+
| `sk-xs` … `sk-xl` | Slider size | `sk-md` |
|
|
873
|
+
|
|
874
|
+
Apply to `<input type="range">`. Single-thumb only — Vue's dual-thumb variant requires JS.
|
|
875
|
+
|
|
876
|
+
**Rendered HTML:**
|
|
877
|
+
|
|
878
|
+
```html
|
|
879
|
+
<input class="sk-slider sk-primary" type="range" min="0" max="100" value="40" />
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
[See Vue docs →](/components/slider)
|
|
883
|
+
|
|
884
|
+
---
|
|
885
|
+
|
|
886
|
+
### ColorPicker
|
|
887
|
+
|
|
888
|
+
**Base class:** `sk-color-picker`
|
|
889
|
+
|
|
890
|
+
**Modifiers:**
|
|
891
|
+
|
|
892
|
+
| Class | Effect | Default |
|
|
893
|
+
|-------|--------|---------|
|
|
894
|
+
| `sk-xs` … `sk-xl` | Swatch size | `sk-md` |
|
|
895
|
+
|
|
896
|
+
Apply to `<input type="color">`. The palette UI is Vue-only.
|
|
897
|
+
|
|
898
|
+
**Rendered HTML:**
|
|
899
|
+
|
|
900
|
+
```html
|
|
901
|
+
<input class="sk-color-picker sk-md" type="color" value="#c4842d" />
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
[See Vue docs →](/components/color-picker)
|
|
905
|
+
|
|
906
|
+
---
|
|
907
|
+
|
|
908
|
+
### Checkbox
|
|
909
|
+
|
|
910
|
+
**Base class:** `sk-checkbox` (on the `<label>` wrapper)
|
|
911
|
+
|
|
912
|
+
The checkbox is a compound element. Use this exact structure:
|
|
913
|
+
|
|
914
|
+
**Rendered HTML:**
|
|
915
|
+
|
|
916
|
+
```html
|
|
917
|
+
<label class="sk-checkbox sk-neutral sk-md">
|
|
918
|
+
<input type="checkbox" name="agree" />
|
|
919
|
+
<span class="sk-checkbox-box"></span>
|
|
920
|
+
<span class="sk-checkbox-label">I agree to the terms</span>
|
|
921
|
+
</label>
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
**Modifiers on `sk-checkbox`:**
|
|
925
|
+
|
|
926
|
+
| Class | Effect | Default |
|
|
927
|
+
|-------|--------|---------|
|
|
928
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
929
|
+
| `sk-xs` … `sk-xl` | Checkbox size | `sk-md` |
|
|
930
|
+
|
|
931
|
+
[See Vue docs →](/components/checkbox)
|
|
932
|
+
|
|
933
|
+
---
|
|
934
|
+
|
|
935
|
+
### Radio
|
|
936
|
+
|
|
937
|
+
**Base class:** `sk-radio` (on the `<label>` wrapper)
|
|
938
|
+
|
|
939
|
+
Compound structure:
|
|
940
|
+
|
|
941
|
+
**Rendered HTML:**
|
|
942
|
+
|
|
943
|
+
```html
|
|
944
|
+
<label class="sk-radio sk-neutral sk-md">
|
|
945
|
+
<input type="radio" name="color" value="red" />
|
|
946
|
+
<span class="sk-radio-dot"></span>
|
|
947
|
+
<span class="sk-radio-label">Red</span>
|
|
948
|
+
</label>
|
|
949
|
+
```
|
|
950
|
+
|
|
951
|
+
**Modifiers on `sk-radio`:**
|
|
952
|
+
|
|
953
|
+
| Class | Effect | Default |
|
|
954
|
+
|-------|--------|---------|
|
|
955
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
956
|
+
| `sk-xs` … `sk-xl` | Radio size | `sk-md` |
|
|
957
|
+
|
|
958
|
+
[See Vue docs →](/components/radio)
|
|
959
|
+
|
|
960
|
+
---
|
|
961
|
+
|
|
962
|
+
### Switch
|
|
963
|
+
|
|
964
|
+
**Base class:** `sk-switch` (on the `<label>` wrapper)
|
|
965
|
+
|
|
966
|
+
Compound structure:
|
|
967
|
+
|
|
968
|
+
**Rendered HTML:**
|
|
969
|
+
|
|
970
|
+
```html
|
|
971
|
+
<label class="sk-switch sk-primary sk-md">
|
|
972
|
+
<input type="checkbox" name="notifications" />
|
|
973
|
+
<span class="sk-switch-track">
|
|
974
|
+
<span class="sk-switch-thumb"></span>
|
|
975
|
+
</span>
|
|
976
|
+
<span class="sk-switch-label">Enable notifications</span>
|
|
977
|
+
</label>
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
**Modifiers on `sk-switch`:**
|
|
981
|
+
|
|
982
|
+
| Class | Effect | Default |
|
|
983
|
+
|-------|--------|---------|
|
|
984
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
985
|
+
| `sk-xs` … `sk-xl` | Switch size | `sk-md` |
|
|
986
|
+
|
|
987
|
+
[See Vue docs →](/components/switch)
|
|
988
|
+
|
|
989
|
+
---
|
|
990
|
+
|
|
991
|
+
### NumberInput
|
|
992
|
+
|
|
993
|
+
**Base class:** `sk-number-input-wrapper` (on the outer `<div>`)
|
|
994
|
+
|
|
995
|
+
Compound structure. Stepper buttons are intentionally omitted — they need JS.
|
|
996
|
+
|
|
997
|
+
**Rendered HTML:**
|
|
998
|
+
|
|
999
|
+
```html
|
|
1000
|
+
<div class="sk-number-input-wrapper sk-neutral sk-md">
|
|
1001
|
+
<input class="sk-number-input-field" type="number" min="0" max="100" value="42" />
|
|
1002
|
+
</div>
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
**Modifiers on `sk-number-input-wrapper`:**
|
|
1006
|
+
|
|
1007
|
+
| Class | Effect | Default |
|
|
1008
|
+
|-------|--------|---------|
|
|
1009
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
1010
|
+
| `sk-xs` … `sk-xl` | Input size | `sk-md` |
|
|
1011
|
+
|
|
1012
|
+
[See Vue docs →](/components/number-input)
|
|
1013
|
+
|
|
1014
|
+
---
|
|
1015
|
+
|
|
1016
|
+
### TagsInput
|
|
1017
|
+
|
|
1018
|
+
**Base class:** `sk-tags-input`
|
|
1019
|
+
|
|
1020
|
+
A styled container for tag chip elements. The add/remove behavior requires Vue.
|
|
1021
|
+
|
|
1022
|
+
**Rendered HTML:**
|
|
1023
|
+
|
|
1024
|
+
```html
|
|
1025
|
+
<div class="sk-tags-input sk-neutral sk-md">
|
|
1026
|
+
<span class="sk-tag sk-neutral sk-solid sk-sm">
|
|
1027
|
+
<span class="sk-tag-content">design-system</span>
|
|
1028
|
+
</span>
|
|
1029
|
+
<span class="sk-tag sk-neutral sk-solid sk-sm">
|
|
1030
|
+
<span class="sk-tag-content">css</span>
|
|
1031
|
+
</span>
|
|
1032
|
+
</div>
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
**Modifiers:**
|
|
1036
|
+
|
|
1037
|
+
| Class | Effect | Default |
|
|
1038
|
+
|-------|--------|---------|
|
|
1039
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
1040
|
+
| `sk-xs` … `sk-xl` | Container size | `sk-md` |
|
|
1041
|
+
|
|
1042
|
+
[See Vue docs →](/components/tags-input)
|
|
1043
|
+
|
|
1044
|
+
---
|
|
1045
|
+
|
|
1046
|
+
### Dropdown
|
|
1047
|
+
|
|
1048
|
+
**Base class:** `sk-dropdown`
|
|
1049
|
+
|
|
1050
|
+
Rendered as a `<details>` disclosure element — no JS required. This is a reduced form;
|
|
1051
|
+
the Vue version uses a managed menu with focus trap and keyboard navigation.
|
|
1052
|
+
|
|
1053
|
+
**Modifiers:**
|
|
1054
|
+
|
|
1055
|
+
| Class | Effect | Default |
|
|
1056
|
+
|-------|--------|---------|
|
|
1057
|
+
| `sk-neutral` / `sk-primary` / … | Kind color | `sk-neutral` |
|
|
1058
|
+
| `sk-xs` … `sk-xl` | Size | `sk-md` |
|
|
1059
|
+
|
|
1060
|
+
**Rendered HTML:**
|
|
1061
|
+
|
|
1062
|
+
```html
|
|
1063
|
+
<details class="sk-dropdown sk-neutral sk-md">
|
|
1064
|
+
<summary>Options ▾</summary>
|
|
1065
|
+
<a class="sk-dropdown-item" href="/settings">Settings</a>
|
|
1066
|
+
<a class="sk-dropdown-item" href="/logout">Log out</a>
|
|
1067
|
+
</details>
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
[See Vue docs →](/components/dropdown)
|