mirror of
https://github.com/fmhy/edit.git
synced 2025-08-01 00:32:30 +10:00
rework colorpicker, brand button
This commit is contained in:
parent
8877c540cf
commit
b1da9e7563
3 changed files with 85 additions and 22 deletions
|
@ -33,7 +33,7 @@ const selectedColor = useStorage<ColorNames>('preferred-color', 'swarm')
|
||||||
|
|
||||||
const colorOptions = Object.keys(colors).filter(
|
const colorOptions = Object.keys(colors).filter(
|
||||||
(key) => typeof colors[key as keyof typeof colors] === 'object'
|
(key) => typeof colors[key as keyof typeof colors] === 'object'
|
||||||
)
|
) as ColorNames[]
|
||||||
|
|
||||||
const { css } = useStyleTag('', { id: 'brand-color' })
|
const { css } = useStyleTag('', { id: 'brand-color' })
|
||||||
|
|
||||||
|
@ -79,16 +79,17 @@ const handleColorChange = (value: string) => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="color-picker">
|
<div class="color-picker">
|
||||||
|
<div class="color-input-wrapper">
|
||||||
|
<div
|
||||||
|
class="color-preview"
|
||||||
|
:style="{ backgroundColor: colors[selectedColor][500] }"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<SelectRoot :model-value="selectedColor" @update:model-value="handleColorChange">
|
<SelectRoot :model-value="selectedColor" @update:model-value="handleColorChange">
|
||||||
<SelectTrigger
|
<SelectTrigger
|
||||||
class="inline-flex items-center justify-between px-3 py-2 text-sm bg-bg-alt border border-div rounded-md hover:bg-bg-elv transition-colors min-w-[180px] mx-auto align-left"
|
class="color-input-text"
|
||||||
aria-label="Select theme color">
|
aria-label="Select theme color">
|
||||||
<div class="flex items-center gap-2">
|
<SelectValue :placeholder="normalizeColorName(selectedColor)" />
|
||||||
<span class="inline-block w-4 h-4 rounded-full border border-div"
|
|
||||||
:style="{ backgroundColor: colors[selectedColor][500] }" />
|
|
||||||
<SelectValue :placeholder="normalizeColorName(selectedColor)" />
|
|
||||||
</div>
|
|
||||||
<span class="i-lucide:chevron-down w-4 h-4 text-text-2" />
|
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
|
|
||||||
<SelectPortal>
|
<SelectPortal>
|
||||||
|
@ -112,3 +113,56 @@ const handleColorChange = (value: string) => {
|
||||||
</SelectRoot>
|
</SelectRoot>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.color-preview {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid var(--vp-c-divider);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-input-wrapper {
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 12px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-picker {
|
||||||
|
background: var(--color-picker-bg, var(--vp-c-bg-alt));
|
||||||
|
border-radius: 8px;
|
||||||
|
color: var(--vp-c-text-2);
|
||||||
|
padding: 4px 8px;
|
||||||
|
height: auto;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: left;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
cursor: text;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-input-text {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0 0 0 8px;
|
||||||
|
border: none;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--vp-c-text-1);
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: text;
|
||||||
|
transition: border-color 0.25s, background 0.4s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-picker:hover, .color-picker:focus {
|
||||||
|
border-color: var(--vp-c-brand);
|
||||||
|
background: var(--vp-c-bg-alt);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -24,7 +24,14 @@ import ToggleStarred from './ToggleStarred.vue'
|
||||||
<ToggleStarred />
|
<ToggleStarred />
|
||||||
</template>
|
</template>
|
||||||
</InputField>
|
</InputField>
|
||||||
|
<InputField
|
||||||
|
id="icon-color"
|
||||||
|
label="Color"
|
||||||
|
>
|
||||||
|
<template #display>
|
||||||
|
<ColorPicker class="ml-auto"/>
|
||||||
|
</template>
|
||||||
|
</InputField>
|
||||||
|
|
||||||
<ColorPicker />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -140,7 +140,7 @@ const processedItems = computed(() => {
|
||||||
<slot>{{ text }}</slot>
|
<slot>{{ text }}</slot>
|
||||||
</component>
|
</component>
|
||||||
<button
|
<button
|
||||||
class="bg-$vp-c-default-soft text-text border-$vp-c-default-soft hover:border-primary ml-3 inline-flex h-8 items-center justify-center whitespace-nowrap rounded-md border-2 border-solid px-2.5 py-4.5 text-md font-medium transition-all duration-300 sm:h-7 VPButtonTrigger"
|
class="bg-$vp-c-default-soft text-text border-$vp-c-default-soft hover:bg-$vp-c-default-hover active:bg-$vp-c-default-active inline-flex items-center justify-center whitespace-nowrap rounded-md border-2 border-solid px-2.5 py-5 text-md font-medium sm:h-7 VPButtonTrigger"
|
||||||
@click="toggleDropdown" :aria-expanded="isDropdownOpen" aria-label="Toggle dropdown menu">
|
@click="toggleDropdown" :aria-expanded="isDropdownOpen" aria-label="Toggle dropdown menu">
|
||||||
<span class="i-lucide:menu"></span>
|
<span class="i-lucide:menu"></span>
|
||||||
</button>
|
</button>
|
||||||
|
@ -200,21 +200,16 @@ const processedItems = computed(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPButton.brand {
|
.VPButton.brand {
|
||||||
border-color: var(--vp-button-brand-border);
|
color: var(--vp-c-text-1);
|
||||||
color: var(--vp-button-brand-text);
|
background-color: var(--vp-c-default-soft);
|
||||||
background-color: var(--vp-button-brand-bg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPButton.brand:hover {
|
.VPButton.brand:hover {
|
||||||
border-color: var(--vp-button-brand-hover-border);
|
background-color: var(--vp-c-default-hover);
|
||||||
color: var(--vp-button-brand-hover-text);
|
|
||||||
background-color: var(--vp-button-brand-hover-bg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPButton.brand:active {
|
.VPButton.brand:active {
|
||||||
border-color: var(--vp-button-brand-active-border);
|
background-color: var(--vp-c-default-active);
|
||||||
color: var(--vp-button-brand-active-text);
|
|
||||||
background-color: var(--vp-button-brand-active-bg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPButton.alt {
|
.VPButton.alt {
|
||||||
|
@ -265,9 +260,16 @@ const processedItems = computed(() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPButtonMain {
|
.VPButtonMain {
|
||||||
border-top-right-radius: 0;
|
--uno: border-2 border-$vp-c-default-soft;
|
||||||
border-bottom-right-radius: 0;
|
border-top-right-radius: 0 !important;
|
||||||
border-right: none;
|
border-bottom-right-radius: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.VPButtonTrigger {
|
||||||
|
border-top-left-radius: 0 !important;
|
||||||
|
border-bottom-left-radius: 0 !important;
|
||||||
|
border-left: none !important;
|
||||||
|
margin-left: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPButtonDropdownMenu {
|
.VPButtonDropdownMenu {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue