webcake-ui-kit 1.1.9 → 1.1.11
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/package.json +1 -1
- package/src/components/input/Input.vue +1 -1
- package/src/components/input/input.css +15 -1
- package/src/components/select/Select.vue +249 -20
- package/src/components/select/select.css +71 -0
- package/src/components/select-option/SelectOption.vue +6 -1
- package/src/components/tag/Tag.vue +3 -3
- package/src/icons/LayersDown.vue +32 -0
- package/src/icons/LayersDownToBottom.vue +32 -0
- package/src/icons/LayersUp.vue +32 -0
- package/src/icons/LayersUpToTop.vue +32 -0
- package/src/icons/index.js +4 -0
- package/src/styles/color_general.css +12 -0
package/package.json
CHANGED
|
@@ -49,6 +49,15 @@
|
|
|
49
49
|
letter-spacing: var(--paragraph-mini-letter-spacing);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
.ui-input--size-tiny {
|
|
53
|
+
height: 24px;
|
|
54
|
+
gap: var(--spacing-2xs);
|
|
55
|
+
padding: var(--spacing-2xs) var(--spacing-6);
|
|
56
|
+
font-size: var(--paragraph-mini-font-size);
|
|
57
|
+
line-height: var(--paragraph-mini-line-height);
|
|
58
|
+
letter-spacing: var(--paragraph-mini-letter-spacing);
|
|
59
|
+
}
|
|
60
|
+
|
|
52
61
|
/* Roundness — Mini uses smaller default radius per Figma. */
|
|
53
62
|
.ui-input--round-default {
|
|
54
63
|
border-radius: var(--rounded-xl);
|
|
@@ -58,6 +67,10 @@
|
|
|
58
67
|
border-radius: var(--radius);
|
|
59
68
|
}
|
|
60
69
|
|
|
70
|
+
.ui-input--size-tiny.ui-input--round-default {
|
|
71
|
+
border-radius: var(--rounded-lg);
|
|
72
|
+
}
|
|
73
|
+
|
|
61
74
|
.ui-input--round-round {
|
|
62
75
|
border-radius: var(--rounded-full);
|
|
63
76
|
}
|
|
@@ -124,7 +137,8 @@
|
|
|
124
137
|
color: var(--muted-fg);
|
|
125
138
|
}
|
|
126
139
|
|
|
127
|
-
.ui-input--size-xs .ui-input__decoration
|
|
140
|
+
.ui-input--size-xs .ui-input__decoration,
|
|
141
|
+
.ui-input--size-tiny .ui-input__decoration {
|
|
128
142
|
width: 16px;
|
|
129
143
|
height: 16px;
|
|
130
144
|
}
|
|
@@ -19,21 +19,56 @@
|
|
|
19
19
|
'ui-select--open': open,
|
|
20
20
|
'ui-select--disabled': disabled,
|
|
21
21
|
'ui-select--error': error,
|
|
22
|
-
'ui-select--loading': loading
|
|
22
|
+
'ui-select--loading': loading,
|
|
23
|
+
'ui-select--multiple': isMultiMode,
|
|
24
|
+
'ui-select--searchable': isSearchable
|
|
23
25
|
}
|
|
24
26
|
]"
|
|
25
|
-
tabindex="0"
|
|
27
|
+
:tabindex="isSearchable ? -1 : 0"
|
|
26
28
|
v-bind="attrs"
|
|
27
|
-
@click="toggle"
|
|
28
|
-
@keydown.enter.prevent="toggle"
|
|
29
|
-
@keydown.space.prevent="toggle"
|
|
29
|
+
@click="isSearchable ? openIfClosed() : toggle()"
|
|
30
|
+
@keydown.enter.prevent="toggle()"
|
|
31
|
+
@keydown.space.prevent="toggle()"
|
|
30
32
|
>
|
|
31
33
|
<span class="ui-select__left">
|
|
32
34
|
<span v-if="hasIconSlot" class="ui-select__icon">
|
|
33
35
|
<slot name="icon" />
|
|
34
36
|
</span>
|
|
35
37
|
<span v-if="prepend" class="ui-select__prepend">{{ prepend }}</span>
|
|
36
|
-
<span
|
|
38
|
+
<span v-if="isMultiMode" class="ui-select__tags">
|
|
39
|
+
<Tag
|
|
40
|
+
v-for="item in selectedItems"
|
|
41
|
+
:key="item.value"
|
|
42
|
+
:size="tagSize"
|
|
43
|
+
type="default"
|
|
44
|
+
:label="item.label"
|
|
45
|
+
:closable="!disabled"
|
|
46
|
+
@close="deselectItem(item.value)"
|
|
47
|
+
/>
|
|
48
|
+
<input
|
|
49
|
+
v-if="isSearchable"
|
|
50
|
+
ref="searchInput"
|
|
51
|
+
class="ui-select__search"
|
|
52
|
+
type="text"
|
|
53
|
+
:value="filterText"
|
|
54
|
+
:placeholder="!selectedItems.length ? placeholder : ''"
|
|
55
|
+
@input="onFilterInput"
|
|
56
|
+
@click.stop="openIfClosed"
|
|
57
|
+
@keydown.stop="onSearchKeydown"
|
|
58
|
+
/>
|
|
59
|
+
</span>
|
|
60
|
+
<input
|
|
61
|
+
v-else-if="isSearchable"
|
|
62
|
+
ref="searchInput"
|
|
63
|
+
class="ui-select__search ui-select__search--single"
|
|
64
|
+
type="text"
|
|
65
|
+
:value="open ? filterText : selectedLabel"
|
|
66
|
+
:placeholder="open ? selectedLabel || placeholder : !selectedLabel ? placeholder : ''"
|
|
67
|
+
@input="onFilterInput"
|
|
68
|
+
@click.stop="openIfClosed"
|
|
69
|
+
@keydown.stop="onSearchKeydown"
|
|
70
|
+
/>
|
|
71
|
+
<span v-else class="ui-select__value" :class="{ 'ui-select__value--placeholder': !selectedLabel }">
|
|
37
72
|
{{ selectedLabel || placeholder }}
|
|
38
73
|
</span>
|
|
39
74
|
</span>
|
|
@@ -46,7 +81,7 @@
|
|
|
46
81
|
<div class="ui-select__list" :style="listStyle">
|
|
47
82
|
<slot>
|
|
48
83
|
<SelectOption
|
|
49
|
-
v-for="opt in
|
|
84
|
+
v-for="opt in filteredOptions"
|
|
50
85
|
:key="opt.value"
|
|
51
86
|
:value="opt.value"
|
|
52
87
|
:label="opt.label"
|
|
@@ -62,11 +97,12 @@ import WkiChevronDown from '../../icons/ChevronDown.vue'
|
|
|
62
97
|
import Menu from '../menu/Menu.vue'
|
|
63
98
|
import SelectOption from '../select-option/SelectOption.vue'
|
|
64
99
|
import Spinner from '../spinner/Spinner.vue'
|
|
100
|
+
import Tag from '../tag/Tag.vue'
|
|
65
101
|
|
|
66
102
|
export default {
|
|
67
103
|
name: 'Select',
|
|
68
104
|
|
|
69
|
-
components: { Menu, SelectOption, Spinner, WkiChevronDown },
|
|
105
|
+
components: { Menu, SelectOption, Spinner, WkiChevronDown, Tag },
|
|
70
106
|
|
|
71
107
|
provide() {
|
|
72
108
|
return { select: this }
|
|
@@ -80,14 +116,14 @@ export default {
|
|
|
80
116
|
props: {
|
|
81
117
|
size: {
|
|
82
118
|
type: String,
|
|
83
|
-
default: '
|
|
119
|
+
default: 'md',
|
|
84
120
|
validator: function (v) {
|
|
85
|
-
return ['xs', 'sm', '
|
|
121
|
+
return ['xs', 'sm', 'md', 'lg'].indexOf(v) !== -1
|
|
86
122
|
}
|
|
87
123
|
},
|
|
88
124
|
value: {
|
|
89
|
-
type: String,
|
|
90
|
-
default:
|
|
125
|
+
type: [String, Array],
|
|
126
|
+
default: null
|
|
91
127
|
},
|
|
92
128
|
modelValue: {
|
|
93
129
|
default: null
|
|
@@ -119,6 +155,21 @@ export default {
|
|
|
119
155
|
listHeight: {
|
|
120
156
|
type: Number,
|
|
121
157
|
default: 256
|
|
158
|
+
},
|
|
159
|
+
mode: {
|
|
160
|
+
type: String,
|
|
161
|
+
default: 'single',
|
|
162
|
+
validator: function (v) {
|
|
163
|
+
return ['single', 'multiple', 'tags'].includes(v)
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
searchable: {
|
|
167
|
+
type: Boolean,
|
|
168
|
+
default: false
|
|
169
|
+
},
|
|
170
|
+
filterOption: {
|
|
171
|
+
type: Function,
|
|
172
|
+
default: null
|
|
122
173
|
}
|
|
123
174
|
},
|
|
124
175
|
|
|
@@ -127,26 +178,70 @@ export default {
|
|
|
127
178
|
data() {
|
|
128
179
|
return {
|
|
129
180
|
isOpen: false,
|
|
130
|
-
labelCache: {}
|
|
181
|
+
labelCache: {},
|
|
182
|
+
filterText: '',
|
|
183
|
+
tagOptions: []
|
|
131
184
|
}
|
|
132
185
|
},
|
|
133
186
|
|
|
187
|
+
mounted() {
|
|
188
|
+
this._syncSlotLabels()
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
updated() {
|
|
192
|
+
this._syncSlotLabels()
|
|
193
|
+
},
|
|
194
|
+
|
|
134
195
|
computed: {
|
|
135
196
|
effectiveValue() {
|
|
136
197
|
return this.modelValue !== null ? this.modelValue : this.value
|
|
137
198
|
},
|
|
199
|
+
isMultiMode() {
|
|
200
|
+
return this.mode === 'multiple' || this.mode === 'tags'
|
|
201
|
+
},
|
|
202
|
+
isSearchable() {
|
|
203
|
+
return this.mode === 'tags' || this.searchable || !!this.filterOption
|
|
204
|
+
},
|
|
205
|
+
tagSize() {
|
|
206
|
+
if (this.size === 'sm' || this.size === 'md') return this.size
|
|
207
|
+
return 'sm'
|
|
208
|
+
},
|
|
138
209
|
normalizedOptions() {
|
|
139
|
-
|
|
140
|
-
|
|
210
|
+
var base = this.mode === 'tags' ? this.options.concat(this.tagOptions) : this.options
|
|
211
|
+
return base.map(function (opt) {
|
|
212
|
+
return typeof opt === 'string'
|
|
141
213
|
? { label: opt, value: opt, disabled: false }
|
|
142
214
|
: { label: opt.label || opt.value, value: opt.value, disabled: !!opt.disabled }
|
|
143
|
-
)
|
|
215
|
+
})
|
|
216
|
+
},
|
|
217
|
+
filteredOptions() {
|
|
218
|
+
if (!this.filterText) return this.normalizedOptions
|
|
219
|
+
if (this.filterOption) {
|
|
220
|
+
return this.normalizedOptions.filter(opt => this.filterOption(this.filterText, opt))
|
|
221
|
+
}
|
|
222
|
+
var q = this.filterText.toLowerCase()
|
|
223
|
+
return this.normalizedOptions.filter(function (opt) {
|
|
224
|
+
return opt.label.toLowerCase().indexOf(q) !== -1
|
|
225
|
+
})
|
|
144
226
|
},
|
|
145
227
|
selectedLabel() {
|
|
228
|
+
if (this.isMultiMode) return ''
|
|
146
229
|
if (!this.effectiveValue) return ''
|
|
147
230
|
if (this.labelCache[this.effectiveValue]) return this.labelCache[this.effectiveValue]
|
|
148
231
|
const opt = this.normalizedOptions.find(o => o.value === this.effectiveValue)
|
|
149
|
-
|
|
232
|
+
if (opt) return opt.label
|
|
233
|
+
return this._findLabelInSlot(this.effectiveValue) || this.effectiveValue
|
|
234
|
+
},
|
|
235
|
+
selectedItems() {
|
|
236
|
+
if (!this.isMultiMode) return []
|
|
237
|
+
var values = Array.isArray(this.effectiveValue) ? this.effectiveValue : []
|
|
238
|
+
var self = this
|
|
239
|
+
return values.map(function (v) {
|
|
240
|
+
var opt = self.normalizedOptions.find(function (o) {
|
|
241
|
+
return o.value === v
|
|
242
|
+
})
|
|
243
|
+
return { value: v, label: opt ? opt.label : self.labelCache[v] || v }
|
|
244
|
+
})
|
|
150
245
|
},
|
|
151
246
|
hasIconSlot() {
|
|
152
247
|
return !!((this.$scopedSlots && this.$scopedSlots['icon']) || this.$slots['icon'])
|
|
@@ -156,6 +251,24 @@ export default {
|
|
|
156
251
|
}
|
|
157
252
|
},
|
|
158
253
|
|
|
254
|
+
watch: {
|
|
255
|
+
isOpen: function (v) {
|
|
256
|
+
if (!v) {
|
|
257
|
+
this.filterText = ''
|
|
258
|
+
} else if (this.isSearchable) {
|
|
259
|
+
var self = this
|
|
260
|
+
// Double nextTick: Menu's handleOpen also uses $nextTick to call _fmFocus(float).
|
|
261
|
+
// Our first tick runs before Menu's, so Menu steals focus back. The second tick
|
|
262
|
+
// runs after Menu's floating-panel focus, letting us reclaim it for the input.
|
|
263
|
+
this.$nextTick(function () {
|
|
264
|
+
self.$nextTick(function () {
|
|
265
|
+
if (self.$refs.searchInput) self.$refs.searchInput.focus()
|
|
266
|
+
})
|
|
267
|
+
})
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
|
|
159
272
|
methods: {
|
|
160
273
|
onMenuChange(v) {
|
|
161
274
|
this.isOpen = v
|
|
@@ -163,13 +276,129 @@ export default {
|
|
|
163
276
|
onMenuClose() {
|
|
164
277
|
this.isOpen = false
|
|
165
278
|
},
|
|
279
|
+
openIfClosed() {
|
|
280
|
+
if (this.disabled || this.loading) return
|
|
281
|
+
if (!this.isOpen) this.isOpen = true
|
|
282
|
+
},
|
|
283
|
+
onFilterInput(e) {
|
|
284
|
+
this.filterText = e.target.value
|
|
285
|
+
if (!this.isOpen) this.isOpen = true
|
|
286
|
+
},
|
|
287
|
+
onSearchKeydown(e) {
|
|
288
|
+
if (e.key === 'Enter') {
|
|
289
|
+
e.preventDefault()
|
|
290
|
+
if (this.mode === 'tags' && this.filterText.trim()) {
|
|
291
|
+
const text = this.filterText.trim()
|
|
292
|
+
const existing = this.normalizedOptions.find(function (o) {
|
|
293
|
+
return o.label.toLowerCase() === text.toLowerCase() || o.value === text
|
|
294
|
+
})
|
|
295
|
+
const val = existing ? existing.value : text
|
|
296
|
+
if (!existing) {
|
|
297
|
+
this.tagOptions = this.tagOptions.concat([{ label: text, value: text, disabled: false }])
|
|
298
|
+
}
|
|
299
|
+
const current = Array.isArray(this.effectiveValue) ? this.effectiveValue.slice() : []
|
|
300
|
+
if (current.indexOf(val) === -1) {
|
|
301
|
+
current.push(val)
|
|
302
|
+
this.$emit('change', current)
|
|
303
|
+
this.$emit('update:modelValue', current)
|
|
304
|
+
}
|
|
305
|
+
this.filterText = ''
|
|
306
|
+
} else if (!this.isOpen) {
|
|
307
|
+
this.isOpen = true
|
|
308
|
+
}
|
|
309
|
+
} else if (e.key === 'Escape') {
|
|
310
|
+
e.preventDefault()
|
|
311
|
+
this.isOpen = false
|
|
312
|
+
} else if (e.key === 'Backspace' && this.isMultiMode && !this.filterText) {
|
|
313
|
+
const current = Array.isArray(this.effectiveValue) ? this.effectiveValue.slice() : []
|
|
314
|
+
if (current.length > 0) {
|
|
315
|
+
const removed = current[current.length - 1]
|
|
316
|
+
current.pop()
|
|
317
|
+
this.$emit('change', current)
|
|
318
|
+
this.$emit('update:modelValue', current)
|
|
319
|
+
if (this.mode === 'tags') {
|
|
320
|
+
this.tagOptions = this.tagOptions.filter(function (o) {
|
|
321
|
+
return o.value !== removed
|
|
322
|
+
})
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
},
|
|
166
327
|
select(val) {
|
|
167
|
-
this
|
|
168
|
-
|
|
169
|
-
|
|
328
|
+
if (this.isMultiMode) {
|
|
329
|
+
var current = Array.isArray(this.effectiveValue) ? this.effectiveValue.slice() : []
|
|
330
|
+
var idx = current.indexOf(val)
|
|
331
|
+
if (idx === -1) current.push(val)
|
|
332
|
+
else current.splice(idx, 1)
|
|
333
|
+
this.$emit('change', current)
|
|
334
|
+
this.$emit('update:modelValue', current)
|
|
335
|
+
this.filterText = ''
|
|
336
|
+
this.$nextTick(function () {
|
|
337
|
+
if (this.$refs.searchInput) this.$refs.searchInput.focus()
|
|
338
|
+
})
|
|
339
|
+
} else {
|
|
340
|
+
this.$emit('change', val)
|
|
341
|
+
this.$emit('update:modelValue', val)
|
|
342
|
+
this.isOpen = false
|
|
343
|
+
this.filterText = ''
|
|
344
|
+
this.$nextTick(function () {
|
|
345
|
+
if (this.$refs.searchInput) this.$refs.searchInput.blur()
|
|
346
|
+
})
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
deselectItem(val) {
|
|
350
|
+
if (!this.isMultiMode) return
|
|
351
|
+
var current = Array.isArray(this.effectiveValue) ? this.effectiveValue.slice() : []
|
|
352
|
+
var idx = current.indexOf(val)
|
|
353
|
+
if (idx !== -1) {
|
|
354
|
+
current.splice(idx, 1)
|
|
355
|
+
this.$emit('change', current)
|
|
356
|
+
this.$emit('update:modelValue', current)
|
|
357
|
+
}
|
|
358
|
+
if (this.mode === 'tags') {
|
|
359
|
+
this.tagOptions = this.tagOptions.filter(function (o) {
|
|
360
|
+
return o.value !== val
|
|
361
|
+
})
|
|
362
|
+
}
|
|
170
363
|
},
|
|
171
364
|
registerOption(value, label) {
|
|
172
365
|
this.labelCache = Object.assign({}, this.labelCache, { [value]: label })
|
|
366
|
+
},
|
|
367
|
+
_slotNodes() {
|
|
368
|
+
// Vue 3: $slots.default is a function; Vue 2: it's an array
|
|
369
|
+
return typeof this.$slots.default === 'function' ? this.$slots.default() : this.$slots.default || []
|
|
370
|
+
},
|
|
371
|
+
_syncSlotLabels() {
|
|
372
|
+
const collect = nodes => {
|
|
373
|
+
if (!Array.isArray(nodes)) return
|
|
374
|
+
nodes.forEach(vnode => {
|
|
375
|
+
if (!vnode) return
|
|
376
|
+
const props = vnode.props || (vnode.componentOptions && vnode.componentOptions.propsData)
|
|
377
|
+
if (props && props.value != null && props.label) {
|
|
378
|
+
this.registerOption(String(props.value), String(props.label))
|
|
379
|
+
}
|
|
380
|
+
if (Array.isArray(vnode.children)) collect(vnode.children)
|
|
381
|
+
})
|
|
382
|
+
}
|
|
383
|
+
collect(this._slotNodes())
|
|
384
|
+
},
|
|
385
|
+
_findLabelInSlot(value) {
|
|
386
|
+
const scan = nodes => {
|
|
387
|
+
if (!Array.isArray(nodes)) return null
|
|
388
|
+
for (const vnode of nodes) {
|
|
389
|
+
if (!vnode) continue
|
|
390
|
+
const props = vnode.props || (vnode.componentOptions && vnode.componentOptions.propsData)
|
|
391
|
+
if (props && String(props.value) === String(value) && props.label) {
|
|
392
|
+
return String(props.label)
|
|
393
|
+
}
|
|
394
|
+
if (Array.isArray(vnode.children)) {
|
|
395
|
+
const found = scan(vnode.children)
|
|
396
|
+
if (found) return found
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return null
|
|
400
|
+
}
|
|
401
|
+
return scan(this._slotNodes())
|
|
173
402
|
}
|
|
174
403
|
}
|
|
175
404
|
}
|
|
@@ -150,6 +150,77 @@
|
|
|
150
150
|
line-height: var(--paragraph-mini-line-height);
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
/* — multiple mode — */
|
|
154
|
+
.ui-select--multiple {
|
|
155
|
+
height: auto;
|
|
156
|
+
min-height: 36px;
|
|
157
|
+
align-items: center;
|
|
158
|
+
flex-wrap: wrap;
|
|
159
|
+
padding: var(--spacing-2xs) var(--spacing-sm) var(--spacing-2xs) var(--spacing-xs);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.ui-select--multiple.ui-select--lg {
|
|
163
|
+
min-height: 40px;
|
|
164
|
+
height: auto;
|
|
165
|
+
padding: var(--spacing-xs) var(--spacing-md) var(--spacing-xs) var(--spacing-xs);
|
|
166
|
+
align-items: center;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.ui-select--multiple.ui-select--sm {
|
|
170
|
+
min-height: 32px;
|
|
171
|
+
height: auto;
|
|
172
|
+
padding: var(--spacing-5p5) var(--spacing-xs);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.ui-select--multiple.ui-select--xs {
|
|
176
|
+
min-height: 28px;
|
|
177
|
+
height: auto;
|
|
178
|
+
padding: var(--spacing-2xs) var(--spacing-6) var(--spacing-2xs) var(--spacing-2xs);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.ui-select--multiple .ui-select__chevron {
|
|
182
|
+
align-self: center;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.ui-select__tags {
|
|
186
|
+
display: flex;
|
|
187
|
+
flex-wrap: wrap;
|
|
188
|
+
align-items: center;
|
|
189
|
+
gap: var(--spacing-2xs);
|
|
190
|
+
flex: 1;
|
|
191
|
+
min-width: 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* — search input (inline in trigger) — */
|
|
195
|
+
.ui-select__search {
|
|
196
|
+
border: none;
|
|
197
|
+
outline: none;
|
|
198
|
+
background: transparent;
|
|
199
|
+
font-family: var(--font-family-body);
|
|
200
|
+
font-size: var(--paragraph-small-font-size);
|
|
201
|
+
line-height: var(--paragraph-small-line-height);
|
|
202
|
+
color: var(--primary-fg);
|
|
203
|
+
padding: 0;
|
|
204
|
+
margin: 0;
|
|
205
|
+
min-width: 60px;
|
|
206
|
+
flex: 1;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.ui-select__search::placeholder {
|
|
210
|
+
color: var(--muted-fg);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.ui-select__search--single {
|
|
214
|
+
width: 100%;
|
|
215
|
+
flex: 1;
|
|
216
|
+
min-width: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.ui-select--xs .ui-select__search {
|
|
220
|
+
font-size: var(--paragraph-mini-font-size);
|
|
221
|
+
line-height: var(--paragraph-mini-line-height);
|
|
222
|
+
}
|
|
223
|
+
|
|
153
224
|
/* List wrapper inside the portal'd Menu. Width is anchored to trigger via the
|
|
154
225
|
Menu component's anchorWidth prop (computes min-width). */
|
|
155
226
|
.ui-select__list {
|
|
@@ -57,7 +57,12 @@ export default {
|
|
|
57
57
|
|
|
58
58
|
computed: {
|
|
59
59
|
isSelected() {
|
|
60
|
-
|
|
60
|
+
if (!this.select) return false
|
|
61
|
+
var val = this.select.effectiveValue
|
|
62
|
+
if (this.select.isMultiMode) {
|
|
63
|
+
return Array.isArray(val) && val.indexOf(this.value) !== -1
|
|
64
|
+
}
|
|
65
|
+
return val !== undefined && val === this.value
|
|
61
66
|
},
|
|
62
67
|
isDisabled() {
|
|
63
68
|
return this.disabled || !!(this.select && this.select.disabled)
|
|
@@ -6,16 +6,16 @@
|
|
|
6
6
|
>
|
|
7
7
|
<span v-if="counter > 0" class="ui-tag__counter">{{ counter }}</span>
|
|
8
8
|
<button v-if="closable" class="ui-tag__close" type="button" @click.stop="$emit('close')">
|
|
9
|
-
<
|
|
10
|
-
<path d="M2.5 2.5L9.5 9.5M9.5 2.5L2.5 9.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
|
|
11
|
-
</svg>
|
|
9
|
+
<WkiX :size="12" class="ui-tag__close-icon" />
|
|
12
10
|
</button>
|
|
13
11
|
</span>
|
|
14
12
|
</template>
|
|
15
13
|
|
|
16
14
|
<script>
|
|
15
|
+
import { WkiX } from '../../icons'
|
|
17
16
|
export default {
|
|
18
17
|
name: 'Tag',
|
|
18
|
+
components: { WkiX },
|
|
19
19
|
props: {
|
|
20
20
|
type: {
|
|
21
21
|
type: String,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<BaseIcon v-bind="$attrs" v-on="listeners">
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
4
|
+
<path
|
|
5
|
+
fill-rule="evenodd"
|
|
6
|
+
clip-rule="evenodd"
|
|
7
|
+
d="M1.96051 10.6146L8.96755 14.6329V12.5926L2.83712 9.07609C2.81768 9.06506 2.79704 9.047 2.78578 9.02767C2.7747 9.00847 2.76903 8.9866 2.769 8.96443C2.769 8.94205 2.77453 8.91953 2.78578 8.9002C2.79137 8.89063 2.79872 8.88224 2.80652 8.87451L2.83317 8.85375L11.4294 3.9249C11.6023 3.82501 11.8004 3.77077 12 3.77075C12.1996 3.77075 12.3958 3.82306 12.5686 3.92292L21.1639 8.85178C21.1832 8.86277 21.203 8.88097 21.2142 8.9002C21.2255 8.91953 21.231 8.94205 21.231 8.96443C21.231 8.98664 21.2253 9.00845 21.2142 9.02767C21.203 9.047 21.1863 9.06308 21.1668 9.07411L15.0327 12.5924V14.6335L22.0434 10.6126C22.3335 10.4473 22.5742 10.2087 22.7424 9.91996C22.9111 9.63003 23 9.29999 23 8.96443C23 8.62882 22.9112 8.29887 22.7424 8.00889C22.5736 7.71902 22.3311 7.47867 22.0395 7.31324L13.4521 2.39032C13.0104 2.13505 12.5101 2 12 2C11.4899 2.00002 10.9887 2.13402 10.5469 2.38933L1.96051 7.31423C1.66908 7.47967 1.42635 7.71914 1.25765 8.00889C1.08885 8.29886 1 8.62882 1 8.96443C1.00002 9.29999 1.08887 9.63003 1.25765 9.91996C1.42637 10.2097 1.66909 10.4492 1.96051 10.6146Z"
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
/>
|
|
10
|
+
<path
|
|
11
|
+
d="M12.7782 19.8192L15.1123 17.5476C15.2595 17.4057 15.4586 17.3265 15.6658 17.3274C15.873 17.3284 16.0713 17.4094 16.2172 17.5526C16.363 17.6959 16.4444 17.8897 16.4434 18.0913C16.4424 18.2929 16.3592 18.4859 16.212 18.6279L13.2761 21.485C12.9359 21.8148 12.4752 22 11.9949 22C11.5147 22 11.054 21.8148 10.7137 21.485L7.77788 18.6279C7.63068 18.4859 7.54744 18.2929 7.54647 18.0913C7.5455 17.8897 7.62687 17.6959 7.77269 17.5526C7.91852 17.4094 8.11684 17.3284 8.32404 17.3274C8.42663 17.327 8.52832 17.3462 8.62328 17.3839C8.71825 17.4217 8.80464 17.4773 8.87753 17.5476L11.2221 19.8293V10.2988C11.2221 10.0979 11.304 9.90535 11.45 9.76335C11.5959 9.62135 11.7938 9.54158 12.0001 9.54158C12.2065 9.54158 12.4044 9.62135 12.5503 9.76335C12.6962 9.90535 12.7782 10.0979 12.7782 10.2988V19.8192Z"
|
|
12
|
+
fill="currentColor"
|
|
13
|
+
/>
|
|
14
|
+
</svg>
|
|
15
|
+
</BaseIcon>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import BaseIcon from './BaseIcon.vue'
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
name: 'LayersDown',
|
|
23
|
+
components: { BaseIcon },
|
|
24
|
+
inheritAttrs: false,
|
|
25
|
+
emits: [],
|
|
26
|
+
computed: {
|
|
27
|
+
listeners() {
|
|
28
|
+
return this.$listeners || {}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<BaseIcon v-bind="$attrs" v-on="listeners">
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
4
|
+
<path
|
|
5
|
+
fill-rule="evenodd"
|
|
6
|
+
clip-rule="evenodd"
|
|
7
|
+
d="M22.75 6.87988C22.7461 7.36301 22.3513 7.75182 21.8682 7.74805C21.385 7.74423 20.9964 7.3493 21 6.86621C21.0002 6.84211 20.9934 6.81818 20.9805 6.79785C20.9675 6.77757 20.9448 6.75899 20.9229 6.74902L12.3428 2.84961C12.1973 2.78394 12.0395 2.75 11.8799 2.75C11.7199 2.75002 11.5627 2.78365 11.417 2.84961L2.81837 6.75977C2.79872 6.76983 2.78148 6.7841 2.76954 6.80273C2.75669 6.8229 2.74995 6.84719 2.75001 6.87109C2.75095 7.35413 2.36005 7.74685 1.87696 7.74805C1.39382 7.74913 1.00122 7.35816 1.00001 6.875C0.999118 6.51637 1.1012 6.16473 1.29395 5.8623C1.4867 5.55999 1.7674 5.3166 2.09278 5.16602L10.6943 1.25586C11.0669 1.08721 11.471 1.00002 11.8799 1C12.2889 1 12.6948 1.08714 13.0674 1.25586L21.6436 5.1543C21.9754 5.30343 22.2567 5.54635 22.4531 5.85254C22.6496 6.15884 22.7529 6.51602 22.75 6.87988ZM1.30762 12.9014C1.1092 12.5969 1.00298 12.2414 1.00294 11.8779C1.00294 11.5143 1.10903 11.1581 1.30762 10.8535C1.50425 10.5519 1.78389 10.3131 2.11231 10.166L10.6914 6.25684C11.0659 6.08602 11.4732 5.9971 11.8848 5.99707C12.2959 5.99707 12.703 6.08546 13.0772 6.25586L21.6563 10.1572C21.9851 10.3043 22.2651 10.5419 22.4619 10.8438C22.6605 11.1484 22.7666 11.5045 22.7666 11.8682C22.7665 12.2316 22.6604 12.5871 22.4619 12.8916C22.265 13.1936 21.9863 13.4321 21.6572 13.5791L14.875 16.6668V14.7438L20.9326 11.9863L20.9424 11.9824C20.9645 11.9726 20.9829 11.9558 20.9961 11.9355C21.0092 11.9154 21.0165 11.8922 21.0166 11.8682C21.0166 11.844 21.0093 11.8201 20.9961 11.7998C20.9829 11.7796 20.9645 11.7627 20.9424 11.7529L20.9326 11.749L12.3516 7.84863C12.2051 7.78186 12.0458 7.74707 11.8848 7.74707C11.764 7.74709 11.6444 7.76679 11.5303 7.80469L11.418 7.84863L2.8379 11.7588L2.82813 11.7637L2.79786 11.7822C2.78859 11.79 2.78014 11.7993 2.77344 11.8096C2.7603 11.8298 2.75391 11.8538 2.75391 11.8779C2.75396 11.9021 2.76025 11.926 2.77344 11.9463C2.78668 11.9665 2.81478 11.9863 2.83692 11.9961L8.875 14.7437V16.6663L2.12208 13.5938L2.00001 13.5342C1.72007 13.3857 1.48148 13.168 1.30762 12.9014Z"
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
/>
|
|
10
|
+
<path
|
|
11
|
+
d="M12.6447 20.4052L14.9538 18.1602C15.0994 18.02 15.2964 17.9417 15.5013 17.9427C15.7063 17.9436 15.9025 18.0237 16.0467 18.1652C16.191 18.3068 16.2715 18.4983 16.2705 18.6976C16.2696 18.8968 16.1872 19.0876 16.0416 19.2278L13.1373 22.0515C12.8007 22.3775 12.345 22.5605 11.8699 22.5605C11.3948 22.5605 10.939 22.3775 10.6024 22.0515L7.69811 19.2278C7.5525 19.0876 7.47015 18.8968 7.46919 18.6976C7.46822 18.4983 7.54873 18.3068 7.69298 18.1652C7.83724 18.0237 8.03343 17.9436 8.2384 17.9427C8.33989 17.9422 8.44049 17.9612 8.53443 17.9985C8.62838 18.0358 8.71385 18.0908 8.78595 18.1602L11.1053 20.4152V10.9964C11.1053 10.7979 11.1864 10.6076 11.3307 10.4672C11.4751 10.3269 11.6709 10.248 11.875 10.248C12.0791 10.248 12.2749 10.3269 12.4193 10.4672C12.5636 10.6076 12.6447 10.7979 12.6447 10.9964V20.4052Z"
|
|
12
|
+
fill="currentColor"
|
|
13
|
+
/>
|
|
14
|
+
</svg>
|
|
15
|
+
</BaseIcon>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import BaseIcon from './BaseIcon.vue'
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
name: 'LayersDownToBottom',
|
|
23
|
+
components: { BaseIcon },
|
|
24
|
+
inheritAttrs: false,
|
|
25
|
+
emits: [],
|
|
26
|
+
computed: {
|
|
27
|
+
listeners() {
|
|
28
|
+
return this.$listeners || {}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<BaseIcon v-bind="$attrs" v-on="listeners">
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
4
|
+
<path
|
|
5
|
+
fill-rule="evenodd"
|
|
6
|
+
clip-rule="evenodd"
|
|
7
|
+
d="M1.96051 13.3854L8.96755 9.36715V11.4074L2.83712 14.9239C2.81768 14.9349 2.79704 14.953 2.78578 14.9723C2.7747 14.9915 2.76903 15.0134 2.769 15.0356C2.769 15.0579 2.77453 15.0805 2.78578 15.0998C2.79137 15.1094 2.79872 15.1178 2.80652 15.1255L2.83317 15.1462L11.4294 20.0751C11.6023 20.175 11.8004 20.2292 12 20.2292C12.1996 20.2292 12.3958 20.1769 12.5686 20.0771L21.1639 15.1482C21.1832 15.1372 21.203 15.119 21.2142 15.0998C21.2255 15.0805 21.231 15.0579 21.231 15.0356C21.231 15.0134 21.2253 14.9916 21.2142 14.9723C21.203 14.953 21.1863 14.9369 21.1668 14.9259L15.0327 11.4076V9.36655L22.0434 13.3874C22.3335 13.5527 22.5742 13.7913 22.7424 14.08C22.9111 14.37 23 14.7 23 15.0356C23 15.3712 22.9111 15.7011 22.7424 15.9911C22.5736 16.281 22.3311 16.5213 22.0395 16.6868L13.4521 21.6097C13.0104 21.865 12.5101 22 12 22C11.4899 22 10.9887 21.866 10.5469 21.6107L1.96051 16.6858C1.66908 16.5203 1.42635 16.2809 1.25765 15.9911C1.08885 15.7011 1 15.3712 1 15.0356C1.00002 14.7 1.08887 14.37 1.25765 14.08C1.42637 13.7903 1.66909 13.5508 1.96051 13.3854Z"
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
/>
|
|
10
|
+
<path
|
|
11
|
+
d="M12.7782 4.18084L15.1123 6.45241C15.2595 6.59432 15.4586 6.67351 15.6658 6.67257C15.873 6.67162 16.0713 6.59061 16.2172 6.44736C16.363 6.30411 16.4444 6.11035 16.4434 5.90871C16.4424 5.70707 16.3592 5.51406 16.212 5.37215L13.2761 2.51502C12.9359 2.18519 12.4752 2 11.9949 2C11.5147 2 11.054 2.18519 10.7137 2.51502L7.77788 5.37215C7.63068 5.51406 7.54744 5.70707 7.54647 5.90871C7.5455 6.11035 7.62687 6.30411 7.77269 6.44736C7.91852 6.59061 8.11684 6.67162 8.32404 6.67257C8.42663 6.67303 8.52832 6.65383 8.62328 6.61606C8.71825 6.57828 8.80464 6.52268 8.87753 6.45241L11.2221 4.17074V13.7012C11.2221 13.9021 11.304 14.0946 11.45 14.2366C11.5959 14.3786 11.7938 14.4584 12.0001 14.4584C12.2065 14.4584 12.4044 14.3786 12.5503 14.2366C12.6962 14.0946 12.7782 13.9021 12.7782 13.7012V4.18084Z"
|
|
12
|
+
fill="currentColor"
|
|
13
|
+
/>
|
|
14
|
+
</svg>
|
|
15
|
+
</BaseIcon>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import BaseIcon from './BaseIcon.vue'
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
name: 'LayersUp',
|
|
23
|
+
components: { BaseIcon },
|
|
24
|
+
inheritAttrs: false,
|
|
25
|
+
emits: [],
|
|
26
|
+
computed: {
|
|
27
|
+
listeners() {
|
|
28
|
+
return this.$listeners || {}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<BaseIcon v-bind="$attrs" v-on="listeners">
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
4
|
+
<path
|
|
5
|
+
fill-rule="evenodd"
|
|
6
|
+
clip-rule="evenodd"
|
|
7
|
+
d="M22.75 16.6806C22.7461 16.1975 22.3513 15.8087 21.8682 15.8124C21.385 15.8162 20.9964 16.2112 21 16.6943C21.0002 16.7184 20.9934 16.7423 20.9805 16.7626C20.9675 16.7829 20.9448 16.8015 20.9229 16.8115L12.3428 20.7109C12.1973 20.7765 12.0395 20.8105 11.8799 20.8105C11.7199 20.8105 11.5627 20.7768 11.417 20.7109L2.81837 16.8007C2.79872 16.7906 2.78148 16.7764 2.76954 16.7577C2.75669 16.7376 2.74995 16.7133 2.75001 16.6894C2.75095 16.2063 2.36005 15.8136 1.87696 15.8124C1.39382 15.8113 1.00122 16.2023 1.00001 16.6855C0.999118 17.0441 1.1012 17.3957 1.29395 17.6982C1.4867 18.0005 1.7674 18.2439 2.09278 18.3945L10.6943 22.3046C11.0669 22.4733 11.471 22.5605 11.8799 22.5605C12.2889 22.5605 12.6948 22.4733 13.0674 22.3046L21.6436 18.4062C21.9754 18.257 22.2567 18.0141 22.4531 17.7079C22.6496 17.4016 22.7529 17.0445 22.75 16.6806ZM1.30762 10.6591C1.1092 10.9636 1.00298 11.3191 1.00294 11.6825C1.00294 12.0462 1.10903 12.4024 1.30762 12.707C1.50425 13.0085 1.78389 13.2474 2.11231 13.3945L10.6914 17.3036C11.0659 17.4745 11.4732 17.5634 11.8848 17.5634C12.2959 17.5634 12.703 17.475 13.0772 17.3046L21.6563 13.4032C21.9851 13.2562 22.2651 13.0186 22.4619 12.7167C22.6605 12.4121 22.7666 12.0559 22.7666 11.6923C22.7665 11.3288 22.6604 10.9734 22.4619 10.6689C22.265 10.3669 21.9863 10.1284 21.6572 9.98137L14.875 6.8937V8.81667L20.9326 11.5741L20.9424 11.5781C20.9645 11.5878 20.9829 11.6047 20.9961 11.6249C21.0092 11.645 21.0165 11.6683 21.0166 11.6923C21.0166 11.7165 21.0093 11.7404 20.9961 11.7607C20.9829 11.7809 20.9645 11.7978 20.9424 11.8075L20.9326 11.8115L12.3516 15.7118C12.2051 15.7786 12.0458 15.8134 11.8848 15.8134C11.764 15.8134 11.6444 15.7937 11.5303 15.7558L11.418 15.7118L2.8379 11.8017L2.82813 11.7968L2.79786 11.7782C2.78859 11.7704 2.78014 11.7612 2.77344 11.7509C2.7603 11.7306 2.75391 11.7067 2.75391 11.6825C2.75396 11.6584 2.76025 11.6344 2.77344 11.6142C2.78668 11.5939 2.81478 11.5741 2.83692 11.5644L8.875 8.81673V6.8942L2.12208 9.96672L2.00001 10.0263C1.72007 10.1747 1.48148 10.3924 1.30762 10.6591Z"
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
/>
|
|
10
|
+
<path
|
|
11
|
+
d="M12.6447 3.15528L14.9538 5.40023C15.0994 5.54048 15.2964 5.61874 15.5013 5.61781C15.7063 5.61687 15.9025 5.53681 16.0467 5.39524C16.191 5.25367 16.2715 5.06218 16.2705 4.8629C16.2696 4.66363 16.1872 4.47288 16.0416 4.33263L13.1373 1.50899C12.8007 1.18302 12.345 1 11.8699 1C11.3948 1 10.939 1.18302 10.6024 1.50899L7.69811 4.33263C7.5525 4.47288 7.47015 4.66363 7.46919 4.8629C7.46822 5.06218 7.54873 5.25367 7.69298 5.39524C7.83724 5.53681 8.03343 5.61687 8.2384 5.61781C8.33989 5.61827 8.44049 5.5993 8.53443 5.56196C8.62838 5.52463 8.71385 5.46967 8.78595 5.40023L11.1053 3.1453V12.5641C11.1053 12.7626 11.1864 12.9529 11.3307 13.0932C11.4751 13.2336 11.6709 13.3124 11.875 13.3124C12.0791 13.3124 12.2749 13.2336 12.4193 13.0932C12.5636 12.9529 12.6447 12.7626 12.6447 12.5641V3.15528Z"
|
|
12
|
+
fill="currentColor"
|
|
13
|
+
/>
|
|
14
|
+
</svg>
|
|
15
|
+
</BaseIcon>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import BaseIcon from './BaseIcon.vue'
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
name: 'LayersUpToTop',
|
|
23
|
+
components: { BaseIcon },
|
|
24
|
+
inheritAttrs: false,
|
|
25
|
+
emits: [],
|
|
26
|
+
computed: {
|
|
27
|
+
listeners() {
|
|
28
|
+
return this.$listeners || {}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
</script>
|
package/src/icons/index.js
CHANGED
|
@@ -1731,4 +1731,8 @@ export { default as WkiZoomOut } from './ZoomOut.vue'
|
|
|
1731
1731
|
export { default as WkiClickButton } from './ClickButton.vue'
|
|
1732
1732
|
export { default as WkiSectionBuilder } from './SectionBuilder.vue'
|
|
1733
1733
|
export { default as WkiGenerateImage } from './GenerateImage.vue'
|
|
1734
|
+
export { default as WkiLayersUp } from './LayersUp.vue'
|
|
1735
|
+
export { default as WkiLayersDown } from './LayersDown.vue'
|
|
1736
|
+
export { default as WkiLayersUpToTop } from './LayersUpToTop.vue'
|
|
1737
|
+
export { default as WkiLayersDownToBottom } from './LayersDownToBottom.vue'
|
|
1734
1738
|
// --- AUTO-GENERATED LUCIDE EXPORTS END ---
|
|
@@ -32,6 +32,12 @@
|
|
|
32
32
|
--destructive-subtle: var(--color-red-50);
|
|
33
33
|
--destructive-border: var(--color-red-500);
|
|
34
34
|
--destructive-text: var(--color-red-600);
|
|
35
|
+
--warning-subtle: var(--color-orange-50);
|
|
36
|
+
--warning-border: var(--color-orange-400);
|
|
37
|
+
--warning-text: var(--color-orange-500);
|
|
38
|
+
--info-subtle: var(--color-indigo-50);
|
|
39
|
+
--info-border: var(--color-indigo-500);
|
|
40
|
+
--info-text: var(--color-indigo-600);
|
|
35
41
|
--ghost: var(--color-white-alpha-001);
|
|
36
42
|
--ghost-foreground: var(--color-brand-neutrals-700);
|
|
37
43
|
--ghost-hover: var(--color-black-alpha-5);
|
|
@@ -138,6 +144,12 @@
|
|
|
138
144
|
--destructive-subtle: var(--color-red-950);
|
|
139
145
|
--destructive-border: var(--color-red-500);
|
|
140
146
|
--destructive-text: var(--color-red-400);
|
|
147
|
+
--warning-subtle: var(--color-yellow-950);
|
|
148
|
+
--warning-border: var(--color-orange-600);
|
|
149
|
+
--warning-text: var(--color-orange-500);
|
|
150
|
+
--info-subtle: var(--color-indigo-950);
|
|
151
|
+
--info-border: var(--color-indigo-500);
|
|
152
|
+
--info-text: var(--color-indigo-600);
|
|
141
153
|
--ghost: var(--color-white-alpha-001);
|
|
142
154
|
--ghost-foreground: var(--color-brand-neutrals-200);
|
|
143
155
|
--ghost-hover: var(--color-black-alpha-10);
|