From 688e3023924ecf514574e79bc067dcc5fce3b52a Mon Sep 17 00:00:00 2001 From: bniwredyc Date: Thu, 9 Feb 2023 23:39:52 +0100 Subject: [PATCH] snackbar --- package.json | 1 + src/components/Nav/Header.module.scss | 1 - src/components/Nav/Header.tsx | 2 + src/components/Nav/Snackbar.module.scss | 23 +++ src/components/Nav/Snackbar.tsx | 27 +++ .../Pages/profile/ProfileSettingsPage.tsx | 21 +- src/components/Root.tsx | 9 +- src/context/profile.tsx | 14 +- src/context/snackbar.tsx | 79 ++++++++ src/locales/ru.json | 4 +- src/utils/delay.ts | 1 + yarn.lock | 186 +++++++++++------- 12 files changed, 280 insertions(+), 88 deletions(-) create mode 100644 src/components/Nav/Snackbar.module.scss create mode 100644 src/components/Nav/Snackbar.tsx create mode 100644 src/context/snackbar.tsx create mode 100644 src/utils/delay.ts diff --git a/package.json b/package.json index 8c0a5f9b..40d5c1cd 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,7 @@ "rollup-plugin-visualizer": "^5.9.0", "sass": "1.32.13", "solid-js": "^1.6.9", + "solid-transition-group": "^0.0.13", "sort-package-json": "^2.3.0", "stylelint": "^14.16.1", "stylelint-config-css-modules": "^4.1.0", diff --git a/src/components/Nav/Header.module.scss b/src/components/Nav/Header.module.scss index b4dab49b..04e5ea63 100644 --- a/src/components/Nav/Header.module.scss +++ b/src/components/Nav/Header.module.scss @@ -53,7 +53,6 @@ .headerInner { align-items: center; background: #fff; - border-bottom: 4px solid #000; flex-wrap: nowrap; justify-content: space-between; margin: 0; diff --git a/src/components/Nav/Header.tsx b/src/components/Nav/Header.tsx index 0f2877d3..ce2e576e 100644 --- a/src/components/Nav/Header.tsx +++ b/src/components/Nav/Header.tsx @@ -11,6 +11,7 @@ import { clsx } from 'clsx' import { HeaderAuth } from './HeaderAuth' import { getShareUrl, SharePopup } from '../Article/SharePopup' import { getDescription } from '../../utils/meta' +import { Snackbar } from './Snackbar' const resources: { name: string; route: keyof Routes }[] = [ { name: t('zine'), route: 'home' }, @@ -153,6 +154,7 @@ export const Header = (props: Props) => { + ) diff --git a/src/components/Nav/Snackbar.module.scss b/src/components/Nav/Snackbar.module.scss new file mode 100644 index 00000000..cfe8aa72 --- /dev/null +++ b/src/components/Nav/Snackbar.module.scss @@ -0,0 +1,23 @@ +.snackbar { + min-height: 4px; + background-color: #141414; + color: #ffffff; + transition: background-color 0.3s; + + &.error { + background-color: #d00820; + } +} +.content { + transition: height 0.3s, color 0.3s; + height: 60px; + display: flex; + align-items: center; + justify-content: center; + + &.enter, + &.exitTo { + height: 0; + color: transparent; + } +} diff --git a/src/components/Nav/Snackbar.tsx b/src/components/Nav/Snackbar.tsx new file mode 100644 index 00000000..bf2113a0 --- /dev/null +++ b/src/components/Nav/Snackbar.tsx @@ -0,0 +1,27 @@ +import { Show } from 'solid-js' +import { useSnackbar } from '../../context/snackbar' +import styles from './Snackbar.module.scss' +import { Transition } from 'solid-transition-group' +import { clsx } from 'clsx' + +export const Snackbar = () => { + const { snackbarMessage } = useSnackbar() + + return ( +
+ setTimeout(() => done(), 300)} + > + +
{snackbarMessage().body}
+
+
+
+ ) +} diff --git a/src/components/Pages/profile/ProfileSettingsPage.tsx b/src/components/Pages/profile/ProfileSettingsPage.tsx index eab8fc6f..6645d06f 100644 --- a/src/components/Pages/profile/ProfileSettingsPage.tsx +++ b/src/components/Pages/profile/ProfileSettingsPage.tsx @@ -1,9 +1,8 @@ import { PageWrap } from '../../_shared/PageWrap' import { t } from '../../../utils/intl' -import type { PageProps } from '../../types' import { Icon } from '../../_shared/Icon' import ProfileSettingsNavigation from '../../Discours/ProfileSettingsNavigation' -import { For, createSignal, Show, onMount } from 'solid-js' +import { For, createSignal, Show, onMount, createEffect } from 'solid-js' import { clsx } from 'clsx' import styles from './Settings.module.scss' import { useProfileForm } from '../../../context/profile' @@ -12,12 +11,18 @@ import { createFileUploader, UploadFile } from '@solid-primitives/upload' import { Loading } from '../../Loading' import { useSession } from '../../../context/session' import Button from '../../_shared/Button' +import { useSnackbar } from '../../../context/snackbar' export const ProfileSettingsPage = () => { const [addLinkForm, setAddLinkForm] = createSignal(false) const [incorrectUrl, setIncorrectUrl] = createSignal(false) const [isSubmitting, setIsSubmitting] = createSignal(false) const [isUserpicUpdating, setIsUserpicUpdating] = createSignal(false) + + const { + actions: { showSnackbar } + } = useSnackbar() + const { actions: { loadSession } } = useSession() @@ -31,11 +36,19 @@ export const ProfileSettingsPage = () => { setIncorrectUrl(true) } } + const handleSubmit = async (event: Event) => { event.preventDefault() setIsSubmitting(true) - await submit(form) - await loadSession() + + try { + await submit(form) + showSnackbar({ body: t('Profile successfully saved') }) + } catch { + showSnackbar({ type: 'error', body: t('Error') }) + } + + loadSession() setIsSubmitting(false) } diff --git a/src/components/Root.tsx b/src/components/Root.tsx index 771ed7e0..3a73a30a 100644 --- a/src/components/Root.tsx +++ b/src/components/Root.tsx @@ -36,6 +36,7 @@ import { ProfileSettingsPage } from './Pages/profile/ProfileSettingsPage' import { ProfileSecurityPage } from './Pages/profile/ProfileSecurityPage' import { ProfileSubscriptionsPage } from './Pages/profile/ProfileSubscriptionsPage' import CreateSettingsPage from './Pages/CreateSettingsPage' +import { SnackbarProvider } from '../context/snackbar' // TODO: lazy load // const SomePage = lazy(() => import('./Pages/SomePage')) @@ -98,8 +99,10 @@ export const Root = (props: PageProps) => { } return ( - - - + + + + + ) } diff --git a/src/context/profile.tsx b/src/context/profile.tsx index 5307e1ac..0e4a8cbf 100644 --- a/src/context/profile.tsx +++ b/src/context/profile.tsx @@ -13,16 +13,12 @@ const useProfileForm = () => { const [slugError, setSlugError] = createSignal() const submit = async (profile: ProfileInput) => { - try { - const response = await apiClient.updateProfile(profile) - if (response.error) { - setSlugError(response.error) - return response.error - } - return response - } catch (error) { - console.error(error) + const response = await apiClient.updateProfile(profile) + if (response.error) { + setSlugError(response.error) + return response.error } + return response } const [form, setForm] = createStore({ diff --git a/src/context/snackbar.tsx b/src/context/snackbar.tsx new file mode 100644 index 00000000..bb7362a4 --- /dev/null +++ b/src/context/snackbar.tsx @@ -0,0 +1,79 @@ +import type { Accessor, JSX } from 'solid-js' +import { createContext, createSignal, useContext } from 'solid-js' +import { delay } from '../utils/delay' + +const DEFAULT_DURATION = 5000 // 5 sec + +type SnackbarMessage = { + type: 'success' | 'error' + body: string | JSX.Element + duration: number +} + +type SnackbarContextType = { + snackbarMessage: Accessor + actions: { + showSnackbar: (message: { + type?: SnackbarMessage['type'] + body: SnackbarMessage['body'] + duration?: SnackbarMessage['duration'] + }) => Promise + } +} + +const SnackbarContext = createContext() + +export function useSnackbar() { + return useContext(SnackbarContext) +} + +const messagesToShow: SnackbarMessage[] = [] + +let currentCheckMessagesPromise = null + +export const SnackbarProvider = (props: { children: JSX.Element }) => { + const [snackbarMessage, setSnackbarMessage] = createSignal(null) + + const checkMessages = async () => { + if (messagesToShow.length === 0) { + currentCheckMessagesPromise = null + return + } + + setSnackbarMessage(messagesToShow[0]) + await delay(messagesToShow[0].duration) + setSnackbarMessage(null) + await delay(1000) + messagesToShow.shift() + await checkMessages() + } + + const showSnackbar = async (message: { + type?: SnackbarMessage['type'] + body: SnackbarMessage['body'] + duration?: SnackbarMessage['duration'] + }): Promise => { + const messageToShow = { + type: message.type ?? 'success', + body: message.body, + duration: message.duration ?? DEFAULT_DURATION + } + + messagesToShow.push(messageToShow) + + if (!currentCheckMessagesPromise) { + currentCheckMessagesPromise = checkMessages() + await currentCheckMessagesPromise + } + + return currentCheckMessagesPromise + } + + const actions = { + showSnackbar + } + + const value: SnackbarContextType = { snackbarMessage, actions } + + return {props.children} +} diff --git a/src/locales/ru.json b/src/locales/ru.json index b086056e..0ce51b42 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -225,9 +225,9 @@ "My subscriptions": "Подписки", "Nothing here yet": "Здесь пока ничего нет", "Edited": "Отредактирован", - "Nothing here yet": "Здесь пока ничего нет", "Invite experts": "Пригласить экспертов", "Subscribe to comments": "Подписаться на комментарии", "Add to bookmarks": "Добавить в закладки", - "Get notifications": "Получать уведомления" + "Get notifications": "Получать уведомления", + "Profile successfully saved": "Профиль успешно сохранён" } diff --git a/src/utils/delay.ts b/src/utils/delay.ts new file mode 100644 index 00000000..8acc7907 --- /dev/null +++ b/src/utils/delay.ts @@ -0,0 +1 @@ +export const delay = async (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms)) diff --git a/yarn.lock b/yarn.lock index 0ab94bb8..5c476860 100644 --- a/yarn.lock +++ b/yarn.lock @@ -217,6 +217,14 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/abort-controller@^3.266.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.267.0.tgz#a9101d6ed54ebd58741cd83fb6aea0f9c187e3b0" + integrity sha512-5R7OSnHFV/f+qQpMf1RuSQoVdXroK94Vl6naWjMOAhMyofHykVhEok9hmFPac86AVx8rVX/vuA7u9GKI6/EE7g== + dependencies: + "@aws-sdk/types" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/chunked-blob-reader-native@3.208.0": version "3.208.0" resolved "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.208.0.tgz" @@ -605,13 +613,13 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/lib-storage@^3.223.0": - version "3.235.0" - resolved "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.235.0.tgz" - integrity sha512-+xQtPsToeA4RFiWmO+j5DbDsisPBwNb5k87z1NbrlsZkbj7ONTunX5F3qqe2bR+1o7Pb5O1REQrIQohT6QECaw== +"@aws-sdk/lib-storage@^3.266.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.267.0.tgz#ba77c4eb559370ed0f29afac5f273fc9b69dc37f" + integrity sha512-MljL0PavGZ3Yc1kkSjWIAzY6TWTWi7iuCpAi/DQKs0TyjSuX5vtxLmSVv1Wlx3ywrI8HDlo2xG7bvhjDQDN3gw== dependencies: - "@aws-sdk/middleware-endpoint" "3.226.0" - "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/middleware-endpoint" "3.267.0" + "@aws-sdk/smithy-client" "3.267.0" buffer "5.6.0" events "3.3.0" stream-browserify "3.0.0" @@ -661,6 +669,20 @@ "@aws-sdk/util-middleware" "3.226.0" tslib "^2.3.1" +"@aws-sdk/middleware-endpoint@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.267.0.tgz#2e5ca14e1a26220b9b77dddf0ddec0db8d79155d" + integrity sha512-pGICM/qlQVfixtfKZt8zHq54KvLG2MmOAgNWj2MXB7oirPs/3rC9Kz9ITFXJgjlRFyfssgP/feKhs2yZkI8lhw== + dependencies: + "@aws-sdk/middleware-serde" "3.267.0" + "@aws-sdk/protocol-http" "3.267.0" + "@aws-sdk/signature-v4" "3.267.0" + "@aws-sdk/types" "3.267.0" + "@aws-sdk/url-parser" "3.267.0" + "@aws-sdk/util-config-provider" "3.208.0" + "@aws-sdk/util-middleware" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/middleware-expect-continue@3.226.0": version "3.226.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.226.0.tgz" @@ -759,6 +781,14 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/middleware-serde@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.267.0.tgz#b1ce247834ad9531e868189616b3adfb2d8af1b2" + integrity sha512-9qspxiZs+JShukzKMAameBSubfvtUOGZviu9GT5OfRekY2dBbwWcfchP2WvlwxZ/CcC+GwO1HcPqKDCMGsNoow== + dependencies: + "@aws-sdk/types" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/middleware-signing@3.226.0": version "3.226.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz" @@ -786,6 +816,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/middleware-stack@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.267.0.tgz#f16334b1f99e8714e1f4d98faa065f669aff7885" + integrity sha512-52uH3JO3ceI15dgzt8gU7lpJf59qbRUQYJ7pAmTMiHtyEawZ39Puv6sGheY3fAffhqd/aQvup6wn18Q1fRIQUA== + dependencies: + tslib "^2.3.1" + "@aws-sdk/middleware-user-agent@3.226.0": version "3.226.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz" @@ -832,6 +869,14 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/protocol-http@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.267.0.tgz#12c2e0fbaa01f9658daedad8196fa52c74675394" + integrity sha512-8HhOZXMCZ0nsJC/FoifX7YrTYGP91tCpSxIHkr7HxQcTdBMI7QakMtIIWK9Qjsy6tUI98aAdEo5PNCbzdpozmQ== + dependencies: + "@aws-sdk/types" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/querystring-builder@3.226.0": version "3.226.0" resolved "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz" @@ -849,6 +894,14 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/querystring-parser@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.267.0.tgz#497758012c335aab08bbea1e5a7d5e6d61dec320" + integrity sha512-Krq36GXqEfRfzJ9wOzkkzpbb4SWjgSYydTIgK6KtKapme0HPcB24kmmsjsUVuHzKuQMCHHDRWm+b47iBmHGpSQ== + dependencies: + "@aws-sdk/types" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/service-error-classification@3.229.0": version "3.229.0" resolved "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz" @@ -885,6 +938,19 @@ "@aws-sdk/util-uri-escape" "3.201.0" tslib "^2.3.1" +"@aws-sdk/signature-v4@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.267.0.tgz#15812f48f487828353c1e33574cb789cedef659c" + integrity sha512-Je1e7rum2zvxa3jWfwq4E+fyBdFJmSJAwGtWYz3+/rWipwXFlSAPeSVqtNjHdfzakgabvzLp7aesG4yQTrO2YQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.201.0" + "@aws-sdk/types" "3.267.0" + "@aws-sdk/util-hex-encoding" "3.201.0" + "@aws-sdk/util-middleware" "3.267.0" + "@aws-sdk/util-uri-escape" "3.201.0" + "@aws-sdk/util-utf8" "3.254.0" + tslib "^2.3.1" + "@aws-sdk/smithy-client@3.234.0": version "3.234.0" resolved "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz" @@ -894,6 +960,15 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/smithy-client@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.267.0.tgz#a3148a49900e284c3c140a5b7514e20e6d4342ae" + integrity sha512-WdgXHqKmFQIkAWETO/I5boX9u6QbMLC4X74OVSBaBLhRjqYmvolMFtNrQzvSKGB3FaxAN9Do41amC0mGoeLC8A== + dependencies: + "@aws-sdk/middleware-stack" "3.267.0" + "@aws-sdk/types" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/token-providers@3.235.0": version "3.235.0" resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.235.0.tgz" @@ -912,6 +987,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/types@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.267.0.tgz#fe543d1a1977c4e9e7ca6c32c837fcfd87b32441" + integrity sha512-fICTbSeIfXlTHnciQgDt37R0kXoKxgh0a3prnLWVvTcmf7NFujdZmg5YTAZT3KJJ7SuKsIgnI8azBYioVY8BVQ== + dependencies: + tslib "^2.3.1" + "@aws-sdk/url-parser@3.226.0": version "3.226.0" resolved "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz" @@ -921,6 +1003,15 @@ "@aws-sdk/types" "3.226.0" tslib "^2.3.1" +"@aws-sdk/url-parser@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.267.0.tgz#c103fba8f2c1c4bed1c6fa85ef4fd27d3147f81d" + integrity sha512-xoQ5Fd11moiE82QTL9GGE6e73SFuD0Wi73tA75TAwKuY12OP5vDJ4oBC86A1G2T+OzeHJQmYyqiA5j48CzqB6A== + dependencies: + "@aws-sdk/querystring-parser" "3.267.0" + "@aws-sdk/types" "3.267.0" + tslib "^2.3.1" + "@aws-sdk/util-arn-parser@3.208.0": version "3.208.0" resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.208.0.tgz" @@ -1016,6 +1107,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-middleware@3.267.0": + version "3.267.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.267.0.tgz#99a9c72b889e6d8cbd3ee6fa8c7a0190984945ce" + integrity sha512-7nvqBZVz3RdwYv6lU958g6sWI2Qt8lzxDVn0uwfnPH+fAiX7Ln1Hen2A0XeW5cL5uYUJy6wNM5cyfTzFZosE0A== + dependencies: + tslib "^2.3.1" + "@aws-sdk/util-retry@3.229.0": version "3.229.0" resolved "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz" @@ -1086,6 +1184,14 @@ "@aws-sdk/util-buffer-from" "3.208.0" tslib "^2.3.1" +"@aws-sdk/util-utf8@3.254.0": + version "3.254.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz#909af9c6549833a9a9bf77004b7484bfc96b2c35" + integrity sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw== + dependencies: + "@aws-sdk/util-buffer-from" "3.208.0" + tslib "^2.3.1" + "@aws-sdk/util-waiter@3.226.0": version "3.226.0" resolved "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz" @@ -1675,7 +1781,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.15.4": +"@babel/runtime@^7.0.0": version "7.20.0" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.0.tgz" integrity sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q== @@ -3183,11 +3289,6 @@ dependencies: "@types/node" "*" -"@types/lodash@^4.14.175": - version "4.14.186" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz" - integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw== - "@types/mdast@^3.0.0": version "3.0.10" resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz" @@ -7736,11 +7837,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" @@ -8484,11 +8580,6 @@ mute-stream@0.0.8: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoclone@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz" - integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== - nanoid@^3.3.4: version "3.3.4" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" @@ -9156,11 +9247,6 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -property-expr@^2.0.4: - version "2.0.5" - resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz" - integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== - property-information@^6.0.0: version "6.1.1" resolved "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz" @@ -9978,21 +10064,6 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -solid-js-form@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/solid-js-form/-/solid-js-form-0.1.8.tgz#cc50bb7f782fa6f91651a1885b799432b03d6b3b" - integrity sha512-kOKZ5et9t1T8P8GAi4FIyuoGO2Y14YnTyKT7kla3wbtcDeWb4dqvxSqmNHRx8r9ZxTN/hpl3WxmwtOBOPalSaA== - dependencies: - solid-js "^1.1.2" - yup "^0.32.9" - -solid-js@^1.1.2: - version "1.6.6" - resolved "https://registry.npmjs.org/solid-js/-/solid-js-1.6.6.tgz" - integrity sha512-5x33mEbPI8QLuywvFjQP4krjWDr8xiYFgZx9KCBH7b0ZzypQCHaUubob7bK6i+1u6nhaAqhWtvXS587Kb8DShA== - dependencies: - csstype "^3.1.0" - solid-js@^1.6.9: version "1.6.10" resolved "https://registry.yarnpkg.com/solid-js/-/solid-js-1.6.10.tgz#fbd8e0a4adfe7b38da1885170369ede6a1cc7379" @@ -10000,15 +10071,10 @@ solid-js@^1.6.9: dependencies: csstype "^3.1.0" -solid-jsx@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/solid-jsx/-/solid-jsx-0.9.1.tgz" - integrity sha512-HHTx58rx3tqg5LMGuQnaE1vqZjpl+RMP0jYQnBkTY0xKIASVNSLZJCZoPFrpKH8wWWYyTLHdepgzs8u/e6yz5Q== - -solid-utils@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/solid-utils/-/solid-utils-0.8.1.tgz" - integrity sha512-LLeO7Hr99OLFY+Zfx8U7Hw5VZOaFT8qWoLWGfnq3kDmo7KAGdIoq44ijy7mdYj88e+2cWPdkyhItsS3FGjeS6g== +solid-transition-group@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/solid-transition-group/-/solid-transition-group-0.0.13.tgz#1a476d3798759be106ad1062cc071db139b0d564" + integrity sha512-VA1V0ip4dsNOQJ/dCluCiAPBUuHspYFm4WYG91jpNmcP4rC4DY1S1EGds44JjiUAP7qEoEZdMhPaiS6lqTF7AA== sort-object-keys@^1.1.3: version "1.1.3" @@ -10570,11 +10636,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz" - integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== - tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" @@ -11437,19 +11498,6 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yup@^0.32.9: - version "0.32.11" - resolved "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz" - integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg== - dependencies: - "@babel/runtime" "^7.15.4" - "@types/lodash" "^4.14.175" - lodash "^4.17.21" - lodash-es "^4.17.21" - nanoclone "^0.2.1" - property-expr "^2.0.4" - toposort "^2.0.2" - zod@^3.17.3: version "3.19.1" resolved "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz"