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"