diff --git a/apps/stage-tamagotchi/src/pages/settings/appearance/general.vue b/apps/stage-tamagotchi/src/pages/settings/appearance/general.vue index a64eb33e6..84f8412a6 100644 --- a/apps/stage-tamagotchi/src/pages/settings/appearance/general.vue +++ b/apps/stage-tamagotchi/src/pages/settings/appearance/general.vue @@ -1,15 +1,24 @@ @@ -39,6 +48,7 @@ const dark = useDark() - - - - {{ value ? $t(`settings.language.${value}`) : t('settings.language.english') }} - - - - - {{ $t('settings.language.english') }} - - - {{ $t('settings.language.chinese') }} - - - - + :options="languages" + /> { if (!region.value) { region.value = 'eastasia' // Default region } + if (!providers.value[providerId]?.region) { + if (!providers.value[providerId]) + providers.value[providerId] = { region: region.value } + else + providers.value[providerId].region = region.value + } await speechStore.loadVoicesForProvider(providerId) }) diff --git a/apps/stage-web/src/pages/settings/appearance/general.vue b/apps/stage-web/src/pages/settings/appearance/general.vue index 0320d7ccb..a0bc33d28 100644 --- a/apps/stage-web/src/pages/settings/appearance/general.vue +++ b/apps/stage-web/src/pages/settings/appearance/general.vue @@ -1,13 +1,21 @@ @@ -26,6 +34,7 @@ const dark = useDark() - - - - {{ value ? $t(`settings.language.${value}`) : t('settings.language.english') }} - - - - - {{ $t('settings.language.english') }} - - - {{ $t('settings.language.chinese') }} - - - - + :options="languages" + /> { if (!region.value) { region.value = 'eastasia' // Default region } + if (!providers.value[providerId]?.region) { + if (!providers.value[providerId]) + providers.value[providerId] = { region: region.value } + else + providers.value[providerId].region = region.value + } await speechStore.loadVoicesForProvider(providerId) }) diff --git a/packages/stage-ui/src/components/Scenes/Live2D/Model.vue b/packages/stage-ui/src/components/Scenes/Live2D/Model.vue index 3537590fb..23baaa8c4 100644 --- a/packages/stage-ui/src/components/Scenes/Live2D/Model.vue +++ b/packages/stage-ui/src/components/Scenes/Live2D/Model.vue @@ -253,6 +253,12 @@ watch(dark, updateDropShadowFilter, { immediate: true }) watch([model, themeColorsHue], updateDropShadowFilter) watch(offset, setScaleAndPosition) watch(() => props.scale, setScaleAndPosition) +watch(modelFile, () => { + if (modelFile.value) { + loadingModel.value = true + loadModel() + } +}, { immediate: true }) // TODO: This is hacky! function updateDropShadowFilterLoop() { diff --git a/packages/ui/src/components/Form/Combobox/Combobox.vue b/packages/ui/src/components/Form/Combobox/Combobox.vue new file mode 100644 index 000000000..db21600cc --- /dev/null +++ b/packages/ui/src/components/Form/Combobox/Combobox.vue @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + {{ group.groupLabel }} + + + + + + + + {{ option.label }} + + + + + + + + diff --git a/packages/ui/src/components/Form/Combobox/index.ts b/packages/ui/src/components/Form/Combobox/index.ts new file mode 100644 index 000000000..8b9efb229 --- /dev/null +++ b/packages/ui/src/components/Form/Combobox/index.ts @@ -0,0 +1 @@ +export { default as Combobox } from './Combobox.vue' diff --git a/packages/ui/src/components/Form/Field/FieldSelect.vue b/packages/ui/src/components/Form/Field/FieldSelect.vue index be5da634c..4a1b39958 100644 --- a/packages/ui/src/components/Form/Field/FieldSelect.vue +++ b/packages/ui/src/components/Form/Field/FieldSelect.vue @@ -1,14 +1,17 @@ @@ -39,6 +42,7 @@ const modelValue = defineModel({ required: false }) :placeholder="props.placeholder" :disabled="props.disabled" :title="label" + :class="props.selectClass" > {{ props.options?.find(option => option.value === value)?.label || props.placeholder }} diff --git a/packages/ui/src/components/Form/Select/Select.vue b/packages/ui/src/components/Form/Select/Select.vue index 6adcf89d2..f8b72f246 100644 --- a/packages/ui/src/components/Form/Select/Select.vue +++ b/packages/ui/src/components/Form/Select/Select.vue @@ -1,8 +1,7 @@ - - - - - {{ props.options?.find(item => item.value === modelValue)?.label || modelValue }} - - - - - - - - - - - - - - No data - - - - - + - - diff --git a/packages/ui/src/components/Form/index.ts b/packages/ui/src/components/Form/index.ts index ece7a7393..e3f4b0228 100644 --- a/packages/ui/src/components/Form/index.ts +++ b/packages/ui/src/components/Form/index.ts @@ -1,4 +1,5 @@ export * from './Checkbox' +export * from './Combobox' export * from './Field' export * from './Input' export * from './Radio' diff --git a/uno.config.ts b/uno.config.ts index a67a63ca2..2282ead38 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -189,6 +189,32 @@ export function sharedUnoConfig() { } }], ], + theme: { + /** + * https://github.com/unocss/unocss/blob/1031312057a3bea1082b7d938eb2ad640f57613a/packages-presets/preset-wind4/src/theme/animate.ts + * https://unocss.dev/presets/wind4#transformdirectives + */ + animation: { + keyframes: { + slideUpAndFade: '{from{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}', + slideRightAndFade: '{from{opacity:0;transform:translateX(-2px)}to{opacity:1;transform:translateX(0)}}', + slideDownAndFade: '{from{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}', + slideLeftAndFade: '{from{opacity:0;transform:translateX(2px)}to{opacity:1;transform:translateX(0)}}', + }, + durations: { + slideUpAndFade: '400ms', + slideRightAndFade: '400ms', + slideDownAndFade: '400ms', + slideLeftAndFade: '400ms', + }, + timingFns: { + slideUpAndFade: 'cubic-bezier(0.16, 1, 0.3, 1)', + slideRightAndFade: 'cubic-bezier(0.16, 1, 0.3, 1)', + slideDownAndFade: 'cubic-bezier(0.16, 1, 0.3, 1)', + slideLeftAndFade: 'cubic-bezier(0.16, 1, 0.3, 1)', + }, + }, + }, }) }
- No data -