feat(stage-ui): mock hover state
This commit is contained in:
+7
-7
@@ -135,7 +135,7 @@ pnpm install
|
||||
### Documentation site
|
||||
|
||||
```shell
|
||||
pnpm -F @proj-airi/docs... dev
|
||||
pnpm -F @proj-airi/docs... --parallel dev
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -143,13 +143,13 @@ pnpm -F @proj-airi/docs... dev
|
||||
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
|
||||
>
|
||||
> ```shell
|
||||
> nr -F @proj-airi/docs... dev
|
||||
> nr -F @proj-airi/docs... --parallel dev
|
||||
> ```
|
||||
|
||||
### Stage web (Frontend for [airi.moeru.ai](https://airi.moeru.ai), or [airi.ayaka.io](https://airi.ayaka.io))
|
||||
|
||||
```shell
|
||||
pnpm -F @proj-airi/stage-web... dev
|
||||
pnpm -F @proj-airi/stage-web... --parallel dev
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -157,13 +157,13 @@ pnpm -F @proj-airi/stage-web... dev
|
||||
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
|
||||
>
|
||||
> ```shell
|
||||
> nr -F @proj-airi/stage-web... dev
|
||||
> nr -F @proj-airi/stage-web... --parallel dev
|
||||
> ```
|
||||
|
||||
### Stage Tamagotchi (Electron app for アイリ VTuber)
|
||||
|
||||
```shell
|
||||
pnpm -F @proj-airi/stage-tamagotchi... dev
|
||||
pnpm -F @proj-airi/stage-tamagotchi... --parallel dev
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -171,7 +171,7 @@ pnpm -F @proj-airi/stage-tamagotchi... dev
|
||||
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
|
||||
>
|
||||
> ```shell
|
||||
> nr -F @proj-airi/stage-tamagotchi... dev
|
||||
> nr -F @proj-airi/stage-tamagotchi... --parallel dev
|
||||
> ```
|
||||
|
||||
### Telegram bot integration
|
||||
@@ -215,7 +215,7 @@ pnpm -F @proj-airi/telegram-bot start
|
||||
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
|
||||
>
|
||||
> ```shell
|
||||
> nr -F @proj-airi/telegram-bot... dev
|
||||
> nr -F @proj-airi/telegram-bot... --parallel dev
|
||||
> ```
|
||||
|
||||
### Discord bot integration
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
"package.json"
|
||||
],
|
||||
"scripts": {
|
||||
"dev": "pnpm run stub && pnpm run play:dev",
|
||||
"stub": "unbuild --stub",
|
||||
"dev": "pnpm run stub",
|
||||
"stub": "unbuild",
|
||||
"build": "unbuild && pnpm run play:build",
|
||||
"play:dev": "vite",
|
||||
"play:build": "vite build",
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
],
|
||||
"scripts": {
|
||||
"dev": "pnpm run stub",
|
||||
"stub": "unbuild --stub",
|
||||
"stub": "unbuild",
|
||||
"build": "unbuild",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
|
||||
@@ -15,7 +15,25 @@ import IconItem from './IconItem.vue'
|
||||
id="global"
|
||||
title="IconItem"
|
||||
>
|
||||
<IconItem title="Modules" description="Thinking, vision, speech synthesis, gaming, etc." icon="i-lucide:blocks" to="/settings/modules" />
|
||||
<IconItem
|
||||
title="Modules"
|
||||
description="Thinking, vision, speech synthesis, gaming, etc."
|
||||
icon="i-lucide:blocks"
|
||||
to="/settings/modules"
|
||||
/>
|
||||
</Variant>
|
||||
|
||||
<Variant
|
||||
id="global-hover"
|
||||
title="IconItem"
|
||||
>
|
||||
<IconItem
|
||||
title="Modules"
|
||||
description="Thinking, vision, speech synthesis, gaming, etc."
|
||||
icon="i-lucide:blocks"
|
||||
to="/settings/modules"
|
||||
class="_hover"
|
||||
/>
|
||||
</Variant>
|
||||
</Story>
|
||||
</template>
|
||||
|
||||
@@ -68,7 +68,8 @@ defineProps<{
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.menu-icon-item:hover::before {
|
||||
.menu-icon-item:hover::before,
|
||||
.menu-icon-item._hover::before {
|
||||
--at-apply: 'bg-gradient-to-r from-primary-500/20 via-primary-500/10 to-transparent dark:from-primary-400/20 dark:via-primary-400/10 dark:to-transparent';
|
||||
width: 85%;
|
||||
opacity: 1;
|
||||
@@ -87,31 +88,37 @@ defineProps<{
|
||||
transition: all 0.35s ease-in-out;
|
||||
}
|
||||
|
||||
.menu-icon-item:hover .menu-icon-item-title {
|
||||
.menu-icon-item:hover .menu-icon-item-title,
|
||||
.menu-icon-item._hover .menu-icon-item-title {
|
||||
--at-apply: text-primary-600;
|
||||
}
|
||||
|
||||
.menu-icon-item:hover .menu-icon-item-description {
|
||||
.menu-icon-item:hover .menu-icon-item-description,
|
||||
.menu-icon-item._hover .menu-icon-item-description {
|
||||
--at-apply: text-primary-600;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.menu-icon-item:hover .menu-icon-item-icon {
|
||||
.menu-icon-item:hover .menu-icon-item-icon,
|
||||
.menu-icon-item._hover .menu-icon-item-icon {
|
||||
--at-apply: text-primary-500;
|
||||
scale: 1.2;
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
.dark .menu-icon-item:hover .menu-icon-item-title {
|
||||
.dark .menu-icon-item:hover .menu-icon-item-title,
|
||||
.dark .menu-icon-item._hover .menu-icon-item-title {
|
||||
--at-apply: text-primary-300;
|
||||
}
|
||||
|
||||
.dark .menu-icon-item:hover .menu-icon-item-description {
|
||||
.dark .menu-icon-item:hover .menu-icon-item-description,
|
||||
.dark .menu-icon-item._hover .menu-icon-item-description {
|
||||
--at-apply: text-primary-300;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.dark .menu-icon-item:hover .menu-icon-item-icon {
|
||||
.dark .menu-icon-item:hover .menu-icon-item-icon,
|
||||
.dark .menu-icon-item._hover .menu-icon-item-icon {
|
||||
--at-apply: text-primary-400;
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
@@ -23,5 +23,46 @@ import IconStatusItem from './IconStatusItem.vue'
|
||||
:configured="false"
|
||||
/>
|
||||
</Variant>
|
||||
|
||||
<Variant
|
||||
id="global-configured"
|
||||
title="IconItem"
|
||||
>
|
||||
<IconStatusItem
|
||||
title="Title"
|
||||
description="Description"
|
||||
icon=" i-lucide:ghost"
|
||||
to="/"
|
||||
:configured="true"
|
||||
/>
|
||||
</Variant>
|
||||
|
||||
<Variant
|
||||
id="global-hover"
|
||||
title="IconItem"
|
||||
>
|
||||
<IconStatusItem
|
||||
title="Title"
|
||||
description="Description"
|
||||
icon=" i-lucide:ghost"
|
||||
to="/"
|
||||
:configured="false"
|
||||
class="_hover"
|
||||
/>
|
||||
</Variant>
|
||||
|
||||
<Variant
|
||||
id="global-hover-configured"
|
||||
title="IconItem"
|
||||
>
|
||||
<IconStatusItem
|
||||
title="Title"
|
||||
description="Description"
|
||||
icon=" i-lucide:ghost"
|
||||
to="/"
|
||||
:configured="true"
|
||||
class="_hover"
|
||||
/>
|
||||
</Variant>
|
||||
</Story>
|
||||
</template>
|
||||
|
||||
@@ -100,7 +100,8 @@ const props = defineProps<{
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.menu-icon-status-item:hover::before {
|
||||
.menu-icon-status-item:hover::before,
|
||||
.menu-icon-status-item._hover::before {
|
||||
--at-apply: 'bg-gradient-to-r from-primary-500/20 via-primary-500/10 to-transparent dark:from-primary-400/20 dark:via-primary-400/10 dark:to-transparent';
|
||||
width: 50%;
|
||||
opacity: 1;
|
||||
@@ -119,31 +120,37 @@ const props = defineProps<{
|
||||
transition: all 0.35s ease-in-out;
|
||||
}
|
||||
|
||||
.menu-icon-status-item:hover .menu-icon-status-item-title {
|
||||
.menu-icon-status-item:hover .menu-icon-status-item-title,
|
||||
.menu-icon-status-item._hover .menu-icon-status-item-title {
|
||||
--at-apply: text-primary-600;
|
||||
}
|
||||
|
||||
.menu-icon-status-item:hover .menu-icon-status-item-description {
|
||||
.menu-icon-status-item:hover .menu-icon-status-item-description,
|
||||
.menu-icon-status-item._hover .menu-icon-status-item-description {
|
||||
--at-apply: text-primary-600;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.menu-icon-status-item:hover .menu-icon-status-item-icon {
|
||||
.menu-icon-status-item:hover .menu-icon-status-item-icon,
|
||||
.menu-icon-status-item._hover .menu-icon-status-item-icon {
|
||||
--at-apply: text-primary-500;
|
||||
scale: 1.2;
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
.dark .menu-icon-status-item:hover .menu-icon-status-item-title {
|
||||
.dark .menu-icon-status-item:hover .menu-icon-status-item-title,
|
||||
.dark .menu-icon-status-item._hover .menu-icon-status-item-title {
|
||||
--at-apply: text-primary-300;
|
||||
}
|
||||
|
||||
.dark .menu-icon-status-item:hover .menu-icon-status-item-description {
|
||||
.dark .menu-icon-status-item:hover .menu-icon-status-item-description,
|
||||
.dark .menu-icon-status-item._hover .menu-icon-status-item-description {
|
||||
--at-apply: text-primary-300;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.dark .menu-icon-status-item:hover .menu-icon-status-item-icon {
|
||||
.dark .menu-icon-status-item:hover .menu-icon-status-item-icon,
|
||||
.dark .menu-icon-status-item._hover .menu-icon-status-item-icon {
|
||||
--at-apply: text-primary-400;
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
@@ -55,6 +55,23 @@ export default defineConfig({
|
||||
},
|
||||
}),
|
||||
presetScrollbar(),
|
||||
{
|
||||
name: 'story-mock-hover',
|
||||
variants: [
|
||||
(matcher) => {
|
||||
if (!matcher.includes('hover')) {
|
||||
return matcher
|
||||
}
|
||||
|
||||
return {
|
||||
matcher,
|
||||
selector: (s) => {
|
||||
return `${s}, ${s.replace(/:hover$/, '')}._hover`
|
||||
},
|
||||
}
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
transformers: [
|
||||
transformerDirectives({
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "pnpm run stub && pnpm run play:dev",
|
||||
"dev": "pnpm run stub",
|
||||
"stub": "unbuild --stub",
|
||||
"build": "unbuild && pnpm run play:build",
|
||||
"play:dev": "vite",
|
||||
|
||||
Reference in New Issue
Block a user