fixes: PWA & interface on small screens (#2536)
* fix pwa icons * fix spacing and layouts for small screens * translate missing strings * Revert "translate missing strings" This reverts commit 150a961a0811cfe7d25f2dd8d79baf70f9a422ec. * fixes --------- Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
@ -180,8 +180,8 @@ export default defineComponent({
|
|||||||
align-self: start !important;
|
align-self: start !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flat {
|
.flat, .theme--dark .flat {
|
||||||
box-shadow: none!important;
|
box-shadow: none!important;
|
||||||
background-color: transparent;
|
background-color: transparent!important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
:href="recipe.orgURL"
|
:href="recipe.orgURL"
|
||||||
color="secondary darken-1"
|
color="secondary darken-1"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
class="rounded-sm mr-4"
|
class="rounded-sm mr-n2"
|
||||||
>
|
>
|
||||||
{{ $t("recipe.original-url") }}
|
{{ $t("recipe.original-url") }}
|
||||||
</v-btn>
|
</v-btn>
|
||||||
|
@ -26,11 +26,12 @@
|
|||||||
</TransitionGroup>
|
</TransitionGroup>
|
||||||
</draggable>
|
</draggable>
|
||||||
<v-skeleton-loader v-else boilerplate elevation="2" type="list-item"> </v-skeleton-loader>
|
<v-skeleton-loader v-else boilerplate elevation="2" type="list-item"> </v-skeleton-loader>
|
||||||
<div class="d-flex justify-end mt-2">
|
<div class="d-flex flex-wrap justify-center justify-sm-end mt-2">
|
||||||
<v-tooltip top color="accent">
|
<v-tooltip top color="accent">
|
||||||
<template #activator="{ on, attrs }">
|
<template #activator="{ on, attrs }">
|
||||||
<span v-on="on">
|
<span v-on="on">
|
||||||
<BaseButton
|
<BaseButton
|
||||||
|
class="mb-1"
|
||||||
:disabled="recipe.settings.disableAmount || hasFoodOrUnit"
|
:disabled="recipe.settings.disableAmount || hasFoodOrUnit"
|
||||||
color="accent"
|
color="accent"
|
||||||
:to="`${recipe.slug}/ingredient-parser`"
|
:to="`${recipe.slug}/ingredient-parser`"
|
||||||
@ -45,8 +46,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<span>{{ parserToolTip }}</span>
|
<span>{{ parserToolTip }}</span>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
<RecipeDialogBulkAdd class="ml-1 mr-1" @bulk-data="addIngredient" />
|
<RecipeDialogBulkAdd class="mx-1 mb-1" @bulk-data="addIngredient" />
|
||||||
<BaseButton @click="addIngredient"> {{ $t("general.new") }} </BaseButton>
|
<BaseButton class="mb-1" @click="addIngredient" > {{ $t("general.new") }} </BaseButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -108,7 +108,7 @@
|
|||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
<v-hover v-slot="{ hover }">
|
<v-hover v-slot="{ hover }">
|
||||||
<v-card
|
<v-card
|
||||||
class="ma-1"
|
class="my-3"
|
||||||
:class="[{ 'on-hover': hover }, isChecked(index)]"
|
:class="[{ 'on-hover': hover }, isChecked(index)]"
|
||||||
:elevation="hover ? 12 : 2"
|
:elevation="hover ? 12 : 2"
|
||||||
:ripple="false"
|
:ripple="false"
|
||||||
|
@ -26,7 +26,12 @@ export default {
|
|||||||
content: "Mealie is a recipe management app for your kitchen.",
|
content: "Mealie is a recipe management app for your kitchen.",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" }],
|
link: [
|
||||||
|
{ hid: "favicon", rel: "icon", type: "image/x-icon", href: "/favicon.ico", "data-n-head": "ssr" },
|
||||||
|
{ hid: "shortcut icon", rel: "shortcut icon", type: "image/png", href: "/icons/icon-x64.png", "data-n-head": "ssr" },
|
||||||
|
{ hid: "apple-touch-icon", rel: "apple-touch-icon", type: "image/png", href: "/icons/apple-touch-icon.png", "data-n-head": "ssr" },
|
||||||
|
{ hid: "mask-icon", rel: "mask-icon", href: "/icons/safari-pinned-tab.svg", "data-n-head": "ssr" }
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
env: {
|
env: {
|
||||||
@ -324,7 +329,7 @@ export default {
|
|||||||
/* meta options */
|
/* meta options */
|
||||||
name: "Mealie",
|
name: "Mealie",
|
||||||
description: "Mealie is a recipe management and meal planning app",
|
description: "Mealie is a recipe management and meal planning app",
|
||||||
theme_color: "#E58325",
|
theme_color: process.env.THEME_LIGHT_PRIMARY || "#E58325",
|
||||||
ogSiteName: "Mealie",
|
ogSiteName: "Mealie",
|
||||||
},
|
},
|
||||||
manifest: {
|
manifest: {
|
||||||
@ -332,43 +337,46 @@ export default {
|
|||||||
lang: "en",
|
lang: "en",
|
||||||
name: "Mealie",
|
name: "Mealie",
|
||||||
short_name: "Mealie",
|
short_name: "Mealie",
|
||||||
title: "Mealie",
|
description: "Mealie is a recipe management and meal planning app",
|
||||||
|
theme_color: process.env.THEME_LIGHT_PRIMARY || "#E58325",
|
||||||
background_color: "#FFFFFF",
|
background_color: "#FFFFFF",
|
||||||
|
display: "standalone",
|
||||||
share_target: {
|
share_target: {
|
||||||
action: "/",
|
action: "/recipe/create/url",
|
||||||
method: "GET",
|
method: "GET",
|
||||||
|
enctype: "application/x-www-form-urlencoded",
|
||||||
params: {
|
params: {
|
||||||
title: "title",
|
url: "recipe_import_url",
|
||||||
text: "recipe_import_url",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: "/icons/android-chrome-192x192.png",
|
||||||
|
sizes: "192x192",
|
||||||
|
type: "image/png",
|
||||||
|
purpose: "any",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "/icons/android-chrome-512x512.png",
|
||||||
|
sizes: "512x512",
|
||||||
|
type: "image/png",
|
||||||
|
purpose: "any",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "/icons/android-chrome-maskable-192x192.png",
|
||||||
|
sizes: "192x192",
|
||||||
|
type: "image/png",
|
||||||
|
purpose: "maskable",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "/icons/android-chrome-maskable-512x512.png",
|
||||||
|
sizes: "512x512",
|
||||||
|
type: "image/png",
|
||||||
|
purpose: "maskable",
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
icons: [
|
icon: false, // disables the icon module
|
||||||
{
|
|
||||||
src: "[srcDir]/[staticDir]/icons/android-chrome-192x192.png",
|
|
||||||
sizes: "192x192",
|
|
||||||
type: "image/png",
|
|
||||||
purpose: "any",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: "[srcDir]/[staticDir]/icons/android-chrome-512x512.png",
|
|
||||||
sizes: "512x512",
|
|
||||||
type: "image/png",
|
|
||||||
purpose: "any",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: "[srcDir]/[staticDir]/icons/android-chrome-maskable-192x192.png",
|
|
||||||
sizes: "192x192",
|
|
||||||
type: "image/png",
|
|
||||||
purpose: "maskable",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: "[srcDir]/[staticDir]/icons/android-chrome-maskable-512x512.png",
|
|
||||||
sizes: "512x512",
|
|
||||||
type: "image/png",
|
|
||||||
purpose: "maskable",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
|
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
|
||||||
|
@ -104,8 +104,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<v-container class="mt-4 d-flex justify-end">
|
<v-container class="mt-4 d-flex justify-center text-center">
|
||||||
<v-btn outlined rounded to="/group/migrations"> {{ $t('recipe.looking-for-migrations') }} </v-btn>
|
<nuxt-link to="/group/migrations"> {{ $t('recipe.looking-for-migrations') }} </nuxt-link>
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
@ -13,10 +13,10 @@
|
|||||||
<b>{{ $t('group.invite') }}</b>
|
<b>{{ $t('group.invite') }}</b>
|
||||||
</template>
|
</template>
|
||||||
</i18n>
|
</i18n>
|
||||||
</BasePageTitle>
|
<v-container class="mt-1 px-0">
|
||||||
<v-container class="mt-4 d-flex justify-start">
|
<nuxt-link class="text-center" to="/user/profile/edit"> {{ $t('group.looking-to-update-your-profile') }} </nuxt-link>
|
||||||
<v-btn outlined rounded to="/user/profile/edit"> {{ $t('group.looking-to-update-your-profile') }} </v-btn>
|
</v-container>
|
||||||
</v-container>
|
</BasePageTitle>
|
||||||
<v-data-table
|
<v-data-table
|
||||||
:headers="headers"
|
:headers="headers"
|
||||||
:items="members || []"
|
:items="members || []"
|
||||||
|
@ -25,13 +25,13 @@
|
|||||||
<template #title> {{ $t("events.event-notifiers") }} </template>
|
<template #title> {{ $t("events.event-notifiers") }} </template>
|
||||||
{{ $t("events.new-notification-form-description") }}
|
{{ $t("events.new-notification-form-description") }}
|
||||||
|
|
||||||
<div class="mt-3 d-flex justify-space-around">
|
<div class="mt-3 d-flex flex-wrap justify-space-between mx-n2">
|
||||||
<a href="https://github.com/caronc/apprise/wiki" target="_blanks"> Apprise </a>
|
<a href="https://github.com/caronc/apprise/wiki" target="_blanks" class="mx-2"> Apprise </a>
|
||||||
<a href="https://github.com/caronc/apprise/wiki/Notify_gotify" target="_blanks"> Gotify </a>
|
<a href="https://github.com/caronc/apprise/wiki/Notify_gotify" target="_blanks" class="mx-2"> Gotify </a>
|
||||||
<a href="https://github.com/caronc/apprise/wiki/Notify_discord" target="_blanks"> Discord </a>
|
<a href="https://github.com/caronc/apprise/wiki/Notify_discord" target="_blanks" class="mx-2"> Discord </a>
|
||||||
<a href="https://github.com/caronc/apprise/wiki/Notify_homeassistant" target="_blanks"> Home Assistant </a>
|
<a href="https://github.com/caronc/apprise/wiki/Notify_homeassistant" target="_blanks" class="mx-2"> Home Assistant </a>
|
||||||
<a href="https://github.com/caronc/apprise/wiki/Notify_matrix" target="_blanks"> Matrix </a>
|
<a href="https://github.com/caronc/apprise/wiki/Notify_matrix" target="_blanks" class="mx-2"> Matrix </a>
|
||||||
<a href="https://github.com/caronc/apprise/wiki/Notify_pushover" target="_blanks"> Pushover </a>
|
<a href="https://github.com/caronc/apprise/wiki/Notify_pushover" target="_blanks" class="mx-2"> Pushover </a>
|
||||||
</div>
|
</div>
|
||||||
</BasePageTitle>
|
</BasePageTitle>
|
||||||
|
|
||||||
|
@ -60,14 +60,12 @@
|
|||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
</v-form>
|
</v-form>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
<v-card-actions>
|
<v-card-actions class="d-flex justify-center flex-column flex-sm-row">
|
||||||
<v-btn v-if="allowSignup" text to="/register"> {{ $t("user.register") }} </v-btn>
|
<v-btn v-if="allowSignup" text to="/register"> {{ $t("user.register") }} </v-btn>
|
||||||
<v-btn v-else text disabled> {{ $t("user.invite-only") }} </v-btn>
|
<v-btn v-else text disabled> {{ $t("user.invite-only") }} </v-btn>
|
||||||
<v-btn class="mr-auto" text to="/forgot-password"> {{ $t("user.reset-password") }} </v-btn>
|
<v-btn class="mr-auto" text to="/forgot-password"> {{ $t("user.reset-password") }} </v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
||||||
<v-divider></v-divider>
|
|
||||||
|
|
||||||
<v-card-text class="d-flex justify-center flex-column flex-sm-row">
|
<v-card-text class="d-flex justify-center flex-column flex-sm-row">
|
||||||
<div
|
<div
|
||||||
v-for="link in [
|
v-for="link in [
|
||||||
@ -99,13 +97,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|
||||||
<v-btn bottom center class="mt-5" @click="toggleDark">
|
|
||||||
<v-icon left>
|
|
||||||
{{ $vuetify.theme.dark ? $globals.icons.weatherSunny : $globals.icons.weatherNight }}
|
|
||||||
</v-icon>
|
|
||||||
{{ $vuetify.theme.dark ? $t('settings.theme.light-mode') : $t('settings.theme.dark-mode') }}
|
|
||||||
</v-btn>
|
|
||||||
</v-container>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -115,12 +106,11 @@ import { useDark, whenever } from "@vueuse/core";
|
|||||||
import { useAppInfo } from "~/composables/api";
|
import { useAppInfo } from "~/composables/api";
|
||||||
import { usePasswordField } from "~/composables/use-passwords";
|
import { usePasswordField } from "~/composables/use-passwords";
|
||||||
import { alert } from "~/composables/use-toast";
|
import { alert } from "~/composables/use-toast";
|
||||||
import { useToggleDarkMode } from "~/composables/use-utils";
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
layout: "blank",
|
layout: "blank",
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const toggleDark = useToggleDarkMode();
|
|
||||||
const isDark = useDark();
|
const isDark = useDark();
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@ -186,7 +176,6 @@ export default defineComponent({
|
|||||||
loggingIn,
|
loggingIn,
|
||||||
allowSignup,
|
allowSignup,
|
||||||
authenticate,
|
authenticate,
|
||||||
toggleDark,
|
|
||||||
passwordIcon,
|
passwordIcon,
|
||||||
inputType,
|
inputType,
|
||||||
togglePasswordShow,
|
togglePasswordShow,
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
</v-container>
|
</v-container>
|
||||||
|
|
||||||
<AdvancedOnly>
|
<AdvancedOnly>
|
||||||
<v-container class="d-flex justify-end">
|
<v-container class="d-flex justify-center align-center my-4">
|
||||||
<v-btn outlined rounded to="/group/migrations"> {{ $t('recipe.looking-for-migrations') }}</v-btn>
|
<a to="/group/migrations"> {{ $t('recipe.looking-for-migrations') }}</a>
|
||||||
</v-container>
|
</v-container>
|
||||||
</AdvancedOnly>
|
</AdvancedOnly>
|
||||||
</div>
|
</div>
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</template>
|
</template>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-card-actions class="justify-end">
|
<v-card-actions class="justify-end flex-wrap mb-1">
|
||||||
<BaseButton
|
<BaseButton
|
||||||
delete
|
delete
|
||||||
@click="
|
@click="
|
||||||
@ -76,11 +76,11 @@
|
|||||||
Clear
|
Clear
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<BaseButton class="mr-1" color="info" @click="bulkUrls.push({ url: '', categories: [], tags: [] })">
|
<BaseButton class="mr-1 mb-1" color="info" @click="bulkUrls.push({ url: '', categories: [], tags: [] })">
|
||||||
<template #icon> {{ $globals.icons.createAlt }} </template>
|
<template #icon> {{ $globals.icons.createAlt }} </template>
|
||||||
New
|
{{ $t('general.new') }}
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
<RecipeDialogBulkAdd v-model="bulkDialog" @bulk-data="assignUrls" />
|
<RecipeDialogBulkAdd v-model="bulkDialog" class="mr-1 mr-sm-0 mb-1" @bulk-data="assignUrls" />
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
<div class="px-1">
|
<div class="px-1">
|
||||||
<v-checkbox v-model="showCatTags" hide-details :label="$t('recipe.set-categories-and-tags')" />
|
<v-checkbox v-model="showCatTags" hide-details :label="$t('recipe.set-categories-and-tags')" />
|
||||||
|
@ -43,9 +43,9 @@
|
|||||||
</v-card>
|
</v-card>
|
||||||
</section>
|
</section>
|
||||||
<BaseCardSectionTitle class="mt-10" title="Active Tokens"> </BaseCardSectionTitle>
|
<BaseCardSectionTitle class="mt-10" title="Active Tokens"> </BaseCardSectionTitle>
|
||||||
<section class="d-flex flex-column align-center justify-center">
|
<section class="d-flex flex-column">
|
||||||
<div v-for="(token, index) in $auth.user.tokens" :key="index" class="d-flex my-2">
|
<div v-for="(token, index) in $auth.user.tokens" :key="index">
|
||||||
<v-card outlined width="500px">
|
<v-card outlined class="mb-2">
|
||||||
<v-list-item>
|
<v-list-item>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title>
|
<v-list-item-title>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #title> Your Profile Settings </template>
|
<template #title> {{ $t("profile.user-settings") }} </template>
|
||||||
</BasePageTitle>
|
</BasePageTitle>
|
||||||
|
|
||||||
<section class="mt-5">
|
<section class="mt-5">
|
||||||
@ -108,6 +108,7 @@
|
|||||||
:label="$t('profile.show-advanced-description')"
|
:label="$t('profile.show-advanced-description')"
|
||||||
@change="updateUser"
|
@change="updateUser"
|
||||||
></v-checkbox>
|
></v-checkbox>
|
||||||
|
<nuxt-link class="mt-5 d-flex flex-column justify-center text-center" to="/group"> {{ $t('profile.looking-for-privacy-settings') }} </nuxt-link>
|
||||||
<div class="d-flex flex-wrap justify-center mt-5">
|
<div class="d-flex flex-wrap justify-center mt-5">
|
||||||
<v-btn outlined class="rounded-xl my-1 mx-1" to="/user/profile" nuxt exact>
|
<v-btn outlined class="rounded-xl my-1 mx-1" to="/user/profile" nuxt exact>
|
||||||
<v-icon left>
|
<v-icon left>
|
||||||
@ -115,7 +116,6 @@
|
|||||||
</v-icon>
|
</v-icon>
|
||||||
{{ $t('profile.back-to-profile') }}
|
{{ $t('profile.back-to-profile') }}
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-btn outlined class="rounded-xl my-1 mx-1" to="/group"> {{ $t('profile.looking-for-privacy-settings') }} </v-btn>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</v-container>
|
</v-container>
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-container v-if="user">
|
<v-container v-if="user">
|
||||||
<section class="d-flex flex-column align-center">
|
<section class="d-flex flex-column align-center mt-4">
|
||||||
<UserAvatar size="84" :user-id="$auth.user.id" />
|
<UserAvatar size="96" :user-id="$auth.user.id" />
|
||||||
|
|
||||||
<h2 class="headline">{{ $t('profile.welcome-user', [user.fullName]) }}</h2>
|
<h2 class="headline">{{ $t('profile.welcome-user', [user.fullName]) }}</h2>
|
||||||
<p class="subtitle-1 mb-0">
|
<p class="subtitle-1 mb-0 text-center">
|
||||||
{{ $t('profile.description') }}
|
{{ $t('profile.description') }}
|
||||||
<a href="https://hay-kot.github.io/mealie/" target="_blank"> {{ $t('general.learn-more') }} </a>
|
<a href="https://hay-kot.github.io/mealie/" target="_blank"> {{ $t('general.learn-more') }} </a>
|
||||||
</p>
|
</p>
|
||||||
<v-card flat color="background" width="100%" max-width="600px">
|
<v-card flat color="background" width="100%" max-width="600px">
|
||||||
<v-card-actions class="d-flex justify-center">
|
<v-card-actions class="d-flex justify-center my-4">
|
||||||
<v-btn v-if="$auth.user.canInvite" outlined rounded @click="getSignupLink()">
|
<v-btn v-if="$auth.user.canInvite" outlined rounded @click="getSignupLink()">
|
||||||
<v-icon left>
|
<v-icon left>
|
||||||
{{ $globals.icons.createAlt }}
|
{{ $globals.icons.createAlt }}
|
||||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 13 KiB |
BIN
frontend/static/icons/icon-x64.png
Normal file
After Width: | Height: | Size: 11 KiB |