@skewedaspect/sleekspace-ui 0.4.0 → 0.5.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.
@@ -1,3 +1,4 @@
1
+ import { SkThemeName } from '../Theme/types';
1
2
  import { SkPageSidebarPosition } from './types';
2
3
  export interface SkPageComponentProps {
3
4
  /**
@@ -27,6 +28,13 @@ export interface SkPageComponentProps {
27
28
  * Only applies when the sidebar slot is provided.
28
29
  */
29
30
  sidebarWidth?: string;
31
+ /**
32
+ * Optional theme name. When provided, SkPage acts as a theme provider — setting
33
+ * `data-scheme` on the root element and providing theme context for descendant
34
+ * components (including portal components like dropdowns and modals).
35
+ * When omitted, SkPage has no theme behavior.
36
+ */
37
+ theme?: SkThemeName;
30
38
  }
31
39
  declare function __VLS_template(): {
32
40
  attrs: Partial<{}>;
@@ -41,6 +49,7 @@ declare function __VLS_template(): {
41
49
  };
42
50
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
43
51
  declare const __VLS_component: import('vue').DefineComponent<SkPageComponentProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SkPageComponentProps> & Readonly<{}>, {
52
+ theme: SkThemeName;
44
53
  sidebarPosition: SkPageSidebarPosition;
45
54
  fixedHeader: boolean;
46
55
  fixedFooter: boolean;
@@ -1,3 +1,4 @@
1
+ import { SkThemeName } from '../Theme/types';
1
2
  /** Sidebar position */
2
3
  export type SkPageSidebarPosition = 'left' | 'right';
3
4
  /** Page props interface */
@@ -10,4 +11,6 @@ export interface SkPageProps {
10
11
  fixedFooter?: boolean;
11
12
  /** Custom sidebar width */
12
13
  sidebarWidth?: string;
14
+ /** Optional theme name — when provided, SkPage acts as a theme provider */
15
+ theme?: SkThemeName;
13
16
  }
@@ -1,9 +1,24 @@
1
+ /**
2
+ * Registry of available theme names. Augment this interface to register custom themes:
3
+ *
4
+ * ```ts
5
+ * declare module '@skewedaspect/sleekspace-ui' {
6
+ * interface SkThemeNameMap {
7
+ * ocean : true;
8
+ * midnight : true;
9
+ * }
10
+ * }
11
+ * ```
12
+ */
13
+ export interface SkThemeNameMap {
14
+ greyscale: true;
15
+ colorful: true;
16
+ }
1
17
  /**
2
18
  * Available theme names that control the overall color scheme of the application.
3
- * - 'greyscale': A monochromatic theme with neutral grays and subtle accents
4
- * - 'colorful': A vibrant theme with saturated colors and stronger contrasts
19
+ * Derived from {@link SkThemeNameMap} augment that interface to add custom themes.
5
20
  */
6
- export type SkThemeName = 'greyscale' | 'colorful';
21
+ export type SkThemeName = keyof SkThemeNameMap;
7
22
  export interface SkThemeComponentProps {
8
23
  /**
9
24
  * The active theme name that controls the color scheme for all child components.
@@ -158,6 +158,9 @@
158
158
  --sk-opacity-medium: 0.40;
159
159
  --sk-opacity-strong: 0.60;
160
160
  --sk-opacity-opaque: 1;
161
+ /* Semantic opacity aliases */
162
+ --sk-opacity-disabled: 0.5;
163
+ --sk-opacity-loading: 0.6;
161
164
  /* ===================================================================
162
165
  * Color Mixing Percentages
163
166
  * Tokenized mixing amounts for color-mix() function
@@ -351,6 +354,12 @@
351
354
  --sk-transition-easing-ease-in: ease-in;
352
355
  --sk-transition-easing-ease-out: ease-out;
353
356
  --sk-transition-easing-ease-in-out: ease-in-out;
357
+ /* ===================================================================
358
+ * Default Aliases
359
+ * Generic names that resolve to the most common values
360
+ * =================================================================== */
361
+ --sk-transition-duration-base: var(--sk-transition-duration-normal);
362
+ --sk-transition-easing: var(--sk-transition-easing-ease-out);
354
363
  /* ===================================================================
355
364
  * Common Transition Combinations
356
365
  * Convenience tokens for frequently used transitions
@@ -652,6 +661,10 @@
652
661
  *
653
662
  * Background and text colors for surfaces and general use.
654
663
  * These provide a consistent color system independent of component kinds.
664
+ *
665
+ * Defaults are defined on :root as fallbacks. Themes can override any of these
666
+ * via [data-scheme] selectors. The [data-scheme] rule also applies background
667
+ * and text color so that any themed element gets the correct surface treatment.
655
668
  */
656
669
  :root {
657
670
  /* ===================================================================
@@ -677,6 +690,16 @@
677
690
  --sk-border-subtle: var(--sk-color-gray-80); /* Subtle borders/dividers */
678
691
  }
679
692
 
693
+ /**
694
+ * Apply text color to any themed element so descendants inherit the correct
695
+ * color without needing to set it themselves. Background is intentionally NOT
696
+ * set here — page-level containers like SkPage handle their own background
697
+ * via the surface tokens.
698
+ */
699
+ [data-scheme] {
700
+ color: var(--sk-text-primary);
701
+ }
702
+
680
703
  /**
681
704
  * Semantic Tokens - Interactive
682
705
  *
@@ -1215,7 +1238,7 @@
1215
1238
  body {
1216
1239
  margin: 0;
1217
1240
  min-height: 100svh;
1218
- color: var(--sk-neutral-fg);
1241
+ color: var(--sk-text-primary);
1219
1242
  }
1220
1243
  img,
1221
1244
  svg,
@@ -1228,8 +1251,8 @@
1228
1251
  font: inherit;
1229
1252
  }
1230
1253
  :focus-visible {
1231
- outline: var(--sk-focus-outline-width) solid currentColor;
1232
- outline-offset: var(--sk-focus-outline-offset);
1254
+ outline: var(--sk-focus-ring-width) solid currentColor;
1255
+ outline-offset: var(--sk-focus-ring-offset);
1233
1256
  }
1234
1257
  h1,
1235
1258
  h2,
@@ -1390,7 +1413,7 @@
1390
1413
  min-height: var(--sk-scrollbar-thumb-min-size);
1391
1414
  min-width: var(--sk-scrollbar-thumb-min-size);
1392
1415
  /* Smooth transitions for interactive states */
1393
- transition: background-color var(--sk-transition-duration-fast) var(--sk-transition-easing-standard), border-color var(--sk-transition-duration-fast) var(--sk-transition-easing-standard);
1416
+ transition: background-color var(--sk-transition-duration-fast) var(--sk-transition-easing-ease-out), border-color var(--sk-transition-duration-fast) var(--sk-transition-easing-ease-out);
1394
1417
  }
1395
1418
  /* Hover State */
1396
1419
  *::-webkit-scrollbar-thumb:hover {
@@ -2073,8 +2096,8 @@
2073
2096
  --sk-button-disabled-opacity: var(--sk-opacity-disabled);
2074
2097
  --sk-button-loading-opacity: var(--sk-opacity-loading);
2075
2098
  --sk-button-outline-bg: rgba(5, 5, 5, 0.15);
2076
- --sk-button-subtle-opacity: var(--sk-opacity-subtle);
2077
- --sk-button-subtle-opacity-hover: var(--sk-opacity-subtle-hover);
2099
+ --sk-button-subtle-opacity: 0.35;
2100
+ --sk-button-subtle-opacity-hover: 0.65;
2078
2101
  --sk-button-subtle-border-opacity: var(--sk-opacity-subtle-border);
2079
2102
  --sk-button-subtle-border-opacity-hover: var(--sk-opacity-subtle-border-hover);
2080
2103
  --sk-button-glow-size: 8px;
@@ -3028,9 +3051,8 @@
3028
3051
  color: var(--sk-button-color-base);
3029
3052
  }
3030
3053
  .sk-button.sk-subtle.sk-neutral:hover:not(:disabled) {
3031
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3032
3054
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3033
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3055
+ background-color: var(--sk-button-bg-hover);
3034
3056
  }
3035
3057
  .sk-button.sk-subtle.sk-neutral:active:not(:disabled) {
3036
3058
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3047,9 +3069,8 @@
3047
3069
  color: var(--sk-button-color-base);
3048
3070
  }
3049
3071
  .sk-button.sk-subtle.sk-primary:hover:not(:disabled) {
3050
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3051
3072
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3052
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3073
+ background-color: var(--sk-button-bg-hover);
3053
3074
  }
3054
3075
  .sk-button.sk-subtle.sk-primary:active:not(:disabled) {
3055
3076
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3066,9 +3087,8 @@
3066
3087
  color: var(--sk-button-color-base);
3067
3088
  }
3068
3089
  .sk-button.sk-subtle.sk-accent:hover:not(:disabled) {
3069
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3070
3090
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3071
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3091
+ background-color: var(--sk-button-bg-hover);
3072
3092
  }
3073
3093
  .sk-button.sk-subtle.sk-accent:active:not(:disabled) {
3074
3094
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3085,9 +3105,8 @@
3085
3105
  color: var(--sk-button-color-base);
3086
3106
  }
3087
3107
  .sk-button.sk-subtle.sk-info:hover:not(:disabled) {
3088
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3089
3108
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3090
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3109
+ background-color: var(--sk-button-bg-hover);
3091
3110
  }
3092
3111
  .sk-button.sk-subtle.sk-info:active:not(:disabled) {
3093
3112
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3104,9 +3123,8 @@
3104
3123
  color: var(--sk-button-color-base);
3105
3124
  }
3106
3125
  .sk-button.sk-subtle.sk-success:hover:not(:disabled) {
3107
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3108
3126
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3109
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3127
+ background-color: var(--sk-button-bg-hover);
3110
3128
  }
3111
3129
  .sk-button.sk-subtle.sk-success:active:not(:disabled) {
3112
3130
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3123,9 +3141,8 @@
3123
3141
  color: var(--sk-button-color-base);
3124
3142
  }
3125
3143
  .sk-button.sk-subtle.sk-warning:hover:not(:disabled) {
3126
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3127
3144
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3128
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3145
+ background-color: var(--sk-button-bg-hover);
3129
3146
  }
3130
3147
  .sk-button.sk-subtle.sk-warning:active:not(:disabled) {
3131
3148
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3142,9 +3159,8 @@
3142
3159
  color: var(--sk-button-color-base);
3143
3160
  }
3144
3161
  .sk-button.sk-subtle.sk-danger:hover:not(:disabled) {
3145
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3146
3162
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3147
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3163
+ background-color: var(--sk-button-bg-hover);
3148
3164
  }
3149
3165
  .sk-button.sk-subtle.sk-danger:active:not(:disabled) {
3150
3166
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3161,9 +3177,8 @@
3161
3177
  color: var(--sk-button-color-base);
3162
3178
  }
3163
3179
  .sk-button.sk-subtle.sk-boulder:hover:not(:disabled) {
3164
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3165
3180
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3166
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3181
+ background-color: var(--sk-button-bg-hover);
3167
3182
  }
3168
3183
  .sk-button.sk-subtle.sk-boulder:active:not(:disabled) {
3169
3184
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3180,9 +3195,8 @@
3180
3195
  color: var(--sk-button-color-base);
3181
3196
  }
3182
3197
  .sk-button.sk-subtle.sk-neon-blue:hover:not(:disabled) {
3183
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3184
3198
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3185
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3199
+ background-color: var(--sk-button-bg-hover);
3186
3200
  }
3187
3201
  .sk-button.sk-subtle.sk-neon-blue:active:not(:disabled) {
3188
3202
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3199,9 +3213,8 @@
3199
3213
  color: var(--sk-button-color-base);
3200
3214
  }
3201
3215
  .sk-button.sk-subtle.sk-light-blue:hover:not(:disabled) {
3202
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3203
3216
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3204
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3217
+ background-color: var(--sk-button-bg-hover);
3205
3218
  }
3206
3219
  .sk-button.sk-subtle.sk-light-blue:active:not(:disabled) {
3207
3220
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3218,9 +3231,8 @@
3218
3231
  color: var(--sk-button-color-base);
3219
3232
  }
3220
3233
  .sk-button.sk-subtle.sk-neon-orange:hover:not(:disabled) {
3221
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3222
3234
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3223
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3235
+ background-color: var(--sk-button-bg-hover);
3224
3236
  }
3225
3237
  .sk-button.sk-subtle.sk-neon-orange:active:not(:disabled) {
3226
3238
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3237,9 +3249,8 @@
3237
3249
  color: var(--sk-button-color-base);
3238
3250
  }
3239
3251
  .sk-button.sk-subtle.sk-neon-purple:hover:not(:disabled) {
3240
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3241
3252
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3242
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3253
+ background-color: var(--sk-button-bg-hover);
3243
3254
  }
3244
3255
  .sk-button.sk-subtle.sk-neon-purple:active:not(:disabled) {
3245
3256
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3256,9 +3267,8 @@
3256
3267
  color: var(--sk-button-color-base);
3257
3268
  }
3258
3269
  .sk-button.sk-subtle.sk-neon-green:hover:not(:disabled) {
3259
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3260
3270
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3261
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3271
+ background-color: var(--sk-button-bg-hover);
3262
3272
  }
3263
3273
  .sk-button.sk-subtle.sk-neon-green:active:not(:disabled) {
3264
3274
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3275,9 +3285,8 @@
3275
3285
  color: var(--sk-button-color-base);
3276
3286
  }
3277
3287
  .sk-button.sk-subtle.sk-neon-mint:hover:not(:disabled) {
3278
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3279
3288
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3280
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3289
+ background-color: var(--sk-button-bg-hover);
3281
3290
  }
3282
3291
  .sk-button.sk-subtle.sk-neon-mint:active:not(:disabled) {
3283
3292
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3294,9 +3303,8 @@
3294
3303
  color: var(--sk-button-color-base);
3295
3304
  }
3296
3305
  .sk-button.sk-subtle.sk-neon-pink:hover:not(:disabled) {
3297
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3298
3306
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3299
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3307
+ background-color: var(--sk-button-bg-hover);
3300
3308
  }
3301
3309
  .sk-button.sk-subtle.sk-neon-pink:active:not(:disabled) {
3302
3310
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3313,9 +3321,8 @@
3313
3321
  color: var(--sk-button-color-base);
3314
3322
  }
3315
3323
  .sk-button.sk-subtle.sk-yellow:hover:not(:disabled) {
3316
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3317
3324
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3318
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3325
+ background-color: var(--sk-button-bg-hover);
3319
3326
  }
3320
3327
  .sk-button.sk-subtle.sk-yellow:active:not(:disabled) {
3321
3328
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3332,9 +3339,8 @@
3332
3339
  color: var(--sk-button-color-base);
3333
3340
  }
3334
3341
  .sk-button.sk-subtle.sk-red:hover:not(:disabled) {
3335
- --sk-button-border-color: oklch(from var(--sk-button-border-base) l c h / var(--sk-button-subtle-border-opacity-hover));
3336
3342
  --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
3337
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity-hover));
3343
+ background-color: var(--sk-button-bg-hover);
3338
3344
  }
3339
3345
  .sk-button.sk-subtle.sk-red:active:not(:disabled) {
3340
3346
  --sk-button-border-color: var(--sk-button-border-base);
@@ -3342,6 +3348,9 @@
3342
3348
  background-color: var(--sk-button-bg);
3343
3349
  color: var(--sk-button-text);
3344
3350
  }
3351
+ .sk-button.sk-subtle:disabled, .sk-button.sk-subtle.sk-loading {
3352
+ background-color: oklch(from var(--sk-button-bg) l c h/0.45);
3353
+ }
3345
3354
  .sk-button.sk-subtle.sk-neutral {
3346
3355
  --sk-button-border-color: oklch(
3347
3356
  from color-mix(in oklch, var(--sk-button-border-base), white 50%)
@@ -4058,14 +4067,38 @@
4058
4067
  .sk-button.sk-loading .sk-button-content {
4059
4068
  opacity: var(--sk-button-loading-opacity);
4060
4069
  }
4061
- .sk-button.sk-pressed.sk-outline, .sk-button.sk-pressed.sk-ghost {
4062
- background-color: oklch(from var(--sk-button-bg) l c h/var(--sk-button-subtle-opacity));
4063
- }
4064
4070
  .sk-button.sk-pressed.sk-solid {
4065
- background-color: var(--sk-button-bg-active);
4071
+ --sk-button-border-color: var(--sk-button-border-hover);
4072
+ background-color: var(--sk-button-bg-hover);
4073
+ color: var(--sk-button-text);
4074
+ }
4075
+ .sk-button.sk-pressed.sk-solid:hover:not(:disabled) {
4076
+ --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
4077
+ background-color: color-mix(in oklch, var(--sk-button-bg) 70%, white 30%);
4078
+ }
4079
+ .sk-button.sk-pressed.sk-outline {
4080
+ --sk-button-border-color: var(--sk-button-border-hover);
4081
+ background-color: var(--sk-button-bg);
4082
+ color: var(--sk-button-text);
4066
4083
  }
4067
4084
  .sk-button.sk-pressed.sk-subtle {
4085
+ --sk-button-border-color: transparent;
4068
4086
  background-color: var(--sk-button-bg);
4087
+ color: var(--sk-button-text);
4088
+ }
4089
+ .sk-button.sk-pressed.sk-subtle:hover:not(:disabled) {
4090
+ --sk-button-border-color: transparent;
4091
+ --sk-button-glow-shadow: 0 0 var(--sk-button-glow-size) oklch(from var(--sk-button-border-base) l c h / var(--sk-button-glow-opacity));
4092
+ background-color: var(--sk-button-bg-hover);
4093
+ }
4094
+ .sk-button.sk-pressed.sk-ghost {
4095
+ --sk-button-border-color: color-mix(in oklch, var(--sk-button-border-base) 50%, transparent 50%);
4096
+ border-color: color-mix(in oklch, var(--sk-button-border-base) 50%, transparent 50%);
4097
+ background-color: var(--sk-button-outline-bg);
4098
+ color: var(--sk-button-text);
4099
+ }
4100
+ .sk-button.sk-pressed.sk-link {
4101
+ color: var(--sk-button-text);
4069
4102
  }
4070
4103
  .sk-button .sk-button-loader {
4071
4104
  position: absolute;
@@ -6252,8 +6285,8 @@
6252
6285
  display: flex;
6253
6286
  flex-direction: column;
6254
6287
  min-height: 100vh;
6255
- background: var(--sk-background);
6256
- color: var(--sk-foreground);
6288
+ background: var(--sk-surface-base);
6289
+ color: var(--sk-text-primary);
6257
6290
  }
6258
6291
  .sk-page .sk-page-header {
6259
6292
  flex-shrink: 0;
@@ -15237,7 +15237,7 @@ const _hoisted_5$6 = {
15237
15237
  stroke: "currentColor",
15238
15238
  "stroke-width": "2"
15239
15239
  };
15240
- const _hoisted_6$3 = { class: "sk-alert-content" };
15240
+ const _hoisted_6$4 = { class: "sk-alert-content" };
15241
15241
  const _sfc_main$P = /* @__PURE__ */ defineComponent({
15242
15242
  __name: "SkAlert",
15243
15243
  props: {
@@ -15335,7 +15335,7 @@ const _sfc_main$P = /* @__PURE__ */ defineComponent({
15335
15335
  ])])) : createCommentVNode("", true)
15336
15336
  ])
15337
15337
  ])) : createCommentVNode("", true),
