diff --git a/web/public/favicon-badge.svg b/web/public/favicon-badge.svg index 039448d..68bda20 100644 --- a/web/public/favicon-badge.svg +++ b/web/public/favicon-badge.svg @@ -1,6 +1,6 @@ KYCnot.me logo with badge - + KYCnot.me logo with badge - + + KYCnot.me logo with badge + + + + \ No newline at end of file diff --git a/web/public/favicon-dev-lightmode.svg b/web/public/favicon-dev-lightmode.svg new file mode 100644 index 0000000..9825cc5 --- /dev/null +++ b/web/public/favicon-dev-lightmode.svg @@ -0,0 +1,7 @@ + + KYCnot.me logo + + + \ No newline at end of file diff --git a/web/public/favicon-stage-badge.svg b/web/public/favicon-stage-badge.svg index e67d915..3d82459 100644 --- a/web/public/favicon-stage-badge.svg +++ b/web/public/favicon-stage-badge.svg @@ -1,13 +1,6 @@ KYCnot.me logo with badge - - + + KYCnot.me logo with badge + + + + \ No newline at end of file diff --git a/web/public/favicon-stage-lightmode.svg b/web/public/favicon-stage-lightmode.svg new file mode 100644 index 0000000..8abf112 --- /dev/null +++ b/web/public/favicon-stage-lightmode.svg @@ -0,0 +1,7 @@ + + KYCnot.me logo + + + \ No newline at end of file diff --git a/web/public/favicon-stage.svg b/web/public/favicon-stage.svg index 281d5bb..862ef78 100644 --- a/web/public/favicon-stage.svg +++ b/web/public/favicon-stage.svg @@ -1,18 +1,7 @@ KYCnot.me logo - - \ No newline at end of file diff --git a/web/src/actions/admin/service.ts b/web/src/actions/admin/service.ts index 73a3011..9cd6956 100644 --- a/web/src/actions/admin/service.ts +++ b/web/src/actions/admin/service.ts @@ -307,7 +307,7 @@ export const adminServiceActions = { input: z.object({ id: z.number().int().positive(), label: z.string().min(1).max(50).nullable(), - value: z.string().url(), + value: zodContactMethod, serviceId: z.number().int().positive(), }), handler: async (input) => { diff --git a/web/src/components/BaseHead.astro b/web/src/components/BaseHead.astro index 989c633..68c926d 100644 --- a/web/src/components/BaseHead.astro +++ b/web/src/components/BaseHead.astro @@ -100,7 +100,7 @@ const ogImageUrl = makeOgImageUrl(ogImage, Astro.url) {pwaAssetsHead.themeColor && } -{pwaAssetsHead.links.map((link) => )} +{pwaAssetsHead.links.filter((link) => link.rel !== 'icon').map((link) => )} {pwaInfo && } diff --git a/web/src/components/DynamicFavicon.astro b/web/src/components/DynamicFavicon.astro index 0cce79d..ce83d40 100644 --- a/web/src/components/DynamicFavicon.astro +++ b/web/src/components/DynamicFavicon.astro @@ -25,10 +25,11 @@ function addBadgeIfUnread(href: string) { { DEPLOYMENT_MODE === 'production' && ( <> - + @@ -37,12 +38,30 @@ function addBadgeIfUnread(href: string) { } { DEPLOYMENT_MODE === 'development' && ( - + <> + + + ) } { DEPLOYMENT_MODE === 'staging' && ( - + <> + + + ) } diff --git a/web/src/lib/zodUtils.ts b/web/src/lib/zodUtils.ts index fdf322d..49946a5 100644 --- a/web/src/lib/zodUtils.ts +++ b/web/src/lib/zodUtils.ts @@ -21,7 +21,7 @@ const cleanUrl = (input: unknown) => { export const zodUrlOptionalProtocol = z.preprocess( cleanUrl, - z.string().refine((value) => /^(https?):\/\/(?=.*\.[a-z0-9]{2,})[^\s$.?#].[^\s]*$/i.test(value), { + z.string().refine((value) => /^(https?:\/\/)?[a-z0-9]+(\.[a-z0-9])*(\.[a-z0-9]{2,}).*$/i.test(value), { message: 'Invalid URL', }) ) @@ -42,7 +42,7 @@ export const zodContactMethod = z.preprocess( .trim() .refine( (value) => - /^((https?):\/\/(?=.*\.[a-z0-9]{2,})[^\s$.?#].[^\s]|([\d\s+\-_/()[\]*#.,]|ext|x){7,}|[0-9\s+-_\\/()[\]*#.]|[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})*$/i.test( + /^((https?:\/\/)?[a-z0-9]+(\.[a-z0-9])*(\.[a-z0-9]{2,}).*|([\d\s+\-_/()[\]*#.,]|ext|x){7,}|[0-9\s+-_\\/()[\]*#.]|[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})*$/i.test( value ), { diff --git a/web/src/pages/admin/services/[slug]/edit.astro b/web/src/pages/admin/services/[slug]/edit.astro index a29fac2..fabd195 100644 --- a/web/src/pages/admin/services/[slug]/edit.astro +++ b/web/src/pages/admin/services/[slug]/edit.astro @@ -1141,8 +1141,21 @@ const apiCalls = await Astro.locals.banners.try( type.labelPlural).join(', ')}`} + name="value" + inputProps={{ + required: true, + value: method.value, + placeholder: 'contact@example.com', + }} + error={contactMethodUpdateInputErrors.value} + /> + + - - @@ -1174,8 +1177,6 @@ const apiCalls = await Astro.locals.banners.try(
- - type.labelPlural).join(', ')}`} @@ -1187,6 +1188,13 @@ const apiCalls = await Astro.locals.banners.try( error={contactMethodAddInputErrors.value} /> + +