@youcan/celeste 0.11.0 → 0.12.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/ai/component-registry.json +30 -2
- package/ai/component-registry.md +5 -1
- package/ai/icons.md +1 -1
- package/ai/tokens.md +1 -1
- package/dist/celeste.css +189 -86
- package/dist/cjs/chunks/dist2.cjs +6 -0
- package/dist/cjs/chunks/fancy-button.cjs +1 -1
- package/dist/cjs/chunks/scroll-bar.cjs +1 -0
- package/dist/cjs/chunks/segmented-control-item.cjs +1 -1
- package/dist/cjs/chunks/segmented-control.cjs +18 -3
- package/dist/cjs/chunks/tab-menu-item.cjs +6 -2
- package/dist/cjs/chunks/tab-menu-list.cjs +53 -9
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/use-tab-observer.cjs +42 -0
- package/dist/components/segmented-control/segmented-control.d.ts +2 -2
- package/dist/components/tab-menu/tab-menu-list.d.ts +14 -5
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/use-tab-observer.d.ts +14 -0
- package/dist/es/chunks/BubbleSelect.js +1 -1
- package/dist/es/chunks/CollapsibleRoot.js +1 -1
- package/dist/es/chunks/ComboboxInput.js +1 -1
- package/dist/es/chunks/ComboboxRoot.js +1 -1
- package/dist/es/chunks/DialogRoot.js +1 -1
- package/dist/es/chunks/DropdownMenuRoot.js +1 -1
- package/dist/es/chunks/MenuRoot.js +1 -1
- package/dist/es/chunks/MenuSub.js +1 -1
- package/dist/es/chunks/PaginationRoot.js +1 -1
- package/dist/es/chunks/PinInputRoot.js +1 -1
- package/dist/es/chunks/PopoverRoot.js +1 -1
- package/dist/es/chunks/ProgressIndicator.js +1 -1
- package/dist/es/chunks/RadioGroupRoot.js +1 -1
- package/dist/es/chunks/RovingFocusGroup.js +1 -1
- package/dist/es/chunks/SelectItemAlignedPosition.js +1 -1
- package/dist/es/chunks/TabsRoot.js +1 -1
- package/dist/es/chunks/ToggleGroupRoot.js +1 -1
- package/dist/es/chunks/TooltipRoot.js +1 -1
- package/dist/es/chunks/bar-chart.js +1 -1
- package/dist/es/chunks/calendar.js +1 -1
- package/dist/es/chunks/checkbox.js +1 -1
- package/dist/es/chunks/counter-input.js +1 -1
- package/dist/es/chunks/dist2.js +1 -1
- package/dist/es/chunks/dropdown-menu-sub.js +1 -1
- package/dist/es/chunks/fancy-button.js +1 -1
- package/dist/es/chunks/radio-group-item.js +1 -1
- package/dist/es/chunks/range-calendar.js +1 -1
- package/dist/es/chunks/scroll-area.js +1 -1
- package/dist/es/chunks/scroll-bar.js +2 -1
- package/dist/es/chunks/segmented-control-item.js +2 -2
- package/dist/es/chunks/segmented-control.js +20 -4
- package/dist/es/chunks/sidebar-provider.js +1 -1
- package/dist/es/chunks/slider.js +1 -1
- package/dist/es/chunks/switch.js +1 -1
- package/dist/es/chunks/tab-menu-item.js +6 -2
- package/dist/es/chunks/tab-menu-list.js +56 -10
- package/dist/es/index.js +2 -1
- package/dist/es/use-tab-observer.js +41 -0
- package/package.json +3 -3
- package/src/components/button/fancy-button.vue +14 -4
- package/src/components/segmented-control/segmented-control-item.vue +3 -3
- package/src/components/segmented-control/segmented-control.vue +35 -0
- package/src/components/switch/switch.vue +19 -18
- package/src/components/tab-menu/stories/tab-menu.stories.ts +39 -0
- package/src/components/tab-menu/tab-menu-item.vue +27 -28
- package/src/components/tab-menu/tab-menu-list.vue +85 -3
- package/src/composables/index.ts +1 -0
- package/src/composables/use-tab-observer.ts +51 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as clsx } from "./clsx.js";
|
|
2
|
-
import { c as useMediaQuery,
|
|
2
|
+
import { c as useMediaQuery, p as useVModel, s as useEventListener, t as defaultDocument } from "./dist2.js";
|
|
3
3
|
import { SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, provideSidebarContext } from "../use-sidebar.js";
|
|
4
4
|
import { computed, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderSlot, unref } from "vue";
|
|
5
5
|
//#endregion
|
package/dist/es/chunks/slider.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as clsx } from "./clsx.js";
|
|
2
2
|
import { t as clamp } from "./clamp.js";
|
|
3
3
|
import { t as createContext } from "./createContext.js";
|
|
4
|
-
import {
|
|
4
|
+
import { l as useMounted, p as useVModel } from "./dist2.js";
|
|
5
5
|
import { t as Primitive } from "./Primitive.js";
|
|
6
6
|
import { t as useDirection } from "./useDirection.js";
|
|
7
7
|
import { t as useFormControl } from "./useFormControl.js";
|
package/dist/es/chunks/switch.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as clsx } from "./clsx.js";
|
|
2
2
|
import { t as createContext } from "./createContext.js";
|
|
3
|
-
import {
|
|
3
|
+
import { p as useVModel } from "./dist2.js";
|
|
4
4
|
import { t as Primitive } from "./Primitive.js";
|
|
5
5
|
import { t as useFormControl } from "./useFormControl.js";
|
|
6
6
|
import { t as useForwardExpose } from "./useForwardExpose.js";
|
|
@@ -92,6 +92,10 @@ var _hoisted_1 = {
|
|
|
92
92
|
key: 0,
|
|
93
93
|
class: "celeste-tab-menu-item-label"
|
|
94
94
|
};
|
|
95
|
+
var _hoisted_2 = {
|
|
96
|
+
key: 1,
|
|
97
|
+
class: "celeste-tab-menu-item-postfix"
|
|
98
|
+
};
|
|
95
99
|
//#endregion
|
|
96
100
|
//#region src/components/tab-menu/tab-menu-item.vue
|
|
97
101
|
var tab_menu_item_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
|
|
@@ -118,12 +122,12 @@ var tab_menu_item_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
|
|
|
118
122
|
default: withCtx(() => [
|
|
119
123
|
renderSlot(_ctx.$slots, "prefix", {}, void 0, true),
|
|
120
124
|
_ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_1, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true),
|
|
121
|
-
renderSlot(_ctx.$slots, "postfix", {}, void 0, true)
|
|
125
|
+
_ctx.$slots.postfix ? (openBlock(), createElementBlock("span", _hoisted_2, [renderSlot(_ctx.$slots, "postfix", {}, void 0, true)])) : createCommentVNode("", true)
|
|
122
126
|
]),
|
|
123
127
|
_: 3
|
|
124
128
|
}, 16, ["class"]);
|
|
125
129
|
};
|
|
126
130
|
}
|
|
127
|
-
}), [["__scopeId", "data-v-
|
|
131
|
+
}), [["__scopeId", "data-v-512ad887"]]);
|
|
128
132
|
//#endregion
|
|
129
133
|
export { tab_menu_item_default as t };
|
|
@@ -5,7 +5,8 @@ import { t as useForwardExpose } from "./useForwardExpose.js";
|
|
|
5
5
|
import { t as RovingFocusGroup_default } from "./RovingFocusGroup.js";
|
|
6
6
|
import { n as injectTabsRootContext } from "./TabsRoot.js";
|
|
7
7
|
import { useDelegatedProps } from "../use-delegated-props.js";
|
|
8
|
-
import {
|
|
8
|
+
import { useTabObserver } from "../use-tab-observer.js";
|
|
9
|
+
import { createBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeStyle, openBlock, renderSlot, toRefs, unref, withCtx } from "vue";
|
|
9
10
|
//#region ../../node_modules/.pnpm/reka-ui@2.10.1_vue@3.5.41_typescript@6.0.3_/node_modules/reka-ui/dist/Tabs/TabsList.js
|
|
10
11
|
var TabsList_default = /* @__PURE__ */ defineComponent({
|
|
11
12
|
__name: "TabsList",
|
|
@@ -60,31 +61,76 @@ var TabsList_default = /* @__PURE__ */ defineComponent({
|
|
|
60
61
|
}
|
|
61
62
|
});
|
|
62
63
|
//#endregion
|
|
64
|
+
//#region src/components/tab-menu/tab-menu-list.vue?vue&type=script&setup=true&lang.ts
|
|
65
|
+
var _hoisted_1 = ["data-ready"];
|
|
66
|
+
//#endregion
|
|
63
67
|
//#region src/components/tab-menu/tab-menu-list.vue
|
|
64
68
|
var tab_menu_list_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
|
|
65
69
|
__name: "tab-menu-list",
|
|
66
70
|
props: {
|
|
67
|
-
loop: { type: Boolean },
|
|
68
|
-
asChild: { type: Boolean },
|
|
69
|
-
as: {},
|
|
70
71
|
class: { type: [
|
|
71
72
|
Boolean,
|
|
72
73
|
null,
|
|
73
74
|
String,
|
|
74
75
|
Object,
|
|
75
76
|
Array
|
|
76
|
-
] }
|
|
77
|
+
] },
|
|
78
|
+
bordered: {
|
|
79
|
+
type: Boolean,
|
|
80
|
+
default: true
|
|
81
|
+
},
|
|
82
|
+
scrollable: {
|
|
83
|
+
type: Boolean,
|
|
84
|
+
default: false
|
|
85
|
+
},
|
|
86
|
+
fill: {
|
|
87
|
+
type: Boolean,
|
|
88
|
+
default: false
|
|
89
|
+
},
|
|
90
|
+
align: { default: "start" },
|
|
91
|
+
loop: { type: Boolean },
|
|
92
|
+
asChild: { type: Boolean },
|
|
93
|
+
as: {}
|
|
77
94
|
},
|
|
78
95
|
setup(__props) {
|
|
79
96
|
const props = __props;
|
|
80
|
-
const delegatedProps = useDelegatedProps(props,
|
|
97
|
+
const delegatedProps = useDelegatedProps(props, [
|
|
98
|
+
"class",
|
|
99
|
+
"bordered",
|
|
100
|
+
"scrollable",
|
|
101
|
+
"fill",
|
|
102
|
+
"align"
|
|
103
|
+
]);
|
|
104
|
+
const { listRef, indicator, ready } = useTabObserver("[data-state=\"active\"]");
|
|
81
105
|
return (_ctx, _cache) => {
|
|
82
|
-
return openBlock(), createBlock(unref(TabsList_default), mergeProps(
|
|
83
|
-
|
|
106
|
+
return openBlock(), createBlock(unref(TabsList_default), mergeProps({
|
|
107
|
+
ref_key: "listRef",
|
|
108
|
+
ref: listRef
|
|
109
|
+
}, unref(delegatedProps), {
|
|
110
|
+
"data-bordered": __props.bordered,
|
|
111
|
+
"data-scrollable": __props.scrollable,
|
|
112
|
+
"data-fill": __props.fill,
|
|
113
|
+
"data-align": __props.align,
|
|
114
|
+
class: unref(clsx)("celeste-tab-menu-list", props.class)
|
|
115
|
+
}), {
|
|
116
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, void 0, true), createElementVNode("div", {
|
|
117
|
+
class: "celeste-tab-menu-indicator",
|
|
118
|
+
"data-ready": unref(ready),
|
|
119
|
+
style: normalizeStyle({
|
|
120
|
+
width: `${unref(indicator).width}px`,
|
|
121
|
+
transform: `translate3d(${unref(indicator).left}px, 0, 0)`
|
|
122
|
+
})
|
|
123
|
+
}, null, 12, _hoisted_1)]),
|
|
84
124
|
_: 3
|
|
85
|
-
}, 16, [
|
|
125
|
+
}, 16, [
|
|
126
|
+
"data-bordered",
|
|
127
|
+
"data-scrollable",
|
|
128
|
+
"data-fill",
|
|
129
|
+
"data-align",
|
|
130
|
+
"class"
|
|
131
|
+
]);
|
|
86
132
|
};
|
|
87
133
|
}
|
|
88
|
-
}), [["__scopeId", "data-v-
|
|
134
|
+
}), [["__scopeId", "data-v-bf1363bf"]]);
|
|
89
135
|
//#endregion
|
|
90
136
|
export { tab_menu_list_default as t };
|
package/dist/es/index.js
CHANGED
|
@@ -113,6 +113,7 @@ import { t as radio_group_default } from "./chunks/radio-group.js";
|
|
|
113
113
|
import { t as range_picker_default } from "./chunks/range-picker.js";
|
|
114
114
|
import { t as rich_editor_default } from "./chunks/rich-editor.js";
|
|
115
115
|
import { SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, provideSidebarContext, useSidebar } from "./use-sidebar.js";
|
|
116
|
+
import { useTabObserver } from "./use-tab-observer.js";
|
|
116
117
|
import { t as segmented_control_default } from "./chunks/segmented-control.js";
|
|
117
118
|
import { t as sheet_close_default } from "./chunks/sheet-close.js";
|
|
118
119
|
import { t as sheet_content_default } from "./chunks/sheet-content.js";
|
|
@@ -221,4 +222,4 @@ var Celeste = { install(vue) {
|
|
|
221
222
|
});
|
|
222
223
|
} };
|
|
223
224
|
//#endregion
|
|
224
|
-
export { alert_default as Alert, alpha_slider_default as AlphaSlider, badge_default as Badge, bar_chart_default as BarChart, button_default as Button, CHART_DURATION, CHART_SERIES_COLORS, COLOR_NUMBER_VALIDATION_PATTERN, calendar_default as Calendar, Celeste, chart_card_default as ChartCard, chart_legend_default as ChartLegend, chart_plot_default as ChartPlot, checkbox_default as Checkbox, checkbox_card_default as CheckboxCard, checkbox_label_default as CheckboxLabel, collapsible_default as Collapsible, collapsible_content_default as CollapsibleContent, collapsible_trigger_default as CollapsibleTrigger, color_area_default as ColorArea, color_picker_default as ColorPicker, color_swatch_default as ColorSwatch, combobox_default as Combobox, combobox_anchor_default as ComboboxAnchor, combobox_empty_default as ComboboxEmpty, combobox_group_default as ComboboxGroup, combobox_input_default as ComboboxInput, combobox_item_default as ComboboxItem, combobox_list_default as ComboboxList, combobox_root_default as ComboboxRoot, combobox_separator_default as ComboboxSeparator, combobox_trigger_default as ComboboxTrigger, compact_button_default as CompactButton, content_divider_default as ContentDivider, counter_input_default as CounterInput, DEFAULT_SWATCH, date_picker_default as DatePicker, digit_input_default as DigitInput, digit_input_group_default as DigitInputGroup, digit_input_slot_default as DigitInputSlot, dropdown_menu_default as DropdownMenu, dropdown_menu_content_default as DropdownMenuContent, dropdown_menu_group_default as DropdownMenuGroup, dropdown_menu_item_default as DropdownMenuItem, dropdown_menu_label_default as DropdownMenuLabel, dropdown_menu_separator_default as DropdownMenuSeparator, dropdown_menu_sub_default as DropdownMenuSub, dropdown_menu_sub_content_default as DropdownMenuSubContent, dropdown_menu_sub_trigger_default as DropdownMenuSubTrigger, dropdown_menu_trigger_default as DropdownMenuTrigger, fancy_button_default as FancyButton, file_upload_area_default as FileUploadArea, HEX_VALIDATION_PATTERN, hint_text_default as HintText, hue_slider_default as HueSlider, label_default as Label, link_button_default as LinkButton, modal_default as Modal, modal_body_default as ModalBody, modal_close_default as ModalClose, modal_content_default as ModalContent, modal_footer_default as ModalFooter, modal_header_default as ModalHeader, modal_trigger_default as ModalTrigger, pagination_default as Pagination, pagination_content_default as PaginationContent, pagination_ellipsis_default as PaginationEllipsis, pagination_first_default as PaginationFirst, pagination_item_default as PaginationItem, pagination_last_default as PaginationLast, pagination_next_default as PaginationNext, pagination_previous_default as PaginationPrevious, popover_default as Popover, popover_content_default as PopoverContent, popover_trigger_default as PopoverTrigger, progress_bar_default as ProgressBar, progress_circle_default as ProgressCircle, radio_group_default as RadioGroup, radio_group_card_default as RadioGroupCard, radio_group_item_default as RadioGroupItem, radio_group_label_default as RadioGroupLabel, range_calendar_default as RangeCalendar, range_picker_default as RangePicker, rich_editor_default as RichEditor, SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, scroll_area_default as ScrollArea, segmented_control_default as SegmentedControl, segmented_control_item_default as SegmentedControlItem, select_default as Select, select_content_default as SelectContent, select_group_default as SelectGroup, select_icon_default as SelectIcon, select_item_default as SelectItem, select_label_default as SelectLabel, select_separator_default as SelectSeparator, select_trigger_default as SelectTrigger, select_value_default as SelectValue, sheet_default as Sheet, sheet_close_default as SheetClose, sheet_content_default as SheetContent, sheet_description_default as SheetDescription, sheet_footer_default as SheetFooter, sheet_header_default as SheetHeader, sheet_title_default as SheetTitle, sheet_trigger_default as SheetTrigger, sidebar_default as Sidebar, sidebar_content_default as SidebarContent, sidebar_element_default as SidebarElement, sidebar_footer_default as SidebarFooter, sidebar_group_default as SidebarGroup, sidebar_group_content_default as SidebarGroupContent, sidebar_group_label_default as SidebarGroupLabel, sidebar_header_default as SidebarHeader, sidebar_menu_default as SidebarMenu, sidebar_menu_action_default as SidebarMenuAction, sidebar_menu_badge_default as SidebarMenuBadge, sidebar_menu_button_default as SidebarMenuButton, sidebar_menu_item_default as SidebarMenuItem, sidebar_menu_sub_default as SidebarMenuSub, sidebar_menu_sub_button_default as SidebarMenuSubButton, sidebar_menu_sub_item_default as SidebarMenuSubItem, sidebar_provider_default as SidebarProvider, sidebar_separator_default as SidebarSeparator, sidebar_trigger_default as SidebarTrigger, slider_default as Slider, social_button_default as SocialButton, sonner_default as Sonner, sonner_alert_default as SonnerAlert, status_badge_default as StatusBadge, switch_default as Switch, tab_menu_default as TabMenu, tab_menu_content_default as TabMenuContent, tab_menu_item_default as TabMenuItem, tab_menu_list_default as TabMenuList, table_default as Table, table_body_default as TableBody, table_caption_default as TableCaption, table_cell_default as TableCell, table_empty_default as TableEmpty, table_footer_default as TableFooter, table_head_default as TableHead, table_header_default as TableHeader, table_row_default as TableRow, tag_default as Tag, text_input_default as TextInput, text_input_affix_default as TextInputAffix, text_input_button_default as TextInputButton, textarea_default as Textarea, tooltip_default as Tooltip, tooltip_content_default as TooltipContent, tooltip_provider_default as TooltipProvider, tooltip_root_default as TooltipRoot, tooltip_trigger_default as TooltipTrigger, bumpColorValue, chartColor, chartTooltip, clamp, formatCompact, formatNumber, getAbsolutePosition, getColorConstraints, getFractionDigit, getPageXYFromEvent, getScrollXY, niceTicks, provideSidebarContext, resolveArrowDirection, toast, truncColorValue, uid, useChartMotion, useDelegatedProps, useLocale, useSidebar };
|
|
225
|
+
export { alert_default as Alert, alpha_slider_default as AlphaSlider, badge_default as Badge, bar_chart_default as BarChart, button_default as Button, CHART_DURATION, CHART_SERIES_COLORS, COLOR_NUMBER_VALIDATION_PATTERN, calendar_default as Calendar, Celeste, chart_card_default as ChartCard, chart_legend_default as ChartLegend, chart_plot_default as ChartPlot, checkbox_default as Checkbox, checkbox_card_default as CheckboxCard, checkbox_label_default as CheckboxLabel, collapsible_default as Collapsible, collapsible_content_default as CollapsibleContent, collapsible_trigger_default as CollapsibleTrigger, color_area_default as ColorArea, color_picker_default as ColorPicker, color_swatch_default as ColorSwatch, combobox_default as Combobox, combobox_anchor_default as ComboboxAnchor, combobox_empty_default as ComboboxEmpty, combobox_group_default as ComboboxGroup, combobox_input_default as ComboboxInput, combobox_item_default as ComboboxItem, combobox_list_default as ComboboxList, combobox_root_default as ComboboxRoot, combobox_separator_default as ComboboxSeparator, combobox_trigger_default as ComboboxTrigger, compact_button_default as CompactButton, content_divider_default as ContentDivider, counter_input_default as CounterInput, DEFAULT_SWATCH, date_picker_default as DatePicker, digit_input_default as DigitInput, digit_input_group_default as DigitInputGroup, digit_input_slot_default as DigitInputSlot, dropdown_menu_default as DropdownMenu, dropdown_menu_content_default as DropdownMenuContent, dropdown_menu_group_default as DropdownMenuGroup, dropdown_menu_item_default as DropdownMenuItem, dropdown_menu_label_default as DropdownMenuLabel, dropdown_menu_separator_default as DropdownMenuSeparator, dropdown_menu_sub_default as DropdownMenuSub, dropdown_menu_sub_content_default as DropdownMenuSubContent, dropdown_menu_sub_trigger_default as DropdownMenuSubTrigger, dropdown_menu_trigger_default as DropdownMenuTrigger, fancy_button_default as FancyButton, file_upload_area_default as FileUploadArea, HEX_VALIDATION_PATTERN, hint_text_default as HintText, hue_slider_default as HueSlider, label_default as Label, link_button_default as LinkButton, modal_default as Modal, modal_body_default as ModalBody, modal_close_default as ModalClose, modal_content_default as ModalContent, modal_footer_default as ModalFooter, modal_header_default as ModalHeader, modal_trigger_default as ModalTrigger, pagination_default as Pagination, pagination_content_default as PaginationContent, pagination_ellipsis_default as PaginationEllipsis, pagination_first_default as PaginationFirst, pagination_item_default as PaginationItem, pagination_last_default as PaginationLast, pagination_next_default as PaginationNext, pagination_previous_default as PaginationPrevious, popover_default as Popover, popover_content_default as PopoverContent, popover_trigger_default as PopoverTrigger, progress_bar_default as ProgressBar, progress_circle_default as ProgressCircle, radio_group_default as RadioGroup, radio_group_card_default as RadioGroupCard, radio_group_item_default as RadioGroupItem, radio_group_label_default as RadioGroupLabel, range_calendar_default as RangeCalendar, range_picker_default as RangePicker, rich_editor_default as RichEditor, SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, scroll_area_default as ScrollArea, segmented_control_default as SegmentedControl, segmented_control_item_default as SegmentedControlItem, select_default as Select, select_content_default as SelectContent, select_group_default as SelectGroup, select_icon_default as SelectIcon, select_item_default as SelectItem, select_label_default as SelectLabel, select_separator_default as SelectSeparator, select_trigger_default as SelectTrigger, select_value_default as SelectValue, sheet_default as Sheet, sheet_close_default as SheetClose, sheet_content_default as SheetContent, sheet_description_default as SheetDescription, sheet_footer_default as SheetFooter, sheet_header_default as SheetHeader, sheet_title_default as SheetTitle, sheet_trigger_default as SheetTrigger, sidebar_default as Sidebar, sidebar_content_default as SidebarContent, sidebar_element_default as SidebarElement, sidebar_footer_default as SidebarFooter, sidebar_group_default as SidebarGroup, sidebar_group_content_default as SidebarGroupContent, sidebar_group_label_default as SidebarGroupLabel, sidebar_header_default as SidebarHeader, sidebar_menu_default as SidebarMenu, sidebar_menu_action_default as SidebarMenuAction, sidebar_menu_badge_default as SidebarMenuBadge, sidebar_menu_button_default as SidebarMenuButton, sidebar_menu_item_default as SidebarMenuItem, sidebar_menu_sub_default as SidebarMenuSub, sidebar_menu_sub_button_default as SidebarMenuSubButton, sidebar_menu_sub_item_default as SidebarMenuSubItem, sidebar_provider_default as SidebarProvider, sidebar_separator_default as SidebarSeparator, sidebar_trigger_default as SidebarTrigger, slider_default as Slider, social_button_default as SocialButton, sonner_default as Sonner, sonner_alert_default as SonnerAlert, status_badge_default as StatusBadge, switch_default as Switch, tab_menu_default as TabMenu, tab_menu_content_default as TabMenuContent, tab_menu_item_default as TabMenuItem, tab_menu_list_default as TabMenuList, table_default as Table, table_body_default as TableBody, table_caption_default as TableCaption, table_cell_default as TableCell, table_empty_default as TableEmpty, table_footer_default as TableFooter, table_head_default as TableHead, table_header_default as TableHeader, table_row_default as TableRow, tag_default as Tag, text_input_default as TextInput, text_input_affix_default as TextInputAffix, text_input_button_default as TextInputButton, textarea_default as Textarea, tooltip_default as Tooltip, tooltip_content_default as TooltipContent, tooltip_provider_default as TooltipProvider, tooltip_root_default as TooltipRoot, tooltip_trigger_default as TooltipTrigger, bumpColorValue, chartColor, chartTooltip, clamp, formatCompact, formatNumber, getAbsolutePosition, getColorConstraints, getFractionDigit, getPageXYFromEvent, getScrollXY, niceTicks, provideSidebarContext, resolveArrowDirection, toast, truncColorValue, uid, useChartMotion, useDelegatedProps, useLocale, useSidebar, useTabObserver };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { d as useResizeObserver, i as unrefElement, u as useMutationObserver } from "./chunks/dist2.js";
|
|
2
|
+
import { ref, shallowRef } from "vue";
|
|
3
|
+
//#region src/composables/use-tab-observer.ts
|
|
4
|
+
function useTabObserver(activeSelector) {
|
|
5
|
+
const listRef = shallowRef(null);
|
|
6
|
+
const indicator = ref({
|
|
7
|
+
left: 0,
|
|
8
|
+
top: 0,
|
|
9
|
+
width: 0,
|
|
10
|
+
height: 0
|
|
11
|
+
});
|
|
12
|
+
const ready = ref(false);
|
|
13
|
+
function update() {
|
|
14
|
+
const active = unrefElement(listRef)?.querySelector(activeSelector);
|
|
15
|
+
if (!active) {
|
|
16
|
+
ready.value = false;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
indicator.value = {
|
|
20
|
+
left: active.offsetLeft,
|
|
21
|
+
top: active.offsetTop,
|
|
22
|
+
width: active.offsetWidth,
|
|
23
|
+
height: active.offsetHeight
|
|
24
|
+
};
|
|
25
|
+
if (!ready.value) requestAnimationFrame(() => requestAnimationFrame(() => ready.value = true));
|
|
26
|
+
}
|
|
27
|
+
useResizeObserver(listRef, update);
|
|
28
|
+
useMutationObserver(listRef, update, {
|
|
29
|
+
childList: true,
|
|
30
|
+
subtree: true,
|
|
31
|
+
attributes: true,
|
|
32
|
+
attributeFilter: ["data-state"]
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
listRef,
|
|
36
|
+
indicator,
|
|
37
|
+
ready
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { useTabObserver };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@youcan/celeste",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.12.0",
|
|
5
5
|
"author": "YouCan <tech@youcan.shop>",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"reka-ui": "^2.10.1",
|
|
53
53
|
"tinycolor2": "^1.6.0",
|
|
54
54
|
"vue-sonner": "^2.0.9",
|
|
55
|
-
"@youcan/celeste-icons": "0.
|
|
56
|
-
"@youcan/celeste-tokens": "0.
|
|
55
|
+
"@youcan/celeste-icons": "0.12.0",
|
|
56
|
+
"@youcan/celeste-tokens": "0.12.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@chromatic-com/storybook": "^5.3.0",
|
|
@@ -81,6 +81,7 @@ $intent-map: (
|
|
|
81
81
|
|
|
82
82
|
.celeste-fbutton {
|
|
83
83
|
display: inline-flex;
|
|
84
|
+
position: relative;
|
|
84
85
|
box-sizing: border-box;
|
|
85
86
|
align-items: center;
|
|
86
87
|
justify-content: center;
|
|
@@ -127,11 +128,21 @@ $intent-map: (
|
|
|
127
128
|
background:
|
|
128
129
|
linear-gradient(180deg, var(--celeste-fbutton-bg-start) 0%, var(--celeste-fbutton-bg-end) 100%),
|
|
129
130
|
#{map.get($v, bg)};
|
|
130
|
-
box-shadow:
|
|
131
|
-
inset 0 1px 0.5px 0.5px hsl(0deg 0% 100% / 12%),
|
|
132
|
-
var(--shadow-fancy-buttons-#{$k});
|
|
131
|
+
box-shadow: var(--shadow-fancy-buttons-#{$k});
|
|
133
132
|
color: var(--color-text-white-0);
|
|
134
133
|
|
|
134
|
+
&::before {
|
|
135
|
+
content: '';
|
|
136
|
+
position: absolute;
|
|
137
|
+
padding: 1px;
|
|
138
|
+
border-radius: inherit;
|
|
139
|
+
background: linear-gradient(180deg, rgb(255 255 255 / 12%) 0%, rgb(255 255 255 / 0%) 100%);
|
|
140
|
+
mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
|
|
141
|
+
mask-clip: content-box, border-box;
|
|
142
|
+
mask-composite: exclude;
|
|
143
|
+
inset: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
135
146
|
&:hover {
|
|
136
147
|
--celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
|
|
137
148
|
--celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
|
|
@@ -142,7 +153,6 @@ $intent-map: (
|
|
|
142
153
|
--celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
|
|
143
154
|
|
|
144
155
|
box-shadow:
|
|
145
|
-
inset 0 1px 0.5px 0.5px hsl(0deg 0% 100% / 12%),
|
|
146
156
|
var(--shadow-fancy-buttons-#{$k}),
|
|
147
157
|
if($k == 'neutral', var(--shadow-buttons-important-focus), var(--shadow-buttons-#{$k}-focus));
|
|
148
158
|
}
|
|
@@ -30,12 +30,14 @@ function onKeydown(e: KeyboardEvent) {
|
|
|
30
30
|
<style scoped>
|
|
31
31
|
.celeste-segmented-control-item {
|
|
32
32
|
display: flex;
|
|
33
|
+
position: relative;
|
|
34
|
+
z-index: 1;
|
|
33
35
|
align-items: center;
|
|
34
36
|
gap: var(--spacing-6);
|
|
35
37
|
justify-content: center;
|
|
36
38
|
width: 100%;
|
|
37
39
|
padding: var(--spacing-4);
|
|
38
|
-
transition:
|
|
40
|
+
transition: color var(--animation-normal) ease-out;
|
|
39
41
|
border: none;
|
|
40
42
|
border-radius: var(--radius-6);
|
|
41
43
|
background-color: transparent;
|
|
@@ -44,8 +46,6 @@ function onKeydown(e: KeyboardEvent) {
|
|
|
44
46
|
cursor: pointer;
|
|
45
47
|
|
|
46
48
|
&[data-state='on'] {
|
|
47
|
-
background-color: var(--color-bg-white-0);
|
|
48
|
-
box-shadow: var(--shadow-toggle-switch);
|
|
49
49
|
color: var(--color-text-strong-950);
|
|
50
50
|
pointer-events: none;
|
|
51
51
|
}
|
|
@@ -4,28 +4,43 @@ import type { HTMLAttributes } from 'vue';
|
|
|
4
4
|
import clsx from 'clsx';
|
|
5
5
|
import { ToggleGroupRoot as SegmentedControlRoot, useForwardPropsEmits } from 'reka-ui';
|
|
6
6
|
import { useDelegatedProps } from '@/composables/use-delegated-props';
|
|
7
|
+
import { useTabObserver } from '@/composables/use-tab-observer';
|
|
7
8
|
|
|
8
9
|
const props = defineProps<Omit<ToggleGroupRootProps, 'type'> & { class?: HTMLAttributes['class'] }>();
|
|
9
10
|
const emits = defineEmits<ToggleGroupRootEmits>();
|
|
10
11
|
|
|
11
12
|
const delegatedProps = useDelegatedProps(props, 'class');
|
|
12
13
|
const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
14
|
+
|
|
15
|
+
const { listRef, indicator, ready } = useTabObserver('[data-state="on"]');
|
|
13
16
|
</script>
|
|
14
17
|
|
|
15
18
|
<template>
|
|
16
19
|
<SegmentedControlRoot
|
|
20
|
+
ref="listRef"
|
|
17
21
|
:class="clsx('celeste-segmented-control', props.class)"
|
|
18
22
|
v-bind="forwarded"
|
|
19
23
|
type="single"
|
|
20
24
|
>
|
|
21
25
|
<slot />
|
|
26
|
+
<div
|
|
27
|
+
class="celeste-segmented-control-indicator"
|
|
28
|
+
:data-ready="ready"
|
|
29
|
+
:style="{
|
|
30
|
+
width: `${indicator.width}px`,
|
|
31
|
+
height: `${indicator.height}px`,
|
|
32
|
+
transform: `translate3d(${indicator.left}px, ${indicator.top}px, 0)`,
|
|
33
|
+
}"
|
|
34
|
+
/>
|
|
22
35
|
</SegmentedControlRoot>
|
|
23
36
|
</template>
|
|
24
37
|
|
|
25
38
|
<style scoped>
|
|
26
39
|
.celeste-segmented-control {
|
|
27
40
|
display: flex;
|
|
41
|
+
position: relative;
|
|
28
42
|
gap: var(--spacing-4);
|
|
43
|
+
isolation: isolate;
|
|
29
44
|
align-items: center;
|
|
30
45
|
width: 100%;
|
|
31
46
|
padding: var(--spacing-4);
|
|
@@ -36,4 +51,24 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
36
51
|
flex-direction: column;
|
|
37
52
|
}
|
|
38
53
|
}
|
|
54
|
+
|
|
55
|
+
.celeste-segmented-control-indicator {
|
|
56
|
+
position: absolute;
|
|
57
|
+
z-index: -1;
|
|
58
|
+
top: 0;
|
|
59
|
+
left: 0;
|
|
60
|
+
transition-property: transform, width, height;
|
|
61
|
+
transition-duration: 0s;
|
|
62
|
+
transition-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
|
|
63
|
+
border-radius: var(--radius-6);
|
|
64
|
+
opacity: 0;
|
|
65
|
+
background-color: var(--color-bg-white-0);
|
|
66
|
+
box-shadow: var(--shadow-toggle-switch);
|
|
67
|
+
pointer-events: none;
|
|
68
|
+
|
|
69
|
+
&[data-ready='true'] {
|
|
70
|
+
transition-duration: var(--animation-normal);
|
|
71
|
+
opacity: 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
39
74
|
</style>
|
|
@@ -25,39 +25,39 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
25
25
|
.celeste-switch {
|
|
26
26
|
--width: 26px;
|
|
27
27
|
--height: 16px;
|
|
28
|
+
--thumb-size: 12px;
|
|
29
|
+
--thumb-inset: 1px;
|
|
30
|
+
--travel: calc(var(--width) - var(--thumb-size) - var(--thumb-inset) * 2 - 2px);
|
|
28
31
|
--bg-color: var(--color-bg-soft-200);
|
|
29
|
-
--animation-function: cubic-bezier(0.18, 0.89, 0.43, 1.19);
|
|
30
32
|
|
|
31
33
|
position: relative;
|
|
34
|
+
box-sizing: border-box;
|
|
32
35
|
width: var(--width);
|
|
33
36
|
height: var(--height);
|
|
34
|
-
transition: background var(--animation-fast) ease-out;
|
|
37
|
+
transition: background-color var(--animation-fast) ease-out;
|
|
35
38
|
border: 1px solid transparent;
|
|
36
39
|
border-radius: var(--radius-full);
|
|
37
40
|
background-color: var(--bg-color);
|
|
38
41
|
cursor: pointer;
|
|
39
42
|
|
|
40
43
|
.celeste-switch-thumb {
|
|
41
|
-
--thumb-size: 12px;
|
|
42
44
|
--thumb-hole: 4px;
|
|
45
|
+
--direction: 1;
|
|
43
46
|
|
|
44
47
|
position: absolute;
|
|
45
48
|
box-sizing: border-box;
|
|
46
49
|
width: var(--thumb-size);
|
|
47
50
|
height: var(--thumb-size);
|
|
48
|
-
transform: translateY(-50%);
|
|
49
|
-
transition
|
|
50
|
-
transition-duration: var(--animation-fast);
|
|
51
|
-
transition-timing-function: var(--animation-function), ease-out, ease-out;
|
|
51
|
+
transform: translateY(-50%) scale(var(--thumb-scale, 1));
|
|
52
|
+
transition: transform var(--animation-fast) ease-out;
|
|
52
53
|
border-radius: var(--radius-full);
|
|
53
54
|
background-color: var(--color-static-white);
|
|
54
55
|
box-shadow: var(--shadow-toggle-switch);
|
|
55
56
|
inset-block-start: 50%;
|
|
56
|
-
inset-inline-start:
|
|
57
|
-
will-change: transform;
|
|
57
|
+
inset-inline-start: var(--thumb-inset);
|
|
58
58
|
|
|
59
59
|
&[data-state='checked'] {
|
|
60
|
-
|
|
60
|
+
transform: translateY(-50%) translateX(calc(var(--travel) * var(--direction))) scale(var(--thumb-scale, 1));
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
&::before {
|
|
@@ -66,11 +66,15 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
66
66
|
width: var(--thumb-hole);
|
|
67
67
|
height: var(--thumb-hole);
|
|
68
68
|
margin: auto;
|
|
69
|
-
transition: background var(--animation-fast) ease-out;
|
|
69
|
+
transition: background-color var(--animation-fast) ease-out;
|
|
70
70
|
border-radius: var(--radius-full);
|
|
71
71
|
background-color: var(--bg-color);
|
|
72
72
|
inset: var(--spacing-0);
|
|
73
73
|
}
|
|
74
|
+
|
|
75
|
+
:dir(rtl) & {
|
|
76
|
+
--direction: -1;
|
|
77
|
+
}
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
&[aria-checked='true'] {
|
|
@@ -79,25 +83,22 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
79
83
|
|
|
80
84
|
&:disabled {
|
|
81
85
|
--bg-color: var(--color-bg-white-0);
|
|
86
|
+
--thumb-inset: var(--spacing-2);
|
|
87
|
+
--travel: calc(var(--width) - var(--thumb-size) - var(--thumb-inset) - 2px);
|
|
82
88
|
|
|
83
89
|
border-color: var(--color-stroke-soft-200);
|
|
84
90
|
background-color: var(--bg-color);
|
|
85
91
|
pointer-events: none;
|
|
86
92
|
|
|
87
93
|
.celeste-switch-thumb {
|
|
88
|
-
inset-inline-start: var(--spacing-2);
|
|
89
94
|
border-color: var(--color-bg-soft-200);
|
|
90
95
|
background-color: var(--color-bg-soft-200);
|
|
91
96
|
box-shadow: none;
|
|
92
|
-
|
|
93
|
-
&[data-state='checked'] {
|
|
94
|
-
inset-inline-start: calc(100% - var(--thumb-size));
|
|
95
|
-
}
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
|
|
99
|
-
&:active:not(:disabled)
|
|
100
|
-
--thumb-
|
|
100
|
+
&:active:not(:disabled) {
|
|
101
|
+
--thumb-scale: 0.833;
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
&:hover:not(:active, :disabled) {
|
|
@@ -237,3 +237,42 @@ export const IconsOnly: Story = {
|
|
|
237
237
|
`,
|
|
238
238
|
}),
|
|
239
239
|
};
|
|
240
|
+
|
|
241
|
+
export const FilledAndScrollable: Story = {
|
|
242
|
+
args: {
|
|
243
|
+
orientation: 'horizontal',
|
|
244
|
+
defaultValue: 'orders',
|
|
245
|
+
},
|
|
246
|
+
render: args => ({
|
|
247
|
+
components: { TabMenu, TabMenuList, TabMenuItem, TabMenuContent, HintText },
|
|
248
|
+
setup() {
|
|
249
|
+
return { args };
|
|
250
|
+
},
|
|
251
|
+
template: `
|
|
252
|
+
<div style="display: flex; flex-direction: column; gap: 32px; width: 480px; margin: 0 auto;">
|
|
253
|
+
<TabMenu v-bind="args">
|
|
254
|
+
<TabMenuList fill align="center">
|
|
255
|
+
<TabMenuItem value="orders">Orders</TabMenuItem>
|
|
256
|
+
<TabMenuItem value="products">Products</TabMenuItem>
|
|
257
|
+
<TabMenuItem value="customers">Customers</TabMenuItem>
|
|
258
|
+
</TabMenuList>
|
|
259
|
+
<TabMenuContent value="orders"><div style="padding: 16px;"><HintText text="fill + align center" /></div></TabMenuContent>
|
|
260
|
+
<TabMenuContent value="products"><div style="padding: 16px;"><HintText text="fill + align center" /></div></TabMenuContent>
|
|
261
|
+
<TabMenuContent value="customers"><div style="padding: 16px;"><HintText text="fill + align center" /></div></TabMenuContent>
|
|
262
|
+
</TabMenu>
|
|
263
|
+
|
|
264
|
+
<TabMenu v-bind="args">
|
|
265
|
+
<TabMenuList scrollable :bordered="false">
|
|
266
|
+
<TabMenuItem value="orders">Orders</TabMenuItem>
|
|
267
|
+
<TabMenuItem value="products">Products</TabMenuItem>
|
|
268
|
+
<TabMenuItem value="customers">Customers</TabMenuItem>
|
|
269
|
+
<TabMenuItem value="discounts">Discounts</TabMenuItem>
|
|
270
|
+
<TabMenuItem value="analytics">Analytics</TabMenuItem>
|
|
271
|
+
<TabMenuItem value="marketing">Marketing</TabMenuItem>
|
|
272
|
+
</TabMenuList>
|
|
273
|
+
<TabMenuContent value="orders"><div style="padding: 16px;"><HintText text="scrollable, no border" /></div></TabMenuContent>
|
|
274
|
+
</TabMenu>
|
|
275
|
+
</div>
|
|
276
|
+
`,
|
|
277
|
+
}),
|
|
278
|
+
};
|
|
@@ -23,7 +23,9 @@ const forwardedProps = useForwardProps(delegatedProps);
|
|
|
23
23
|
<span v-if="$slots.default" class="celeste-tab-menu-item-label">
|
|
24
24
|
<slot />
|
|
25
25
|
</span>
|
|
26
|
-
<
|
|
26
|
+
<span v-if="$slots.postfix" class="celeste-tab-menu-item-postfix">
|
|
27
|
+
<slot name="postfix" />
|
|
28
|
+
</span>
|
|
27
29
|
</TabsTrigger>
|
|
28
30
|
</template>
|
|
29
31
|
|
|
@@ -36,17 +38,20 @@ const forwardedProps = useForwardProps(delegatedProps);
|
|
|
36
38
|
justify-content: flex-start;
|
|
37
39
|
width: 100%;
|
|
38
40
|
padding: var(--spacing-8);
|
|
39
|
-
transition:
|
|
41
|
+
transition:
|
|
42
|
+
background-color var(--animation-fast) var(--animation-function),
|
|
43
|
+
color var(--animation-fast) var(--animation-function);
|
|
40
44
|
border: none;
|
|
41
45
|
border-radius: var(--radius-8);
|
|
42
46
|
color: var(--color-text-sub-600);
|
|
43
|
-
font
|
|
47
|
+
font: var(--label-sm);
|
|
44
48
|
cursor: pointer;
|
|
45
49
|
gap: var(--spacing-6);
|
|
46
50
|
|
|
47
51
|
&:deep(i) {
|
|
48
52
|
width: 20px;
|
|
49
53
|
height: 20px;
|
|
54
|
+
transition: color var(--animation-fast) var(--animation-function);
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
&:focus {
|
|
@@ -54,33 +59,32 @@ const forwardedProps = useForwardProps(delegatedProps);
|
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
&[data-orientation='horizontal'] {
|
|
57
|
-
position: relative;
|
|
58
62
|
width: fit-content;
|
|
59
63
|
padding-block: var(--spacing-14);
|
|
60
64
|
padding-inline: var(--spacing-0);
|
|
61
|
-
|
|
62
|
-
&::after {
|
|
63
|
-
content: '';
|
|
64
|
-
display: block;
|
|
65
|
-
position: absolute;
|
|
66
|
-
inset-inline: 0;
|
|
67
|
-
inset-block-end: 0;
|
|
68
|
-
width: 100%;
|
|
69
|
-
height: 2px;
|
|
70
|
-
transition: all var(--animation-fast) var(--animation-function);
|
|
71
|
-
background-color: transparent;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
&[data-orientation='vertical'][data-state='active'] {
|
|
76
|
-
background-color: var(--color-bg-weak-50);
|
|
65
|
+
background-color: var(--color-bg-white-0);
|
|
77
66
|
}
|
|
78
67
|
|
|
79
|
-
&[data-orientation='
|
|
68
|
+
&[data-orientation='vertical'] {
|
|
80
69
|
background-color: var(--color-bg-white-0);
|
|
81
70
|
|
|
82
|
-
|
|
83
|
-
|
|
71
|
+
&:hover,
|
|
72
|
+
&[data-state='active'] {
|
|
73
|
+
background-color: var(--color-bg-weak-50);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.celeste-tab-menu-item-postfix {
|
|
77
|
+
display: inline-flex;
|
|
78
|
+
transform: scale(0.75);
|
|
79
|
+
transition:
|
|
80
|
+
transform var(--animation-fast) var(--animation-function),
|
|
81
|
+
opacity var(--animation-fast) var(--animation-function);
|
|
82
|
+
opacity: 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&[data-state='active'] .celeste-tab-menu-item-postfix {
|
|
86
|
+
transform: scale(1);
|
|
87
|
+
opacity: 1;
|
|
84
88
|
}
|
|
85
89
|
}
|
|
86
90
|
|
|
@@ -94,14 +98,9 @@ const forwardedProps = useForwardProps(delegatedProps);
|
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
|
|
97
|
-
&[data-state='inactive'] {
|
|
98
|
-
background-color: var(--color-bg-white-0);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
101
|
.celeste-tab-menu-item-label {
|
|
102
102
|
flex: 1;
|
|
103
103
|
overflow: hidden;
|
|
104
|
-
font-size: var(--font-size-2);
|
|
105
104
|
text-align: start;
|
|
106
105
|
text-overflow: ellipsis;
|
|
107
106
|
white-space: nowrap;
|