@skewedaspect/sleekspace-ui 0.8.1 → 0.9.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 (191) hide show
  1. package/dist/components/Dropdown/SkDropdown.vue.d.ts +9 -1
  2. package/dist/components/Dropdown/types.d.ts +2 -1
  3. package/dist/components/NavBar/SkNavBar.vue.d.ts +9 -1
  4. package/dist/components/NavBar/context.d.ts +2 -0
  5. package/dist/components/NavBar/types.d.ts +5 -1
  6. package/dist/components/NumberInput/SkNumberInput.vue.d.ts +8 -0
  7. package/dist/components/Page/SkPage.vue.d.ts +9 -0
  8. package/dist/components/ScrollArea/SkScrollArea.vue.d.ts +105 -4
  9. package/dist/composables/useCustomColors.d.ts +18 -56
  10. package/{src → dist}/global.d.ts +6 -2
  11. package/dist/sleekspace-ui.css +4257 -1253
  12. package/dist/sleekspace-ui.es.js +300 -170
  13. package/dist/sleekspace-ui.umd.js +299 -169
  14. package/dist/static/classes.d.ts +18 -0
  15. package/dist/static/components/alert.d.ts +12 -0
  16. package/dist/static/components/avatar.d.ts +9 -0
  17. package/dist/static/components/breadcrumbs.d.ts +6 -0
  18. package/dist/static/components/button.d.ts +13 -0
  19. package/dist/static/components/card.d.ts +5 -0
  20. package/dist/static/components/checkbox.d.ts +10 -0
  21. package/dist/static/components/colorPicker.d.ts +8 -0
  22. package/dist/static/components/divider.d.ts +8 -0
  23. package/dist/static/components/dropdown.d.ts +8 -0
  24. package/dist/static/components/field.d.ts +15 -0
  25. package/dist/static/components/group.d.ts +5 -0
  26. package/dist/static/components/input.d.ts +14 -0
  27. package/dist/static/components/navBar.d.ts +16 -0
  28. package/dist/static/components/numberInput.d.ts +15 -0
  29. package/dist/static/components/page.d.ts +9 -0
  30. package/dist/static/components/pagination.d.ts +5 -0
  31. package/dist/static/components/panel.d.ts +11 -0
  32. package/dist/static/components/progress.d.ts +9 -0
  33. package/dist/static/components/radio.d.ts +11 -0
  34. package/dist/static/components/select.d.ts +10 -0
  35. package/dist/static/components/sidebar.d.ts +9 -0
  36. package/dist/static/components/skeleton.d.ts +11 -0
  37. package/dist/static/components/slider.d.ts +12 -0
  38. package/dist/static/components/spinner.d.ts +12 -0
  39. package/dist/static/components/switchInput.d.ts +10 -0
  40. package/dist/static/components/table.d.ts +12 -0
  41. package/dist/static/components/tag.d.ts +8 -0
  42. package/dist/static/components/tagsInput.d.ts +7 -0
  43. package/dist/static/components/textarea.d.ts +12 -0
  44. package/dist/static/components/toolbar.d.ts +12 -0
  45. package/dist/static/components/tooltip.d.ts +7 -0
  46. package/dist/static/escape.d.ts +2 -0
  47. package/dist/static/index.cjs.js +1 -0
  48. package/dist/static/index.d.ts +68 -0
  49. package/dist/static/index.es.js +732 -0
  50. package/dist/static/render.d.ts +12 -0
  51. package/dist/static/specs.d.ts +2 -0
  52. package/dist/static/types.d.ts +43 -0
  53. package/dist/tokens.css +322 -0
  54. package/dist/types/index.d.ts +36 -0
  55. package/dist/utils/slots.d.ts +6 -0
  56. package/docs/guides/installation.md +8 -2
  57. package/docs/guides/pure-css/_meta.yaml +8 -0
  58. package/docs/guides/pure-css/class-api.md +1070 -0
  59. package/docs/guides/pure-css/custom-elements.md +574 -0
  60. package/docs/guides/pure-css/index.md +86 -0
  61. package/docs/guides/pure-css/limitations.md +152 -0
  62. package/docs/guides/pure-css/static-helpers.md +1203 -0
  63. package/llms-full.txt +3739 -261
  64. package/package.json +19 -5
  65. package/src/components/Alert/SkAlert.vue +4 -2
  66. package/src/components/Breadcrumbs/SkBreadcrumbs.vue +6 -12
  67. package/src/components/Button/SkButton.vue +8 -5
  68. package/src/components/Card/SkCard.vue +13 -5
  69. package/src/components/Checkbox/SkCheckbox.vue +9 -2
  70. package/src/components/ContextMenu/SkContextMenuRadioGroup.vue +4 -1
  71. package/src/components/Dropdown/SkDropdown.vue +20 -3
  72. package/src/components/Dropdown/SkDropdownRadioGroup.vue +4 -1
  73. package/src/components/Dropdown/types.ts +2 -1
  74. package/src/components/Modal/SkModal.vue +11 -4
  75. package/src/components/NavBar/SkNavBar.vue +19 -8
  76. package/src/components/NavBar/context.ts +4 -2
  77. package/src/components/NavBar/types.ts +6 -1
  78. package/src/components/NumberInput/SkNumberInput.vue +10 -1
  79. package/src/components/Page/SkPage.vue +29 -15
  80. package/src/components/Panel/SkPanel.vue +2 -1
  81. package/src/components/Popover/SkPopover.vue +11 -4
  82. package/src/components/Radio/SkRadio.vue +9 -2
  83. package/src/components/ScrollArea/SkScrollArea.vue +78 -5
  84. package/src/components/Switch/SkSwitch.vue +14 -13
  85. package/src/components/Tabs/SkTab.vue +7 -2
  86. package/src/components/TreeView/SkTreeItem.vue +10 -2
  87. package/src/components/TreeView/SkTreeView.vue +7 -2
  88. package/src/composables/useCustomColors.ts +86 -77
  89. package/src/composables/usePortalContext.test.ts +0 -2
  90. package/src/shims.d.ts +10 -0
  91. package/src/static/__tests__/parity.test.ts +717 -0
  92. package/src/static/__tests__/parityHarness.test.ts +98 -0
  93. package/src/static/__tests__/parityHarness.ts +260 -0
  94. package/src/static/classes.test.ts +82 -0
  95. package/src/static/classes.ts +111 -0
  96. package/src/static/components/__tests__/helpers.test.ts +837 -0
  97. package/src/static/components/alert.ts +117 -0
  98. package/src/static/components/avatar.ts +86 -0
  99. package/src/static/components/breadcrumbs.ts +28 -0
  100. package/src/static/components/button.ts +75 -0
  101. package/src/static/components/card.ts +27 -0
  102. package/src/static/components/checkbox.ts +48 -0
  103. package/src/static/components/colorPicker.ts +45 -0
  104. package/src/static/components/divider.ts +39 -0
  105. package/src/static/components/dropdown.ts +36 -0
  106. package/src/static/components/field.ts +86 -0
  107. package/src/static/components/group.ts +27 -0
  108. package/src/static/components/input.ts +55 -0
  109. package/src/static/components/navBar.ts +94 -0
  110. package/src/static/components/numberInput.ts +64 -0
  111. package/src/static/components/page.ts +31 -0
  112. package/src/static/components/pagination.ts +27 -0
  113. package/src/static/components/panel.ts +33 -0
  114. package/src/static/components/progress.ts +31 -0
  115. package/src/static/components/radio.ts +53 -0
  116. package/src/static/components/select.ts +51 -0
  117. package/src/static/components/sidebar.ts +85 -0
  118. package/src/static/components/skeleton.ts +66 -0
  119. package/src/static/components/slider.ts +50 -0
  120. package/src/static/components/spinner.ts +94 -0
  121. package/src/static/components/switchInput.ts +49 -0
  122. package/src/static/components/table.ts +88 -0
  123. package/src/static/components/tag.ts +76 -0
  124. package/src/static/components/tagsInput.ts +35 -0
  125. package/src/static/components/textarea.ts +53 -0
  126. package/src/static/components/toolbar.ts +74 -0
  127. package/src/static/components/tooltip.ts +29 -0
  128. package/src/static/escape.test.ts +53 -0
  129. package/src/static/escape.ts +28 -0
  130. package/src/static/generated/defaults.ts +379 -0
  131. package/src/static/generated/propTypes.ts +426 -0
  132. package/src/static/index.ts +116 -0
  133. package/src/static/render.test.ts +83 -0
  134. package/src/static/render.ts +76 -0
  135. package/src/static/specs.test.ts +58 -0
  136. package/src/static/specs.ts +230 -0
  137. package/src/static/types.ts +176 -0
  138. package/src/styles/__tests__/testHelpers.ts +97 -0
  139. package/src/styles/base/_custom-elements.scss +51 -0
  140. package/src/styles/base/_index.scss +4 -0
  141. package/src/styles/components/__tests__/componentSelectors.test.ts +2575 -0
  142. package/src/styles/components/_alert.scss +82 -39
  143. package/src/styles/components/_avatar.scss +102 -47
  144. package/src/styles/components/_breadcrumbs.scss +39 -37
  145. package/src/styles/components/_button.scss +58 -5
  146. package/src/styles/components/_card.scss +64 -2
  147. package/src/styles/components/_checkbox.scss +35 -5
  148. package/src/styles/components/_color-picker.scss +48 -13
  149. package/src/styles/components/_divider.scss +86 -52
  150. package/src/styles/components/_dropdown.scss +214 -0
  151. package/src/styles/components/_field.scss +76 -23
  152. package/src/styles/components/_group.scss +190 -79
  153. package/src/styles/components/_index.scss +1 -0
  154. package/src/styles/components/_input.scss +81 -5
  155. package/src/styles/components/_menu.scss +1 -1
  156. package/src/styles/components/_navbar.scss +76 -45
  157. package/src/styles/components/_number-input.scss +98 -85
  158. package/src/styles/components/_page.scss +82 -23
  159. package/src/styles/components/_pagination.scss +240 -212
  160. package/src/styles/components/_panel.scss +268 -122
  161. package/src/styles/components/_progress.scss +120 -70
  162. package/src/styles/components/_radio.scss +35 -5
  163. package/src/styles/components/_scroll-area.scss +50 -22
  164. package/src/styles/components/_select.scss +40 -9
  165. package/src/styles/components/_sidebar.scss +59 -34
  166. package/src/styles/components/_skeleton.scss +111 -65
  167. package/src/styles/components/_slider.scss +34 -10
  168. package/src/styles/components/_spinner.scss +107 -56
  169. package/src/styles/components/_switch.scss +36 -5
  170. package/src/styles/components/_table.scss +150 -166
  171. package/src/styles/components/_tag.scss +244 -154
  172. package/src/styles/components/_tags-input.scss +46 -12
  173. package/src/styles/components/_textarea.scss +36 -5
  174. package/src/styles/components/_toolbar.scss +85 -31
  175. package/src/styles/components/_tooltip.scss +172 -3
  176. package/src/styles/mixins/_cut-border.scss +18 -4
  177. package/src/styles/mixins/_dual-selector.scss +192 -0
  178. package/src/styles/mixins/_index.scss +1 -0
  179. package/src/styles/mixins/dualSelector.test.ts +151 -0
  180. package/src/styles/themes/_colorful.scss +25 -0
  181. package/src/styles/themes/_greyscale.scss +25 -0
  182. package/src/styles/themes/_shade-scale.scss +39 -0
  183. package/src/styles/tokens/_semantic-color-kinds.scss +66 -0
  184. package/src/{types.ts → types/index.ts} +19 -11
  185. package/src/utils/slots.ts +75 -0
  186. package/web-types.json +980 -137
  187. package/dist/composables/useCustomColors.test.d.ts +0 -1
  188. package/dist/composables/useFocusTrap.test.d.ts +0 -1
  189. package/dist/composables/usePortalContext.test.d.ts +0 -1
  190. package/dist/styles/mixins/fluidSize.test.d.ts +0 -1
  191. package/dist/types.d.ts +0 -29
