@youcan/celeste 0.6.54 → 0.6.55

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.
Files changed (40) hide show
  1. package/dist/celeste.css +85 -559
  2. package/dist/cjs/chunks/index2.js +28 -0
  3. package/dist/cjs/color-picker.js +6 -4
  4. package/dist/cjs/color-swatch.js +3 -3
  5. package/dist/cjs/file-upload-area.js +280 -0
  6. package/dist/cjs/index.js +0 -9
  7. package/dist/components/color-picker/color-picker.d.ts +2 -0
  8. package/dist/components/color-picker/color-swatch.d.ts +1 -2
  9. package/dist/components/file-upload/file-upload-area.d.ts +43 -0
  10. package/dist/components/file-upload/index.d.ts +2 -0
  11. package/dist/components/index.d.ts +0 -1
  12. package/dist/es/chunks/index2.js +30 -2
  13. package/dist/es/color-picker.js +6 -4
  14. package/dist/es/color-swatch.js +3 -3
  15. package/dist/es/file-upload-area.js +281 -0
  16. package/dist/es/index.js +0 -9
  17. package/package.json +9 -9
  18. package/src/components/color-picker/color-picker.vue +4 -0
  19. package/src/components/color-picker/color-swatch.vue +1 -2
  20. package/src/components/file-upload/file-upload-area.vue +229 -0
  21. package/src/components/file-upload/index.ts +2 -0
  22. package/src/components/file-upload/stories/file-upload-area.stories.ts +76 -0
  23. package/src/components/index.ts +0 -1
  24. package/dist/cjs/context-menu-item.js +0 -134
  25. package/dist/cjs/dropdown-item.js +0 -99
  26. package/dist/cjs/dropdown.js +0 -290
  27. package/dist/components/dropdown/context-menu-item.d.ts +0 -39
  28. package/dist/components/dropdown/dropdown-item.d.ts +0 -30
  29. package/dist/components/dropdown/dropdown.d.ts +0 -55
  30. package/dist/components/dropdown/index.d.ts +0 -6
  31. package/dist/es/context-menu-item.js +0 -135
  32. package/dist/es/dropdown-item.js +0 -100
  33. package/dist/es/dropdown.js +0 -291
  34. package/src/components/dropdown/context-menu-item.vue +0 -317
  35. package/src/components/dropdown/dropdown-item.vue +0 -184
  36. package/src/components/dropdown/dropdown.vue +0 -650
  37. package/src/components/dropdown/index.ts +0 -8
  38. package/src/components/dropdown/stories/context-menu-item.stories.ts +0 -51
  39. package/src/components/dropdown/stories/dropdown-item.stories.ts +0 -33
  40. package/src/components/dropdown/stories/dropdown.stories.ts +0 -53