15338
- createElementVNode("div", _hoisted_6$3, [
15338
+ createElementVNode("div", _hoisted_6$4, [
15339
15339
  renderSlot(_ctx.$slots, "default")
15340
15340
  ])
15341
15341
  ], 6);
@@ -17008,17 +17008,38 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
17008
17008
  }
17009
17009
  });
17010
17010
  const SkNumberInput = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__scopeId", "data-v-b589687f"]]);
17011
- const _hoisted_1$e = {
17011
+ const ThemeSymbol = Symbol("SkTheme");
17012
+ function provideTheme(initialTheme = "greyscale") {
17013
+ const currentTheme = ref(initialTheme);
17014
+ const setTheme = (theme) => {
17015
+ currentTheme.value = theme;
17016
+ };
17017
+ const context2 = {
17018
+ currentTheme,
17019
+ setTheme
17020
+ };
17021
+ provide(ThemeSymbol, context2);
17022
+ return context2;
17023
+ }
17024
+ function useTheme() {
17025
+ const context2 = inject(ThemeSymbol);
17026
+ if (!context2) {
17027
+ throw new Error("useTheme must be called within an SkTheme component");
17028
+ }
17029
+ return context2;
17030
+ }
17031
+ const _hoisted_1$e = ["data-scheme"];
17032
+ const _hoisted_2$8 = {
17012
17033
  key: 0,
17013
17034
  class: "sk-page-header"
17014
17035
  };
17015
- const _hoisted_2$8 = { class: "sk-page-main" };
17016
- const _hoisted_3$6 = {
17036
+ const _hoisted_3$6 = { class: "sk-page-main" };
17037
+ const _hoisted_4$5 = {
17017
17038
  key: 0,
17018
17039
  class: "sk-page-sidebar"
17019
17040
  };
17020
- const _hoisted_4$5 = { class: "sk-page-content" };
17021
- const _hoisted_5$3 = {
17041
+ const _hoisted_5$3 = { class: "sk-page-content" };
17042
+ const _hoisted_6$3 = {
17022
17043
  key: 1,
17023
17044
  class: "sk-page-footer"
17024
17045
  };
@@ -17028,7 +17049,8 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
17028
17049
  sidebarPosition: { default: "left" },
17029
17050
  fixedHeader: { type: Boolean, default: false },
17030
17051
  fixedFooter: { type: Boolean, default: false },
17031
- sidebarWidth: { default: void 0 }
17052
+ sidebarWidth: { default: void 0 },
17053
+ theme: { default: void 0 }
17032
17054
  },
17033
17055
  setup(__props) {
17034
17056
  const props = __props;
@@ -17046,30 +17068,40 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
17046
17068
  "--sk-page-sidebar-width": props.sidebarWidth
17047
17069
  };
17048
17070
  });