@@ -1,5 +1,5 @@
1
1
  import * as vue from "vue";
2
- import { Comment, Fragment, Teleport, Transition, camelize, cloneVNode, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, customRef, defineComponent, effectScope, getCurrentInstance, getCurrentScope, guardReactiveProps, h, inject, isRef, markRaw, mergeDefaults, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, onUpdated, openBlock, provide, reactive, readonly, ref, renderList, renderSlot, resolveDynamicComponent, shallowReadonly, shallowRef, toDisplayString, toHandlerKey, toHandlers, toRaw, toRef, toRefs, toValue, triggerRef, unref, useCssVars, useModel, useSlots, useTemplateRef, vModelDynamic, vModelText, watch, watchEffect, watchPostEffect, watchSyncEffect, withCtx, withDirectives, withKeys, withMemo, withModifiers } from "vue";
2
+ import { Comment, Fragment, Teleport, Text, Transition, camelize, cloneVNode, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, customRef, defineComponent, effectScope, getCurrentInstance, getCurrentScope, guardReactiveProps, h, inject, isRef, markRaw, mergeDefaults, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, onUpdated, openBlock, provide, reactive, readonly, ref, renderList, renderSlot, resolveDynamicComponent, shallowReadonly, shallowRef, toDisplayString, toHandlerKey, toHandlers, toRaw, toRef, toRefs, toValue, triggerRef, unref, useCssVars, useModel, useSlots, useTemplateRef, vModelDynamic, vModelText, watch, watchEffect, watchPostEffect, watchSyncEffect, withCtx, withDirectives, withKeys, withMemo, withModifiers } from "vue";
3
3
  //#region \0rolldown/runtime.js
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -21974,88 +21974,86 @@ var TreeItem_default = /* @__PURE__ */ defineComponent({
21974
21974
  //#endregion
21975
21975
  //#region src/composables/useCustomColors.ts
21976
21976
  /**
21977
+ * Kind names that the color props accept as shortcuts. Typing `baseColor="neon-pink"` resolves
21978
+ * to `var(--sk-neon-pink-base)`; typing `borderColor="primary"` resolves to `var(--sk-primary-base)`.
21979
+ * Any string not in this set is passed through verbatim as a CSS color value.
21980
+ */
21981
+ var KIND_NAMES = new Set([
21982
+ "neutral",
21983
+ "primary",
21984
+ "accent",
21985
+ "info",
21986
+ "success",
21987
+ "warning",
21988
+ "danger",
21989
+ "boulder",
21990
+ "neon-blue",
21991
+ "light-blue",
21992
+ "neon-orange",
21993
+ "neon-purple",
21994
+ "neon-green",
21995
+ "neon-mint",
21996
+ "neon-pink",
21997
+ "yellow",
21998
+ "red"
21999
+ ]);
22000
+ function resolveColor(value, part) {
22001
+ if (!value) return;
22002
+ const trimmed = value.trim();
22003
+ if (KIND_NAMES.has(trimmed)) return `var(--sk-${trimmed}-${part})`;
22004
+ return value;
22005
+ }
22006
+ function unwrap(input) {
22007
+ return typeof input === "string" ? input : input?.value;
22008
+ }
22009
+ /**
21977
22010
  * Composable for handling custom color props in components.
21978
22011
  *
21979
- * This composable provides a consistent way to apply custom colors to components by generating
21980
- * CSS variables that override the component's default color tokens. It supports any CSS color
21981
- * format including hex, rgb, hsl, oklch, named colors, and CSS variables.
22012
+ * Generates CSS custom properties that override a component's default color tokens. Props accept
22013
+ * either a kind name (e.g. `"neon-pink"`, `"primary"`), which resolves to the matching
22014
+ * `--sk-<kind>-base/-text` token, or any raw CSS color value (hex, rgb, oklch, named, or
22015
+ * `var(...)`), which is passed through unchanged. This lets consumers use SleekSpace's palette
22016
+ * by name without having to remember the token syntax.
21982
22017
  *
21983
22018
  * Works with any component that follows the CSS variable naming convention:
21984
22019
  * - `--sk-{componentName}-color-base` for the base/background color
21985
22020
  * - `--sk-{componentName}-fg` for the foreground/text color
22021
+ * - `--sk-{componentName}-border-base` / `--sk-{componentName}-border-color` for the border (optional)
21986
22022
  *
21987
- * @param componentName - The component name used in CSS variable naming
21988
- * (e.g., 'button', 'panel', 'my-custom-component')
21989
- * @param baseColor - The base/background color (any CSS color value, including CSS variables)
21990
- * @param textColor - Optional foreground/text color. If not provided, falls back to `--sk-neutral-text`
22023
+ * @param componentName - The component name used in CSS variable naming (e.g., 'button', 'panel')
22024
+ * @param baseColor - Kind name or CSS color value for the base/background color
22025
+ * @param textColor - Kind name or CSS color value for the foreground/text color. Falls back to
22026
+ * `--sk-neutral-text` when only `baseColor` is provided.
22027
+ * @param borderColor - Optional kind name or CSS color value for the border. When provided,
22028
+ * both `--sk-<component>-border-base` and `--sk-<component>-border-color`
22029
+ * are emitted so the border takes precedence over any kind's default.
21991
22030
  *
21992
22031
  * @returns Computed style object with CSS variables ready to bind to a component's style attribute
21993
22032
  *
21994
- * @example Basic usage with base color only
21995
- * ```vue
21996
- * <script setup>
21997
- * import { useCustomColors } from '@/composables/useCustomColors';
21998
- *
21999
- * const props = defineProps<{ baseColor?: string }>();
22000
- * const customColors = useCustomColors('button', toRef(() => props.baseColor), undefined);
22001
- * <\/script>
22002
- *
22003
- * <template>
22004
- * <button :style="customColors">Click me</button>
22005
- * </template>
22006
- * ```
22007
- *
22008
- * @example With both base and text colors
22009
- * ```vue
22010
- * <SkButton base-color="oklch(0.7 0.25 300)" text-color="white">
22011
- * Custom Purple Button
22012
- * </SkButton>
22013
- * ```
22014
- *
22015
- * @example Using CSS variables
22033
+ * @example Kind name shortcut
22016
22034
  * ```vue
22017
- * <SkPanel base-color="var(--my-custom-color)" text-color="var(--my-text-color)">
22018
- * Content
22019
- * </SkPanel>
22035
+ * <SkPanel base-color="neon-pink" text-color="primary" border-color="neon-purple">...</SkPanel>
22020
22036
  * ```
22021
22037
  *
22022
- * @example Custom component
22038
+ * @example Raw CSS values
22023
22039
  * ```vue
22024
- * <script setup>
22025
- * import { useCustomColors } from '@/composables/useCustomColors';
22026
- *
22027
- * const props = defineProps<{ baseColor?: string; textColor?: string }>();
22028
- * const customColors = useCustomColors('my-widget', toRef(() => props.baseColor), toRef(() => props.textColor));
22029
- * <\/script>
22030
- *
22031
- * <template>
22032
- * <div class="my-widget" :style="customColors">
22033
- * <!-- Will generate: --sk-my-widget-color-base and --sk-my-widget-fg -->
22034
- * </div>
22035
- * </template>
22040
+ * <SkButton base-color="oklch(0.7 0.25 300)" text-color="white">Click me</SkButton>
22036
22041
  * ```
22037
- *
22038
- * Generated CSS variables:
22039
- * - `--sk-{componentName}-color-base` - The base color for backgrounds and accents
22040
- * - `--sk-{componentName}-fg` - The foreground/text color
22041
- *
22042
- * @remarks
22043
- * - If `textColor` is not provided, components will use `--sk-neutral-text` from the active theme
22044
- * - For best contrast, always provide `textColor` when using custom `baseColor`
22045
- * - The generated CSS variables integrate with the component's existing token system
22046
- * - Works with any component name - no need to register components beforehand
22047
22042
  */
22048
- function useCustomColors(componentName, baseColor, textColor) {
22043
+ function useCustomColors(componentName, baseColor, textColor, borderColor) {
22049
22044
  return computed(() => {
22050
22045
  const styles = {};
22051
- const baseColorValue = typeof baseColor === "string" ? baseColor : baseColor?.value;
22052
- const textColorValue = typeof textColor === "string" ? textColor : textColor?.value;
22053
- if (!baseColorValue) return styles;
22054
- const baseVarName = `--sk-${componentName}-color-base`;
22055
- styles[baseVarName] = baseColorValue;
22056
- const fgVarName = `--sk-${componentName}-fg`;
22057
- if (textColorValue) styles[fgVarName] = textColorValue;
22058
- else styles[fgVarName] = "var(--sk-neutral-text)";
22046
+ const baseResolved = resolveColor(unwrap(baseColor), "base");
22047
+ const textResolved = resolveColor(unwrap(textColor), "text");
22048
+ const borderResolved = resolveColor(unwrap(borderColor), "base");
22049
+ if (baseResolved) {
22050
+ styles[`--sk-${componentName}-color-base`] = baseResolved;
22051
+ styles[`--sk-${componentName}-fg`] = textResolved ?? "var(--sk-neutral-text)";
22052
+ } else if (textResolved) styles[`--sk-${componentName}-fg`] = textResolved;
22053
+ if (borderResolved) {
22054
+ styles[`--sk-${componentName}-border-base`] = borderResolved;
22055
+ styles[`--sk-${componentName}-border-color`] = borderResolved;
22056
+ }
22059
22057
  return styles;
22060
22058
  });
22061
22059
  }
@@ -22076,7 +22074,8 @@ var SkAccordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
22076
22074
  default: false
22077
22075
  },
22078
22076
  baseColor: {},
22079
- textColor: {}
22077
+ textColor: {},
22078
+ borderColor: {}
22080
22079
  },
22081
22080
  emits: ["update:modelValue"],
22082
22081
  setup(__props, { emit: __emit }) {
@@ -22234,6 +22233,31 @@ var SkAccordionItem_default = /* @__PURE__ */ _plugin_vue_export_helper_default(
22234
22233
  }
22235
22234
  }), [["__scopeId", "data-v-5e73d91f"]]);
