@youcan/celeste 0.6.23 → 0.6.25

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/es/index.js CHANGED
@@ -13,50 +13,50 @@ import ComboboxGroup from "./combobox-group.js";
13
13
  import ComboboxInput from "./combobox-input.js";
14
14
  import ComboboxItem from "./combobox-item.js";
15
15
  import ComboboxList from "./combobox-list.js";
16
- import { _ as _sfc_main$2 } from "./chunks/combobox-root.js";
16
+ import ComboboxRoot from "./combobox-root.js";
17
17
  import ComboboxSeparator from "./combobox-separator.js";
18
18
  import ComboboxTrigger from "./combobox-trigger.js";
19
19
  import combobox from "./combobox.js";
20
- import { _ as _sfc_main$3 } from "./chunks/content-divider.vue_vue_type_style_index_0_lang.js";
20
+ import { _ as _sfc_main$2 } from "./chunks/content-divider.vue_vue_type_style_index_0_lang.js";
21
21
  import contextMenuItem from "./context-menu-item.js";
22
22
  import DropdownItem from "./dropdown-item.js";
23
23
  import dropdown from "./dropdown.js";
24
- import { _ as _sfc_main$4 } from "./chunks/dropdown-menu-content.vue_vue_type_style_index_0_lang.js";
24
+ import { _ as _sfc_main$3 } from "./chunks/dropdown-menu-content.vue_vue_type_style_index_0_lang.js";
25
25
  import dropdownMenuGroup from "./dropdown-menu-group.js";
26
26
  import dropdownMenuItem from "./dropdown-menu-item.js";
27
27
  import dropdownMenuLabel from "./dropdown-menu-label.js";
28
28
  import dropdownMenuSeparator from "./dropdown-menu-separator.js";
29
- import { _ as _sfc_main$6 } from "./chunks/dropdown-menu-sub-content.vue_vue_type_style_index_0_lang.js";
30
- import { _ as _sfc_main$7 } from "./chunks/dropdown-menu-sub-trigger.vue_vue_type_style_index_0_lang.js";
31
- import { _ as _sfc_main$5 } from "./chunks/dropdown-menu-sub.js";
29
+ import { _ as _sfc_main$5 } from "./chunks/dropdown-menu-sub-content.vue_vue_type_style_index_0_lang.js";
30
+ import { _ as _sfc_main$6 } from "./chunks/dropdown-menu-sub-trigger.vue_vue_type_style_index_0_lang.js";
31
+ import { _ as _sfc_main$4 } from "./chunks/dropdown-menu-sub.js";
32
32
  import dropdownMenuTrigger from "./dropdown-menu-trigger.js";
33
33
  import dropdownMenu from "./dropdown-menu.js";
34
34
  import hintText from "./hint-text.js";
35
35
  import label from "./label.js";
36
36
  import modalBody from "./modal-body.js";
37
- import { _ as _sfc_main$9 } from "./chunks/modal-close.js";
37
+ import { _ as _sfc_main$8 } from "./chunks/modal-close.js";
38
38
  import modalContent from "./modal-content.js";
39
39
  import modalFooter from "./modal-footer.js";
40
40
  import modalHeader from "./modal-header.js";
41
- import { _ as _sfc_main$a } from "./chunks/modal-trigger.js";
42
- import { _ as _sfc_main$8 } from "./chunks/modal.js";
41
+ import { _ as _sfc_main$9 } from "./chunks/modal-trigger.js";
42
+ import { _ as _sfc_main$7 } from "./chunks/modal.js";
43
43
  import PopoverContent from "./popover-content.js";
44
44
  import PopoverTrigger from "./popover-trigger.js";
45
- import { _ as _sfc_main$b } from "./chunks/popover.js";
46
- import { _ as _sfc_main$c } from "./chunks/scroll-area.js";
45
+ import { _ as _sfc_main$a } from "./chunks/popover.js";
46
+ import { _ as _sfc_main$b } from "./chunks/scroll-area.js";
47
47
  import segmentedControlItem from "./segmented-control-item.js";
