@skewedaspect/sleekspace-ui 0.2.0-beta.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 (266) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/sleekspace-ui.css +12844 -0
  4. package/dist/sleekspace-ui.es.js +19021 -0
  5. package/dist/sleekspace-ui.umd.js +19040 -0
  6. package/docs/components/accordion.md +92 -0
  7. package/docs/components/alert.md +72 -0
  8. package/docs/components/avatar.md +69 -0
  9. package/docs/components/breadcrumbs.md +65 -0
  10. package/docs/components/button/_meta.yaml +12 -0
  11. package/docs/components/button/accessibility.md +16 -0
  12. package/docs/components/button/custom-colors.md +18 -0
  13. package/docs/components/button/icons.md +31 -0
  14. package/docs/components/button/intro.md +8 -0
  15. package/docs/components/button/kinds.md +25 -0
  16. package/docs/components/button/sizes.md +14 -0
  17. package/docs/components/button/states.md +12 -0
  18. package/docs/components/button/usage.md +23 -0
  19. package/docs/components/button/variants.md +14 -0
  20. package/docs/components/button.md +110 -0
  21. package/docs/components/card.md +87 -0
  22. package/docs/components/checkbox.md +77 -0
  23. package/docs/components/collapsible.md +71 -0
  24. package/docs/components/divider.md +62 -0
  25. package/docs/components/dropdown.md +88 -0
  26. package/docs/components/field.md +80 -0
  27. package/docs/components/group.md +41 -0
  28. package/docs/components/input.md +84 -0
  29. package/docs/components/listbox.md +82 -0
  30. package/docs/components/modal.md +101 -0
  31. package/docs/components/navbar.md +64 -0
  32. package/docs/components/number-input.md +78 -0
  33. package/docs/components/page.md +77 -0
  34. package/docs/components/pagination.md +88 -0
  35. package/docs/components/panel.md +74 -0
  36. package/docs/components/popover.md +93 -0
  37. package/docs/components/progress.md +76 -0
  38. package/docs/components/radio.md +86 -0
  39. package/docs/components/sidebar.md +74 -0
  40. package/docs/components/skeleton.md +76 -0
  41. package/docs/components/slider.md +94 -0
  42. package/docs/components/spinner.md +59 -0
  43. package/docs/components/switch.md +97 -0
  44. package/docs/components/table.md +91 -0
  45. package/docs/components/tabs.md +108 -0
  46. package/docs/components/tag.md +75 -0
  47. package/docs/components/tags-input.md +88 -0
  48. package/docs/components/textarea.md +80 -0
  49. package/docs/components/theme.md +65 -0
  50. package/docs/components/toast.md +95 -0
  51. package/docs/components/tooltip.md +90 -0
  52. package/docs/guides/custom-colors.md +84 -0
  53. package/docs/guides/design-tokens.md +105 -0
  54. package/docs/guides/getting-started.md +144 -0
  55. package/docs/guides/installation.md +62 -0
  56. package/docs/guides/theming.md +101 -0
  57. package/package.json +76 -0
  58. package/src/components/Accordion/SkAccordion.vue +133 -0
  59. package/src/components/Accordion/SkAccordionItem.vue +131 -0
  60. package/src/components/Accordion/index.ts +3 -0
  61. package/src/components/Accordion/types.ts +9 -0
  62. package/src/components/Alert/SkAlert.vue +137 -0
  63. package/src/components/Alert/types.ts +10 -0
  64. package/src/components/Avatar/SkAvatar.vue +141 -0
  65. package/src/components/Avatar/index.ts +8 -0
  66. package/src/components/Avatar/types.ts +31 -0
  67. package/src/components/Breadcrumbs/SkBreadcrumbItem.vue +76 -0
  68. package/src/components/Breadcrumbs/SkBreadcrumbSeparator.vue +38 -0
  69. package/src/components/Breadcrumbs/SkBreadcrumbs.vue +93 -0
  70. package/src/components/Breadcrumbs/index.ts +10 -0
  71. package/src/components/Breadcrumbs/types.ts +36 -0
  72. package/src/components/Button/SkButton.vue +148 -0
  73. package/src/components/Button/types.ts +21 -0
  74. package/src/components/Card/SkCard.vue +144 -0
  75. package/src/components/Card/types.ts +12 -0
  76. package/src/components/Checkbox/SkCheckbox.vue +136 -0
  77. package/src/components/Checkbox/index.ts +8 -0
  78. package/src/components/Checkbox/types.ts +10 -0
  79. package/src/components/Collapsible/SkCollapsible.vue +159 -0
  80. package/src/components/Collapsible/index.ts +2 -0
  81. package/src/components/Collapsible/types.ts +8 -0
  82. package/src/components/Divider/SkDivider.vue +63 -0
  83. package/src/components/Divider/types.ts +15 -0
  84. package/src/components/Dropdown/SkDropdown.vue +150 -0
  85. package/src/components/Dropdown/SkDropdownMenuItem.vue +58 -0
  86. package/src/components/Dropdown/SkDropdownMenuSeparator.vue +26 -0
  87. package/src/components/Dropdown/SkDropdownSubmenu.vue +107 -0
  88. package/src/components/Dropdown/index.ts +11 -0
  89. package/src/components/Dropdown/types.ts +11 -0
  90. package/src/components/Field/SkField.vue +152 -0
  91. package/src/components/Field/index.ts +8 -0
  92. package/src/components/Field/types.ts +7 -0
  93. package/src/components/Group/SkGroup.vue +52 -0
  94. package/src/components/Group/types.ts +10 -0
  95. package/src/components/Input/SkInput.vue +117 -0
  96. package/src/components/Input/index.ts +8 -0
  97. package/src/components/Input/types.ts +11 -0
  98. package/src/components/Listbox/SkListbox.vue +164 -0
  99. package/src/components/Listbox/SkListboxItem.vue +68 -0
  100. package/src/components/Listbox/SkListboxSeparator.vue +26 -0
  101. package/src/components/Listbox/index.ts +10 -0
  102. package/src/components/Listbox/types.ts +10 -0
  103. package/src/components/Modal/SkModal.vue +231 -0
  104. package/src/components/Modal/index.ts +8 -0
  105. package/src/components/Modal/types.ts +12 -0
  106. package/src/components/NavBar/SkNavBar.vue +83 -0
  107. package/src/components/NavBar/index.ts +8 -0
  108. package/src/components/NavBar/types.ts +15 -0
  109. package/src/components/NumberInput/SkNumberInput.vue +168 -0
  110. package/src/components/NumberInput/index.ts +8 -0
  111. package/src/components/NumberInput/types.ts +10 -0
  112. package/src/components/Page/SkPage.vue +94 -0
  113. package/src/components/Page/index.ts +8 -0
  114. package/src/components/Page/types.ts +21 -0
  115. package/src/components/Pagination/SkPagination.vue +185 -0
  116. package/src/components/Pagination/SkPaginationItem.vue +107 -0
  117. package/src/components/Pagination/index.ts +9 -0
  118. package/src/components/Pagination/types.ts +40 -0
  119. package/src/components/Panel/SkPanel.vue +96 -0
  120. package/src/components/Panel/types.ts +15 -0
  121. package/src/components/Popover/SkPopover.vue +185 -0
  122. package/src/components/Popover/index.ts +8 -0
  123. package/src/components/Popover/types.ts +11 -0
  124. package/src/components/Progress/SkProgress.vue +144 -0
  125. package/src/components/Progress/index.ts +8 -0
  126. package/src/components/Progress/types.ts +34 -0
  127. package/src/components/Radio/SkRadio.vue +110 -0
  128. package/src/components/Radio/SkRadioGroup.vue +92 -0
  129. package/src/components/Radio/index.ts +9 -0
  130. package/src/components/Radio/types.ts +11 -0
  131. package/src/components/Sidebar/README.md +405 -0
  132. package/src/components/Sidebar/SkSidebar.vue +88 -0
  133. package/src/components/Sidebar/SkSidebarItem.vue +58 -0
  134. package/src/components/Sidebar/SkSidebarSection.vue +40 -0
  135. package/src/components/Sidebar/types.ts +3 -0
  136. package/src/components/Skeleton/SkSkeleton.vue +171 -0
  137. package/src/components/Skeleton/index.ts +8 -0
  138. package/src/components/Skeleton/types.ts +31 -0
  139. package/src/components/Slider/SkSlider.vue +165 -0
  140. package/src/components/Slider/index.ts +8 -0
  141. package/src/components/Slider/types.ts +44 -0
  142. package/src/components/Spinner/SkSpinner.vue +105 -0
  143. package/src/components/Spinner/index.ts +8 -0
  144. package/src/components/Spinner/types.ts +28 -0
  145. package/src/components/Switch/SkSwitch.vue +215 -0
  146. package/src/components/Switch/index.ts +8 -0
  147. package/src/components/Switch/types.ts +12 -0
  148. package/src/components/Table/SkTable.vue +109 -0
  149. package/src/components/Table/index.ts +2 -0
  150. package/src/components/Table/types.ts +15 -0
  151. package/src/components/Tabs/README.md +331 -0
  152. package/src/components/Tabs/SkTab.vue +84 -0
  153. package/src/components/Tabs/SkTabList.vue +62 -0
  154. package/src/components/Tabs/SkTabPanel.vue +47 -0
  155. package/src/components/Tabs/SkTabPanels.vue +23 -0
  156. package/src/components/Tabs/SkTabs.vue +124 -0
  157. package/src/components/Tabs/types.ts +21 -0
  158. package/src/components/Tag/SkTag.vue +129 -0
  159. package/src/components/Tag/types.ts +15 -0
  160. package/src/components/TagsInput/SkTagsInput.vue +184 -0
  161. package/src/components/TagsInput/index.ts +8 -0
  162. package/src/components/TagsInput/types.ts +10 -0
  163. package/src/components/Textarea/SkTextarea.vue +117 -0
  164. package/src/components/Textarea/index.ts +8 -0
  165. package/src/components/Textarea/types.ts +10 -0
  166. package/src/components/Theme/SkTheme.vue +47 -0
  167. package/src/components/Theme/types.ts +17 -0
  168. package/src/components/Theme/useTheme.ts +131 -0
  169. package/src/components/Toast/SkToast.vue +156 -0
  170. package/src/components/Toast/SkToastProvider.vue +180 -0
  171. package/src/components/Toast/index.ts +15 -0
  172. package/src/components/Toast/types.ts +63 -0
  173. package/src/components/Toast/useToast.ts +78 -0
  174. package/src/components/Tooltip/SkTooltip.vue +162 -0
  175. package/src/components/Tooltip/SkTooltipProvider.vue +114 -0
  176. package/src/components/Tooltip/index.ts +9 -0
  177. package/src/components/Tooltip/types.ts +13 -0
  178. package/src/composables/useCustomColors.test.ts +505 -0
  179. package/src/composables/useCustomColors.ts +124 -0
  180. package/src/composables/usePortalContext.test.ts +402 -0
  181. package/src/composables/usePortalContext.ts +95 -0
  182. package/src/global.d.ts +76 -0
  183. package/src/index.ts +259 -0
  184. package/src/styles/_scrollbar.scss +100 -0
  185. package/src/styles/base/_fonts.scss +105 -0
  186. package/src/styles/base/_global.scss +47 -0
  187. package/src/styles/base/_index.scss +24 -0
  188. package/src/styles/base/_reset.scss +11 -0
  189. package/src/styles/base/_typography.scss +178 -0
  190. package/src/styles/components/_accordion.scss +250 -0
  191. package/src/styles/components/_alert.scss +239 -0
  192. package/src/styles/components/_avatar.scss +133 -0
  193. package/src/styles/components/_breadcrumbs.scss +137 -0
  194. package/src/styles/components/_button.scss +731 -0
  195. package/src/styles/components/_card.scss +141 -0
  196. package/src/styles/components/_checkbox.scss +232 -0
  197. package/src/styles/components/_collapsible.scss +158 -0
  198. package/src/styles/components/_divider.scss +121 -0
  199. package/src/styles/components/_field.scss +87 -0
  200. package/src/styles/components/_group.scss +138 -0
  201. package/src/styles/components/_index.scss +46 -0
  202. package/src/styles/components/_input.scss +205 -0
  203. package/src/styles/components/_listbox.scss +453 -0
  204. package/src/styles/components/_menu.scss +216 -0
  205. package/src/styles/components/_modal.scss +329 -0
  206. package/src/styles/components/_navbar.scss +258 -0
  207. package/src/styles/components/_number-input.scss +352 -0
  208. package/src/styles/components/_page.scss +98 -0
  209. package/src/styles/components/_pagination.scss +411 -0
  210. package/src/styles/components/_panel.scss +281 -0
  211. package/src/styles/components/_popover.scss +258 -0
  212. package/src/styles/components/_progress.scss +280 -0
  213. package/src/styles/components/_radio.scss +255 -0
  214. package/src/styles/components/_sidebar.scss +92 -0
  215. package/src/styles/components/_skeleton.scss +138 -0
  216. package/src/styles/components/_slider.scss +262 -0
  217. package/src/styles/components/_spinner.scss +331 -0
  218. package/src/styles/components/_switch.scss +370 -0
  219. package/src/styles/components/_table.scss +405 -0
  220. package/src/styles/components/_tabs.scss +486 -0
  221. package/src/styles/components/_tag.scss +425 -0
  222. package/src/styles/components/_tags-input.scss +279 -0
  223. package/src/styles/components/_textarea.scss +208 -0
  224. package/src/styles/components/_toast.scss +331 -0
  225. package/src/styles/components/_tooltip.scss +206 -0
  226. package/src/styles/fonts/Titillium_Web/OFL.txt +93 -0
  227. package/src/styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf +0 -0
  228. package/src/styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf +0 -0
  229. package/src/styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf +0 -0
  230. package/src/styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf +0 -0
  231. package/src/styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf +0 -0
  232. package/src/styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf +0 -0
  233. package/src/styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf +0 -0
  234. package/src/styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf +0 -0
  235. package/src/styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf +0 -0
  236. package/src/styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf +0 -0
  237. package/src/styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf +0 -0
  238. package/src/styles/index.scss +17 -0
  239. package/src/styles/mixins/_cut-border.scss +254 -0
  240. package/src/styles/mixins/_index.scss +7 -0
  241. package/src/styles/theme/_variables.scss +42 -0
  242. package/src/styles/themes/README.md +127 -0
  243. package/src/styles/themes/_colorful.scss +58 -0
  244. package/src/styles/themes/_greyscale.scss +58 -0
  245. package/src/styles/themes/index.scss +9 -0
  246. package/src/styles/tokens/README.md +268 -0
  247. package/src/styles/tokens/_foundation-borders.scss +26 -0
  248. package/src/styles/tokens/_foundation-colors.scss +169 -0
  249. package/src/styles/tokens/_foundation-glow.scss +36 -0
  250. package/src/styles/tokens/_foundation-radius.scss +53 -0
  251. package/src/styles/tokens/_foundation-scrollbar.scss +31 -0
  252. package/src/styles/tokens/_foundation-shadows.scss +37 -0
  253. package/src/styles/tokens/_foundation-space.scss +36 -0
  254. package/src/styles/tokens/_foundation-transitions.scss +37 -0
  255. package/src/styles/tokens/_foundation-typography.scss +58 -0
  256. package/src/styles/tokens/_semantic-color-kinds.scss +112 -0
  257. package/src/styles/tokens/_semantic-colors.scss +10 -0
  258. package/src/styles/tokens/_semantic-interactive.scss +29 -0
  259. package/src/styles/tokens/_semantic-scrollbar.scss +48 -0
  260. package/src/styles/tokens/_semantic-surfaces.scss +36 -0
  261. package/src/styles/tokens/index.scss +38 -0
  262. package/src/styles/tokens.scss +268 -0
  263. package/src/styles/utilities/_index.scss +9 -0
  264. package/src/styles/utilities/_typography.scss +121 -0
  265. package/src/types.ts +50 -0
  266. package/web-types.json +3524 -0
