@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.
- package/dist/components/Card/SkCard.vue.d.ts +13 -1
- package/dist/components/ColorPicker/SkColorPicker.vue.d.ts +29 -0
- package/dist/components/ColorPicker/index.d.ts +2 -0
- package/dist/components/ColorPicker/types.d.ts +4 -0
- package/dist/components/ContextMenu/SkContextMenu.vue.d.ts +25 -0
- package/dist/components/ContextMenu/SkContextMenuCheckboxItem.vue.d.ts +28 -0
- package/dist/components/ContextMenu/SkContextMenuItem.vue.d.ts +26 -0
- package/dist/components/ContextMenu/SkContextMenuLabel.vue.d.ts +17 -0
- package/dist/components/ContextMenu/SkContextMenuRadioGroup.vue.d.ts +26 -0
- package/dist/components/ContextMenu/SkContextMenuRadioItem.vue.d.ts +23 -0
- package/dist/components/ContextMenu/SkContextMenuSeparator.vue.d.ts +2 -0
- package/dist/components/ContextMenu/SkContextMenuSubmenu.vue.d.ts +24 -0
- package/dist/components/ContextMenu/index.d.ts +9 -0
- package/dist/components/ContextMenu/types.d.ts +2 -0
- package/dist/components/Dropdown/SkDropdown.vue.d.ts +1 -1
- package/dist/components/Dropdown/SkDropdownCheckboxItem.vue.d.ts +28 -0
- package/dist/components/Dropdown/SkDropdownMenuLabel.vue.d.ts +17 -0
- package/dist/components/Dropdown/SkDropdownRadioGroup.vue.d.ts +26 -0
- package/dist/components/Dropdown/SkDropdownRadioItem.vue.d.ts +23 -0
- package/dist/components/Dropdown/index.d.ts +4 -0
- package/dist/components/Panel/SkPanel.vue.d.ts +15 -1
- package/dist/components/Panel/types.d.ts +1 -0
- package/dist/components/Popover/SkPopover.vue.d.ts +1 -1
- package/dist/components/ScrollArea/SkScrollArea.vue.d.ts +31 -0
- package/dist/components/ScrollArea/index.d.ts +2 -0
- package/dist/components/ScrollArea/types.d.ts +4 -0
- package/dist/components/Select/SkSelect.vue.d.ts +61 -0
- package/dist/components/Select/SkSelectItem.vue.d.ts +134 -0
- package/dist/components/Select/SkSelectSeparator.vue.d.ts +2 -0
- package/dist/components/Select/index.d.ts +4 -0
- package/dist/components/Select/types.d.ts +3 -0
- package/dist/components/Sidebar/SkSidebar.vue.d.ts +8 -1
- package/dist/components/Sidebar/types.d.ts +1 -0
- package/dist/components/Skeleton/SkSkeleton.vue.d.ts +2 -2
- package/dist/components/Splitter/SkSplitter.vue.d.ts +29 -0
- package/dist/components/Splitter/SkSplitterHandle.vue.d.ts +7 -0
- package/dist/components/Splitter/SkSplitterPanel.vue.d.ts +30 -0
- package/dist/components/Splitter/index.d.ts +4 -0
- package/dist/components/Splitter/types.d.ts +3 -0
- package/dist/components/Toolbar/SkToolbar.vue.d.ts +31 -0
- package/dist/components/Toolbar/SkToolbarButton.vue.d.ts +22 -0
- package/dist/components/Toolbar/SkToolbarSeparator.vue.d.ts +2 -0
- package/dist/components/Toolbar/SkToolbarToggleGroup.vue.d.ts +31 -0
- package/dist/components/Toolbar/SkToolbarToggleItem.vue.d.ts +23 -0
- package/dist/components/Toolbar/index.d.ts +6 -0
- package/dist/components/Toolbar/types.d.ts +5 -0
- package/dist/components/Tooltip/SkTooltip.vue.d.ts +1 -1
- package/dist/components/TreeView/SkTreeItem.vue.d.ts +39 -0
- package/dist/components/TreeView/SkTreeView.vue.d.ts +31 -0
- package/dist/components/TreeView/index.d.ts +3 -0
- package/dist/components/TreeView/types.d.ts +3 -0
- package/dist/index.d.ts +61 -0
- package/dist/sleekspace-ui.css +1644 -65
- package/dist/sleekspace-ui.es.js +17444 -6063
- package/dist/sleekspace-ui.umd.js +17426 -6045
- package/package.json +2 -1
- package/src/components/Card/SkCard.vue +17 -1
- package/src/components/ColorPicker/SkColorPicker.vue +355 -0
- package/src/components/ColorPicker/index.ts +6 -0
- package/src/components/ColorPicker/types.ts +11 -0
- package/src/components/ContextMenu/SkContextMenu.vue +83 -0
- package/src/components/ContextMenu/SkContextMenuCheckboxItem.vue +72 -0
- package/src/components/ContextMenu/SkContextMenuItem.vue +49 -0
- package/src/components/ContextMenu/SkContextMenuLabel.vue +17 -0
- package/src/components/ContextMenu/SkContextMenuRadioGroup.vue +36 -0
- package/src/components/ContextMenu/SkContextMenuRadioItem.vue +53 -0
- package/src/components/ContextMenu/SkContextMenuSeparator.vue +21 -0
- package/src/components/ContextMenu/SkContextMenuSubmenu.vue +94 -0
- package/src/components/ContextMenu/index.ts +15 -0
- package/src/components/ContextMenu/types.ts +9 -0
- package/src/components/Dropdown/SkDropdown.vue +1 -1
- package/src/components/Dropdown/SkDropdownCheckboxItem.vue +72 -0
- package/src/components/Dropdown/SkDropdownMenuItem.vue +1 -1
- package/src/components/Dropdown/SkDropdownMenuLabel.vue +17 -0
- package/src/components/Dropdown/SkDropdownRadioGroup.vue +36 -0
- package/src/components/Dropdown/SkDropdownRadioItem.vue +53 -0
- package/src/components/Dropdown/SkDropdownSubmenu.vue +2 -2
- package/src/components/Dropdown/index.ts +4 -0
- package/src/components/Panel/SkPanel.vue +29 -4
- package/src/components/Panel/types.ts +3 -0
- package/src/components/ScrollArea/SkScrollArea.vue +87 -0
- package/src/components/ScrollArea/index.ts +8 -0
- package/src/components/ScrollArea/types.ts +11 -0
- package/src/components/Select/SkSelect.vue +210 -0
- package/src/components/Select/SkSelectItem.vue +112 -0
- package/src/components/Select/SkSelectSeparator.vue +40 -0
- package/src/components/Select/index.ts +10 -0
- package/src/components/Select/types.ts +10 -0
- package/src/components/Sidebar/SkSidebar.vue +39 -2
- package/src/components/Sidebar/types.ts +2 -0
- package/src/components/Splitter/SkSplitter.vue +65 -0
- package/src/components/Splitter/SkSplitterHandle.vue +40 -0
- package/src/components/Splitter/SkSplitterPanel.vue +45 -0
- package/src/components/Splitter/index.ts +10 -0
- package/src/components/Splitter/types.ts +10 -0
- package/src/components/Toolbar/SkToolbar.vue +69 -0
- package/src/components/Toolbar/SkToolbarButton.vue +36 -0
- package/src/components/Toolbar/SkToolbarSeparator.vue +15 -0
- package/src/components/Toolbar/SkToolbarToggleGroup.vue +49 -0
- package/src/components/Toolbar/SkToolbarToggleItem.vue +37 -0
- package/src/components/Toolbar/index.ts +12 -0
- package/src/components/Toolbar/types.ts +12 -0
- package/src/components/TreeView/SkTreeItem.vue +84 -0
- package/src/components/TreeView/SkTreeView.vue +120 -0
- package/src/components/TreeView/index.ts +9 -0
- package/src/components/TreeView/types.ts +10 -0
- package/src/global.d.ts +22 -0
- package/src/index.ts +110 -0
- package/src/styles/components/_card.scss +45 -9
- package/src/styles/components/_color-picker.scss +552 -0
- package/src/styles/components/_index.scss +6 -0
- package/src/styles/components/_listbox.scss +1 -0
- package/src/styles/components/_menu.scss +52 -3
- package/src/styles/components/_panel.scss +119 -13
- package/src/styles/components/_scroll-area.scss +120 -0
- package/src/styles/components/_select.scss +439 -0
- package/src/styles/components/_sidebar.scss +83 -4
- package/src/styles/components/_splitter.scss +136 -0
- package/src/styles/components/_toolbar.scss +296 -0
- package/src/styles/components/_tree-view.scss +187 -0
- 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
|
|