refactor(stage-web): split to use stage-ui component

This commit is contained in:
Neko Ayaka
2025-03-11 14:45:06 +08:00
parent 79456ddd38
commit 37755bf19e
11 changed files with 87 additions and 15 deletions
+1 -2
View File
@@ -1,12 +1,11 @@
<script setup lang="ts">
import { IconItem } from '@proj-airi/stage-ui/components'
import { useSettings } from '@proj-airi/stage-ui/stores'
import { useDark } from '@vueuse/core'
import { storeToRefs } from 'pinia'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import IconItem from '../../components/Menu/IconItem.vue'
const router = useRouter()
const { t } = useI18n()
const { language, disableTransitions } = storeToRefs(useSettings())
@@ -1,9 +1,8 @@
<script setup lang="ts">
import { IconStatusItem } from '@proj-airi/stage-ui/components'
import { computed } from 'vue'
import { useRouter } from 'vue-router'
import IconStatusItem from '../../../components/Menu/IconStatusItem.vue'
const router = useRouter()
interface Module {
@@ -1,10 +1,9 @@
<script setup lang="ts">
import { IconStatusItem } from '@proj-airi/stage-ui/components'
import { useProvidersStore } from '@proj-airi/stage-ui/stores'
import { storeToRefs } from 'pinia'
import { useRouter } from 'vue-router'
import IconStatusItem from '../../../components/Menu/IconStatusItem.vue'
const router = useRouter()
const providersStore = useProvidersStore()
const { allProvidersMetadata } = storeToRefs(providersStore)
@@ -48,13 +48,16 @@ function updateCustomInput(event: Event) {
<template>
<label
:key="id"
class="relative flex cursor-pointer items-start rounded-xl p-3 pr-[20px]"
class="form_radio-card-detail relative flex cursor-pointer items-start rounded-xl p-3 pr-[20px]"
transition="all duration-200 ease-in-out"
border="2 solid"
:class="[
modelValue === value
? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900'
: 'bg-white dark:bg-neutral-900/20 border-neutral-200 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30',
? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30'
: 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30',
modelValue === value
? 'form_radio-card-detail-active'
: '',
deprecated ? 'opacity-60' : '',
]"
>
@@ -161,3 +164,35 @@ function updateCustomInput(event: Event) {
</div>
</label>
</template>
<style scoped>
.form_radio-card-detail {
position: relative;
overflow: hidden;
}
.form_radio-card-detail::before {
--at-apply: 'bg-gradient-to-r from-primary-500/0 to-primary-500/0 dark:from-primary-400/0 dark:to-primary-400/0';
content: '';
position: absolute;
inset: 0;
z-index: 0;
width: 25%;
height: 100%;
transition: all 0.35s ease-in-out;
mask-image: linear-gradient(120deg, white 100%);
opacity: 0;
}
.form_radio-card-detail: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;
}
.form_radio-card-detail-active::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: 0.5;
}
</style>
@@ -17,12 +17,15 @@ defineEmits<{
<label
:key="id"
border="2px solid"
class="relative"
class="form_radio-card-simple relative"
transition="all duration-200 ease-in-out"
:class="[
modelValue === value
? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900'
: 'bg-white dark:bg-neutral-900/20 border-neutral-200 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30',
? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30'
: 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30',
modelValue === value
? 'form_radio-card-simple-active'
: '',
]"
flex="~ col"
block min-w-50 w-fit cursor-pointer items-start rounded-xl p-4 text-left
@@ -79,3 +82,35 @@ defineEmits<{
/>
</label>
</template>
<style scoped>
.form_radio-card-simple {
position: relative;
overflow: hidden;
}
.form_radio-card-simple::before {
--at-apply: 'bg-gradient-to-r from-primary-500/0 to-primary-500/0 dark:from-primary-400/0 dark:to-primary-400/0';
content: '';
position: absolute;
inset: 0;
z-index: 0;
width: 25%;
height: 100%;
transition: all 0.35s ease-in-out;
mask-image: linear-gradient(120deg, white 100%);
opacity: 0;
}
.form_radio-card-simple: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;
}
.form_radio-card-simple-active::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: 0.5;
}
</style>
@@ -0,0 +1,2 @@
export { default as RadioCardDetail } from './RadioCardDetail.vue'
export { default as RadioCardSimple } from './RadioCardSimple.vue'
@@ -0,0 +1,2 @@
export * from './Radio'
export { default as RadioCardDetailManySelect } from './RadioCardDetailManySelect.vue'
@@ -0,0 +1,2 @@
export { default as IconItem } from './IconItem.vue'
export { default as IconStatusItem } from './IconStatusItem.vue'
+2 -3
View File
@@ -1,10 +1,9 @@
export { default as BasicTextarea } from './BasicTextarea.vue'
export { default as Collapsable } from './Collapsable.vue'
export { default as RadioCardDetail } from './Form/Radio/RadioCardDetail.vue'
export { default as RadioCardSimple } from './Form/Radio/RadioCardSimple.vue'
export { default as RadioCardDetailManySelect } from './Form/RadioCardDetailManySelect.vue'
export * from './Form'
export { default as Live2DCanvas } from './Live2D/Canvas.vue'
export { default as Live2DModel } from './Live2D/Model.vue'
export * from './Menu'
export { default as SceneLive2D } from './Scenes/Live2D.vue'
export { default as SceneVRM } from './Scenes/VRM.vue'
export { default as TransitionVertical } from './TransitionVertical.vue'