17071
+ if (props.theme) {
17072
+ const { currentTheme, setTheme } = provideTheme(props.theme);
17073
+ provide("sk-theme", currentTheme);
17074
+ watch(() => props.theme, (newTheme) => {
17075
+ if (newTheme) {
17076
+ setTheme(newTheme);
17077
+ }
17078
+ });
17079
+ }
17049
17080
  return (_ctx, _cache) => {
17050
17081
  return openBlock(), createElementBlock("div", {
17051
17082
  class: normalizeClass(classes.value),
17052
- style: normalizeStyle(customStyles.value)
17083
+ style: normalizeStyle(customStyles.value),
17084
+ "data-scheme": __props.theme
17053
17085
  }, [
17054
- _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_1$e, [
17086
+ _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_2$8, [
17055
17087
  renderSlot(_ctx.$slots, "header", {}, void 0, true)
17056
17088
  ])) : createCommentVNode("", true),
17057
- createElementVNode("div", _hoisted_2$8, [
17058
- _ctx.$slots.sidebar ? (openBlock(), createElementBlock("aside", _hoisted_3$6, [
17089
+ createElementVNode("div", _hoisted_3$6, [
17090
+ _ctx.$slots.sidebar ? (openBlock(), createElementBlock("aside", _hoisted_4$5, [
17059
17091
  renderSlot(_ctx.$slots, "sidebar", {}, void 0, true)
17060
17092
  ])) : createCommentVNode("", true),
17061
- createElementVNode("main", _hoisted_4$5, [
17093
+ createElementVNode("main", _hoisted_5$3, [
17062
17094
  renderSlot(_ctx.$slots, "default", {}, void 0, true)
17063
17095
  ])
17064
17096
  ]),
17065
- _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_5$3, [
17097
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_6$3, [
17066
17098
  renderSlot(_ctx.$slots, "footer", {}, void 0, true)
17067
17099
  ])) : createCommentVNode("", true)
17068
- ], 6);
17100
+ ], 14, _hoisted_1$e);
17069
17101
  };
17070
17102
  }
17071
17103
  });
