@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,486 @@
|
|
|
1
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
2
|
+
// Tabs Component Styles
|
|
3
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
4
|
+
|
|
5
|
+
@use '../theme/variables' as *;
|
|
6
|
+
|
|
7
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
8
|
+
// Tabs Design Tokens
|
|
9
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
.sk-tabs
|
|
12
|
+
{
|
|
13
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
14
|
+
// Spacing Tokens
|
|
15
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
/// Gap between tabs in the tab list
|
|
18
|
+
--sk-tab-list-gap: 0.5rem;
|
|
19
|
+
|
|
20
|
+
/// Gap between tab content items (icon + text spacing)
|
|
21
|
+
--sk-tab-content-gap: 0.5rem;
|
|
22
|
+
|
|
23
|
+
/// Horizontal padding for tabs
|
|
24
|
+
--sk-tab-padding-x: 0.5rem;
|
|
25
|
+
|
|
26
|
+
/// Vertical padding for tabs
|
|
27
|
+
--sk-tab-padding-y: 0.65rem;
|
|
28
|
+
|
|
29
|
+
/// Padding for tab panels
|
|
30
|
+
--sk-tab-panel-padding: 0.5rem;
|
|
31
|
+
|
|
32
|
+
/// Minimum width for vertical tab lists
|
|
33
|
+
--sk-tab-list-vertical-min-width: 50px;
|
|
34
|
+
|
|
35
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
36
|
+
// Typography Tokens
|
|
37
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
/// Font size for tab text
|
|
40
|
+
--sk-tab-font-size: 0.875rem;
|
|
41
|
+
|
|
42
|
+
/// Font weight for tab text
|
|
43
|
+
--sk-tab-font-weight: 500;
|
|
44
|
+
|
|
45
|
+
/// Font weight for active tabs (increased emphasis)
|
|
46
|
+
--sk-tab-font-weight-active: 600;
|
|
47
|
+
|
|
48
|
+
/// Line height for tab text
|
|
49
|
+
--sk-tab-line-height: 1.5;
|
|
50
|
+
|
|
51
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
52
|
+
// Border Tokens
|
|
53
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
54
|
+
|
|
55
|
+
/// Width of the underline indicator
|
|
56
|
+
--sk-tab-underline-width: 2px;
|
|
57
|
+
|
|
58
|
+
/// Width of the tab list border (horizontal bottom or vertical right)
|
|
59
|
+
--sk-tab-list-border-width: var(--sk-border-width-thin);
|
|
60
|
+
|
|
61
|
+
/// Opacity of tab list border
|
|
62
|
+
--sk-tab-list-border-opacity: 0.2;
|
|
63
|
+
|
|
64
|
+
/// Border radius for focus ring
|
|
65
|
+
--sk-tab-focus-radius: 4px;
|
|
66
|
+
|
|
67
|
+
/// Focus ring width
|
|
68
|
+
--sk-tab-focus-width: 2px;
|
|
69
|
+
|
|
70
|
+
/// Focus ring offset
|
|
71
|
+
--sk-tab-focus-offset: 2px;
|
|
72
|
+
|
|
73
|
+
/// Cut corner size for horizontal tabs (active tab background)
|
|
74
|
+
--sk-tab-cut-corner-horizontal: 7px;
|
|
75
|
+
|
|
76
|
+
/// Cut corner size for vertical tabs (active tab background)
|
|
77
|
+
--sk-tab-cut-corner-vertical: 5px;
|
|
78
|
+
|
|
79
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
80
|
+
// Transition Tokens
|
|
81
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
82
|
+
|
|
83
|
+
/// Tab transition duration (references global foundation token)
|
|
84
|
+
--sk-tab-transition-duration: var(--sk-transition-normal);
|
|
85
|
+
|
|
86
|
+
/// Tab transition easing (references global foundation token)
|
|
87
|
+
--sk-tab-transition-easing: var(--sk-transition-easing);
|
|
88
|
+
|
|
89
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
90
|
+
// State Tokens
|
|
91
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
92
|
+
|
|
93
|
+
/// Disabled state opacity (references global foundation token)
|
|
94
|
+
--sk-tab-disabled-opacity: var(--sk-opacity-disabled);
|
|
95
|
+
|
|
96
|
+
/// Inactive tab opacity (dimmed text for non-active tabs)
|
|
97
|
+
--sk-tab-inactive-opacity: 0.7;
|
|
98
|
+
|
|
99
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
100
|
+
// Color Tokens
|
|
101
|
+
//------------------------------------------------------------------------------------------------------------------
|
|
102
|
+
// These base tokens are overridden by each kind (neutral, primary, accent, etc.).
|
|
103
|
+
// This ensures consistent color behavior across all tab kinds.
|
|
104
|
+
|
|
105
|
+
/// Base color - the semantic color used for active tabs and underlines
|
|
106
|
+
/// Can be overridden externally via inline styles or CSS
|
|
107
|
+
--sk-tab-color-base: var(--sk-neutral-base);
|
|
108
|
+
|
|
109
|
+
/// Foreground/text color - calculated for optimal contrast
|
|
110
|
+
/// Can be overridden externally via inline styles or CSS
|
|
111
|
+
--sk-tab-fg: var(--sk-neutral-text);
|
|
112
|
+
|
|
113
|
+
/// Background color for active tabs (underline variant) - darkened version of base color
|
|
114
|
+
/// Same formula as buttons for consistency
|
|
115
|
+
--sk-tab-bg: color-mix(
|
|
116
|
+
in oklch,
|
|
117
|
+
color-mix(in oklch, var(--sk-tab-color-base) 75%, transparent 25%),
|
|
118
|
+
#000 46.25%
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
/// Active tab background opacity (subtle variant style)
|
|
122
|
+
--sk-tab-active-bg-opacity: var(--sk-opacity-subtle);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
126
|
+
// Tabs Container
|
|
127
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
128
|
+
|
|
129
|
+
.sk-tabs
|
|
130
|
+
{
|
|
131
|
+
display: flex;
|
|
132
|
+
|
|
133
|
+
// Horizontal orientation
|
|
134
|
+
&.sk-horizontal
|
|
135
|
+
{
|
|
136
|
+
flex-direction: column;
|
|
137
|
+
|
|
138
|
+
&.sk-placement-start
|
|
139
|
+
{
|
|
140
|
+
// Tab list at top (default for horizontal)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
&.sk-placement-end
|
|
144
|
+
{
|
|
145
|
+
flex-direction: column-reverse; // Tab list at bottom
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Vertical orientation
|
|
150
|
+
&.sk-vertical
|
|
151
|
+
{
|
|
152
|
+
--sk-tab-padding-x: 1.0rem;
|
|
153
|
+
--sk-tab-padding-y: 0.25rem;
|
|
154
|
+
|
|
155
|
+
flex-direction: row;
|
|
156
|
+
|
|
157
|
+
&.sk-placement-start
|
|
158
|
+
{
|
|
159
|
+
// Tab list on left (default for vertical)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
&.sk-placement-end
|
|
163
|
+
{
|
|
164
|
+
flex-direction: row-reverse; // Tab list on right
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Flush mode - use negative margins to align with container edges (e.g., inside panels)
|
|
169
|
+
// Apply negative margins on all sides except where the tab list border would be clipped
|
|
170
|
+
&.sk-flush
|
|
171
|
+
{
|
|
172
|
+
// Horizontal tabs - negative on left, right, and top/bottom depending on placement
|
|
173
|
+
&.sk-horizontal
|
|
174
|
+
{
|
|
175
|
+
margin-left: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
176
|
+
margin-right: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
177
|
+
|
|
178
|
+
&.sk-placement-start
|
|
179
|
+
{
|
|
180
|
+
margin-top: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
181
|
+
margin-bottom: 0;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
&.sk-placement-end
|
|
185
|
+
{
|
|
186
|
+
margin-top: 0;
|
|
187
|
+
margin-bottom: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Vertical tabs - negative on top, bottom, and left/right depending on placement
|
|
192
|
+
&.sk-vertical
|
|
193
|
+
{
|
|
194
|
+
margin-top: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
195
|
+
margin-bottom: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
196
|
+
|
|
197
|
+
&.sk-placement-start
|
|
198
|
+
{
|
|
199
|
+
margin-left: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
200
|
+
margin-right: 0;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
&.sk-placement-end
|
|
204
|
+
{
|
|
205
|
+
margin-left: 0;
|
|
206
|
+
margin-right: calc(-1 * var(--sk-panel-padding, 1rem));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
213
|
+
// Tab List
|
|
214
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
215
|
+
|
|
216
|
+
.sk-tab-list
|
|
217
|
+
{
|
|
218
|
+
display: flex;
|
|
219
|
+
gap: var(--sk-tab-list-gap);
|
|
220
|
+
position: relative;
|
|
221
|
+
|
|
222
|
+
// Horizontal layout
|
|
223
|
+
&.sk-horizontal
|
|
224
|
+
{
|
|
225
|
+
flex-direction: row;
|
|
226
|
+
border-bottom: var(--sk-tab-list-border-width) solid oklch(from var(--sk-tab-color-base) l c h / var(--sk-tab-list-border-opacity));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Vertical layout
|
|
230
|
+
&.sk-vertical
|
|
231
|
+
{
|
|
232
|
+
flex-direction: column;
|
|
233
|
+
border-right: var(--sk-tab-list-border-width) solid oklch(from var(--sk-tab-color-base) l c h / var(--sk-tab-list-border-opacity));
|
|
234
|
+
min-width: var(--sk-tab-list-vertical-min-width);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Flush mode padding - add internal padding to tab list (half of panel padding)
|
|
239
|
+
.sk-tabs.sk-flush .sk-tab-list
|
|
240
|
+
{
|
|
241
|
+
&.sk-horizontal
|
|
242
|
+
{
|
|
243
|
+
padding-left: calc(var(--sk-panel-padding, 1rem) / 2);
|
|
244
|
+
padding-right: calc(var(--sk-panel-padding, 1rem) / 2);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
&.sk-vertical
|
|
248
|
+
{
|
|
249
|
+
padding-top: calc(var(--sk-panel-padding, 1rem) / 2);
|
|
250
|
+
padding-bottom: calc(var(--sk-panel-padding, 1rem) / 2);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
255
|
+
// Individual Tab
|
|
256
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
257
|
+
|
|
258
|
+
.sk-tab
|
|
259
|
+
{
|
|
260
|
+
display: inline-flex;
|
|
261
|
+
align-items: center;
|
|
262
|
+
gap: var(--sk-tab-content-gap);
|
|
263
|
+
padding: var(--sk-tab-padding-y) var(--sk-tab-padding-x);
|
|
264
|
+
font-size: var(--sk-tab-font-size);
|
|
265
|
+
font-weight: var(--sk-tab-font-weight);
|
|
266
|
+
line-height: var(--sk-tab-line-height);
|
|
267
|
+
background: transparent;
|
|
268
|
+
border: none;
|
|
269
|
+
border-radius: 0; // Override any RekaUI defaults
|
|
270
|
+
cursor: pointer;
|
|
271
|
+
transition:
|
|
272
|
+
color var(--sk-tab-transition-duration) var(--sk-tab-transition-easing),
|
|
273
|
+
background-color var(--sk-tab-transition-duration) var(--sk-tab-transition-easing),
|
|
274
|
+
border-color var(--sk-tab-transition-duration) var(--sk-tab-transition-easing);
|
|
275
|
+
white-space: nowrap;
|
|
276
|
+
user-select: none;
|
|
277
|
+
position: relative;
|
|
278
|
+
|
|
279
|
+
// Default inactive state - dimmed foreground color for contrast
|
|
280
|
+
color: oklch(from var(--sk-tab-fg) l c h / var(--sk-tab-inactive-opacity));
|
|
281
|
+
|
|
282
|
+
&:hover:not(:disabled)
|
|
283
|
+
{
|
|
284
|
+
// Hover shows full foreground color
|
|
285
|
+
color: var(--sk-tab-fg);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
&[data-state="active"]
|
|
289
|
+
{
|
|
290
|
+
// Active shows full foreground color
|
|
291
|
+
color: var(--sk-tab-fg);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
&.sk-disabled,
|
|
295
|
+
&:disabled
|
|
296
|
+
{
|
|
297
|
+
opacity: var(--sk-tab-disabled-opacity);
|
|
298
|
+
cursor: not-allowed;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
&:focus-visible
|
|
302
|
+
{
|
|
303
|
+
outline: var(--sk-tab-focus-width) solid var(--sk-focus-ring-color);
|
|
304
|
+
outline-offset: var(--sk-tab-focus-offset);
|
|
305
|
+
// Note: No border-radius here - it conflicts with our clip-path cut corners
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
310
|
+
// Tab Label (Overlapping Text for No Layout Shift)
|
|
311
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
312
|
+
|
|
313
|
+
.sk-tab-label
|
|
314
|
+
{
|
|
315
|
+
display: grid;
|
|
316
|
+
align-items: center;
|
|
317
|
+
line-height: 1;
|
|
318
|
+
white-space: nowrap;
|
|
319
|
+
|
|
320
|
+
// Overlap both spans in the same grid cell
|
|
321
|
+
.sk-tab-label-normal,
|
|
322
|
+
.sk-tab-label-bold
|
|
323
|
+
{
|
|
324
|
+
grid-area: 1 / 1;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.sk-tab-label-normal
|
|
328
|
+
{
|
|
329
|
+
font-weight: var(--sk-tab-font-weight);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.sk-tab-label-bold
|
|
333
|
+
{
|
|
334
|
+
font-weight: var(--sk-tab-font-weight-active);
|
|
335
|
+
visibility: hidden;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Active state: swap visibility
|
|
340
|
+
.sk-tab[data-state="active"]
|
|
341
|
+
{
|
|
342
|
+
.sk-tab-label-normal
|
|
343
|
+
{
|
|
344
|
+
visibility: hidden;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.sk-tab-label-bold
|
|
348
|
+
{
|
|
349
|
+
visibility: visible;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
354
|
+
// Tab List Styles
|
|
355
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
356
|
+
|
|
357
|
+
// Apply kind-based colors at tabs container level (same element as inline styles)
|
|
358
|
+
// This applies ONLY when a kind class is present. Without a kind class, uses the defaults
|
|
359
|
+
// defined in the design tokens section (neutral), allowing inline styles to override them.
|
|
360
|
+
.sk-tabs
|
|
361
|
+
{
|
|
362
|
+
@each $kind in $kinds
|
|
363
|
+
{
|
|
364
|
+
&.sk-#{"" + $kind}
|
|
365
|
+
{
|
|
366
|
+
--sk-tab-color-base: var(--sk-#{$kind}-base);
|
|
367
|
+
--sk-tab-fg: var(--sk-#{$kind}-text);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Individual tabs can override with their own kind (for mixed-color tabs)
|
|
373
|
+
// This applies ONLY when a kind class is present on the individual tab.
|
|
374
|
+
.sk-tab-list .sk-tab
|
|
375
|
+
{
|
|
376
|
+
position: relative;
|
|
377
|
+
border-bottom: var(--sk-tab-underline-width) solid transparent;
|
|
378
|
+
|
|
379
|
+
// Apply kind-based color tokens to individual tabs
|
|
380
|
+
@each $kind in $kinds
|
|
381
|
+
{
|
|
382
|
+
&.sk-#{"" + $kind}
|
|
383
|
+
{
|
|
384
|
+
--sk-tab-color-base: var(--sk-#{$kind}-base);
|
|
385
|
+
--sk-tab-fg: var(--sk-#{$kind}-text);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// Active state styling
|
|
390
|
+
&[data-state="active"]
|
|
391
|
+
{
|
|
392
|
+
background-color: oklch(from var(--sk-tab-color-base) l c h / 0.15);
|
|
393
|
+
border-bottom-color: var(--sk-tab-color-base);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Vertical tabs (becomes side line)
|
|
398
|
+
.sk-tab-list.sk-vertical .sk-tab
|
|
399
|
+
{
|
|
400
|
+
border-bottom: none;
|
|
401
|
+
border-right: var(--sk-tab-underline-width) solid transparent;
|
|
402
|
+
|
|
403
|
+
// For vertical, use right border instead
|
|
404
|
+
&[data-state="active"]
|
|
405
|
+
{
|
|
406
|
+
background-color: oklch(from var(--sk-tab-color-base) l c h / 0.15);
|
|
407
|
+
border-bottom-color: transparent;
|
|
408
|
+
border-right-color: var(--sk-tab-color-base);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// Horizontal tabs cut corners (not in flush mode)
|
|
413
|
+
.sk-tabs:not(.sk-flush).sk-horizontal .sk-tab-list .sk-tab[data-state="active"]
|
|
414
|
+
{
|
|
415
|
+
// Only cut upper left corner
|
|
416
|
+
clip-path: polygon(
|
|
417
|
+
var(--sk-tab-cut-corner-horizontal) 0%,
|
|
418
|
+
100% 0%,
|
|
419
|
+
100% 100%,
|
|
420
|
+
0% 100%,
|
|
421
|
+
0% var(--sk-tab-cut-corner-horizontal)
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Vertical tabs placement-specific cut corners
|
|
426
|
+
.sk-tabs:not(.sk-flush).sk-vertical.sk-placement-start .sk-tab-list .sk-tab[data-state="active"]
|
|
427
|
+
{
|
|
428
|
+
// Tabs on left - only cut top-left corner
|
|
429
|
+
clip-path: polygon(
|
|
430
|
+
var(--sk-tab-cut-corner-vertical) 0%,
|
|
431
|
+
100% 0%,
|
|
432
|
+
100% 100%,
|
|
433
|
+
0% 100%,
|
|
434
|
+
0% var(--sk-tab-cut-corner-vertical)
|
|
435
|
+
);
|
|
436
|
+
border-right-color: var(--sk-tab-color-base);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.sk-tabs:not(.sk-flush).sk-vertical.sk-placement-end .sk-tab-list .sk-tab[data-state="active"]
|
|
440
|
+
{
|
|
441
|
+
// Tabs on right - only cut top-left corner
|
|
442
|
+
clip-path: polygon(
|
|
443
|
+
var(--sk-tab-cut-corner-vertical) 0%,
|
|
444
|
+
100% 0%,
|
|
445
|
+
100% 100%,
|
|
446
|
+
0% 100%,
|
|
447
|
+
0% var(--sk-tab-cut-corner-vertical)
|
|
448
|
+
);
|
|
449
|
+
border-right-color: var(--sk-tab-color-base);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
453
|
+
// Tab Icon
|
|
454
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
455
|
+
|
|
456
|
+
.sk-tab-icon
|
|
457
|
+
{
|
|
458
|
+
display: inline-flex;
|
|
459
|
+
align-items: center;
|
|
460
|
+
justify-content: center;
|
|
461
|
+
width: 1.25rem;
|
|
462
|
+
height: 1.25rem;
|
|
463
|
+
|
|
464
|
+
svg
|
|
465
|
+
{
|
|
466
|
+
width: 100%;
|
|
467
|
+
height: 100%;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
472
|
+
// Tab Panels
|
|
473
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
474
|
+
|
|
475
|
+
.sk-tab-panels
|
|
476
|
+
{
|
|
477
|
+
flex: 1;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
.sk-tab-panel
|
|
481
|
+
{
|
|
482
|
+
padding: var(--sk-tab-panel-padding);
|
|
483
|
+
outline: none;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
//----------------------------------------------------------------------------------------------------------------------
|