@skewedaspect/sleekspace-ui 0.5.1 → 0.7.0

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 (121) hide show
  1. package/dist/components/Card/SkCard.vue.d.ts +13 -1
  2. package/dist/components/ColorPicker/SkColorPicker.vue.d.ts +29 -0
  3. package/dist/components/ColorPicker/index.d.ts +2 -0
  4. package/dist/components/ColorPicker/types.d.ts +4 -0
  5. package/dist/components/ContextMenu/SkContextMenu.vue.d.ts +25 -0
  6. package/dist/components/ContextMenu/SkContextMenuCheckboxItem.vue.d.ts +28 -0
  7. package/dist/components/ContextMenu/SkContextMenuItem.vue.d.ts +26 -0
  8. package/dist/components/ContextMenu/SkContextMenuLabel.vue.d.ts +17 -0
  9. package/dist/components/ContextMenu/SkContextMenuRadioGroup.vue.d.ts +26 -0
  10. package/dist/components/ContextMenu/SkContextMenuRadioItem.vue.d.ts +23 -0
  11. package/dist/components/ContextMenu/SkContextMenuSeparator.vue.d.ts +2 -0
  12. package/dist/components/ContextMenu/SkContextMenuSubmenu.vue.d.ts +24 -0
  13. package/dist/components/ContextMenu/index.d.ts +9 -0
  14. package/dist/components/ContextMenu/types.d.ts +2 -0
  15. package/dist/components/Dropdown/SkDropdown.vue.d.ts +1 -1
  16. package/dist/components/Dropdown/SkDropdownCheckboxItem.vue.d.ts +28 -0
  17. package/dist/components/Dropdown/SkDropdownMenuLabel.vue.d.ts +17 -0
  18. package/dist/components/Dropdown/SkDropdownRadioGroup.vue.d.ts +26 -0
  19. package/dist/components/Dropdown/SkDropdownRadioItem.vue.d.ts +23 -0
  20. package/dist/components/Dropdown/index.d.ts +4 -0
  21. package/dist/components/Panel/SkPanel.vue.d.ts +15 -1
  22. package/dist/components/Panel/types.d.ts +1 -0
  23. package/dist/components/Popover/SkPopover.vue.d.ts +1 -1
  24. package/dist/components/ScrollArea/SkScrollArea.vue.d.ts +31 -0
  25. package/dist/components/ScrollArea/index.d.ts +2 -0
  26. package/dist/components/ScrollArea/types.d.ts +4 -0
  27. package/dist/components/Select/SkSelect.vue.d.ts +61 -0
  28. package/dist/components/Select/SkSelectItem.vue.d.ts +134 -0
  29. package/dist/components/Select/SkSelectSeparator.vue.d.ts +2 -0
  30. package/dist/components/Select/index.d.ts +4 -0
  31. package/dist/components/Select/types.d.ts +3 -0
  32. package/dist/components/Sidebar/SkSidebar.vue.d.ts +8 -1
  33. package/dist/components/Sidebar/types.d.ts +1 -0
  34. package/dist/components/Skeleton/SkSkeleton.vue.d.ts +2 -2
  35. package/dist/components/Splitter/SkSplitter.vue.d.ts +29 -0
  36. package/dist/components/Splitter/SkSplitterHandle.vue.d.ts +7 -0
  37. package/dist/components/Splitter/SkSplitterPanel.vue.d.ts +30 -0
  38. package/dist/components/Splitter/index.d.ts +4 -0
  39. package/dist/components/Splitter/types.d.ts +3 -0
  40. package/dist/components/Toolbar/SkToolbar.vue.d.ts +31 -0
  41. package/dist/components/Toolbar/SkToolbarButton.vue.d.ts +22 -0
  42. package/dist/components/Toolbar/SkToolbarSeparator.vue.d.ts +2 -0
  43. package/dist/components/Toolbar/SkToolbarToggleGroup.vue.d.ts +31 -0
  44. package/dist/components/Toolbar/SkToolbarToggleItem.vue.d.ts +23 -0
  45. package/dist/components/Toolbar/index.d.ts +6 -0
  46. package/dist/components/Toolbar/types.d.ts +5 -0
  47. package/dist/components/Tooltip/SkTooltip.vue.d.ts +1 -1
  48. package/dist/components/TreeView/SkTreeItem.vue.d.ts +39 -0
  49. package/dist/components/TreeView/SkTreeView.vue.d.ts +31 -0
  50. package/dist/components/TreeView/index.d.ts +3 -0
  51. package/dist/components/TreeView/types.d.ts +3 -0
  52. package/dist/index.d.ts +61 -0
  53. package/dist/sleekspace-ui.css +1644 -65
  54. package/dist/sleekspace-ui.es.js +17444 -6063
  55. package/dist/sleekspace-ui.umd.js +17426 -6045
  56. package/package.json +2 -1
  57. package/src/components/Card/SkCard.vue +17 -1
  58. package/src/components/ColorPicker/SkColorPicker.vue +355 -0
  59. package/src/components/ColorPicker/index.ts +6 -0
  60. package/src/components/ColorPicker/types.ts +11 -0
  61. package/src/components/ContextMenu/SkContextMenu.vue +83 -0
  62. package/src/components/ContextMenu/SkContextMenuCheckboxItem.vue +72 -0
  63. package/src/components/ContextMenu/SkContextMenuItem.vue +49 -0
  64. package/src/components/ContextMenu/SkContextMenuLabel.vue +17 -0
  65. package/src/components/ContextMenu/SkContextMenuRadioGroup.vue +36 -0
  66. package/src/components/ContextMenu/SkContextMenuRadioItem.vue +53 -0
  67. package/src/components/ContextMenu/SkContextMenuSeparator.vue +21 -0
  68. package/src/components/ContextMenu/SkContextMenuSubmenu.vue +94 -0
  69. package/src/components/ContextMenu/index.ts +15 -0
  70. package/src/components/ContextMenu/types.ts +9 -0
  71. package/src/components/Dropdown/SkDropdown.vue +1 -1
  72. package/src/components/Dropdown/SkDropdownCheckboxItem.vue +72 -0
  73. package/src/components/Dropdown/SkDropdownMenuItem.vue +1 -1
  74. package/src/components/Dropdown/SkDropdownMenuLabel.vue +17 -0
  75. package/src/components/Dropdown/SkDropdownRadioGroup.vue +36 -0
  76. package/src/components/Dropdown/SkDropdownRadioItem.vue +53 -0
  77. package/src/components/Dropdown/SkDropdownSubmenu.vue +2 -2
  78. package/src/components/Dropdown/index.ts +4 -0
  79. package/src/components/Panel/SkPanel.vue +29 -4
  80. package/src/components/Panel/types.ts +3 -0
  81. package/src/components/ScrollArea/SkScrollArea.vue +87 -0
  82. package/src/components/ScrollArea/index.ts +8 -0
  83. package/src/components/ScrollArea/types.ts +11 -0
  84. package/src/components/Select/SkSelect.vue +210 -0
  85. package/src/components/Select/SkSelectItem.vue +112 -0
  86. package/src/components/Select/SkSelectSeparator.vue +40 -0
  87. package/src/components/Select/index.ts +10 -0
  88. package/src/components/Select/types.ts +10 -0
  89. package/src/components/Sidebar/SkSidebar.vue +39 -2
  90. package/src/components/Sidebar/types.ts +2 -0
  91. package/src/components/Splitter/SkSplitter.vue +65 -0
  92. package/src/components/Splitter/SkSplitterHandle.vue +40 -0
  93. package/src/components/Splitter/SkSplitterPanel.vue +45 -0
  94. package/src/components/Splitter/index.ts +10 -0
  95. package/src/components/Splitter/types.ts +10 -0
  96. package/src/components/Toolbar/SkToolbar.vue +69 -0
  97. package/src/components/Toolbar/SkToolbarButton.vue +36 -0
  98. package/src/components/Toolbar/SkToolbarSeparator.vue +15 -0
  99. package/src/components/Toolbar/SkToolbarToggleGroup.vue +49 -0
  100. package/src/components/Toolbar/SkToolbarToggleItem.vue +37 -0
  101. package/src/components/Toolbar/index.ts +12 -0
  102. package/src/components/Toolbar/types.ts +12 -0
  103. package/src/components/TreeView/SkTreeItem.vue +84 -0
  104. package/src/components/TreeView/SkTreeView.vue +120 -0
  105. package/src/components/TreeView/index.ts +9 -0
  106. package/src/components/TreeView/types.ts +10 -0
  107. package/src/global.d.ts +22 -0
  108. package/src/index.ts +110 -0
  109. package/src/styles/components/_card.scss +45 -9
  110. package/src/styles/components/_color-picker.scss +552 -0
  111. package/src/styles/components/_index.scss +6 -0
  112. package/src/styles/components/_listbox.scss +1 -0
  113. package/src/styles/components/_menu.scss +52 -3
  114. package/src/styles/components/_panel.scss +119 -13
  115. package/src/styles/components/_scroll-area.scss +120 -0
  116. package/src/styles/components/_select.scss +439 -0
  117. package/src/styles/components/_sidebar.scss +83 -4
  118. package/src/styles/components/_splitter.scss +136 -0
  119. package/src/styles/components/_toolbar.scss +296 -0
  120. package/src/styles/components/_tree-view.scss +187 -0
  121. package/web-types.json +1244 -197