17072
- const SkPage = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-0d313ffc"]]);
17104
+ const SkPage = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-ad672949"]]);
17073
17105
  const _hoisted_1$d = ["disabled", "aria-label", "aria-current"];
17074
17106
  const _hoisted_2$7 = { key: 0 };
17075
17107
  const _hoisted_3$5 = { key: 1 };
@@ -18877,26 +18909,6 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
18877
18909
  };
18878
18910
  }
18879
18911
  });
18880
- const ThemeSymbol = Symbol("SkTheme");
18881
- function provideTheme(initialTheme = "greyscale") {
18882
- const currentTheme = ref(initialTheme);
18883
- const setTheme = (theme) => {
18884
- currentTheme.value = theme;
18885
- };
18886
- const context2 = {
18887
- currentTheme,
18888
- setTheme
18889
- };
18890
- provide(ThemeSymbol, context2);
18891
- return context2;
18892
- }
18893
- function useTheme() {
18894
- const context2 = inject(ThemeSymbol);
18895
- if (!context2) {
18896
- throw new Error("useTheme must be called within an SkTheme component");
18897
- }
18898
- return context2;
18899
- }
18900
18912
  const _hoisted_1 = ["data-scheme"];
18901
18913
  const _sfc_main = /* @__PURE__ */ defineComponent({
18902
18914
  __name: "SkTheme",