22236
22235
  //#endregion
22236
+ //#region src/utils/slots.ts
22237
+ function hasRenderableContent(vnodes) {
22238
+ return vnodes.some((vnode) => {
22239
+ if (vnode.type === Comment) return false;
22240
+ if (vnode.type === Text) return typeof vnode.children === "string" && vnode.children.trim().length > 0;
22241
+ if (vnode.type === Fragment && Array.isArray(vnode.children)) return hasRenderableContent(vnode.children);
22242
+ return true;
22243
+ });
22244
+ }
22245
+ function hasSlotContent(slot, props) {
22246
+ if (!slot) return false;
22247
+ return hasRenderableContent(slot(props));
22248
+ }
22249
+ function filterRenderableVNodes(vnodes) {
22250
+ return vnodes.flatMap((vnode) => {
22251
+ if (vnode.type === Comment) return [];
22252
+ if (vnode.type === Text) {
22253
+ if (typeof vnode.children === "string" && vnode.children.trim().length > 0) return [vnode];
22254
+ return [];
22255
+ }
22256
+ if (vnode.type === Fragment && Array.isArray(vnode.children)) return filterRenderableVNodes(vnode.children);
22257
+ return [vnode];
22258
+ });
22259
+ }
22260
+ //#endregion
22237
22261
  //#region src/components/Alert/SkAlert.vue?vue&type=script&setup=true&lang.ts
22238
22262
  var _hoisted_1$39 = {
22239
22263
  key: 0,
@@ -22283,7 +22307,8 @@ var SkAlert_default = /* @__PURE__ */ defineComponent({
22283
22307
  default: void 0
22284
22308
  },
22285
22309
  baseColor: {},
22286
- textColor: {}
22310
+ textColor: {},
22311
+ borderColor: {}
22287
22312
  },
22288
22313
  setup(__props) {
22289
22314
  /**
@@ -22324,9 +22349,7 @@ var SkAlert_default = /* @__PURE__ */ defineComponent({
22324
22349
  });
22325
22350
  const shouldShowIcon = computed(() => {
22326
22351
  if (props.showIcon !== void 0) return props.showIcon;
22327
- const hasDefaultIcon = FEEDBACK_KINDS.includes(props.kind);
22328
- const hasSlotContent = !!slots.icon;
22329
- return hasDefaultIcon || hasSlotContent;
22352
+ return FEEDBACK_KINDS.includes(props.kind) || hasSlotContent(slots.icon);
22330
22353
  });
22331
22354
  const customColorStyles = useCustomColors("alert", toRef(() => props.baseColor), toRef(() => props.textColor));
22332
22355
  return (_ctx, _cache) => {
@@ -22843,7 +22866,8 @@ var SkBreadcrumbs_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
22843
22866
  kind: { default: "neutral" },
22844
22867
  separator: { default: "/" },
22845
22868
  baseColor: { default: void 0 },
22846
- textColor: { default: void 0 }
22869
+ textColor: { default: void 0 },
22870
+ borderColor: {}
22847
22871
  },
22848
22872
  setup(__props) {
22849
22873
  /**
@@ -22874,9 +22898,7 @@ var SkBreadcrumbs_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
22874
22898
  }));
22875
22899
  const processedItems = computed(() => {
22876
22900
  if (!slots.default) return [];
22877
- const defaultSlot = slots.default();
22878
- if (!defaultSlot || defaultSlot.length === 0) return [];
22879
- return defaultSlot;
22901
+ return filterRenderableVNodes(slots.default());
22880
22902
  });
22881
22903
  return (_ctx, _cache) => {
22882
22904
  return openBlock(), createElementBlock("nav", {
@@ -22888,7 +22910,7 @@ var SkBreadcrumbs_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
22888
22910
  }), 128))])], 6);
22889
22911
  };
22890
22912
  }
22891
- }), [["__scopeId", "data-v-f7fec0fe"]]);
22913
+ }), [["__scopeId", "data-v-6d108335"]]);
22892
22914
  //#endregion
22893
22915
  //#region src/components/Button/SkButton.vue?vue&type=script&setup=true&lang.ts
22894
22916
  var _hoisted_1$34 = { class: "sk-button-chrome" };
@@ -22941,7 +22963,8 @@ var SkButton_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__P
22941
22963
  href: { default: void 0 },
22942
22964
  to: { default: void 0 },
22943
22965
  baseColor: {},
22944
- textColor: {}
22966
+ textColor: {},
22967
+ borderColor: {}
22945
22968
  },
22946
22969
  setup(__props) {
22947
22970
  /**
@@ -22970,7 +22993,7 @@ var SkButton_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__P
22970
22993
  else return "button";
22971
22994
  });
22972
22995
  const classes = computed(() => {
22973
- const isIconOnly = !!(slots.icon && !slots.default);
22996
+ const isIconOnly = hasSlotContent(slots.icon) && !hasSlotContent(slots.default);
22974
22997
  return {
22975
22998
  "sk-button": true,
22976
22999
  [`sk-${props.kind}`]: true,
@@ -22999,10 +23022,10 @@ var SkButton_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__P
22999
23022
  "sk-button-content": true,
23000
23023
  "loading": __props.loading
23001
23024
  }) }, [
23002
- _ctx.$slots.leading ? (openBlock(), createElementBlock("span", _hoisted_3$14, [renderSlot(_ctx.$slots, "leading", {}, void 0, true)])) : createCommentVNode("", true),
23003
- _ctx.$slots.icon ? (openBlock(), createElementBlock("span", _hoisted_4$10, [renderSlot(_ctx.$slots, "icon", {}, void 0, true)])) : createCommentVNode("", true),
23004
- _ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_5$8, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true),
23005
- _ctx.$slots.trailing ? (openBlock(), createElementBlock("span", _hoisted_6$5, [renderSlot(_ctx.$slots, "trailing", {}, void 0, true)])) : createCommentVNode("", true)
23025
+ unref(hasSlotContent)(unref(slots).leading) ? (openBlock(), createElementBlock("span", _hoisted_3$14, [renderSlot(_ctx.$slots, "leading", {}, void 0, true)])) : createCommentVNode("", true),
23026
+ unref(hasSlotContent)(unref(slots).icon) ? (openBlock(), createElementBlock("span", _hoisted_4$10, [renderSlot(_ctx.$slots, "icon", {}, void 0, true)])) : createCommentVNode("", true),
23027
+ unref(hasSlotContent)(unref(slots).default) ? (openBlock(), createElementBlock("span", _hoisted_5$8, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true),
23028
+ unref(hasSlotContent)(unref(slots).trailing) ? (openBlock(), createElementBlock("span", _hoisted_6$5, [renderSlot(_ctx.$slots, "trailing", {}, void 0, true)])) : createCommentVNode("", true)
23006
23029
  ], 2)])]),
23007
23030
  _: 3
23008
23031
  }, 8, [
@@ -23017,7 +23040,7 @@ var SkButton_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__P
23017
23040
  ]);
23018
23041
  };
23019
23042
  }
23020
- }), [["__scopeId", "data-v-fb63ef15"]]);
23043
+ }), [["__scopeId", "data-v-b276bf6c"]]);
23021
23044
  //#endregion
23022
23045
  //#region src/components/Panel/SkPanel.vue
23023
23046
  var SkPanel_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -23036,10 +23059,11 @@ var SkPanel_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
23036
23059
  corners: { default: () => ["bottom-right"] },
23037
23060
  decorationCorner: { default: "bottom-right" },
23038
23061
  baseColor: {},
23039
- textColor: {}
23062
+ textColor: {},
23063
+ borderColor: {}
23040
23064
  },
23041
23065
  setup(__props) {
23042
- useCssVars((_ctx) => ({ "v42b18398": decorationDisplay.value }));
23066
+ useCssVars((_ctx) => ({ "a6c4a7d4": decorationDisplay.value }));
23043
23067
  /**
23044
23068
  * @component SkPanel
23045
23069
  * @description A foundational container component with beveled corners, borders, background colors, and an optional
@@ -23069,7 +23093,7 @@ var SkPanel_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
23069
23093
  [`sk-decoration-${props.decorationCorner}`]: true
23070
23094
  };
23071
23095
  });
23072
- const customColorStyles = useCustomColors("panel", toRef(() => props.baseColor), toRef(() => props.textColor));
23096
+ const customColorStyles = useCustomColors("panel", toRef(() => props.baseColor), toRef(() => props.textColor), toRef(() => props.borderColor));
23073
23097
  const decorationDisplay = computed(() => {
23074
23098
  if (props.noBorder || !props.showDecoration) return "none";
23075
23099
  if (!props.corners.includes(props.decorationCorner)) return "none";
@@ -23082,7 +23106,7 @@ var SkPanel_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
23082
23106
  }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 6);
23083
23107
  };
23084
23108
  }
23085
- }), [["__scopeId", "data-v-07c1642c"]]);
23109
+ }), [["__scopeId", "data-v-3d4b2da6"]]);
23086
23110
  //#endregion
23087
23111
  //#region src/components/Card/SkCard.vue?vue&type=script&setup=true&lang.ts
23088
23112
  var _hoisted_1$33 = {
@@ -23125,7 +23149,8 @@ var SkCard_default = /* @__PURE__ */ defineComponent({
23125
23149
  corners: { default: () => ["bottom-right"] },
23126
23150
  decorationCorner: { default: "bottom-right" },
23127
23151
  baseColor: {},
23128
- textColor: {}
23152
+ textColor: {},
23153
+ borderColor: {}
23129
23154
  },
23130
23155
  setup(__props) {
23131
23156
  /**
@@ -23156,6 +23181,7 @@ var SkCard_default = /* @__PURE__ */ defineComponent({
23156
23181
  * appropriate spacing.
23157
23182
  */
23158
23183
  const props = __props;
23184
+ const slots = useSlots();
23159
23185
  const classes = computed(() => {
23160
23186
  return { "sk-card": true };
23161
23187
  });
@@ -23184,22 +23210,23 @@ var SkCard_default = /* @__PURE__ */ defineComponent({
23184
23210
  "no-border": __props.noBorder,
23185
23211
  "base-color": __props.baseColor,
23186
23212
  "text-color": __props.textColor,
23213
+ "border-color": __props.borderColor,
23187
23214
  corners: __props.corners,
23188
23215
  "decoration-corner": __props.decorationCorner,
23189
23216
  class: normalizeClass(classes.value)
23190
23217
  }, {
23191
23218
  default: withCtx(() => [
23192
- __props.title || _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
23219
+ __props.title || unref(hasSlotContent)(unref(slots).header) ? (openBlock(), createElementBlock("div", {
23193
23220
  key: 0,
23194
23221
  class: "sk-card-header",
23195
23222
  style: normalizeStyle(headerStyles.value)
23196
23223
  }, [__props.title ? (openBlock(), createElementBlock("h3", _hoisted_1$33, toDisplayString(__props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "header")], 4)) : createCommentVNode("", true),
23197
- _ctx.$slots.media ? (openBlock(), createElementBlock("div", _hoisted_2$17, [renderSlot(_ctx.$slots, "media")])) : createCommentVNode("", true),
23198
- _ctx.$slots.default ? (openBlock(), createElementBlock("div", {
23224
+ unref(hasSlotContent)(unref(slots).media) ? (openBlock(), createElementBlock("div", _hoisted_2$17, [renderSlot(_ctx.$slots, "media")])) : createCommentVNode("", true),
23225
+ unref(hasSlotContent)(unref(slots).default) ? (openBlock(), createElementBlock("div", {
23199
23226
  key: 2,
23200
23227
  class: normalizeClass(contentClasses.value)
23201
23228
  }, [renderSlot(_ctx.$slots, "default")], 2)) : createCommentVNode("", true),
23202
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_3$13, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
23229
+ unref(hasSlotContent)(unref(slots).footer) ? (openBlock(), createElementBlock("div", _hoisted_3$13, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
23203
23230
  ]),
23204
23231
  _: 3
23205
23232
  }, 8, [
@@ -23209,6 +23236,7 @@ var SkCard_default = /* @__PURE__ */ defineComponent({
23209
23236
  "no-border",
23210
23237
  "base-color",
23211
23238
  "text-color",
23239
+ "border-color",
23212
23240
  "corners",
23213
23241
  "decoration-corner",
23214
23242
  "class"
@@ -23261,7 +23289,8 @@ var SkCheckbox_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
23261
23289
  name: { default: void 0 },
23262
23290
  label: { default: void 0 },
23263
23291
  baseColor: {},
23264
- textColor: {}
23292
+ textColor: {},
23293
+ borderColor: {}
23265
23294
  }, {
23266
23295
  "modelValue": {
23267
23296
  type: [Boolean, String],
@@ -23293,6 +23322,7 @@ var SkCheckbox_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
23293
23322
  * @default false
23294
23323
  */
23295
23324
  const checked = useModel(__props, "modelValue");
23325
+ const slots = useSlots();
23296
23326
  const classes = computed(() => ({
23297
23327
  "sk-checkbox": true,
23298
23328
  [`sk-${props.kind}`]: true,
@@ -23330,10 +23360,10 @@ var SkCheckbox_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
23330
23360
  "disabled",
23331
23361
  "required",
23332
23362
  "name"
23333
- ]), __props.label || _ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_3$12, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)], true)])) : createCommentVNode("", true)], 2);
23363
+ ]), __props.label || unref(hasSlotContent)(unref(slots).default) ? (openBlock(), createElementBlock("span", _hoisted_3$12, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)], true)])) : createCommentVNode("", true)], 2);
23334
23364
  };
23335
23365
  }
23336
- }), [["__scopeId", "data-v-073d7038"]]);
23366
+ }), [["__scopeId", "data-v-8e0fd27f"]]);
23337
23367
  //#endregion
