diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 6c2cf67e..546d8469 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -48,6 +48,7 @@ "react-hot-toast": "^2.4.1", "react-icons": "^5.2.1", "react-lines-ellipsis": "^0.15.4", + "react-markdown": "^9.0.1", "react-router-dom": "^6.23.1", "react-scripts": "5.0.1", "react-use": "^17.5.0", diff --git a/packages/frontend/src/assets/svg/bell-active.svg b/packages/frontend/src/assets/svg/bell-active.svg new file mode 100644 index 00000000..5f9105ab --- /dev/null +++ b/packages/frontend/src/assets/svg/bell-active.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/bell.svg b/packages/frontend/src/assets/svg/bell.svg index 2a861775..aa83c50a 100644 --- a/packages/frontend/src/assets/svg/bell.svg +++ b/packages/frontend/src/assets/svg/bell.svg @@ -1,19 +1,3 @@ - - - - - - - - - - - - - - - - - - + + diff --git a/packages/frontend/src/assets/svg/book-search-active.svg b/packages/frontend/src/assets/svg/book-search-active.svg new file mode 100644 index 00000000..14e1efb0 --- /dev/null +++ b/packages/frontend/src/assets/svg/book-search-active.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/book-search.svg b/packages/frontend/src/assets/svg/book-search.svg new file mode 100644 index 00000000..8e1a5874 --- /dev/null +++ b/packages/frontend/src/assets/svg/book-search.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/frontend/src/assets/svg/book-user-active.svg b/packages/frontend/src/assets/svg/book-user-active.svg new file mode 100644 index 00000000..e9e992b7 --- /dev/null +++ b/packages/frontend/src/assets/svg/book-user-active.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/book-user.svg b/packages/frontend/src/assets/svg/book-user.svg new file mode 100644 index 00000000..0b0e59a2 --- /dev/null +++ b/packages/frontend/src/assets/svg/book-user.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/frontend/src/assets/svg/chat-hexagon.svg b/packages/frontend/src/assets/svg/chat-hexagon.svg new file mode 100644 index 00000000..b0797cee --- /dev/null +++ b/packages/frontend/src/assets/svg/chat-hexagon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/chat-info.svg b/packages/frontend/src/assets/svg/chat-info.svg new file mode 100644 index 00000000..6e79bbec --- /dev/null +++ b/packages/frontend/src/assets/svg/chat-info.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/frontend/src/assets/svg/chat-question.svg b/packages/frontend/src/assets/svg/chat-question.svg new file mode 100644 index 00000000..a27ca9bb --- /dev/null +++ b/packages/frontend/src/assets/svg/chat-question.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/frontend/src/assets/svg/chat-star.svg b/packages/frontend/src/assets/svg/chat-star.svg new file mode 100644 index 00000000..e7737909 --- /dev/null +++ b/packages/frontend/src/assets/svg/chat-star.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/frontend/src/assets/svg/discord.svg b/packages/frontend/src/assets/svg/discord.svg new file mode 100644 index 00000000..ee224064 --- /dev/null +++ b/packages/frontend/src/assets/svg/discord.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/github.svg b/packages/frontend/src/assets/svg/github.svg new file mode 100644 index 00000000..73bf5421 --- /dev/null +++ b/packages/frontend/src/assets/svg/github.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/home-paragraph-active.svg b/packages/frontend/src/assets/svg/home-paragraph-active.svg new file mode 100644 index 00000000..1752f997 --- /dev/null +++ b/packages/frontend/src/assets/svg/home-paragraph-active.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/frontend/src/assets/svg/home-paragraph.svg b/packages/frontend/src/assets/svg/home-paragraph.svg new file mode 100644 index 00000000..05453ccf --- /dev/null +++ b/packages/frontend/src/assets/svg/home-paragraph.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/frontend/src/constants/paths.ts b/packages/frontend/src/constants/paths.ts index c5ece8fa..342a9a20 100644 --- a/packages/frontend/src/constants/paths.ts +++ b/packages/frontend/src/constants/paths.ts @@ -9,6 +9,8 @@ export const PATHS = { VIEW_POST: '/posts/:id', WRITE_POST: '/write-post', PROFILE: '/profile', - HISTORTY: '/profile/history', + HISTORY: '/profile/history', REPUTATION: '/profile/reputation', + ABOUT_US: '/about', + NOTIFICATION: '/notification', } diff --git a/packages/frontend/src/features/auth/components/ProtectedRoute/ProtectedRoute.tsx b/packages/frontend/src/features/auth/components/ProtectedRoute/ProtectedRoute.tsx index ce1a9f55..3fe12a22 100644 --- a/packages/frontend/src/features/auth/components/ProtectedRoute/ProtectedRoute.tsx +++ b/packages/frontend/src/features/auth/components/ProtectedRoute/ProtectedRoute.tsx @@ -2,13 +2,9 @@ import { PATHS } from '@/constants/paths' import { useAuthStatus, useLogout } from '@/features/auth' import { useIsFirstRender } from '@uidotdev/usehooks' import { useEffect } from 'react' -import { useNavigate } from 'react-router-dom' +import { Outlet, useNavigate } from 'react-router-dom' -type ProtectedRouterProps = { - children: React.ReactNode -} - -export default function ProtectedRoute({ children }: ProtectedRouterProps) { +export default function ProtectedRoute() { const navigate = useNavigate() const { @@ -54,5 +50,5 @@ export default function ProtectedRoute({ children }: ProtectedRouterProps) { return null } - return <>{children} + return } diff --git a/packages/frontend/src/features/shared/components/MobileBottomNav/MobileBottomNav.tsx b/packages/frontend/src/features/shared/components/MainBottomNav/MainBottomNav.tsx similarity index 56% rename from packages/frontend/src/features/shared/components/MobileBottomNav/MobileBottomNav.tsx rename to packages/frontend/src/features/shared/components/MainBottomNav/MainBottomNav.tsx index 5ceee997..f62fb133 100644 --- a/packages/frontend/src/features/shared/components/MobileBottomNav/MobileBottomNav.tsx +++ b/packages/frontend/src/features/shared/components/MainBottomNav/MainBottomNav.tsx @@ -1,8 +1,13 @@ import { ReactComponent as AddIcon } from '@/assets/svg/add.svg' +import { ReactComponent as BellActiveIcon } from '@/assets/svg/bell-active.svg' import { ReactComponent as BellIcon } from '@/assets/svg/bell.svg' -import { ReactComponent as HomeIcon } from '@/assets/svg/home.svg' -import { ReactComponent as PersonCircleIcon } from '@/assets/svg/person-circle.svg' -import { ReactComponent as StarIcon } from '@/assets/svg/star.svg' +import { ReactComponent as BookSearchActiveIcon } from '@/assets/svg/book-search-active.svg' +import { ReactComponent as BookSearchIcon } from '@/assets/svg/book-search.svg' +import { ReactComponent as BookUserActiveIcon } from '@/assets/svg/book-user-active.svg' +import { ReactComponent as BookUserIcon } from '@/assets/svg/book-user.svg' +import { ReactComponent as HomeParagraphActiveIcon } from '@/assets/svg/home-paragraph-active.svg' +import { ReactComponent as HomeParagraphIcon } from '@/assets/svg/home-paragraph.svg' +import { PATHS } from '@/constants/paths' import { useAuthStatus } from '@/features/auth' import SignupPendingTransition from '@/features/auth/components/SignupPendingTransition/SignupPendingTransition' import { motion } from 'framer-motion' @@ -48,15 +53,27 @@ export default function MobileBottomNav() { > - + {({ isActive }) => + isActive ? ( + + ) : ( + + ) + } - + {({ isActive }) => + isActive ? ( + + ) : ( + + ) + }
- + {({ isActive }) => + isActive ? ( + + ) : ( + + ) + } - + {({ isActive }) => + isActive ? ( + + ) : ( + + ) + } )} diff --git a/packages/frontend/src/features/shared/components/MainSideNav/MainSideNav.tsx b/packages/frontend/src/features/shared/components/MainSideNav/MainSideNav.tsx new file mode 100644 index 00000000..e710cf35 --- /dev/null +++ b/packages/frontend/src/features/shared/components/MainSideNav/MainSideNav.tsx @@ -0,0 +1,97 @@ +import { ReactComponent as BellActiveIcon } from '@/assets/svg/bell-active.svg' +import { ReactComponent as BellIcon } from '@/assets/svg/bell.svg' +import { ReactComponent as BookSearchActiveIcon } from '@/assets/svg/book-search-active.svg' +import { ReactComponent as BookSearchIcon } from '@/assets/svg/book-search.svg' +import { ReactComponent as BookUserActiveIcon } from '@/assets/svg/book-user-active.svg' +import { ReactComponent as BookUserIcon } from '@/assets/svg/book-user.svg' +import { ReactComponent as HomeParagraphActiveIcon } from '@/assets/svg/home-paragraph-active.svg' +import { ReactComponent as HomeParagraphIcon } from '@/assets/svg/home-paragraph.svg' +import { PATHS } from '@/constants/paths' +import clsx from 'clsx' +import { NavLink } from 'react-router-dom' + +export default function MainNav() { + return ( + + ) +} diff --git a/packages/frontend/src/features/shared/components/NotificationContainer/NotificationContainer.tsx b/packages/frontend/src/features/shared/components/NotificationContainer/NotificationContainer.tsx new file mode 100644 index 00000000..92b471ce --- /dev/null +++ b/packages/frontend/src/features/shared/components/NotificationContainer/NotificationContainer.tsx @@ -0,0 +1,14 @@ +export default function NotificationContainer({ + children, +}: { + children: React.ReactNode +}) { + return ( +
+ {children} +
+ ) +} diff --git a/packages/frontend/src/features/shared/index.ts b/packages/frontend/src/features/shared/index.ts index 543a9e38..59ac9771 100644 --- a/packages/frontend/src/features/shared/index.ts +++ b/packages/frontend/src/features/shared/index.ts @@ -3,7 +3,9 @@ export { default as Backdrop } from './components/Backdrop/Backdrop' export { default as DatePicker } from './components/DatePicker/DatePicker' export { default as Dialog } from './components/Dialog/Dialog' export { default as ErrorBoundary } from './components/ErrorBoundary/ErrorBoundary' -export { default as MobileBottomNav } from './components/MobileBottomNav/MobileBottomNav' +export { default as MainBottomNav } from './components/MainBottomNav/MainBottomNav' +export { default as MainSideNav } from './components/MainSideNav/MainSideNav' +export { default as NotificationContainer } from './components/NotificationContainer/NotificationContainer' export { default as ResetStorage } from './components/ResetStorage/ResetStorage' export { default as RichTextEditor } from './components/RichTextEditor' export * from './components/Table' diff --git a/packages/frontend/src/routes/app/about/page.tsx b/packages/frontend/src/routes/app/about/page.tsx new file mode 100644 index 00000000..c1307248 --- /dev/null +++ b/packages/frontend/src/routes/app/about/page.tsx @@ -0,0 +1,252 @@ +import { ReactComponent as ChatHexagonIcon } from '@/assets/svg/chat-hexagon.svg' +import { ReactComponent as ChatInfoIcon } from '@/assets/svg/chat-info.svg' +import { ReactComponent as ChatQuestionIcon } from '@/assets/svg/chat-question.svg' +import { ReactComponent as ChatStarIcon } from '@/assets/svg/chat-star.svg' +import { ReactComponent as DiscordIcon } from '@/assets/svg/discord.svg' +import { ReactComponent as GithubIcon } from '@/assets/svg/github.svg' +import { + Disclosure, + DisclosureButton, + DisclosurePanel, +} from '@headlessui/react' +import { LuChevronDown } from 'react-icons/lu' +import Markdown from 'react-markdown' + +export default function AboutPage() { + return ( +
+
+

+ + 平台特點與機制介紹 +

+
+ {features.map((feature, i) => ( + + ))} +
+
+
+

+ + 平台政策 +

+
+ {policies.map((policy, i) => ( + + ))} +
+
+
+

+ + 開源資訊與 Discord 社群 +

+
+ + + 前往 Github + + + + 前往 Discord + +
+
+
+

+ + 常見問題 +

+
+ {faqs.map((faq, i) => ( + + ))} +
+
+
+ ) +} + +const githubLink = 'https://github.com/social-tw/social-tw-website' + +const discordLink = 'https://discord.gg/TESq3vqc' + +const features = [ + { + id: 'feature-introduction', + title: 'Unirep Social Taiwan 簡介', + content: ` +Unirep Social Taiwan 是一個去中心化的社交平台,強調用戶的隱私保護和社群自治。在這裡,用戶可以匿名參與討論,享受真正的言論自由,並透過聲譽系統維護社群秩序。平台利用區塊鏈技術,讓每個行為都與隨機生成的身份綁定,確保隱私安全。 + `, + }, + { + id: 'feature-epoch', + title: 'Epoch / Epoch Key / 動作操作計數區 ', + content: ` +### 「Epoch / Epoch Key」 +在 Unirep Social Taiwan 社群平台上,每 5 分鐘為一個 Epoch(在區塊鏈或去中心化平台中,Epoch 是一段時間的單位),每個 Epoch 內使用者可使用 3 把 Epoch Keys (Epoch Key 是 UniRep 協議中的一種隨機生成的身份標示符,用來識別用戶在特定 Epoch 期間的行為)來執行各種操作,例如發文、投票、留言、檢舉和協助檢舉評判等。每個行為會使用到 1 把 Epoch Key。如果在 5 分鐘內進行超過 3 個操作,系統將重複使用已使用過的 Epoch Key,此時可能增加交叉比對的可行性,從而提高用戶身份被識別的風險。 + +### 「動作操作計數區」 +此區塊為 Unirep Social Taiwan 特有的動作操作計數區塊,方便你快速辨識平台上的操作動作的相關資訊,以防止身份被辨識。此區塊提供每回 Epoch 的剩餘時間和操作行為次數,方便你快速辨識相關資訊。每當執行新操作時,計數區底部會顯示最新的操作行為,以及該操作的上鏈交易(Transaction)進度與狀態。上鏈交易(Transaction)是指將某一筆交易或動作記錄永久寫入區塊鏈的過程。 + `, + }, + { + id: 'feature-identity', + title: '隨機身份', + content: ` +為保護你的隱私與身份,會在每個動作被執行時賦予你新的隨機身份(Random Identity), 因此你的用戶頭像圖片會是隨機生成的,並且每次都不一樣。 + `, + }, + { + id: 'feature-reputation', + title: '聲譽分數', + content: ` +### 「何謂聲譽分數?」 +聲譽分數(Reputation Score)為用戶在 Unirep Social Taiwan 上的所有操作行為所獲得的分數,作為去中心化與用戶自治的機制。每位用戶的聲譽分數起始分數為 0,當用戶的分數為負分時,平台將限制該用戶的操作行為,該用戶無法進行發文、投票、留言、檢舉和協助檢舉評判,僅能進行瀏覽。 +### 「如何提高聲譽分數?」 +當你的聲譽分數不為負值時(大於等於 0),你可以透過以下 2 種方式提高聲譽分數: +- 進行內容檢舉 + 檢舉不當內容的貼文或留言,若檢舉評判通過你可以提高 3 分聲譽分數 +- 協助檢舉評判 + 當你成功協助檢舉評判後,你可以提高 1 分聲譽分數 +當你的聲譽分數為負值時(小於 0),你可以透過以下方式提高聲譽分數: +- 進行每日簽到 + 平台會在聲譽分數為負值的用戶使用平台時提供「每日簽到」的按鈕,讓聲譽分數為負值的用戶能夠藉此提高聲譽分數。「每日簽到」按鈕每日僅提供一次簽到機會。 +### 「何種情況聲譽分數會降低?」 +有 2 種情況會使你的聲譽分數降低: +- 當你的貼文被檢舉,並且評判通過後,你的聲譽分數會被扣 5 分。 +- 若你提出的檢舉案評判不通過時,你的聲譽分數會被扣 1 分。 + `, + }, + { + id: 'feature-community', + title: '社群自治 / 檢舉 / 檢舉評判', + content: ` +### 「社群自治與檢舉機制」 +Unirep Social Taiwan 為一去中心化的用戶自治管理平台,藉由透過檢舉不當內容的方式來維持社群的安全與健康。當一則「貼文」或是「留言」的內容有不當之處時,你可以進行對於該則內容的檢舉操作。當檢舉送出後,該檢舉將交由 Unirep Social Taiwan 中的 5 位隨機用戶進行檢舉內容的評判審核。若檢舉通過,你的聲譽分數將提高 3 分,若檢舉不通過,則您的聲譽分數會降低 3 分。 +### 「檢舉評判機制」 +當檢舉案件被成功上鏈交易後,該檢舉將交由 Unirep Social Taiwan 上的 5 位隨機用戶進行檢舉內容的評判審核,成功協助評判的用戶的聲譽分數將提高 1 分。 + `, + }, +] + +const policies = [ + { + id: 'policy-content', + title: '內容規範', + content: ` +為保障用戶的隱私與自由表達,並維護平台的健康互動環境,我們致力於提供一個尊重個人權利、促進積極對話的社群空間。因此,為確保所有用戶能夠在安全且有序的環境中交流,請避免發佈以下類型的貼文或留言: +1. 發表針對個人、群體或組織的中傷、歧視、挑釁、羞辱或人身攻擊等言論。 +2. 張貼商業廣告、邀請碼或包含個人代碼的邀請連結等內容。 +3. 發佈帶有色情裸露、強烈性暗示的內容(具教育性質者除外)。 +4. 違反政府法令的行為或內容。 +5. 重複張貼他人已發佈過的相同內容。 +6. 發佈空泛或明顯無意義的內容。 +7. 任何其他被認定為有損社群秩序或不符合平台健康互動標準的內容。 +若發佈上述內容,可能會被其他用戶檢舉,進而導致聲譽分數扣減,甚至限制您在平台上的操作行為。詳細資訊請參閱[社群自治 / 檢舉 / 檢舉評判](#feature-community)、[聲譽分數](#feature-reputation)。 + `, + }, + { + id: 'policy-disclaimer', + title: '免責聲明', + content: ` +本社群平台致力於為用戶提供匿名、隱私保護且自由表達的社交空間。然而,使用者應對自己所發佈的內容及行為負全部責任。本平台不對用戶發佈的任何言論、內容或行為承擔法律責任。 +1. 用戶行為責任 +使用者發佈的任何內容,包括但不限於文字、圖片、連結,均應遵守本平台規範及當地法律法規。任何違反規定的內容,如中傷、歧視、侵權、違法行為等,將由發佈者個人負責。 +2. 檢舉與聲譽分數影響 +本平台設有檢舉機制,用戶之間可以檢舉不當內容。檢舉經評判後,可能導致發佈者的聲譽分數下降,並可能影響其在平台上的權限或操作行為。因聲譽分數扣減所引起的後果由用戶自行承擔。 +3. 隱私與安全 +我們致力於使用 Web3 技術和加密手段來保護用戶的隱私,但仍無法完全避免因技術限制或用戶行為導致的身份洩露風險。使用本平台時,請謹慎操作並避免在敏感操作中超出特定範圍的行為。 +4. 免責條款 +本平台對因使用本服務而引發的任何直接或間接損失不承擔責任。平台不對用戶之間的互動及其後果承擔任何責任。 +通過使用 UniRep Social Taiwan 平台,即表示您同意並理解上述免責聲明內容及規範。如有疑問,請參閱完整平台說明。 + `, + }, +] + +const faqs = [ + { + id: 'faq-1', + title: '為什麼需要透過 X 帳號註冊?', + content: ` +X 帳號僅用於驗證你是否為真實用戶,以防止大量假帳號帶來的女巫攻擊風險(女巫攻擊(Sybil Attack)是一種常見於去中心化系統中的攻擊方式,指的是攻擊者創建大量假帳號或身份,以此來操控系統或影響網絡中的決策),從而保護平台系統安全。Unirep Social Taiwan 不會取用你在 X 上的任何資訊。 + `, + }, + { + id: 'faq-2', + title: '為什麼透過 X 帳號註冊後又有一個註冊?', + content: ` +透過 X 帳號註冊僅用於驗證您是否為真實用戶,而後的錢包註冊或伺服器註冊步驟,才是真正的在 UniRep Social Taiwan 上建立帳號。 + `, + }, + { + id: 'faq-3', + title: '聲譽分數低於 0 分怎麼辦?', + content: ` +當你的聲譽分數低於 0 時,你可以透過進行「每日簽到」的方式來提高聲譽分數。Unirep Social Taiwan 平台會在聲譽分數為負值的用戶使用平台時提供「每日簽到」的按鈕,讓聲譽分數為負值的用戶能夠藉此提高聲譽分數。「每日簽到」按鈕每日僅提供一次簽到機會。 + `, + }, + { + id: 'faq-4', + title: '可以透過不斷的檢舉來提高聲譽分數嗎?', + content: ` +在 Unirep Social Taiwan 的機制中,檢舉行為本身並不是用來無限制提高聲譽分數的手段。檢舉機制是設計來促進平台秩序和健康互動的。持續進行不正當或惡意檢舉,反而可能會損害用戶自身的聲譽分數。檢舉內容需要經過平台的「檢舉評判機制」來評估其有效性。只有在檢舉符合平台規範並且經過確認後,才有可能對聲譽分數產生積極影響。重複的無效檢舉則可能導致用戶聲譽分數下降,當聲譽分數為負值時其平台的操作行為將遭到限制。詳細資訊請參閱[社群自治 / 檢舉 / 檢舉評判](#feature-community)、[聲譽分數](#feature-reputation) + `, + }, + { + id: 'faq-5', + title: '我可以刪除我自己的貼文 / 留言嗎?', + content: ` +由於平台採用的技術架構,目前無法刪除已發佈的貼文或留言。因此,我們建議您在發佈內容時仔細考慮,確保內容合適並符合平台規範。 + `, + }, +] + +function Collapse({ + id, + title, + content, +}: { + id?: string + title?: string + content?: string +}) { + return ( + + + {title} + + + + + {content} + + + + ) +} diff --git a/packages/frontend/src/routes/app/layout.desktop.tsx b/packages/frontend/src/routes/app/layout.desktop.tsx new file mode 100644 index 00000000..162d9d03 --- /dev/null +++ b/packages/frontend/src/routes/app/layout.desktop.tsx @@ -0,0 +1,146 @@ +import LogoImage from '@/assets/img/logo.png' +import { ReactComponent as ArrowLeftIcon } from '@/assets/svg/arrow-left.svg' +import { ReactComponent as SearchIcon } from '@/assets/svg/search.svg' +import { PATHS } from '@/constants/paths' +import { ErrorDialog } from '@/features/auth' +import { ActionNotification, EpochInfo } from '@/features/core' +import { + AdjudicationNotification, + CheckInNotification, +} from '@/features/reporting' +import { MainSideNav, NotificationContainer } from '@/features/shared' +import { ForbidActionDialog } from '@/features/shared/components/Dialog/ForbidActionDialog' +import { + closeForbidActionDialog, + useDialogStore, +} from '@/features/shared/stores/dialog' +import { + Link, + Outlet, + useLocation, + useMatch, + useNavigate, +} from 'react-router-dom' + +export default function DesktopAppLayout() { + const isForbidActionDialogOpen = useDialogStore( + (state) => state.forbidAction, + ) + + return ( +
+
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+ + +
+ + +
+
+
+
+ + + + + + +
+ ) +} + +function Logo() { + return ( + + brand logo +

+ Unirep Social TW +

+ + ) +} + +function DesktopLayoutHeader() { + const navigate = useNavigate() + + const goBack = () => { + if (window.history.state && window.history.state.idx > 0) { + navigate(-1) + } else { + navigate('/') + } + } + + const location = useLocation() + + const headerText = getHeaderTextByPath(location.pathname) + + const isHomePage = useMatch('/') + + return ( +
+
+ {!isHomePage && ( + + )} +

+ {headerText} +

+
+
+
+ ) +} + +function getHeaderTextByPath(path: string): string { + switch (path) { + case PATHS.HOME: { + return '貼文主頁' + } + case PATHS.ABOUT_US: { + return '平台說明' + } + case PATHS.NOTIFICATION: { + return '通知中心' + } + case PATHS.PROFILE: { + return '我的帳號' + } + case PATHS.HISTORY: { + return '歷史紀錄' + } + case PATHS.REPUTATION: { + return '聲譽分數' + } + default: { + return '' + } + } +} diff --git a/packages/frontend/src/routes/app/layout.mobile.tsx b/packages/frontend/src/routes/app/layout.mobile.tsx new file mode 100644 index 00000000..e3a17215 --- /dev/null +++ b/packages/frontend/src/routes/app/layout.mobile.tsx @@ -0,0 +1,117 @@ +import Logo from '@/assets/img/logo.png' +import { ReactComponent as ArrowLeftIcon } from '@/assets/svg/arrow-left.svg' +import { PATHS } from '@/constants/paths' +import { ErrorDialog } from '@/features/auth' +import { ActionNotification, EpochInfo } from '@/features/core' +import { + AdjudicationNotification, + CheckInNotification, +} from '@/features/reporting' +import { MainBottomNav, NotificationContainer } from '@/features/shared' +import { ForbidActionDialog } from '@/features/shared/components/Dialog/ForbidActionDialog' +import { + closeForbidActionDialog, + useDialogStore, +} from '@/features/shared/stores/dialog' +import { Outlet, useLocation, useMatch, useNavigate } from 'react-router-dom' + +export default function MobileAppLayout() { + const isForbidActionDialogOpen = useDialogStore( + (state) => state.forbidAction, + ) + + return ( +
+
+ +
+ +
+
+ + + + + + + +
+ ) +} + +function MobileLayoutHeader() { + const navigate = useNavigate() + + const goBack = () => { + if (window.history.state && window.history.state.idx > 0) { + navigate(-1) + } else { + navigate('/') + } + } + + const location = useLocation() + + const headerText = getHeaderTextByPath(location.pathname) + + const isHomePage = useMatch('/') + + const isPostPage = useMatch('/posts/:id') + + const isContainingPosts = isHomePage || isPostPage + + return ( +
+
+ {!isHomePage && ( + + )} + {isContainingPosts && ( + brand logo + )} +

+ {headerText} +

+
+ {isContainingPosts && ( +
+
+ +
+ +
+ )} +
+ ) +} + +function getHeaderTextByPath(path: string): string { + switch (path) { + case PATHS.ABOUT_US: { + return '平台說明' + } + case PATHS.NOTIFICATION: { + return '通知中心' + } + case PATHS.PROFILE: { + return '我的帳號' + } + case PATHS.HISTORY: { + return '歷史紀錄' + } + case PATHS.REPUTATION: { + return '信譽分數' + } + default: { + return 'Unirep Social TW' + } + } +} diff --git a/packages/frontend/src/routes/app/layout.tsx b/packages/frontend/src/routes/app/layout.tsx index a100a774..bba7c68d 100644 --- a/packages/frontend/src/routes/app/layout.tsx +++ b/packages/frontend/src/routes/app/layout.tsx @@ -1,281 +1,12 @@ -import Logo from '@/assets/img/logo.png' -import { ReactComponent as ArrowLeftIcon } from '@/assets/svg/arrow-left.svg' -import { ReactComponent as BellIcon } from '@/assets/svg/bell.svg' -import { ReactComponent as HomeIcon } from '@/assets/svg/home.svg' -import { ReactComponent as PersonCircleIcon } from '@/assets/svg/person-circle.svg' -import { ReactComponent as SearchIcon } from '@/assets/svg/search.svg' -import { ReactComponent as StarIcon } from '@/assets/svg/star.svg' -import { ErrorDialog } from '@/features/auth' -import { ActionNotification, EpochInfo } from '@/features/core' -import { - AdjudicationNotification, - CheckInNotification, -} from '@/features/reporting' import { useBackgroundReputationClaim } from '@/features/reporting/hooks/useBackgroundReputationClaim/useBackgroundReputationClaim' -import { MobileBottomNav } from '@/features/shared' -import { ForbidActionDialog } from '@/features/shared/components/Dialog/ForbidActionDialog' -import { - closeForbidActionDialog, - useDialogStore, -} from '@/features/shared/stores/dialog' import { useMediaQuery } from '@uidotdev/usehooks' -import clsx from 'clsx' -import { - Link, - NavLink, - Outlet, - useLocation, - useMatch, - useNavigate, -} from 'react-router-dom' - -function NotificationContainer({ children }: { children: React.ReactNode }) { - return ( -
- {children} -
- ) -} +import DesktopAppLayout from './layout.desktop' +import MobileAppLayout from './layout.mobile' export default function AppLayout() { - const matchPath = useMatch('/') - - const location = useLocation() - - const navigate = useNavigate() - useBackgroundReputationClaim() - const headerTextOnDesktop = getDesktopHeaderTextByPath(location.pathname) - const headerTextOnMobile = getMobileHeaderTextByPath(location.pathname) - - const goBack = () => { - if (window.history.state && window.history.state.idx > 0) { - navigate(-1) - } else { - navigate('/') - } - } - - const isSmallDevice = useMediaQuery('only screen and (max-width : 1024px)') - const isShowingHeaderLogoOnSmallDevice = - location.pathname !== '/profile' && - location.pathname !== '/profile/reputation' && - location.pathname !== '/profile/history' - const isShowingGoBackButtonOnDesktop = - !matchPath && - location.pathname !== '/profile' && - location.pathname !== '/profile/reputation' && - location.pathname !== '/profile/history' - - const isForbidActionDialogOpen = useDialogStore( - (state) => state.forbidAction, - ) - - if (isSmallDevice) { - return ( -
-
-
- {!matchPath && ( - - )} - {isShowingHeaderLogoOnSmallDevice && ( - brand logo - )} -

- {headerTextOnMobile} -

-
-
-
- -
- -
-
- -
- - -
- - - - -
- ) - } else { - return ( -
-
-
-
-
- - -
-
-
-
-
-

- {headerTextOnDesktop} -

- {isShowingGoBackButtonOnDesktop && ( - - )} -
-
- -
-
-
-
- - brand logo -

- Unirep Social TW -

- - -
- - -
-
-
- -
- - - - - -
- ) - } -} - -function getDesktopHeaderTextByPath(path: string): string { - if (path === '/') { - return 'Home' - } else if (path.startsWith('/posts')) { - return 'Posts' - } else if (path === '/profile') { - return 'Profile 我的帳號' - } else if (path === '/profile/history') { - return 'Profile 我的帳號 > 歷史紀錄' - } else if (path === '/profile/reputation') { - return 'Profile 我的帳號 > 信譽分數' - } else { - return '' - } -} + const isMobile = useMediaQuery('only screen and (max-width : 1023px)') -function getMobileHeaderTextByPath(path: string): string { - if (path === '/profile') { - return '我的帳號' - } else if (path === '/profile/history') { - return '歷史紀錄' - } else if (path === '/profile/reputation') { - return '信譽分數' - } else { - return 'Unirep Social TW' - } + return isMobile ? : } diff --git a/packages/frontend/src/routes/router.tsx b/packages/frontend/src/routes/router.tsx index 49535db7..f95ef23e 100644 --- a/packages/frontend/src/routes/router.tsx +++ b/packages/frontend/src/routes/router.tsx @@ -1,23 +1,24 @@ +import { PATHS } from '@/constants/paths' +import { ProtectedRoute } from '@/features/auth' +import { ErrorBoundary, ResetStorage } from '@/features/shared' import { RouterProvider, createBrowserRouter, redirect } from 'react-router-dom' -import OnboardingLayout from './onboarding/layout' -import LoginPage from './onboarding/login/page' -import LoginInternalPage from './onboarding/login/internal/page' -import SignupPage from './onboarding/signup/page' -import SignupInternalPage from './onboarding/signup/internal/page' -import WelcomePage from './welcome/page' -import TwitterCallbackPage from './twitter/callback/page' +import AboutPage from './app/about/page' import AppLayout from './app/layout' -import PostListPage from './app/posts/page' import PostPage from './app/posts/[id]/page' +import PostListPage from './app/posts/page' +import HistoryPage from './app/profile/history/page' import ProfileLayout from './app/profile/layout' import ProfilePage from './app/profile/page' -import HistoryPage from './app/profile/history/page' import ReputationPage from './app/profile/reputation/page' import FullScreenLayout from './full-screen/layout' import WritePostPage from './full-screen/write-post/page' -import { ProtectedRoute } from '@/features/auth' -import { ErrorBoundary, ResetStorage } from '@/features/shared' -import { PATHS } from '@/constants/paths' +import OnboardingLayout from './onboarding/layout' +import LoginInternalPage from './onboarding/login/internal/page' +import LoginPage from './onboarding/login/page' +import SignupInternalPage from './onboarding/signup/internal/page' +import SignupPage from './onboarding/signup/page' +import TwitterCallbackPage from './twitter/callback/page' +import WelcomePage from './welcome/page' const router = createBrowserRouter([ { @@ -51,65 +52,66 @@ const router = createBrowserRouter([ ], }, { - element: ( - - - - ), - errorElement: , + element: , + errorElement: , children: [ { - path: PATHS.HOME, - element: , - }, - { - path: PATHS.VIEW_POST, - element: , - }, - { - element: , + element: , + errorElement: , children: [ { - path: PATHS.PROFILE, - element: , + path: PATHS.HOME, + element: , + }, + { + path: PATHS.VIEW_POST, + element: , }, { - path: PATHS.REPUTATION, - element: , + element: , + children: [ + { + path: PATHS.PROFILE, + element: , + }, + { + path: PATHS.REPUTATION, + element: , + }, + { + path: PATHS.HISTORY, + element: , + }, + ], }, { - path: PATHS.HISTORTY, - element: , + path: PATHS.NOTIFICATION, + loader: () => { + return redirect(PATHS.HOME) + }, }, ], }, + { + path: PATHS.ABOUT_US, + element: , + }, ], }, { element: , children: [ { - path: PATHS.WRITE_POST, - element: ( - - - - ), + element: , + children: [ + { + path: PATHS.WRITE_POST, + element: , + }, + ], }, ], }, - { - path: '/explore', - loader: () => { - return redirect(PATHS.HOME) - }, - }, - { - path: '/notification', - loader: () => { - return redirect(PATHS.HOME) - }, - }, ]) export default function Router() { diff --git a/packages/frontend/tailwind.config.js b/packages/frontend/tailwind.config.js index 1bfcf312..e86c41a0 100644 --- a/packages/frontend/tailwind.config.js +++ b/packages/frontend/tailwind.config.js @@ -32,7 +32,9 @@ module.exports = { '[data-theme=dark]' ], primary: '#FF892A', + 'primary-content': '#FFFFFF', secondary: '#52ACBC', + 'secondary-content': '#FFFFFF', accent: '#3F3F3F', error: '#FF1D1D', '--rounded-btn': '0.75rem', diff --git a/yarn.lock b/yarn.lock index 1d6e413d..492c2ea6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4673,6 +4673,13 @@ resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-4.2.2.tgz#771c4a768d94eb5922cc202a3009558204df0cea" integrity sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ== +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/dns-packet@*", "@types/dns-packet@^5.6.5": version "5.6.5" resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.6.5.tgz#49fc29a40f5d30227ed028fa1ee82601d3745e15" @@ -4696,6 +4703,13 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/estree-jsx@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + dependencies: + "@types/estree" "*" + "@types/estree@*", "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" @@ -4706,6 +4720,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.19.0" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" @@ -4733,6 +4752,13 @@ dependencies: "@types/node" "*" +"@types/hast@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" @@ -4810,6 +4836,13 @@ resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" @@ -4830,6 +4863,11 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + "@types/multicast-dns@^7.2.1": version "7.2.4" resolved "https://registry.yarnpkg.com/@types/multicast-dns/-/multicast-dns-7.2.4.tgz#50bc357f832c884ad8540e372169108855bceb05" @@ -5049,6 +5087,16 @@ resolved "https://registry.yarnpkg.com/@types/ungap__structured-clone/-/ungap__structured-clone-1.2.0.tgz#12b9fd4ab3e6a82292d60048492b05eb75b4a48f" integrity sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/unist@^2.0.0": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + "@types/ws@^8.2.2", "@types/ws@^8.5.4", "@types/ws@^8.5.5": version "8.5.10" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" @@ -5171,7 +5219,7 @@ resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf" integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg== -"@ungap/structured-clone@^1.2.0": +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== @@ -6143,6 +6191,11 @@ babel-preset-react-app@^10.0.1: babel-plugin-macros "^3.1.0" babel-plugin-transform-react-remove-prop-types "^0.4.24" +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -6629,6 +6682,11 @@ cborg@^4.0.0, cborg@^4.0.1: resolved "https://registry.yarnpkg.com/cborg/-/cborg-4.2.0.tgz#e14e36bb081a0044e78f875d440accb4d4e6aa97" integrity sha512-q6cFW5m3KxfP/9xGI3yGLaC1l5DP6DWM9IvjiJojnIwohL5CQDl02EXViPV852mOfQo+7PJGPN01MI87vFGzyA== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chai-as-promised@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" @@ -6706,6 +6764,26 @@ char-regex@^2.0.0: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -6980,6 +7058,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + command-exists@^1.2.8: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" @@ -7726,6 +7809,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.0.0: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -7749,6 +7839,13 @@ decimal.js@^10.2.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -7881,7 +7978,7 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -dequal@^2.0.3: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -7924,6 +8021,13 @@ detect-port-alt@^1.1.6: address "^1.0.1" debug "^2.6.0" +devlop@^1.0.0, devlop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + dezalgo@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" @@ -8760,6 +8864,11 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-util-is-identifier-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== + estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -9022,6 +9131,11 @@ express@^4.17.3, express@^4.18.1, express@^4.18.2: utils-merge "1.0.1" vary "~1.1.2" +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -10052,6 +10166,34 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hast-util-to-jsx-runtime@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" + integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + dependencies: + "@types/estree" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + comma-separated-tokens "^2.0.0" + devlop "^1.0.0" + estree-util-is-identifier-name "^3.0.0" + hast-util-whitespace "^3.0.0" + mdast-util-mdx-expression "^2.0.0" + mdast-util-mdx-jsx "^3.0.0" + mdast-util-mdxjs-esm "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^1.0.0" + unist-util-position "^5.0.0" + vfile-message "^4.0.0" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -10193,6 +10335,11 @@ html-minifier-terser@^6.0.2: relateurl "^0.2.7" terser "^5.10.0" +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + html-webpack-plugin@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" @@ -10475,6 +10622,11 @@ init-package-json@3.0.2, init-package-json@^3.0.2: validate-npm-package-license "^3.0.4" validate-npm-package-name "^4.0.0" +inline-style-parser@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" + integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== + inline-style-prefixer@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-7.0.0.tgz#991d550735d42069f528ac1bcdacd378d1305442" @@ -10723,6 +10875,19 @@ ipns@^7.0.1: uint8arraylist "^2.4.3" uint8arrays "^5.0.1" +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -10798,6 +10963,11 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -10849,6 +11019,11 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -10938,6 +11113,11 @@ is-plain-obj@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -12915,6 +13095,11 @@ long@^5.0.0: resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -13100,6 +13285,111 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdast-util-from-markdown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + +mdast-util-mdx-expression@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-mdx-jsx@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" + integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + devlop "^1.1.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-stringify-position "^4.0.0" + vfile-message "^4.0.0" + +mdast-util-mdxjs-esm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.0.0" + +mdast-util-phrasing@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== + dependencies: + "@types/mdast" "^4.0.0" + unist-util-is "^6.0.0" + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdast-util-to-markdown@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.1.tgz#6fdb72cd54ee4e6745e138db003609978a322e94" + integrity sha512-OrkcCoqAkEg9b1ykXBrA0ehRc8H4fGU/03cACmW2xXzau1+dIdS+qJugh1Cqex3hMumSBgSE/5pc7uqP12nLAw== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^4.0.0" + mdast-util-to-string "^4.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-decode-string "^2.0.0" + unist-util-visit "^5.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== + dependencies: + "@types/mdast" "^4.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -13176,6 +13466,200 @@ methods@^1.1.2, methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micromark-core-commonmark@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d" + integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== + dependencies: + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-factory-destination "^2.0.0" + micromark-factory-label "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-factory-title "^2.0.0" + micromark-factory-whitespace "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-classify-character "^2.0.0" + micromark-util-html-tag-name "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-destination@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" + integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-label@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" + integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== + dependencies: + devlop "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-space@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" + integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-title@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" + integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-factory-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" + integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== + dependencies: + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-character@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" + integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-chunked@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" + integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-classify-character@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" + integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-combine-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" + integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== + dependencies: + micromark-util-chunked "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-decode-numeric-character-reference@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" + integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-decode-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" + integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" + integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== + +micromark-util-html-tag-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" + integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== + +micromark-util-normalize-identifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" + integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== + dependencies: + micromark-util-symbol "^2.0.0" + +micromark-util-resolve-all@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" + integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== + dependencies: + micromark-util-types "^2.0.0" + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" + integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-subtokenize@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5" + integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== + dependencies: + devlop "^1.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" + integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== + +micromark-util-types@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" + integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== + +micromark@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" + integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + micromark-core-commonmark "^2.0.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-chunked "^2.0.0" + micromark-util-combine-extensions "^2.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-resolve-all "^2.0.0" + micromark-util-sanitize-uri "^2.0.0" + micromark-util-subtokenize "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -13489,7 +13973,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -14543,6 +15027,20 @@ parse-duration@^1.0.0, parse-duration@^1.0.2: resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-1.1.0.tgz#5192084c5d8f2a3fd676d04a451dbd2e05a1819c" integrity sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ== +parse-entities@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -15573,6 +16071,11 @@ propagate@^2.0.0: resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -15871,6 +16374,22 @@ react-lines-ellipsis@^0.15.4: resolved "https://registry.yarnpkg.com/react-lines-ellipsis/-/react-lines-ellipsis-0.15.4.tgz#2bff3089d62a354fa4ccf630d9f755562e260386" integrity sha512-bIcoVRulN6RdBb9QByRPan7vDjxJv4jhII9eMs5ZkCK4QYEbPiY+8g+IM7/B0kb8UbRRRgR7KwpPWI9j8d2FYg== +react-markdown@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-9.0.1.tgz#c05ddbff67fd3b3f839f8c648e6fb35d022397d1" + integrity sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + react-native-fetch-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" @@ -16251,6 +16770,27 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== +remark-parse@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-from-markdown "^2.0.0" + micromark-util-types "^2.0.0" + unified "^11.0.0" + +remark-rehype@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" + integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + mdast-util-to-hast "^13.0.0" + unified "^11.0.0" + vfile "^6.0.0" + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -17038,6 +17578,11 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -17257,16 +17802,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -17344,6 +17880,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -17353,14 +17897,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -17437,6 +17974,13 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== +style-to-object@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" + integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== + dependencies: + inline-style-parser "0.2.4" + stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" @@ -17881,11 +18425,21 @@ treeverse@^3.0.0: resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" @@ -18277,6 +18831,19 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unified@^11.0.0: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -18326,6 +18893,44 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + universal-user-agent@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" @@ -18506,6 +19111,22 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -19067,7 +19688,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -19085,15 +19706,6 @@ wrap-ansi@^6.0.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -19327,3 +19939,8 @@ zustand@^4.5.2: integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g== dependencies: use-sync-external-store "1.2.0" + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==