@@ -0,0 +1,69 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - Toolbar Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <ToolbarRoot :orientation="orientation" :class="classes" :style="customColorStyles">
7
+ <slot />
8
+ </ToolbarRoot>
9
+ </template>
10
+
11
+ <!--------------------------------------------------------------------------------------------------------------------->
12
+
13
+ <style lang="scss" scoped>
14
+ // Component styles are in /src/styles/components/_toolbar.scss
15
+ </style>
16
+
17
+ <!--------------------------------------------------------------------------------------------------------------------->
18
+
19
+ <script setup lang="ts">
20
+ import { computed, toRef } from 'vue';
21
+ import { ToolbarRoot } from 'reka-ui';
22
+
23
+ // Types
24
+ import type { SkToolbarCorner, SkToolbarKind, SkToolbarOrientation } from './types';
25
+
26
+ // Composables
27
+ import { useCustomColors } from '@/composables/useCustomColors';
28
+
29
+ //------------------------------------------------------------------------------------------------------------------
30
+
31
+ export interface SkToolbarComponentProps
32
+ {
33
+ kind ?: SkToolbarKind;
34
+ orientation ?: SkToolbarOrientation;
35
+ corners ?: SkToolbarCorner[];
36
+ baseColor ?: string;
37
+ textColor ?: string;
38
+ }
39
+
40
+ //------------------------------------------------------------------------------------------------------------------
41
+
42
+ const props = withDefaults(defineProps<SkToolbarComponentProps>(), {
43
+ kind: 'neutral',
44
+ orientation: 'horizontal',
45
+ corners: () => [ 'top-left', 'top-right', 'bottom-right', 'bottom-left' ],
46
+ baseColor: undefined,
47
+ textColor: undefined,
48
+ });
49
+
50
+ //------------------------------------------------------------------------------------------------------------------
51
+
52
+ const customColorStyles = useCustomColors(
53
+ 'toolbar',
54
+ toRef(() => props.baseColor),
55
+ toRef(() => props.textColor)
56
+ );
57
+
58
+ const classes = computed(() => ({
59
+ 'sk-toolbar': true,
60
+ [`sk-${ props.kind }`]: true,
61
+ [`sk-${ props.orientation }`]: true,
62
+ 'sk-cut-top-left': props.corners.includes('top-left'),
63
+ 'sk-cut-top-right': props.corners.includes('top-right'),
64
+ 'sk-cut-bottom-right': props.corners.includes('bottom-right'),
65
+ 'sk-cut-bottom-left': props.corners.includes('bottom-left'),
66
+ }));
67
+ </script>
68
+
69
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,36 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - ToolbarButton Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <ToolbarButton class="sk-toolbar-button" :disabled="disabled">
7
+ <slot />
8
+ </ToolbarButton>
9
+ </template>
10
+
11
+ <!--------------------------------------------------------------------------------------------------------------------->
12
+
13
+ <style lang="scss" scoped>
14
+ // Component styles are in /src/styles/components/_toolbar.scss
15
+ </style>
16
+
17
+ <!--------------------------------------------------------------------------------------------------------------------->
18
+
19
+ <script setup lang="ts">
20
+ import { ToolbarButton } from 'reka-ui';
21
+
22
+ //------------------------------------------------------------------------------------------------------------------
23
+
24
+ export interface SkToolbarButtonComponentProps
25
+ {
26
+ disabled ?: boolean;
27
+ }
28
+
29
+ //------------------------------------------------------------------------------------------------------------------
30
+
31
+ withDefaults(defineProps<SkToolbarButtonComponentProps>(), {
32
+ disabled: false,
33
+ });
34
+ </script>
35
+
36
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,15 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - ToolbarSeparator Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <ToolbarSeparator class="sk-toolbar-separator" />
7
+ </template>
8
+
9
+ <!--------------------------------------------------------------------------------------------------------------------->
10
+
11
+ <script setup lang="ts">
12
+ import { ToolbarSeparator } from 'reka-ui';
13
+ </script>
14
+
15
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,49 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - ToolbarToggleGroup Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <ToolbarToggleGroup
7
+ class="sk-toolbar-toggle-group"
8
+ :model-value="modelValue"
9
+ :type="type"
10
+ :disabled="disabled"
11
+ @update:model-value="$emit('update:modelValue', $event as string | string[])"
12
+ >
13
+ <slot />
14
+ </ToolbarToggleGroup>
15
+ </template>
16
+
17
+ <!--------------------------------------------------------------------------------------------------------------------->
18
+
19
+ <script setup lang="ts">
20
+ import { ToolbarToggleGroup } from 'reka-ui';
21
+
22
+ // Types
23
+ import type { SkToolbarToggleType } from './types';
24
+
25
+ //------------------------------------------------------------------------------------------------------------------
26
+
27
+ export interface SkToolbarToggleGroupComponentProps
28
+ {
29
+ modelValue ?: string | string[];
30
+ type ?: SkToolbarToggleType;
31
+ disabled ?: boolean;
32
+ }
33
+
34
+ //------------------------------------------------------------------------------------------------------------------
35
+
36
+ withDefaults(defineProps<SkToolbarToggleGroupComponentProps>(), {
37
+ modelValue: undefined,
38
+ type: 'single',
39
+ disabled: false,
40
+ });
41
+
42
+ //------------------------------------------------------------------------------------------------------------------
43
+
44
+ defineEmits<{
45
+ 'update:modelValue' : [value : string | string[]];
46
+ }>();
47
+ </script>
48
+
49
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,37 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - ToolbarToggleItem Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <ToolbarToggleItem class="sk-toolbar-toggle-item" :value="value" :disabled="disabled">
7
+ <slot />
8
+ </ToolbarToggleItem>
9
+ </template>
10
+
11
+ <!--------------------------------------------------------------------------------------------------------------------->
12
+
13
+ <style lang="scss" scoped>
14
+ // Component styles are in /src/styles/components/_toolbar.scss
15
+ </style>
16
+
17
+ <!--------------------------------------------------------------------------------------------------------------------->
18
+
19
+ <script setup lang="ts">
20
+ import { ToolbarToggleItem } from 'reka-ui';
21
+
22
+ //------------------------------------------------------------------------------------------------------------------
23
+
24
+ export interface SkToolbarToggleItemComponentProps
25
+ {
26
+ value : string;
27
+ disabled ?: boolean;
28
+ }
29
+
30
+ //------------------------------------------------------------------------------------------------------------------
31
+
32
+ withDefaults(defineProps<SkToolbarToggleItemComponentProps>(), {
33
+ disabled: false,
34
+ });
35
+ </script>
36
+
37
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,12 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Toolbar Component Exports
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ export { default as SkToolbar } from './SkToolbar.vue';
6
+ export { default as SkToolbarButton } from './SkToolbarButton.vue';
7
+ export { default as SkToolbarSeparator } from './SkToolbarSeparator.vue';
8
+ export { default as SkToolbarToggleGroup } from './SkToolbarToggleGroup.vue';
9
+ export { default as SkToolbarToggleItem } from './SkToolbarToggleItem.vue';
10
+ export type { SkToolbarCorner, SkToolbarKind, SkToolbarOrientation, SkToolbarToggleType } from './types';
11
+
12
+ //----------------------------------------------------------------------------------------------------------------------
@@ -0,0 +1,12 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Toolbar Component Types
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ import type { ComponentKind } from '@/types';
6
+
7
+ export type SkToolbarKind = ComponentKind;
8
+ export type SkToolbarOrientation = 'horizontal' | 'vertical';
9
+ export type SkToolbarToggleType = 'single' | 'multiple';
10
+ export type SkToolbarCorner = 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';
11
+
12
+ //----------------------------------------------------------------------------------------------------------------------
@@ -0,0 +1,84 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - TreeItem Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <TreeItem
7
+ v-slot="{ isExpanded, isSelected }"
8
+ class="sk-tree-item"
9
+ v-bind="item.bind"
10
+ :value="item.value"
11
+ :level="item.level"
12
+ :disabled="disabled"
13
+ :data-level="item.level"
14
+ :style="{ '--sk-tree-level': item.level, marginLeft: `calc(${ item.level } * var(--sk-tree-indent))` }"
15
+ >
16
+ <!-- Expand chevron -->
17
+ <div v-if="showChevron && item.hasChildren" :class="['sk-tree-item-chevron', { 'sk-expanded': isExpanded }]">
18
+ <svg
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ viewBox="0 0 24 24"
21
+ fill="none"
22
+ stroke="currentColor"
23
+ stroke-width="2"
24
+ stroke-linecap="square"
25
+ stroke-linejoin="miter"
26
+ style="width: 0.75rem; height: 0.75rem;"
27
+ >
28
+ <polyline points="9 6 15 12 9 18" />
29
+ </svg>
30
+ </div>
31
+ <!-- Spacer for leaf nodes when chevron is shown (keeps text aligned with branches) -->
32
+ <div v-else-if="showChevron" class="sk-tree-item-chevron-spacer" />
33
+
34
+ <!-- Leading slot (icons, checkboxes, etc.) -->
35
+ <div v-if="$slots.leading" class="sk-tree-item-leading">
36
+ <slot name="leading" :is-expanded="isExpanded" :is-selected="isSelected" />
37
+ </div>
38
+
39
+ <!-- Content -->
40
+ <div class="sk-tree-item-content">
41
+ <slot
42
+ :is-expanded="isExpanded"
43
+ :is-selected="isSelected"
44
+ :has-children="item.hasChildren"
45
+ :level="item.level"
46
+ />
47
+ </div>
48
+
49
+ <!-- Trailing slot -->
50
+ <div v-if="$slots.trailing" class="sk-tree-item-trailing">
51
+ <slot name="trailing" :is-expanded="isExpanded" :is-selected="isSelected" />
52
+ </div>
53
+ </TreeItem>
54
+ </template>
55
+
56
+ <!--------------------------------------------------------------------------------------------------------------------->
57
+
58
+ <style lang="scss" scoped>
59
+ // Component styles are in /src/styles/components/_tree-view.scss
60
+ </style>
61
+
62
+ <!--------------------------------------------------------------------------------------------------------------------->
63
+
64
+ <script setup lang="ts">
65
+ import { type FlattenedItem, TreeItem } from 'reka-ui';
66
+
67
+ //------------------------------------------------------------------------------------------------------------------
68
+
69
+ export interface SkTreeItemComponentProps
70
+ {
71
+ item : FlattenedItem<Record<string, unknown>>;
72
+ disabled ?: boolean;
73
+ showChevron ?: boolean;
74
+ }
75
+
76
+ //------------------------------------------------------------------------------------------------------------------
77
+
78
+ withDefaults(defineProps<SkTreeItemComponentProps>(), {
79
+ disabled: false,
80
+ showChevron: true,
81
+ });
82
+ </script>
83
+
84
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,120 @@
1
+ <!----------------------------------------------------------------------------------------------------------------------
2
+ - TreeView Component
3
+ --------------------------------------------------------------------------------------------------------------------->
4
+
5
+ <template>
6
+ <TreeRoot
7
+ :items="items"
8
+ :get-key="getKey"
9
+ :model-value="modelValue"
10
+ :multiple="multiple"
11
+ :propagate-select="propagateSelect"
12
+ :default-expanded="expandedKeys"
13
+ :class="classes"
14
+ :style="customColorStyles"
15
+ @update:model-value="$emit('update:modelValue', $event)"
16
+ >
17
+ <template #default="{ flattenItems }">
18
+ <slot :flatten-items="flattenItems" />
19
+ </template>
20
+ </TreeRoot>
21
+ </template>
22
+
23
+ <!--------------------------------------------------------------------------------------------------------------------->
24
+
25
+ <style lang="scss" scoped>
26
+ // Component styles are in /src/styles/components/_tree-view.scss
27
+ </style>
28
+
29
+ <!--------------------------------------------------------------------------------------------------------------------->
30
+
31
+ <script setup lang="ts" generic="T extends Record<string, unknown>">
32
+ import { computed, toRef } from 'vue';
33
+ import { TreeRoot } from 'reka-ui';
34
+
35
+ // Types
36
+ import type { SkTreeViewDefaultExpanded, SkTreeViewKind } from './types';
37
+
38
+ // Composables
39
+ import { useCustomColors } from '@/composables/useCustomColors';
40
+
41
+ //------------------------------------------------------------------------------------------------------------------
42
+
43
+ export interface SkTreeViewComponentProps
44
+ {
45
+ items : T[];
46
+ getKey : (item : T) => string;
47
+ modelValue ?: T | T[];
48
+ multiple ?: boolean;
49
+ propagateSelect ?: boolean;
50
+ kind ?: SkTreeViewKind;
51
+ defaultExpanded ?: SkTreeViewDefaultExpanded;
52
+ baseColor ?: string;
53
+ textColor ?: string;
54
+ }
55
+
56
+ //------------------------------------------------------------------------------------------------------------------
57
+
58
+ const props = withDefaults(defineProps<SkTreeViewComponentProps>(), {
59
+ modelValue: undefined,
60
+ multiple: false,
61
+ propagateSelect: false,
62
+ kind: 'neutral',
63
+ defaultExpanded: 'none',
64
+ baseColor: undefined,
65
+ textColor: undefined,
66
+ });
67
+
68
+ //------------------------------------------------------------------------------------------------------------------
69
+
70
+ defineEmits<{
71
+ 'update:modelValue' : [value : T | T[]];
72
+ }>();
73
+
74
+ //------------------------------------------------------------------------------------------------------------------
75
+
76
+ function getAllKeys(items : T[]) : string[]
77
+ {
78
+ const keys : string[] = [];
79
+ for(const item of items)
80
+ {
81
+ keys.push(props.getKey(item));
82
+ if(item.children && Array.isArray(item.children))
83
+ {
84
+ keys.push(...getAllKeys(item.children as T[]));
85
+ }
86
+ }
87
+
88
+ return keys;
89
+ }
90
+
91
+ //------------------------------------------------------------------------------------------------------------------
92
+
93
+ const expandedKeys = computed(() =>
94
+ {
95
+ if(props.defaultExpanded === 'all')
96
+ {
97
+ return getAllKeys(props.items);
98
+ }
99
+
100
+ if(props.defaultExpanded === 'none')
101
+ {
102
+ return [];
103
+ }
104
+
105
+ return props.defaultExpanded;
106
+ });
107
+
108
+ const customColorStyles = useCustomColors(
109
+ 'tree',
110
+ toRef(() => props.baseColor),
111
+ toRef(() => props.textColor)
112
+ );
113
+
114
+ const classes = computed(() => ({
115
+ 'sk-tree-view': true,
116
+ [`sk-${ props.kind }`]: true,
117
+ }));
118
+ </script>
119
+
120
+ <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,9 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // TreeView Component Exports
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ export { default as SkTreeItem } from './SkTreeItem.vue';
6
+ export { default as SkTreeView } from './SkTreeView.vue';
7
+ export type { SkTreeViewDefaultExpanded, SkTreeViewKind } from './types';
8
+
9
+ //----------------------------------------------------------------------------------------------------------------------
@@ -0,0 +1,10 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // TreeView Component Types
3
+ //----------------------------------------------------------------------------------------------------------------------
4
+
5
+ import type { ComponentKind } from '@/types';
6
+
7
+ export type SkTreeViewKind = ComponentKind;
8
+ export type SkTreeViewDefaultExpanded = 'all' | 'none' | string[];
9
+
10
+ //----------------------------------------------------------------------------------------------------------------------
package/src/global.d.ts CHANGED
@@ -29,9 +29,19 @@ declare module '@vue/runtime-core' {
29
29
  SkCard: DefineComponent<import('./components/Card/SkCard.vue').SkCardComponentProps>;
30
30
  SkCheckbox: DefineComponent<import('./components/Checkbox/SkCheckbox.vue').SkCheckboxComponentProps>;
31
31
  SkCollapsible: DefineComponent<import('./components/Collapsible/SkCollapsible.vue').SkCollapsibleComponentProps>;
32
+ SkColorPicker: DefineComponent<import('./components/ColorPicker/SkColorPicker.vue').SkColorPickerComponentProps>;
33
+ SkContextMenu: DefineComponent<import('./components/ContextMenu/SkContextMenu.vue').SkContextMenuComponentProps>;
34
+ SkContextMenuCheckboxItem: DefineComponent<import('./components/ContextMenu/SkContextMenuCheckboxItem.vue').SkContextMenuCheckboxItemComponentProps>;
35
+ SkContextMenuItem: DefineComponent<import('./components/ContextMenu/SkContextMenuItem.vue').SkContextMenuItemComponentProps>;
36
+ SkContextMenuRadioGroup: DefineComponent<import('./components/ContextMenu/SkContextMenuRadioGroup.vue').SkContextMenuRadioGroupComponentProps>;
37
+ SkContextMenuRadioItem: DefineComponent<import('./components/ContextMenu/SkContextMenuRadioItem.vue').SkContextMenuRadioItemComponentProps>;
38
+ SkContextMenuSubmenu: DefineComponent<import('./components/ContextMenu/SkContextMenuSubmenu.vue').SkContextMenuSubmenuComponentProps>;
32
39
  SkDivider: DefineComponent<import('./components/Divider/SkDivider.vue').SkDividerComponentProps>;
33
40
  SkDropdown: DefineComponent<import('./components/Dropdown/SkDropdown.vue').SkDropdownComponentProps>;
41
+ SkDropdownCheckboxItem: DefineComponent<import('./components/Dropdown/SkDropdownCheckboxItem.vue').SkDropdownCheckboxItemComponentProps>;
34
42
  SkDropdownMenuItem: DefineComponent<import('./components/Dropdown/SkDropdownMenuItem.vue').SkDropdownMenuItemComponentProps>;
43
+ SkDropdownRadioGroup: DefineComponent<import('./components/Dropdown/SkDropdownRadioGroup.vue').SkDropdownRadioGroupComponentProps>;
44
+ SkDropdownRadioItem: DefineComponent<import('./components/Dropdown/SkDropdownRadioItem.vue').SkDropdownRadioItemComponentProps>;
35
45
  SkDropdownSubmenu: DefineComponent<import('./components/Dropdown/SkDropdownSubmenu.vue').SkDropdownSubmenuComponentProps>;
36
46
  SkField: DefineComponent<import('./components/Field/SkField.vue').SkFieldComponentProps>;
37
47
  SkGroup: DefineComponent<import('./components/Group/SkGroup.vue').SkGroupComponentProps>;
@@ -49,12 +59,18 @@ declare module '@vue/runtime-core' {
49
59
  SkProgress: DefineComponent<import('./components/Progress/SkProgress.vue').SkProgressComponentProps>;
50
60
  SkRadio: DefineComponent<import('./components/Radio/SkRadio.vue').SkRadioComponentProps>;
51
61
  SkRadioGroup: DefineComponent<import('./components/Radio/SkRadioGroup.vue').SkRadioGroupComponentProps>;
62
+ SkScrollArea: DefineComponent<import('./components/ScrollArea/SkScrollArea.vue').SkScrollAreaComponentProps>;
63
+ SkSelect: DefineComponent<import('./components/Select/SkSelect.vue').SkSelectComponentProps>;
64
+ SkSelectItem: DefineComponent<import('./components/Select/SkSelectItem.vue').SkSelectItemComponentProps>;
52
65
  SkSidebar: DefineComponent<import('./components/Sidebar/SkSidebar.vue').SkSidebarComponentProps>;
53
66
  SkSidebarItem: DefineComponent<import('./components/Sidebar/SkSidebarItem.vue').SkSidebarItemComponentProps>;
54
67
  SkSidebarSection: DefineComponent<import('./components/Sidebar/SkSidebarSection.vue').SkSidebarSectionComponentProps>;
55
68
  SkSkeleton: DefineComponent<import('./components/Skeleton/SkSkeleton.vue').SkSkeletonComponentProps>;
56
69
  SkSlider: DefineComponent<import('./components/Slider/SkSlider.vue').SkSliderComponentProps>;
57
70
  SkSpinner: DefineComponent<import('./components/Spinner/SkSpinner.vue').SkSpinnerComponentProps>;
71
+ SkSplitter: DefineComponent<import('./components/Splitter/SkSplitter.vue').SkSplitterComponentProps>;
72
+ SkSplitterHandle: DefineComponent<import('./components/Splitter/SkSplitterHandle.vue').SkSplitterHandleComponentProps>;
73
+ SkSplitterPanel: DefineComponent<import('./components/Splitter/SkSplitterPanel.vue').SkSplitterPanelComponentProps>;
58
74
  SkSwitch: DefineComponent<import('./components/Switch/SkSwitch.vue').SkSwitchComponentProps>;
59
75
  SkTab: DefineComponent<import('./components/Tabs/SkTab.vue').SkTabComponentProps>;
60
76
  SkTable: DefineComponent<import('./components/Table/SkTable.vue').SkTableComponentProps>;
@@ -67,7 +83,13 @@ declare module '@vue/runtime-core' {
67
83
  SkTextarea: DefineComponent<import('./components/Textarea/SkTextarea.vue').SkTextareaComponentProps>;
68
84
  SkTheme: DefineComponent<import('./components/Theme/SkTheme.vue').SkThemeComponentProps>;
69
85
  SkToastProvider: DefineComponent<import('./components/Toast/SkToastProvider.vue').SkToastProviderComponentProps>;
86
+ SkToolbar: DefineComponent<import('./components/Toolbar/SkToolbar.vue').SkToolbarComponentProps>;
87
+ SkToolbarButton: DefineComponent<import('./components/Toolbar/SkToolbarButton.vue').SkToolbarButtonComponentProps>;
88
+ SkToolbarToggleGroup: DefineComponent<import('./components/Toolbar/SkToolbarToggleGroup.vue').SkToolbarToggleGroupComponentProps>;
89
+ SkToolbarToggleItem: DefineComponent<import('./components/Toolbar/SkToolbarToggleItem.vue').SkToolbarToggleItemComponentProps>;
70
90
  SkTooltip: DefineComponent<import('./components/Tooltip/SkTooltip.vue').SkTooltipComponentProps>;
91
+ SkTreeItem: DefineComponent<import('./components/TreeView/SkTreeItem.vue').SkTreeItemComponentProps>;
92
+ SkTreeView: DefineComponent<import('./components/TreeView/SkTreeView.vue').SkTreeViewComponentProps>;
71
93
  }
72
94
  }
73
95