23338
23368
  //#region src/components/Collapsible/SkCollapsible.vue?vue&type=script&setup=true&lang.ts
23339
23369
  var _hoisted_1$31 = { class: "sk-collapsible-content-inner" };
@@ -23357,7 +23387,8 @@ var SkCollapsible_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
23357
23387
  kind: { default: "neutral" },
23358
23388
  triggerText: { default: "Toggle" },
23359
23389
  baseColor: {},
23360
- textColor: {}
23390
+ textColor: {},
23391
+ borderColor: {}
23361
23392
  },
23362
23393
  emits: ["update:open"],
23363
23394
  setup(__props, { emit: __emit }) {
@@ -26550,7 +26581,8 @@ var SkColorPicker_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
26550
26581
  placeholder: { default: "Pick a color" },
26551
26582
  defaultValue: { default: "#B63DDAFF" },
26552
26583
  baseColor: {},
26553
- textColor: {}
26584
+ textColor: {},
26585
+ borderColor: {}
26554
26586
  }, {
26555
26587
  "modelValue": {},
26556
26588
  "modelModifiers": {}
@@ -26674,7 +26706,8 @@ var SkContextMenu_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
26674
26706
  props: {
26675
26707
  kind: { default: "neutral" },
26676
26708
  baseColor: {},
26677
- textColor: {}
26709
+ textColor: {},
26710
+ borderColor: {}
26678
26711
  },
26679
26712
  setup(__props) {
26680
26713
  const props = __props;
@@ -26971,6 +27004,10 @@ var SkDivider_default = /* @__PURE__ */ defineComponent({
26971
27004
  }
26972
27005
  });
26973
27006
  //#endregion
27007
+ //#region src/components/NavBar/context.ts
27008
+ var NAVBAR_KIND_KEY = Symbol("sk-navbar-kind");
27009
+ var NAVBAR_SIZE_KEY = Symbol("sk-navbar-size");
27010
+ //#endregion
26974
27011
  //#region src/components/Dropdown/SkDropdown.vue?vue&type=script&setup=true&lang.ts
26975
27012
  var _hoisted_1$27 = {
26976
27013
  xmlns: "http://www.w3.org/2000/svg",
@@ -26996,8 +27033,10 @@ var SkDropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
26996
27033
  side: { default: "bottom" },
26997
27034
  align: { default: "start" },
26998
27035
  sideOffset: { default: 4 },
27036
+ size: { default: void 0 },
26999
27037
  baseColor: {},
27000
- textColor: {}
27038
+ textColor: {},
27039
+ borderColor: {}
27001
27040
  },
27002
27041
  setup(__props) {
27003
27042
  /**
@@ -27024,6 +27063,8 @@ var SkDropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
27024
27063
  */
27025
27064
  const props = __props;
27026
27065
  const { theme } = usePortalContext();
27066
+ const navbarSize = inject(NAVBAR_SIZE_KEY, void 0);
27067
+ const effectiveSize = computed(() => props.size ?? navbarSize?.value ?? "md");
27027
27068
  provide("dropdown-kind", computed(() => props.kind));
27028
27069
  const caretPoints = computed(() => {
27029
27070
  switch (props.side) {
@@ -27041,11 +27082,14 @@ var SkDropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
27041
27082
  return (_ctx, _cache) => {
27042
27083
  return openBlock(), createBlock(unref(DropdownMenuRoot_default), null, {
27043
27084
  default: withCtx(() => [createVNode(unref(DropdownMenuTrigger_default), { "as-child": "" }, {
27044
- default: withCtx(() => [renderSlot(_ctx.$slots, "trigger", {}, () => [createVNode(SkButton_default, { kind: __props.kind }, {
27085
+ default: withCtx(() => [renderSlot(_ctx.$slots, "trigger", {}, () => [createVNode(SkButton_default, {
27086
+ kind: __props.kind,
27087
+ size: effectiveSize.value
27088
+ }, {
27045
27089
  trailing: withCtx(() => [(openBlock(), createElementBlock("svg", _hoisted_1$27, [createElementVNode("polyline", { points: caretPoints.value }, null, 8, _hoisted_2$14)]))]),
27046
27090
  default: withCtx(() => [createTextVNode(toDisplayString(__props.triggerText) + " ", 1)]),
27047
27091
  _: 1
27048
- }, 8, ["kind"])], true)]),
27092
+ }, 8, ["kind", "size"])], true)]),
27049
27093
  _: 3
27050
27094
  }), createVNode(unref(DropdownMenuPortal_default), null, {
27051
27095
  default: withCtx(() => [createVNode(unref(DropdownMenuContent_default), {
@@ -27072,7 +27116,7 @@ var SkDropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
27072
27116
  });
27073
27117
  };
27074
27118
  }
27075
- }), [["__scopeId", "data-v-86d554dd"]]);
27119
+ }), [["__scopeId", "data-v-88c7a661"]]);
27076
27120
  //#endregion
27077
27121
  //#region src/components/Dropdown/SkDropdownCheckboxItem.vue?vue&type=script&setup=true&lang.ts
27078
27122
  var _hoisted_1$26 = {
@@ -27510,7 +27554,8 @@ var SkInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27510
27554
  name: { default: void 0 },
27511
27555
  autocomplete: { default: void 0 },
27512
27556
  baseColor: {},
27513
- textColor: {}
27557
+ textColor: {},
27558
+ borderColor: {}
27514
27559
  }, {
27515
27560
  "modelValue": { default: "" },
27516
27561
  "modelModifiers": {}
@@ -27592,7 +27637,8 @@ var SkListbox_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
27592
27637
  default: false
27593
27638
  },
27594
27639
  baseColor: {},
27595
- textColor: {}
27640
+ textColor: {},
27641
+ borderColor: {}
27596
27642
  }, {
27597
27643
  "modelValue": {},
27598
27644
  "modelModifiers": {}
@@ -27823,7 +27869,8 @@ var SkModal_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27823
27869
  default: false
27824
27870
  },
27825
27871
  baseColor: {},
27826
- textColor: {}
27872
+ textColor: {},
27873
+ borderColor: {}
27827
27874
  },
27828
27875
  emits: ["update:open"],
27829
27876
  setup(__props, { expose: __expose, emit: __emit }) {
@@ -27860,6 +27907,7 @@ var SkModal_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27860
27907
  const props = __props;
27861
27908
  const emit = __emit;
27862
27909
  const { theme } = usePortalContext();
27910
+ const slots = useSlots();
27863
27911
  const isOpen = ref(props.open);
27864
27912
  watch(() => props.open, (newValue) => {
27865
27913
  isOpen.value = newValue;
@@ -27899,7 +27947,7 @@ var SkModal_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27899
27947
  open: isOpen.value,
27900
27948
  "onUpdate:open": _cache[0] || (_cache[0] = ($event) => isOpen.value = $event)
27901
27949
  }, {
27902
- default: withCtx(() => [_ctx.$slots.trigger || __props.triggerText ? (openBlock(), createBlock(unref(DialogTrigger_default), {
27950
+ default: withCtx(() => [unref(hasSlotContent)(unref(slots).trigger) || __props.triggerText ? (openBlock(), createBlock(unref(DialogTrigger_default), {
27903
27951
  key: 0,
27904
27952
  "as-child": ""
27905
27953
  }, {
@@ -27921,7 +27969,7 @@ var SkModal_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27921
27969
  onInteractOutside: handleOverlayClick
27922
27970
  }, {
27923
27971
  default: withCtx(() => [
27924
- _ctx.$slots.title || __props.title ? (openBlock(), createElementBlock("div", _hoisted_1$21, [createVNode(unref(DialogTitle_default), { class: "sk-modal-title" }, {
27972
+ unref(hasSlotContent)(unref(slots).title) || __props.title ? (openBlock(), createElementBlock("div", _hoisted_1$21, [createVNode(unref(DialogTitle_default), { class: "sk-modal-title" }, {
27925
27973
  default: withCtx(() => [renderSlot(_ctx.$slots, "title", { close }, () => [createTextVNode(toDisplayString(__props.title), 1)], true)]),
27926
27974
  _: 3
27927
27975
  }), createVNode(unref(DialogClose_default), { "as-child": "" }, {
@@ -27944,7 +27992,7 @@ var SkModal_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27944
27992
  _: 1
27945
27993
  })])) : createCommentVNode("", true),
27946
27994
  createElementVNode("div", _hoisted_2$12, [renderSlot(_ctx.$slots, "default", { close }, void 0, true)]),
27947
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_3$9, [renderSlot(_ctx.$slots, "footer", { close }, void 0, true)])) : createCommentVNode("", true)
27995
+ unref(hasSlotContent)(unref(slots).footer) ? (openBlock(), createElementBlock("div", _hoisted_3$9, [renderSlot(_ctx.$slots, "footer", { close }, void 0, true)])) : createCommentVNode("", true)
27948
27996
  ]),
27949
27997
  _: 3
27950
27998
  }, 8, [
@@ -27958,10 +28006,7 @@ var SkModal_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
27958
28006
  }, 8, ["open"]);
27959
28007
  };
27960
28008
  }
27961
- }), [["__scopeId", "data-v-d5c13c78"]]);
27962
- //#endregion
27963
- //#region src/components/NavBar/context.ts
27964
- var NAVBAR_KIND_KEY = Symbol("sk-navbar-kind");
28009
+ }), [["__scopeId", "data-v-291eea32"]]);
27965
28010
  //#endregion
27966
28011
  //#region src/components/NavBar/SkNavBar.vue?vue&type=script&setup=true&lang.ts
27967
28012
  var _hoisted_1$20 = { class: "sk-navbar-content" };
@@ -27991,8 +28036,10 @@ var SkNavBar_default = /* @__PURE__ */ defineComponent({
27991
28036
  type: Boolean,
27992
28037
  default: true
27993
28038
  },
28039
+ size: { default: "md" },
27994
28040
  baseColor: {},
27995
- textColor: {}
28041
+ textColor: {},
28042
+ borderColor: {}
27996
28043
  },
27997
28044
  setup(__props) {
27998
28045
  /**
@@ -28027,6 +28074,7 @@ var SkNavBar_default = /* @__PURE__ */ defineComponent({
28027
28074
  */
28028
28075
  const props = __props;
28029
28076
  provide(NAVBAR_KIND_KEY, toRef(() => props.kind));
28077
+ provide(NAVBAR_SIZE_KEY, toRef(() => props.size));
28030
28078
  const slots = useSlots();
28031
28079
  const classes = computed(() => {
28032
28080
  return {
@@ -28041,17 +28089,20 @@ var SkNavBar_default = /* @__PURE__ */ defineComponent({
28041
28089
  class: normalizeClass(classes.value),
28042
28090
  style: normalizeStyle(unref(customColorStyles))
28043
28091
  }, [createElementVNode("div", _hoisted_1$20, [
28044
- unref(slots).leading ? (openBlock(), createElementBlock("div", _hoisted_2$11, [renderSlot(_ctx.$slots, "leading")])) : createCommentVNode("", true),
28045
- unref(slots).brand ? (openBlock(), createElementBlock("div", _hoisted_3$8, [renderSlot(_ctx.$slots, "brand")])) : createCommentVNode("", true),
28046
- unref(slots).default ? (openBlock(), createElementBlock("div", _hoisted_4$7, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true),
28047
- unref(slots).actions ? (openBlock(), createElementBlock("div", _hoisted_5$5, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true)
28092
+ unref(hasSlotContent)(unref(slots).leading) ? (openBlock(), createElementBlock("div", _hoisted_2$11, [renderSlot(_ctx.$slots, "leading")])) : createCommentVNode("", true),
28093
+ unref(hasSlotContent)(unref(slots).brand) ? (openBlock(), createElementBlock("div", _hoisted_3$8, [renderSlot(_ctx.$slots, "brand")])) : createCommentVNode("", true),
28094
+ unref(hasSlotContent)(unref(slots).default) ? (openBlock(), createElementBlock("div", _hoisted_4$7, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true),
28095
+ unref(hasSlotContent)(unref(slots).actions) ? (openBlock(), createElementBlock("div", _hoisted_5$5, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true)
28048
28096
  ])], 6);
28049
28097
  };
28050
28098
  }
28051
28099
  });
28052
28100
  //#endregion
28053
28101
  //#region src/components/NumberInput/SkNumberInput.vue?vue&type=script&setup=true&lang.ts
28054
- var _hoisted_1$19 = { class: "sk-number-input-steppers" };
28102
+ var _hoisted_1$19 = {
28103
+ key: 0,
28104
+ class: "sk-number-input-steppers"
28105
+ };
28055
28106
  //#endregion
28056
28107
  //#region src/components/NumberInput/SkNumberInput.vue
28057
28108
  var SkNumberInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -28076,8 +28127,13 @@ var SkNumberInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
28076
28127
  min: { default: void 0 },
28077
28128
  max: { default: void 0 },
28078
28129
  step: { default: 1 },
28130
+ showSteppers: {
28131
+ type: Boolean,
28132
+ default: true
28133
+ },
28079
28134
  baseColor: {},
28080
- textColor: {}
28135
+ textColor: {},
28136
+ borderColor: {}
28081
28137
  }, {
28082
28138
  "modelValue": { default: 0 },
28083
28139
  "modelModifiers": {}
@@ -28133,7 +28189,7 @@ var SkNumberInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
28133
28189
  default: withCtx(() => [createVNode(unref(NumberFieldInput_default), {
28134
28190
  class: normalizeClass(inputClasses.value),
28135
28191
  placeholder: __props.placeholder
28136
- }, null, 8, ["class", "placeholder"]), createElementVNode("div", _hoisted_1$19, [createVNode(unref(NumberFieldIncrement_default), { class: "sk-number-input-increment" }, {
28192
+ }, null, 8, ["class", "placeholder"]), __props.showSteppers ? (openBlock(), createElementBlock("div", _hoisted_1$19, [createVNode(unref(NumberFieldIncrement_default), { class: "sk-number-input-increment" }, {
28137
28193
  default: withCtx(() => [..._cache[1] || (_cache[1] = [createElementVNode("svg", {
28138
28194
  xmlns: "http://www.w3.org/2000/svg",
28139
28195
  viewBox: "0 0 24 24",
@@ -28155,7 +28211,7 @@ var SkNumberInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
28155
28211
  "stroke-linejoin": "miter"
28156
28212
  }, [createElementVNode("polyline", { points: "18 9 12 15 6 9" })], -1)])]),
28157
28213
  _: 1
28158
- })])]),
28214
+ })])) : createCommentVNode("", true)]),
28159
28215
  _: 1
28160
28216
  }, 8, [
28161
28217
  "modelValue",
@@ -28171,7 +28227,7 @@ var SkNumberInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
28171
28227
  ])], 2);
28172
28228
  };
28173
28229
  }
28174
- }), [["__scopeId", "data-v-b589687f"]]);
28230
+ }), [["__scopeId", "data-v-413329cd"]]);
28175
28231
  //#endregion
28176
28232
  //#region src/components/Theme/useTheme.ts
28177
28233
  var ThemeSymbol = Symbol("SkTheme");
@@ -28478,6 +28534,10 @@ var SkPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
28478
28534
  flush: {
28479
28535
  type: Boolean,
28480
28536
  default: false
28537
+ },
28538
+ noBounce: {
28539
+ type: Boolean,
28540
+ default: false
28481
28541
  }
28482
28542
  },
28483
28543
  emits: ["update:sidebarOpen", "update:asideOpen"],
@@ -28529,8 +28589,8 @@ var SkPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
28529
28589
  const props = __props;
28530
28590
  const emit = __emit;
28531
28591
  const slots = useSlots();
28532
- const hasSidebar = computed(() => Boolean(slots.sidebar));
28533
- const hasAside = computed(() => Boolean(slots.aside));
28592
+ const hasSidebar = computed(() => hasSlotContent(slots.sidebar));
28593
+ const hasAside = computed(() => hasSlotContent(slots.aside));
28534
28594
  const rootRef = ref(null);
28535
28595
  const rootWidth = ref(Number.POSITIVE_INFINITY);
28536
28596
  function resolvePx(value, context) {
@@ -28658,7 +28718,8 @@ var SkPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
28658
28718
  "sk-fixed-footer": props.fixedFooter,
28659
28719
  "sk-sidebar-drawer-active": isSidebarDrawerActive.value,
28660
28720
  "sk-aside-drawer-active": isAsideDrawerActive.value,
28661
- "sk-flush": props.flush
28721
+ "sk-flush": props.flush,
28722
+ "sk-no-bounce": props.noBounce
28662
28723
  }));