48
48
  import segmentedControl from "./segmented-control.js";
49
49
  import SelectContent from "./select-content.js";
50
- import { _ as _sfc_main$e } from "./chunks/select-group.js";
50
+ import { _ as _sfc_main$d } from "./chunks/select-group.js";
51
51
  import selectIcon from "./select-icon.js";
52
52
  import SelectItem from "./select-item.js";
53
53
  import selectLabel from "./select-label.js";
54
54
  import selectSeparator from "./select-separator.js";
55
55
  import SelectTrigger from "./select-trigger.js";
56
56
  import SelectValue from "./select-value.js";
57
- import { _ as _sfc_main$d } from "./chunks/select.js";
58
- import { _ as _sfc_main$f } from "./chunks/slider.vue_vue_type_style_index_0_lang.js";
59
- import { _ as _sfc_main$g } from "./chunks/switch.vue_vue_type_style_index_0_lang.js";
57
+ import { _ as _sfc_main$c } from "./chunks/select.js";
58
+ import { _ as _sfc_main$e } from "./chunks/slider.vue_vue_type_style_index_0_lang.js";
59
+ import { _ as _sfc_main$f } from "./chunks/switch.vue_vue_type_style_index_0_lang.js";
60
60
  import tabMenuContent from "./tab-menu-content.js";
61
61
  import tabMenuItem from "./tab-menu-item.js";
62
62
  import tabMenuList from "./tab-menu-list.js";
@@ -79,54 +79,54 @@ const components = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
79
79
  ComboboxInput,
80
80
  ComboboxItem,
81
81
  ComboboxList,
82
- ComboboxRoot: _sfc_main$2,
82
+ ComboboxRoot,
83
83
  ComboboxSeparator,
84
84
  ComboboxTrigger,
85
85
  CompactButton,
86
- ContentDivider: _sfc_main$3,
86
+ ContentDivider: _sfc_main$2,
87
87
  ContextMenuItem: contextMenuItem,
88
88
  Dropdown: dropdown,
89
89
  DropdownItem,
90
90
  DropdownMenu: dropdownMenu,
91
- DropdownMenuContent: _sfc_main$4,
91
+ DropdownMenuContent: _sfc_main$3,
92
92
  DropdownMenuGroup: dropdownMenuGroup,
93
93
  DropdownMenuItem: dropdownMenuItem,
94
94
  DropdownMenuLabel: dropdownMenuLabel,
95
95
  DropdownMenuSeparator: dropdownMenuSeparator,
96
- DropdownMenuSub: _sfc_main$5,
97
- DropdownMenuSubContent: _sfc_main$6,
98
- DropdownMenuSubTrigger: _sfc_main$7,
96
+ DropdownMenuSub: _sfc_main$4,
97
+ DropdownMenuSubContent: _sfc_main$5,
98
+ DropdownMenuSubTrigger: _sfc_main$6,
99
99
  DropdownMenuTrigger: dropdownMenuTrigger,
100
100
  FancyButton: fancyButton,
101
101
  HintText: hintText,
102
102
  Label: label,
103
103
  LinkButton: linkButton,
104
- Modal: _sfc_main$8,
104
+ Modal: _sfc_main$7,
105
105
  ModalBody: modalBody,
106
- ModalClose: _sfc_main$9,
106
+ ModalClose: _sfc_main$8,
107
107
  ModalContent: modalContent,
108
108
  ModalFooter: modalFooter,
109
109
  ModalHeader: modalHeader,
110
- ModalTrigger: _sfc_main$a,
111
- Popover: _sfc_main$b,
110
+ ModalTrigger: _sfc_main$9,
111
+ Popover: _sfc_main$a,
112
112
  PopoverContent,
113
113
  PopoverTrigger,
114
- ScrollArea: _sfc_main$c,
114
+ ScrollArea: _sfc_main$b,
115
115
  SegmentedControl: segmentedControl,
116
116
  SegmentedControlItem: segmentedControlItem,
117
- Select: _sfc_main$d,
117
+ Select: _sfc_main$c,
118
118
  SelectContent,
119
- SelectGroup: _sfc_main$e,
119
+ SelectGroup: _sfc_main$d,
120
120
  SelectIcon: selectIcon,
121
121
  SelectItem,
122
122
  SelectLabel: selectLabel,
123
123
  SelectSeparator: selectSeparator,
124
124
  SelectTrigger,
125
125
  SelectValue,
126
- Slider: _sfc_main$f,
126
+ Slider: _sfc_main$e,
127
127
  SocialButton: socialButton,
128
128
  StatusBadge: statusBadge,
129
- Switch: _sfc_main$g,
129
+ Switch: _sfc_main$f,
130
130
  TabMenu: tabMenu,
131
131
  TabMenuContent: tabMenuContent,
132
132
  TabMenuItem: tabMenuItem,
@@ -157,54 +157,54 @@ export {
157
157
  ComboboxInput,
158
158
  ComboboxItem,
159
159
  ComboboxList,
160
- _sfc_main$2 as ComboboxRoot,
160
+ ComboboxRoot,
161
161
  ComboboxSeparator,
162
162
  ComboboxTrigger,
163
163
  CompactButton,
164
- _sfc_main$3 as ContentDivider,
164
+ _sfc_main$2 as ContentDivider,
165
165
  contextMenuItem as ContextMenuItem,
166
166
  dropdown as Dropdown,
167
167
  DropdownItem,
168
168
  dropdownMenu as DropdownMenu,
169
- _sfc_main$4 as DropdownMenuContent,
169
+ _sfc_main$3 as DropdownMenuContent,
170
170
  dropdownMenuGroup as DropdownMenuGroup,
171
171
  dropdownMenuItem as DropdownMenuItem,
172
172
  dropdownMenuLabel as DropdownMenuLabel,
173
173
  dropdownMenuSeparator as DropdownMenuSeparator,
174
- _sfc_main$5 as DropdownMenuSub,
175
- _sfc_main$6 as DropdownMenuSubContent,
176
- _sfc_main$7 as DropdownMenuSubTrigger,
174
+ _sfc_main$4 as DropdownMenuSub,
175
+ _sfc_main$5 as DropdownMenuSubContent,
176
+ _sfc_main$6 as DropdownMenuSubTrigger,
177
177
  dropdownMenuTrigger as DropdownMenuTrigger,
178
178
  fancyButton as FancyButton,
179
179
  hintText as HintText,
180
180
  label as Label,
181
181
  linkButton as LinkButton,
182
- _sfc_main$8 as Modal,
182
+ _sfc_main$7 as Modal,
183
183
  modalBody as ModalBody,
184
- _sfc_main$9 as ModalClose,
184
+ _sfc_main$8 as ModalClose,
185
185
  modalContent as ModalContent,
186
186
  modalFooter as ModalFooter,
187
187
  modalHeader as ModalHeader,
188
- _sfc_main$a as ModalTrigger,
189
- _sfc_main$b as Popover,
188
+ _sfc_main$9 as ModalTrigger,
189
+ _sfc_main$a as Popover,
190
190
  PopoverContent,
191
191
  PopoverTrigger,
192
- _sfc_main$c as ScrollArea,
192
+ _sfc_main$b as ScrollArea,
193
193
  segmentedControl as SegmentedControl,
194
194
  segmentedControlItem as SegmentedControlItem,
195
- _sfc_main$d as Select,
195
+ _sfc_main$c as Select,
196
196
  SelectContent,
197
- _sfc_main$e as SelectGroup,
197
+ _sfc_main$d as SelectGroup,
198
198
  selectIcon as SelectIcon,
199
199
  SelectItem,
200
200
  selectLabel as SelectLabel,
201
201
  selectSeparator as SelectSeparator,
202
202
  SelectTrigger,
203
203
  SelectValue,
204
- _sfc_main$f as Slider,
204
+ _sfc_main$e as Slider,
205
205
  socialButton as SocialButton,
206
206
  statusBadge as StatusBadge,
207
- _sfc_main$g as Switch,
207
+ _sfc_main$f as Switch,
208
208
  tabMenu as TabMenu,
209
209
  tabMenuContent as TabMenuContent,
210
210
  tabMenuItem as TabMenuItem,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@youcan/celeste",
3
3
  "type": "module",
4
- "version": "0.6.23",
4
+ "version": "0.6.25",
5
5
  "author": "YouCan <tech@youcan.shop>",
6
6
  "keywords": [
7
7
  "youcan",
@@ -32,8 +32,8 @@
32
32
  "clsx": "^2.1.1",
33
33
  "radix-vue": "^1.9.12",
34
34
  "tinycolor2": "^1.6.0",
35
- "@youcan/celeste-icons": "0.6.23",
36
- "@youcan/celeste-tokens": "0.6.23"
35
+ "@youcan/celeste-icons": "0.6.25",
36
+ "@youcan/celeste-tokens": "0.6.25"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@chromatic-com/storybook": "^4.0.0",
@@ -6,10 +6,9 @@ import { computed, type HTMLAttributes } from 'vue';
6
6
 
7
7
  const props = withDefaults(defineProps<ComboboxContentProps & { class?: HTMLAttributes['class'] }>(), {
8
8
  position: 'popper',
9
- align: 'center',
9
+ align: 'start',
10
10
  sideOffset: 4,
11
11
  });
12
-
13
12
  const emits = defineEmits<ComboboxContentEmits>();
14
13
 
15
14
  const delegatedProps = computed(() => {
@@ -25,7 +24,6 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
25
24
  <ComboboxPortal>
26
25
  <ComboboxContent
27
26
  v-bind="forwarded"
28
- force-mount
29
27
  :class="clsx('celeste-dropdown-content', props.class)"
30
28
  >
31
29
  <ComboboxViewport class="celeste-dropdown-items-viewport">
@@ -38,43 +36,65 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
38
36
  <style lang="scss" scoped>
39
37
  .celeste-dropdown-content,
40
38
  div:deep(.celeste-dropdown-content) {
41
- --dropdown-width: 100%;
39
+ --dropdown-width: fit-content;
42
40
  --dropdown-height: 300px;
41
+ --dropdown-min-width: var(--radix-combobox-trigger-width, 300px);
43
42
 
44
43
  display: flex;
45
44
  z-index: 50;
46
45
  box-sizing: border-box;
47
46
  flex-direction: column;
48
47
  width: var(--dropdown-width);
49
- min-width: 300px;
48
+ min-width: var(--dropdown-min-width);
50
49
  max-height: var(--dropdown-height);
51
50
  margin-top: var(--spacing-10);
52
51
  padding: var(--spacing-8);
53
- overflow: hidden;
54
- transition-property: background-color, transform, opacity;
55
- transition-duration: var(--animation-fast);
56
- transition-timing-function: ease-out;
52
+ overflow: visible;
53
+ transform-origin: var(--radix-combobox-content-transform-origin);
54
+ animation-duration: var(--animation-fast);
55
+ animation-timing-function: ease-out;
57
56
  border: 1px solid var(--color-stroke-soft-200);
58
57
  border-radius: var(--radius-16);
59
58
  background-color: var(--color-bg-white-0);
60
59
  box-shadow: var(--shadow-regular-md);
61
60
  gap: var(--spacing-4);
62
61
 
62
+ &[data-state='open'] {
63
+ animation-name: slide-up-and-fade;
64
+ }
65
+
63
66
  &[data-state='closed'] {
67
+ animation-name: slide-down-and-fade;
68
+ }
69
+ }
70
+
71
+ div:deep(.celeste-dropdown-items-viewport) {
72
+ display: flex;
73
+ flex-direction: column;
74
+ gap: var(--spacing-4);
75
+ }
76
+
77
+ @keyframes slide-up-and-fade {
78
+ from {
64
79
  transform: translateY(10px);
65
80
  opacity: 0;
66
- pointer-events: none;
67
81
  }
68
82
 
69
- &[data-state='open'] {
83
+ to {
70
84
  transform: translateY(0);
71
85
  opacity: 1;
72
86
  }
73
87
  }
74
88
 
75
- div:deep(.celeste-dropdown-items-viewport) {
76
- display: flex;
77
- flex-direction: column;
78
- gap: var(--spacing-4);
89
+ @keyframes slide-down-and-fade {
90
+ from {
91
+ transform: translateY(0);
92
+ opacity: 1;
93
+ }
94
+
95
+ to {
96
+ transform: translateY(10px);
97
+ opacity: 0;
98
+ }
79
99
  }
80
100
  </style>
@@ -8,7 +8,13 @@ const forwarded = useForwardPropsEmits(props, emits);
8
8
  </script>
9
9
 
10
10
  <template>
11
- <ComboboxRoot v-bind="forwarded">
11
+ <ComboboxRoot class="celeste-combobox-root" v-bind="forwarded">
12
12
  <slot />
13
13
  </ComboboxRoot>
14
14
  </template>
15
+
16
+ <style lang="scss" scoped>
17
+ .celeste-combobox-root {
18
+ flex-shrink: 0;
19
+ }
20
+ </style>
@@ -195,7 +195,7 @@ export interface CustomComboboxTriggerProps extends ComboboxTriggerProps {
195
195
  &.celeste-dropdown-anchor-trigger-type-compact-input {
196
196
  width: fit-content;
197
197
  border: none;
198
- border-radius: var(--radius-0);
198
+ border-radius: 0;
199
199
  box-shadow: none;
200
200
 
201
201
  &:deep(.celeste-dropdown-input) {
@@ -28,6 +28,7 @@ const delegatedProps = computed(() => {
28
28
  filterFunction,
29
29
  options,
30
30
  valueBy,
31
+ labelBy,
31
32
  placeholder,
32
33
  type,
33
34
  size,
@@ -45,6 +46,24 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
45
46
 
46
47
  const model = computed(() => props.modelValue as ComboboxItemPropsType[] | ComboboxItemPropsType | undefined);
47
48
 
49
+ const label = computed(() => {
50
+ if (!model.value)
51
+ return props.placeholder;
52
+
53
+ if (Array.isArray(model.value)) {
54
+ if (model.value.length === 0)
55
+ return props.placeholder;
56
+
57
+ return model.value
58
+ .map(item => props.labelBy
59
+ ? item[props.labelBy as keyof ComboboxItemPropsType]
60
+ : item.label)
61
+ .join(', ');
62
+ }
63
+
64
+ return props.labelBy ? model.value[props.labelBy as keyof ComboboxItemPropsType] : model.value.label;
65
+ });
66
+
48
67
  function isSelected(value: ComboboxItemPropsType['value']): boolean | undefined {
49
68
  if (!Array.isArray(props.modelValue) || !props.multiple)
50
69
  return;
@@ -96,6 +115,7 @@ const mergedBadgeProps = computed(() => ({
96
115
  export interface ComboboxPropsType extends ComboboxRootProps {
97
116
  options: ComboboxItemPropsType[];
98
117
  valueBy?: string;
118
+ labelBy?: string;
99
119
  placeholder?: string;
100
120
  type?: 'normal' | 'compact' | 'inline' | 'compact-input';
101
121
  size?: 'xs' | 'sm' | 'md';
@@ -148,9 +168,8 @@ export default {
148
168
  v-if="type !== 'inline'"
149
169
  class="celeste-dropdown-input"
150
170
  >
151
- <span v-if="multiple">{{ placeholder }}</span>
152
- <span v-else>
153
- {{ model && !Array.isArray(model) ? model.label : props.placeholder }}
171
+ <span>
172
+ {{ label }}
154
173
  </span>
155
174
  <span v-if="mergedBadgeProps && badgeProps" class="celeste-input-badge">
156
175
  <Badge v-bind="mergedBadgeProps" />
@@ -453,7 +453,7 @@ export interface SelectedType {
453
453
  &.celeste-dropdown-anchor-trigger-type-compact-input {
454
454
  width: fit-content;
455
455
  border: none;
456
- border-radius: var(--radius-0);
456
+ border-radius: 0;
457
457
  box-shadow: none;
458
458
 
459
459
  &:deep(.celeste-dropdown-input) {
@@ -1,38 +0,0 @@
1
- "use strict";
2
- const Mo = require("vue");
3
- const index = require("./index.js");
4
- const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
5
- __name: "combobox-root",
6
- props: {
7
- modelValue: {},
8
- defaultValue: {},
9
- open: { type: Boolean },
10
- defaultOpen: { type: Boolean },
11
- searchTerm: {},
12
- selectedValue: {},
13
- multiple: { type: Boolean },
14
- disabled: { type: Boolean },
15
- name: {},
16
- dir: {},
17
- filterFunction: { type: Function },
18
- displayValue: { type: Function },
19
- resetSearchTermOnBlur: { type: Boolean },
20
- asChild: { type: Boolean },
21
- as: {}
22
- },
23
- emits: ["update:modelValue", "update:open", "update:searchTerm", "update:selectedValue"],
24
- setup(__props, { emit: __emit }) {
25
- const props = __props;
26
- const emits = __emit;
27
- const forwarded = index.xe(props, emits);
28
- return (_ctx, _cache) => {
29
- return Mo.openBlock(), Mo.createBlock(Mo.unref(index.Hv), Mo.normalizeProps(Mo.guardReactiveProps(Mo.unref(forwarded))), {
30
- default: Mo.withCtx(() => [
31
- Mo.renderSlot(_ctx.$slots, "default")
32
- ]),
33
- _: 3
34
- }, 16);
35
- };
36
- }
37
- });
38
- exports._sfc_main = _sfc_main;
@@ -1,39 +0,0 @@
1
- import { defineComponent, openBlock, createBlock, unref, normalizeProps, guardReactiveProps, withCtx, renderSlot } from "vue";
2
- import { x as xe, H as Hv } from "./index.js";
3
- const _sfc_main = /* @__PURE__ */ defineComponent({
4
- __name: "combobox-root",
5
- props: {
6
- modelValue: {},
7
- defaultValue: {},
8
- open: { type: Boolean },
9
- defaultOpen: { type: Boolean },
10
- searchTerm: {},
11
- selectedValue: {},
12
- multiple: { type: Boolean },
13
- disabled: { type: Boolean },
14
- name: {},
15
- dir: {},
16
- filterFunction: { type: Function },
17
- displayValue: { type: Function },
18
- resetSearchTermOnBlur: { type: Boolean },
19
- asChild: { type: Boolean },
20
- as: {}
21
- },
22
- emits: ["update:modelValue", "update:open", "update:searchTerm", "update:selectedValue"],
23
- setup(__props, { emit: __emit }) {
24
- const props = __props;
25
- const emits = __emit;
26
- const forwarded = xe(props, emits);
27
- return (_ctx, _cache) => {
28
- return openBlock(), createBlock(unref(Hv), normalizeProps(guardReactiveProps(unref(forwarded))), {
29
- default: withCtx(() => [
30
- renderSlot(_ctx.$slots, "default")
31
- ]),
32
- _: 3
33
- }, 16);
34
- };
35
- }
36
- });
37
- export {
38
- _sfc_main as _
39
- };