@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,92 @@
1
+ ---
2
+ component: SkAccordion
3
+ category: Layout
4
+ ---
5
+
6
+ # SkAccordion
7
+
8
+ A collapsible sections container for organizing content into expandable panels. Supports single or multiple open items with smooth animations. Built on RekaUI's Accordion primitive.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <script setup>
14
+ import { ref } from 'vue';
15
+
16
+ const openItem = ref('item-1');
17
+ </script>
18
+
19
+ <template>
20
+ <SkAccordion v-model="openItem" kind="primary">
21
+ <SkAccordionItem value="item-1" title="Section One">
22
+ Content for section one.
23
+ </SkAccordionItem>
24
+ <SkAccordionItem value="item-2" title="Section Two">
25
+ Content for section two.
26
+ </SkAccordionItem>
27
+ </SkAccordion>
28
+ </template>
29
+ ```
30
+
31
+ ## Single vs Multiple Mode
32
+
33
+ By default, only one item can be open at a time (`type="single"`). Set `type="multiple"` to allow several items to be expanded simultaneously:
34
+
35
+ ```vue
36
+ <script setup>
37
+ import { ref } from 'vue';
38
+
39
+ const openItems = ref(['item-1']);
40
+ </script>
41
+
42
+ <template>
43
+ <SkAccordion type="multiple" v-model="openItems">
44
+ <SkAccordionItem value="item-1" title="First">...</SkAccordionItem>
45
+ <SkAccordionItem value="item-2" title="Second">...</SkAccordionItem>
46
+ <SkAccordionItem value="item-3" title="Third">...</SkAccordionItem>
47
+ </SkAccordion>
48
+ </template>
49
+ ```
50
+
51
+ In single mode, set `collapsible` to allow closing all items (by default, one item always stays open).
52
+
53
+ ## Kinds
54
+
55
+ The `kind` prop on SkAccordion is inherited by all child items:
56
+
57
+ ```vue
58
+ <SkAccordion kind="accent">
59
+ <SkAccordionItem value="a" title="Accent Item">...</SkAccordionItem>
60
+ </SkAccordion>
61
+ ```
62
+
63
+ Individual items can override the parent kind with their own `kind` prop.
64
+
65
+ ## Slots
66
+
67
+ SkAccordionItem exposes a `title` slot for custom header content:
68
+
69
+ ```vue
70
+ <SkAccordionItem value="item-1">
71
+ <template #title="{ open }">
72
+ <span>Custom Title</span>
73
+ <SkTag v-if="open" kind="primary" size="sm">Open</SkTag>
74
+ </template>
75
+ Panel content here.
76
+ </SkAccordionItem>
77
+ ```
78
+
79
+ ## Custom Colors
80
+
81
+ ```vue
82
+ <SkAccordion
83
+ base-color="oklch(0.6 0.2 280)"
84
+ text-color="white"
85
+ >
86
+ <SkAccordionItem value="a" title="Custom Colors">...</SkAccordionItem>
87
+ </SkAccordion>
88
+ ```
89
+
90
+ ## Accessibility
91
+
92
+ Built on RekaUI Accordion which provides full WAI-ARIA accordion pattern support. Keyboard navigation with Arrow keys moves focus between headers, Enter/Space toggles the focused item, and Home/End jump to first/last header.
@@ -0,0 +1,72 @@
1
+ ---
2
+ component: SkAlert
3
+ category: Feedback
4
+ ---
5
+
6
+ # SkAlert
7
+
8
+ A feedback component for displaying informational messages. Each kind renders a corresponding icon (info circle, checkmark, warning triangle, or error cross) alongside the message content.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkAlert kind="success">
15
+ Your changes have been saved.
16
+ </SkAlert>
17
+ </template>
18
+ ```
19
+
20
+ ## Kinds
21
+
22
+ Alert supports a focused subset of semantic kinds: `info` (default), `success`, `warning`, and `danger`. Each kind includes a matching SVG icon.
23
+
24
+ ```vue
25
+ <template>
26
+ <SkAlert kind="info">Informational note.</SkAlert>
27
+ <SkAlert kind="success">Operation completed.</SkAlert>
28
+ <SkAlert kind="warning">Proceed with caution.</SkAlert>
29
+ <SkAlert kind="danger">An error occurred.</SkAlert>
30
+ </template>
31
+ ```
32
+
33
+ ## Variants
34
+
35
+ Set `prominent` to apply a bolder, darker background style:
36
+
37
+ ```vue
38
+ <SkAlert kind="danger" prominent>
39
+ Critical system failure.
40
+ </SkAlert>
41
+ ```
42
+
43
+ ## Slots
44
+
45
+ The `icon` slot replaces the default kind-specific icon:
46
+
47
+ ```vue
48
+ <SkAlert kind="info">
49
+ <template #icon>
50
+ <MyCustomIcon />
51
+ </template>
52
+ Custom icon alert.
53
+ </SkAlert>
54
+ ```
55
+
56
+ The default slot holds the message content.
57
+
58
+ ## Custom Colors
59
+
60
+ ```vue
61
+ <SkAlert
62
+ base-color="oklch(0.65 0.25 280)"
63
+ text-color="white"
64
+ prominent
65
+ >
66
+ Custom purple alert.
67
+ </SkAlert>
68
+ ```
69
+
70
+ ## Accessibility
71
+
72
+ Renders with `role="alert"` which announces the content to screen readers when it appears in the DOM.
@@ -0,0 +1,69 @@
1
+ ---
2
+ component: SkAvatar
3
+ category: Feedback
4
+ ---
5
+
6
+ # SkAvatar
7
+
8
+ A user profile avatar component with three fallback levels: image, initials, and a default person icon. Renders as a square with beveled top-left and bottom-right corners.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkAvatar src="/photo.jpg" alt="Jane Doe" />
15
+ </template>
16
+ ```
17
+
18
+ ## Fallback Chain
19
+
20
+ The avatar displays content in priority order:
21
+
22
+ 1. **Image** -- If `src` is provided and loads successfully.
23
+ 2. **Initials** -- If the image fails or no `src`, displays up to 2 uppercase characters from `initials`.
24
+ 3. **Icon** -- Falls back to a default person silhouette SVG, or content from the `icon` slot.
25
+
26
+ ```vue
27
+ <template>
28
+ <!-- Image avatar -->
29
+ <SkAvatar src="/photo.jpg" alt="Jane" />
30
+
31
+ <!-- Initials avatar -->
32
+ <SkAvatar initials="JD" kind="primary" />
33
+
34
+ <!-- Default icon avatar -->
35
+ <SkAvatar kind="accent" />
36
+ </template>
37
+ ```
38
+
39
+ ## Sizes
40
+
41
+ ```vue
42
+ <SkAvatar size="xs" initials="XS" />
43
+ <SkAvatar size="sm" initials="SM" />
44
+ <SkAvatar size="md" initials="MD" />
45
+ <SkAvatar size="lg" initials="LG" />
46
+ <SkAvatar size="xl" initials="XL" />
47
+ ```
48
+
49
+ ## Kinds
50
+
51
+ ```vue
52
+ <SkAvatar kind="primary" initials="PR" />
53
+ <SkAvatar kind="accent" initials="AC" />
54
+ <SkAvatar kind="success" initials="OK" />
55
+ ```
56
+
57
+ ## Custom Colors
58
+
59
+ ```vue
60
+ <SkAvatar
61
+ base-color="oklch(0.6 0.25 300)"
62
+ text-color="white"
63
+ initials="AB"
64
+ />
65
+ ```
66
+
67
+ ## Accessibility
68
+
69
+ Provide meaningful `alt` text when using image avatars. For initials-only or icon avatars, surrounding context should convey the user identity.
@@ -0,0 +1,65 @@
1
+ ---
2
+ component: SkBreadcrumbs
3
+ category: Navigation
4
+ ---
5
+
6
+ # SkBreadcrumbs
7
+
8
+ A navigation breadcrumb trail showing the current page location within a hierarchy. Automatically inserts separator characters between items.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkBreadcrumbs>
15
+ <SkBreadcrumbItem href="/">Home</SkBreadcrumbItem>
16
+ <SkBreadcrumbItem href="/docs">Docs</SkBreadcrumbItem>
17
+ <SkBreadcrumbItem current>Button</SkBreadcrumbItem>
18
+ </SkBreadcrumbs>
19
+ </template>
20
+ ```
21
+
22
+ ## Separator
23
+
24
+ The default separator is `/`. Override it with the `separator` prop:
25
+
26
+ ```vue
27
+ <SkBreadcrumbs separator=">">
28
+ <SkBreadcrumbItem href="/">Home</SkBreadcrumbItem>
29
+ <SkBreadcrumbItem current>Page</SkBreadcrumbItem>
30
+ </SkBreadcrumbs>
31
+ ```
32
+
33
+ ## Item Rendering
34
+
35
+ SkBreadcrumbItem renders as different elements based on its props:
36
+
37
+ - **`to`** -- Renders as `<router-link>` for Vue Router navigation.
38
+ - **`href`** -- Renders as `<a>` for standard links.
39
+ - **`current`** or **`disabled`** -- Renders as `<span>` (non-interactive).
40
+ - **No navigation prop** -- Renders as `<button>`.
41
+
42
+ ## Kinds
43
+
44
+ ```vue
45
+ <SkBreadcrumbs kind="primary">
46
+ <SkBreadcrumbItem href="/">Home</SkBreadcrumbItem>
47
+ <SkBreadcrumbItem current>Current Page</SkBreadcrumbItem>
48
+ </SkBreadcrumbs>
49
+ ```
50
+
51
+ ## Custom Colors
52
+
53
+ ```vue
54
+ <SkBreadcrumbs
55
+ base-color="oklch(0.7 0.2 260)"
56
+ text-color="white"
57
+ >
58
+ <SkBreadcrumbItem href="/">Home</SkBreadcrumbItem>
59
+ <SkBreadcrumbItem current>Page</SkBreadcrumbItem>
60
+ </SkBreadcrumbs>
61
+ ```
62
+
63
+ ## Accessibility
64
+
65
+ Renders inside a `<nav>` element with `aria-label="Breadcrumb"`. The current page item receives `aria-current="page"`. Disabled items are non-interactive.
@@ -0,0 +1,12 @@
1
+ component: SkButton
2
+ category: Forms
3
+ sections:
4
+ - intro
5
+ - usage
6
+ - variants
7
+ - kinds
8
+ - sizes
9
+ - icons
10
+ - states
11
+ - custom-colors
12
+ - accessibility
@@ -0,0 +1,16 @@
1
+ ---
2
+ section: accessibility
3
+ order: 9
4
+ ---
5
+
6
+ Renders with appropriate semantics based on usage. Loading state sets `aria-busy="true"`. Pressed state sets `aria-pressed="true"` for toggle buttons. Disabled buttons use the native `disabled` attribute.
7
+
8
+ When using icon-only buttons, provide an `aria-label` for screen readers:
9
+
10
+ ```vue
11
+ <SkButton kind="danger" aria-label="Delete item">
12
+ <template #icon>
13
+ <FontAwesomeIcon :icon="['fasds', 'trash']" />
14
+ </template>
15
+ </SkButton>
16
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ section: custom-colors
3
+ order: 8
4
+ ---
5
+
6
+ Use `base-color` for any CSS color value. Text color is automatically calculated for optimal contrast, or override with `text-color`.
7
+
8
+ ```vue
9
+ <SkButton variant="solid" base-color="#8B5CF6">
10
+ Custom Purple
11
+ </SkButton>
12
+ <SkButton variant="solid" base-color="oklch(0.7 0.25 300)" text-color="white">
13
+ OKLCH Color
14
+ </SkButton>
15
+ <SkButton variant="outline" base-color="oklch(0.75 0.2 180)">
16
+ Custom Teal
17
+ </SkButton>
18
+ ```
@@ -0,0 +1,31 @@
1
+ ---
2
+ section: icons
3
+ order: 6
4
+ ---
5
+
6
+ Use `icon`, `leading`, or `trailing` slots. Icon-only buttons automatically become square.
7
+
8
+ ```vue
9
+ <!-- Icon-only button -->
10
+ <SkButton kind="primary">
11
+ <template #icon>
12
+ <FontAwesomeIcon :icon="['fasds', 'plus']" />
13
+ </template>
14
+ </SkButton>
15
+
16
+ <!-- Button with leading icon -->
17
+ <SkButton kind="primary">
18
+ <template #leading>
19
+ <FontAwesomeIcon :icon="['fasds', 'plus']" />
20
+ </template>
21
+ With Leading Icon
22
+ </SkButton>
23
+
24
+ <!-- Button with trailing icon -->
25
+ <SkButton kind="primary">
26
+ With Trailing Icon
27
+ <template #trailing>
28
+ <FontAwesomeIcon :icon="['fasds', 'chevron-right']" />
29
+ </template>
30
+ </SkButton>
31
+ ```
@@ -0,0 +1,8 @@
1
+ ---
2
+ section: intro
3
+ order: 1
4
+ ---
5
+
6
+ # SkButton
7
+
8
+ A versatile button component with multiple visual variants, sizes, and interactive states. Renders as a `<button>`, `<a>`, or `<router-link>` depending on the props provided.
@@ -0,0 +1,25 @@
1
+ ---
2
+ section: kinds
3
+ order: 4
4
+ ---
5
+
6
+ Choose from semantic kinds (`neutral`, `primary`, `accent`, `success`, `danger`, `warning`, `info`) that adapt to your theme, or color palette kinds (`neon-blue`, `neon-orange`, `neon-purple`, `neon-green`, `neon-mint`, `neon-pink`) for fixed branding colors.
7
+
8
+ ```vue
9
+ <!-- Semantic Kinds -->
10
+ <SkButton kind="neutral">Neutral</SkButton>
11
+ <SkButton kind="primary">Primary</SkButton>
12
+ <SkButton kind="accent">Accent</SkButton>
13
+ <SkButton kind="success">Success</SkButton>
14
+ <SkButton kind="danger">Danger</SkButton>
15
+ <SkButton kind="warning">Warning</SkButton>
16
+ <SkButton kind="info">Info</SkButton>
17
+
18
+ <!-- Color Palette Kinds -->
19
+ <SkButton kind="neon-blue">Neon Blue</SkButton>
20
+ <SkButton kind="neon-orange">Neon Orange</SkButton>
21
+ <SkButton kind="neon-purple">Neon Purple</SkButton>
22
+ <SkButton kind="neon-green">Neon Green</SkButton>
23
+ <SkButton kind="neon-mint">Neon Mint</SkButton>
24
+ <SkButton kind="neon-pink">Neon Pink</SkButton>
25
+ ```
@@ -0,0 +1,14 @@
1
+ ---
2
+ section: sizes
3
+ order: 5
4
+ ---
5
+
6
+ Five sizes available: `xs`, `sm`, `md` (default), `lg`, `xl`.
7
+
8
+ ```vue
9
+ <SkButton size="xs" kind="primary">Extra Small</SkButton>
10
+ <SkButton size="sm" kind="primary">Small</SkButton>
11
+ <SkButton size="md" kind="primary">Medium</SkButton>
12
+ <SkButton size="lg" kind="primary">Large</SkButton>
13
+ <SkButton size="xl" kind="primary">Extra Large</SkButton>
14
+ ```
@@ -0,0 +1,12 @@
1
+ ---
2
+ section: states
3
+ order: 7
4
+ ---
5
+
6
+ `disabled` prevents interaction, `loading` shows a spinner and disables the button, `pressed` indicates toggle selection (sets `aria-pressed`).
7
+
8
+ ```vue
9
+ <SkButton kind="primary" disabled>Disabled</SkButton>
10
+ <SkButton kind="primary" loading>Loading</SkButton>
11
+ <SkButton kind="primary" pressed>Pressed</SkButton>
12
+ ```
@@ -0,0 +1,23 @@
1
+ ---
2
+ section: usage
3
+ order: 2
4
+ ---
5
+
6
+ Handle clicks with `@click`. For navigation, use `href` for external links or `to` for Vue Router.
7
+
8
+ ```vue
9
+ <!-- Click handler -->
10
+ <SkButton kind="primary" @click="handleClick('Button clicked!')">
11
+ Click Handler
12
+ </SkButton>
13
+
14
+ <!-- External link (renders as <a>) -->
15
+ <SkButton kind="accent" href="https://example.com" target="_blank">
16
+ External Link
17
+ </SkButton>
18
+
19
+ <!-- Vue Router link (renders as <router-link>) -->
20
+ <SkButton kind="neutral" to="/components/panel">
21
+ Router Link
22
+ </SkButton>
23
+ ```
@@ -0,0 +1,14 @@
1
+ ---
2
+ section: variants
3
+ order: 3
4
+ ---
5
+
6
+ Control visual hierarchy with five variants: `solid` for primary actions, `outline` for secondary, `subtle` for tertiary, `ghost` for minimal emphasis, and `link` for text-style navigation.
7
+
8
+ ```vue
9
+ <SkButton variant="solid" kind="primary">Solid</SkButton>
10
+ <SkButton variant="outline" kind="primary">Outline</SkButton>
11
+ <SkButton variant="subtle" kind="primary">Subtle</SkButton>
12
+ <SkButton variant="ghost" kind="primary">Ghost</SkButton>
13
+ <SkButton variant="link" kind="primary">Link</SkButton>
14
+ ```
@@ -0,0 +1,110 @@
1
+ ---
2
+ component: SkButton
3
+ category: Forms
4
+ ---
5
+
6
+ # SkButton
7
+
8
+ A versatile button component with multiple visual variants, sizes, and interactive states. Can render as a `<button>`, `<a>`, or `<router-link>` depending on the props provided.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkButton kind="primary" variant="solid">
15
+ Click Me
16
+ </SkButton>
17
+ </template>
18
+ ```
19
+
20
+ ## Variants
21
+
22
+ - **solid** (default) -- Filled background with contrasting text.
23
+ - **outline** -- Transparent background with colored border.
24
+ - **subtle** -- Light tinted background.
25
+ - **ghost** -- No background, colored text only.
26
+ - **link** -- Styled as an inline text link.
27
+
28
+ ```vue
29
+ <SkButton variant="solid">Solid</SkButton>
30
+ <SkButton variant="outline">Outline</SkButton>
31
+ <SkButton variant="subtle">Subtle</SkButton>
32
+ <SkButton variant="ghost">Ghost</SkButton>
33
+ <SkButton variant="link">Link</SkButton>
34
+ ```
35
+
36
+ ## Kinds
37
+
38
+ ```vue
39
+ <SkButton kind="primary">Primary</SkButton>
40
+ <SkButton kind="accent">Accent</SkButton>
41
+ <SkButton kind="success">Success</SkButton>
42
+ <SkButton kind="warning">Warning</SkButton>
43
+ <SkButton kind="danger">Danger</SkButton>
44
+ <SkButton kind="info">Info</SkButton>
45
+ <SkButton kind="neutral">Neutral</SkButton>
46
+ ```
47
+
48
+ ## Sizes
49
+
50
+ ```vue
51
+ <SkButton size="xs">Extra Small</SkButton>
52
+ <SkButton size="sm">Small</SkButton>
53
+ <SkButton size="md">Medium</SkButton>
54
+ <SkButton size="lg">Large</SkButton>
55
+ <SkButton size="xl">Extra Large</SkButton>
56
+ ```
57
+
58
+ ## Slots
59
+
60
+ - **leading** -- Icon or content before the button text.
61
+ - **default** -- Button label text.
62
+ - **trailing** -- Icon or content after the button text.
63
+ - **icon** -- Icon-only mode (renders a square button when no default slot is used).
64
+
65
+ ```vue
66
+ <SkButton kind="primary">
67
+ <template #leading><SearchIcon /></template>
68
+ Search
69
+ </SkButton>
70
+
71
+ <SkButton kind="danger">
72
+ <template #icon><TrashIcon /></template>
73
+ </SkButton>
74
+ ```
75
+
76
+ ## States
77
+
78
+ - **disabled** -- Reduces opacity and prevents interaction.
79
+ - **loading** -- Shows a spinner overlay and disables the button.
80
+ - **pressed** -- Toggle state for toolbar-style buttons. Sets `aria-pressed`.
81
+
82
+ ```vue
83
+ <SkButton disabled>Disabled</SkButton>
84
+ <SkButton :loading="isSaving">Save</SkButton>
85
+ <SkButton :pressed="isBold" @click="isBold = !isBold">Bold</SkButton>
86
+ ```
87
+
88
+ ## Link Rendering
89
+
90
+ Provide `href` for an anchor tag or `to` for Vue Router navigation:
91
+
92
+ ```vue
93
+ <SkButton href="https://example.com">External Link</SkButton>
94
+ <SkButton :to="{ name: 'dashboard' }">Dashboard</SkButton>
95
+ ```
96
+
97
+ ## Custom Colors
98
+
99
+ ```vue
100
+ <SkButton
101
+ base-color="oklch(0.7 0.25 300)"
102
+ text-color="white"
103
+ >
104
+ Custom Purple
105
+ </SkButton>
106
+ ```
107
+
108
+ ## Accessibility
109
+
110
+ Renders with `role="button"`. Loading state sets `aria-busy="true"`. Pressed state sets `aria-pressed="true"`. Disabled buttons cannot receive focus via mouse click but remain in the tab order with the disabled attribute.
@@ -0,0 +1,87 @@
1
+ ---
2
+ component: SkCard
3
+ category: Layout
4
+ ---
5
+
6
+ # SkCard
7
+
8
+ A structured content container with optional header, media, content, and footer sections. Built on top of SkPanel, it inherits beveled corners and decorative accents.
9
+
10
+ ## Usage
11
+
12
+ ```vue
13
+ <template>
14
+ <SkCard kind="primary" title="Card Title">
15
+ <p>Card body content.</p>
16
+ <template #footer>
17
+ <SkButton kind="primary">Action</SkButton>
18
+ </template>
19
+ </SkCard>
20
+ </template>
21
+ ```
22
+
23
+ ## Slots
24
+
25
+ - **header** -- Rendered above the content area. Also appears when the `title` prop is set.
26
+ - **media** -- Full-width section for images or video, rendered between header and content.
27
+ - **default** -- Main content area.
28
+ - **footer** -- Bottom section, typically for action buttons.
29
+
30
+ ```vue
31
+ <SkCard>
32
+ <template #header>
33
+ <h3>Custom Header</h3>
34
+ </template>
35
+ <template #media>
36
+ <img src="/banner.jpg" alt="Banner" />
37
+ </template>
38
+ <p>Body content.</p>
39
+ <template #footer>
40
+ <SkButton variant="ghost">Cancel</SkButton>
41
+ <SkButton kind="primary">Save</SkButton>
42
+ </template>
43
+ </SkCard>
44
+ ```
45
+
46
+ ## Kinds
47
+
48
+ ```vue
49
+ <SkCard kind="accent" title="Accent Card">Content</SkCard>
50
+ <SkCard kind="info" title="Info Card">Content</SkCard>
51
+ ```
52
+
53
+ ## Sizes
54
+
55
+ The `size` prop controls padding and spacing within the card:
56
+
57
+ ```vue
58
+ <SkCard size="sm" title="Compact">Small padding.</SkCard>
59
+ <SkCard size="lg" title="Spacious">Large padding.</SkCard>
60
+ ```
61
+
62
+ ## Scrollable Content
63
+
64
+ Set `scrollable` to make the content area independently scrollable when the card has a constrained height:
65
+
66
+ ```vue
67
+ <SkCard scrollable style="height: 300px" title="Scrollable">
68
+ <p>Long content that scrolls...</p>
69
+ </SkCard>
70
+ ```
71
+
72
+ ## Custom Colors
73
+
74
+ ```vue
75
+ <SkCard
76
+ base-color="#1e293b"
77
+ text-color="#e2e8f0"
78
+ header-color="#0f172a"
79
+ title="Dark Card"
80
+ >
81
+ Custom colored card with a darker header.
82
+ </SkCard>
83
+ ```
84
+
85
+ ## Accessibility
86
+
87
+ Semantic structure is the developer's responsibility. Use appropriate heading levels in the header slot and provide alt text for media content.