28663
28724
  const customStyles = computed(() => {
28664
28725
  const styles = {};
@@ -28681,26 +28742,26 @@ var SkPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
28681
28742
  style: normalizeStyle(customStyles.value),
28682
28743
  "data-scheme": __props.theme
28683
28744
  }, [
28684
- _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_2$10, [renderSlot(_ctx.$slots, "header", {}, void 0, true)])) : createCommentVNode("", true),
28685
- _ctx.$slots.subheader ? (openBlock(), createElementBlock("div", _hoisted_3$7, [renderSlot(_ctx.$slots, "subheader", {}, void 0, true)])) : createCommentVNode("", true),
28745
+ unref(hasSlotContent)(slots.header) ? (openBlock(), createElementBlock("header", _hoisted_2$10, [renderSlot(_ctx.$slots, "header", {}, void 0, true)])) : createCommentVNode("", true),
28746
+ unref(hasSlotContent)(slots.subheader) ? (openBlock(), createElementBlock("div", _hoisted_3$7, [renderSlot(_ctx.$slots, "subheader", {}, void 0, true)])) : createCommentVNode("", true),
28686
28747
  createElementVNode("div", _hoisted_4$6, [
28687
28748
  hasSidebar.value && !isSidebarDrawerActive.value ? (openBlock(), createElementBlock("aside", _hoisted_5$4, [
28688
- _ctx.$slots["sidebar-header"] ? (openBlock(), createElementBlock("div", _hoisted_6$3, [renderSlot(_ctx.$slots, "sidebar-header", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true),
28749
+ unref(hasSlotContent)(slots["sidebar-header"]) ? (openBlock(), createElementBlock("div", _hoisted_6$3, [renderSlot(_ctx.$slots, "sidebar-header", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true),
28689
28750
  createElementVNode("div", _hoisted_7$1, [renderSlot(_ctx.$slots, "sidebar", { isDrawer: false }, void 0, true)]),
28690
- _ctx.$slots["sidebar-footer"] ? (openBlock(), createElementBlock("div", _hoisted_8, [renderSlot(_ctx.$slots, "sidebar-footer", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true)
28751
+ unref(hasSlotContent)(slots["sidebar-footer"]) ? (openBlock(), createElementBlock("div", _hoisted_8, [renderSlot(_ctx.$slots, "sidebar-footer", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true)
28691
28752
  ])) : createCommentVNode("", true),
28692
28753
  createElementVNode("div", _hoisted_9, [
28693
- _ctx.$slots["main-header"] ? (openBlock(), createElementBlock("div", _hoisted_10, [renderSlot(_ctx.$slots, "main-header", {}, void 0, true)])) : createCommentVNode("", true),
28754
+ unref(hasSlotContent)(slots["main-header"]) ? (openBlock(), createElementBlock("div", _hoisted_10, [renderSlot(_ctx.$slots, "main-header", {}, void 0, true)])) : createCommentVNode("", true),
28694
28755
  createElementVNode("main", _hoisted_11, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]),
28695
- _ctx.$slots["main-footer"] ? (openBlock(), createElementBlock("div", _hoisted_12, [renderSlot(_ctx.$slots, "main-footer", {}, void 0, true)])) : createCommentVNode("", true)
28756
+ unref(hasSlotContent)(slots["main-footer"]) ? (openBlock(), createElementBlock("div", _hoisted_12, [renderSlot(_ctx.$slots, "main-footer", {}, void 0, true)])) : createCommentVNode("", true)
28696
28757
  ]),
28697
28758
  hasAside.value && !isAsideDrawerActive.value ? (openBlock(), createElementBlock("aside", _hoisted_13, [
28698
- _ctx.$slots["aside-header"] ? (openBlock(), createElementBlock("div", _hoisted_14, [renderSlot(_ctx.$slots, "aside-header", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true),
28759
+ unref(hasSlotContent)(slots["aside-header"]) ? (openBlock(), createElementBlock("div", _hoisted_14, [renderSlot(_ctx.$slots, "aside-header", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true),
28699
28760
  createElementVNode("div", _hoisted_15, [renderSlot(_ctx.$slots, "aside", { isDrawer: false }, void 0, true)]),
28700
- _ctx.$slots["aside-footer"] ? (openBlock(), createElementBlock("div", _hoisted_16, [renderSlot(_ctx.$slots, "aside-footer", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true)
28761
+ unref(hasSlotContent)(slots["aside-footer"]) ? (openBlock(), createElementBlock("div", _hoisted_16, [renderSlot(_ctx.$slots, "aside-footer", { isDrawer: false }, void 0, true)])) : createCommentVNode("", true)
28701
28762
  ])) : createCommentVNode("", true)
28702
28763
  ]),
28703
- _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_17, [renderSlot(_ctx.$slots, "footer", {}, void 0, true)])) : createCommentVNode("", true),
28764
+ unref(hasSlotContent)(slots.footer) ? (openBlock(), createElementBlock("footer", _hoisted_17, [renderSlot(_ctx.$slots, "footer", {}, void 0, true)])) : createCommentVNode("", true),
28704
28765
  hasSidebar.value && isSidebarDrawerActive.value ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [createVNode(Transition, { name: "sk-page-drawer-backdrop" }, {
28705
28766
  default: withCtx(() => [unref(sidebarDrawerOpen) ? (openBlock(), createElementBlock("div", {
28706
28767
  key: 0,
@@ -28721,9 +28782,9 @@ var SkPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
28721
28782
  tabindex: "-1",
28722
28783
  onClick: onSidebarDrawerClick
28723
28784
  }, [
28724
- _ctx.$slots["sidebar-header"] ? (openBlock(), createElementBlock("div", _hoisted_20, [renderSlot(_ctx.$slots, "sidebar-header", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true),
28785
+ unref(hasSlotContent)(slots["sidebar-header"]) ? (openBlock(), createElementBlock("div", _hoisted_20, [renderSlot(_ctx.$slots, "sidebar-header", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true),
28725
28786
  createElementVNode("div", _hoisted_21, [renderSlot(_ctx.$slots, "sidebar", { isDrawer: true }, void 0, true)]),
28726
- _ctx.$slots["sidebar-footer"] ? (openBlock(), createElementBlock("div", _hoisted_22, [renderSlot(_ctx.$slots, "sidebar-footer", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true)
28787
+ unref(hasSlotContent)(slots["sidebar-footer"]) ? (openBlock(), createElementBlock("div", _hoisted_22, [renderSlot(_ctx.$slots, "sidebar-footer", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true)
28727
28788
  ], 8, _hoisted_19)) : createCommentVNode("", true)]),
28728
28789
  _: 3
28729
28790
  })], 64)) : createCommentVNode("", true),
@@ -28747,16 +28808,16 @@ var SkPage_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PUR
28747
28808
  tabindex: "-1",
28748
28809
  onClick: onAsideDrawerClick
28749
28810
  }, [
28750
- _ctx.$slots["aside-header"] ? (openBlock(), createElementBlock("div", _hoisted_25, [renderSlot(_ctx.$slots, "aside-header", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true),
28811
+ unref(hasSlotContent)(slots["aside-header"]) ? (openBlock(), createElementBlock("div", _hoisted_25, [renderSlot(_ctx.$slots, "aside-header", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true),
28751
28812
  createElementVNode("div", _hoisted_26, [renderSlot(_ctx.$slots, "aside", { isDrawer: true }, void 0, true)]),
28752
- _ctx.$slots["aside-footer"] ? (openBlock(), createElementBlock("div", _hoisted_27, [renderSlot(_ctx.$slots, "aside-footer", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true)
28813
+ unref(hasSlotContent)(slots["aside-footer"]) ? (openBlock(), createElementBlock("div", _hoisted_27, [renderSlot(_ctx.$slots, "aside-footer", { isDrawer: true }, void 0, true)])) : createCommentVNode("", true)
28753
28814
  ], 8, _hoisted_24)) : createCommentVNode("", true)]),
28754
28815
  _: 3
28755
28816
  })], 64)) : createCommentVNode("", true)
28756
28817
  ], 14, _hoisted_1$18);
28757
28818
  };
28758
28819
  }
28759
- }), [["__scopeId", "data-v-f502bb9d"]]);
28820
+ }), [["__scopeId", "data-v-2b46217a"]]);
28760
28821
  //#endregion
28761
28822
  //#region src/components/Page/SkPageSidebarToggle.vue?vue&type=script&setup=true&lang.ts
28762
28823
  var _hoisted_1$17 = {
@@ -28982,7 +29043,8 @@ var SkPagination_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
28982
29043
  default: false
28983
29044
  },
28984
29045
  baseColor: { default: void 0 },
28985
- textColor: { default: void 0 }
29046
+ textColor: { default: void 0 },
29047
+ borderColor: {}
28986
29048
  },
28987
29049
  emits: ["update:modelValue"],
28988
29050
  setup(__props, { emit: __emit }) {
@@ -29134,7 +29196,8 @@ var SkPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
29134
29196
  default: void 0
29135
29197
  },
29136
29198
  baseColor: {},
29137
- textColor: {}
29199
+ textColor: {},
29200
+ borderColor: {}
29138
29201
  },
29139
29202
  emits: ["update:open"],
29140
29203
  setup(__props, { emit: __emit }) {
@@ -29182,6 +29245,7 @@ var SkPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
29182
29245
  set: (value) => emit("update:open", value ?? false)
29183
29246
  });
29184
29247
  const { theme } = usePortalContext();
29248
+ const slots = useSlots();
29185
29249
  const contentClasses = computed(() => ({
29186
29250
  "sk-popover-content": true,
29187
29251
  [`sk-${props.kind}`]: true
@@ -29206,7 +29270,7 @@ var SkPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
29206
29270
  "collision-padding": 8
29207
29271
  }, {
29208
29272
  default: withCtx(() => [
29209
- __props.title || _ctx.$slots.header ? (openBlock(), createElementBlock("div", _hoisted_1$15, [
29273
+ __props.title || unref(hasSlotContent)(unref(slots).header) ? (openBlock(), createElementBlock("div", _hoisted_1$15, [
29210
29274
  __props.title ? (openBlock(), createElementBlock("h3", _hoisted_2$7, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
29211
29275
  renderSlot(_ctx.$slots, "header", {}, void 0, true),
29212
29276
  __props.closable ? (openBlock(), createBlock(unref(PopoverClose_default), {
@@ -29238,8 +29302,8 @@ var SkPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
29238
29302
  _: 1
29239
29303
  })) : createCommentVNode("", true)
29240
29304
  ])) : createCommentVNode("", true),
29241
- _ctx.$slots.default ? (openBlock(), createElementBlock("div", _hoisted_3$5, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true),
29242
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_4$4, [renderSlot(_ctx.$slots, "footer", {}, void 0, true)])) : createCommentVNode("", true),
29305
+ unref(hasSlotContent)(unref(slots).default) ? (openBlock(), createElementBlock("div", _hoisted_3$5, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true),
29306
+ unref(hasSlotContent)(unref(slots).footer) ? (openBlock(), createElementBlock("div", _hoisted_4$4, [renderSlot(_ctx.$slots, "footer", {}, void 0, true)])) : createCommentVNode("", true),
29243
29307
  __props.showArrow ? (openBlock(), createBlock(unref(PopoverArrow_default), {
29244
29308
  key: 3,
29245
29309
  class: "sk-popover-arrow"
@@ -29260,7 +29324,7 @@ var SkPopover_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
29260
29324
  }, 8, ["open"]);
29261
29325
  };
29262
29326
  }
29263
- }), [["__scopeId", "data-v-679c4935"]]);
29327
+ }), [["__scopeId", "data-v-401ea442"]]);
29264
29328
  //#endregion
29265
29329
  //#region src/components/Progress/SkProgress.vue
29266
29330
  var SkProgress_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -29378,7 +29442,8 @@ var SkRadio_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
29378
29442
  kind: { default: void 0 },
29379
29443
  size: { default: void 0 },
29380
29444
  baseColor: {},
29381
- textColor: {}
29445
+ textColor: {},
29446
+ borderColor: {}
29382
29447
  },
29383
29448
  setup(__props) {
29384
29449
  /**
@@ -29400,6 +29465,7 @@ var SkRadio_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
29400
29465
  * formatting, icons, or complex layouts alongside the radio button.
29401
29466
  */
29402
29467
  const props = __props;
29468
+ const slots = useSlots();
29403
29469
  const parentKind = inject("radio-kind", computed(() => void 0));
29404
29470
  const parentSize = inject("radio-size", computed(() => void 0));
29405
29471
  const effectiveKind = computed(() => props.kind ?? parentKind.value ?? "neutral");
@@ -29428,10 +29494,10 @@ var SkRadio_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
29428
29494
  "style",
29429
29495
  "value",
29430
29496
  "disabled"
29431
- ]), __props.label || _ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_1$14, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)], true)])) : createCommentVNode("", true)], 2);
29497
+ ]), __props.label || unref(hasSlotContent)(unref(slots).default) ? (openBlock(), createElementBlock("span", _hoisted_1$14, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)], true)])) : createCommentVNode("", true)], 2);
29432
29498
  };