@@ -1,317 +0,0 @@
1
- <script setup lang="ts">
2
- import clsx from 'clsx';
3
- import { SwitchRoot, SwitchThumb } from 'radix-vue';
4
- import { computed } from 'vue';
5
- import Badge, { type BadgeProps } from '../badge/badge.vue';
6
- import Button, { type ButtonProps } from '../button/button.vue';
7
-
8
- const props = withDefaults(defineProps<ContextMenuItemProps>(), {
9
- disabled: false,
10
- focused: false,
11
- size: 'sm',
12
- });
13
-
14
- const selectedModel = defineModel<boolean>('selected');
15
-
16
- const mergedBadgeProps = computed(() => ({
17
- ...props.badgeProps,
18
- disabled: props.disabled,
19
- }));
20
-
21
- const mergedButtonProps = computed<ButtonProps | null>(() => {
22
- return props.buttonProps
23
- ? {
24
- size: props.size === 'sm' ? 'xxs' : 'xs',
25
- variant: props.size === 'sm' ? 'ghost' : 'lighter',
26
- disabled: props.disabled,
27
- ...props.buttonProps,
28
- }
29
- : null;
30
- });
31
- </script>
32
-
33
- <script lang="ts">
34
- export interface ContextMenuItemProps {
35
- size: 'sm' | 'lg';
36
- class?: string;
37
- label: string;
38
- sublabel?: string;
39
- description?: string;
40
- disabled?: boolean;
41
- focused?: boolean;
42
- badgeProps?: BadgeProps;
43
- shortcut?: string;
44
- toggle?: boolean;
45
- selected: boolean;
46
- buttonProps?: ButtonProps;
47
- rightIcon?: string;
48
- }
49
- </script>
50
-
51
- <template>
52
- <div
53
- tabindex="0"
54
- :aria-disabled="disabled"
55
- :class="clsx(
56
- 'celeste-context-menu-item',
57
- `celeste-context-menu-item-size-${size}`,
58
- { 'celeste-context-menu-item-disabled': disabled },
59
- { 'celeste-context-menu-item-selected': selected },
60
- { 'celeste-context-menu-item-focused': focused },
61
- )"
62
- >
63
- <div
64
- v-if="$slots.prefix"
65
- :class="clsx(
66
- 'celeste-context-menu-item-prefix',
67
- `celeste-context-menu-item-prefix-${size}`,
68
- )"
69
- >
70
- <slot name="prefix" />
71
- </div>
72
- <div class="celeste-context-menu-item-info">
73
- <div
74
- :class="clsx(
75
- 'celeste-context-menu-item-header',
76
- `celeste-context-menu-item-header-${size}`,
77
- )"
78
- >
79
- <span class="celeste-context-menu-item-label" v-html="label" />
80
- <span v-if="sublabel" class="celeste-context-menu-item-sublabel">{{ sublabel }}</span>
81
- </div>
82
- <p v-if="props.description && props.size === 'lg'" class="celeste-context-menu-item-description">
83
- {{ description }}
84
- </p>
85
- </div>
86
- <Badge
87
- v-if="mergedBadgeProps"
88
- v-bind="mergedBadgeProps"
89
- class="celeste-context-menu-item-badge"
90
- />
91
- <span v-if="shortcut" class="celeste-context-menu-item-shortcut">
92
- {{ shortcut }}
93
- </span>
94
- <span class="celeste-context-menu-item-switch">
95
- <SwitchRoot
96
- v-model:checked="selectedModel"
97
- :disabled="disabled"
98
- class="celeste-switch-root"
99
- >
100
- <SwitchThumb class="celeste-switch-thumb" />
101
- </SwitchRoot>
102
- </span>
103
- <span class="celeste-context-menu-item-button">
104
- <Button
105
- v-if="mergedButtonProps"
106
- v-bind="mergedButtonProps"
107
- >
108
- <slot name="button-label" />
109
- </Button>
110
- </span>
111
- <span v-if="rightIcon" class="celeste-context-menu-item-suffix">
112
- <i :class="rightIcon" />
113
- </span>
114
- </div>
115
- </template>
116
-
117
- <style lang="scss" scoped>
118
- .celeste-context-menu-item {
119
- display: flex;
120
- box-sizing: border-box;
121
- align-items: center;
122
- justify-content: space-between;
123
- min-width: 300px;
124
- min-height: 36px;
125
- padding: var(--spacing-8);
126
- transition-property: background-color, transform;
127
- transition-duration: var(--animation-fast);
128
- transition-timing-function: ease-out;
129
- border-radius: var(--radius-8);
130
- background: var(--color-bg-white-0);
131
- cursor: pointer;
132
- gap: var(--spacing-8);
133
-
134
- i {
135
- color: var(--color-icon-sub-600);
136
- }
137
-
138
- .celeste-context-menu-item-shortcut {
139
- padding: var(--spacing-2) var(--spacing-6);
140
- border: 1px solid var(--color-stroke-soft-200);
141
- border-radius: var(--spacing-4);
142
- background: var(--color-bg-white-0);
143
- color: var(--color-text-sub-600);
144
- font: var(--subheading-xs);
145
- }
146
-
147
- .celeste-context-menu-item-switch {
148
- :deep(.celeste-switch-root) {
149
- display: flex;
150
- position: relative;
151
- flex-shrink: 0;
152
- align-items: center;
153
- width: 30px;
154
- height: 18px;
155
- padding-inline: 7px;
156
- border: none;
157
- border-radius: var(--radius-full);
158
- background: var(--color-bg-soft-200);
159
- cursor: pointer;
160
-
161
- .celeste-switch-thumb {
162
- display: block;
163
- position: absolute;
164
- width: 4px;
165
- height: 4px;
166
- transition-property: background-color, box-shadow, transform;
167
- transition-duration: var(--animation-fast);
168
- transition-timing-function: ease-out;
169
- border-radius: var(--radius-full);
170
- outline: 4px solid var(--color-bg-white-0);
171
- background: var(--color-bg-soft-200);
172
- }
173
-
174
- &[data-state='checked'] {
175
- background: var(--color-primary-base);
176
-
177
- .celeste-switch-thumb {
178
- transform: translateX(12px);
179
- background: var(--color-primary-base);
180
- }
181
- }
182
-
183
- &[data-state='checked']:has([data-disabled]),
184
- &[data-state='unchecked']:has([data-disabled]) {
185
- border: 1px solid var(--color-bg-soft-200);
186
- background: var(--color-bg-white-0);
187
- cursor: not-allowed;
188
-
189
- .celeste-switch-thumb {
190
- outline-color: var(--color-bg-soft-200);
191
- background: var(--color-stroke-soft-200);
192
- }
193
- }
194
- }
195
- }
196
-
197
- &:hover:not(.celeste-context-menu-item-disabled) {
198
- background: var(--color-bg-weak-50);
199
-
200
- .celeste-context-menu-item-switch {
201
- :deep(.celeste-switch-root) {
202
- &[data-state='checked']:not([data-disabled]) {
203
- background: var(--color-primary-dark);
204
-
205
- .celeste-switch-thumb {
206
- background: var(--color-primary-dark);
207
- }
208
- }
209
-
210
- &[data-state='unchecked']:not([data-disabled]) {
211
- background: var(--color-bg-sub-300);
212
-
213
- .celeste-switch-thumb {
214
- background: var(--color-bg-sub-300);
215
- }
216
- }
217
- }
218
- }
219
- }
220
-
221
- &-focused {
222
- background: var(--color-bg-weak-50);
223
- }
224
-
225
- :deep(.celeste-input-wrapper) {
226
- gap: 0;
227
- }
228
-
229
- &-size-sm {
230
- height: 36px;
231
- }
232
-
233
- &-size-lg {
234
- height: 56px;
235
- }
236
-
237
- &-header {
238
- display: flex;
239
- align-items: center;
240
- gap: var(--spacing-4);
241
- }
242
-
243
- &-label {
244
- color: var(--color-text-strong-950);
245
- font: var(--paragraph-sm);
246
- }
247
-
248
- &-sublabel {
249
- color: var(--color-text-soft-400);
250
- font: var(--paragraph-xs);
251
- }
252
-
253
- &-description {
254
- margin: var(--spacing-0);
255
- color: var(--color-text-sub-600);
256
- font: var(--paragraph-xs);
257
- }
258
-
259
- .celeste-context-menu-item-prefix {
260
- display: flex;
261
- align-items: center;
262
- justify-content: center;
263
- color: var(--color-icon-sub-600);
264
-
265
- &-lg {
266
- padding: var(--spacing-10);
267
- border: 1px solid var(--color-stroke-soft-200);
268
- border-radius: var(--radius-full);
269
- box-shadow: var(--shadow-regular-xs);
270
- gap: var(--spacing-10);
271
- }
272
- }
273
-
274
- .celeste-context-menu-item-suffix {
275
- display: flex;
276
- align-items: center;
277
- justify-content: center;
278
- height: fit-content;
279
- color: var(--color-icon-sub-600);
280
- }
281
-
282
- &-disabled {
283
- background: var(--color-bg-white-0);
284
- color: var(--color-text-disabled-300);
285
- cursor: not-allowed;
286
-
287
- :deep(i) {
288
- color: var(--color-text-disabled-300);
289
- }
290
-
291
- .celeste-context-menu-item-label,
292
- .celeste-context-menu-item-sublabel,
293
- .celeste-context-menu-item-description,
294
- .celeste-context-menu-item-shortcut {
295
- color: var(--color-text-disabled-300);
296
- }
297
- }
298
-
299
- &-selected {
300
- background: var(--color-bg-weak-50);
301
- }
302
-
303
- .celeste-context-menu-item-info {
304
- display: flex;
305
- flex: 1 0 0;
306
- flex-direction: column;
307
- justify-content: center;
308
- gap: var(--spacing-4);
309
- }
310
-
311
- .celeste-context-menu-item-header-lg {
312
- .celeste-context-menu-item-label {
313
- font-weight: var(--font-weights-display-0);
314
- }
315
- }
316
- }
317
- </style>
@@ -1,184 +0,0 @@
1
- <script setup lang="ts">
2
- import clsx from 'clsx';
3
- import Checkbox from '../checkbox/checkbox.vue';
4
-
5
- const props = withDefaults(defineProps<DropdownItem>(), {
6
- size: 'sm',
7
- selected: false,
8
- disabled: false,
9
- focused: false,
10
- });
11
-
12
- const emit = defineEmits(['update:selected']);
13
-
14
- function toggleSelection() {
15
- if (!props.disabled && props.checkbox) {
16
- emit('update:selected', !props.selected);
17
- }
18
- }
19
- </script>
20
-
21
- <script lang="ts">
22
- export interface DropdownItem {
23
- class?: string;
24
- label: string;
25
- size?: 'sm' | 'lg';
26
- checkbox?: boolean;
27
- sublabel?: string;
28
- description?: string;
29
- selected?: boolean | 'indeterminate';
30
- disabled?: boolean;
31
- focused?: boolean;
32
- }
33
- </script>
34
-
35
- <template>
36
- <div
37
- tabindex="0"
38
- :aria-disabled="disabled"
39
- :class="clsx(
40
- 'celeste-dropdown-item',
41
- { 'celeste-dropdown-item-disabled': disabled },
42
- { 'celeste-dropdown-item-selected': selected },
43
- { 'celeste-dropdown-item-focused': focused },
44
- )"
45
- @keydown.enter="toggleSelection"
46
- @click="toggleSelection"
47
- >
48
- <Checkbox
49
- v-if="checkbox && size === 'sm'"
50
- :checked="selected"
51
- :disabled="disabled"
52
- @update:checked="value => $emit('update:selected', value)"
53
- />
54
- <div
55
- v-if="$slots.prefix"
56
- :class="clsx(
57
- 'celeste-dropdown-item-prefix',
58
- `celeste-dropdown-item-prefix-${size}`,
59
- )"
60
- >
61
- <slot name="prefix" />
62
- </div>
63
- <div class="celeste-dropdown-item-info">
64
- <div
65
- :class="clsx(
66
- 'celeste-dropdown-item-header',
67
- `celeste-dropdown-item-header-${size}`,
68
- )"
69
- >
70
- <span class="celeste-dropdown-item-label" v-html="label" />
71
- <span v-if="sublabel" class="celeste-dropdown-item-sublabel">{{ sublabel }}</span>
72
- </div>
73
- <p v-if="props.description && props.size === 'lg'" class="celeste-dropdown-item-description">
74
- {{ description }}
75
- </p>
76
- </div>
77
- <div v-if="$slots.suffix" class="celeste-dropdown-item-suffix">
78
- <slot name="suffix" />
79
- </div>
80
- <i v-if="selected" class="i-celeste-check-fill" />
81
- </div>
82
- </template>
83
-
84
- <style lang="scss" scoped>
85
- .celeste-dropdown-item {
86
- display: flex;
87
- align-items: center;
88
- padding: var(--spacing-8);
89
- transition-property: background-color;
90
- transition-duration: var(--animation-fast);
91
- transition-timing-function: ease-out;
92
- border-radius: var(--radius-8);
93
- background: var(--color-bg-white-0);
94
- cursor: pointer;
95
- gap: var(--spacing-8);
96
-
97
- i {
98
- color: var(--color-icon-sub-600);
99
- }
100
-
101
- &:hover,
102
- &-focused {
103
- background: var(--color-bg-weak-50);
104
- }
105
-
106
- :deep(.celeste-input-wrapper) {
107
- gap: 0;
108
- }
109
-
110
- &-header {
111
- display: flex;
112
- align-items: center;
113
- gap: var(--spacing-4);
114
- }
115
-
116
- &-label {
117
- color: var(--color-text-strong-950);
118
- font: var(--paragraph-sm);
119
- }
120
-
121
- &-sublabel {
122
- color: var(--color-text-soft-400);
123
- font: var(--paragraph-xs);
124
- }
125
-
126
- &-description {
127
- margin: var(--spacing-0);
128
- color: var(--color-text-sub-600);
129
- font: var(--paragraph-xs);
130
- }
131
-
132
- .celeste-dropdown-item-prefix {
133
- display: flex;
134
- align-items: center;
135
- justify-content: center;
136
- color: var(--color-icon-sub-600);
137
-
138
- &-lg {
139
- padding: var(--spacing-10);
140
- border: 1px solid var(--color-stroke-soft-200);
141
- border-radius: var(--radius-full);
142
- box-shadow: var(--shadow-regular-xs);
143
- gap: var(--spacing-10);
144
- }
145
- }
146
-
147
- .celeste-dropdown-item-suffix {
148
- color: var(--color-icon-sub-600);
149
- }
150
-
151
- &-disabled {
152
- color: var(--color-text-disabled-300);
153
- cursor: not-allowed;
154
-
155
- :deep(i) {
156
- color: var(--color-text-disabled-300);
157
- }
158
-
159
- .celeste-dropdown-item-label,
160
- .celeste-dropdown-item-sublabel,
161
- .celeste-dropdown-item-description {
162
- color: var(--color-text-disabled-300);
163
- }
164
- }
165
-
166
- &-selected {
167
- background: var(--color-bg-weak-50);
168
- }
169
-
170
- .celeste-dropdown-item-info {
171
- display: flex;
172
- flex: 1 0 0;
173
- flex-direction: column;
174
- justify-content: center;
175
- gap: var(--spacing-4);
176
- }
177
-
178
- .celeste-dropdown-item-header-lg {
179
- .celeste-dropdown-item-label {
180
- font-weight: var(--font-weights-display-0);
181
- }
182
- }
183
- }
184
- </style>