@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,329 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Modal Component Styles
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ @use '../theme/variables' as *;
6
+ @use '../mixins' as *;
7
+
8
+ //----------------------------------------------------------------------------------------------------------------------
9
+ // Modal Design Tokens
10
+ //----------------------------------------------------------------------------------------------------------------------
11
+
12
+ .sk-modal-content
13
+ {
14
+ //------------------------------------------------------------------------------------------------------------------
15
+ // Dimension Tokens
16
+ //------------------------------------------------------------------------------------------------------------------
17
+
18
+ /// Internal padding for modal sections
19
+ --sk-modal-padding: 1rem;
20
+
21
+ /// Header/footer reduced padding (less vertical padding, matches card)
22
+ --sk-modal-header-padding-vertical: 0.5rem;
23
+ --sk-modal-footer-padding-vertical: 0.5rem;
24
+
25
+ /// Gap between header elements
26
+ --sk-modal-header-gap: 0.75rem;
27
+
28
+ /// Gap between footer buttons
29
+ --sk-modal-footer-gap: 0.5rem;
30
+
31
+ /// Cut size for beveled corner
32
+ --sk-modal-cut-size: 1rem;
33
+
34
+ //------------------------------------------------------------------------------------------------------------------
35
+ // Glow Effect Tokens
36
+ //------------------------------------------------------------------------------------------------------------------
37
+
38
+ /// Glow effect blur radius
39
+ --sk-modal-glow-size: 12px;
40
+
41
+ /// Glow effect opacity
42
+ --sk-modal-glow-opacity: 0.3;
43
+
44
+ //------------------------------------------------------------------------------------------------------------------
45
+ // Border Tokens
46
+ //------------------------------------------------------------------------------------------------------------------
47
+
48
+ /// Border width
49
+ --sk-modal-border-width: var(--sk-border-width-thin);
50
+
51
+ /// Dynamic border color (set by kinds)
52
+ --sk-modal-border-color: currentColor;
53
+
54
+ //------------------------------------------------------------------------------------------------------------------
55
+ // Generic Color Tokens
56
+ //------------------------------------------------------------------------------------------------------------------
57
+ // Uses the same color system as panels for consistency
58
+
59
+ /// Base color - the bright semantic color used for borders and accents
60
+ --sk-modal-color-base: var(--sk-neutral-base);
61
+
62
+ /// Foreground/text color
63
+ --sk-modal-fg: var(--sk-neutral-text);
64
+
65
+ /// Background color - darkened version of base color (same formula as panels)
66
+ --sk-modal-bg: color-mix(
67
+ in oklch,
68
+ color-mix(in oklch, var(--sk-modal-color-base) 75%, transparent 25%),
69
+ #000 46.25%
70
+ );
71
+
72
+ /// Base border color - uses the bright base color directly
73
+ --sk-modal-border-base: var(--sk-modal-color-base);
74
+
75
+ /// Inner glow effect
76
+ --sk-modal-glow: inset 0 0 var(--sk-modal-glow-size)
77
+ oklch(from var(--sk-modal-color-base) l c h / var(--sk-modal-glow-opacity));
78
+ }
79
+
80
+ //----------------------------------------------------------------------------------------------------------------------
81
+ // Kind Mixin
82
+ //----------------------------------------------------------------------------------------------------------------------
83
+
84
+ @mixin modal-kind($kind)
85
+ {
86
+ &.sk-#{ "" + $kind }
87
+ {
88
+ // Override base color tokens for this kind
89
+ --sk-modal-color-base: var(--sk-#{ $kind }-base);
90
+ --sk-modal-fg: var(--sk-#{ $kind }-text);
91
+
92
+ // Set dynamic border color
93
+ --sk-modal-border-color: var(--sk-modal-border-base);
94
+
95
+ // Use calculated background and foreground
96
+ background-color: var(--sk-modal-bg);
97
+ color: var(--sk-modal-fg);
98
+
99
+ // Apply inner glow
100
+ box-shadow: var(--sk-modal-glow), var(--sk-shadow-2xl);
101
+ }
102
+ }
103
+
104
+ //----------------------------------------------------------------------------------------------------------------------
105
+ // Overlay Styles
106
+ //----------------------------------------------------------------------------------------------------------------------
107
+
108
+ .sk-modal-overlay
109
+ {
110
+ position: fixed;
111
+ inset: 0;
112
+ background: oklch(0 0 0 / 0.75);
113
+ z-index: 50;
114
+ backdrop-filter: blur(2px);
115
+
116
+ // Overlay animation
117
+ &[data-state='open']
118
+ {
119
+ animation: sk-modal-overlay-show var(--sk-transition-duration-base) ease-out;
120
+ }
121
+
122
+ &[data-state='closed']
123
+ {
124
+ animation: sk-modal-overlay-hide var(--sk-transition-duration-base) ease-in;
125
+ }
126
+ }
127
+
128
+ //----------------------------------------------------------------------------------------------------------------------
129
+ // Modal Content (main container)
130
+ //----------------------------------------------------------------------------------------------------------------------
131
+
132
+ .sk-modal-content
133
+ {
134
+ // Apply cut-border mixin for beveled corner
135
+ @include cut-border(
136
+ $cut: var(--sk-modal-cut-size),
137
+ $border-width: var(--sk-modal-border-width),
138
+ $border-color: var(--sk-modal-border-color),
139
+ $corners: (bottom-right)
140
+ );
141
+
142
+ position: fixed;
143
+ top: 50%;
144
+ left: 50%;
145
+ transform: translate(-50%, -50%);
146
+ z-index: 51;
147
+
148
+ display: flex;
149
+ flex-direction: column;
150
+ max-height: 85vh;
151
+ max-width: 90vw;
152
+
153
+ // Default background/color (will be overridden by kinds)
154
+ background-color: var(--sk-modal-bg);
155
+ color: var(--sk-modal-fg);
156
+ box-shadow: var(--sk-modal-glow), var(--sk-shadow-2xl);
157
+
158
+ // Content animation
159
+ &[data-state='open']
160
+ {
161
+ animation: sk-modal-content-show var(--sk-transition-duration-base) ease-out;
162
+ }
163
+
164
+ &[data-state='closed']
165
+ {
166
+ animation: sk-modal-content-hide var(--sk-transition-duration-base) ease-in;
167
+ }
168
+
169
+ //------------------------------------------------------------------------------------------------------------------
170
+ // Size variants
171
+ //------------------------------------------------------------------------------------------------------------------
172
+
173
+ &.sk-sm
174
+ {
175
+ width: 24rem;
176
+ --sk-modal-cut-size: 0.75rem;
177
+ }
178
+
179
+ &.sk-md
180
+ {
181
+ width: 32rem;
182
+ --sk-modal-cut-size: 1rem;
183
+ }
184
+
185
+ &.sk-lg
186
+ {
187
+ width: 48rem;
188
+ --sk-modal-cut-size: 1.25rem;
189
+ }
190
+
191
+ &.sk-xl
192
+ {
193
+ width: 64rem;
194
+ --sk-modal-cut-size: 1.5rem;
195
+ }
196
+
197
+ //------------------------------------------------------------------------------------------------------------------
198
+ // Kind variants
199
+ //------------------------------------------------------------------------------------------------------------------
200
+
201
+ @each $kind in $kinds
202
+ {
203
+ @include modal-kind($kind);
204
+ }
205
+ }
206
+
207
+ //----------------------------------------------------------------------------------------------------------------------
208
+ // Modal Header (matches card header styling)
209
+ //----------------------------------------------------------------------------------------------------------------------
210
+
211
+ .sk-modal-header
212
+ {
213
+ display: flex;
214
+ align-items: center;
215
+ justify-content: space-between;
216
+ gap: var(--sk-modal-header-gap);
217
+ padding: var(--sk-modal-header-padding-vertical) var(--sk-modal-padding);
218
+ margin: 2px;
219
+ background-color: oklch(from currentColor l c h / 0.2);
220
+ }
221
+
222
+ .sk-modal-title
223
+ {
224
+ flex: 1;
225
+ margin: 0;
226
+ font-size: 1.25rem;
227
+ font-weight: 600;
228
+ }
229
+
230
+ .sk-modal-close
231
+ {
232
+ flex-shrink: 0;
233
+ }
234
+
235
+ //----------------------------------------------------------------------------------------------------------------------
236
+ // Modal Body
237
+ //----------------------------------------------------------------------------------------------------------------------
238
+
239
+ .sk-modal-body
240
+ {
241
+ flex: 1;
242
+ overflow-y: auto;
243
+ padding: var(--sk-modal-padding);
244
+ }
245
+
246
+ //----------------------------------------------------------------------------------------------------------------------
247
+ // Modal Footer
248
+ //----------------------------------------------------------------------------------------------------------------------
249
+
250
+ .sk-modal-footer
251
+ {
252
+ display: flex;
253
+ align-items: center;
254
+ justify-content: flex-end;
255
+ gap: var(--sk-modal-footer-gap);
256
+ padding: var(--sk-modal-footer-padding-vertical) var(--sk-modal-padding);
257
+ border-top: var(--sk-modal-border-width) solid oklch(from currentColor l c h / 0.2);
258
+ background-color: oklch(from currentColor l c h / 0.05);
259
+
260
+ // Apply cut-border to match the modal's corner
261
+ @include cut-border(
262
+ $cut: var(--sk-modal-cut-size),
263
+ $border-width: 0,
264
+ $border-color: transparent,
265
+ $corners: (bottom-right)
266
+ );
267
+ }
268
+
269
+ //----------------------------------------------------------------------------------------------------------------------
270
+ // Animations
271
+ //----------------------------------------------------------------------------------------------------------------------
272
+
273
+ @keyframes sk-modal-overlay-show
274
+ {
275
+ from
276
+ {
277
+ opacity: 0;
278
+ }
279
+
280
+ to
281
+ {
282
+ opacity: 1;
283
+ }
284
+ }
285
+
286
+ @keyframes sk-modal-overlay-hide
287
+ {
288
+ from
289
+ {
290
+ opacity: 1;
291
+ }
292
+
293
+ to
294
+ {
295
+ opacity: 0;
296
+ }
297
+ }
298
+
299
+ @keyframes sk-modal-content-show
300
+ {
301
+ from
302
+ {
303
+ opacity: 0;
304
+ transform: translate(-50%, -48%) scale(0.96);
305
+ }
306
+
307
+ to
308
+ {
309
+ opacity: 1;
310
+ transform: translate(-50%, -50%) scale(1);
311
+ }
312
+ }
313
+
314
+ @keyframes sk-modal-content-hide
315
+ {
316
+ from
317
+ {
318
+ opacity: 1;
319
+ transform: translate(-50%, -50%) scale(1);
320
+ }
321
+
322
+ to
323
+ {
324
+ opacity: 0;
325
+ transform: translate(-50%, -48%) scale(0.96);
326
+ }
327
+ }
328
+
329
+ //----------------------------------------------------------------------------------------------------------------------
@@ -0,0 +1,258 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // NavBar Component Styles
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ @use '../theme/variables' as *;
6
+ @use '../mixins' as *;
7
+
8
+ //----------------------------------------------------------------------------------------------------------------------
9
+ // NavBar Design Tokens
10
+ //----------------------------------------------------------------------------------------------------------------------
11
+
12
+ .sk-navbar
13
+ {
14
+ //------------------------------------------------------------------------------------------------------------------
15
+ // Dimension Tokens
16
+ //------------------------------------------------------------------------------------------------------------------
17
+
18
+ /// Internal padding for navbar content
19
+ --sk-navbar-padding-y: 0.75rem;
20
+ --sk-navbar-padding-x: 1rem;
21
+
22
+ /// Navbar height
23
+ --sk-navbar-height: 4rem;
24
+
25
+ /// Border radius calculation factor (references global token for consistency)
26
+ --sk-navbar-radius-factor: var(--sk-border-radius-factor);
27
+
28
+ /// Cut size for beveled corners (height / factor)
29
+ --sk-navbar-cut-size: calc(var(--sk-navbar-height) / var(--sk-navbar-radius-factor));
30
+
31
+ //------------------------------------------------------------------------------------------------------------------
32
+ // Border Tokens
33
+ //------------------------------------------------------------------------------------------------------------------
34
+
35
+ /// Border width (references global foundation token)
36
+ --sk-navbar-border-width: var(--sk-border-width-thin);
37
+
38
+ /// Dynamic border color (set by kinds, uses currentColor as fallback)
39
+ --sk-navbar-border-color: currentColor;
40
+
41
+ //------------------------------------------------------------------------------------------------------------------
42
+ // Glow Effect Tokens
43
+ //------------------------------------------------------------------------------------------------------------------
44
+
45
+ /// Glow effect blur radius
46
+ --sk-navbar-glow-size: 12px;
47
+
48
+ /// Glow effect opacity
49
+ --sk-navbar-glow-opacity: 0.3;
50
+
51
+ //------------------------------------------------------------------------------------------------------------------
52
+ // Generic Color Tokens
53
+ //------------------------------------------------------------------------------------------------------------------
54
+
55
+ /// Base color - the bright semantic color used for borders and as source for backgrounds
56
+ --sk-navbar-color-base: var(--sk-neutral-base);
57
+
58
+ /// Foreground/text color - calculated for optimal contrast against darkened backgrounds
59
+ --sk-navbar-fg: var(--sk-neutral-text);
60
+
61
+ /// Background color - darkened version of base color
62
+ --sk-navbar-bg: color-mix(
63
+ in oklch,
64
+ color-mix(in oklch, var(--sk-navbar-color-base) 75%, transparent 25%),
65
+ #000 46.25%
66
+ );
67
+
68
+ /// Backdrop filter for navbar - applies a blur effect to content behind the navbar
69
+ --sk-navbar-backdrop-filter: blur(7px);
70
+
71
+ /// Base border color - uses the bright base color directly for vibrant edges
72
+ --sk-navbar-border-base: var(--sk-navbar-color-base);
73
+
74
+ /// Inner glow effect - creates ambient lighting inside the navbar
75
+ --sk-navbar-glow: inset 0 0 var(--sk-navbar-glow-size)
76
+ oklch(from var(--sk-navbar-color-base) l c h / var(--sk-navbar-glow-opacity));
77
+ }
78
+
79
+ //----------------------------------------------------------------------------------------------------------------------
80
+ // Kind Mixin
81
+ //----------------------------------------------------------------------------------------------------------------------
82
+
83
+ @mixin navbar-kind($kind)
84
+ {
85
+ &.sk-#{ "" + $kind }
86
+ {
87
+ // Override base color tokens for this kind
88
+ --sk-navbar-color-base: var(--sk-#{ $kind }-base);
89
+ --sk-navbar-fg: var(--sk-#{ $kind }-text);
90
+
91
+ // Set generic kind color for list markers and other cross-component features
92
+ --sk-kind-color: var(--sk-#{ $kind }-base);
93
+
94
+ // Set dynamic border color
95
+ --sk-navbar-border-color: var(--sk-navbar-border-base);
96
+
97
+ // Use calculated background and foreground
98
+ background-color: var(--sk-navbar-bg);
99
+ color: var(--sk-navbar-fg);
100
+
101
+ // Apply inner glow
102
+ box-shadow: var(--sk-navbar-glow);
103
+ }
104
+ }
105
+
106
+ //----------------------------------------------------------------------------------------------------------------------
107
+ // Base NavBar Styles
108
+ //----------------------------------------------------------------------------------------------------------------------
109
+
110
+ .sk-navbar
111
+ {
112
+ // Base structure
113
+ display: block;
114
+ position: relative;
115
+ box-sizing: border-box;
116
+ width: 100%;
117
+
118
+ backdrop-filter: var(--sk-navbar-backdrop-filter);
119
+
120
+ // Typography
121
+ font-family: var(--sk-font-family-base);
122
+ line-height: 1.5;
123
+
124
+ // Override list marker color to match component kind
125
+ // Uses generic --sk-kind-color set by kind mixins
126
+ ul li::marker
127
+ {
128
+ color: var(--sk-kind-color, var(--sk-navbar-color-base));
129
+ }
130
+
131
+ // Apply bottom border with cut corners
132
+ @include cut-border(
133
+ $cut: var(--sk-navbar-cut-size),
134
+ $border-width: var(--sk-navbar-border-width),
135
+ $border-color: var(--sk-navbar-border-color),
136
+ $corners: (bottom-left bottom-right)
137
+ );
138
+
139
+ //------------------------------------------------------------------------------------------------------------------
140
+ // Sticky positioning
141
+ //------------------------------------------------------------------------------------------------------------------
142
+
143
+ &.sk-sticky
144
+ {
145
+ position: sticky;
146
+ top: 0;
147
+ z-index: 100;
148
+ }
149
+
150
+ //------------------------------------------------------------------------------------------------------------------
151
+ // Content container
152
+ //------------------------------------------------------------------------------------------------------------------
153
+
154
+ .sk-navbar-content
155
+ {
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: space-between;
159
+ gap: 2rem;
160
+ padding: var(--sk-navbar-padding-y) var(--sk-navbar-padding-x);
161
+ max-width: 1920px;
162
+ margin: 0 auto;
163
+ }
164
+
165
+ //------------------------------------------------------------------------------------------------------------------
166
+ // Brand section
167
+ //------------------------------------------------------------------------------------------------------------------
168
+
169
+ .sk-navbar-brand
170
+ {
171
+ display: flex;
172
+ align-items: center;
173
+ flex-shrink: 0;
174
+
175
+ // Brand link styling
176
+ a
177
+ {
178
+ text-decoration: none;
179
+ color: inherit;
180
+
181
+ &:hover h1
182
+ {
183
+ color: var(--sk-primary-base);
184
+ }
185
+ }
186
+
187
+ h1
188
+ {
189
+ margin: 0;
190
+ font-size: 1.5rem;
191
+ font-weight: 600;
192
+ color: var(--sk-primary-base);
193
+ transition: color var(--sk-transition-fast);
194
+ }
195
+ }
196
+
197
+ //------------------------------------------------------------------------------------------------------------------
198
+ // Nav section (center content)
199
+ //------------------------------------------------------------------------------------------------------------------
200
+
201
+ .sk-navbar-nav
202
+ {
203
+ display: flex;
204
+ align-items: center;
205
+ flex: 1;
206
+ justify-content: center;
207
+ gap: 2rem;
208
+
209
+ // Nav link styling
210
+ a
211
+ {
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 0.5rem;
215
+ color: color-mix(in oklch, var(--sk-navbar-fg), white 60%);
216
+ text-decoration: none;
217
+ font-weight: 500;
218
+ padding: 0.5rem;
219
+ border-bottom: 2px solid transparent;
220
+ transition: all var(--sk-transition-fast);
221
+
222
+ &:hover
223
+ {
224
+ color: color-mix(in oklch, var(--sk-navbar-color-base), white 20%);
225
+ border-bottom-color: color-mix(in oklch, var(--sk-navbar-color-base), white 20%);
226
+ }
227
+
228
+ &.router-link-active
229
+ {
230
+ border-bottom-color: var(--sk-navbar-color-base);
231
+ }
232
+ }
233
+ }
234
+
235
+ //------------------------------------------------------------------------------------------------------------------
236
+ // Actions section (right side)
237
+ //------------------------------------------------------------------------------------------------------------------
238
+
239
+ .sk-navbar-actions
240
+ {
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: flex-end;
244
+ gap: 1rem;
245
+ flex-shrink: 0;
246
+ }
247
+
248
+ //------------------------------------------------------------------------------------------------------------------
249
+ // Kind variants
250
+ //------------------------------------------------------------------------------------------------------------------
251
+
252
+ @each $kind in $kinds
253
+ {
254
+ @include navbar-kind($kind);
255
+ }
256
+ }
257
+
258
+ //----------------------------------------------------------------------------------------------------------------------