29433
29499
  }
29434
- }), [["__scopeId", "data-v-c88f9c3f"]]);
29500
+ }), [["__scopeId", "data-v-dcd86f1e"]]);
29435
29501
  //#endregion
29436
29502
  //#region src/components/Radio/SkRadioGroup.vue
29437
29503
  var SkRadioGroup_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -29537,17 +29603,69 @@ var SkScrollArea_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
29537
29603
  [`sk-${props.orientation}`]: true,
29538
29604
  "sk-fade": props.fade
29539
29605
  }));
29606
+ const viewportRef = ref(null);
29607
+ const fadeTop = ref(0);
29608
+ const fadeBottom = ref(0);
29609
+ const fadeLeft = ref(0);
29610
+ const fadeRight = ref(0);
29611
+ let scrollEl = null;
29612
+ let resizeObs = null;
29613
+ let rafID = null;
29614
+ function updateFades() {
29615
+ if (!scrollEl) return;
29616
+ const { scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth } = scrollEl;
29617
+ const threshold = 1;
29618
+ fadeTop.value = scrollTop > threshold ? 1 : 0;
29619
+ fadeBottom.value = scrollHeight - scrollTop - clientHeight > threshold ? 1 : 0;
29620
+ fadeLeft.value = scrollLeft > threshold ? 1 : 0;
29621
+ fadeRight.value = scrollWidth - scrollLeft - clientWidth > threshold ? 1 : 0;
29622
+ }
29623
+ function scheduleUpdate() {
29624
+ if (rafID !== null) return;
29625
+ rafID = requestAnimationFrame(() => {
29626
+ rafID = null;
29627
+ updateFades();
29628
+ });
29629
+ }
29630
+ onMounted(() => {
29631
+ scrollEl = viewportRef.value?.viewportElement ?? null;
29632
+ if (!scrollEl) return;
29633
+ scrollEl.addEventListener("scroll", scheduleUpdate, { passive: true });
29634
+ resizeObs = new ResizeObserver(scheduleUpdate);
29635
+ resizeObs.observe(scrollEl);
29636
+ for (const child of Array.from(scrollEl.children)) resizeObs.observe(child);
29637
+ updateFades();
29638
+ });
29639
+ onBeforeUnmount(() => {
29640
+ if (scrollEl) scrollEl.removeEventListener("scroll", scheduleUpdate);
29641
+ resizeObs?.disconnect();
29642
+ if (rafID !== null) cancelAnimationFrame(rafID);
29643
+ });
29644
+ const rootStyles = computed(() => {
29645
+ const styles = { ...customColorStyles.value };
29646
+ if (props.fade) {
29647
+ styles["--sk-scroll-fade-top"] = String(fadeTop.value);
29648
+ styles["--sk-scroll-fade-bottom"] = String(fadeBottom.value);
29649
+ styles["--sk-scroll-fade-left"] = String(fadeLeft.value);
29650
+ styles["--sk-scroll-fade-right"] = String(fadeRight.value);
29651
+ }
29652
+ return styles;
29653
+ });
29540
29654
  return (_ctx, _cache) => {
29541
29655
  return openBlock(), createBlock(unref(ScrollAreaRoot_default), {
29542
29656
  type: __props.type,
29543
29657
  class: normalizeClass(classes.value),
29544
- style: normalizeStyle(unref(customColorStyles))
29658
+ style: normalizeStyle(rootStyles.value)
29545
29659
  }, {
29546
29660
  default: withCtx(() => [
29547
- createVNode(unref(ScrollAreaViewport_default), { class: "sk-scroll-area-viewport" }, {
29661
+ createVNode(unref(ScrollAreaViewport_default), {
29662
+ ref_key: "viewportRef",
29663
+ ref: viewportRef,
29664
+ class: "sk-scroll-area-viewport"
29665
+ }, {
29548
29666
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, void 0, true)]),
29549
29667
  _: 3
29550
- }),
29668
+ }, 512),
29551
29669
  __props.orientation !== "horizontal" ? (openBlock(), createBlock(unref(ScrollAreaScrollbar_default), {
29552
29670
  key: 0,
29553
29671
  class: "sk-scroll-area-scrollbar",
@@ -29577,7 +29695,7 @@ var SkScrollArea_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/*
29577
29695
  ]);
29578
29696
  };
29579
29697
  }
29580
- }), [["__scopeId", "data-v-03c94821"]]);
29698
+ }), [["__scopeId", "data-v-e4dbafd6"]]);
29581
29699
  //#endregion
29582
29700
  //#region src/components/Select/SkSelect.vue?vue&type=script&setup=true&lang.ts
29583
29701
  var _hoisted_1$13 = {
@@ -29607,7 +29725,8 @@ var SkSelect_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__P
29607
29725
  default: false
29608
29726
  },
29609
29727
  baseColor: {},
29610
- textColor: {}
29728
+ textColor: {},
29729
+ borderColor: {}
29611
29730
  }, {
29612
29731
  "modelValue": {},
29613
29732
  "modelModifiers": {}
@@ -29832,7 +29951,8 @@ var SkSidebar_default = /* @__PURE__ */ defineComponent({
29832
29951
  default: false
29833
29952
  },
29834
29953
  baseColor: {},
29835
- textColor: {}
29954
+ textColor: {},
29955
+ borderColor: {}
29836
29956
  },
29837
29957
  setup(__props) {
29838
29958
  /**
@@ -30403,7 +30523,8 @@ var SkSwitch_default = /* @__PURE__ */ defineComponent({
30403
30523
  default: false
30404
30524
  },
30405
30525
  baseColor: {},
30406
- textColor: {}
30526
+ textColor: {},
30527
+ borderColor: {}
30407
30528
  },
30408
30529
  emits: ["update:modelValue"],
30409
30530
  setup(__props) {
@@ -30440,7 +30561,7 @@ var SkSwitch_default = /* @__PURE__ */ defineComponent({
30440
30561
  };
30441
30562
  });
30442
30563
  const showLabel = computed(() => {
30443
- return Boolean(slots.default || props.labelOn || props.labelOff || slots["label-on"] || slots["label-off"] || props.label);
30564
+ return hasSlotContent(slots.default) || Boolean(props.labelOn) || Boolean(props.labelOff) || hasSlotContent(slots["label-on"]) || hasSlotContent(slots["label-off"]) || Boolean(props.label);
30444
30565
  });
30445
30566
  const useOnOffLabels = computed(() => {
30446
30567
  return Boolean(props.labelOn || props.labelOff || slots["label-on"] || slots["label-off"]);
@@ -30473,14 +30594,14 @@ var SkSwitch_default = /* @__PURE__ */ defineComponent({
30473
30594
  "required",
30474
30595
  "class",
30475
30596
  "style"
30476
- ]), showLabel.value ? (openBlock(), createElementBlock("label", _hoisted_2$3, [unref(slots).default ? renderSlot(_ctx.$slots, "default", { key: 0 }) : useOnOffLabels.value && !__props.disableLabelAnimation ? (openBlock(), createBlock(Transition, {
30597
+ ]), showLabel.value ? (openBlock(), createElementBlock("label", _hoisted_2$3, [unref(hasSlotContent)(unref(slots).default) ? renderSlot(_ctx.$slots, "default", { key: 0 }) : useOnOffLabels.value && !__props.disableLabelAnimation ? (openBlock(), createBlock(Transition, {
30477
30598
  key: 1,
30478
30599
  name: "sk-switch-label-fade",
30479
30600
  mode: "out-in"
30480
30601
  }, {
30481
- default: withCtx(() => [__props.modelValue ? (openBlock(), createElementBlock("span", _hoisted_3$3, [unref(slots)["label-on"] ? renderSlot(_ctx.$slots, "label-on", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOn.value), 1)], 64))])) : (openBlock(), createElementBlock("span", _hoisted_4$3, [unref(slots)["label-off"] ? renderSlot(_ctx.$slots, "label-off", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOff.value), 1)], 64))]))]),
30602
+ default: withCtx(() => [__props.modelValue ? (openBlock(), createElementBlock("span", _hoisted_3$3, [unref(hasSlotContent)(unref(slots)["label-on"]) ? renderSlot(_ctx.$slots, "label-on", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOn.value), 1)], 64))])) : (openBlock(), createElementBlock("span", _hoisted_4$3, [unref(hasSlotContent)(unref(slots)["label-off"]) ? renderSlot(_ctx.$slots, "label-off", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOff.value), 1)], 64))]))]),
30482
30603
  _: 3
30483
- })) : useOnOffLabels.value && __props.disableLabelAnimation ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [__props.modelValue ? (openBlock(), createElementBlock("span", _hoisted_5$2, [unref(slots)["label-on"] ? renderSlot(_ctx.$slots, "label-on", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOn.value), 1)], 64))])) : (openBlock(), createElementBlock("span", _hoisted_6$1, [unref(slots)["label-off"] ? renderSlot(_ctx.$slots, "label-off", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOff.value), 1)], 64))]))], 64)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createTextVNode(toDisplayString(__props.label), 1)], 64))])) : createCommentVNode("", true)]);
30604
+ })) : useOnOffLabels.value && __props.disableLabelAnimation ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [__props.modelValue ? (openBlock(), createElementBlock("span", _hoisted_5$2, [unref(hasSlotContent)(unref(slots)["label-on"]) ? renderSlot(_ctx.$slots, "label-on", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOn.value), 1)], 64))])) : (openBlock(), createElementBlock("span", _hoisted_6$1, [unref(hasSlotContent)(unref(slots)["label-off"]) ? renderSlot(_ctx.$slots, "label-off", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(labelOff.value), 1)], 64))]))], 64)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createTextVNode(toDisplayString(__props.label), 1)], 64))])) : createCommentVNode("", true)]);
30484
30605
  };
