@youcan/celeste 0.17.1 → 0.18.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/README.md +1 -1
- package/ai/component-registry.json +2 -2
- package/ai/icons.json +2 -2
- package/ai/tokens.json +8 -5
- package/dist/celeste.css +390 -329
- package/dist/cjs/chunks/ComboboxItem.cjs +6 -0
- package/dist/cjs/chunks/badge.cjs +1 -1
- package/dist/cjs/chunks/button.cjs +1 -1
- package/dist/cjs/chunks/combobox-item.cjs +63 -7
- package/dist/cjs/chunks/combobox-list.cjs +1 -1
- package/dist/cjs/chunks/combobox-trigger.cjs +1 -1
- package/dist/cjs/chunks/combobox.cjs +2 -2
- package/dist/cjs/chunks/compact-button.cjs +1 -1
- package/dist/cjs/chunks/components.cjs +1 -1
- package/dist/cjs/chunks/fancy-button.cjs +1 -1
- package/dist/cjs/chunks/link-button.cjs +1 -1
- package/dist/cjs/chunks/social-button.cjs +1 -1
- package/dist/cjs/chunks/text-input-affix.cjs +1 -1
- package/dist/cjs/chunks/text-input-button.cjs +1 -1
- package/dist/cjs/chunks/text-input.cjs +2 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/es/chunks/ComboboxItem.js +1 -1
- package/dist/es/chunks/badge.js +1 -1
- package/dist/es/chunks/button.js +1 -1
- package/dist/es/chunks/combobox-item.js +65 -9
- package/dist/es/chunks/combobox-list.js +1 -1
- package/dist/es/chunks/combobox-trigger.js +1 -1
- package/dist/es/chunks/combobox.js +2 -2
- package/dist/es/chunks/compact-button.js +1 -1
- package/dist/es/chunks/components.js +1 -1
- package/dist/es/chunks/fancy-button.js +1 -1
- package/dist/es/chunks/link-button.js +1 -1
- package/dist/es/chunks/social-button.js +1 -1
- package/dist/es/chunks/text-input-affix.js +1 -1
- package/dist/es/chunks/text-input-button.js +1 -1
- package/dist/es/chunks/text-input.js +2 -1
- package/dist/es/index.js +1 -1
- package/package.json +3 -3
- package/src/components/badge/badge.vue +1 -1
- package/src/components/button/button.vue +5 -5
- package/src/components/button/compact-button.vue +1 -1
- package/src/components/button/fancy-button.vue +6 -6
- package/src/components/button/link-button.vue +5 -5
- package/src/components/button/social-button.vue +2 -2
- package/src/components/combobox/combobox-item.vue +15 -7
- package/src/components/combobox/combobox-list.vue +2 -2
- package/src/components/combobox/combobox-trigger.vue +38 -0
- package/src/components/combobox/combobox.vue +2 -0
- package/src/components/text-input/stories/text-input.stories.ts +53 -3
- package/src/components/text-input/text-input-affix.vue +7 -3
- package/src/components/text-input/text-input-button.vue +6 -2
- package/src/components/text-input/text-input.vue +45 -34
|
@@ -68,7 +68,7 @@ $size-map: (
|
|
|
68
68
|
$intent-map: (
|
|
69
69
|
'primary': (
|
|
70
70
|
'fill': (
|
|
71
|
-
fg: var(--color-
|
|
71
|
+
fg: var(--color-static-white),
|
|
72
72
|
bg: var(--color-primary-base),
|
|
73
73
|
border: var(--color-primary-base),
|
|
74
74
|
shadow: none,
|
|
@@ -120,7 +120,7 @@ $intent-map: (
|
|
|
120
120
|
),
|
|
121
121
|
'error': (
|
|
122
122
|
'fill': (
|
|
123
|
-
fg: var(--color-
|
|
123
|
+
fg: var(--color-static-white),
|
|
124
124
|
bg: var(--color-state-error-base),
|
|
125
125
|
border: var(--color-state-error-base),
|
|
126
126
|
shadow: none,
|
|
@@ -148,7 +148,7 @@ $intent-map: (
|
|
|
148
148
|
$hover-map: (
|
|
149
149
|
'primary': (
|
|
150
150
|
'fill': (
|
|
151
|
-
fg: var(--color-
|
|
151
|
+
fg: var(--color-static-white),
|
|
152
152
|
bg: var(--color-primary-darker),
|
|
153
153
|
border: var(--color-primary-darker),
|
|
154
154
|
),
|
|
@@ -192,7 +192,7 @@ $hover-map: (
|
|
|
192
192
|
),
|
|
193
193
|
'error': (
|
|
194
194
|
'fill': (
|
|
195
|
-
fg: var(--color-
|
|
195
|
+
fg: var(--color-static-white),
|
|
196
196
|
bg: var(--color-red-700),
|
|
197
197
|
border: var(--color-red-700),
|
|
198
198
|
),
|
|
@@ -270,7 +270,7 @@ $hover-map: (
|
|
|
270
270
|
color: map.get($hover-values, fg);
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
&:focus:not(:disabled) {
|
|
273
|
+
&:focus-visible:not(:disabled) {
|
|
274
274
|
outline: none;
|
|
275
275
|
box-shadow: if(
|
|
276
276
|
$intent == 'neutral',
|
|
@@ -107,7 +107,7 @@ $intent-map: (
|
|
|
107
107
|
height: 20px;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
&:focus {
|
|
110
|
+
&:focus-visible {
|
|
111
111
|
outline: none;
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -129,7 +129,7 @@ $intent-map: (
|
|
|
129
129
|
linear-gradient(180deg, var(--celeste-fbutton-bg-start) 0%, var(--celeste-fbutton-bg-end) 100%),
|
|
130
130
|
#{map.get($v, bg)};
|
|
131
131
|
box-shadow: var(--shadow-fancy-buttons-#{$k});
|
|
132
|
-
color: var(--color-text-white-0);
|
|
132
|
+
color: if($k == 'neutral', var(--color-text-white-0), var(--color-static-white));
|
|
133
133
|
|
|
134
134
|
&::before {
|
|
135
135
|
content: '';
|
|
@@ -148,7 +148,7 @@ $intent-map: (
|
|
|
148
148
|
--celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
&:focus {
|
|
151
|
+
&:focus-visible {
|
|
152
152
|
--celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
|
|
153
153
|
--celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
|
|
154
154
|
|
|
@@ -167,13 +167,13 @@ $intent-map: (
|
|
|
167
167
|
&:hover {
|
|
168
168
|
background: var(--color-bg-weak-50);
|
|
169
169
|
box-shadow: none;
|
|
170
|
-
color: var(--text-strong-950);
|
|
170
|
+
color: var(--color-text-strong-950);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
&:focus {
|
|
173
|
+
&:focus-visible {
|
|
174
174
|
background: var(--color-bg-weak-50);
|
|
175
175
|
box-shadow: var(--shadow-buttons-important-focus);
|
|
176
|
-
color: var(--text-strong-950);
|
|
176
|
+
color: var(--color-text-strong-950);
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
}
|
|
@@ -57,7 +57,7 @@ const props = withDefaults(defineProps<LinkButtonProps>(), {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
&:hover,
|
|
60
|
-
&:focus {
|
|
60
|
+
&:focus-visible {
|
|
61
61
|
outline: none;
|
|
62
62
|
text-decoration: underline;
|
|
63
63
|
}
|
|
@@ -92,7 +92,7 @@ const props = withDefaults(defineProps<LinkButtonProps>(), {
|
|
|
92
92
|
color: var(--color-primary-base);
|
|
93
93
|
|
|
94
94
|
&:hover,
|
|
95
|
-
&:focus {
|
|
95
|
+
&:focus-visible {
|
|
96
96
|
color: var(--color-primary-darker);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -101,7 +101,7 @@ const props = withDefaults(defineProps<LinkButtonProps>(), {
|
|
|
101
101
|
color: var(--color-text-strong-950);
|
|
102
102
|
|
|
103
103
|
&:hover,
|
|
104
|
-
&:focus {
|
|
104
|
+
&:focus-visible {
|
|
105
105
|
color: var(--color-text-strong-950);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -110,7 +110,7 @@ const props = withDefaults(defineProps<LinkButtonProps>(), {
|
|
|
110
110
|
color: var(--color-text-sub-600);
|
|
111
111
|
|
|
112
112
|
&:hover,
|
|
113
|
-
&:focus {
|
|
113
|
+
&:focus-visible {
|
|
114
114
|
color: var(--color-text-sub-600);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -119,7 +119,7 @@ const props = withDefaults(defineProps<LinkButtonProps>(), {
|
|
|
119
119
|
color: var(--color-state-error-base);
|
|
120
120
|
|
|
121
121
|
&:hover,
|
|
122
|
-
&:focus {
|
|
122
|
+
&:focus-visible {
|
|
123
123
|
color: var(--color-red-700);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
@@ -87,7 +87,7 @@ $brand-map: (
|
|
|
87
87
|
padding-inline-end: var(--spacing-6);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
&:focus {
|
|
90
|
+
&:focus-visible {
|
|
91
91
|
outline: none;
|
|
92
92
|
box-shadow: var(--shadow-buttons-important-focus);
|
|
93
93
|
}
|
|
@@ -100,7 +100,7 @@ $brand-map: (
|
|
|
100
100
|
border-color: var(--color-stroke-soft-200);
|
|
101
101
|
background-color: var(--color-bg-white-0);
|
|
102
102
|
box-shadow: var(--shadow-regular-xs);
|
|
103
|
-
color: var(--text-strong-950);
|
|
103
|
+
color: var(--color-text-strong-950);
|
|
104
104
|
|
|
105
105
|
&:hover {
|
|
106
106
|
border-color: transparent;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { ComboboxItemEmits } from 'reka-ui';
|
|
3
3
|
import type { HTMLAttributes } from 'vue';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
|
-
import { ComboboxItem, useForwardPropsEmits } from 'reka-ui';
|
|
5
|
+
import { ComboboxItem, ComboboxItemIndicator, useForwardPropsEmits } from 'reka-ui';
|
|
6
6
|
import { computed } from 'vue';
|
|
7
7
|
import Checkbox from '../checkbox/checkbox.vue';
|
|
8
8
|
|
|
@@ -48,7 +48,6 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
48
48
|
props.class,
|
|
49
49
|
'celeste-dropdown-item',
|
|
50
50
|
{ 'celeste-dropdown-item-disabled': disabled },
|
|
51
|
-
{ 'celeste-dropdown-item-selected': selected },
|
|
52
51
|
{ 'celeste-dropdown-item-focused': focused },
|
|
53
52
|
)"
|
|
54
53
|
>
|
|
@@ -83,7 +82,9 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
83
82
|
<div v-if="$slots.suffix" class="celeste-dropdown-item-suffix">
|
|
84
83
|
<slot name="suffix" />
|
|
85
84
|
</div>
|
|
86
|
-
<
|
|
85
|
+
<ComboboxItemIndicator as-child>
|
|
86
|
+
<i class="celeste-dropdown-item-indicator i-celeste-check-line" />
|
|
87
|
+
</ComboboxItemIndicator>
|
|
87
88
|
</div>
|
|
88
89
|
</ComboboxItem>
|
|
89
90
|
</template>
|
|
@@ -91,8 +92,10 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
91
92
|
<style lang="scss" scoped>
|
|
92
93
|
.celeste-dropdown-item {
|
|
93
94
|
display: flex;
|
|
95
|
+
position: relative;
|
|
94
96
|
align-items: center;
|
|
95
97
|
padding: var(--spacing-8);
|
|
98
|
+
padding-inline-end: var(--spacing-36);
|
|
96
99
|
transition-property: background-color;
|
|
97
100
|
transition-duration: var(--animation-fast);
|
|
98
101
|
transition-timing-function: ease-out;
|
|
@@ -159,6 +162,15 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
159
162
|
color: var(--color-icon-sub-600);
|
|
160
163
|
}
|
|
161
164
|
|
|
165
|
+
&-indicator {
|
|
166
|
+
position: absolute;
|
|
167
|
+
top: 50%;
|
|
168
|
+
width: 20px;
|
|
169
|
+
height: 20px;
|
|
170
|
+
transform: translateY(-50%);
|
|
171
|
+
inset-inline-end: var(--spacing-8);
|
|
172
|
+
}
|
|
173
|
+
|
|
162
174
|
&-disabled {
|
|
163
175
|
color: var(--color-text-disabled-300);
|
|
164
176
|
cursor: not-allowed;
|
|
@@ -174,10 +186,6 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
|
|
177
|
-
&-selected {
|
|
178
|
-
background: var(--color-bg-weak-50);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
189
|
.celeste-dropdown-item-info {
|
|
182
190
|
display: flex;
|
|
183
191
|
flex: 1 0 0;
|
|
@@ -39,14 +39,14 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
|
39
39
|
div:deep(.celeste-dropdown-content) {
|
|
40
40
|
--dropdown-height: 300px;
|
|
41
41
|
--dropdown-min-width: var(--reka-combobox-trigger-width, 300px);
|
|
42
|
-
--dropdown-width: max(var(--reka-popper-anchor-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
|
-
width:
|
|
47
|
+
width: max-content;
|
|
49
48
|
min-width: var(--dropdown-min-width);
|
|
49
|
+
max-width: max(var(--reka-popper-anchor-width), 320px);
|
|
50
50
|
max-height: var(--dropdown-height);
|
|
51
51
|
margin-top: var(--spacing-10);
|
|
52
52
|
padding: var(--spacing-8);
|
|
@@ -197,6 +197,19 @@ const forwarded = useForwardProps(delegatedProps);
|
|
|
197
197
|
border: none;
|
|
198
198
|
border-radius: 0;
|
|
199
199
|
box-shadow: none;
|
|
200
|
+
gap: 0;
|
|
201
|
+
|
|
202
|
+
:deep(.celeste-dropdown-anchor-trigger-prefix) {
|
|
203
|
+
margin-inline-end: var(--spacing-8);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
:deep(.celeste-dropdown-trigger) {
|
|
207
|
+
margin-inline-start: var(--spacing-2);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
&.celeste-dropdown-anchor-trigger-filled:not([data-disabled]) :deep(.celeste-dropdown-trigger i) {
|
|
211
|
+
color: var(--color-icon-sub-600);
|
|
212
|
+
}
|
|
200
213
|
|
|
201
214
|
&:deep(.celeste-dropdown-trigger-label) {
|
|
202
215
|
flex: inherit;
|
|
@@ -206,6 +219,31 @@ const forwarded = useForwardProps(delegatedProps);
|
|
|
206
219
|
&[data-state='open'] {
|
|
207
220
|
box-shadow: none;
|
|
208
221
|
}
|
|
222
|
+
|
|
223
|
+
&:focus-visible {
|
|
224
|
+
background: var(--color-bg-weak-50);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
&.celeste-dropdown-anchor-trigger-size-md {
|
|
228
|
+
padding-inline: var(--spacing-10) var(--spacing-8);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
&.celeste-dropdown-anchor-trigger-size-sm {
|
|
232
|
+
padding-inline: var(--spacing-8);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
&.celeste-dropdown-anchor-trigger-size-xs {
|
|
236
|
+
padding-inline: var(--spacing-8) var(--spacing-6);
|
|
237
|
+
|
|
238
|
+
:deep(.celeste-dropdown-anchor-trigger-prefix) {
|
|
239
|
+
margin-inline-end: var(--spacing-6);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
:deep(.celeste-dropdown-anchor-trigger-prefix :is(i, .selected-dropdown-image)) {
|
|
243
|
+
width: 16px;
|
|
244
|
+
height: 16px;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
209
247
|
}
|
|
210
248
|
|
|
211
249
|
&.celeste-dropdown-anchor-trigger-type-inline {
|
|
@@ -253,6 +253,7 @@ const filteredOptions = computed(() => props.ignoreFilter
|
|
|
253
253
|
align-items: center;
|
|
254
254
|
justify-content: center;
|
|
255
255
|
width: 20px;
|
|
256
|
+
max-width: none;
|
|
256
257
|
height: 20px;
|
|
257
258
|
object-fit: cover;
|
|
258
259
|
border-radius: var(--radius-full);
|
|
@@ -274,6 +275,7 @@ const filteredOptions = computed(() => props.ignoreFilter
|
|
|
274
275
|
overflow: hidden;
|
|
275
276
|
text-overflow: ellipsis;
|
|
276
277
|
white-space: nowrap;
|
|
278
|
+
unicode-bidi: plaintext;
|
|
277
279
|
}
|
|
278
280
|
}
|
|
279
281
|
|
|
@@ -73,15 +73,21 @@ export const Size: Story = {
|
|
|
73
73
|
template: `
|
|
74
74
|
<div style="display: grid; gap: 20px; justify-content: center;">
|
|
75
75
|
<TextInput v-bind="args" style="width: 300px" size="md">
|
|
76
|
-
<
|
|
76
|
+
<template #leadingIcon>
|
|
77
|
+
<i class="i-celeste-user-6-line" />
|
|
78
|
+
</template>
|
|
77
79
|
</TextInput>
|
|
78
80
|
|
|
79
81
|
<TextInput v-bind="args" style="width: 300px" size="sm">
|
|
80
|
-
<
|
|
82
|
+
<template #leadingIcon>
|
|
83
|
+
<i class="i-celeste-user-6-line" />
|
|
84
|
+
</template>
|
|
81
85
|
</TextInput>
|
|
82
86
|
|
|
83
87
|
<TextInput v-bind="args" style="width: 300px" size="xs">
|
|
84
|
-
<
|
|
88
|
+
<template #leadingIcon>
|
|
89
|
+
<i class="i-celeste-user-6-line" />
|
|
90
|
+
</template>
|
|
85
91
|
</TextInput>
|
|
86
92
|
</div>
|
|
87
93
|
`,
|
|
@@ -361,3 +367,47 @@ export const WithTrailingCombobox: Story = {
|
|
|
361
367
|
`,
|
|
362
368
|
}),
|
|
363
369
|
};
|
|
370
|
+
|
|
371
|
+
function flag(color: string): string {
|
|
372
|
+
return `data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="${color}"/></svg>`)}`;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
const COUNTRIES = [
|
|
376
|
+
{ value: 'MA', label: 'Morocco (+212)', shortLabel: '+212', image: flag('#c1272d') },
|
|
377
|
+
{ value: 'FR', label: 'France (+33)', shortLabel: '+33', image: flag('#002654') },
|
|
378
|
+
{ value: 'US', label: 'United States (+1)', shortLabel: '+1', image: flag('#3c3b6e') },
|
|
379
|
+
];
|
|
380
|
+
|
|
381
|
+
export const Phone: Story = {
|
|
382
|
+
args: {
|
|
383
|
+
type: 'tel',
|
|
384
|
+
placeholder: '610-101010',
|
|
385
|
+
},
|
|
386
|
+
|
|
387
|
+
render: args => ({
|
|
388
|
+
components: { TextInput, Combobox },
|
|
389
|
+
setup() {
|
|
390
|
+
const country = ref(COUNTRIES[0]);
|
|
391
|
+
const phone = ref('+212610101010');
|
|
392
|
+
|
|
393
|
+
return { args, COUNTRIES, country, phone };
|
|
394
|
+
},
|
|
395
|
+
template: `
|
|
396
|
+
<div style="display: grid; gap: 20px; width: 360px;">
|
|
397
|
+
<TextInput v-for="size in ['md', 'sm', 'xs']" :key="size" v-bind="args" v-model="phone" :size="size">
|
|
398
|
+
<template #leadingNode>
|
|
399
|
+
<Combobox
|
|
400
|
+
v-model="country"
|
|
401
|
+
searchable
|
|
402
|
+
:options="COUNTRIES"
|
|
403
|
+
:size="size"
|
|
404
|
+
value-by="value"
|
|
405
|
+
label-by="shortLabel"
|
|
406
|
+
type="compact-input"
|
|
407
|
+
/>
|
|
408
|
+
</template>
|
|
409
|
+
</TextInput>
|
|
410
|
+
</div>
|
|
411
|
+
`,
|
|
412
|
+
}),
|
|
413
|
+
};
|
|
@@ -27,18 +27,22 @@ const delegatedProps = useDelegatedProps(props, 'class');
|
|
|
27
27
|
flex-shrink: 0;
|
|
28
28
|
align-items: center;
|
|
29
29
|
color: var(--celeste-text-input-affix-color);
|
|
30
|
+
unicode-bidi: plaintext;
|
|
30
31
|
|
|
31
32
|
&[inline='false'] {
|
|
32
|
-
padding-inline: var(--
|
|
33
|
+
padding-inline: var(--input-affix-padding);
|
|
33
34
|
background-color: var(--celeste-text-input-affix-background-color);
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
&[askbd='true'] {
|
|
38
|
+
box-sizing: border-box;
|
|
37
39
|
width: fit-content;
|
|
38
|
-
height:
|
|
39
|
-
padding: var(--spacing-
|
|
40
|
+
height: 20px;
|
|
41
|
+
padding-inline: var(--spacing-6);
|
|
40
42
|
border: 1px solid var(--color-stroke-soft-200);
|
|
41
43
|
border-radius: var(--radius-4);
|
|
44
|
+
background-color: var(--color-bg-white-0);
|
|
45
|
+
color: var(--celeste-text-input-muted-color);
|
|
42
46
|
font: var(--subheading-xs);
|
|
43
47
|
}
|
|
44
48
|
}
|
|
@@ -37,10 +37,14 @@ const delegatedProps = useDelegatedProps(props, 'class');
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
&[inline='false'] {
|
|
40
|
-
padding: var(--spacing-
|
|
40
|
+
padding-inline: var(--spacing-14);
|
|
41
41
|
border-end-start-radius: 0;
|
|
42
42
|
border-start-start-radius: 0;
|
|
43
43
|
|
|
44
|
+
&:has(> :only-child:is(i)) {
|
|
45
|
+
padding-inline: var(--spacing-10);
|
|
46
|
+
}
|
|
47
|
+
|
|
44
48
|
&:is(.celeste-button-intent-neutral, .celeste-button-variant-stroke):not(:disabled) {
|
|
45
49
|
background-color: var(--color-bg-white-0);
|
|
46
50
|
|
|
@@ -53,7 +57,7 @@ const delegatedProps = useDelegatedProps(props, 'class');
|
|
|
53
57
|
&[inline='true'] {
|
|
54
58
|
width: 20px;
|
|
55
59
|
height: 20px;
|
|
56
|
-
color: var(--celeste-text-input-
|
|
60
|
+
color: var(--celeste-text-input-muted-color) !important;
|
|
57
61
|
|
|
58
62
|
&:hover {
|
|
59
63
|
background-color: transparent !important;
|
|
@@ -80,6 +80,7 @@ function clearInput() {
|
|
|
80
80
|
>
|
|
81
81
|
<TextInputButton
|
|
82
82
|
v-if="showClearButton"
|
|
83
|
+
inline
|
|
83
84
|
type="button"
|
|
84
85
|
aria-label="Clear search"
|
|
85
86
|
@click="clearInput"
|
|
@@ -97,8 +98,9 @@ function clearInput() {
|
|
|
97
98
|
.celeste-text-input-wrapper {
|
|
98
99
|
--celeste-text-input-border-color: var(--color-stroke-soft-200);
|
|
99
100
|
--celeste-text-input-drop-shadow: var(--shadow-regular-xs);
|
|
100
|
-
--celeste-text-input-icon-color: var(--color-text-
|
|
101
|
-
--celeste-text-input-affix-color: var(--color-text-
|
|
101
|
+
--celeste-text-input-icon-color: var(--color-text-sub-600);
|
|
102
|
+
--celeste-text-input-affix-color: var(--color-text-sub-600);
|
|
103
|
+
--celeste-text-input-muted-color: var(--color-text-soft-400);
|
|
102
104
|
--celeste-text-input-placeholder-color: var(--color-text-soft-400);
|
|
103
105
|
--celeste-text-input-affix-background-color: var(--color-bg-white-0);
|
|
104
106
|
|
|
@@ -106,12 +108,10 @@ function clearInput() {
|
|
|
106
108
|
box-sizing: border-box;
|
|
107
109
|
align-items: center;
|
|
108
110
|
height: var(--input-height);
|
|
109
|
-
padding-inline:
|
|
111
|
+
padding-inline: var(--input-padding);
|
|
110
112
|
transition: all var(--animation-fast) ease-out;
|
|
111
113
|
border: 1px solid var(--celeste-text-input-border-color);
|
|
112
114
|
border-radius: var(--input-radius);
|
|
113
|
-
outline: 2px solid transparent;
|
|
114
|
-
outline-offset: 2px;
|
|
115
115
|
background-color: var(--color-bg-white-0);
|
|
116
116
|
box-shadow: var(--celeste-text-input-drop-shadow);
|
|
117
117
|
color: var(--color-text-strong-950);
|
|
@@ -119,24 +119,27 @@ function clearInput() {
|
|
|
119
119
|
gap: var(--input-gap);
|
|
120
120
|
|
|
121
121
|
&[size='xs'] {
|
|
122
|
-
--input-gap:
|
|
122
|
+
--input-gap: var(--spacing-6);
|
|
123
123
|
--input-height: 32px;
|
|
124
124
|
--input-radius: var(--radius-8);
|
|
125
|
-
--input-padding:
|
|
125
|
+
--input-padding: var(--spacing-8);
|
|
126
|
+
--input-affix-padding: var(--spacing-10);
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
&[size='sm'] {
|
|
129
|
-
--input-gap:
|
|
130
|
+
--input-gap: var(--spacing-8);
|
|
130
131
|
--input-height: 36px;
|
|
131
132
|
--input-radius: var(--radius-8);
|
|
132
|
-
--input-padding: var(--spacing-
|
|
133
|
+
--input-padding: var(--spacing-10);
|
|
134
|
+
--input-affix-padding: var(--spacing-10);
|
|
133
135
|
}
|
|
134
136
|
|
|
135
137
|
&[size='md'] {
|
|
136
|
-
--input-gap:
|
|
138
|
+
--input-gap: var(--spacing-8);
|
|
137
139
|
--input-height: 40px;
|
|
138
140
|
--input-radius: var(--radius-10);
|
|
139
|
-
--input-padding: var(--spacing-
|
|
141
|
+
--input-padding: var(--spacing-12);
|
|
142
|
+
--input-affix-padding: var(--spacing-12);
|
|
140
143
|
}
|
|
141
144
|
|
|
142
145
|
&[has-error='true'] {
|
|
@@ -158,6 +161,12 @@ function clearInput() {
|
|
|
158
161
|
color: var(--celeste-text-input-placeholder-color);
|
|
159
162
|
}
|
|
160
163
|
|
|
164
|
+
&[type='tel'] {
|
|
165
|
+
direction: ltr;
|
|
166
|
+
text-align: -webkit-match-parent;
|
|
167
|
+
text-align: match-parent;
|
|
168
|
+
}
|
|
169
|
+
|
|
161
170
|
// Hide default webkit search cancel button
|
|
162
171
|
&[type='search'] {
|
|
163
172
|
&::-webkit-search-cancel-button {
|
|
@@ -199,18 +208,36 @@ function clearInput() {
|
|
|
199
208
|
padding-inline-end: 0;
|
|
200
209
|
}
|
|
201
210
|
|
|
211
|
+
&:has(.celeste-text-input:placeholder-shown) {
|
|
212
|
+
--celeste-text-input-icon-color: var(--color-text-soft-400);
|
|
213
|
+
--celeste-text-input-affix-color: var(--color-text-soft-400);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
&:hover:not(:has(.celeste-text-input:focus)) {
|
|
217
|
+
--celeste-text-input-drop-shadow: none;
|
|
218
|
+
|
|
219
|
+
&:not([has-error='true'], :has(.celeste-text-input-node)) {
|
|
220
|
+
--celeste-text-input-border-color: transparent;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
&:not(:has(.celeste-text-input-node:hover)) {
|
|
224
|
+
--celeste-text-input-icon-color: var(--color-text-sub-600);
|
|
225
|
+
--celeste-text-input-placeholder-color: var(--color-text-sub-600);
|
|
226
|
+
|
|
227
|
+
background-color: var(--color-bg-weak-50);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
202
231
|
&:has(.celeste-text-input:focus) {
|
|
203
232
|
--celeste-text-input-border-color: var(--color-stroke-strong-950);
|
|
233
|
+
--celeste-text-input-drop-shadow: var(--shadow-buttons-important-focus);
|
|
204
234
|
--celeste-text-input-placeholder-color: var(--color-text-sub-600);
|
|
205
235
|
--celeste-text-input-icon-color: var(--color-text-sub-600);
|
|
206
236
|
--celeste-text-input-affix-color: var(--color-text-sub-600);
|
|
207
237
|
|
|
208
|
-
outline-color: var(--color-stroke-soft-200);
|
|
209
|
-
|
|
210
238
|
&[has-error='true'] {
|
|
211
239
|
--celeste-text-input-border-color: var(--color-state-error-base);
|
|
212
|
-
|
|
213
|
-
outline-color: var(--color-state-error-lighter);
|
|
240
|
+
--celeste-text-input-drop-shadow: var(--shadow-buttons-error-focus);
|
|
214
241
|
}
|
|
215
242
|
}
|
|
216
243
|
|
|
@@ -229,35 +256,17 @@ function clearInput() {
|
|
|
229
256
|
--celeste-text-input-drop-shadow: none;
|
|
230
257
|
--celeste-text-input-affix-background-color: var(--color-bg-weak-50);
|
|
231
258
|
--celeste-text-input-affix-color: var(--color-text-disabled-300);
|
|
259
|
+
--celeste-text-input-muted-color: var(--color-text-disabled-300);
|
|
232
260
|
--celeste-text-input-placeholder-color: var(--color-text-disabled-300);
|
|
233
261
|
--celeste-text-input-icon-color: var(--color-text-disabled-300);
|
|
234
262
|
|
|
235
263
|
background-color: var(--color-bg-weak-50);
|
|
236
|
-
box-shadow: none;
|
|
237
264
|
color: var(--color-text-disabled-300);
|
|
238
265
|
pointer-events: none;
|
|
239
266
|
|
|
240
267
|
.celeste-text-input::placeholder {
|
|
241
268
|
color: currentcolor;
|
|
242
269
|
}
|
|
243
|
-
|
|
244
|
-
.celeste-text-input-clear-button {
|
|
245
|
-
color: var(--color-text-disabled-300);
|
|
246
|
-
pointer-events: none;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
&:has(.celeste-text-input:hover:not(:focus, :disabled)) {
|
|
251
|
-
&:not(:has(.celeste-text-input-node)) {
|
|
252
|
-
--celeste-text-input-border-color: transparent;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
&:not(:has(.celeste-text-input-node:hover)) {
|
|
256
|
-
--celeste-text-input-icon-color: var(--color-text-sub-600);
|
|
257
|
-
--celeste-text-input-placeholder-color: var(--color-text-sub-600);
|
|
258
|
-
|
|
259
|
-
background-color: var(--color-bg-weak-50);
|
|
260
|
-
}
|
|
261
270
|
}
|
|
262
271
|
|
|
263
272
|
.celeste-text-input-icon {
|
|
@@ -274,6 +283,7 @@ function clearInput() {
|
|
|
274
283
|
}
|
|
275
284
|
|
|
276
285
|
:deep(.celeste-text-input-node.celeste-text-input-leading-node) {
|
|
286
|
+
margin-inline-end: calc(var(--input-padding) - var(--input-gap));
|
|
277
287
|
border-inline-end: 1px solid var(--color-stroke-soft-200);
|
|
278
288
|
border-start-start-radius: var(--input-radius);
|
|
279
289
|
border-start-end-radius: 0;
|
|
@@ -282,6 +292,7 @@ function clearInput() {
|
|
|
282
292
|
}
|
|
283
293
|
|
|
284
294
|
:deep(.celeste-text-input-node.celeste-text-input-trailing-node) {
|
|
295
|
+
margin-inline-start: calc(var(--input-padding) - var(--input-gap));
|
|
285
296
|
border-inline-start: 1px solid var(--color-stroke-soft-200);
|
|
286
297
|
border-start-start-radius: 0;
|
|
287
298
|
border-start-end-radius: var(--input-radius);
|