@flux-ui/components 3.0.0-next.31 → 3.0.0-next.33
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/component/FluxFormTreeViewSelect.vue.d.ts +209 -0
- package/dist/component/FluxOverflowBar.vue.d.ts +2 -0
- package/dist/component/FluxTreeView.vue.d.ts +16 -0
- package/dist/component/index.d.ts +2 -0
- package/dist/composable/private/index.d.ts +2 -0
- package/dist/composable/private/useTreeView.d.ts +28 -0
- package/dist/index.css +258 -0
- package/dist/index.js +1661 -217
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/src/component/FluxCheckbox.vue +2 -2
- package/src/component/FluxFilterBar.vue +1 -0
- package/src/component/FluxFormSlider.vue +1 -1
- package/src/component/FluxFormTreeViewSelect.vue +359 -0
- package/src/component/FluxOverflowBar.vue +2 -2
- package/src/component/FluxPressable.vue +13 -12
- package/src/component/FluxSegmentedControl.vue +35 -8
- package/src/component/FluxTreeView.vue +116 -0
- package/src/component/index.ts +2 -0
- package/src/composable/private/index.ts +2 -0
- package/src/composable/private/useTreeView.ts +186 -0
- package/src/css/component/TreeView.module.scss +34 -0
- package/src/css/component/TreeViewSelect.module.scss +73 -0
- package/src/css/mixin/index.scss +1 -0
- package/src/css/mixin/tree-node.scss +94 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { FluxColor, FluxFormTreeViewSelectOption, FluxFormTreeViewSelectValue, FluxDirection, FluxAutoCompleteType, FluxIconName, FluxInputMask, FluxInputType } from '@flux-ui/types';
|
|
2
|
+
import { ComponentPublicInstance, nextTick, DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions, ComponentInternalInstance, VNodeProps, AllowedComponentProps, ComponentCustomProps, Slot, ComponentOptionsBase, GlobalComponents, GlobalDirectives, DebuggerEvent, WatchOptions, WatchStopHandle, ShallowUnwrapRef, ComponentCustomProperties, CreateComponentPublicInstanceWithMixins } from 'vue';
|
|
3
|
+
import { OnCleanup } from '@vue/reactivity';
|
|
4
|
+
type __VLS_Props = {
|
|
5
|
+
readonly disabled?: boolean;
|
|
6
|
+
readonly isMultiple?: boolean;
|
|
7
|
+
readonly isSearchable?: boolean;
|
|
8
|
+
readonly levelColors?: (FluxColor | string)[];
|
|
9
|
+
readonly options: FluxFormTreeViewSelectOption[];
|
|
10
|
+
readonly placeholder?: string;
|
|
11
|
+
};
|
|
12
|
+
type __VLS_PublicProps = {
|
|
13
|
+
modelValue: FluxFormTreeViewSelectValue;
|
|
14
|
+
} & __VLS_Props;
|
|
15
|
+
declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
16
|
+
"update:modelValue": (value: FluxFormTreeViewSelectValue) => any;
|
|
17
|
+
}, string, PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
18
|
+
"onUpdate:modelValue"?: (value: FluxFormTreeViewSelectValue) => any;
|
|
19
|
+
}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
20
|
+
anchor: {
|
|
21
|
+
$: ComponentInternalInstance;
|
|
22
|
+
$data: {};
|
|
23
|
+
$props: {
|
|
24
|
+
readonly tagName: keyof HTMLElementTagNameMap;
|
|
25
|
+
} & VNodeProps & AllowedComponentProps & ComponentCustomProps;
|
|
26
|
+
$attrs: {
|
|
27
|
+
[x: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
$refs: {
|
|
30
|
+
[x: string]: unknown;
|
|
31
|
+
};
|
|
32
|
+
$slots: Readonly<{
|
|
33
|
+
[name: string]: Slot<any>;
|
|
34
|
+
}>;
|
|
35
|
+
$root: ComponentPublicInstance | null;
|
|
36
|
+
$parent: ComponentPublicInstance | null;
|
|
37
|
+
$host: Element | null;
|
|
38
|
+
$emit: (event: string, ...args: any[]) => void;
|
|
39
|
+
$el: any;
|
|
40
|
+
$options: ComponentOptionsBase<Readonly<{
|
|
41
|
+
readonly tagName: keyof HTMLElementTagNameMap;
|
|
42
|
+
}> & Readonly<{}>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, {}, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & {
|
|
43
|
+
beforeCreate?: (() => void) | (() => void)[];
|
|
44
|
+
created?: (() => void) | (() => void)[];
|
|
45
|
+
beforeMount?: (() => void) | (() => void)[];
|
|
46
|
+
mounted?: (() => void) | (() => void)[];
|
|
47
|
+
beforeUpdate?: (() => void) | (() => void)[];
|
|
48
|
+
updated?: (() => void) | (() => void)[];
|
|
49
|
+
activated?: (() => void) | (() => void)[];
|
|
50
|
+
deactivated?: (() => void) | (() => void)[];
|
|
51
|
+
beforeDestroy?: (() => void) | (() => void)[];
|
|
52
|
+
beforeUnmount?: (() => void) | (() => void)[];
|
|
53
|
+
destroyed?: (() => void) | (() => void)[];
|
|
54
|
+
unmounted?: (() => void) | (() => void)[];
|
|
55
|
+
renderTracked?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[];
|
|
56
|
+
renderTriggered?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[];
|
|
57
|
+
errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
|
|
58
|
+
};
|
|
59
|
+
$forceUpdate: () => void;
|
|
60
|
+
$nextTick: typeof nextTick;
|
|
61
|
+
$watch<T extends string | ((
|
|
62
|
+
/** @type { [typeof AnchorPopup, typeof AnchorPopup, ] } */ ...args: any) => any)>(source: T, cb: T extends ((...args: any) => infer R) ? (...args: [R, R, OnCleanup]) => any : (...args: [any, any, OnCleanup]) => any, options?: WatchOptions): WatchStopHandle;
|
|
63
|
+
} & Readonly<{}> & Omit<Readonly<{
|
|
64
|
+
readonly tagName: keyof HTMLElementTagNameMap;
|
|
65
|
+
}> & Readonly<{}>, never> & ShallowUnwrapRef<{}> & {} & ComponentCustomProperties & {} & {
|
|
66
|
+
$slots: Readonly<{
|
|
67
|
+
default(): any;
|
|
68
|
+
}> & {
|
|
69
|
+
default(): any;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
anchorPopup: {
|
|
73
|
+
$: ComponentInternalInstance;
|
|
74
|
+
$data: {};
|
|
75
|
+
$props: Partial<{}> & Omit<{
|
|
76
|
+
readonly anchor?: ComponentPublicInstance | HTMLElement | null;
|
|
77
|
+
readonly direction?: FluxDirection;
|
|
78
|
+
readonly margin?: number;
|
|
79
|
+
readonly position?: "top" | "top-left" | "top-right" | "left" | "left-top" | "left-bottom" | "right" | "right-top" | "right-bottom" | "bottom" | "bottom-left" | "bottom-right";
|
|
80
|
+
readonly useAnchorWidth?: boolean;
|
|
81
|
+
} & VNodeProps & AllowedComponentProps & ComponentCustomProps, never>;
|
|
82
|
+
$attrs: {
|
|
83
|
+
[x: string]: unknown;
|
|
84
|
+
};
|
|
85
|
+
$refs: {
|
|
86
|
+
[x: string]: unknown;
|
|
87
|
+
} & {
|
|
88
|
+
popup: HTMLDivElement;
|
|
89
|
+
};
|
|
90
|
+
$slots: Readonly<{
|
|
91
|
+
[name: string]: Slot<any>;
|
|
92
|
+
}>;
|
|
93
|
+
$root: ComponentPublicInstance | null;
|
|
94
|
+
$parent: ComponentPublicInstance | null;
|
|
95
|
+
$host: Element | null;
|
|
96
|
+
$emit: (event: string, ...args: any[]) => void;
|
|
97
|
+
$el: HTMLDivElement;
|
|
98
|
+
$options: ComponentOptionsBase<Readonly<{
|
|
99
|
+
readonly anchor?: ComponentPublicInstance | HTMLElement | null;
|
|
100
|
+
readonly direction?: FluxDirection;
|
|
101
|
+
readonly margin?: number;
|
|
102
|
+
readonly position?: "top" | "top-left" | "top-right" | "left" | "left-top" | "left-bottom" | "right" | "right-top" | "right-bottom" | "bottom" | "bottom-left" | "bottom-right";
|
|
103
|
+
readonly useAnchorWidth?: boolean;
|
|
104
|
+
}> & Readonly<{}>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, {}, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & {
|
|
105
|
+
beforeCreate?: (() => void) | (() => void)[];
|
|
106
|
+
created?: (() => void) | (() => void)[];
|
|
107
|
+
beforeMount?: (() => void) | (() => void)[];
|
|
108
|
+
mounted?: (() => void) | (() => void)[];
|
|
109
|
+
beforeUpdate?: (() => void) | (() => void)[];
|
|
110
|
+
updated?: (() => void) | (() => void)[];
|
|
111
|
+
activated?: (() => void) | (() => void)[];
|
|
112
|
+
deactivated?: (() => void) | (() => void)[];
|
|
113
|
+
beforeDestroy?: (() => void) | (() => void)[];
|
|
114
|
+
beforeUnmount?: (() => void) | (() => void)[];
|
|
115
|
+
destroyed?: (() => void) | (() => void)[];
|
|
116
|
+
unmounted?: (() => void) | (() => void)[];
|
|
117
|
+
renderTracked?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[];
|
|
118
|
+
renderTriggered?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[];
|
|
119
|
+
errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
|
|
120
|
+
};
|
|
121
|
+
$forceUpdate: () => void;
|
|
122
|
+
$nextTick: typeof nextTick;
|
|
123
|
+
$watch<T extends string | ((
|
|
124
|
+
/** @type { [typeof AnchorPopup, typeof AnchorPopup, ] } */ ...args: any) => any)>(source: T, cb: T extends ((...args: any) => infer R) ? (...args: [R, R, OnCleanup]) => any : (...args: [any, any, OnCleanup]) => any, options?: WatchOptions): WatchStopHandle;
|
|
125
|
+
} & Readonly<{}> & Omit<Readonly<{
|
|
126
|
+
readonly anchor?: ComponentPublicInstance | HTMLElement | null;
|
|
127
|
+
readonly direction?: FluxDirection;
|
|
128
|
+
readonly margin?: number;
|
|
129
|
+
readonly position?: "top" | "top-left" | "top-right" | "left" | "left-top" | "left-bottom" | "right" | "right-top" | "right-bottom" | "bottom" | "bottom-left" | "bottom-right";
|
|
130
|
+
readonly useAnchorWidth?: boolean;
|
|
131
|
+
}> & Readonly<{}>, never> & ShallowUnwrapRef<{}> & {} & ComponentCustomProperties & {} & {
|
|
132
|
+
$slots: Readonly<{
|
|
133
|
+
default(): any;
|
|
134
|
+
}> & {
|
|
135
|
+
default(): any;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
searchInput: CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
139
|
+
modelValue?: object | string | number | null;
|
|
140
|
+
} & {
|
|
141
|
+
readonly autoComplete?: FluxAutoCompleteType;
|
|
142
|
+
readonly autoFocus?: boolean;
|
|
143
|
+
readonly iconLeading?: FluxIconName;
|
|
144
|
+
readonly iconTrailing?: FluxIconName;
|
|
145
|
+
readonly disabled?: boolean;
|
|
146
|
+
readonly isCondensed?: boolean;
|
|
147
|
+
readonly isLoading?: boolean;
|
|
148
|
+
readonly isReadonly?: boolean;
|
|
149
|
+
readonly isSecondary?: boolean;
|
|
150
|
+
readonly max?: string | number;
|
|
151
|
+
readonly maxLength?: number;
|
|
152
|
+
readonly min?: string | number;
|
|
153
|
+
readonly pattern?: FluxInputMask;
|
|
154
|
+
readonly placeholder?: string;
|
|
155
|
+
readonly step?: number;
|
|
156
|
+
readonly type?: FluxInputType;
|
|
157
|
+
}> & Readonly<{
|
|
158
|
+
onBlur?: () => any;
|
|
159
|
+
onFocus?: () => any;
|
|
160
|
+
onShowPicker?: () => any;
|
|
161
|
+
"onUpdate:modelValue"?: (value: string | number | object) => any;
|
|
162
|
+
}>, {
|
|
163
|
+
blur: () => void;
|
|
164
|
+
focus: () => void;
|
|
165
|
+
}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
166
|
+
blur: () => any;
|
|
167
|
+
focus: () => any;
|
|
168
|
+
showPicker: () => any;
|
|
169
|
+
"update:modelValue": (value: string | number | object) => any;
|
|
170
|
+
}, PublicProps, {}, true, {}, {}, GlobalComponents, GlobalDirectives, string, {
|
|
171
|
+
input: HTMLInputElement;
|
|
172
|
+
}, HTMLDivElement, ComponentProvideOptions, {
|
|
173
|
+
P: {};
|
|
174
|
+
B: {};
|
|
175
|
+
D: {};
|
|
176
|
+
C: {};
|
|
177
|
+
M: {};
|
|
178
|
+
Defaults: {};
|
|
179
|
+
}, Readonly<{
|
|
180
|
+
modelValue?: object | string | number | null;
|
|
181
|
+
} & {
|
|
182
|
+
readonly autoComplete?: FluxAutoCompleteType;
|
|
183
|
+
readonly autoFocus?: boolean;
|
|
184
|
+
readonly iconLeading?: FluxIconName;
|
|
185
|
+
readonly iconTrailing?: FluxIconName;
|
|
186
|
+
readonly disabled?: boolean;
|
|
187
|
+
readonly isCondensed?: boolean;
|
|
188
|
+
readonly isLoading?: boolean;
|
|
189
|
+
readonly isReadonly?: boolean;
|
|
190
|
+
readonly isSecondary?: boolean;
|
|
191
|
+
readonly max?: string | number;
|
|
192
|
+
readonly maxLength?: number;
|
|
193
|
+
readonly min?: string | number;
|
|
194
|
+
readonly pattern?: FluxInputMask;
|
|
195
|
+
readonly placeholder?: string;
|
|
196
|
+
readonly step?: number;
|
|
197
|
+
readonly type?: FluxInputType;
|
|
198
|
+
}> & Readonly<{
|
|
199
|
+
onBlur?: () => any;
|
|
200
|
+
onFocus?: () => any;
|
|
201
|
+
onShowPicker?: () => any;
|
|
202
|
+
"onUpdate:modelValue"?: (value: string | number | object) => any;
|
|
203
|
+
}>, {
|
|
204
|
+
blur: () => void;
|
|
205
|
+
focus: () => void;
|
|
206
|
+
}, {}, {}, {}, {}>;
|
|
207
|
+
nodeElements: HTMLDivElement[];
|
|
208
|
+
}, any>;
|
|
209
|
+
export default _default;
|
|
@@ -10,11 +10,13 @@ declare function __VLS_template(): {
|
|
|
10
10
|
slots: Readonly<{
|
|
11
11
|
default?(): any;
|
|
12
12
|
overflow?(props: {
|
|
13
|
+
hasOverflow: boolean;
|
|
13
14
|
items: VNode[];
|
|
14
15
|
}): any;
|
|
15
16
|
}> & {
|
|
16
17
|
default?(): any;
|
|
17
18
|
overflow?(props: {
|
|
19
|
+
hasOverflow: boolean;
|
|
18
20
|
items: VNode[];
|
|
19
21
|
}): any;
|
|
20
22
|
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FluxColor, FluxTreeViewOption } from '@flux-ui/types';
|
|
2
|
+
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
readonly levelColors?: (FluxColor | string)[];
|
|
5
|
+
readonly options: FluxTreeViewOption[];
|
|
6
|
+
};
|
|
7
|
+
declare const _default: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
8
|
+
click: (option: FluxTreeViewOption) => any;
|
|
9
|
+
dblclick: (option: FluxTreeViewOption) => any;
|
|
10
|
+
}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
11
|
+
onClick?: (option: FluxTreeViewOption) => any;
|
|
12
|
+
onDblclick?: (option: FluxTreeViewOption) => any;
|
|
13
|
+
}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
14
|
+
nodeElements: HTMLDivElement[];
|
|
15
|
+
}, HTMLDivElement>;
|
|
16
|
+
export default _default;
|
|
@@ -67,6 +67,7 @@ export { default as FluxFormSelectAsync } from './FluxFormSelectAsync.vue';
|
|
|
67
67
|
export { default as FluxFormSlider } from './FluxFormSlider.vue';
|
|
68
68
|
export { default as FluxFormTextArea } from './FluxFormTextArea.vue';
|
|
69
69
|
export { default as FluxFormTimeZonePicker } from './FluxFormTimeZonePicker.vue';
|
|
70
|
+
export { default as FluxFormTreeViewSelect } from './FluxFormTreeViewSelect.vue';
|
|
70
71
|
export { default as FluxGallery } from './FluxGallery.vue';
|
|
71
72
|
export { default as FluxGalleryItem } from './FluxGalleryItem.vue';
|
|
72
73
|
export { default as FluxGrid } from './FluxGrid.vue';
|
|
@@ -151,4 +152,5 @@ export { default as FluxToolbar } from './FluxToolbar.vue';
|
|
|
151
152
|
export { default as FluxToolbarGroup } from './FluxToolbarGroup.vue';
|
|
152
153
|
export { default as FluxTooltip } from './FluxTooltip.vue';
|
|
153
154
|
export { default as FluxTooltipProvider } from './FluxTooltipProvider.vue';
|
|
155
|
+
export { default as FluxTreeView } from './FluxTreeView.vue';
|
|
154
156
|
export { default as FluxWindow } from './FluxWindow.vue';
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { default as useFormSelect } from './useFormSelect';
|
|
2
2
|
export { default as useTranslate } from './useTranslate';
|
|
3
|
+
export { flattenAll, flattenVisible, getLevelColor, INITIAL_HIGHLIGHTED_INDEX, useTreeView } from './useTreeView';
|
|
4
|
+
export type { TreeBaseOption, TreeFlatNode } from './useTreeView';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FluxColor, FluxIconName } from '@flux-ui/types';
|
|
2
|
+
import { ComputedRef, Ref } from 'vue';
|
|
3
|
+
export type TreeBaseOption = {
|
|
4
|
+
readonly id: string | number;
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly icon?: FluxIconName;
|
|
7
|
+
readonly children?: TreeBaseOption[];
|
|
8
|
+
};
|
|
9
|
+
export type TreeFlatNode<TOption extends TreeBaseOption = TreeBaseOption> = TOption & {
|
|
10
|
+
readonly depth: number;
|
|
11
|
+
readonly isLast: boolean;
|
|
12
|
+
readonly lineGuides: boolean[];
|
|
13
|
+
};
|
|
14
|
+
export declare const FLUX_COLORS: FluxColor[];
|
|
15
|
+
export declare const INITIAL_HIGHLIGHTED_INDEX = -1;
|
|
16
|
+
export declare function flattenVisible<TOption extends TreeBaseOption>(nodes: TOption[], depth: number, expanded: Set<string | number>, parentGuides?: boolean[]): TreeFlatNode<TOption>[];
|
|
17
|
+
export declare function flattenAll<TOption extends TreeBaseOption>(nodes: TOption[], depth?: number): TreeFlatNode<TOption>[];
|
|
18
|
+
export declare function getLevelColor(depth: number, levelColors?: (FluxColor | string)[]): string | undefined;
|
|
19
|
+
export declare function useTreeView<TNode extends TreeFlatNode>(params: {
|
|
20
|
+
readonly expandedIds: Ref<Set<string | number>>;
|
|
21
|
+
readonly nodeElementRefs: Readonly<Ref<HTMLDivElement[] | null | undefined>>;
|
|
22
|
+
readonly visibleNodes: ComputedRef<TNode[]>;
|
|
23
|
+
}): {
|
|
24
|
+
readonly highlightedIndex: Ref<number>;
|
|
25
|
+
toggleExpand: (nodeId: string | number) => void;
|
|
26
|
+
onExpandClick: (node: TNode, evt: MouseEvent) => void;
|
|
27
|
+
onKeyNavigate: (evt: KeyboardEvent, onActivate: (node: TNode) => void) => boolean;
|
|
28
|
+
};
|
package/dist/index.css
CHANGED
|
@@ -4464,6 +4464,152 @@ tfoot .table-cell {
|
|
|
4464
4464
|
100% {
|
|
4465
4465
|
aspect-ratio: var(--aspect-ratio);
|
|
4466
4466
|
}
|
|
4467
|
+
}.tree-view-select-value {
|
|
4468
|
+
margin-left: 6px;
|
|
4469
|
+
overflow: hidden;
|
|
4470
|
+
text-overflow: ellipsis;
|
|
4471
|
+
white-space: nowrap;
|
|
4472
|
+
}
|
|
4473
|
+
|
|
4474
|
+
.tree-view-select-list {
|
|
4475
|
+
display: flex;
|
|
4476
|
+
flex-flow: column;
|
|
4477
|
+
padding: 9px;
|
|
4478
|
+
}
|
|
4479
|
+
|
|
4480
|
+
.tree-view-select-empty {
|
|
4481
|
+
padding: 12px 6px;
|
|
4482
|
+
color: var(--foreground-secondary);
|
|
4483
|
+
font-size: 14px;
|
|
4484
|
+
text-align: center;
|
|
4485
|
+
}
|
|
4486
|
+
|
|
4487
|
+
.tree-node {
|
|
4488
|
+
display: flex;
|
|
4489
|
+
width: 100%;
|
|
4490
|
+
min-height: 36px;
|
|
4491
|
+
padding: 0 8px;
|
|
4492
|
+
align-items: center;
|
|
4493
|
+
border-radius: var(--radius-half);
|
|
4494
|
+
color: var(--foreground);
|
|
4495
|
+
font-size: 14px;
|
|
4496
|
+
gap: 8px;
|
|
4497
|
+
outline: 0;
|
|
4498
|
+
transition: 150ms var(--swift-out);
|
|
4499
|
+
transition-property: background, color;
|
|
4500
|
+
user-select: none;
|
|
4501
|
+
}
|
|
4502
|
+
.tree-node.is-selectable, .tree-node.is-expandable {
|
|
4503
|
+
cursor: pointer;
|
|
4504
|
+
}
|
|
4505
|
+
@media (hover: hover) {
|
|
4506
|
+
.tree-node.is-selectable:hover, .tree-node.is-expandable:hover {
|
|
4507
|
+
background: var(--surface-hover);
|
|
4508
|
+
}
|
|
4509
|
+
}
|
|
4510
|
+
.tree-node.is-selected {
|
|
4511
|
+
background: var(--primary-50);
|
|
4512
|
+
color: var(--primary-700);
|
|
4513
|
+
font-weight: 600;
|
|
4514
|
+
}
|
|
4515
|
+
@media (hover: hover) {
|
|
4516
|
+
.tree-node.is-selected.is-selectable:hover {
|
|
4517
|
+
background: var(--primary-100);
|
|
4518
|
+
}
|
|
4519
|
+
}
|
|
4520
|
+
.tree-node.is-highlighted:not(.is-selected) {
|
|
4521
|
+
background: var(--surface-hover);
|
|
4522
|
+
}
|
|
4523
|
+
.tree-node.is-highlighted.is-selected {
|
|
4524
|
+
background: var(--primary-100);
|
|
4525
|
+
}
|
|
4526
|
+
|
|
4527
|
+
.tree-node-check {
|
|
4528
|
+
color: var(--primary-600);
|
|
4529
|
+
flex-shrink: 0;
|
|
4530
|
+
}
|
|
4531
|
+
|
|
4532
|
+
.tree-node-line-area {
|
|
4533
|
+
display: flex;
|
|
4534
|
+
align-self: stretch;
|
|
4535
|
+
flex-shrink: 0;
|
|
4536
|
+
}
|
|
4537
|
+
|
|
4538
|
+
.tree-indent {
|
|
4539
|
+
position: relative;
|
|
4540
|
+
width: 20px;
|
|
4541
|
+
align-self: stretch;
|
|
4542
|
+
flex-shrink: 0;
|
|
4543
|
+
pointer-events: none;
|
|
4544
|
+
}
|
|
4545
|
+
.tree-indent.has-line::before {
|
|
4546
|
+
content: "";
|
|
4547
|
+
position: absolute;
|
|
4548
|
+
top: 0;
|
|
4549
|
+
bottom: 0;
|
|
4550
|
+
left: 9px;
|
|
4551
|
+
width: 1px;
|
|
4552
|
+
background: var(--surface-stroke);
|
|
4553
|
+
}
|
|
4554
|
+
|
|
4555
|
+
.tree-connector {
|
|
4556
|
+
position: relative;
|
|
4557
|
+
width: 20px;
|
|
4558
|
+
align-self: stretch;
|
|
4559
|
+
flex-shrink: 0;
|
|
4560
|
+
pointer-events: none;
|
|
4561
|
+
}
|
|
4562
|
+
.tree-connector:not(.is-last)::before {
|
|
4563
|
+
content: "";
|
|
4564
|
+
position: absolute;
|
|
4565
|
+
top: 0;
|
|
4566
|
+
bottom: 0;
|
|
4567
|
+
left: 9px;
|
|
4568
|
+
width: 1px;
|
|
4569
|
+
background: var(--surface-stroke);
|
|
4570
|
+
}
|
|
4571
|
+
.tree-connector::after {
|
|
4572
|
+
content: "";
|
|
4573
|
+
position: absolute;
|
|
4574
|
+
top: 0;
|
|
4575
|
+
bottom: 50%;
|
|
4576
|
+
left: 9px;
|
|
4577
|
+
right: 0;
|
|
4578
|
+
border-left: 1px solid var(--surface-stroke);
|
|
4579
|
+
border-bottom: 1px solid var(--surface-stroke);
|
|
4580
|
+
border-bottom-left-radius: 6px;
|
|
4581
|
+
}
|
|
4582
|
+
|
|
4583
|
+
.tree-node-expand {
|
|
4584
|
+
display: flex;
|
|
4585
|
+
width: 16px;
|
|
4586
|
+
flex-shrink: 0;
|
|
4587
|
+
align-items: center;
|
|
4588
|
+
justify-content: center;
|
|
4589
|
+
color: var(--foreground-secondary);
|
|
4590
|
+
}
|
|
4591
|
+
.tree-node-expand:not(:empty) {
|
|
4592
|
+
cursor: pointer;
|
|
4593
|
+
}
|
|
4594
|
+
|
|
4595
|
+
.tree-node-color-dot {
|
|
4596
|
+
display: block;
|
|
4597
|
+
width: 8px;
|
|
4598
|
+
height: 8px;
|
|
4599
|
+
border-radius: 50%;
|
|
4600
|
+
flex-shrink: 0;
|
|
4601
|
+
}
|
|
4602
|
+
|
|
4603
|
+
.tree-node-icon {
|
|
4604
|
+
color: var(--foreground-secondary);
|
|
4605
|
+
flex-shrink: 0;
|
|
4606
|
+
}
|
|
4607
|
+
|
|
4608
|
+
.tree-node-label {
|
|
4609
|
+
flex: 1;
|
|
4610
|
+
overflow: hidden;
|
|
4611
|
+
text-overflow: ellipsis;
|
|
4612
|
+
white-space: nowrap;
|
|
4467
4613
|
}.remove {
|
|
4468
4614
|
position: absolute;
|
|
4469
4615
|
display: flex;
|
|
@@ -6055,4 +6201,116 @@ tfoot .table-cell {
|
|
|
6055
6201
|
|
|
6056
6202
|
.pane-header + .toolbar-flat {
|
|
6057
6203
|
margin-top: 21px;
|
|
6204
|
+
}.tree-view {
|
|
6205
|
+
display: flex;
|
|
6206
|
+
flex-flow: column;
|
|
6207
|
+
outline: 0;
|
|
6208
|
+
}
|
|
6209
|
+
|
|
6210
|
+
.tree-node {
|
|
6211
|
+
display: flex;
|
|
6212
|
+
width: 100%;
|
|
6213
|
+
min-height: 36px;
|
|
6214
|
+
padding: 0 8px;
|
|
6215
|
+
align-items: center;
|
|
6216
|
+
border-radius: var(--radius-half);
|
|
6217
|
+
color: var(--foreground);
|
|
6218
|
+
cursor: pointer;
|
|
6219
|
+
font-size: 14px;
|
|
6220
|
+
gap: 8px;
|
|
6221
|
+
outline: 0;
|
|
6222
|
+
transition: 150ms var(--swift-out);
|
|
6223
|
+
transition-property: background, color;
|
|
6224
|
+
user-select: none;
|
|
6225
|
+
}
|
|
6226
|
+
@media (hover: hover) {
|
|
6227
|
+
.tree-node:hover {
|
|
6228
|
+
background: var(--surface-hover);
|
|
6229
|
+
}
|
|
6230
|
+
}
|
|
6231
|
+
.tree-node.is-highlighted {
|
|
6232
|
+
background: var(--surface-hover);
|
|
6233
|
+
}
|
|
6234
|
+
|
|
6235
|
+
.tree-node-line-area {
|
|
6236
|
+
display: flex;
|
|
6237
|
+
align-self: stretch;
|
|
6238
|
+
flex-shrink: 0;
|
|
6239
|
+
}
|
|
6240
|
+
|
|
6241
|
+
.tree-indent {
|
|
6242
|
+
position: relative;
|
|
6243
|
+
width: 20px;
|
|
6244
|
+
align-self: stretch;
|
|
6245
|
+
flex-shrink: 0;
|
|
6246
|
+
pointer-events: none;
|
|
6247
|
+
}
|
|
6248
|
+
.tree-indent.has-line::before {
|
|
6249
|
+
content: "";
|
|
6250
|
+
position: absolute;
|
|
6251
|
+
top: 0;
|
|
6252
|
+
bottom: 0;
|
|
6253
|
+
left: 9px;
|
|
6254
|
+
width: 1px;
|
|
6255
|
+
background: var(--surface-stroke);
|
|
6256
|
+
}
|
|
6257
|
+
|
|
6258
|
+
.tree-connector {
|
|
6259
|
+
position: relative;
|
|
6260
|
+
width: 20px;
|
|
6261
|
+
align-self: stretch;
|
|
6262
|
+
flex-shrink: 0;
|
|
6263
|
+
pointer-events: none;
|
|
6264
|
+
}
|
|
6265
|
+
.tree-connector:not(.is-last)::before {
|
|
6266
|
+
content: "";
|
|
6267
|
+
position: absolute;
|
|
6268
|
+
top: 0;
|
|
6269
|
+
bottom: 0;
|
|
6270
|
+
left: 9px;
|
|
6271
|
+
width: 1px;
|
|
6272
|
+
background: var(--surface-stroke);
|
|
6273
|
+
}
|
|
6274
|
+
.tree-connector::after {
|
|
6275
|
+
content: "";
|
|
6276
|
+
position: absolute;
|
|
6277
|
+
top: 0;
|
|
6278
|
+
bottom: 50%;
|
|
6279
|
+
left: 9px;
|
|
6280
|
+
right: 0;
|
|
6281
|
+
border-left: 1px solid var(--surface-stroke);
|
|
6282
|
+
border-bottom: 1px solid var(--surface-stroke);
|
|
6283
|
+
border-bottom-left-radius: 6px;
|
|
6284
|
+
}
|
|
6285
|
+
|
|
6286
|
+
.tree-node-expand {
|
|
6287
|
+
display: flex;
|
|
6288
|
+
width: 16px;
|
|
6289
|
+
flex-shrink: 0;
|
|
6290
|
+
align-items: center;
|
|
6291
|
+
justify-content: center;
|
|
6292
|
+
color: var(--foreground-secondary);
|
|
6293
|
+
}
|
|
6294
|
+
.tree-node-expand:not(:empty) {
|
|
6295
|
+
cursor: pointer;
|
|
6296
|
+
}
|
|
6297
|
+
|
|
6298
|
+
.tree-node-color-dot {
|
|
6299
|
+
display: block;
|
|
6300
|
+
width: 8px;
|
|
6301
|
+
height: 8px;
|
|
6302
|
+
border-radius: 50%;
|
|
6303
|
+
flex-shrink: 0;
|
|
6304
|
+
}
|
|
6305
|
+
|
|
6306
|
+
.tree-node-icon {
|
|
6307
|
+
color: var(--foreground-secondary);
|
|
6308
|
+
flex-shrink: 0;
|
|
6309
|
+
}
|
|
6310
|
+
|
|
6311
|
+
.tree-node-label {
|
|
6312
|
+
flex: 1;
|
|
6313
|
+
overflow: hidden;
|
|
6314
|
+
text-overflow: ellipsis;
|
|
6315
|
+
white-space: nowrap;
|
|
6058
6316
|
}/*$vite$:1*/
|