30485
30606
  }
30486
30607
  });
@@ -30516,7 +30637,8 @@ var SkTable_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PU
30516
30637
  default: false
30517
30638
  },
30518
30639
  baseColor: {},
30519
- textColor: {}
30640
+ textColor: {},
30641
+ borderColor: {}
30520
30642
  },
30521
30643
  setup(__props) {
30522
30644
  /**
@@ -30619,6 +30741,7 @@ var SkTab_default = /* @__PURE__ */ defineComponent({
30619
30741
  * @slot icon - Optional icon displayed before the tab label. Useful for visual indicators.
30620
30742
  */
30621
30743
  const props = __props;
30744
+ const slots = useSlots();
30622
30745
  const parentKind = inject("tabs-kind", computed(() => void 0));
30623
30746
  const kind = computed(() => props.kind ?? parentKind.value);
30624
30747
  const classes = computed(() => {
@@ -30634,7 +30757,7 @@ var SkTab_default = /* @__PURE__ */ defineComponent({
30634
30757
  disabled: __props.disabled,
30635
30758
  class: normalizeClass(classes.value)
30636
30759
  }, {
30637
- default: withCtx(() => [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", _hoisted_1$7, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true), createElementVNode("span", _hoisted_2$2, [createElementVNode("span", _hoisted_3$2, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)])]), createElementVNode("span", _hoisted_4$2, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)])])])]),
30760
+ default: withCtx(() => [unref(hasSlotContent)(unref(slots).icon) ? (openBlock(), createElementBlock("span", _hoisted_1$7, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true), createElementVNode("span", _hoisted_2$2, [createElementVNode("span", _hoisted_3$2, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)])]), createElementVNode("span", _hoisted_4$2, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)])])])]),
30638
30761
  _: 3
30639
30762
  }, 8, [
30640
30763
  "value",
@@ -30783,7 +30906,8 @@ var SkTabs_default = /* @__PURE__ */ defineComponent({
30783
30906
  default: false
30784
30907
  },
30785
30908
  baseColor: {},
30786
- textColor: {}
30909
+ textColor: {},
30910
+ borderColor: {}
30787
30911
  },
30788
30912
  emits: ["update:modelValue"],
30789
30913
  setup(__props) {
@@ -30858,7 +30982,8 @@ var SkTag_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE
30858
30982
  default: false
30859
30983
  },
30860
30984
  baseColor: {},
30861
- textColor: {}
30985
+ textColor: {},
30986
+ borderColor: {}
30862
30987
  },
30863
30988
  emits: ["remove"],
30864
30989
  setup(__props, { emit: __emit }) {
@@ -30964,7 +31089,8 @@ var SkTagsInput_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @
30964
31089
  tagKind: { default: void 0 },
30965
31090
  tagVariant: { default: "solid" },
30966
31091
  baseColor: {},
30967
- textColor: {}
31092
+ textColor: {},
31093
+ borderColor: {}
30968
31094
  }, {
30969
31095
  "modelValue": { default: () => [] },
30970
31096
  "modelModifiers": {}
@@ -31107,7 +31233,8 @@ var SkTextarea_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31107
31233
  rows: { default: 4 },
31108
31234
  autocomplete: { default: void 0 },
31109
31235
  baseColor: {},
31110
- textColor: {}
31236
+ textColor: {},
31237
+ borderColor: {}
31111
31238
  }, {
31112
31239
  "modelValue": { default: "" },
31113
31240
  "modelModifiers": {}
@@ -31664,7 +31791,8 @@ var SkTooltip_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__
31664
31791
  default: true
31665
31792
  },
31666
31793
  baseColor: {},
31667
- textColor: {}
31794
+ textColor: {},
31795
+ borderColor: {}
31668
31796
  },
31669
31797
  setup(__props) {
31670
31798
  /**
@@ -31880,6 +32008,7 @@ var SkTreeItem_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31880
32008
  }
31881
32009
  },
31882
32010
  setup(__props) {
32011
+ const slots = useSlots();
31883
32012
  return (_ctx, _cache) => {
31884
32013
  return openBlock(), createBlock(unref(TreeItem_default), mergeProps({ class: "sk-tree-item" }, __props.item.bind, {
31885
32014
  value: __props.item.value,
@@ -31896,7 +32025,7 @@ var SkTreeItem_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31896
32025
  key: 0,
31897
32026
  class: normalizeClass(["sk-tree-item-chevron", { "sk-expanded": isExpanded }])
31898
32027
  }, [(openBlock(), createElementBlock("svg", _hoisted_1$1, [..._cache[0] || (_cache[0] = [createElementVNode("polyline", { points: "9 6 15 12 9 18" }, null, -1)])]))], 2)) : __props.showChevron ? (openBlock(), createElementBlock("div", _hoisted_2)) : createCommentVNode("", true),
31899
- _ctx.$slots.leading ? (openBlock(), createElementBlock("div", _hoisted_3, [renderSlot(_ctx.$slots, "leading", {
32028
+ unref(hasSlotContent)(unref(slots).leading) ? (openBlock(), createElementBlock("div", _hoisted_3, [renderSlot(_ctx.$slots, "leading", {
31900
32029
  isExpanded,
31901
32030
  isSelected
31902
32031
  }, void 0, true)])) : createCommentVNode("", true),
@@ -31906,7 +32035,7 @@ var SkTreeItem_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31906
32035
  hasChildren: __props.item.hasChildren,
31907
32036
  level: __props.item.level
31908
32037
  }, void 0, true)]),
31909
- _ctx.$slots.trailing ? (openBlock(), createElementBlock("div", _hoisted_5, [renderSlot(_ctx.$slots, "trailing", {
32038
+ unref(hasSlotContent)(unref(slots).trailing) ? (openBlock(), createElementBlock("div", _hoisted_5, [renderSlot(_ctx.$slots, "trailing", {
31910
32039
  isExpanded,
31911
32040
  isSelected
31912
32041
  }, void 0, true)])) : createCommentVNode("", true)
@@ -31921,7 +32050,7 @@ var SkTreeItem_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31921
32050
  ]);
31922
32051
  };
31923
32052
  }
31924
- }), [["__scopeId", "data-v-ba341490"]]);
32053
+ }), [["__scopeId", "data-v-adb75a1a"]]);
31925
32054
  //#endregion
31926
32055
  //#region src/components/TreeView/SkTreeView.vue
31927
32056
  var SkTreeView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -31946,6 +32075,7 @@ var SkTreeView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31946
32075
  emits: ["update:modelValue"],
31947
32076
  setup(__props) {
31948
32077
  const props = __props;
32078
+ const rekaModelValue = computed(() => props.modelValue);
31949
32079
  function getAllKeys(items) {
31950
32080
  const keys = [];
31951
32081
  for (const item of items) {
@@ -31968,7 +32098,7 @@ var SkTreeView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31968
32098
  return openBlock(), createBlock(unref(TreeRoot_default), {
31969
32099
  items: __props.items,
31970
32100
  "get-key": __props.getKey,
31971
- "model-value": __props.modelValue,
32101
+ "model-value": rekaModelValue.value,
31972
32102
  multiple: __props.multiple,
31973
32103
  "propagate-select": __props.propagateSelect,
31974
32104
  "default-expanded": expandedKeys.value,
@@ -31990,7 +32120,7 @@ var SkTreeView_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
31990
32120
  ]);
31991
32121
  };
31992
32122
  }
31993
- }), [["__scopeId", "data-v-717b6450"]]);
32123
+ }), [["__scopeId", "data-v-39b36ab8"]]);
31994
32124
  //#endregion
31995
32125
  //#region src/components/Theme/SkTheme.vue?vue&type=script&setup=true&lang.ts
31996
32126
  var _hoisted_1 = ["data-scheme"];