webcake-ui-kit 1.0.0 → 1.0.2
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/LICENSE +21 -0
- package/README.md +358 -8
- package/package.json +68 -5
- package/src/components/accordion/Accordion.vue +70 -0
- package/src/components/accordion/accordion.css +5 -0
- package/src/components/accordion-item/AccordionItem.vue +98 -0
- package/src/components/accordion-item/accordion-item.css +143 -0
- package/src/components/alert-dialog/AlertDialog.vue +82 -0
- package/src/components/alert-dialog/alert-dialog.css +33 -0
- package/src/components/badge/Badge.vue +2 -2
- package/src/components/badge/badge.css +1 -4
- package/src/components/breadcrumb/Breadcrumb.vue +85 -0
- package/src/components/breadcrumb/breadcrumb.css +90 -0
- package/src/components/button/Button.vue +77 -10
- package/src/components/button/button.css +258 -24
- package/src/components/button-group/ButtonGroup.vue +25 -0
- package/src/components/button-group/button-group.css +30 -0
- package/src/components/checkbox/Checkbox.vue +55 -0
- package/src/components/checkbox/checkbox.css +86 -0
- package/src/components/checkbox-group/CheckboxGroup.vue +50 -0
- package/src/components/checkbox-group/checkbox-group.css +35 -0
- package/src/components/dialog/Dialog.vue +355 -0
- package/src/components/dialog/dialog.css +255 -0
- package/src/components/divider/Divider.vue +35 -0
- package/src/components/divider/divider.css +38 -0
- package/src/components/input/Input.vue +99 -0
- package/src/components/input/input.css +123 -0
- package/src/components/pagination/Pagination.vue +211 -0
- package/src/components/pagination/pagination.css +13 -0
- package/src/components/radio/Radio.vue +74 -0
- package/src/components/radio/radio.css +89 -0
- package/src/components/radio-group/RadioGroup.vue +70 -0
- package/src/components/radio-group/radio_group.css +11 -0
- package/src/components/rich-checkbox-group/RichCheckboxGroup.vue +59 -0
- package/src/components/rich-checkbox-group/rich-checkbox-group.css +54 -0
- package/src/components/rich-switch-group/RichSwitchGroup.vue +49 -0
- package/src/components/rich-switch-group/rich_switch_group.css +45 -0
- package/src/components/select/Select.vue +262 -0
- package/src/components/select/select.css +207 -0
- package/src/components/select-option/SelectOption.vue +82 -0
- package/src/components/select-option/select_option.css +60 -0
- package/src/components/sidebar-group-label/SidebarGroupLabel.vue +68 -0
- package/src/components/sidebar-group-label/sidebar_group_label.css +61 -0
- package/src/components/sidebar-item/SidebarItem.vue +110 -0
- package/src/components/sidebar-item/sidebar_item.css +142 -0
- package/src/components/slider/Slider.vue +255 -0
- package/src/components/slider/slider.css +89 -0
- package/src/components/spinner/Spinner.vue +47 -0
- package/src/components/spinner/spinner.css +48 -0
- package/src/components/switch/Switch.vue +32 -0
- package/src/components/switch/switch.css +46 -0
- package/src/components/switch-group/SwitchGroup.vue +32 -0
- package/src/components/switch-group/switch_group.css +28 -0
- package/src/components/tabs/Tabs.vue +57 -0
- package/src/components/tabs/tabs.css +118 -0
- package/src/components/tag/Tag.vue +47 -0
- package/src/components/tag/tag.css +115 -0
- package/src/components/toggle/Toggle.vue +112 -0
- package/src/components/toggle/toggle.css +174 -0
- package/src/components/toggle-group/ToggleGroup.vue +57 -0
- package/src/components/toggle-group/toggle-group.css +68 -0
- package/src/icons/LoaderIcon.vue +22 -0
- package/src/index.js +29 -2
- package/src/styles/.omc/state/agent-replay-645326b7-372b-463d-ab45-0adaafe31a51.jsonl +2 -0
- package/src/styles/.omc/state/subagent-tracking.json +7 -0
- package/src/styles/alpha_colors.css +35 -37
- package/src/styles/border_radius.css +21 -23
- package/src/styles/brand_colors.css +37 -39
- package/src/styles/chart_colors.css +27 -29
- package/src/styles/color_general.css +206 -201
- package/src/styles/raw_colors.css +267 -269
- package/src/styles/shadow.css +10 -12
- package/src/styles/spacing.css +31 -33
- package/src/styles/typography.css +76 -78
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="ui-select-option"
|
|
4
|
+
:class="{
|
|
5
|
+
'ui-select-option--selected': isSelected,
|
|
6
|
+
'ui-select-option--disabled': isDisabled,
|
|
7
|
+
'ui-select-option--large': size === 'large',
|
|
8
|
+
'ui-select-option--destructive': variant === 'destructive'
|
|
9
|
+
}"
|
|
10
|
+
tabindex="0"
|
|
11
|
+
@click="handleClick"
|
|
12
|
+
@keydown.enter="handleClick"
|
|
13
|
+
@keydown.space.prevent="handleClick"
|
|
14
|
+
>
|
|
15
|
+
<slot>{{ label || value }}</slot>
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<script>
|
|
20
|
+
export default {
|
|
21
|
+
name: 'SelectOption',
|
|
22
|
+
|
|
23
|
+
inject: {
|
|
24
|
+
select: { default: null }
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
props: {
|
|
28
|
+
value: {
|
|
29
|
+
type: String,
|
|
30
|
+
required: true
|
|
31
|
+
},
|
|
32
|
+
label: {
|
|
33
|
+
type: String,
|
|
34
|
+
default: ''
|
|
35
|
+
},
|
|
36
|
+
disabled: {
|
|
37
|
+
type: Boolean,
|
|
38
|
+
default: false
|
|
39
|
+
},
|
|
40
|
+
size: {
|
|
41
|
+
type: String,
|
|
42
|
+
default: 'regular',
|
|
43
|
+
validator: function (v) {
|
|
44
|
+
return ['regular', 'large'].indexOf(v) !== -1
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
variant: {
|
|
48
|
+
type: String,
|
|
49
|
+
default: 'default',
|
|
50
|
+
validator: function (v) {
|
|
51
|
+
return ['default', 'destructive'].indexOf(v) !== -1
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
emits: [],
|
|
57
|
+
|
|
58
|
+
mounted() {
|
|
59
|
+
if (this.select && this.select.registerOption) {
|
|
60
|
+
this.select.registerOption(this.value, this.label || this.value)
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
computed: {
|
|
65
|
+
isSelected() {
|
|
66
|
+
return this.select ? this.select.value === this.value : false
|
|
67
|
+
},
|
|
68
|
+
isDisabled() {
|
|
69
|
+
return this.disabled || (this.select ? this.select.disabled : false)
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
methods: {
|
|
74
|
+
handleClick() {
|
|
75
|
+
if (this.isDisabled || !this.select) return
|
|
76
|
+
this.select.select(this.value)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<style src="./select_option.css" scoped></style>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
.ui-select-option {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: var(--spacing-xs);
|
|
5
|
+
min-height: 32px;
|
|
6
|
+
padding: var(--spacing-5p5) var(--spacing-xs);
|
|
7
|
+
border-radius: var(--radius);
|
|
8
|
+
font-family: var(--font-family-body);
|
|
9
|
+
font-size: var(--paragraph-small-font-size);
|
|
10
|
+
line-height: var(--paragraph-small-line-height);
|
|
11
|
+
font-weight: var(--paragraph-font-weight);
|
|
12
|
+
color: var(--primary-fg);
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
transition: background 0.15s;
|
|
15
|
+
outline: none;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ui-select-option:hover {
|
|
19
|
+
background: var(--accent-bg);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.ui-select-option:focus-visible {
|
|
23
|
+
background: var(--accent-bg);
|
|
24
|
+
box-shadow: 0 0 0 3px var(--ring);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ui-select-option:active {
|
|
28
|
+
background: var(--accent-2);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.ui-select-option--selected {
|
|
32
|
+
background: var(--accent-2);
|
|
33
|
+
font-weight: var(--paragraph-medium-font-weight);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.ui-select-option--disabled {
|
|
37
|
+
opacity: 0.5;
|
|
38
|
+
cursor: not-allowed;
|
|
39
|
+
pointer-events: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ui-select-option--large {
|
|
43
|
+
min-height: 36px;
|
|
44
|
+
padding: var(--spacing-7p5) var(--spacing-sm);
|
|
45
|
+
gap: var(--spacing-sm);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.ui-select-option--destructive {
|
|
49
|
+
color: var(--destructive-text);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.ui-select-option--destructive:hover,
|
|
53
|
+
.ui-select-option--destructive:active {
|
|
54
|
+
background: var(--negative-subtle);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ui-select-option--destructive:focus-visible {
|
|
58
|
+
background: transparent;
|
|
59
|
+
box-shadow: 0 0 0 3px var(--ring);
|
|
60
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="ui-sidebar-group-label"
|
|
4
|
+
:class="{
|
|
5
|
+
'ui-sidebar-group-label--collapsible': collapsible,
|
|
6
|
+
'ui-sidebar-group-label--collapsed': collapsible && !expanded
|
|
7
|
+
}"
|
|
8
|
+
>
|
|
9
|
+
<button
|
|
10
|
+
v-if="collapsible"
|
|
11
|
+
class="ui-sidebar-group-label__trigger"
|
|
12
|
+
:aria-expanded="String(expanded)"
|
|
13
|
+
@click="$emit('toggle')"
|
|
14
|
+
>
|
|
15
|
+
<span class="ui-sidebar-group-label__text"
|
|
16
|
+
><slot>{{ label }}</slot></span
|
|
17
|
+
>
|
|
18
|
+
<span class="ui-sidebar-group-label__chevron" aria-hidden="true">
|
|
19
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
|
|
20
|
+
<path
|
|
21
|
+
d="M3 4.5L6 7.5L9 4.5"
|
|
22
|
+
stroke="currentColor"
|
|
23
|
+
stroke-width="1.5"
|
|
24
|
+
stroke-linecap="round"
|
|
25
|
+
stroke-linejoin="round"
|
|
26
|
+
/>
|
|
27
|
+
</svg>
|
|
28
|
+
</span>
|
|
29
|
+
</button>
|
|
30
|
+
<span v-else class="ui-sidebar-group-label__text"
|
|
31
|
+
><slot>{{ label }}</slot></span
|
|
32
|
+
>
|
|
33
|
+
<span v-if="hasActionSlot" class="ui-sidebar-group-label__action">
|
|
34
|
+
<slot name="action" />
|
|
35
|
+
</span>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
|
|
39
|
+
<script>
|
|
40
|
+
export default {
|
|
41
|
+
name: 'SidebarGroupLabel',
|
|
42
|
+
|
|
43
|
+
props: {
|
|
44
|
+
label: {
|
|
45
|
+
type: String,
|
|
46
|
+
default: ''
|
|
47
|
+
},
|
|
48
|
+
collapsible: {
|
|
49
|
+
type: Boolean,
|
|
50
|
+
default: false
|
|
51
|
+
},
|
|
52
|
+
expanded: {
|
|
53
|
+
type: Boolean,
|
|
54
|
+
default: true
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
emits: ['toggle'],
|
|
59
|
+
|
|
60
|
+
computed: {
|
|
61
|
+
hasActionSlot() {
|
|
62
|
+
return !!((this.$scopedSlots && this.$scopedSlots['action']) || this.$slots['action'])
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<style src="./sidebar_group_label.css" scoped></style>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
.ui-sidebar-group-label {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: var(--spacing-2xs);
|
|
5
|
+
padding: var(--spacing-2xs) var(--spacing-xs);
|
|
6
|
+
margin-bottom: var(--spacing-3xs);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* Collapsible: full-width trigger button */
|
|
10
|
+
.ui-sidebar-group-label__trigger {
|
|
11
|
+
flex: 1;
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: var(--spacing-2xs);
|
|
15
|
+
background: transparent;
|
|
16
|
+
border: none;
|
|
17
|
+
padding: 0;
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
font-family: inherit;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ui-sidebar-group-label__trigger:focus-visible {
|
|
24
|
+
outline: none;
|
|
25
|
+
border-radius: var(--radius-4);
|
|
26
|
+
box-shadow: 0 0 0 2px var(--sidebar-ring);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Label text (shared between trigger and plain span) */
|
|
30
|
+
.ui-sidebar-group-label__text {
|
|
31
|
+
flex: 1;
|
|
32
|
+
font-size: 12px;
|
|
33
|
+
font-weight: 500;
|
|
34
|
+
line-height: 16px;
|
|
35
|
+
letter-spacing: 0.04em;
|
|
36
|
+
text-transform: uppercase;
|
|
37
|
+
color: var(--sidebar-muted);
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
text-overflow: ellipsis;
|
|
40
|
+
white-space: nowrap;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Chevron rotates on collapse */
|
|
44
|
+
.ui-sidebar-group-label__chevron {
|
|
45
|
+
flex-shrink: 0;
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
color: var(--sidebar-muted);
|
|
49
|
+
transition: transform 0.2s ease;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.ui-sidebar-group-label--collapsed .ui-sidebar-group-label__chevron {
|
|
53
|
+
transform: rotate(-90deg);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Optional action slot (mini button) */
|
|
57
|
+
.ui-sidebar-group-label__action {
|
|
58
|
+
flex-shrink: 0;
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<button
|
|
3
|
+
class="ui-sidebar-item"
|
|
4
|
+
:class="{
|
|
5
|
+
'ui-sidebar-item--active': active,
|
|
6
|
+
'ui-sidebar-item--disabled': disabled,
|
|
7
|
+
'ui-sidebar-item--large': size === 'large',
|
|
8
|
+
'ui-sidebar-item--level-2': level === 2,
|
|
9
|
+
'ui-sidebar-item--has-children': hasChildren,
|
|
10
|
+
'ui-sidebar-item--expanded': hasChildren && expanded,
|
|
11
|
+
'ui-sidebar-item--collapsed': collapsed
|
|
12
|
+
}"
|
|
13
|
+
:tabindex="disabled ? -1 : 0"
|
|
14
|
+
:aria-current="active ? 'page' : undefined"
|
|
15
|
+
:aria-disabled="disabled ? true : undefined"
|
|
16
|
+
:aria-expanded="hasChildren ? String(expanded) : undefined"
|
|
17
|
+
@click="handleClick"
|
|
18
|
+
>
|
|
19
|
+
<span v-if="hasIconSlot" class="ui-sidebar-item__icon" aria-hidden="true">
|
|
20
|
+
<slot name="icon" />
|
|
21
|
+
</span>
|
|
22
|
+
<span class="ui-sidebar-item__label">
|
|
23
|
+
<slot>{{ label }}</slot>
|
|
24
|
+
</span>
|
|
25
|
+
<span v-if="badge" class="ui-sidebar-item__badge">{{ badge }}</span>
|
|
26
|
+
<span v-if="hasChildren" class="ui-sidebar-item__chevron" aria-hidden="true">
|
|
27
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
|
|
28
|
+
<path
|
|
29
|
+
d="M3 4.5L6 7.5L9 4.5"
|
|
30
|
+
stroke="currentColor"
|
|
31
|
+
stroke-width="1.5"
|
|
32
|
+
stroke-linecap="round"
|
|
33
|
+
stroke-linejoin="round"
|
|
34
|
+
/>
|
|
35
|
+
</svg>
|
|
36
|
+
</span>
|
|
37
|
+
</button>
|
|
38
|
+
</template>
|
|
39
|
+
|
|
40
|
+
<script>
|
|
41
|
+
export default {
|
|
42
|
+
name: 'SidebarItem',
|
|
43
|
+
|
|
44
|
+
props: {
|
|
45
|
+
label: {
|
|
46
|
+
type: String,
|
|
47
|
+
default: ''
|
|
48
|
+
},
|
|
49
|
+
active: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: false
|
|
52
|
+
},
|
|
53
|
+
disabled: {
|
|
54
|
+
type: Boolean,
|
|
55
|
+
default: false
|
|
56
|
+
},
|
|
57
|
+
size: {
|
|
58
|
+
type: String,
|
|
59
|
+
default: 'regular',
|
|
60
|
+
validator: function (v) {
|
|
61
|
+
return ['regular', 'large'].indexOf(v) !== -1
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
level: {
|
|
65
|
+
type: Number,
|
|
66
|
+
default: 1,
|
|
67
|
+
validator: function (v) {
|
|
68
|
+
return [1, 2].indexOf(v) !== -1
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
badge: {
|
|
72
|
+
type: String,
|
|
73
|
+
default: ''
|
|
74
|
+
},
|
|
75
|
+
hasChildren: {
|
|
76
|
+
type: Boolean,
|
|
77
|
+
default: false
|
|
78
|
+
},
|
|
79
|
+
expanded: {
|
|
80
|
+
type: Boolean,
|
|
81
|
+
default: false
|
|
82
|
+
},
|
|
83
|
+
collapsed: {
|
|
84
|
+
type: Boolean,
|
|
85
|
+
default: false
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
emits: ['click', 'toggle'],
|
|
90
|
+
|
|
91
|
+
computed: {
|
|
92
|
+
hasIconSlot() {
|
|
93
|
+
return !!((this.$scopedSlots && this.$scopedSlots['icon']) || this.$slots['icon'])
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
methods: {
|
|
98
|
+
handleClick() {
|
|
99
|
+
if (this.disabled) return
|
|
100
|
+
if (this.hasChildren) {
|
|
101
|
+
this.$emit('toggle')
|
|
102
|
+
} else {
|
|
103
|
+
this.$emit('click')
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
</script>
|
|
109
|
+
|
|
110
|
+
<style src="./sidebar_item.css" scoped></style>
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
.ui-sidebar-item {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: var(--spacing-xs);
|
|
5
|
+
width: 100%;
|
|
6
|
+
padding: var(--spacing-5) var(--spacing-xs);
|
|
7
|
+
border-radius: var(--radius-6);
|
|
8
|
+
color: var(--sidebar-foreground);
|
|
9
|
+
background: transparent;
|
|
10
|
+
border: none;
|
|
11
|
+
cursor: pointer;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
font-size: 14px;
|
|
14
|
+
line-height: 20px;
|
|
15
|
+
font-weight: 400;
|
|
16
|
+
text-align: left;
|
|
17
|
+
transition:
|
|
18
|
+
background-color 0.15s ease,
|
|
19
|
+
color 0.15s ease;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.ui-sidebar-item:hover {
|
|
23
|
+
background-color: var(--sidebar-accent);
|
|
24
|
+
color: var(--sidebar-accent-foreground);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ui-sidebar-item:focus-visible {
|
|
28
|
+
outline: none;
|
|
29
|
+
box-shadow: 0 0 0 2px var(--sidebar-ring);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ui-sidebar-item:active {
|
|
33
|
+
background-color: var(--sidebar-accent);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Active (selected page) */
|
|
37
|
+
.ui-sidebar-item--active {
|
|
38
|
+
background-color: var(--sidebar-accent);
|
|
39
|
+
color: var(--sidebar-primary);
|
|
40
|
+
font-weight: 500;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Disabled */
|
|
44
|
+
.ui-sidebar-item--disabled {
|
|
45
|
+
opacity: 0.5;
|
|
46
|
+
cursor: not-allowed;
|
|
47
|
+
pointer-events: none;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Large size */
|
|
51
|
+
.ui-sidebar-item--large {
|
|
52
|
+
padding-top: var(--spacing-xs);
|
|
53
|
+
padding-bottom: var(--spacing-xs);
|
|
54
|
+
font-size: 15px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Level 2 — nested, indented */
|
|
58
|
+
.ui-sidebar-item--level-2 {
|
|
59
|
+
padding-left: var(--spacing-lg);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Icon */
|
|
63
|
+
.ui-sidebar-item__icon {
|
|
64
|
+
flex-shrink: 0;
|
|
65
|
+
width: 16px;
|
|
66
|
+
height: 16px;
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
color: var(--sidebar-muted);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.ui-sidebar-item--active .ui-sidebar-item__icon,
|
|
74
|
+
.ui-sidebar-item:hover .ui-sidebar-item__icon {
|
|
75
|
+
color: inherit;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Label */
|
|
79
|
+
.ui-sidebar-item__label {
|
|
80
|
+
flex: 1;
|
|
81
|
+
min-width: 0;
|
|
82
|
+
overflow: hidden;
|
|
83
|
+
text-overflow: ellipsis;
|
|
84
|
+
white-space: nowrap;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Badge count */
|
|
88
|
+
.ui-sidebar-item__badge {
|
|
89
|
+
flex-shrink: 0;
|
|
90
|
+
min-width: 18px;
|
|
91
|
+
height: 18px;
|
|
92
|
+
padding: 0 var(--spacing-2xs);
|
|
93
|
+
border-radius: var(--radius-infinite);
|
|
94
|
+
background-color: var(--sidebar-primary);
|
|
95
|
+
color: var(--sidebar-primary-foreground);
|
|
96
|
+
font-size: 11px;
|
|
97
|
+
font-weight: 500;
|
|
98
|
+
line-height: 18px;
|
|
99
|
+
text-align: center;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Expand / collapse chevron */
|
|
103
|
+
.ui-sidebar-item__chevron {
|
|
104
|
+
flex-shrink: 0;
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
color: var(--sidebar-muted);
|
|
108
|
+
transition: transform 0.2s ease;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.ui-sidebar-item--expanded .ui-sidebar-item__chevron {
|
|
112
|
+
transform: rotate(180deg);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Collapsed (icon-only) mode */
|
|
116
|
+
.ui-sidebar-item--collapsed {
|
|
117
|
+
width: 32px;
|
|
118
|
+
height: 32px;
|
|
119
|
+
padding: 0;
|
|
120
|
+
justify-content: center;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.ui-sidebar-item--collapsed .ui-sidebar-item__label,
|
|
124
|
+
.ui-sidebar-item--collapsed .ui-sidebar-item__badge,
|
|
125
|
+
.ui-sidebar-item--collapsed .ui-sidebar-item__chevron {
|
|
126
|
+
display: none;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.ui-sidebar-item--collapsed .ui-sidebar-item__icon {
|
|
130
|
+
width: 18px;
|
|
131
|
+
height: 18px;
|
|
132
|
+
color: var(--sidebar-foreground);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.ui-sidebar-item--collapsed.ui-sidebar-item--active .ui-sidebar-item__icon {
|
|
136
|
+
color: var(--sidebar-primary);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.ui-sidebar-item--collapsed.ui-sidebar-item--large {
|
|
140
|
+
width: 40px;
|
|
141
|
+
height: 40px;
|
|
142
|
+
}
|