@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.
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/sleekspace-ui.css +12844 -0
- package/dist/sleekspace-ui.es.js +19021 -0
- package/dist/sleekspace-ui.umd.js +19040 -0
- package/docs/components/accordion.md +92 -0
- package/docs/components/alert.md +72 -0
- package/docs/components/avatar.md +69 -0
- package/docs/components/breadcrumbs.md +65 -0
- package/docs/components/button/_meta.yaml +12 -0
- package/docs/components/button/accessibility.md +16 -0
- package/docs/components/button/custom-colors.md +18 -0
- package/docs/components/button/icons.md +31 -0
- package/docs/components/button/intro.md +8 -0
- package/docs/components/button/kinds.md +25 -0
- package/docs/components/button/sizes.md +14 -0
- package/docs/components/button/states.md +12 -0
- package/docs/components/button/usage.md +23 -0
- package/docs/components/button/variants.md +14 -0
- package/docs/components/button.md +110 -0
- package/docs/components/card.md +87 -0
- package/docs/components/checkbox.md +77 -0
- package/docs/components/collapsible.md +71 -0
- package/docs/components/divider.md +62 -0
- package/docs/components/dropdown.md +88 -0
- package/docs/components/field.md +80 -0
- package/docs/components/group.md +41 -0
- package/docs/components/input.md +84 -0
- package/docs/components/listbox.md +82 -0
- package/docs/components/modal.md +101 -0
- package/docs/components/navbar.md +64 -0
- package/docs/components/number-input.md +78 -0
- package/docs/components/page.md +77 -0
- package/docs/components/pagination.md +88 -0
- package/docs/components/panel.md +74 -0
- package/docs/components/popover.md +93 -0
- package/docs/components/progress.md +76 -0
- package/docs/components/radio.md +86 -0
- package/docs/components/sidebar.md +74 -0
- package/docs/components/skeleton.md +76 -0
- package/docs/components/slider.md +94 -0
- package/docs/components/spinner.md +59 -0
- package/docs/components/switch.md +97 -0
- package/docs/components/table.md +91 -0
- package/docs/components/tabs.md +108 -0
- package/docs/components/tag.md +75 -0
- package/docs/components/tags-input.md +88 -0
- package/docs/components/textarea.md +80 -0
- package/docs/components/theme.md +65 -0
- package/docs/components/toast.md +95 -0
- package/docs/components/tooltip.md +90 -0
- package/docs/guides/custom-colors.md +84 -0
- package/docs/guides/design-tokens.md +105 -0
- package/docs/guides/getting-started.md +144 -0
- package/docs/guides/installation.md +62 -0
- package/docs/guides/theming.md +101 -0
- package/package.json +76 -0
- package/src/components/Accordion/SkAccordion.vue +133 -0
- package/src/components/Accordion/SkAccordionItem.vue +131 -0
- package/src/components/Accordion/index.ts +3 -0
- package/src/components/Accordion/types.ts +9 -0
- package/src/components/Alert/SkAlert.vue +137 -0
- package/src/components/Alert/types.ts +10 -0
- package/src/components/Avatar/SkAvatar.vue +141 -0
- package/src/components/Avatar/index.ts +8 -0
- package/src/components/Avatar/types.ts +31 -0
- package/src/components/Breadcrumbs/SkBreadcrumbItem.vue +76 -0
- package/src/components/Breadcrumbs/SkBreadcrumbSeparator.vue +38 -0
- package/src/components/Breadcrumbs/SkBreadcrumbs.vue +93 -0
- package/src/components/Breadcrumbs/index.ts +10 -0
- package/src/components/Breadcrumbs/types.ts +36 -0
- package/src/components/Button/SkButton.vue +148 -0
- package/src/components/Button/types.ts +21 -0
- package/src/components/Card/SkCard.vue +144 -0
- package/src/components/Card/types.ts +12 -0
- package/src/components/Checkbox/SkCheckbox.vue +136 -0
- package/src/components/Checkbox/index.ts +8 -0
- package/src/components/Checkbox/types.ts +10 -0
- package/src/components/Collapsible/SkCollapsible.vue +159 -0
- package/src/components/Collapsible/index.ts +2 -0
- package/src/components/Collapsible/types.ts +8 -0
- package/src/components/Divider/SkDivider.vue +63 -0
- package/src/components/Divider/types.ts +15 -0
- package/src/components/Dropdown/SkDropdown.vue +150 -0
- package/src/components/Dropdown/SkDropdownMenuItem.vue +58 -0
- package/src/components/Dropdown/SkDropdownMenuSeparator.vue +26 -0
- package/src/components/Dropdown/SkDropdownSubmenu.vue +107 -0
- package/src/components/Dropdown/index.ts +11 -0
- package/src/components/Dropdown/types.ts +11 -0
- package/src/components/Field/SkField.vue +152 -0
- package/src/components/Field/index.ts +8 -0
- package/src/components/Field/types.ts +7 -0
- package/src/components/Group/SkGroup.vue +52 -0
- package/src/components/Group/types.ts +10 -0
- package/src/components/Input/SkInput.vue +117 -0
- package/src/components/Input/index.ts +8 -0
- package/src/components/Input/types.ts +11 -0
- package/src/components/Listbox/SkListbox.vue +164 -0
- package/src/components/Listbox/SkListboxItem.vue +68 -0
- package/src/components/Listbox/SkListboxSeparator.vue +26 -0
- package/src/components/Listbox/index.ts +10 -0
- package/src/components/Listbox/types.ts +10 -0
- package/src/components/Modal/SkModal.vue +231 -0
- package/src/components/Modal/index.ts +8 -0
- package/src/components/Modal/types.ts +12 -0
- package/src/components/NavBar/SkNavBar.vue +83 -0
- package/src/components/NavBar/index.ts +8 -0
- package/src/components/NavBar/types.ts +15 -0
- package/src/components/NumberInput/SkNumberInput.vue +168 -0
- package/src/components/NumberInput/index.ts +8 -0
- package/src/components/NumberInput/types.ts +10 -0
- package/src/components/Page/SkPage.vue +94 -0
- package/src/components/Page/index.ts +8 -0
- package/src/components/Page/types.ts +21 -0
- package/src/components/Pagination/SkPagination.vue +185 -0
- package/src/components/Pagination/SkPaginationItem.vue +107 -0
- package/src/components/Pagination/index.ts +9 -0
- package/src/components/Pagination/types.ts +40 -0
- package/src/components/Panel/SkPanel.vue +96 -0
- package/src/components/Panel/types.ts +15 -0
- package/src/components/Popover/SkPopover.vue +185 -0
- package/src/components/Popover/index.ts +8 -0
- package/src/components/Popover/types.ts +11 -0
- package/src/components/Progress/SkProgress.vue +144 -0
- package/src/components/Progress/index.ts +8 -0
- package/src/components/Progress/types.ts +34 -0
- package/src/components/Radio/SkRadio.vue +110 -0
- package/src/components/Radio/SkRadioGroup.vue +92 -0
- package/src/components/Radio/index.ts +9 -0
- package/src/components/Radio/types.ts +11 -0
- package/src/components/Sidebar/README.md +405 -0
- package/src/components/Sidebar/SkSidebar.vue +88 -0
- package/src/components/Sidebar/SkSidebarItem.vue +58 -0
- package/src/components/Sidebar/SkSidebarSection.vue +40 -0
- package/src/components/Sidebar/types.ts +3 -0
- package/src/components/Skeleton/SkSkeleton.vue +171 -0
- package/src/components/Skeleton/index.ts +8 -0
- package/src/components/Skeleton/types.ts +31 -0
- package/src/components/Slider/SkSlider.vue +165 -0
- package/src/components/Slider/index.ts +8 -0
- package/src/components/Slider/types.ts +44 -0
- package/src/components/Spinner/SkSpinner.vue +105 -0
- package/src/components/Spinner/index.ts +8 -0
- package/src/components/Spinner/types.ts +28 -0
- package/src/components/Switch/SkSwitch.vue +215 -0
- package/src/components/Switch/index.ts +8 -0
- package/src/components/Switch/types.ts +12 -0
- package/src/components/Table/SkTable.vue +109 -0
- package/src/components/Table/index.ts +2 -0
- package/src/components/Table/types.ts +15 -0
- package/src/components/Tabs/README.md +331 -0
- package/src/components/Tabs/SkTab.vue +84 -0
- package/src/components/Tabs/SkTabList.vue +62 -0
- package/src/components/Tabs/SkTabPanel.vue +47 -0
- package/src/components/Tabs/SkTabPanels.vue +23 -0
- package/src/components/Tabs/SkTabs.vue +124 -0
- package/src/components/Tabs/types.ts +21 -0
- package/src/components/Tag/SkTag.vue +129 -0
- package/src/components/Tag/types.ts +15 -0
- package/src/components/TagsInput/SkTagsInput.vue +184 -0
- package/src/components/TagsInput/index.ts +8 -0
- package/src/components/TagsInput/types.ts +10 -0
- package/src/components/Textarea/SkTextarea.vue +117 -0
- package/src/components/Textarea/index.ts +8 -0
- package/src/components/Textarea/types.ts +10 -0
- package/src/components/Theme/SkTheme.vue +47 -0
- package/src/components/Theme/types.ts +17 -0
- package/src/components/Theme/useTheme.ts +131 -0
- package/src/components/Toast/SkToast.vue +156 -0
- package/src/components/Toast/SkToastProvider.vue +180 -0
- package/src/components/Toast/index.ts +15 -0
- package/src/components/Toast/types.ts +63 -0
- package/src/components/Toast/useToast.ts +78 -0
- package/src/components/Tooltip/SkTooltip.vue +162 -0
- package/src/components/Tooltip/SkTooltipProvider.vue +114 -0
- package/src/components/Tooltip/index.ts +9 -0
- package/src/components/Tooltip/types.ts +13 -0
- package/src/composables/useCustomColors.test.ts +505 -0
- package/src/composables/useCustomColors.ts +124 -0
- package/src/composables/usePortalContext.test.ts +402 -0
- package/src/composables/usePortalContext.ts +95 -0
- package/src/global.d.ts +76 -0
- package/src/index.ts +259 -0
- package/src/styles/_scrollbar.scss +100 -0
- package/src/styles/base/_fonts.scss +105 -0
- package/src/styles/base/_global.scss +47 -0
- package/src/styles/base/_index.scss +24 -0
- package/src/styles/base/_reset.scss +11 -0
- package/src/styles/base/_typography.scss +178 -0
- package/src/styles/components/_accordion.scss +250 -0
- package/src/styles/components/_alert.scss +239 -0
- package/src/styles/components/_avatar.scss +133 -0
- package/src/styles/components/_breadcrumbs.scss +137 -0
- package/src/styles/components/_button.scss +731 -0
- package/src/styles/components/_card.scss +141 -0
- package/src/styles/components/_checkbox.scss +232 -0
- package/src/styles/components/_collapsible.scss +158 -0
- package/src/styles/components/_divider.scss +121 -0
- package/src/styles/components/_field.scss +87 -0
- package/src/styles/components/_group.scss +138 -0
- package/src/styles/components/_index.scss +46 -0
- package/src/styles/components/_input.scss +205 -0
- package/src/styles/components/_listbox.scss +453 -0
- package/src/styles/components/_menu.scss +216 -0
- package/src/styles/components/_modal.scss +329 -0
- package/src/styles/components/_navbar.scss +258 -0
- package/src/styles/components/_number-input.scss +352 -0
- package/src/styles/components/_page.scss +98 -0
- package/src/styles/components/_pagination.scss +411 -0
- package/src/styles/components/_panel.scss +281 -0
- package/src/styles/components/_popover.scss +258 -0
- package/src/styles/components/_progress.scss +280 -0
- package/src/styles/components/_radio.scss +255 -0
- package/src/styles/components/_sidebar.scss +92 -0
- package/src/styles/components/_skeleton.scss +138 -0
- package/src/styles/components/_slider.scss +262 -0
- package/src/styles/components/_spinner.scss +331 -0
- package/src/styles/components/_switch.scss +370 -0
- package/src/styles/components/_table.scss +405 -0
- package/src/styles/components/_tabs.scss +486 -0
- package/src/styles/components/_tag.scss +425 -0
- package/src/styles/components/_tags-input.scss +279 -0
- package/src/styles/components/_textarea.scss +208 -0
- package/src/styles/components/_toast.scss +331 -0
- package/src/styles/components/_tooltip.scss +206 -0
- package/src/styles/fonts/Titillium_Web/OFL.txt +93 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf +0 -0
- package/src/styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf +0 -0
- package/src/styles/index.scss +17 -0
- package/src/styles/mixins/_cut-border.scss +254 -0
- package/src/styles/mixins/_index.scss +7 -0
- package/src/styles/theme/_variables.scss +42 -0
- package/src/styles/themes/README.md +127 -0
- package/src/styles/themes/_colorful.scss +58 -0
- package/src/styles/themes/_greyscale.scss +58 -0
- package/src/styles/themes/index.scss +9 -0
- package/src/styles/tokens/README.md +268 -0
- package/src/styles/tokens/_foundation-borders.scss +26 -0
- package/src/styles/tokens/_foundation-colors.scss +169 -0
- package/src/styles/tokens/_foundation-glow.scss +36 -0
- package/src/styles/tokens/_foundation-radius.scss +53 -0
- package/src/styles/tokens/_foundation-scrollbar.scss +31 -0
- package/src/styles/tokens/_foundation-shadows.scss +37 -0
- package/src/styles/tokens/_foundation-space.scss +36 -0
- package/src/styles/tokens/_foundation-transitions.scss +37 -0
- package/src/styles/tokens/_foundation-typography.scss +58 -0
- package/src/styles/tokens/_semantic-color-kinds.scss +112 -0
- package/src/styles/tokens/_semantic-colors.scss +10 -0
- package/src/styles/tokens/_semantic-interactive.scss +29 -0
- package/src/styles/tokens/_semantic-scrollbar.scss +48 -0
- package/src/styles/tokens/_semantic-surfaces.scss +36 -0
- package/src/styles/tokens/index.scss +38 -0
- package/src/styles/tokens.scss +268 -0
- package/src/styles/utilities/_index.scss +9 -0
- package/src/styles/utilities/_typography.scss +121 -0
- package/src/types.ts +50 -0
- 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,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,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.
|