@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,36 @@
1
+ /**
2
+ * Semantic Tokens - Surfaces
3
+ *
4
+ * Background and text colors for surfaces and general use.
5
+ * These provide a consistent color system independent of component kinds.
6
+ */
7
+
8
+ :root
9
+ {
10
+ /* ===================================================================
11
+ * Background Colors
12
+ * For page backgrounds, card surfaces, etc.
13
+ * =================================================================== */
14
+
15
+ --sk-surface-base: var(--sk-color-gray-90); /* Main background */
16
+ --sk-surface-raised: var(--sk-color-gray-95); /* Elevated surfaces (cards, panels) */
17
+ --sk-surface-overlay: var(--sk-color-gray-80); /* Overlays (modals, dropdowns) */
18
+
19
+ /* ===================================================================
20
+ * Text Colors
21
+ * For body text, secondary text, disabled text, etc.
22
+ * =================================================================== */
23
+
24
+ --sk-text-primary: oklch(1 0 0); /* Primary body text */
25
+ --sk-text-secondary: var(--sk-color-gray-30); /* Secondary/muted text */
26
+ --sk-text-tertiary: var(--sk-color-gray-50); /* Tertiary/placeholder text */
27
+ --sk-text-disabled: var(--sk-color-gray-60); /* Disabled text */
28
+
29
+ /* ===================================================================
30
+ * Border Colors
31
+ * For borders, dividers, etc.
32
+ * =================================================================== */
33
+
34
+ --sk-border-normal: var(--sk-color-gray-70); /* Standard borders */
35
+ --sk-border-subtle: var(--sk-color-gray-80); /* Subtle borders/dividers */
36
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Design Tokens - Main Entry
3
+ *
4
+ * This file imports all design token categories in the correct order.
5
+ * Foundation tokens must be loaded before semantic tokens,
6
+ * and semantic tokens must be loaded before component tokens.
7
+ *
8
+ * Token Hierarchy:
9
+ * Foundation → Semantic → Component
10
+ *
11
+ * @see DESIGN_TOKENS_PROPOSAL.md for complete documentation
12
+ */
13
+
14
+ /* ===================================================================
15
+ * Foundation Tokens
16
+ * Global primitives that all other tokens derive from
17
+ * =================================================================== */
18
+
19
+ @use 'foundation-colors';
20
+ @use 'foundation-space';
21
+ @use 'foundation-radius';
22
+ @use 'foundation-borders';
23
+ @use 'foundation-shadows';
24
+ @use 'foundation-glow';
25
+ @use 'foundation-transitions';
26
+ @use 'foundation-typography';
27
+ @use 'foundation-scrollbar';
28
+
29
+ /* ===================================================================
30
+ * Semantic Tokens
31
+ * Contextual meanings that reference foundation tokens
32
+ * =================================================================== */
33
+
34
+ @use 'semantic-colors';
35
+ @use 'semantic-color-kinds';
36
+ @use 'semantic-surfaces';
37
+ @use 'semantic-interactive';
38
+ @use 'semantic-scrollbar';
@@ -0,0 +1,268 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // SleekSpace UI - Tokens Only
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+ // This file provides ONLY CSS custom properties (design tokens) without any component styles.
5
+ // Perfect for Tailwind CSS users who want to use SleekSpace tokens with Tailwind utilities.
6
+ //
7
+ // Usage with Tailwind v4:
8
+ //
9
+ // @import "tailwindcss";
10
+ // @import "@skewedaspect/sleekspace-ui/tokens.css";
11
+ //
12
+ // Then use in your templates:
13
+ // <div class="bg-sk-primary text-sk-primary-text">SleekSpace + Tailwind!</div>
14
+ // <div class="bg-sk-purple-50 text-white">Neon purple</div>
15
+ //
16
+ // Or with arbitrary values:
17
+ // <div class="bg-[var(--sk-primary-base)]">Direct CSS variable</div>
18
+ //----------------------------------------------------------------------------------------------------------------------
19
+
20
+ @use "tokens/index" as tokens-module;
21
+
22
+ //----------------------------------------------------------------------------------------------------------------------
23
+ // Tailwind v4 Theme Integration
24
+ //----------------------------------------------------------------------------------------------------------------------
25
+ // Map SleekSpace CSS variables to Tailwind's @theme system for standard utilities
26
+ //----------------------------------------------------------------------------------------------------------------------
27
+
28
+ @theme inline {
29
+ /* Semantic Colors (theme-aware - change based on SkTheme) */
30
+ /* Each semantic color gets a full shade range using oklch lightness modifications */
31
+
32
+ /* Neutral */
33
+ --color-sk-neutral: var(--sk-neutral-base);
34
+ --color-sk-neutral-text: var(--sk-neutral-text);
35
+ --color-sk-neutral-5: oklch(from var(--sk-neutral-base) 0.95 c h);
36
+ --color-sk-neutral-10: oklch(from var(--sk-neutral-base) 0.90 c h);
37
+ --color-sk-neutral-20: oklch(from var(--sk-neutral-base) 0.85 c h);
38
+ --color-sk-neutral-30: oklch(from var(--sk-neutral-base) 0.80 c h);
39
+ --color-sk-neutral-40: oklch(from var(--sk-neutral-base) 0.75 c h);
40
+ --color-sk-neutral-50: var(--sk-neutral-base);
41
+ --color-sk-neutral-60: oklch(from var(--sk-neutral-base) calc(l * 0.85) c h);
42
+ --color-sk-neutral-70: oklch(from var(--sk-neutral-base) calc(l * 0.70) c h);
43
+ --color-sk-neutral-80: oklch(from var(--sk-neutral-base) calc(l * 0.55) c h);
44
+ --color-sk-neutral-90: oklch(from var(--sk-neutral-base) calc(l * 0.40) c h);
45
+ --color-sk-neutral-95: oklch(from var(--sk-neutral-base) calc(l * 0.25) c h);
46
+
47
+ /* Primary */
48
+ --color-sk-primary: var(--sk-primary-base);
49
+ --color-sk-primary-text: var(--sk-primary-text);
50
+ --color-sk-primary-5: oklch(from var(--sk-primary-base) 0.95 c h);
51
+ --color-sk-primary-10: oklch(from var(--sk-primary-base) 0.90 c h);
52
+ --color-sk-primary-20: oklch(from var(--sk-primary-base) 0.85 c h);
53
+ --color-sk-primary-30: oklch(from var(--sk-primary-base) 0.80 c h);
54
+ --color-sk-primary-40: oklch(from var(--sk-primary-base) 0.75 c h);
55
+ --color-sk-primary-50: var(--sk-primary-base);
56
+ --color-sk-primary-60: oklch(from var(--sk-primary-base) calc(l * 0.85) c h);
57
+ --color-sk-primary-70: oklch(from var(--sk-primary-base) calc(l * 0.70) c h);
58
+ --color-sk-primary-80: oklch(from var(--sk-primary-base) calc(l * 0.55) c h);
59
+ --color-sk-primary-90: oklch(from var(--sk-primary-base) calc(l * 0.40) c h);
60
+ --color-sk-primary-95: oklch(from var(--sk-primary-base) calc(l * 0.25) c h);
61
+
62
+ /* Accent */
63
+ --color-sk-accent: var(--sk-accent-base);
64
+ --color-sk-accent-text: var(--sk-accent-text);
65
+ --color-sk-accent-5: oklch(from var(--sk-accent-base) 0.95 c h);
66
+ --color-sk-accent-10: oklch(from var(--sk-accent-base) 0.90 c h);
67
+ --color-sk-accent-20: oklch(from var(--sk-accent-base) 0.85 c h);
68
+ --color-sk-accent-30: oklch(from var(--sk-accent-base) 0.80 c h);
69
+ --color-sk-accent-40: oklch(from var(--sk-accent-base) 0.75 c h);
70
+ --color-sk-accent-50: var(--sk-accent-base);
71
+ --color-sk-accent-60: oklch(from var(--sk-accent-base) calc(l * 0.85) c h);
72
+ --color-sk-accent-70: oklch(from var(--sk-accent-base) calc(l * 0.70) c h);
73
+ --color-sk-accent-80: oklch(from var(--sk-accent-base) calc(l * 0.55) c h);
74
+ --color-sk-accent-90: oklch(from var(--sk-accent-base) calc(l * 0.40) c h);
75
+ --color-sk-accent-95: oklch(from var(--sk-accent-base) calc(l * 0.25) c h);
76
+
77
+ /* Info */
78
+ --color-sk-info: var(--sk-info-base);
79
+ --color-sk-info-text: var(--sk-info-text);
80
+ --color-sk-info-5: oklch(from var(--sk-info-base) 0.95 c h);
81
+ --color-sk-info-10: oklch(from var(--sk-info-base) 0.90 c h);
82
+ --color-sk-info-20: oklch(from var(--sk-info-base) 0.85 c h);
83
+ --color-sk-info-30: oklch(from var(--sk-info-base) 0.80 c h);
84
+ --color-sk-info-40: oklch(from var(--sk-info-base) 0.75 c h);
85
+ --color-sk-info-50: var(--sk-info-base);
86
+ --color-sk-info-60: oklch(from var(--sk-info-base) calc(l * 0.85) c h);
87
+ --color-sk-info-70: oklch(from var(--sk-info-base) calc(l * 0.70) c h);
88
+ --color-sk-info-80: oklch(from var(--sk-info-base) calc(l * 0.55) c h);
89
+ --color-sk-info-90: oklch(from var(--sk-info-base) calc(l * 0.40) c h);
90
+ --color-sk-info-95: oklch(from var(--sk-info-base) calc(l * 0.25) c h);
91
+
92
+ /* Success */
93
+ --color-sk-success: var(--sk-success-base);
94
+ --color-sk-success-text: var(--sk-success-text);
95
+ --color-sk-success-5: oklch(from var(--sk-success-base) 0.95 c h);
96
+ --color-sk-success-10: oklch(from var(--sk-success-base) 0.90 c h);
97
+ --color-sk-success-20: oklch(from var(--sk-success-base) 0.85 c h);
98
+ --color-sk-success-30: oklch(from var(--sk-success-base) 0.80 c h);
99
+ --color-sk-success-40: oklch(from var(--sk-success-base) 0.75 c h);
100
+ --color-sk-success-50: var(--sk-success-base);
101
+ --color-sk-success-60: oklch(from var(--sk-success-base) calc(l * 0.85) c h);
102
+ --color-sk-success-70: oklch(from var(--sk-success-base) calc(l * 0.70) c h);
103
+ --color-sk-success-80: oklch(from var(--sk-success-base) calc(l * 0.55) c h);
104
+ --color-sk-success-90: oklch(from var(--sk-success-base) calc(l * 0.40) c h);
105
+ --color-sk-success-95: oklch(from var(--sk-success-base) calc(l * 0.25) c h);
106
+
107
+ /* Warning */
108
+ --color-sk-warning: var(--sk-warning-base);
109
+ --color-sk-warning-text: var(--sk-warning-text);
110
+ --color-sk-warning-5: oklch(from var(--sk-warning-base) 0.95 c h);
111
+ --color-sk-warning-10: oklch(from var(--sk-warning-base) 0.90 c h);
112
+ --color-sk-warning-20: oklch(from var(--sk-warning-base) 0.85 c h);
113
+ --color-sk-warning-30: oklch(from var(--sk-warning-base) 0.80 c h);
114
+ --color-sk-warning-40: oklch(from var(--sk-warning-base) 0.75 c h);
115
+ --color-sk-warning-50: var(--sk-warning-base);
116
+ --color-sk-warning-60: oklch(from var(--sk-warning-base) calc(l * 0.85) c h);
117
+ --color-sk-warning-70: oklch(from var(--sk-warning-base) calc(l * 0.70) c h);
118
+ --color-sk-warning-80: oklch(from var(--sk-warning-base) calc(l * 0.55) c h);
119
+ --color-sk-warning-90: oklch(from var(--sk-warning-base) calc(l * 0.40) c h);
120
+ --color-sk-warning-95: oklch(from var(--sk-warning-base) calc(l * 0.25) c h);
121
+
122
+ /* Danger */
123
+ --color-sk-danger: var(--sk-danger-base);
124
+ --color-sk-danger-text: var(--sk-danger-text);
125
+ --color-sk-danger-5: oklch(from var(--sk-danger-base) 0.95 c h);
126
+ --color-sk-danger-10: oklch(from var(--sk-danger-base) 0.90 c h);
127
+ --color-sk-danger-20: oklch(from var(--sk-danger-base) 0.85 c h);
128
+ --color-sk-danger-30: oklch(from var(--sk-danger-base) 0.80 c h);
129
+ --color-sk-danger-40: oklch(from var(--sk-danger-base) 0.75 c h);
130
+ --color-sk-danger-50: var(--sk-danger-base);
131
+ --color-sk-danger-60: oklch(from var(--sk-danger-base) calc(l * 0.85) c h);
132
+ --color-sk-danger-70: oklch(from var(--sk-danger-base) calc(l * 0.70) c h);
133
+ --color-sk-danger-80: oklch(from var(--sk-danger-base) calc(l * 0.55) c h);
134
+ --color-sk-danger-90: oklch(from var(--sk-danger-base) calc(l * 0.40) c h);
135
+ --color-sk-danger-95: oklch(from var(--sk-danger-base) calc(l * 0.25) c h);
136
+
137
+ /* Color Palette - Gray */
138
+ --color-sk-gray-5: var(--sk-color-gray-05);
139
+ --color-sk-gray-10: var(--sk-color-gray-10);
140
+ --color-sk-gray-20: var(--sk-color-gray-20);
141
+ --color-sk-gray-30: var(--sk-color-gray-30);
142
+ --color-sk-gray-40: var(--sk-color-gray-40);
143
+ --color-sk-gray-50: var(--sk-color-gray-50);
144
+ --color-sk-gray-60: var(--sk-color-gray-60);
145
+ --color-sk-gray-70: var(--sk-color-gray-70);
146
+ --color-sk-gray-80: var(--sk-color-gray-80);
147
+ --color-sk-gray-90: var(--sk-color-gray-90);
148
+ --color-sk-gray-95: var(--sk-color-gray-95);
149
+
150
+ /* Color Palette - Blue */
151
+ --color-sk-blue-5: var(--sk-color-blue-05);
152
+ --color-sk-blue-10: var(--sk-color-blue-10);
153
+ --color-sk-blue-20: var(--sk-color-blue-20);
154
+ --color-sk-blue-30: var(--sk-color-blue-30);
155
+ --color-sk-blue-40: var(--sk-color-blue-40);
156
+ --color-sk-blue-50: var(--sk-color-blue-50);
157
+ --color-sk-blue-60: var(--sk-color-blue-60);
158
+ --color-sk-blue-70: var(--sk-color-blue-70);
159
+ --color-sk-blue-80: var(--sk-color-blue-80);
160
+ --color-sk-blue-90: var(--sk-color-blue-90);
161
+ --color-sk-blue-95: var(--sk-color-blue-95);
162
+
163
+ /* Color Palette - Red */
164
+ --color-sk-red-5: var(--sk-color-red-05);
165
+ --color-sk-red-10: var(--sk-color-red-10);
166
+ --color-sk-red-20: var(--sk-color-red-20);
167
+ --color-sk-red-30: var(--sk-color-red-30);
168
+ --color-sk-red-40: var(--sk-color-red-40);
169
+ --color-sk-red-50: var(--sk-color-red-50);
170
+ --color-sk-red-60: var(--sk-color-red-60);
171
+ --color-sk-red-70: var(--sk-color-red-70);
172
+ --color-sk-red-80: var(--sk-color-red-80);
173
+ --color-sk-red-90: var(--sk-color-red-90);
174
+ --color-sk-red-95: var(--sk-color-red-95);
175
+
176
+ /* Color Palette - Orange */
177
+ --color-sk-orange-5: var(--sk-color-orange-05);
178
+ --color-sk-orange-10: var(--sk-color-orange-10);
179
+ --color-sk-orange-20: var(--sk-color-orange-20);
180
+ --color-sk-orange-30: var(--sk-color-orange-30);
181
+ --color-sk-orange-40: var(--sk-color-orange-40);
182
+ --color-sk-orange-50: var(--sk-color-orange-50);
183
+ --color-sk-orange-60: var(--sk-color-orange-60);
184
+ --color-sk-orange-70: var(--sk-color-orange-70);
185
+ --color-sk-orange-80: var(--sk-color-orange-80);
186
+ --color-sk-orange-90: var(--sk-color-orange-90);
187
+ --color-sk-orange-95: var(--sk-color-orange-95);
188
+
189
+ /* Color Palette - Yellow */
190
+ --color-sk-yellow-5: var(--sk-color-yellow-05);
191
+ --color-sk-yellow-10: var(--sk-color-yellow-10);
192
+ --color-sk-yellow-20: var(--sk-color-yellow-20);
193
+ --color-sk-yellow-30: var(--sk-color-yellow-30);
194
+ --color-sk-yellow-40: var(--sk-color-yellow-40);
195
+ --color-sk-yellow-50: var(--sk-color-yellow-50);
196
+ --color-sk-yellow-60: var(--sk-color-yellow-60);
197
+ --color-sk-yellow-70: var(--sk-color-yellow-70);
198
+ --color-sk-yellow-80: var(--sk-color-yellow-80);
199
+ --color-sk-yellow-90: var(--sk-color-yellow-90);
200
+ --color-sk-yellow-95: var(--sk-color-yellow-95);
201
+
202
+ /* Color Palette - Green */
203
+ --color-sk-green-5: var(--sk-color-green-05);
204
+ --color-sk-green-10: var(--sk-color-green-10);
205
+ --color-sk-green-20: var(--sk-color-green-20);
206
+ --color-sk-green-30: var(--sk-color-green-30);
207
+ --color-sk-green-40: var(--sk-color-green-40);
208
+ --color-sk-green-50: var(--sk-color-green-50);
209
+ --color-sk-green-60: var(--sk-color-green-60);
210
+ --color-sk-green-70: var(--sk-color-green-70);
211
+ --color-sk-green-80: var(--sk-color-green-80);
212
+ --color-sk-green-90: var(--sk-color-green-90);
213
+ --color-sk-green-95: var(--sk-color-green-95);
214
+
215
+ /* Color Palette - Mint */
216
+ --color-sk-mint-5: var(--sk-color-mint-05);
217
+ --color-sk-mint-10: var(--sk-color-mint-10);
218
+ --color-sk-mint-20: var(--sk-color-mint-20);
219
+ --color-sk-mint-30: var(--sk-color-mint-30);
220
+ --color-sk-mint-40: var(--sk-color-mint-40);
221
+ --color-sk-mint-50: var(--sk-color-mint-50);
222
+ --color-sk-mint-60: var(--sk-color-mint-60);
223
+ --color-sk-mint-70: var(--sk-color-mint-70);
224
+ --color-sk-mint-80: var(--sk-color-mint-80);
225
+ --color-sk-mint-90: var(--sk-color-mint-90);
226
+ --color-sk-mint-95: var(--sk-color-mint-95);
227
+
228
+ /* Color Palette - Cyan */
229
+ --color-sk-cyan-5: var(--sk-color-cyan-05);
230
+ --color-sk-cyan-10: var(--sk-color-cyan-10);
231
+ --color-sk-cyan-20: var(--sk-color-cyan-20);
232
+ --color-sk-cyan-30: var(--sk-color-cyan-30);
233
+ --color-sk-cyan-40: var(--sk-color-cyan-40);
234
+ --color-sk-cyan-50: var(--sk-color-cyan-50);
235
+ --color-sk-cyan-60: var(--sk-color-cyan-60);
236
+ --color-sk-cyan-70: var(--sk-color-cyan-70);
237
+ --color-sk-cyan-80: var(--sk-color-cyan-80);
238
+ --color-sk-cyan-90: var(--sk-color-cyan-90);
239
+ --color-sk-cyan-95: var(--sk-color-cyan-95);
240
+
241
+ /* Color Palette - Purple */
242
+ --color-sk-purple-5: var(--sk-color-purple-05);
243
+ --color-sk-purple-10: var(--sk-color-purple-10);
244
+ --color-sk-purple-20: var(--sk-color-purple-20);
245
+ --color-sk-purple-30: var(--sk-color-purple-30);
246
+ --color-sk-purple-40: var(--sk-color-purple-40);
247
+ --color-sk-purple-50: var(--sk-color-purple-50);
248
+ --color-sk-purple-60: var(--sk-color-purple-60);
249
+ --color-sk-purple-70: var(--sk-color-purple-70);
250
+ --color-sk-purple-80: var(--sk-color-purple-80);
251
+ --color-sk-purple-90: var(--sk-color-purple-90);
252
+ --color-sk-purple-95: var(--sk-color-purple-95);
253
+
254
+ /* Color Palette - Pink */
255
+ --color-sk-pink-5: var(--sk-color-pink-05);
256
+ --color-sk-pink-10: var(--sk-color-pink-10);
257
+ --color-sk-pink-20: var(--sk-color-pink-20);
258
+ --color-sk-pink-30: var(--sk-color-pink-30);
259
+ --color-sk-pink-40: var(--sk-color-pink-40);
260
+ --color-sk-pink-50: var(--sk-color-pink-50);
261
+ --color-sk-pink-60: var(--sk-color-pink-60);
262
+ --color-sk-pink-70: var(--sk-color-pink-70);
263
+ --color-sk-pink-80: var(--sk-color-pink-80);
264
+ --color-sk-pink-90: var(--sk-color-pink-90);
265
+ --color-sk-pink-95: var(--sk-color-pink-95);
266
+ }
267
+
268
+ //----------------------------------------------------------------------------------------------------------------------
@@ -0,0 +1,9 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Utilities
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+ // Utility classes for rapid development and common styling patterns
5
+ //----------------------------------------------------------------------------------------------------------------------
6
+
7
+ @forward 'typography';
8
+
9
+ //----------------------------------------------------------------------------------------------------------------------
@@ -0,0 +1,121 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Typography Utilities
3
+ // Provides styling for inline code, keyboard shortcuts, and other text elements
4
+ //----------------------------------------------------------------------------------------------------------------------
5
+
6
+ @use '../theme/variables' as *;
7
+
8
+ //----------------------------------------------------------------------------------------------------------------------
9
+ // Code and Kbd Base Styles (NO beveled corners - using rounded corners instead)
10
+ //----------------------------------------------------------------------------------------------------------------------
11
+
12
+ code,
13
+ kbd
14
+ {
15
+ font-family: var(--sk-font-family-mono);
16
+ padding: 0.125rem 0.375rem;
17
+ border-radius: 0.25rem;
18
+ font-size: 0.875em;
19
+ line-height: 1;
20
+
21
+ // Default neutral styling
22
+ color: white;
23
+ background: color-mix(in oklch, var(--sk-neutral-base), black 50%);
24
+ }
25
+
26
+ kbd
27
+ {
28
+ // Slightly different style for keyboard keys
29
+ font-weight: 600;
30
+ padding: 0.25rem 0.5rem;
31
+ border: 1px dashed color-mix(in oklch, var(--sk-neutral-base), black 50%);
32
+ }
33
+
34
+ //----------------------------------------------------------------------------------------------------------------------
35
+ // Code/Kbd Color Kinds
36
+ //----------------------------------------------------------------------------------------------------------------------
37
+
38
+ @each $kind in $kinds
39
+ {
40
+ code.sk-#{ "" + $kind },
41
+ kbd.sk-#{ "" + $kind }
42
+ {
43
+ color: var(--sk-#{ $kind }-base);
44
+ background: color-mix(in oklch, var(--sk-#{ $kind }-base), black 70%);
45
+ }
46
+
47
+ kbd.sk-#{ "" + $kind }
48
+ {
49
+ border-color: color-mix(in oklch, var(--sk-#{ $kind }-base), black 50%);
50
+ }
51
+ }
52
+
53
+ // Special case for neutral - use white text and lighter background
54
+ code.sk-neutral,
55
+ kbd.sk-neutral
56
+ {
57
+ color: white;
58
+ background: color-mix(in oklch, var(--sk-neutral-base), black 50%);
59
+ }
60
+
61
+ //----------------------------------------------------------------------------------------------------------------------
62
+ // Text Color Utilities
63
+ //----------------------------------------------------------------------------------------------------------------------
64
+
65
+ @each $kind in $kinds
66
+ {
67
+ .text-#{ "" + $kind }
68
+ {
69
+ color: var(--sk-#{ $kind }-base) !important;
70
+ }
71
+
72
+ .text-#{ "" + $kind }-subtle
73
+ {
74
+ color: color-mix(in oklch, var(--sk-#{ $kind }-base), transparent 50%) !important;
75
+ }
76
+ }
77
+
78
+ //----------------------------------------------------------------------------------------------------------------------
79
+ // Header Utilities
80
+ //----------------------------------------------------------------------------------------------------------------------
81
+
82
+ .h1,
83
+ .h2,
84
+ .h3,
85
+ .h4,
86
+ .h5,
87
+ .h6
88
+ {
89
+ margin-top: 0;
90
+ margin-bottom: 0.5rem;
91
+ font-weight: 600;
92
+ line-height: 1.2;
93
+ }
94
+
95
+ .h1 { font-size: 2.5rem; }
96
+ .h2 { font-size: 2rem; }
97
+ .h3 { font-size: 1.75rem; }
98
+ .h4 { font-size: 1.5rem; }
99
+ .h5 { font-size: 1.25rem; }
100
+ .h6 { font-size: 1rem; }
101
+
102
+ //----------------------------------------------------------------------------------------------------------------------
103
+ // Header Underline Utilities
104
+ //----------------------------------------------------------------------------------------------------------------------
105
+
106
+ @each $kind in $kinds
107
+ {
108
+ .underline-#{ "" + $kind }
109
+ {
110
+ border-bottom: 2px solid var(--sk-#{ $kind }-base);
111
+ padding-bottom: 0.5rem;
112
+ }
113
+
114
+ .underline-#{ "" + $kind }-subtle
115
+ {
116
+ border-bottom: 2px solid color-mix(in oklch, var(--sk-#{ $kind }-base), transparent 50%);
117
+ padding-bottom: 0.5rem;
118
+ }
119
+ }
120
+
121
+ //----------------------------------------------------------------------------------------------------------------------
package/src/types.ts ADDED
@@ -0,0 +1,50 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Common Types
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ // Common component sizes
6
+ export type ComponentSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
7
+
8
+ // Semantic kinds (themeable, colors with meaning)
9
+ export type SemanticKind = 'neutral' | 'primary' | 'accent' | 'danger' | 'info' | 'success' | 'warning';
10
+
11
+ // Color kinds (non-themeable, direct palette access)
12
+ export type ColorKind = 'boulder' | 'neon-blue' | 'light-blue' | 'neon-orange' | 'neon-purple' | 'neon-green'
13
+ | 'neon-mint' | 'neon-pink' | 'yellow' | 'red';
14
+
15
+ // All component kinds (semantic + color)
16
+ export type ComponentKind = SemanticKind | ColorKind;
17
+
18
+ // Common button/interactive variants
19
+ export type ComponentVariant = 'solid' | 'outline' | 'subtle' | 'ghost' | 'link';
20
+
21
+ //----------------------------------------------------------------------------------------------------------------------
22
+
23
+ /**
24
+ * Custom color props interface for components.
25
+ * Allows overriding component colors with any valid CSS color value.
26
+ */
27
+ export interface ComponentCustomColors
28
+ {
29
+ /**
30
+ * Base color for the component.
31
+ * Accepts any valid CSS color value including:
32
+ * - Hex colors: "#8B5CF6"
33
+ * - OKLCH colors: "oklch(0.7 0.25 300)"
34
+ * - RGB/HSL: "rgb(139, 92, 246)", "hsl(258, 90%, 66%)"
35
+ * - CSS variables: "var(--color-neon-green-200)"
36
+ * - Named colors: "rebeccapurple"
37
+ *
38
+ * When provided, this overrides the color from the `kind` prop.
39
+ */
40
+ baseColor ?: string;
41
+
42
+ /**
43
+ * Text/foreground color for the component.
44
+ * If not provided, automatically calculated for optimal contrast with the base color.
45
+ * Accepts the same CSS color formats as baseColor.
46
+ */
47
+ textColor ?: string;
48
+ }
49
+
50
+ //----------------------------------------------------------------------------------------------------------------------