@youcan/celeste 0.6.22 → 0.6.24

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/celeste.css CHANGED
@@ -1972,7 +1972,7 @@ to {
1972
1972
  width: 100%;
1973
1973
  height: 1px;
1974
1974
  background-color: var(--color-stroke-soft-200);
1975
- }.celeste-dropdown-anchor-trigger[data-v-1d007d84] {
1975
+ }.celeste-dropdown-anchor-trigger[data-v-43f9e53e] {
1976
1976
  transition-property: background-color, transform, opacity;
1977
1977
  transition-duration: var(--animation-fast);
1978
1978
  transition-timing-function: ease-out;
@@ -1984,29 +1984,29 @@ to {
1984
1984
  gap: var(--spacing-8);
1985
1985
  cursor: pointer;
1986
1986
  }
1987
- .celeste-dropdown-anchor-trigger[data-v-1d007d84] i {
1987
+ .celeste-dropdown-anchor-trigger[data-v-43f9e53e] i {
1988
1988
  width: 20px;
1989
1989
  height: 20px;
1990
1990
  color: var(--color-icon-soft-400);
1991
1991
  }
1992
- .celeste-dropdown-anchor-trigger[data-v-1d007d84]:hover {
1992
+ .celeste-dropdown-anchor-trigger[data-v-43f9e53e]:hover {
1993
1993
  background: var(--color-bg-weak-50);
1994
1994
  }
1995
- .celeste-dropdown-anchor-trigger[data-v-1d007d84]:focus, .celeste-dropdown-anchor-trigger[data-v-1d007d84]:focus-visible, .celeste-dropdown-anchor-trigger[data-v-1d007d84]:focus-within {
1995
+ .celeste-dropdown-anchor-trigger[data-v-43f9e53e]:focus, .celeste-dropdown-anchor-trigger[data-v-43f9e53e]:focus-visible, .celeste-dropdown-anchor-trigger[data-v-43f9e53e]:focus-within {
1996
1996
  outline: none;
1997
1997
  box-shadow: var(--shadow-buttons-important-focus);
1998
1998
  }
1999
- .celeste-dropdown-anchor-trigger .celeste-dropdown-anchor-trigger-prefix[data-v-1d007d84] {
1999
+ .celeste-dropdown-anchor-trigger .celeste-dropdown-anchor-trigger-prefix[data-v-43f9e53e] {
2000
2000
  display: flex;
2001
2001
  align-items: center;
2002
2002
  justify-content: center;
2003
2003
  }
2004
- .celeste-dropdown-anchor-trigger .celeste-dropdown-anchor-trigger-prefix-selected[data-v-1d007d84] {
2004
+ .celeste-dropdown-anchor-trigger .celeste-dropdown-anchor-trigger-prefix-selected[data-v-43f9e53e] {
2005
2005
  display: flex;
2006
2006
  align-items: center;
2007
2007
  justify-content: center;
2008
2008
  }
2009
- .celeste-dropdown-anchor-trigger .celeste-dropdown-input[data-v-1d007d84] {
2009
+ .celeste-dropdown-anchor-trigger .celeste-dropdown-input[data-v-43f9e53e] {
2010
2010
  display: flex;
2011
2011
  flex: 1 0 0;
2012
2012
  align-items: center;
@@ -2017,7 +2017,7 @@ to {
2017
2017
  cursor: pointer;
2018
2018
  gap: var(--spacing-8);
2019
2019
  }
2020
- .celeste-dropdown-anchor-trigger .celeste-dropdown-trigger[data-v-1d007d84] {
2020
+ .celeste-dropdown-anchor-trigger .celeste-dropdown-trigger[data-v-43f9e53e] {
2021
2021
  transition-property: background-color, transform, opacity;
2022
2022
  transition-duration: var(--animation-fast);
2023
2023
  transition-timing-function: ease-out;
@@ -2028,27 +2028,27 @@ to {
2028
2028
  color: var(--color-icon-soft-400);
2029
2029
  cursor: pointer;
2030
2030
  }
2031
- .celeste-dropdown-anchor-trigger[data-state=open][data-v-1d007d84]:not([data-disabled]) .celeste-dropdown-trigger {
2031
+ .celeste-dropdown-anchor-trigger[data-state=open][data-v-43f9e53e]:not([data-disabled]) .celeste-dropdown-trigger {
2032
2032
  transform: rotate(180deg);
2033
2033
  }
2034
- .celeste-dropdown-anchor-trigger-error[data-v-1d007d84]:not(.celeste-dropdown-anchor-trigger-type-compact) {
2034
+ .celeste-dropdown-anchor-trigger-error[data-v-43f9e53e]:not(.celeste-dropdown-anchor-trigger-type-compact) {
2035
2035
  border: 1px solid var(--color-state-error-base);
2036
2036
  }
2037
- .celeste-dropdown-anchor-trigger[data-disabled][data-v-1d007d84] {
2037
+ .celeste-dropdown-anchor-trigger[data-disabled][data-v-43f9e53e] {
2038
2038
  background: var(--color-bg-weak-50);
2039
2039
  color: var(--color-text-disabled-300);
2040
2040
  cursor: not-allowed;
2041
2041
  }
2042
- .celeste-dropdown-anchor-trigger[data-disabled] .celeste-dropdown-input[data-v-1d007d84] {
2042
+ .celeste-dropdown-anchor-trigger[data-disabled] .celeste-dropdown-input[data-v-43f9e53e] {
2043
2043
  color: var(--color-text-disabled-300);
2044
2044
  cursor: not-allowed;
2045
2045
  }
2046
- .celeste-dropdown-anchor-trigger[data-disabled][data-v-1d007d84] i,
2047
- .celeste-dropdown-anchor-trigger[data-disabled] .celeste-dropdown-trigger[data-v-1d007d84] {
2046
+ .celeste-dropdown-anchor-trigger[data-disabled][data-v-43f9e53e] i,
2047
+ .celeste-dropdown-anchor-trigger[data-disabled] .celeste-dropdown-trigger[data-v-43f9e53e] {
2048
2048
  color: var(--color-icon-disabled-300);
2049
2049
  cursor: not-allowed;
2050
2050
  }
2051
- .celeste-dropdown-anchor-trigger[data-state=open][data-v-1d007d84]:not([data-disabled],
2051
+ .celeste-dropdown-anchor-trigger[data-state=open][data-v-43f9e53e]:not([data-disabled],
2052
2052
  .celeste-dropdown-anchor-trigger-type-compact,
2053
2053
  .celeste-dropdown-anchor-trigger-type-compact-input) {
2054
2054
  border: 1px solid var(--color-stroke-strong-950);
@@ -2057,90 +2057,90 @@ to {
2057
2057
  }
2058
2058
  .celeste-dropdown-anchor-trigger[data-state=open]:not([data-disabled],
2059
2059
  .celeste-dropdown-anchor-trigger-type-compact,
2060
- .celeste-dropdown-anchor-trigger-type-compact-input) .celeste-dropdown-input[data-v-1d007d84] {
2060
+ .celeste-dropdown-anchor-trigger-type-compact-input) .celeste-dropdown-input[data-v-43f9e53e] {
2061
2061
  color: var(--color-text-strong-950);
2062
2062
  }
2063
2063
  .celeste-dropdown-anchor-trigger[data-state=open]:not([data-disabled],
2064
2064
  .celeste-dropdown-anchor-trigger-type-compact,
2065
- .celeste-dropdown-anchor-trigger-type-compact-input) i[data-v-1d007d84] {
2065
+ .celeste-dropdown-anchor-trigger-type-compact-input) i[data-v-43f9e53e] {
2066
2066
  color: var(--color-icon-strong-950);
2067
2067
  }
2068
- .celeste-dropdown-anchor-trigger-filled[data-v-1d007d84] {
2068
+ .celeste-dropdown-anchor-trigger-filled[data-v-43f9e53e] {
2069
2069
  color: var(--color-text-strong-950);
2070
2070
  }
2071
- .celeste-dropdown-anchor-trigger-filled[data-v-1d007d84] .celeste-dropdown-input {
2071
+ .celeste-dropdown-anchor-trigger-filled[data-v-43f9e53e] .celeste-dropdown-input {
2072
2072
  color: var(--color-text-strong-950);
2073
2073
  }
2074
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-v-1d007d84] {
2074
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-v-43f9e53e] {
2075
2075
  width: -moz-fit-content;
2076
2076
  width: fit-content;
2077
2077
  border: none;
2078
2078
  background: transparent;
2079
2079
  box-shadow: none;
2080
2080
  }
2081
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-v-1d007d84] .celeste-dropdown-input {
2081
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-v-43f9e53e] .celeste-dropdown-input {
2082
2082
  flex: inherit;
2083
2083
  }
2084
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact:hover:not([data-disabled]) .celeste-dropdown-input[data-v-1d007d84], .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-state=open]:not([data-disabled]) .celeste-dropdown-input[data-v-1d007d84] {
2084
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact:hover:not([data-disabled]) .celeste-dropdown-input[data-v-43f9e53e], .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-state=open]:not([data-disabled]) .celeste-dropdown-input[data-v-43f9e53e] {
2085
2085
  color: var(--color-text-strong-950);
2086
2086
  }
2087
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-v-1d007d84]:hover:not([data-disabled]) i, .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-state=open][data-v-1d007d84]:not([data-disabled]) i {
2087
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-v-43f9e53e]:hover:not([data-disabled]) i, .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact[data-state=open][data-v-43f9e53e]:not([data-disabled]) i {
2088
2088
  color: var(--color-icon-strong-950);
2089
2089
  }
2090
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact-input[data-v-1d007d84] {
2090
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact-input[data-v-43f9e53e] {
2091
2091
  width: -moz-fit-content;
2092
2092
  width: fit-content;
2093
2093
  border: none;
2094
2094
  border-radius: var(--radius-0);
2095
2095
  box-shadow: none;
2096
2096
  }
2097
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact-input[data-v-1d007d84] .celeste-dropdown-input {
2097
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact-input[data-v-43f9e53e] .celeste-dropdown-input {
2098
2098
  flex: inherit;
2099
2099
  }
2100
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact-input[data-state=open][data-v-1d007d84] {
2100
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-compact-input[data-state=open][data-v-43f9e53e] {
2101
2101
  box-shadow: none;
2102
2102
  }
2103
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-inline[data-v-1d007d84] {
2103
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-inline[data-v-43f9e53e] {
2104
2104
  width: -moz-fit-content;
2105
2105
  width: fit-content;
2106
2106
  gap: var(--spacing-4);
2107
2107
  }
2108
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-inline[data-v-1d007d84] .celeste-dropdown-input {
2108
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-inline[data-v-43f9e53e] .celeste-dropdown-input {
2109
2109
  flex: inherit;
2110
2110
  }
2111
- .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-normal[data-v-1d007d84] {
2111
+ .celeste-dropdown-anchor-trigger.celeste-dropdown-anchor-trigger-type-normal[data-v-43f9e53e] {
2112
2112
  width: 100%;
2113
2113
  min-width: 300px;
2114
2114
  }
2115
- .celeste-dropdown-anchor-trigger-size-xs[data-v-1d007d84] {
2115
+ .celeste-dropdown-anchor-trigger-size-xs[data-v-43f9e53e] {
2116
2116
  height: 32px;
2117
2117
  padding: var(--spacing-6);
2118
2118
  border-radius: var(--radius-8);
2119
2119
  }
2120
- .celeste-dropdown-anchor-trigger-size-sm[data-v-1d007d84] {
2120
+ .celeste-dropdown-anchor-trigger-size-sm[data-v-43f9e53e] {
2121
2121
  height: 36px;
2122
2122
  padding: var(--spacing-8);
2123
2123
  border-radius: var(--radius-8);
2124
2124
  }
2125
- .celeste-dropdown-anchor-trigger-size-md[data-v-1d007d84] {
2125
+ .celeste-dropdown-anchor-trigger-size-md[data-v-43f9e53e] {
2126
2126
  height: 40px;
2127
2127
  padding: var(--spacing-10);
2128
2128
  border-radius: var(--radius-10);
2129
- }[data-v-268c7202] {
2129
+ }[data-v-cad50435] {
2130
2130
  box-sizing: border-box;
2131
2131
  }
2132
- .celeste-dropdown-anchor-trigger-prefix[data-v-268c7202] {
2132
+ .celeste-dropdown-anchor-trigger-prefix[data-v-cad50435] {
2133
2133
  display: flex;
2134
2134
  align-items: center;
2135
2135
  justify-content: center;
2136
2136
  }
2137
- .celeste-dropdown-anchor-trigger-prefix-selected[data-v-268c7202] {
2137
+ .celeste-dropdown-anchor-trigger-prefix-selected[data-v-cad50435] {
2138
2138
  display: flex;
2139
2139
  align-items: center;
2140
2140
  justify-content: center;
2141
2141
  }
2142
- .celeste-dropdown-item-image[data-v-268c7202],
2143
- .selected-dropdown-image[data-v-268c7202] {
2142
+ .celeste-dropdown-item-image[data-v-cad50435],
2143
+ .selected-dropdown-image[data-v-cad50435] {
2144
2144
  display: flex;
2145
2145
  align-items: center;
2146
2146
  justify-content: center;
@@ -2150,7 +2150,7 @@ to {
2150
2150
  object-fit: cover;
2151
2151
  border-radius: var(--radius-full);
2152
2152
  }
2153
- .celeste-dropdown-input[data-v-268c7202] {
2153
+ .celeste-dropdown-input[data-v-cad50435] {
2154
2154
  display: flex;
2155
2155
  flex: 1 0 0;
2156
2156
  align-items: center;
@@ -2161,7 +2161,7 @@ to {
2161
2161
  cursor: pointer;
2162
2162
  gap: var(--spacing-8);
2163
2163
  }
2164
- .celeste-dropdown-trigger[data-v-268c7202] {
2164
+ .celeste-dropdown-trigger[data-v-cad50435] {
2165
2165
  display: flex;
2166
2166
  place-items: center center;
2167
2167
  transition-property: transform;
@@ -2172,7 +2172,7 @@ to {
2172
2172
  color: var(--color-icon-soft-400);
2173
2173
  cursor: pointer;
2174
2174
  }
2175
- .celeste-dropdown-inner-input[data-v-268c7202] {
2175
+ .celeste-dropdown-inner-input[data-v-cad50435] {
2176
2176
  display: flex;
2177
2177
  position: sticky;
2178
2178
  z-index: 50;
@@ -2181,7 +2181,7 @@ to {
2181
2181
  gap: var(--spacing-4);
2182
2182
  background-color: var(--color-bg-white-0);
2183
2183
  }
2184
- .celeste-dropdown-inner-input.sr-only[data-v-268c7202] {
2184
+ .celeste-dropdown-inner-input.sr-only[data-v-cad50435] {
2185
2185
  position: absolute;
2186
2186
  width: 1px;
2187
2187
  height: 1px;
@@ -24,6 +24,7 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
24
24
  const forwarded = index.At(delegatedProps);
25
25
  return (_ctx, _cache) => {
26
26
  return Mo.openBlock(), Mo.createBlock(Mo.unref(index.Uv), Mo.mergeProps(Mo.unref(forwarded), {
27
+ type: "button",
27
28
  tabindex: "0",
28
29
  class: Mo.unref(clsx.clsx)(
29
30
  "celeste-dropdown-anchor-trigger",
@@ -42,5 +43,5 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
42
43
  };
43
44
  }
44
45
  });
45
- const ComboboxTrigger = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main, [["__scopeId", "data-v-1d007d84"]]);
46
+ const ComboboxTrigger = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main, [["__scopeId", "data-v-43f9e53e"]]);
46
47
  module.exports = ComboboxTrigger;
@@ -27,13 +27,11 @@ const _hoisted_6 = {
27
27
  key: 2,
28
28
  class: "celeste-dropdown-input"
29
29
  };
30
- const _hoisted_7 = { key: 0 };
31
- const _hoisted_8 = { key: 1 };
32
- const _hoisted_9 = {
33
- key: 2,
30
+ const _hoisted_7 = {
31
+ key: 0,
34
32
  class: "celeste-input-badge"
35
33
  };
36
- const _hoisted_10 = ["src"];
34
+ const _hoisted_8 = ["src"];
37
35
  const __default__ = {
38
36
  inheritAttrs: false
39
37
  };
@@ -43,6 +41,7 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
43
41
  props: {
44
42
  options: {},
45
43
  valueBy: {},
44
+ labelBy: {},
46
45
  placeholder: { default: "Select" },
47
46
  type: {},
48
47
  size: { default: "md" },
@@ -76,6 +75,7 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
76
75
  filterFunction: filterFunction2,
77
76
  options,
78
77
  valueBy,
78
+ labelBy,
79
79
  placeholder,
80
80
  type,
81
81
  size,
@@ -89,6 +89,16 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
89
89
  });
90
90
  const forwarded = index.xe(delegatedProps, emits);
91
91
  const model = Mo.computed(() => props.modelValue);
92
+ const label = Mo.computed(() => {
93
+ if (!model.value)
94
+ return props.placeholder;
95
+ if (Array.isArray(model.value)) {
96
+ if (model.value.length === 0)
97
+ return props.placeholder;
98
+ return model.value.map((item) => props.labelBy ? item[props.labelBy] : item.label).join(", ");
99
+ }
100
+ return props.labelBy ? model.value[props.labelBy] : model.value.label;
101
+ });
92
102
  function isSelected(value) {
93
103
  if (!Array.isArray(props.modelValue) || !props.multiple)
94
104
  return;
@@ -104,13 +114,13 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
104
114
  }
105
115
  function filterFunction(list, searchTerm) {
106
116
  return list.filter((option) => {
107
- const { value, label } = option;
108
- if (!value || !label)
117
+ const { value, label: label2 } = option;
118
+ if (!value || !label2)
109
119
  return false;
110
120
  if (props.valueBy && typeof value === "object" && props.valueBy in value) {
111
- return String(value[props.valueBy]).toLowerCase().includes(searchTerm.toLowerCase()) || label.toString().toLowerCase().includes(searchTerm.toLowerCase());
121
+ return String(value[props.valueBy]).toLowerCase().includes(searchTerm.toLowerCase()) || label2.toString().toLowerCase().includes(searchTerm.toLowerCase());
112
122
  }
113
- return value.toString().toLowerCase().includes(searchTerm.toLowerCase()) || label.toString().toLowerCase().includes(searchTerm.toLowerCase());
123
+ return value.toString().toLowerCase().includes(searchTerm.toLowerCase()) || label2.toString().toLowerCase().includes(searchTerm.toLowerCase());
114
124
  });
115
125
  }
116
126
  const mergedBadgeProps = Mo.computed(() => ({
@@ -118,7 +128,7 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
118
128
  disabled: props.disabled
119
129
  }));
120
130
  return (_ctx, _cache) => {
121
- return Mo.openBlock(), Mo.createBlock(comboboxRoot_vue_vue_type_script_setup_true_lang._sfc_main, Mo.mergeProps(Mo.unref(forwarded), { "filter-function": filterFunction }), {
131
+ return Mo.openBlock(), Mo.createBlock(comboboxRoot_vue_vue_type_script_setup_true_lang._sfc_main, Mo.mergeProps({ class: "shrink-0" }, Mo.unref(forwarded), { "filter-function": filterFunction }), {
122
132
  default: Mo.withCtx(() => [
123
133
  Mo.createVNode(comboboxAnchor_vue_vue_type_script_setup_true_lang._sfc_main, { "as-child": "" }, {
124
134
  default: Mo.withCtx(() => [
@@ -149,8 +159,8 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
149
159
  Mo.renderSlot(_ctx.$slots, "prefix", { class: "celeste-dropdown-anchor-trigger-prefix-default" }, void 0, true)
150
160
  ])) : Mo.createCommentVNode("", true),
151
161
  _ctx.type !== "inline" ? (Mo.openBlock(), Mo.createElementBlock("div", _hoisted_6, [
152
- _ctx.multiple ? (Mo.openBlock(), Mo.createElementBlock("span", _hoisted_7, Mo.toDisplayString(_ctx.placeholder), 1)) : (Mo.openBlock(), Mo.createElementBlock("span", _hoisted_8, Mo.toDisplayString(model.value && !Array.isArray(model.value) ? model.value.label : props.placeholder), 1)),
153
- mergedBadgeProps.value && _ctx.badgeProps ? (Mo.openBlock(), Mo.createElementBlock("span", _hoisted_9, [
162
+ Mo.createElementVNode("span", null, Mo.toDisplayString(label.value), 1),
163
+ mergedBadgeProps.value && _ctx.badgeProps ? (Mo.openBlock(), Mo.createElementBlock("span", _hoisted_7, [
154
164
  Mo.createVNode(badge, Mo.normalizeProps(Mo.guardReactiveProps(mergedBadgeProps.value)), null, 16)
155
165
  ])) : Mo.createCommentVNode("", true)
156
166
  ])) : Mo.createCommentVNode("", true),
@@ -202,7 +212,7 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
202
212
  src: option.image,
203
213
  alt: "option",
204
214
  class: "celeste-dropdown-item-image"
205
- }, null, 8, _hoisted_10)) : Mo.createCommentVNode("", true)
215
+ }, null, 8, _hoisted_8)) : Mo.createCommentVNode("", true)
206
216
  ]),
207
217
  _: 2
208
218
  }, 1032, ["label", "sublabel", "description", "checkbox", "value", "selected"]);
@@ -219,5 +229,5 @@ const _sfc_main = /* @__PURE__ */ Mo.defineComponent({
219
229
  };
220
230
  }
221
231
  });
222
- const combobox = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main, [["__scopeId", "data-v-268c7202"]]);
232
+ const combobox = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main, [["__scopeId", "data-v-cad50435"]]);
223
233
  module.exports = combobox;
@@ -4,6 +4,7 @@ import { ComboboxItemPropsType } from './combobox-item';
4
4
  export interface ComboboxPropsType extends ComboboxRootProps {
5
5
  options: ComboboxItemPropsType[];
6
6
  valueBy?: string;
7
+ labelBy?: string;
7
8
  placeholder?: string;
8
9
  type?: 'normal' | 'compact' | 'inline' | 'compact-input';
9
10
  size?: 'xs' | 'sm' | 'md';
@@ -23,6 +23,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
23
23
  const forwarded = At(delegatedProps);
24
24
  return (_ctx, _cache) => {
25
25
  return openBlock(), createBlock(unref(Uv), mergeProps(unref(forwarded), {
26
+ type: "button",
26
27
  tabindex: "0",
27
28
  class: unref(clsx)(
28
29
  "celeste-dropdown-anchor-trigger",
@@ -41,7 +42,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
41
42
  };
42
43
  }
43
44
  });
44
- const ComboboxTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1d007d84"]]);
45
+ const ComboboxTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-43f9e53e"]]);
45
46
  export {
46
47
  ComboboxTrigger as default
47
48
  };
@@ -26,13 +26,11 @@ const _hoisted_6 = {
26
26
  key: 2,
27
27
  class: "celeste-dropdown-input"
28
28
  };
29
- const _hoisted_7 = { key: 0 };
30
- const _hoisted_8 = { key: 1 };
31
- const _hoisted_9 = {
32
- key: 2,
29
+ const _hoisted_7 = {
30
+ key: 0,
33
31
  class: "celeste-input-badge"
34
32
  };
35
- const _hoisted_10 = ["src"];
33
+ const _hoisted_8 = ["src"];
36
34
  const __default__ = {
37
35
  inheritAttrs: false
38
36
  };
@@ -42,6 +40,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
42
40
  props: {
43
41
  options: {},
44
42
  valueBy: {},
43
+ labelBy: {},
45
44
  placeholder: { default: "Select" },
46
45
  type: {},
47
46
  size: { default: "md" },
@@ -75,6 +74,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
75
74
  filterFunction: filterFunction2,
76
75
  options,
77
76
  valueBy,
77
+ labelBy,
78
78
  placeholder,
79
79
  type,
80
80
  size,
@@ -88,6 +88,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
88
88
  });
89
89
  const forwarded = xe(delegatedProps, emits);
90
90
  const model = computed(() => props.modelValue);
91
+ const label = computed(() => {
92
+ if (!model.value)
93
+ return props.placeholder;
94
+ if (Array.isArray(model.value)) {
95
+ if (model.value.length === 0)
96
+ return props.placeholder;
97
+ return model.value.map((item) => props.labelBy ? item[props.labelBy] : item.label).join(", ");
98
+ }
99
+ return props.labelBy ? model.value[props.labelBy] : model.value.label;
100
+ });
91
101
  function isSelected(value) {
92
102
  if (!Array.isArray(props.modelValue) || !props.multiple)
93
103
  return;
@@ -103,13 +113,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
103
113
  }
104
114
  function filterFunction(list, searchTerm) {
105
115
  return list.filter((option) => {
106
- const { value, label } = option;
107
- if (!value || !label)
116
+ const { value, label: label2 } = option;
117
+ if (!value || !label2)
108
118
  return false;
109
119
  if (props.valueBy && typeof value === "object" && props.valueBy in value) {
110
- return String(value[props.valueBy]).toLowerCase().includes(searchTerm.toLowerCase()) || label.toString().toLowerCase().includes(searchTerm.toLowerCase());
120
+ return String(value[props.valueBy]).toLowerCase().includes(searchTerm.toLowerCase()) || label2.toString().toLowerCase().includes(searchTerm.toLowerCase());
111
121
  }
112
- return value.toString().toLowerCase().includes(searchTerm.toLowerCase()) || label.toString().toLowerCase().includes(searchTerm.toLowerCase());
122
+ return value.toString().toLowerCase().includes(searchTerm.toLowerCase()) || label2.toString().toLowerCase().includes(searchTerm.toLowerCase());
113
123
  });
114
124
  }
115
125
  const mergedBadgeProps = computed(() => ({
@@ -117,7 +127,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
117
127
  disabled: props.disabled
118
128
  }));
119
129
  return (_ctx, _cache) => {
120
- return openBlock(), createBlock(_sfc_main$1, mergeProps(unref(forwarded), { "filter-function": filterFunction }), {
130
+ return openBlock(), createBlock(_sfc_main$1, mergeProps({ class: "shrink-0" }, unref(forwarded), { "filter-function": filterFunction }), {
121
131
  default: withCtx(() => [
122
132
  createVNode(_sfc_main$2, { "as-child": "" }, {
123
133
  default: withCtx(() => [
@@ -148,8 +158,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
148
158
  renderSlot(_ctx.$slots, "prefix", { class: "celeste-dropdown-anchor-trigger-prefix-default" }, void 0, true)
149
159
  ])) : createCommentVNode("", true),
150
160
  _ctx.type !== "inline" ? (openBlock(), createElementBlock("div", _hoisted_6, [
151
- _ctx.multiple ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(_ctx.placeholder), 1)) : (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(model.value && !Array.isArray(model.value) ? model.value.label : props.placeholder), 1)),
152
- mergedBadgeProps.value && _ctx.badgeProps ? (openBlock(), createElementBlock("span", _hoisted_9, [
161
+ createElementVNode("span", null, toDisplayString(label.value), 1),
162
+ mergedBadgeProps.value && _ctx.badgeProps ? (openBlock(), createElementBlock("span", _hoisted_7, [
153
163
  createVNode(Badge, normalizeProps(guardReactiveProps(mergedBadgeProps.value)), null, 16)
154
164
  ])) : createCommentVNode("", true)
155
165
  ])) : createCommentVNode("", true),
@@ -201,7 +211,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
201
211
  src: option.image,
202
212
  alt: "option",
203
213
  class: "celeste-dropdown-item-image"
204
- }, null, 8, _hoisted_10)) : createCommentVNode("", true)
214
+ }, null, 8, _hoisted_8)) : createCommentVNode("", true)
205
215
  ]),
206
216
  _: 2
207
217
  }, 1032, ["label", "sublabel", "description", "checkbox", "value", "selected"]);
@@ -218,7 +228,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
218
228
  };
219
229
  }
220
230
  });
221
- const combobox = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-268c7202"]]);
231
+ const combobox = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cad50435"]]);
222
232
  export {
223
233
  combobox as default
224
234
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@youcan/celeste",
3
3
  "type": "module",
4
- "version": "0.6.22",
4
+ "version": "0.6.24",
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.22",
36
- "@youcan/celeste-tokens": "0.6.22"
35
+ "@youcan/celeste-icons": "0.6.24",
36
+ "@youcan/celeste-tokens": "0.6.24"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@chromatic-com/storybook": "^4.0.0",
@@ -30,6 +30,7 @@ export interface CustomComboboxTriggerProps extends ComboboxTriggerProps {
30
30
  <template>
31
31
  <ComboboxTrigger
32
32
  v-bind="forwarded"
33
+ type="button"
33
34
  tabindex="0"
34
35
  :class="clsx(
35
36
  'celeste-dropdown-anchor-trigger',
@@ -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';
@@ -112,6 +132,7 @@ export default {
112
132
 
113
133
  <template>
114
134
  <ComboboxRoot
135
+ class="shrink-0"
115
136
  v-bind="forwarded"
116
137
  :filter-function="filterFunction"
117
138
  >
@@ -148,9 +169,8 @@ export default {
148
169
  v-if="type !== 'inline'"
149
170
  class="celeste-dropdown-input"
150
171
  >
151
- <span v-if="multiple">{{ placeholder }}</span>
152
- <span v-else>
153
- {{ model && !Array.isArray(model) ? model.label : props.placeholder }}
172
+ <span>
173
+ {{ label }}
154
174
  </span>
155
175
  <span v-if="mergedBadgeProps && badgeProps" class="celeste-input-badge">
156
176
  <Badge v-bind="mergedBadgeProps" />