@@ -0,0 +1,74 @@
1
+ ---
2
+ component: SkSidebar
3
+ category: Navigation
4
+ ---
5
+
6
+ # SkSidebar
7
+
8
+ A sticky navigation sidebar container with semantic color theming. Composed of SkSidebarSection and SkSidebarItem for structured navigation.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkSidebar kind="neutral" width="220px">
15
+ <SkSidebarSection title="Navigation">
16
+ <SkSidebarItem href="/">Home</SkSidebarItem>
17
+ <SkSidebarItem href="/docs">Documentation</SkSidebarItem>
18
+ </SkSidebarSection>
19
+ <SkSidebarSection title="Account">
20
+ <SkSidebarItem href="/settings">Settings</SkSidebarItem>
21
+ <SkSidebarItem href="/logout">Logout</SkSidebarItem>
22
+ </SkSidebarSection>
23
+ </SkSidebar>
24
+ </template>
25
+ ```
26
+
27
+ ## Composition
28
+
29
+ - **SkSidebar** -- Root container with width and color.
30
+ - **SkSidebarSection** -- Groups items under an optional title heading.
31
+ - **SkSidebarItem** -- Individual navigation link.
32
+
33
+ ## Item Rendering
34
+
35
+ SkSidebarItem renders differently based on props:
36
+
37
+ - **`to`** -- Renders as `<router-link>` for Vue Router.
38
+ - **`href`** -- Renders as `<a>` for standard links.
39
+ - **`active`** -- Highlights the item as the current page.
40
+
41
+ ```vue
42
+ <SkSidebarItem :to="{ name: 'dashboard' }" :active="isActive">
43
+ Dashboard
44
+ </SkSidebarItem>
45
+ ```
46
+
47
+ ## Width
48
+
49
+ ```vue
50
+ <SkSidebar width="200px">...</SkSidebar>
51
+ <SkSidebar width="15rem">...</SkSidebar>
52
+ ```
53
+
54
+ ## Kinds
55
+
56
+ ```vue
57
+ <SkSidebar kind="primary">...</SkSidebar>
58
+ <SkSidebar kind="accent">...</SkSidebar>
59
+ ```
60
+
61
+ ## Custom Colors
62
+
63
+ ```vue
64
+ <SkSidebar
65
+ base-color="oklch(0.15 0.05 260)"
66
+ text-color="oklch(0.85 0 0)"
67
+ >
68
+ <SkSidebarItem href="/">Dark sidebar</SkSidebarItem>
69
+ </SkSidebar>
70
+ ```
71
+
72
+ ## Accessibility
73
+
74
+ The sidebar is a presentational container. Apply `role="navigation"` and `aria-label` on the sidebar or a wrapping `<nav>` element to provide context for screen readers.
@@ -0,0 +1,76 @@
1
+ ---
2
+ component: SkSkeleton
3
+ category: Feedback
4
+ ---
5
+
6
+ # SkSkeleton
7
+
8
+ A loading placeholder component with animated shimmer or pulse effects. Use to indicate content is being fetched and provide a visual preview of the expected layout.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkSkeleton width="200px" height="1rem" />
15
+ </template>
16
+ ```
17
+
18
+ ## Variants
19
+
20
+ - **text** (default) -- Rectangular shape with a slight height suitable for text lines.
21
+ - **rectangular** -- Generic rectangular block.
22
+ - **circular** -- Perfect circle (height matches width automatically).
23
+ - **square** -- Square shape (height matches width automatically).
24
+
25
+ ```vue
26
+ <SkSkeleton variant="text" width="80%" />
27
+ <SkSkeleton variant="rectangular" width="100%" height="200px" />
28
+ <SkSkeleton variant="circular" width="48px" />
29
+ <SkSkeleton variant="square" width="48px" />
30
+ ```
31
+
32
+ ## Animation
33
+
34
+ - **shimmer** (default) -- A sliding highlight effect.
35
+ - **pulse** -- A fading opacity cycle.
36
+ - **none** -- Static placeholder with no animation.
37
+
38
+ ```vue
39
+ <SkSkeleton animation="shimmer" width="100%" />
40
+ <SkSkeleton animation="pulse" width="100%" />
41
+ <SkSkeleton animation="none" width="100%" />
42
+ ```
43
+
44
+ ## Custom Beveling
45
+
46
+ Override which corners are beveled and the bevel size:
47
+
48
+ ```vue
49
+ <SkSkeleton
50
+ variant="rectangular"
51
+ width="200px"
52
+ height="100px"
53
+ :corners="['top-left', 'bottom-right']"
54
+ bevel="1rem"
55
+ />
56
+ ```
57
+
58
+ Available corners: `top-left`, `top-right`, `bottom-left`, `bottom-right`.
59
+
60
+ ## Composition
61
+
62
+ Build skeleton layouts that mirror your real content:
63
+
64
+ ```vue
65
+ <div style="display: flex; gap: 1rem; align-items: center;">
66
+ <SkSkeleton variant="circular" width="48px" />
67
+ <div style="flex: 1;">
68
+ <SkSkeleton variant="text" width="60%" />
69
+ <SkSkeleton variant="text" width="40%" />
70
+ </div>
71
+ </div>
72
+ ```
73
+
74
+ ## Accessibility
75
+
76
+ SkSkeleton is a visual placeholder and does not convey loading status to assistive technology. Use `aria-busy="true"` on the parent container and provide a visually hidden loading message for screen readers.
@@ -0,0 +1,94 @@
1
+ ---
2
+ component: SkSlider
3
+ category: Forms
4
+ ---
5
+
6
+ # SkSlider
7
+
8
+ A range slider component for selecting numeric values. Supports single-thumb and multi-thumb (range) modes with horizontal and vertical orientations. Built on RekaUI's Slider primitive.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <script setup>
14
+ import { ref } from 'vue';
15
+
16
+ const volume = ref(50);
17
+ </script>
18
+
19
+ <template>
20
+ <SkSlider v-model="volume" :min="0" :max="100" kind="primary" />
21
+ </template>
22
+ ```
23
+
24
+ ## Range Mode
25
+
26
+ Pass an array to enable multiple thumbs for selecting a range:
27
+
28
+ ```vue
29
+ <script setup>
30
+ import { ref } from 'vue';
31
+
32
+ const range = ref([20, 80]);
33
+ </script>
34
+
35
+ <template>
36
+ <SkSlider
37
+ v-model="range"
38
+ :min="0"
39
+ :max="100"
40
+ :min-steps-between-thumbs="5"
41
+ kind="accent"
42
+ />
43
+ </template>
44
+ ```
45
+
46
+ ## Step
47
+
48
+ ```vue
49
+ <SkSlider v-model="value" :step="10" :min="0" :max="100" />
50
+ ```
51
+
52
+ ## Orientation
53
+
54
+ ```vue
55
+ <SkSlider v-model="value" orientation="vertical" style="height: 200px;" />
56
+ ```
57
+
58
+ ## Kinds
59
+
60
+ ```vue
61
+ <SkSlider v-model="val" kind="primary" />
62
+ <SkSlider v-model="val" kind="success" />
63
+ <SkSlider v-model="val" kind="danger" />
64
+ ```
65
+
66
+ ## Sizes
67
+
68
+ ```vue
69
+ <SkSlider v-model="val" size="sm" />
70
+ <SkSlider v-model="val" size="md" />
71
+ <SkSlider v-model="val" size="lg" />
72
+ ```
73
+
74
+ ## States
75
+
76
+ ```vue
77
+ <SkSlider v-model="val" disabled />
78
+ ```
79
+
80
+ ## Custom Colors
81
+
82
+ Use `baseColor` for the track fill and `thumbColor` for the thumb:
83
+
84
+ ```vue
85
+ <SkSlider
86
+ v-model="val"
87
+ base-color="oklch(0.7 0.25 300)"
88
+ thumb-color="oklch(0.9 0.1 300)"
89
+ />
90
+ ```
91
+
92
+ ## Accessibility
93
+
94
+ Built on RekaUI Slider which provides `role="slider"`, `aria-valuemin`, `aria-valuemax`, `aria-valuenow`, and `aria-orientation`. Arrow keys adjust the value by the step amount. Home/End jump to min/max.
@@ -0,0 +1,59 @@
1
+ ---
2
+ component: SkSpinner
3
+ category: Feedback
4
+ ---
5
+
6
+ # SkSpinner
7
+
8
+ An animated loading indicator with three cyberpunk-themed animation variants. Use to communicate ongoing processing or loading.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkSpinner kind="primary" />
15
+ </template>
16
+ ```
17
+
18
+ ## Variants
19
+
20
+ - **circular** (default) -- Dual rotating arc animation.
21
+ - **dots** -- Three bouncing dots.
22
+ - **crosshair** -- A rotating crosshair targeting animation.
23
+
24
+ ```vue
25
+ <SkSpinner variant="circular" />
26
+ <SkSpinner variant="dots" />
27
+ <SkSpinner variant="crosshair" />
28
+ ```
29
+
30
+ ## Kinds
31
+
32
+ ```vue
33
+ <SkSpinner kind="primary" />
34
+ <SkSpinner kind="accent" />
35
+ <SkSpinner kind="success" />
36
+ <SkSpinner kind="danger" />
37
+ ```
38
+
39
+ ## Sizes
40
+
41
+ ```vue
42
+ <SkSpinner size="xs" />
43
+ <SkSpinner size="sm" />
44
+ <SkSpinner size="md" />
45
+ <SkSpinner size="lg" />
46
+ <SkSpinner size="xl" />
47
+ ```
48
+
49
+ ## Custom Color
50
+
51
+ Use the `color` prop (not `baseColor`) for a custom spinner color:
52
+
53
+ ```vue
54
+ <SkSpinner color="oklch(0.7 0.25 300)" />
55
+ ```
56
+
57
+ ## Accessibility
58
+
59
+ Renders with `role="status"`, `aria-live="polite"`, and `aria-label="Loading"`. Screen readers will announce the loading state.
@@ -0,0 +1,97 @@
1
+ ---
2
+ component: SkSwitch
3
+ category: Forms
4
+ ---
5
+
6
+ # SkSwitch
7
+
8
+ A toggle switch component for binary on/off choices. Supports dynamic labels that change with state and flexible thumb styling. Built on RekaUI's Switch primitive.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <script setup>
14
+ import { ref } from 'vue';
15
+
16
+ const enabled = ref(false);
17
+ </script>
18
+
19
+ <template>
20
+ <SkSwitch v-model="enabled" label="Enable notifications" kind="primary" />
21
+ </template>
22
+ ```
23
+
24
+ ## Dynamic Labels
25
+
26
+ Use `label-on` and `label-off` for labels that change based on the toggle state with a fade animation:
27
+
28
+ ```vue
29
+ <SkSwitch
30
+ v-model="enabled"
31
+ label-on="Enabled"
32
+ label-off="Disabled"
33
+ kind="success"
34
+ />
35
+ ```
36
+
37
+ Disable the fade animation with `disable-label-animation`.
38
+
39
+ ## Slots
40
+
41
+ - **default** -- Custom label content (overrides all label props).
42
+ - **label-on** -- Custom content shown when the switch is on.
43
+ - **label-off** -- Custom content shown when the switch is off.
44
+
45
+ ```vue
46
+ <SkSwitch v-model="premium">
47
+ <template #label-on>
48
+ <SkTag kind="success" size="sm">Active</SkTag>
49
+ </template>
50
+ <template #label-off>
51
+ <SkTag kind="neutral" size="sm">Inactive</SkTag>
52
+ </template>
53
+ </SkSwitch>
54
+ ```
55
+
56
+ ## Kinds
57
+
58
+ ```vue
59
+ <SkSwitch v-model="val" kind="primary" label="Primary" />
60
+ <SkSwitch v-model="val" kind="accent" label="Accent" />
61
+ <SkSwitch v-model="val" kind="success" label="Success" />
62
+ ```
63
+
64
+ The `thumbKind` prop overrides the thumb color independently from the track:
65
+
66
+ ```vue
67
+ <SkSwitch v-model="val" kind="neutral" thumb-kind="primary" label="Custom Thumb" />
68
+ ```
69
+
70
+ ## Sizes
71
+
72
+ ```vue
73
+ <SkSwitch v-model="val" size="sm" label="Small" />
74
+ <SkSwitch v-model="val" size="md" label="Medium" />
75
+ <SkSwitch v-model="val" size="lg" label="Large" />
76
+ ```
77
+
78
+ ## States
79
+
80
+ ```vue
81
+ <SkSwitch v-model="val" disabled label="Disabled" />
82
+ ```
83
+
84
+ ## Custom Colors
85
+
86
+ ```vue
87
+ <SkSwitch
88
+ v-model="val"
89
+ base-color="oklch(0.7 0.25 45)"
90
+ text-color="white"
91
+ label="Custom Orange"
92
+ />
93
+ ```
94
+
95
+ ## Accessibility
96
+
97
+ Built on RekaUI Switch which provides `role="switch"` and `aria-checked`. The label is associated via a wrapping `<label>` element. Space key toggles the state.
@@ -0,0 +1,91 @@
1
+ ---
2
+ component: SkTable
3
+ category: Feedback
4
+ ---
5
+
6
+ # SkTable
7
+
8
+ A styled HTML table component with striped rows, hover effects, and configurable borders. Wraps standard `<table>` markup with consistent theming.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkTable kind="neutral" striped hoverable>
15
+ <thead>
16
+ <tr>
17
+ <th>Name</th>
18
+ <th>Status</th>
19
+ <th>Role</th>
20
+ </tr>
21
+ </thead>
22
+ <tbody>
23
+ <tr>
24
+ <td>Alice</td>
25
+ <td>Active</td>
26
+ <td>Admin</td>
27
+ </tr>
28
+ <tr>
29
+ <td>Bob</td>
30
+ <td>Inactive</td>
31
+ <td>User</td>
32
+ </tr>
33
+ </tbody>
34
+ </SkTable>
35
+ </template>
36
+ ```
37
+
38
+ ## Variants
39
+
40
+ - **default** -- Standard spacing.
41
+ - **compact** -- Reduced cell padding.
42
+ - **comfortable** -- Increased cell padding.
43
+
44
+ ```vue
45
+ <SkTable variant="compact">...</SkTable>
46
+ <SkTable variant="comfortable">...</SkTable>
47
+ ```
48
+
49
+ ## Features
50
+
51
+ ```vue
52
+ <!-- Alternating row colors -->
53
+ <SkTable striped>...</SkTable>
54
+
55
+ <!-- Row hover highlight -->
56
+ <SkTable hoverable>...</SkTable>
57
+
58
+ <!-- Outer border -->
59
+ <SkTable bordered>...</SkTable>
60
+
61
+ <!-- Cell borders -->
62
+ <SkTable inner-borders>...</SkTable>
63
+
64
+ <!-- Dark background -->
65
+ <SkTable dark-background>...</SkTable>
66
+
67
+ <!-- Subtle styling (lighter) -->
68
+ <SkTable subtle>...</SkTable>
69
+ ```
70
+
71
+ ## Kinds
72
+
73
+ ```vue
74
+ <SkTable kind="primary">...</SkTable>
75
+ <SkTable kind="accent">...</SkTable>
76
+ ```
77
+
78
+ ## Custom Colors
79
+
80
+ ```vue
81
+ <SkTable
82
+ base-color="oklch(0.2 0.05 260)"
83
+ text-color="oklch(0.9 0 0)"
84
+ >
85
+ ...
86
+ </SkTable>
87
+ ```
88
+
89
+ ## Accessibility
90
+
91
+ SkTable renders as a standard `<table>` element. Use semantic `<thead>`, `<tbody>`, `<th>`, and `<td>` elements. Add `scope="col"` or `scope="row"` to header cells for screen reader clarity.
@@ -0,0 +1,108 @@
1
+ ---
2
+ component: SkTabs
3
+ category: Navigation
4
+ ---
5
+
6
+ # SkTabs
7
+
8
+ A tabbed interface for organizing content into switchable panels. Composed of SkTabs, SkTabList, SkTab, SkTabPanels, and SkTabPanel. Built on RekaUI's Tabs primitive.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <script setup>
14
+ import { ref } from 'vue';
15
+
16
+ const activeTab = ref('overview');
17
+ </script>
18
+
19
+ <template>
20
+ <SkTabs v-model="activeTab" kind="primary">
21
+ <SkTabList>
22
+ <SkTab value="overview">Overview</SkTab>
23
+ <SkTab value="details">Details</SkTab>
24
+ <SkTab value="settings">Settings</SkTab>
25
+ </SkTabList>
26
+ <SkTabPanels>
27
+ <SkTabPanel value="overview">Overview content</SkTabPanel>
28
+ <SkTabPanel value="details">Details content</SkTabPanel>
29
+ <SkTabPanel value="settings">Settings content</SkTabPanel>
30
+ </SkTabPanels>
31
+ </SkTabs>
32
+ </template>
33
+ ```
34
+
35
+ ## Composition
36
+
37
+ - **SkTabs** -- Root container managing state and providing context.
38
+ - **SkTabList** -- Container for tab triggers (the clickable tab buttons).
39
+ - **SkTab** -- Individual tab trigger. Requires a `value` matching a SkTabPanel.
40
+ - **SkTabPanels** -- Container for tab content panels.
41
+ - **SkTabPanel** -- Content panel shown when its matching tab is active.
42
+
43
+ ## Orientation
44
+
45
+ ```vue
46
+ <!-- Horizontal (default) -->
47
+ <SkTabs v-model="tab" orientation="horizontal">...</SkTabs>
48
+
49
+ <!-- Vertical -->
50
+ <SkTabs v-model="tab" orientation="vertical">...</SkTabs>
51
+ ```
52
+
53
+ ## Placement
54
+
55
+ Controls where the tab list appears relative to the content:
56
+
57
+ ```vue
58
+ <SkTabs v-model="tab" placement="start">...</SkTabs>
59
+ <SkTabs v-model="tab" placement="end">...</SkTabs>
60
+ ```
61
+
62
+ ## Flush Mode
63
+
64
+ Use `flush` to apply negative margins so the tab list aligns with the parent container edges:
65
+
66
+ ```vue
67
+ <SkPanel>
68
+ <SkTabs v-model="tab" flush>
69
+ ...
70
+ </SkTabs>
71
+ </SkPanel>
72
+ ```
73
+
74
+ ## Kinds
75
+
76
+ Set on SkTabs to apply to all tabs, or override per individual tab:
77
+
78
+ ```vue
79
+ <SkTabs v-model="tab" kind="accent">
80
+ <SkTabList>
81
+ <SkTab value="a">Inherits Accent</SkTab>
82
+ <SkTab value="b" kind="danger">Override to Danger</SkTab>
83
+ </SkTabList>
84
+ ...
85
+ </SkTabs>
86
+ ```
87
+
88
+ ## Disabled Tabs
89
+
90
+ ```vue
91
+ <SkTab value="locked" disabled>Locked</SkTab>
92
+ ```
93
+
94
+ ## Custom Colors
95
+
96
+ ```vue
97
+ <SkTabs
98
+ v-model="tab"
99
+ base-color="oklch(0.65 0.2 280)"
100
+ text-color="white"
101
+ >
102
+ ...
103
+ </SkTabs>
104
+ ```
105
+
106
+ ## Accessibility
107
+
108
+ Built on RekaUI Tabs which provides `role="tablist"`, `role="tab"`, and `role="tabpanel"` with proper `aria-selected`, `aria-controls`, and `aria-labelledby` associations. Arrow keys navigate between tabs, Home/End jump to first/last tab.
@@ -0,0 +1,75 @@
1
+ ---
2
+ component: SkTag
3
+ category: Feedback
4
+ ---
5
+
6
+ # SkTag
7
+
8
+ A compact label component for metadata, categories, status indicators, or keywords. Supports removable tags with a close button.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkTag kind="primary">Featured</SkTag>
15
+ </template>
16
+ ```
17
+
18
+ ## Variants
19
+
20
+ - **solid** (default) -- Filled background.
21
+ - **outline** -- Transparent with colored border.
22
+ - **subtle** -- Light tinted background.
23
+ - **ghost** -- Minimal, text-only appearance.
24
+
25
+ ```vue
26
+ <SkTag variant="solid" kind="primary">Solid</SkTag>
27
+ <SkTag variant="outline" kind="primary">Outline</SkTag>
28
+ <SkTag variant="subtle" kind="primary">Subtle</SkTag>
29
+ <SkTag variant="ghost" kind="primary">Ghost</SkTag>
30
+ ```
31
+
32
+ ## Kinds
33
+
34
+ ```vue
35
+ <SkTag kind="neutral">Neutral</SkTag>
36
+ <SkTag kind="primary">Primary</SkTag>
37
+ <SkTag kind="accent">Accent</SkTag>
38
+ <SkTag kind="success">Active</SkTag>
39
+ <SkTag kind="warning">Pending</SkTag>
40
+ <SkTag kind="danger">Error</SkTag>
41
+ <SkTag kind="info">Info</SkTag>
42
+ ```
43
+
44
+ ## Sizes
45
+
46
+ ```vue
47
+ <SkTag size="sm">Small</SkTag>
48
+ <SkTag size="md">Medium</SkTag>
49
+ <SkTag size="lg">Large</SkTag>
50
+ ```
51
+
52
+ ## Removable
53
+
54
+ Add a close button that emits a `remove` event:
55
+
56
+ ```vue
57
+ <SkTag kind="danger" removable @remove="handleRemove">
58
+ Removable Tag
59
+ </SkTag>
60
+ ```
61
+
62
+ ## Custom Colors
63
+
64
+ ```vue
65
+ <SkTag
66
+ base-color="oklch(0.6 0.25 300)"
67
+ text-color="white"
68
+ >
69
+ Custom Purple
70
+ </SkTag>
71
+ ```
72
+
73
+ ## Accessibility
74
+
75
+ The remove button is keyboard-accessible. Developers should provide context (such as an `aria-label`) if the tag content alone does not convey its purpose to screen readers.