From db0fc94b39348127b3236afe26aee6deaed75463 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 16 Sep 2025 18:21:23 +0800 Subject: [PATCH 01/85] chore: change api to support try apps --- web/service/share.ts | 138 ++++++++++++++++++++++++------------------- 1 file changed, 78 insertions(+), 60 deletions(-) diff --git a/web/service/share.ts b/web/service/share.ts index f1e512564b..792d5e80d3 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -35,21 +35,39 @@ import type { import type { ChatConfig } from '@/app/components/base/chat/types' import type { AccessMode } from '@/models/access-control' -function getAction(action: 'get' | 'post' | 'del' | 'patch', isInstalledApp: boolean) { +export enum AppSourceType { + webApp = 'webApp', + installedApp = 'installedApp', + tryApp = 'tryApp', +} + +const apiPrefix = { + [AppSourceType.webApp]: '', + [AppSourceType.installedApp]: 'installed-apps', + [AppSourceType.tryApp]: 'try-apps', +} + +function getIsPublicAPI(appSourceType: AppSourceType) { + return appSourceType === AppSourceType.webApp +} + +function getAction(action: 'get' | 'post' | 'del' | 'patch', appSourceType: AppSourceType) { + const isNeedLogin = getIsPublicAPI(appSourceType) switch (action) { case 'get': - return isInstalledApp ? consoleGet : get + return isNeedLogin ? consoleGet : get case 'post': - return isInstalledApp ? consolePost : post + return isNeedLogin ? consolePost : post case 'patch': - return isInstalledApp ? consolePatch : patch + return isNeedLogin ? consolePatch : patch case 'del': - return isInstalledApp ? consoleDel : del + return isNeedLogin ? consoleDel : del } } -export function getUrl(url: string, isInstalledApp: boolean, installedAppId: string) { - return isInstalledApp ? `installed-apps/${installedAppId}/${url.startsWith('/') ? url.slice(1) : url}` : url +export function getUrl(url: string, appSourceType: AppSourceType, appId: string) { + const hasPrefix = appSourceType !== AppSourceType.webApp + return hasPrefix ? `${apiPrefix[appSourceType]}/${appId}/${url.startsWith('/') ? url.slice(1) : url}` : url } export const sendChatMessage = async (body: Record, { onData, onCompleted, onThought, onFile, onError, getAbortController, onMessageEnd, onMessageReplace, onTTSChunk, onTTSEnd }: { @@ -63,17 +81,17 @@ export const sendChatMessage = async (body: Record, { onData, onCom getAbortController?: (abortController: AbortController) => void onTTSChunk?: IOnTTSChunk onTTSEnd?: IOnTTSEnd -}, isInstalledApp: boolean, installedAppId = '') => { - return ssePost(getUrl('chat-messages', isInstalledApp, installedAppId), { +}, appSourceType: AppSourceType, installedAppId = '') => { + return ssePost(getUrl('chat-messages', appSourceType, installedAppId), { body: { ...body, response_mode: 'streaming', }, - }, { onData, onCompleted, onThought, onFile, isPublicAPI: !isInstalledApp, onError, getAbortController, onMessageEnd, onMessageReplace, onTTSChunk, onTTSEnd }) + }, { onData, onCompleted, onThought, onFile, isPublicAPI: !getIsPublicAPI(appSourceType), onError, getAbortController, onMessageEnd, onMessageReplace, onTTSChunk, onTTSEnd }) } -export const stopChatMessageResponding = async (appId: string, taskId: string, isInstalledApp: boolean, installedAppId = '') => { - return getAction('post', isInstalledApp)(getUrl(`chat-messages/${taskId}/stop`, isInstalledApp, installedAppId)) +export const stopChatMessageResponding = async (appId: string, taskId: string, appSourceType: AppSourceType, installedAppId = '') => { + return getAction('post', appSourceType)(getUrl(`chat-messages/${taskId}/stop`, appSourceType, installedAppId)) } export const sendCompletionMessage = async (body: Record, { onData, onCompleted, onError, onMessageReplace }: { @@ -81,13 +99,13 @@ export const sendCompletionMessage = async (body: Record, { onData, onCompleted: IOnCompleted onError: IOnError onMessageReplace: IOnMessageReplace -}, isInstalledApp: boolean, installedAppId = '') => { - return ssePost(getUrl('completion-messages', isInstalledApp, installedAppId), { +}, appSourceType: AppSourceType, installedAppId = '') => { + return ssePost(getUrl('completion-messages', appSourceType, installedAppId), { body: { ...body, response_mode: 'streaming', }, - }, { onData, onCompleted, isPublicAPI: !isInstalledApp, onError, onMessageReplace }) + }, { onData, onCompleted, isPublicAPI: !appSourceType, onError, onMessageReplace }) } export const sendWorkflowMessage = async ( @@ -119,10 +137,10 @@ export const sendWorkflowMessage = async ( onTextChunk: IOnTextChunk onTextReplace: IOnTextReplace }, - isInstalledApp: boolean, + appSourceType: AppSourceType, installedAppId = '', ) => { - return ssePost(getUrl('workflows/run', isInstalledApp, installedAppId), { + return ssePost(getUrl('workflows/run', appSourceType, installedAppId), { body: { ...body, response_mode: 'streaming', @@ -131,7 +149,7 @@ export const sendWorkflowMessage = async ( onNodeStarted, onWorkflowStarted, onWorkflowFinished, - isPublicAPI: !isInstalledApp, + isPublicAPI: getIsPublicAPI(appSourceType), onNodeFinished, onIterationStart, onIterationNext, @@ -148,32 +166,32 @@ export const fetchAppInfo = async () => { return get('/site') as Promise } -export const fetchConversations = async (isInstalledApp: boolean, installedAppId = '', last_id?: string, pinned?: boolean, limit?: number) => { - return getAction('get', isInstalledApp)(getUrl('conversations', isInstalledApp, installedAppId), { params: { limit: limit || 20, ...(last_id ? { last_id } : {}), ...(pinned !== undefined ? { pinned } : {}) } }) as Promise +export const fetchConversations = async (appSourceType: AppSourceType, installedAppId = '', last_id?: string, pinned?: boolean, limit?: number) => { + return getAction('get', appSourceType)(getUrl('conversations', appSourceType, installedAppId), { params: { limit: limit || 20, ...(last_id ? { last_id } : {}), ...(pinned !== undefined ? { pinned } : {}) } }) as Promise } -export const pinConversation = async (isInstalledApp: boolean, installedAppId = '', id: string) => { - return getAction('patch', isInstalledApp)(getUrl(`conversations/${id}/pin`, isInstalledApp, installedAppId)) +export const pinConversation = async (appSourceType: AppSourceType, installedAppId = '', id: string) => { + return getAction('patch', appSourceType)(getUrl(`conversations/${id}/pin`, appSourceType, installedAppId)) } -export const unpinConversation = async (isInstalledApp: boolean, installedAppId = '', id: string) => { - return getAction('patch', isInstalledApp)(getUrl(`conversations/${id}/unpin`, isInstalledApp, installedAppId)) +export const unpinConversation = async (appSourceType: AppSourceType, installedAppId = '', id: string) => { + return getAction('patch', appSourceType)(getUrl(`conversations/${id}/unpin`, appSourceType, installedAppId)) } -export const delConversation = async (isInstalledApp: boolean, installedAppId = '', id: string) => { - return getAction('del', isInstalledApp)(getUrl(`conversations/${id}`, isInstalledApp, installedAppId)) +export const delConversation = async (appSourceType: AppSourceType, installedAppId = '', id: string) => { + return getAction('del', appSourceType)(getUrl(`conversations/${id}`, appSourceType, installedAppId)) } -export const renameConversation = async (isInstalledApp: boolean, installedAppId = '', id: string, name: string) => { - return getAction('post', isInstalledApp)(getUrl(`conversations/${id}/name`, isInstalledApp, installedAppId), { body: { name } }) +export const renameConversation = async (appSourceType: AppSourceType, installedAppId = '', id: string, name: string) => { + return getAction('post', appSourceType)(getUrl(`conversations/${id}/name`, appSourceType, installedAppId), { body: { name } }) } -export const generationConversationName = async (isInstalledApp: boolean, installedAppId = '', id: string) => { - return getAction('post', isInstalledApp)(getUrl(`conversations/${id}/name`, isInstalledApp, installedAppId), { body: { auto_generate: true } }) as Promise +export const generationConversationName = async (appSourceType: AppSourceType, installedAppId = '', id: string) => { + return getAction('post', appSourceType)(getUrl(`conversations/${id}/name`, appSourceType, installedAppId), { body: { auto_generate: true } }) as Promise } -export const fetchChatList = async (conversationId: string, isInstalledApp: boolean, installedAppId = '') => { - return getAction('get', isInstalledApp)(getUrl('messages', isInstalledApp, installedAppId), { params: { conversation_id: conversationId, limit: 20, last_id: '' } }) as any +export const fetchChatList = async (conversationId: string, appSourceType: AppSourceType, installedAppId = '') => { + return getAction('get', appSourceType)(getUrl('messages', appSourceType, installedAppId), { params: { conversation_id: conversationId, limit: 20, last_id: '' } }) as any } // Abandoned API interface @@ -182,12 +200,12 @@ export const fetchChatList = async (conversationId: string, isInstalledApp: bool // } // init value. wait for server update -export const fetchAppParams = async (isInstalledApp: boolean, installedAppId = '') => { - return (getAction('get', isInstalledApp))(getUrl('parameters', isInstalledApp, installedAppId)) as Promise +export const fetchAppParams = async (appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('get', appSourceType))(getUrl('parameters', appSourceType, installedAppId)) as Promise } export const fetchWebSAMLSSOUrl = async (appCode: string, redirectUrl: string) => { - return (getAction('get', false))(getUrl('/enterprise/sso/saml/login', false, ''), { + return (getAction('get', AppSourceType.webApp))(getUrl('/enterprise/sso/saml/login', AppSourceType.webApp, ''), { params: { app_code: appCode, redirect_url: redirectUrl, @@ -196,7 +214,7 @@ export const fetchWebSAMLSSOUrl = async (appCode: string, redirectUrl: string) = } export const fetchWebOIDCSSOUrl = async (appCode: string, redirectUrl: string) => { - return (getAction('get', false))(getUrl('/enterprise/sso/oidc/login', false, ''), { + return (getAction('get', AppSourceType.webApp))(getUrl('/enterprise/sso/oidc/login', AppSourceType.webApp, ''), { params: { app_code: appCode, redirect_url: redirectUrl, @@ -206,7 +224,7 @@ export const fetchWebOIDCSSOUrl = async (appCode: string, redirectUrl: string) = } export const fetchWebOAuth2SSOUrl = async (appCode: string, redirectUrl: string) => { - return (getAction('get', false))(getUrl('/enterprise/sso/oauth2/login', false, ''), { + return (getAction('get', AppSourceType.webApp))(getUrl('/enterprise/sso/oauth2/login', AppSourceType.webApp, ''), { params: { app_code: appCode, redirect_url: redirectUrl, @@ -215,7 +233,7 @@ export const fetchWebOAuth2SSOUrl = async (appCode: string, redirectUrl: string) } export const fetchMembersSAMLSSOUrl = async (appCode: string, redirectUrl: string) => { - return (getAction('get', false))(getUrl('/enterprise/sso/members/saml/login', false, ''), { + return (getAction('get', AppSourceType.webApp))(getUrl('/enterprise/sso/members/saml/login', AppSourceType.webApp, ''), { params: { app_code: appCode, redirect_url: redirectUrl, @@ -224,7 +242,7 @@ export const fetchMembersSAMLSSOUrl = async (appCode: string, redirectUrl: strin } export const fetchMembersOIDCSSOUrl = async (appCode: string, redirectUrl: string) => { - return (getAction('get', false))(getUrl('/enterprise/sso/members/oidc/login', false, ''), { + return (getAction('get', AppSourceType.webApp))(getUrl('/enterprise/sso/members/oidc/login', AppSourceType.webApp, ''), { params: { app_code: appCode, redirect_url: redirectUrl, @@ -234,7 +252,7 @@ export const fetchMembersOIDCSSOUrl = async (appCode: string, redirectUrl: strin } export const fetchMembersOAuth2SSOUrl = async (appCode: string, redirectUrl: string) => { - return (getAction('get', false))(getUrl('/enterprise/sso/members/oauth2/login', false, ''), { + return (getAction('get', AppSourceType.webApp))(getUrl('/enterprise/sso/members/oauth2/login', AppSourceType.webApp, ''), { params: { app_code: appCode, redirect_url: redirectUrl, @@ -242,48 +260,48 @@ export const fetchMembersOAuth2SSOUrl = async (appCode: string, redirectUrl: str }) as Promise<{ url: string }> } -export const fetchAppMeta = async (isInstalledApp: boolean, installedAppId = '') => { - return (getAction('get', isInstalledApp))(getUrl('meta', isInstalledApp, installedAppId)) as Promise +export const fetchAppMeta = async (appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('get', appSourceType))(getUrl('meta', appSourceType, installedAppId)) as Promise } -export const updateFeedback = async ({ url, body }: { url: string; body: FeedbackType }, isInstalledApp: boolean, installedAppId = '') => { - return (getAction('post', isInstalledApp))(getUrl(url, isInstalledApp, installedAppId), { body }) +export const updateFeedback = async ({ url, body }: { url: string; body: FeedbackType }, appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('post', appSourceType))(getUrl(url, appSourceType, installedAppId), { body }) } -export const fetchMoreLikeThis = async (messageId: string, isInstalledApp: boolean, installedAppId = '') => { - return (getAction('get', isInstalledApp))(getUrl(`/messages/${messageId}/more-like-this`, isInstalledApp, installedAppId), { +export const fetchMoreLikeThis = async (messageId: string, appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('get', appSourceType))(getUrl(`/messages/${messageId}/more-like-this`, appSourceType, installedAppId), { params: { response_mode: 'blocking', }, }) } -export const saveMessage = (messageId: string, isInstalledApp: boolean, installedAppId = '') => { - return (getAction('post', isInstalledApp))(getUrl('/saved-messages', isInstalledApp, installedAppId), { body: { message_id: messageId } }) +export const saveMessage = (messageId: string, appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('post', appSourceType))(getUrl('/saved-messages', appSourceType, installedAppId), { body: { message_id: messageId } }) } -export const fetchSavedMessage = async (isInstalledApp: boolean, installedAppId = '') => { - return (getAction('get', isInstalledApp))(getUrl('/saved-messages', isInstalledApp, installedAppId)) +export const fetchSavedMessage = async (appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('get', appSourceType))(getUrl('/saved-messages', appSourceType, installedAppId)) } -export const removeMessage = (messageId: string, isInstalledApp: boolean, installedAppId = '') => { - return (getAction('del', isInstalledApp))(getUrl(`/saved-messages/${messageId}`, isInstalledApp, installedAppId)) +export const removeMessage = (messageId: string, appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('del', appSourceType))(getUrl(`/saved-messages/${messageId}`, appSourceType, installedAppId)) } -export const fetchSuggestedQuestions = (messageId: string, isInstalledApp: boolean, installedAppId = '') => { - return (getAction('get', isInstalledApp))(getUrl(`/messages/${messageId}/suggested-questions`, isInstalledApp, installedAppId)) +export const fetchSuggestedQuestions = (messageId: string, appSourceType: AppSourceType, installedAppId = '') => { + return (getAction('get', appSourceType))(getUrl(`/messages/${messageId}/suggested-questions`, appSourceType, installedAppId)) } -export const audioToText = (url: string, isPublicAPI: boolean, body: FormData) => { - return (getAction('post', !isPublicAPI))(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ text: string }> +export const audioToText = (url: string, appSourceType: AppSourceType, body: FormData) => { + return (getAction('post', appSourceType))(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ text: string }> } -export const textToAudio = (url: string, isPublicAPI: boolean, body: FormData) => { - return (getAction('post', !isPublicAPI))(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ data: string }> +export const textToAudio = (url: string, appSourceType: AppSourceType, body: FormData) => { + return (getAction('post', appSourceType))(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ data: string }> } -export const textToAudioStream = (url: string, isPublicAPI: boolean, header: { content_type: string }, body: { streaming: boolean; voice?: string; message_id?: string; text?: string | null | undefined }) => { - return (getAction('post', !isPublicAPI))(url, { body, header }, { needAllResponseContent: true }) +export const textToAudioStream = (url: string, appSourceType: AppSourceType, header: { content_type: string }, body: { streaming: boolean; voice?: string; message_id?: string; text?: string | null | undefined }) => { + return (getAction('post', appSourceType))(url, { body, header }, { needAllResponseContent: true }) } export const fetchAccessToken = async ({ appCode, userId, webAppAccessToken }: { appCode: string, userId?: string, webAppAccessToken?: string | null }) => { From 5280bffde266fa2218f0996a545c54dd09959d42 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 17 Sep 2025 11:17:12 +0800 Subject: [PATCH 02/85] feat: change api to new --- .../app/text-generate/item/index.tsx | 8 ++++--- web/app/components/base/audio-btn/audio.ts | 4 ++-- .../chat/chat-with-history/chat-wrapper.tsx | 7 ++++-- .../base/chat/chat-with-history/hooks.tsx | 24 ++++++++++--------- .../chat/embedded-chatbot/chat-wrapper.tsx | 7 ++++-- .../base/chat/embedded-chatbot/hooks.tsx | 14 ++++++----- web/app/components/base/voice-input/index.tsx | 4 ++-- .../share/text-generation/index.tsx | 11 +++++---- .../share/text-generation/result/index.tsx | 6 ++--- web/service/use-explore.ts | 6 ++--- web/service/use-share.ts | 6 ++--- 11 files changed, 55 insertions(+), 42 deletions(-) diff --git a/web/app/components/app/text-generate/item/index.tsx b/web/app/components/app/text-generate/item/index.tsx index 92d86351e0..5b12e9a669 100644 --- a/web/app/components/app/text-generate/item/index.tsx +++ b/web/app/components/app/text-generate/item/index.tsx @@ -21,7 +21,7 @@ import { Markdown } from '@/app/components/base/markdown' import Loading from '@/app/components/base/loading' import Toast from '@/app/components/base/toast' import type { FeedbackType } from '@/app/components/base/chat/chat/type' -import { fetchMoreLikeThis, updateFeedback } from '@/service/share' +import { AppSourceType, fetchMoreLikeThis, updateFeedback } from '@/service/share' import { fetchTextGenerationMessage } from '@/service/debug' import { useStore as useAppStore } from '@/app/components/app/store' import WorkflowProcessItem from '@/app/components/base/chat/chat/answer/workflow-process' @@ -111,8 +111,10 @@ const GenerationItem: FC = ({ const setCurrentLogItem = useAppStore(s => s.setCurrentLogItem) const setShowPromptLogModal = useAppStore(s => s.setShowPromptLogModal) + const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp + const handleFeedback = async (childFeedback: FeedbackType) => { - await updateFeedback({ url: `/messages/${childMessageId}/feedbacks`, body: { rating: childFeedback.rating } }, isInstalledApp, installedAppId) + await updateFeedback({ url: `/messages/${childMessageId}/feedbacks`, body: { rating: childFeedback.rating } }, appSourceType, installedAppId) setChildFeedback(childFeedback) } @@ -144,7 +146,7 @@ const GenerationItem: FC = ({ return } startQuerying() - const res: any = await fetchMoreLikeThis(messageId as string, isInstalledApp, installedAppId) + const res: any = await fetchMoreLikeThis(messageId as string, appSourceType, installedAppId) setCompletionRes(res.answer) setChildFeedback({ rating: null, diff --git a/web/app/components/base/audio-btn/audio.ts b/web/app/components/base/audio-btn/audio.ts index 00797d04e4..6cabc186af 100644 --- a/web/app/components/base/audio-btn/audio.ts +++ b/web/app/components/base/audio-btn/audio.ts @@ -1,5 +1,5 @@ import Toast from '@/app/components/base/toast' -import { textToAudioStream } from '@/service/share' +import { AppSourceType, textToAudioStream } from '@/service/share' declare global { // eslint-disable-next-line ts/consistent-type-definitions @@ -100,7 +100,7 @@ export default class AudioPlayer { private async loadAudio() { try { - const audioResponse: any = await textToAudioStream(this.url, this.isPublic, { content_type: 'audio/mpeg' }, { + const audioResponse: any = await textToAudioStream(this.url, this.isPublic ? AppSourceType.webApp : AppSourceType.installedApp, { content_type: 'audio/mpeg' }, { message_id: this.msgId, streaming: true, voice: this.voice, diff --git a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx index cc5e46deeb..c3cd649631 100644 --- a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx +++ b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx @@ -13,6 +13,7 @@ import { InputVarType } from '@/app/components/workflow/types' import { TransferMethod } from '@/types/app' import InputsForm from '@/app/components/base/chat/chat-with-history/inputs-form' import { + AppSourceType, fetchSuggestedQuestions, getUrl, stopChatMessageResponding, @@ -53,6 +54,8 @@ const ChatWrapper = () => { initUserVariables, } = useChatWithHistoryContext() + const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp + // Semantic variable for better code readability const isHistoryConversation = !!currentConversationId @@ -142,10 +145,10 @@ const ChatWrapper = () => { } handleSend( - getUrl('chat-messages', isInstalledApp, appId || ''), + getUrl('chat-messages', appSourceType, appId || ''), data, { - onGetSuggestedQuestions: responseItemId => fetchSuggestedQuestions(responseItemId, isInstalledApp, appId), + onGetSuggestedQuestions: responseItemId => fetchSuggestedQuestions(responseItemId, appSourceType, appId), onConversationComplete: isHistoryConversation ? undefined : handleNewConversationCompleted, isPublicAPI: !isInstalledApp, }, diff --git a/web/app/components/base/chat/chat-with-history/hooks.tsx b/web/app/components/base/chat/chat-with-history/hooks.tsx index 0e8da0d26d..2dfd6ed8cb 100644 --- a/web/app/components/base/chat/chat-with-history/hooks.tsx +++ b/web/app/components/base/chat/chat-with-history/hooks.tsx @@ -20,6 +20,7 @@ import { buildChatItemTree, getProcessedSystemVariablesFromUrlParams, getRawInpu import { addFileInfos, sortAgentSorts } from '../../../tools/utils' import { getProcessedFilesFromResponse } from '@/app/components/base/file-uploader/utils' import { + AppSourceType, delConversation, fetchChatList, fetchConversations, @@ -70,6 +71,7 @@ function getFormattedChatList(messages: any[]) { export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { const isInstalledApp = useMemo(() => !!installedAppInfo, [installedAppInfo]) + const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp const appInfo = useWebAppStore(s => s.appInfo) const appParams = useWebAppStore(s => s.appParams) const appMeta = useWebAppStore(s => s.appMeta) @@ -164,17 +166,17 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { const { data: appPinnedConversationData, mutate: mutateAppPinnedConversationData } = useSWR( appId ? ['appConversationData', isInstalledApp, appId, true] : null, - () => fetchConversations(isInstalledApp, appId, undefined, true, 100), + () => fetchConversations(appSourceType, appId, undefined, true, 100), { revalidateOnFocus: false, revalidateOnReconnect: false }, ) const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR( appId ? ['appConversationData', isInstalledApp, appId, false] : null, - () => fetchConversations(isInstalledApp, appId, undefined, false, 100), + () => fetchConversations(appSourceType, appId, undefined, false, 100), { revalidateOnFocus: false, revalidateOnReconnect: false }, ) const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR( - chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, isInstalledApp, appId] : null, - () => fetchChatList(chatShouldReloadKey, isInstalledApp, appId), + chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, appSourceType, appId] : null, + () => fetchChatList(chatShouldReloadKey, appSourceType, appId), { revalidateOnFocus: false, revalidateOnReconnect: false }, ) @@ -295,7 +297,7 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { handleNewConversationInputsChange(conversationInputs) }, [handleNewConversationInputsChange, inputsForms]) - const { data: newConversation } = useSWR(newConversationId ? [isInstalledApp, appId, newConversationId] : null, () => generationConversationName(isInstalledApp, appId, newConversationId), { revalidateOnFocus: false }) + const { data: newConversation } = useSWR(newConversationId ? [isInstalledApp, appId, newConversationId] : null, () => generationConversationName(appSourceType, appId, newConversationId), { revalidateOnFocus: false }) const [originConversationList, setOriginConversationList] = useState([]) useEffect(() => { if (appConversationData?.data && !appConversationDataLoading) @@ -420,16 +422,16 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { }, [mutateAppConversationData, mutateAppPinnedConversationData]) const handlePinConversation = useCallback(async (conversationId: string) => { - await pinConversation(isInstalledApp, appId, conversationId) + await pinConversation(appSourceType, appId, conversationId) notify({ type: 'success', message: t('common.api.success') }) handleUpdateConversationList() - }, [isInstalledApp, appId, notify, t, handleUpdateConversationList]) + }, [appSourceType, appId, notify, t, handleUpdateConversationList]) const handleUnpinConversation = useCallback(async (conversationId: string) => { - await unpinConversation(isInstalledApp, appId, conversationId) + await unpinConversation(appSourceType, appId, conversationId) notify({ type: 'success', message: t('common.api.success') }) handleUpdateConversationList() - }, [isInstalledApp, appId, notify, t, handleUpdateConversationList]) + }, [appSourceType, appId, notify, t, handleUpdateConversationList]) const [conversationDeleting, setConversationDeleting] = useState(false) const handleDeleteConversation = useCallback(async ( @@ -443,7 +445,7 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { try { setConversationDeleting(true) - await delConversation(isInstalledApp, appId, conversationId) + await delConversation(appSourceType, appId, conversationId) notify({ type: 'success', message: t('common.api.success') }) onSuccess() } @@ -478,7 +480,7 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { setConversationRenaming(true) try { - await renameConversation(isInstalledApp, appId, conversationId, newName) + await renameConversation(appSourceType, appId, conversationId, newName) notify({ type: 'success', diff --git a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx index 14a291e9fd..e802fd87b0 100644 --- a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx +++ b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx @@ -14,6 +14,7 @@ import { InputVarType } from '@/app/components/workflow/types' import { TransferMethod } from '@/types/app' import InputsForm from '@/app/components/base/chat/embedded-chatbot/inputs-form' import { + AppSourceType, fetchSuggestedQuestions, getUrl, stopChatMessageResponding, @@ -52,6 +53,8 @@ const ChatWrapper = () => { allInputsHidden, initUserVariables, } = useEmbeddedChatbotContext() + + const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp const appConfig = useMemo(() => { const config = appParams || {} @@ -137,10 +140,10 @@ const ChatWrapper = () => { } handleSend( - getUrl('chat-messages', isInstalledApp, appId || ''), + getUrl('chat-messages', appSourceType, appId || ''), data, { - onGetSuggestedQuestions: responseItemId => fetchSuggestedQuestions(responseItemId, isInstalledApp, appId), + onGetSuggestedQuestions: responseItemId => fetchSuggestedQuestions(responseItemId, appSourceType, appId), onConversationComplete: currentConversationId ? undefined : handleNewConversationCompleted, isPublicAPI: !isInstalledApp, }, diff --git a/web/app/components/base/chat/embedded-chatbot/hooks.tsx b/web/app/components/base/chat/embedded-chatbot/hooks.tsx index 14a32860b9..c5e1b582a5 100644 --- a/web/app/components/base/chat/embedded-chatbot/hooks.tsx +++ b/web/app/components/base/chat/embedded-chatbot/hooks.tsx @@ -18,6 +18,7 @@ import { CONVERSATION_ID_INFO } from '../constants' import { buildChatItemTree, getProcessedInputsFromUrlParams, getProcessedSystemVariablesFromUrlParams, getProcessedUserVariablesFromUrlParams } from '../utils' import { getProcessedFilesFromResponse } from '../../file-uploader/utils' import { + AppSourceType, fetchAppInfo, fetchAppMeta, fetchAppParams, @@ -67,6 +68,7 @@ function getFormattedChatList(messages: any[]) { export const useEmbeddedChatbot = () => { const isInstalledApp = false + const appSourceType = AppSourceType.webApp const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', fetchAppInfo) const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp({ @@ -145,11 +147,11 @@ export const useEmbeddedChatbot = () => { return currentConversationId }, [currentConversationId, newConversationId]) - const { data: appParams } = useSWR(['appParams', isInstalledApp, appId], () => fetchAppParams(isInstalledApp, appId)) - const { data: appMeta } = useSWR(['appMeta', isInstalledApp, appId], () => fetchAppMeta(isInstalledApp, appId)) - const { data: appPinnedConversationData } = useSWR(['appConversationData', isInstalledApp, appId, true], () => fetchConversations(isInstalledApp, appId, undefined, true, 100)) - const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR(['appConversationData', isInstalledApp, appId, false], () => fetchConversations(isInstalledApp, appId, undefined, false, 100)) - const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR(chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, isInstalledApp, appId] : null, () => fetchChatList(chatShouldReloadKey, isInstalledApp, appId)) + const { data: appParams } = useSWR(['appParams', isInstalledApp, appId], () => fetchAppParams(appSourceType, appId)) + const { data: appMeta } = useSWR(['appMeta', isInstalledApp, appId], () => fetchAppMeta(appSourceType, appId)) + const { data: appPinnedConversationData } = useSWR(['appConversationData', isInstalledApp, appId, true], () => fetchConversations(appSourceType, appId, undefined, true, 100)) + const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR(['appConversationData', isInstalledApp, appId, false], () => fetchConversations(appSourceType, appId, undefined, false, 100)) + const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR(chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, isInstalledApp, appId] : null, () => fetchChatList(chatShouldReloadKey, appSourceType, appId)) const [clearChatList, setClearChatList] = useState(false) const [isResponding, setIsResponding] = useState(false) @@ -266,7 +268,7 @@ export const useEmbeddedChatbot = () => { handleNewConversationInputsChange(conversationInputs) }, [handleNewConversationInputsChange, inputsForms]) - const { data: newConversation } = useSWR(newConversationId ? [isInstalledApp, appId, newConversationId] : null, () => generationConversationName(isInstalledApp, appId, newConversationId), { revalidateOnFocus: false }) + const { data: newConversation } = useSWR(newConversationId ? [isInstalledApp, appId, newConversationId] : null, () => generationConversationName(appSourceType, appId, newConversationId), { revalidateOnFocus: false }) const [originConversationList, setOriginConversationList] = useState([]) useEffect(() => { if (appConversationData?.data && !appConversationDataLoading) diff --git a/web/app/components/base/voice-input/index.tsx b/web/app/components/base/voice-input/index.tsx index 5a5400ad30..cd5c2a87b9 100644 --- a/web/app/components/base/voice-input/index.tsx +++ b/web/app/components/base/voice-input/index.tsx @@ -11,7 +11,7 @@ import { convertToMp3 } from './utils' import s from './index.module.css' import cn from '@/utils/classnames' import { StopCircle } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices' -import { audioToText } from '@/service/share' +import { AppSourceType, audioToText } from '@/service/share' type VoiceInputTypes = { onConverted: (text: string) => void @@ -107,7 +107,7 @@ const VoiceInput = ({ } try { - const audioResponse = await audioToText(url, isPublic, formData) + const audioResponse = await audioToText(url, isPublic ? AppSourceType.webApp : AppSourceType.installedApp, formData) onConverted(audioResponse.text) onCancel() } diff --git a/web/app/components/share/text-generation/index.tsx b/web/app/components/share/text-generation/index.tsx index da5b09b065..2384e1fc3a 100644 --- a/web/app/components/share/text-generation/index.tsx +++ b/web/app/components/share/text-generation/index.tsx @@ -14,7 +14,7 @@ import RunBatch from './run-batch' import ResDownload from './run-batch/res-download' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import RunOnce from '@/app/components/share/text-generation/run-once' -import { fetchSavedMessage as doFetchSavedMessage, removeMessage, saveMessage } from '@/service/share' +import { AppSourceType, fetchSavedMessage as doFetchSavedMessage, removeMessage, saveMessage } from '@/service/share' import type { SiteInfo } from '@/models/share' import type { MoreLikeThisConfig, @@ -72,6 +72,7 @@ const TextGeneration: FC = ({ isWorkflow = false, }) => { const { notify } = Toast + const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp const { t } = useTranslation() const media = useBreakpoints() @@ -101,16 +102,16 @@ const TextGeneration: FC = ({ // save message const [savedMessages, setSavedMessages] = useState([]) const fetchSavedMessage = useCallback(async () => { - const res: any = await doFetchSavedMessage(isInstalledApp, appId) + const res: any = await doFetchSavedMessage(appSourceType, appId) setSavedMessages(res.data) - }, [isInstalledApp, appId]) + }, [appSourceType, appId]) const handleSaveMessage = async (messageId: string) => { - await saveMessage(messageId, isInstalledApp, appId) + await saveMessage(messageId, appSourceType, appId) notify({ type: 'success', message: t('common.api.saved') }) fetchSavedMessage() } const handleRemoveSavedMessage = async (messageId: string) => { - await removeMessage(messageId, isInstalledApp, appId) + await removeMessage(messageId, appSourceType, appId) notify({ type: 'success', message: t('common.api.remove') }) fetchSavedMessage() } diff --git a/web/app/components/share/text-generation/result/index.tsx b/web/app/components/share/text-generation/result/index.tsx index a7eb7f7591..0224490b2d 100644 --- a/web/app/components/share/text-generation/result/index.tsx +++ b/web/app/components/share/text-generation/result/index.tsx @@ -7,7 +7,7 @@ import produce from 'immer' import TextGenerationRes from '@/app/components/app/text-generate/item' import NoData from '@/app/components/share/text-generation/no-data' import Toast from '@/app/components/base/toast' -import { sendCompletionMessage, sendWorkflowMessage, updateFeedback } from '@/service/share' +import { AppSourceType, sendCompletionMessage, sendWorkflowMessage, updateFeedback } from '@/service/share' import type { FeedbackType } from '@/app/components/base/chat/chat/type' import Loading from '@/app/components/base/loading' import type { PromptConfig } from '@/models/debug' @@ -358,7 +358,7 @@ const Result: FC = ({ })) }, }, - isInstalledApp, + isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp, installedAppInfo?.id, ) } @@ -392,7 +392,7 @@ const Result: FC = ({ onCompleted(getCompletionRes(), taskId, false) isEnd = true }, - }, isInstalledApp, installedAppInfo?.id) + }, isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp, installedAppInfo?.id) } } diff --git a/web/service/use-explore.ts b/web/service/use-explore.ts index b7d078edbc..cbbb774cdc 100644 --- a/web/service/use-explore.ts +++ b/web/service/use-explore.ts @@ -2,7 +2,7 @@ import { useGlobalPublicStore } from '@/context/global-public-context' import { AccessMode } from '@/models/access-control' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { fetchInstalledAppList, getAppAccessModeByAppId, uninstallApp, updatePinStatus } from './explore' -import { fetchAppMeta, fetchAppParams } from './share' +import { AppSourceType, fetchAppMeta, fetchAppParams } from './share' const NAME_SPACE = 'explore' @@ -62,7 +62,7 @@ export const useGetInstalledAppParams = (appId: string | null) => { queryFn: () => { if (!appId || appId.length === 0) return Promise.reject(new Error('App ID is required to get app params')) - return fetchAppParams(true, appId) + return fetchAppParams(AppSourceType.installedApp, appId) }, enabled: !!appId, }) @@ -74,7 +74,7 @@ export const useGetInstalledAppMeta = (appId: string | null) => { queryFn: () => { if (!appId || appId.length === 0) return Promise.reject(new Error('App ID is required to get app meta')) - return fetchAppMeta(true, appId) + return fetchAppMeta(AppSourceType.installedApp, appId) }, enabled: !!appId, }) diff --git a/web/service/use-share.ts b/web/service/use-share.ts index 267975fd38..d430c77877 100644 --- a/web/service/use-share.ts +++ b/web/service/use-share.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query' -import { fetchAppInfo, fetchAppMeta, fetchAppParams, getAppAccessModeByAppCode } from './share' +import { AppSourceType, fetchAppInfo, fetchAppMeta, fetchAppParams, getAppAccessModeByAppCode } from './share' const NAME_SPACE = 'webapp' @@ -24,7 +24,7 @@ export const useGetWebAppParams = () => { return useQuery({ queryKey: [NAME_SPACE, 'appParams'], queryFn: () => { - return fetchAppParams(false) + return fetchAppParams(AppSourceType.webApp) }, }) } @@ -33,7 +33,7 @@ export const useGetWebAppMeta = () => { return useQuery({ queryKey: [NAME_SPACE, 'appMeta'], queryFn: () => { - return fetchAppMeta(false) + return fetchAppMeta(AppSourceType.webApp) }, }) } From 1b1471b6d8d89ac5f73e9ca00bf54293aa322376 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 17 Sep 2025 14:07:15 +0800 Subject: [PATCH 03/85] fix: stop response api --- web/app/components/base/chat/chat-with-history/chat-wrapper.tsx | 2 +- web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx index c3cd649631..bfa7a2e2ce 100644 --- a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx +++ b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx @@ -86,7 +86,7 @@ const ChatWrapper = () => { inputsForm: inputsForms, }, appPrevChatTree, - taskId => stopChatMessageResponding('', taskId, isInstalledApp, appId), + taskId => stopChatMessageResponding('', taskId, appSourceType, appId), clearChatList, setClearChatList, ) diff --git a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx index e802fd87b0..fe8601d2c7 100644 --- a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx +++ b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx @@ -82,7 +82,7 @@ const ChatWrapper = () => { inputsForm: inputsForms, }, appPrevChatList, - taskId => stopChatMessageResponding('', taskId, isInstalledApp, appId), + taskId => stopChatMessageResponding('', taskId, appSourceType, appId), clearChatList, setClearChatList, ) From a5e5fbc6e0d3851edc8e1a95d57cfe0512fc22c3 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 17 Sep 2025 14:10:56 +0800 Subject: [PATCH 04/85] chore: some api change to new --- .../components/share/text-generation/result/index.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/web/app/components/share/text-generation/result/index.tsx b/web/app/components/share/text-generation/result/index.tsx index 0224490b2d..f9d206db2b 100644 --- a/web/app/components/share/text-generation/result/index.tsx +++ b/web/app/components/share/text-generation/result/index.tsx @@ -72,6 +72,7 @@ const Result: FC = ({ siteInfo, onRunStart, }) => { + const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp const [isResponding, { setTrue: setRespondingTrue, setFalse: setRespondingFalse }] = useBoolean(false) useEffect(() => { if (controlStopResponding) @@ -79,14 +80,14 @@ const Result: FC = ({ }, [controlStopResponding]) const [completionRes, doSetCompletionRes] = useState('') - const completionResRef = useRef() + const completionResRef = useRef(null) const setCompletionRes = (res: any) => { completionResRef.current = res doSetCompletionRes(res) } const getCompletionRes = () => completionResRef.current const [workflowProcessData, doSetWorkflowProcessData] = useState() - const workflowProcessDataRef = useRef() + const workflowProcessDataRef = useRef(null) const setWorkflowProcessData = (data: WorkflowProcess) => { workflowProcessDataRef.current = data doSetWorkflowProcessData(data) @@ -102,7 +103,7 @@ const Result: FC = ({ }) const handleFeedback = async (feedback: FeedbackType) => { - await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, isInstalledApp, installedAppInfo?.id) + await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, appSourceType, installedAppInfo?.id) setFeedback(feedback) } @@ -358,7 +359,7 @@ const Result: FC = ({ })) }, }, - isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp, + appSourceType, installedAppInfo?.id, ) } @@ -392,7 +393,7 @@ const Result: FC = ({ onCompleted(getCompletionRes(), taskId, false) isEnd = true }, - }, isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp, installedAppInfo?.id) + }, appSourceType, installedAppInfo?.id) } } From b15867f92ebb5d74019c49ba7aa4c77e1b9198ec Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 17 Sep 2025 14:12:34 +0800 Subject: [PATCH 05/85] chore: feedback api --- web/app/components/base/chat/chat-with-history/hooks.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/base/chat/chat-with-history/hooks.tsx b/web/app/components/base/chat/chat-with-history/hooks.tsx index 2dfd6ed8cb..cfcc79bb66 100644 --- a/web/app/components/base/chat/chat-with-history/hooks.tsx +++ b/web/app/components/base/chat/chat-with-history/hooks.tsx @@ -510,9 +510,9 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { }, [mutateAppConversationData, handleConversationIdInfoChange]) const handleFeedback = useCallback(async (messageId: string, feedback: Feedback) => { - await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, isInstalledApp, appId) + await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, appSourceType, appId) notify({ type: 'success', message: t('common.api.success') }) - }, [isInstalledApp, appId, t, notify]) + }, [appSourceType, appId, t, notify]) return { isInstalledApp, From 4decbbbf18d8da5162a30091ebcb7e17dfb18b93 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 17 Sep 2025 14:34:59 +0800 Subject: [PATCH 06/85] chore: remove useless api --- .../base/chat/embedded-chatbot/hooks.tsx | 6 ++-- web/service/debug.ts | 20 +------------ web/service/share.ts | 29 ------------------- 3 files changed, 4 insertions(+), 51 deletions(-) diff --git a/web/app/components/base/chat/embedded-chatbot/hooks.tsx b/web/app/components/base/chat/embedded-chatbot/hooks.tsx index c5e1b582a5..a8a6d640ff 100644 --- a/web/app/components/base/chat/embedded-chatbot/hooks.tsx +++ b/web/app/components/base/chat/embedded-chatbot/hooks.tsx @@ -392,14 +392,14 @@ export const useEmbeddedChatbot = () => { }, [mutateAppConversationData, handleConversationIdInfoChange]) const handleFeedback = useCallback(async (messageId: string, feedback: Feedback) => { - await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, isInstalledApp, appId) + await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, appSourceType, appId) notify({ type: 'success', message: t('common.api.success') }) - }, [isInstalledApp, appId, t, notify]) + }, [appSourceType, appId, t, notify]) return { appInfoError, appInfoLoading: appInfoLoading || (systemFeatures.webapp_auth.enabled && isCheckingPermission), - userCanAccess: systemFeatures.webapp_auth.enabled ? userCanAccessResult?.result : true, + userCanAccess: systemFeatures.webapp_auth.enabled ? (userCanAccessResult as { result: boolean })?.result : true, isInstalledApp, allowResetChat, appId, diff --git a/web/service/debug.ts b/web/service/debug.ts index fab2910c5e..61057c591f 100644 --- a/web/service/debug.ts +++ b/web/service/debug.ts @@ -1,5 +1,5 @@ import { get, post, ssePost } from './base' -import type { IOnCompleted, IOnData, IOnError, IOnFile, IOnMessageEnd, IOnMessageReplace, IOnThought } from './base' +import type { IOnCompleted, IOnData, IOnError, IOnMessageReplace } from './base' import type { ChatPromptConfig, CompletionPromptConfig } from '@/models/debug' import type { ModelModeType } from '@/types/app' import type { ModelParameterRule } from '@/app/components/header/account-setting/model-provider-page/declarations' @@ -24,24 +24,6 @@ export type CodeGenRes = { error?: string } -export const sendChatMessage = async (appId: string, body: Record, { onData, onCompleted, onThought, onFile, onError, getAbortController, onMessageEnd, onMessageReplace }: { - onData: IOnData - onCompleted: IOnCompleted - onFile: IOnFile - onThought: IOnThought - onMessageEnd: IOnMessageEnd - onMessageReplace: IOnMessageReplace - onError: IOnError - getAbortController?: (abortController: AbortController) => void -}) => { - return ssePost(`apps/${appId}/chat-messages`, { - body: { - ...body, - response_mode: 'streaming', - }, - }, { onData, onCompleted, onThought, onFile, onError, getAbortController, onMessageEnd, onMessageReplace }) -} - export const stopChatMessageResponding = async (appId: string, taskId: string) => { return post(`apps/${appId}/chat-messages/${taskId}/stop`) } diff --git a/web/service/share.ts b/web/service/share.ts index 792d5e80d3..41cf92a625 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -2,22 +2,17 @@ import type { IOnCompleted, IOnData, IOnError, - IOnFile, IOnIterationFinished, IOnIterationNext, IOnIterationStarted, IOnLoopFinished, IOnLoopNext, IOnLoopStarted, - IOnMessageEnd, IOnMessageReplace, IOnNodeFinished, IOnNodeStarted, - IOnTTSChunk, - IOnTTSEnd, IOnTextChunk, IOnTextReplace, - IOnThought, IOnWorkflowFinished, IOnWorkflowStarted, } from './base' @@ -70,26 +65,6 @@ export function getUrl(url: string, appSourceType: AppSourceType, appId: string) return hasPrefix ? `${apiPrefix[appSourceType]}/${appId}/${url.startsWith('/') ? url.slice(1) : url}` : url } -export const sendChatMessage = async (body: Record, { onData, onCompleted, onThought, onFile, onError, getAbortController, onMessageEnd, onMessageReplace, onTTSChunk, onTTSEnd }: { - onData: IOnData - onCompleted: IOnCompleted - onFile: IOnFile - onThought: IOnThought - onError: IOnError - onMessageEnd?: IOnMessageEnd - onMessageReplace?: IOnMessageReplace - getAbortController?: (abortController: AbortController) => void - onTTSChunk?: IOnTTSChunk - onTTSEnd?: IOnTTSEnd -}, appSourceType: AppSourceType, installedAppId = '') => { - return ssePost(getUrl('chat-messages', appSourceType, installedAppId), { - body: { - ...body, - response_mode: 'streaming', - }, - }, { onData, onCompleted, onThought, onFile, isPublicAPI: !getIsPublicAPI(appSourceType), onError, getAbortController, onMessageEnd, onMessageReplace, onTTSChunk, onTTSEnd }) -} - export const stopChatMessageResponding = async (appId: string, taskId: string, appSourceType: AppSourceType, installedAppId = '') => { return getAction('post', appSourceType)(getUrl(`chat-messages/${taskId}/stop`, appSourceType, installedAppId)) } @@ -296,10 +271,6 @@ export const audioToText = (url: string, appSourceType: AppSourceType, body: For return (getAction('post', appSourceType))(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ text: string }> } -export const textToAudio = (url: string, appSourceType: AppSourceType, body: FormData) => { - return (getAction('post', appSourceType))(url, { body }, { bodyStringify: false, deleteContentType: true }) as Promise<{ data: string }> -} - export const textToAudioStream = (url: string, appSourceType: AppSourceType, header: { content_type: string }, body: { streaming: boolean; voice?: string; message_id?: string; text?: string | null | undefined }) => { return (getAction('post', appSourceType))(url, { body, header }, { needAllResponseContent: true }) } From d4bd19f6d8872bf0ea0dd770c38784c0a5450fdc Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 17 Sep 2025 17:15:23 +0800 Subject: [PATCH 07/85] fix: api login detect problems --- web/app/components/explore/installed-app/index.tsx | 6 ++++-- web/service/share.ts | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/web/app/components/explore/installed-app/index.tsx b/web/app/components/explore/installed-app/index.tsx index 8032e173c6..05729dfb08 100644 --- a/web/app/components/explore/installed-app/index.tsx +++ b/web/app/components/explore/installed-app/index.tsx @@ -12,6 +12,7 @@ import AppUnavailable from '../../base/app-unavailable' import { useGetUserCanAccessApp } from '@/service/access-control' import { useGetInstalledAppAccessModeByAppId, useGetInstalledAppMeta, useGetInstalledAppParams } from '@/service/use-explore' import type { AppData } from '@/models/share' +import type { AccessMode } from '@/models/access-control' export type IInstalledAppProps = { id: string @@ -32,6 +33,7 @@ const InstalledApp: FC = ({ const { isFetching: isFetchingAppMeta, data: appMeta, error: appMetaError } = useGetInstalledAppMeta(installedApp?.id ?? null) const { data: userCanAccessApp, error: useCanAccessAppError } = useGetUserCanAccessApp({ appId: installedApp?.app.id, isInstalledApp: true }) + console.log(appParams, appMeta) useEffect(() => { if (!installedApp) { updateAppInfo(null) @@ -61,8 +63,8 @@ const InstalledApp: FC = ({ if (appMeta) updateWebAppMeta(appMeta) if (webAppAccessMode) - updateWebAppAccessMode(webAppAccessMode.accessMode) - updateUserCanAccessApp(Boolean(userCanAccessApp && userCanAccessApp?.result)) + updateWebAppAccessMode((webAppAccessMode as { accessMode: AccessMode }).accessMode) + updateUserCanAccessApp(Boolean(userCanAccessApp && (userCanAccessApp as { result: boolean })?.result)) }, [installedApp, appMeta, appParams, updateAppInfo, updateAppParams, updateUserCanAccessApp, updateWebAppMeta, userCanAccessApp, webAppAccessMode, updateWebAppAccessMode]) if (appParamsError) { diff --git a/web/service/share.ts b/web/service/share.ts index 41cf92a625..3b28338a8c 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -47,7 +47,7 @@ function getIsPublicAPI(appSourceType: AppSourceType) { } function getAction(action: 'get' | 'post' | 'del' | 'patch', appSourceType: AppSourceType) { - const isNeedLogin = getIsPublicAPI(appSourceType) + const isNeedLogin = !getIsPublicAPI(appSourceType) switch (action) { case 'get': return isNeedLogin ? consoleGet : get From e54efda36fb5ad70e7ad394a577009756cd8ab63 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 18 Sep 2025 14:54:15 +0800 Subject: [PATCH 08/85] feat: try app page --- .../(commonLayout)/try/app/[appId]/page.tsx | 17 ++++++++ web/app/components/try/app/chat.tsx | 40 +++++++++++++++++++ web/app/components/try/app/index.tsx | 29 ++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 web/app/(commonLayout)/try/app/[appId]/page.tsx create mode 100644 web/app/components/try/app/chat.tsx create mode 100644 web/app/components/try/app/index.tsx diff --git a/web/app/(commonLayout)/try/app/[appId]/page.tsx b/web/app/(commonLayout)/try/app/[appId]/page.tsx new file mode 100644 index 0000000000..84a21b9049 --- /dev/null +++ b/web/app/(commonLayout)/try/app/[appId]/page.tsx @@ -0,0 +1,17 @@ +import React from 'react' +import Main from '@/app/components/try/app/index' + +export type IInstalledAppProps = { + params: { + appId: string + } +} + +async function InstalledApp({ params }: IInstalledAppProps) { + const appId = (await params).appId + return ( +
+ ) +} + +export default InstalledApp diff --git a/web/app/components/try/app/chat.tsx b/web/app/components/try/app/chat.tsx new file mode 100644 index 0000000000..b9f1d39fdd --- /dev/null +++ b/web/app/components/try/app/chat.tsx @@ -0,0 +1,40 @@ +'use client' +import type { FC } from 'react' +import React from 'react' +import ChatWrapper from '@/app/components/base/chat/embedded-chatbot/chat-wrapper' +import { useThemeContext } from '../../base/chat/embedded-chatbot/theme/theme-context' +import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' +import { + EmbeddedChatbotContext, +} from '@/app/components/base/chat/embedded-chatbot/context' +import { + useEmbeddedChatbot, +} from '@/app/components/base/chat/embedded-chatbot/hooks' +import cn from '@/utils/classnames' + +type Props = { + appId: string + className: string +} + +const TryApp: FC = ({ + appId, + className, +}) => { + const media = useBreakpoints() + const isMobile = media === MediaType.mobile + const themeBuilder = useThemeContext() + const chatData = useEmbeddedChatbot() + return ( + +
+ +
+
+ ) +} +export default React.memo(TryApp) diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx new file mode 100644 index 0000000000..4005cbe675 --- /dev/null +++ b/web/app/components/try/app/index.tsx @@ -0,0 +1,29 @@ +'use client' +import type { FC } from 'react' +import React from 'react' +import Chat from './chat' + +type Props = { + appId: string +} + +const TryApp: FC = ({ + appId, +}) => { + const isChat = true + const isCompletion = !isChat + return ( +
+ {isChat && ( + + )} + {isCompletion && ( +
Completion
+ )} +
+ Right panel +
+
+ ) +} +export default React.memo(TryApp) From c2f94e9e8a9bf24a880d52ac89579031680cabd6 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 19 Sep 2025 11:32:30 +0800 Subject: [PATCH 09/85] feat: api call the try app and support disable feedback --- .../base/chat/chat/answer/operation.tsx | 5 ++-- web/app/components/base/chat/chat/context.tsx | 3 ++ web/app/components/base/chat/chat/index.tsx | 3 ++ .../chat/embedded-chatbot/chat-wrapper.tsx | 2 ++ .../base/chat/embedded-chatbot/context.tsx | 1 + .../base/chat/embedded-chatbot/hooks.tsx | 30 +++++++++++-------- web/app/components/try/app/chat.tsx | 4 ++- web/service/share.ts | 11 +++++-- 8 files changed, 40 insertions(+), 19 deletions(-) diff --git a/web/app/components/base/chat/chat/answer/operation.tsx b/web/app/components/base/chat/chat/answer/operation.tsx index 7ffb21c6d8..f86801f86b 100644 --- a/web/app/components/base/chat/chat/answer/operation.tsx +++ b/web/app/components/base/chat/chat/answer/operation.tsx @@ -51,6 +51,7 @@ const Operation: FC = ({ onAnnotationAdded, onAnnotationEdited, onAnnotationRemoved, + disableFeedback, onFeedback, onRegenerate, } = useChatContext() @@ -166,7 +167,7 @@ const Operation: FC = ({ )} )} - {!isOpeningStatement && config?.supportFeedback && !localFeedback?.rating && onFeedback && ( + {!disableFeedback && !isOpeningStatement && config?.supportFeedback && !localFeedback?.rating && onFeedback && (
{!localFeedback?.rating && ( <> @@ -180,7 +181,7 @@ const Operation: FC = ({ )}
)} - {!isOpeningStatement && config?.supportFeedback && localFeedback?.rating && onFeedback && ( + {!disableFeedback && !isOpeningStatement && config?.supportFeedback && localFeedback?.rating && onFeedback && (
{localFeedback?.rating === 'like' && ( handleFeedback(null)}> diff --git a/web/app/components/base/chat/chat/context.tsx b/web/app/components/base/chat/chat/context.tsx index 8c69884c91..983814f134 100644 --- a/web/app/components/base/chat/chat/context.tsx +++ b/web/app/components/base/chat/chat/context.tsx @@ -15,6 +15,7 @@ export type ChatContextValue = Pick @@ -39,6 +40,7 @@ export const ChatContextProvider = ({ onAnnotationEdited, onAnnotationAdded, onAnnotationRemoved, + disableFeedback, onFeedback, }: ChatContextProviderProps) => { return ( @@ -54,6 +56,7 @@ export const ChatContextProvider = ({ onAnnotationEdited, onAnnotationAdded, onAnnotationRemoved, + disableFeedback, onFeedback, }}> {children} diff --git a/web/app/components/base/chat/chat/index.tsx b/web/app/components/base/chat/chat/index.tsx index bee37cf2cd..7f831c7a6a 100644 --- a/web/app/components/base/chat/chat/index.tsx +++ b/web/app/components/base/chat/chat/index.tsx @@ -60,6 +60,7 @@ export type ChatProps = { onAnnotationAdded?: (annotationId: string, authorName: string, question: string, answer: string, index: number) => void onAnnotationRemoved?: (index: number) => void chatNode?: ReactNode + disableFeedback?: boolean onFeedback?: (messageId: string, feedback: Feedback) => void chatAnswerContainerInner?: string hideProcessDetail?: boolean @@ -99,6 +100,7 @@ const Chat: FC = ({ onAnnotationEdited, onAnnotationRemoved, chatNode, + disableFeedback, onFeedback, chatAnswerContainerInner, hideProcessDetail, @@ -225,6 +227,7 @@ const Chat: FC = ({ onAnnotationAdded={onAnnotationAdded} onAnnotationEdited={onAnnotationEdited} onAnnotationRemoved={onAnnotationRemoved} + disableFeedback={disableFeedback} onFeedback={onFeedback} >
diff --git a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx index fe8601d2c7..dc1e969b53 100644 --- a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx +++ b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx @@ -44,6 +44,7 @@ const ChatWrapper = () => { isInstalledApp, appId, appMeta, + disableFeedback, handleFeedback, currentChatInstanceRef, themeBuilder, @@ -258,6 +259,7 @@ const ChatWrapper = () => { } allToolIcons={appMeta?.tool_icons || {}} + disableFeedback={disableFeedback} onFeedback={handleFeedback} suggestedQuestions={suggestedQuestions} answerIcon={answerIcon} diff --git a/web/app/components/base/chat/embedded-chatbot/context.tsx b/web/app/components/base/chat/embedded-chatbot/context.tsx index 544da253af..b8e385d33f 100644 --- a/web/app/components/base/chat/embedded-chatbot/context.tsx +++ b/web/app/components/base/chat/embedded-chatbot/context.tsx @@ -42,6 +42,7 @@ export type EmbeddedChatbotContextValue = { isInstalledApp: boolean allowResetChat: boolean appId?: string + disableFeedback?: boolean handleFeedback: (messageId: string, feedback: Feedback) => void currentChatInstanceRef: RefObject<{ handleStop: () => void }> themeBuilder?: ThemeBuilder diff --git a/web/app/components/base/chat/embedded-chatbot/hooks.tsx b/web/app/components/base/chat/embedded-chatbot/hooks.tsx index a8a6d640ff..773d3d3a19 100644 --- a/web/app/components/base/chat/embedded-chatbot/hooks.tsx +++ b/web/app/components/base/chat/embedded-chatbot/hooks.tsx @@ -24,6 +24,7 @@ import { fetchAppParams, fetchChatList, fetchConversations, + fetchTryAppInfo, generationConversationName, updateFeedback, } from '@/service/share' @@ -66,25 +67,27 @@ function getFormattedChatList(messages: any[]) { return newChatList } -export const useEmbeddedChatbot = () => { - const isInstalledApp = false - const appSourceType = AppSourceType.webApp +export const useEmbeddedChatbot = (appSourceType = AppSourceType.webApp, tryAppId?: string) => { + // const isWebApp = appSourceType === AppSourceType.webApp + const isInstalledApp = false // webapp and try app + const isTryApp = appSourceType === AppSourceType.tryApp const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) - const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', fetchAppInfo) + const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', isTryApp ? fetchTryAppInfo : fetchAppInfo) const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp({ appId: appInfo?.app_id, isInstalledApp, - enabled: systemFeatures.webapp_auth.enabled, + enabled: systemFeatures.webapp_auth.enabled && !isTryApp, }) const appData = useMemo(() => { return appInfo }, [appInfo]) - const appId = useMemo(() => appData?.app_id, [appData]) + const appId = useMemo(() => isTryApp ? tryAppId : appData?.app_id, [appData, appSourceType, tryAppId]) const [userId, setUserId] = useState() const [conversationId, setConversationId] = useState() useEffect(() => { + if(isTryApp) return getProcessedSystemVariablesFromUrlParams().then(({ user_id, conversation_id }) => { setUserId(user_id) setConversationId(conversation_id) @@ -92,6 +95,7 @@ export const useEmbeddedChatbot = () => { }, []) useEffect(() => { + if(isTryApp) return const setLanguageFromParams = async () => { // Check URL parameters for language override const urlParams = new URLSearchParams(window.location.search) @@ -147,11 +151,11 @@ export const useEmbeddedChatbot = () => { return currentConversationId }, [currentConversationId, newConversationId]) - const { data: appParams } = useSWR(['appParams', isInstalledApp, appId], () => fetchAppParams(appSourceType, appId)) - const { data: appMeta } = useSWR(['appMeta', isInstalledApp, appId], () => fetchAppMeta(appSourceType, appId)) - const { data: appPinnedConversationData } = useSWR(['appConversationData', isInstalledApp, appId, true], () => fetchConversations(appSourceType, appId, undefined, true, 100)) - const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR(['appConversationData', isInstalledApp, appId, false], () => fetchConversations(appSourceType, appId, undefined, false, 100)) - const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR(chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, isInstalledApp, appId] : null, () => fetchChatList(chatShouldReloadKey, appSourceType, appId)) + const { data: appParams } = useSWR(['appParams', appSourceType, appId], () => fetchAppParams(appSourceType, appId)) + const { data: appMeta } = useSWR(['appMeta', appSourceType, appId], () => fetchAppMeta(appSourceType, appId)) + const { data: appPinnedConversationData } = useSWR(['appConversationData', appSourceType, appId, true], () => fetchConversations(appSourceType, appId, undefined, true, 100)) + const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR(isTryApp ? null : ['appConversationData', appSourceType, appId, false], () => fetchConversations(appSourceType, appId, undefined, false, 100)) + const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR(chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, appSourceType, appId] : null, () => fetchChatList(chatShouldReloadKey, appSourceType, appId)) const [clearChatList, setClearChatList] = useState(false) const [isResponding, setIsResponding] = useState(false) @@ -268,7 +272,7 @@ export const useEmbeddedChatbot = () => { handleNewConversationInputsChange(conversationInputs) }, [handleNewConversationInputsChange, inputsForms]) - const { data: newConversation } = useSWR(newConversationId ? [isInstalledApp, appId, newConversationId] : null, () => generationConversationName(appSourceType, appId, newConversationId), { revalidateOnFocus: false }) + const { data: newConversation } = useSWR((!isTryApp && newConversationId) ? [isInstalledApp, appId, newConversationId] : null, () => generationConversationName(appSourceType, appId, newConversationId), { revalidateOnFocus: false }) const [originConversationList, setOriginConversationList] = useState([]) useEffect(() => { if (appConversationData?.data && !appConversationDataLoading) @@ -399,7 +403,7 @@ export const useEmbeddedChatbot = () => { return { appInfoError, appInfoLoading: appInfoLoading || (systemFeatures.webapp_auth.enabled && isCheckingPermission), - userCanAccess: systemFeatures.webapp_auth.enabled ? (userCanAccessResult as { result: boolean })?.result : true, + userCanAccess: isTryApp || (systemFeatures.webapp_auth.enabled ? (userCanAccessResult as { result: boolean })?.result : true), isInstalledApp, allowResetChat, appId, diff --git a/web/app/components/try/app/chat.tsx b/web/app/components/try/app/chat.tsx index b9f1d39fdd..364f0d2860 100644 --- a/web/app/components/try/app/chat.tsx +++ b/web/app/components/try/app/chat.tsx @@ -11,6 +11,7 @@ import { useEmbeddedChatbot, } from '@/app/components/base/chat/embedded-chatbot/hooks' import cn from '@/utils/classnames' +import { AppSourceType } from '@/service/share' type Props = { appId: string @@ -24,10 +25,11 @@ const TryApp: FC = ({ const media = useBreakpoints() const isMobile = media === MediaType.mobile const themeBuilder = useThemeContext() - const chatData = useEmbeddedChatbot() + const chatData = useEmbeddedChatbot(AppSourceType.tryApp, appId) return ( diff --git a/web/service/share.ts b/web/service/share.ts index 3b28338a8c..9b6eef8b97 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -39,7 +39,7 @@ export enum AppSourceType { const apiPrefix = { [AppSourceType.webApp]: '', [AppSourceType.installedApp]: 'installed-apps', - [AppSourceType.tryApp]: 'try-apps', + [AppSourceType.tryApp]: 'installed-apps', // 'trial-apps', use 'installed-apps' for test } function getIsPublicAPI(appSourceType: AppSourceType) { @@ -141,6 +141,11 @@ export const fetchAppInfo = async () => { return get('/site') as Promise } +// would use trial-apps after api is ok +export const fetchTryAppInfo = async () => { + return get('/site') as Promise +} + export const fetchConversations = async (appSourceType: AppSourceType, installedAppId = '', last_id?: string, pinned?: boolean, limit?: number) => { return getAction('get', appSourceType)(getUrl('conversations', appSourceType, installedAppId), { params: { limit: limit || 20, ...(last_id ? { last_id } : {}), ...(pinned !== undefined ? { pinned } : {}) } }) as Promise } @@ -175,8 +180,8 @@ export const fetchChatList = async (conversationId: string, appSourceType: AppSo // } // init value. wait for server update -export const fetchAppParams = async (appSourceType: AppSourceType, installedAppId = '') => { - return (getAction('get', appSourceType))(getUrl('parameters', appSourceType, installedAppId)) as Promise +export const fetchAppParams = async (appSourceType: AppSourceType, appId = '') => { + return (getAction('get', appSourceType))(getUrl('parameters', appSourceType, appId)) as Promise } export const fetchWebSAMLSSOUrl = async (appCode: string, redirectUrl: string) => { From 73845cbec5d4e16a09049dfcf400ca56cd4570fa Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 19 Sep 2025 16:32:11 +0800 Subject: [PATCH 10/85] feat: text generation --- .../base/chat/embedded-chatbot/hooks.tsx | 6 +- .../explore/installed-app/index.tsx | 1 - .../share/text-generation/index.tsx | 19 +- .../components/share/text-generation/types.ts | 16 ++ web/app/components/try/app/index.tsx | 6 +- .../components/try/app/text-generation.tsx | 263 ++++++++++++++++++ web/service/share.ts | 5 - web/service/try-app.ts | 11 + web/service/use-try-app.ts | 23 ++ 9 files changed, 324 insertions(+), 26 deletions(-) create mode 100644 web/app/components/share/text-generation/types.ts create mode 100644 web/app/components/try/app/text-generation.tsx create mode 100644 web/service/try-app.ts create mode 100644 web/service/use-try-app.ts diff --git a/web/app/components/base/chat/embedded-chatbot/hooks.tsx b/web/app/components/base/chat/embedded-chatbot/hooks.tsx index 773d3d3a19..ba7b902d5f 100644 --- a/web/app/components/base/chat/embedded-chatbot/hooks.tsx +++ b/web/app/components/base/chat/embedded-chatbot/hooks.tsx @@ -24,10 +24,12 @@ import { fetchAppParams, fetchChatList, fetchConversations, - fetchTryAppInfo, generationConversationName, updateFeedback, } from '@/service/share' +import { + fetchTryAppInfo, +} from '@/service/try-app' import type { // AppData, ConversationItem, @@ -257,6 +259,8 @@ export const useEmbeddedChatbot = (appSourceType = AppSourceType.webApp, tryAppI useEffect(() => { // init inputs from url params (async () => { + if(isTryApp) + return const inputs = await getProcessedInputsFromUrlParams() const userVariables = await getProcessedUserVariablesFromUrlParams() setInitInputs(inputs) diff --git a/web/app/components/explore/installed-app/index.tsx b/web/app/components/explore/installed-app/index.tsx index 05729dfb08..b4321d6336 100644 --- a/web/app/components/explore/installed-app/index.tsx +++ b/web/app/components/explore/installed-app/index.tsx @@ -33,7 +33,6 @@ const InstalledApp: FC = ({ const { isFetching: isFetchingAppMeta, data: appMeta, error: appMetaError } = useGetInstalledAppMeta(installedApp?.id ?? null) const { data: userCanAccessApp, error: useCanAccessAppError } = useGetUserCanAccessApp({ appId: installedApp?.app.id, isInstalledApp: true }) - console.log(appParams, appMeta) useEffect(() => { if (!installedApp) { updateAppInfo(null) diff --git a/web/app/components/share/text-generation/index.tsx b/web/app/components/share/text-generation/index.tsx index 2384e1fc3a..4a8f37a61e 100644 --- a/web/app/components/share/text-generation/index.tsx +++ b/web/app/components/share/text-generation/index.tsx @@ -41,24 +41,9 @@ import { AccessMode } from '@/models/access-control' import { useGlobalPublicStore } from '@/context/global-public-context' import useDocumentTitle from '@/hooks/use-document-title' import { useWebAppStore } from '@/context/web-app-context' - +import type { Task } from './types' +import { TaskStatus } from './types' const GROUP_SIZE = 5 // to avoid RPM(Request per minute) limit. The group task finished then the next group. -enum TaskStatus { - pending = 'pending', - running = 'running', - completed = 'completed', - failed = 'failed', -} - -type TaskParam = { - inputs: Record -} - -type Task = { - id: number - status: TaskStatus - params: TaskParam -} export type IMainProps = { isInstalledApp?: boolean diff --git a/web/app/components/share/text-generation/types.ts b/web/app/components/share/text-generation/types.ts new file mode 100644 index 0000000000..dba8eb2ca9 --- /dev/null +++ b/web/app/components/share/text-generation/types.ts @@ -0,0 +1,16 @@ +type TaskParam = { + inputs: Record +} + +export type Task = { + id: number + status: TaskStatus + params: TaskParam +} + +export enum TaskStatus { + pending = 'pending', + running = 'running', + completed = 'completed', + failed = 'failed', +} diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx index 4005cbe675..90c9f57677 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/try/app/index.tsx @@ -2,6 +2,7 @@ import type { FC } from 'react' import React from 'react' import Chat from './chat' +import TextGeneration from './text-generation' type Props = { appId: string @@ -10,7 +11,8 @@ type Props = { const TryApp: FC = ({ appId, }) => { - const isChat = true + // get app type by /trial-apps/ + const isChat = appId === 'fsVnyqGJbriqnPxK' const isCompletion = !isChat return (
@@ -18,7 +20,7 @@ const TryApp: FC = ({ )} {isCompletion && ( -
Completion
+ )}
Right panel diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx new file mode 100644 index 0000000000..5b967d083a --- /dev/null +++ b/web/app/components/try/app/text-generation.tsx @@ -0,0 +1,263 @@ +'use client' +import type { FC } from 'react' +import React, { useCallback, useEffect, useRef, useState } from 'react' +import cn from '@/utils/classnames' +import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' +import AppIcon from '@/app/components/base/app-icon' +import MenuDropdown from '@/app/components/share/text-generation/menu-dropdown' +import type { SiteInfo } from '@/models/share' +import type { VisionFile, VisionSettings } from '@/types/app' +import { Resolution, TransferMethod } from '@/types/app' +import type { MoreLikeThisConfig, PromptConfig, TextToSpeechConfig } from '@/models/debug' +import { userInputsFormToPromptVariables } from '@/utils/model-config' +import { useWebAppStore } from '@/context/web-app-context' +import { useGetTryAppInfo, useGetTryAppParams } from '@/service/use-try-app' +import Loading from '@/app/components/base/loading' +import { appDefaultIconBackground } from '@/config' +import RunOnce from '../../share/text-generation/run-once' +import { useBoolean } from 'ahooks' +import Res from '@/app/components/share/text-generation/result' +import type { Task } from '../../share/text-generation/types' +import { TaskStatus } from '../../share/text-generation/types' +import { noop } from 'lodash' + +type Props = { + appId: string + isWorkflow?: boolean + className?: string +} + +const TextGeneration: FC = ({ + isWorkflow = false, + className, +}) => { + // const { t } = useTranslation() + const media = useBreakpoints() + const isPC = media === MediaType.pc + + const [inputs, doSetInputs] = useState>({}) + const inputsRef = useRef>(inputs) + const setInputs = useCallback((newInputs: Record) => { + doSetInputs(newInputs) + inputsRef.current = newInputs + }, []) + + const { isFetching: isFetchingAppInfo, data: appInfo } = useGetTryAppInfo() + const updateAppInfo = useWebAppStore(s => s.updateAppInfo) + const appData = useWebAppStore(s => s.appInfo) + const { data: tryAppParams } = useGetTryAppParams() + const updateAppParams = useWebAppStore(s => s.updateAppParams) + const appParams = useWebAppStore(s => s.appParams) + const [siteInfo, setSiteInfo] = useState(null) + const [promptConfig, setPromptConfig] = useState(null) + const [customConfig, setCustomConfig] = useState | null>(null) + const [moreLikeThisConfig, setMoreLikeThisConfig] = useState(null) + const [textToSpeechConfig, setTextToSpeechConfig] = useState(null) + const [controlSend, setControlSend] = useState(0) + const [controlStopResponding, setControlStopResponding] = useState(0) + const [visionConfig, setVisionConfig] = useState({ + enabled: false, + number_limits: 2, + detail: Resolution.low, + transfer_methods: [TransferMethod.local_file], + }) + const [completionFiles, setCompletionFiles] = useState([]) + const [controlRetry, setControlRetry] = useState(0) + const [isShowResultPanel, { setTrue: doShowResultPanel, setFalse: hideResultPanel }] = useBoolean(false) +// to temp fix lint + console.log(setControlStopResponding, setControlRetry) + const showResultPanel = () => { + // fix: useClickAway hideResSidebar will close sidebar + setTimeout(() => { + doShowResultPanel() + }, 0) + } + + const handleSend = () => { + setControlSend(Date.now()) + showResultPanel() + } + + const [resultExisted, setResultExisted] = useState(false) + + useEffect(() => { + if (!appInfo) return + updateAppInfo(appInfo) + }, [appInfo, updateAppInfo]) + + useEffect(() => { + if (!tryAppParams) return + updateAppParams(tryAppParams) + }, [tryAppParams, updateAppParams]) + + useEffect(() => { + (async () => { + if (!appData || !appParams) + return + const { site: siteInfo, custom_config } = appData + setSiteInfo(siteInfo as SiteInfo) + setCustomConfig(custom_config) + + const { user_input_form, more_like_this, file_upload, text_to_speech }: any = appParams + setVisionConfig({ + // legacy of image upload compatible + ...file_upload, + transfer_methods: file_upload?.allowed_file_upload_methods || file_upload?.allowed_upload_methods, + // legacy of image upload compatible + image_file_size_limit: appParams?.system_parameters.image_file_size_limit, + fileUploadConfig: appParams?.system_parameters, + } as any) + const prompt_variables = userInputsFormToPromptVariables(user_input_form) + setPromptConfig({ + prompt_template: '', // placeholder for future + prompt_variables, + } as PromptConfig) + setMoreLikeThisConfig(more_like_this) + setTextToSpeechConfig(text_to_speech) + })() + }, [appData, appParams]) + + const handleCompleted = noop + + const renderRes = (task?: Task) => ( setResultExisted(true)} + />) + + const renderResWrap = ( +
+
+ {renderRes()} +
+
+ ) + + // console.log(siteInfo, promptConfig) + + if(isFetchingAppInfo || !siteInfo || !promptConfig) { + return ( +
+ +
+ ) + } + + return ( +
+ {/* Left */} +
+ {/* Header */} +
+
+ +
{siteInfo.title}
+ +
+ {siteInfo.description && ( +
{siteInfo.description}
+ )} +
+ {/* form */} +
+ +
+
+ + {/* Result */} +
+ {!isPC && ( +
{ + if (isShowResultPanel) + hideResultPanel() + else + showResultPanel() + }} + > +
+
+ )} + {renderResWrap} +
+
+ ) +} + +export default React.memo(TextGeneration) diff --git a/web/service/share.ts b/web/service/share.ts index 9b6eef8b97..dabddfdd4c 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -141,11 +141,6 @@ export const fetchAppInfo = async () => { return get('/site') as Promise } -// would use trial-apps after api is ok -export const fetchTryAppInfo = async () => { - return get('/site') as Promise -} - export const fetchConversations = async (appSourceType: AppSourceType, installedAppId = '', last_id?: string, pinned?: boolean, limit?: number) => { return getAction('get', appSourceType)(getUrl('conversations', appSourceType, installedAppId), { params: { limit: limit || 20, ...(last_id ? { last_id } : {}), ...(pinned !== undefined ? { pinned } : {}) } }) as Promise } diff --git a/web/service/try-app.ts b/web/service/try-app.ts new file mode 100644 index 0000000000..05a55e0c51 --- /dev/null +++ b/web/service/try-app.ts @@ -0,0 +1,11 @@ +import { + getPublic as get, +} from './base' +import type { + AppData, +} from '@/models/share' + +// would use trial-apps after api is ok +export const fetchTryAppInfo = async () => { + return get('/site') as Promise +} diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts new file mode 100644 index 0000000000..c3a686dbcb --- /dev/null +++ b/web/service/use-try-app.ts @@ -0,0 +1,23 @@ +import { useQuery } from '@tanstack/react-query' +import { fetchTryAppInfo } from './try-app' +import { AppSourceType, fetchAppParams } from './share' + +const NAME_SPACE = 'try-app' + +export const useGetTryAppInfo = () => { + return useQuery({ + queryKey: [NAME_SPACE, 'appInfo'], + queryFn: () => { + return fetchTryAppInfo() + }, + }) +} + +export const useGetTryAppParams = () => { + return useQuery({ + queryKey: [NAME_SPACE, 'appParams'], + queryFn: () => { + return fetchAppParams(AppSourceType.webApp) // todo: wait api + }, + }) +} From 8353352bdaac80427c73928ebb0f2ac00751baf0 Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 22 Sep 2025 15:17:11 +0800 Subject: [PATCH 11/85] chore: try app can use web app run --- .../app/text-generate/item/index.tsx | 10 ++++---- .../share/text-generation/index.tsx | 4 ++-- .../share/text-generation/result/index.tsx | 23 +++++++++---------- .../components/try/app/text-generation.tsx | 15 ++++-------- web/service/share.ts | 4 ++-- 5 files changed, 24 insertions(+), 32 deletions(-) diff --git a/web/app/components/app/text-generate/item/index.tsx b/web/app/components/app/text-generate/item/index.tsx index 5b12e9a669..9654e86558 100644 --- a/web/app/components/app/text-generate/item/index.tsx +++ b/web/app/components/app/text-generate/item/index.tsx @@ -52,7 +52,7 @@ export type IGenerationItemProps = { onFeedback?: (feedback: FeedbackType) => void onSave?: (messageId: string) => void isMobile?: boolean - isInstalledApp: boolean + appSourceType: AppSourceType installedAppId?: string taskId?: string controlClearMoreLikeThis?: number @@ -86,7 +86,7 @@ const GenerationItem: FC = ({ onSave, depth = 1, isMobile, - isInstalledApp, + appSourceType, installedAppId, taskId, controlClearMoreLikeThis, @@ -111,8 +111,6 @@ const GenerationItem: FC = ({ const setCurrentLogItem = useAppStore(s => s.setCurrentLogItem) const setShowPromptLogModal = useAppStore(s => s.setShowPromptLogModal) - const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp - const handleFeedback = async (childFeedback: FeedbackType) => { await updateFeedback({ url: `/messages/${childMessageId}/feedbacks`, body: { rating: childFeedback.rating } }, appSourceType, installedAppId) setChildFeedback(childFeedback) @@ -132,7 +130,7 @@ const GenerationItem: FC = ({ onSave, isShowTextToSpeech, isMobile, - isInstalledApp, + appSourceType, installedAppId, controlClearMoreLikeThis, isWorkflow, @@ -294,7 +292,7 @@ const GenerationItem: FC = ({ {!isWorkflow && {content?.length} {t('common.unit.char')}} {/* action buttons */}
- {!isInWebApp && !isInstalledApp && !isResponding && ( + {!isInWebApp && (appSourceType !== AppSourceType.installedApp) && !isResponding && (
diff --git a/web/app/components/share/text-generation/index.tsx b/web/app/components/share/text-generation/index.tsx index 4a8f37a61e..f5bf04697e 100644 --- a/web/app/components/share/text-generation/index.tsx +++ b/web/app/components/share/text-generation/index.tsx @@ -401,8 +401,8 @@ const TextGeneration: FC = ({ isCallBatchAPI={isCallBatchAPI} isPC={isPC} isMobile={!isPC} - isInstalledApp={isInstalledApp} - installedAppInfo={installedAppInfo} + appSourceType={isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp} + appId={installedAppInfo?.id} isError={task?.status === TaskStatus.failed} promptConfig={promptConfig} moreLikeThisEnabled={!!moreLikeThisConfig?.enabled} diff --git a/web/app/components/share/text-generation/result/index.tsx b/web/app/components/share/text-generation/result/index.tsx index f9d206db2b..b3b4cb03ba 100644 --- a/web/app/components/share/text-generation/result/index.tsx +++ b/web/app/components/share/text-generation/result/index.tsx @@ -7,11 +7,11 @@ import produce from 'immer' import TextGenerationRes from '@/app/components/app/text-generate/item' import NoData from '@/app/components/share/text-generation/no-data' import Toast from '@/app/components/base/toast' -import { AppSourceType, sendCompletionMessage, sendWorkflowMessage, updateFeedback } from '@/service/share' +import type { AppSourceType } from '@/service/share' +import { sendCompletionMessage, sendWorkflowMessage, updateFeedback } from '@/service/share' import type { FeedbackType } from '@/app/components/base/chat/chat/type' import Loading from '@/app/components/base/loading' import type { PromptConfig } from '@/models/debug' -import type { InstalledApp } from '@/models/explore' import { TransferMethod, type VisionFile, type VisionSettings } from '@/types/app' import { NodeRunningStatus, WorkflowRunningStatus } from '@/app/components/workflow/types' import type { WorkflowProcess } from '@/app/components/base/chat/types' @@ -28,8 +28,8 @@ export type IResultProps = { isCallBatchAPI: boolean isPC: boolean isMobile: boolean - isInstalledApp: boolean - installedAppInfo?: InstalledApp + appSourceType: AppSourceType + appId?: string isError: boolean isShowTextToSpeech: boolean promptConfig: PromptConfig | null @@ -53,8 +53,8 @@ const Result: FC = ({ isCallBatchAPI, isPC, isMobile, - isInstalledApp, - installedAppInfo, + appSourceType, + appId, isError, isShowTextToSpeech, promptConfig, @@ -72,7 +72,6 @@ const Result: FC = ({ siteInfo, onRunStart, }) => { - const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp const [isResponding, { setTrue: setRespondingTrue, setFalse: setRespondingFalse }] = useBoolean(false) useEffect(() => { if (controlStopResponding) @@ -103,7 +102,7 @@ const Result: FC = ({ }) const handleFeedback = async (feedback: FeedbackType) => { - await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, appSourceType, installedAppInfo?.id) + await updateFeedback({ url: `/messages/${messageId}/feedbacks`, body: { rating: feedback.rating, content: feedback.content } }, appSourceType, appId) setFeedback(feedback) } @@ -360,7 +359,7 @@ const Result: FC = ({ }, }, appSourceType, - installedAppInfo?.id, + appId, ) } else { @@ -393,7 +392,7 @@ const Result: FC = ({ onCompleted(getCompletionRes(), taskId, false) isEnd = true }, - }, appSourceType, installedAppInfo?.id) + }, appSourceType, appId) } } @@ -424,8 +423,8 @@ const Result: FC = ({ feedback={feedback} onSave={handleSaveMessage} isMobile={isMobile} - isInstalledApp={isInstalledApp} - installedAppId={installedAppInfo?.id} + appSourceType={appSourceType} + installedAppId={appId} isLoading={isCallBatchAPI ? (!completionRes && isResponding) : false} taskId={isCallBatchAPI ? ((taskId as number) < 10 ? `0${taskId}` : `${taskId}`) : undefined} controlClearMoreLikeThis={controlClearMoreLikeThis} diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index 5b967d083a..1485cfac6f 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -20,18 +20,19 @@ import Res from '@/app/components/share/text-generation/result' import type { Task } from '../../share/text-generation/types' import { TaskStatus } from '../../share/text-generation/types' import { noop } from 'lodash' +import { AppSourceType } from '@/service/share' type Props = { appId: string - isWorkflow?: boolean className?: string } const TextGeneration: FC = ({ - isWorkflow = false, + appId, className, }) => { // const { t } = useTranslation() + const isWorkflow = true // wait for detail app info to decide // app.mode === 'completion' | 'workflow' const media = useBreakpoints() const isPC = media === MediaType.pc @@ -54,7 +55,6 @@ const TextGeneration: FC = ({ const [moreLikeThisConfig, setMoreLikeThisConfig] = useState(null) const [textToSpeechConfig, setTextToSpeechConfig] = useState(null) const [controlSend, setControlSend] = useState(0) - const [controlStopResponding, setControlStopResponding] = useState(0) const [visionConfig, setVisionConfig] = useState({ enabled: false, number_limits: 2, @@ -62,10 +62,7 @@ const TextGeneration: FC = ({ transfer_methods: [TransferMethod.local_file], }) const [completionFiles, setCompletionFiles] = useState([]) - const [controlRetry, setControlRetry] = useState(0) const [isShowResultPanel, { setTrue: doShowResultPanel, setFalse: hideResultPanel }] = useBoolean(false) -// to temp fix lint - console.log(setControlStopResponding, setControlRetry) const showResultPanel = () => { // fix: useClickAway hideResSidebar will close sidebar setTimeout(() => { @@ -125,15 +122,13 @@ const TextGeneration: FC = ({ isCallBatchAPI={false} isPC={isPC} isMobile={!isPC} - isInstalledApp={false} - installedAppInfo={{}} + appSourceType={AppSourceType.webApp} // todo for call the api + appId={appId} isError={task?.status === TaskStatus.failed} promptConfig={promptConfig} moreLikeThisEnabled={!!moreLikeThisConfig?.enabled} inputs={inputs} controlSend={controlSend} - controlRetry={task?.status === TaskStatus.failed ? controlRetry : 0} - controlStopResponding={controlStopResponding} onShowRes={showResultPanel} handleSaveMessage={noop} taskId={task?.id} diff --git a/web/service/share.ts b/web/service/share.ts index dabddfdd4c..a940af98c5 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -113,9 +113,9 @@ export const sendWorkflowMessage = async ( onTextReplace: IOnTextReplace }, appSourceType: AppSourceType, - installedAppId = '', + appId = '', ) => { - return ssePost(getUrl('workflows/run', appSourceType, installedAppId), { + return ssePost(getUrl('workflows/run', appSourceType, appId), { body: { ...body, response_mode: 'streaming', From 5f0bd5119a77f169aceb505a5f368bc753b61a7e Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 24 Sep 2025 13:39:52 +0800 Subject: [PATCH 12/85] chore: temp --- web/app/components/try/app/index.tsx | 27 +- .../components/try/app/text-generation.tsx | 236 +++++++++--------- web/service/try-app.ts | 15 +- web/service/use-try-app.ts | 4 +- 4 files changed, 150 insertions(+), 132 deletions(-) diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx index 90c9f57677..24c0a9a4e8 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/try/app/index.tsx @@ -3,6 +3,9 @@ import type { FC } from 'react' import React from 'react' import Chat from './chat' import TextGeneration from './text-generation' +import Loading from '../../base/loading' +import { useGetTryAppInfo } from '@/service/use-try-app' +import type { AppData } from '@/models/share' type Props = { appId: string @@ -11,16 +14,34 @@ type Props = { const TryApp: FC = ({ appId, }) => { - // get app type by /trial-apps/ - const isChat = appId === 'fsVnyqGJbriqnPxK' + const { isFetching: isFetchingAppInfo, data: appInfo } = useGetTryAppInfo(appId) + const mode = appInfo?.mode + const isChat = mode === 'chat' const isCompletion = !isChat + if (isFetchingAppInfo) { + return ( +
+ +
+ ) + } + console.log(appInfo) return (
{isChat && ( )} {isCompletion && ( - + )}
Right panel diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index 1485cfac6f..f05523223f 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -5,34 +5,25 @@ import cn from '@/utils/classnames' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import AppIcon from '@/app/components/base/app-icon' import MenuDropdown from '@/app/components/share/text-generation/menu-dropdown' -import type { SiteInfo } from '@/models/share' -import type { VisionFile, VisionSettings } from '@/types/app' -import { Resolution, TransferMethod } from '@/types/app' -import type { MoreLikeThisConfig, PromptConfig, TextToSpeechConfig } from '@/models/debug' -import { userInputsFormToPromptVariables } from '@/utils/model-config' -import { useWebAppStore } from '@/context/web-app-context' -import { useGetTryAppInfo, useGetTryAppParams } from '@/service/use-try-app' import Loading from '@/app/components/base/loading' import { appDefaultIconBackground } from '@/config' import RunOnce from '../../share/text-generation/run-once' -import { useBoolean } from 'ahooks' -import Res from '@/app/components/share/text-generation/result' -import type { Task } from '../../share/text-generation/types' -import { TaskStatus } from '../../share/text-generation/types' -import { noop } from 'lodash' -import { AppSourceType } from '@/service/share' +import { useWebAppStore } from '@/context/web-app-context' +import type { AppData } from '@/models/share' type Props = { appId: string className?: string + isWorkflow?: boolean + appData: AppData | null } const TextGeneration: FC = ({ appId, className, + isWorkflow, + appData, }) => { - // const { t } = useTranslation() - const isWorkflow = true // wait for detail app info to decide // app.mode === 'completion' | 'workflow' const media = useBreakpoints() const isPC = media === MediaType.pc @@ -42,125 +33,126 @@ const TextGeneration: FC = ({ doSetInputs(newInputs) inputsRef.current = newInputs }, []) + console.log(isPC, setInputs) - const { isFetching: isFetchingAppInfo, data: appInfo } = useGetTryAppInfo() const updateAppInfo = useWebAppStore(s => s.updateAppInfo) - const appData = useWebAppStore(s => s.appInfo) - const { data: tryAppParams } = useGetTryAppParams() - const updateAppParams = useWebAppStore(s => s.updateAppParams) - const appParams = useWebAppStore(s => s.appParams) - const [siteInfo, setSiteInfo] = useState(null) - const [promptConfig, setPromptConfig] = useState(null) - const [customConfig, setCustomConfig] = useState | null>(null) - const [moreLikeThisConfig, setMoreLikeThisConfig] = useState(null) - const [textToSpeechConfig, setTextToSpeechConfig] = useState(null) - const [controlSend, setControlSend] = useState(0) - const [visionConfig, setVisionConfig] = useState({ - enabled: false, - number_limits: 2, - detail: Resolution.low, - transfer_methods: [TransferMethod.local_file], - }) - const [completionFiles, setCompletionFiles] = useState([]) - const [isShowResultPanel, { setTrue: doShowResultPanel, setFalse: hideResultPanel }] = useBoolean(false) - const showResultPanel = () => { - // fix: useClickAway hideResSidebar will close sidebar - setTimeout(() => { - doShowResultPanel() - }, 0) - } + // const { data: tryAppParams } = useGetTryAppParams() + // const updateAppParams = useWebAppStore(s => s.updateAppParams) + // const appParams = useWebAppStore(s => s.appParams) + // const [siteInfo, setSiteInfo] = useState(null) + // const [promptConfig, setPromptConfig] = useState(null) + // const [customConfig, setCustomConfig] = useState | null>(null) + // const [moreLikeThisConfig, setMoreLikeThisConfig] = useState(null) + // const [textToSpeechConfig, setTextToSpeechConfig] = useState(null) + // const [controlSend, setControlSend] = useState(0) + // const [visionConfig, setVisionConfig] = useState({ + // enabled: false, + // number_limits: 2, + // detail: Resolution.low, + // transfer_methods: [TransferMethod.local_file], + // }) + // const [completionFiles, setCompletionFiles] = useState([]) + // const [isShowResultPanel, { setTrue: doShowResultPanel, setFalse: hideResultPanel }] = useBoolean(false) + // const showResultPanel = () => { + // // fix: useClickAway hideResSidebar will close sidebar + // setTimeout(() => { + // doShowResultPanel() + // }, 0) + // } - const handleSend = () => { - setControlSend(Date.now()) - showResultPanel() - } + // const handleSend = () => { + // setControlSend(Date.now()) + // showResultPanel() + // } - const [resultExisted, setResultExisted] = useState(false) + // const [resultExisted, setResultExisted] = useState(false) useEffect(() => { - if (!appInfo) return - updateAppInfo(appInfo) - }, [appInfo, updateAppInfo]) + if (!appData) return + updateAppInfo(appData) + }, [appData, updateAppInfo]) - useEffect(() => { - if (!tryAppParams) return - updateAppParams(tryAppParams) - }, [tryAppParams, updateAppParams]) + // useEffect(() => { + // if (!tryAppParams) return + // updateAppParams(tryAppParams) + // }, [tryAppParams, updateAppParams]) - useEffect(() => { - (async () => { - if (!appData || !appParams) - return - const { site: siteInfo, custom_config } = appData - setSiteInfo(siteInfo as SiteInfo) - setCustomConfig(custom_config) + // useEffect(() => { + // (async () => { + // if (!appData || !appParams) + // return + // const { site: siteInfo, custom_config } = appData + // setSiteInfo(siteInfo as SiteInfo) + // setCustomConfig(custom_config) - const { user_input_form, more_like_this, file_upload, text_to_speech }: any = appParams - setVisionConfig({ - // legacy of image upload compatible - ...file_upload, - transfer_methods: file_upload?.allowed_file_upload_methods || file_upload?.allowed_upload_methods, - // legacy of image upload compatible - image_file_size_limit: appParams?.system_parameters.image_file_size_limit, - fileUploadConfig: appParams?.system_parameters, - } as any) - const prompt_variables = userInputsFormToPromptVariables(user_input_form) - setPromptConfig({ - prompt_template: '', // placeholder for future - prompt_variables, - } as PromptConfig) - setMoreLikeThisConfig(more_like_this) - setTextToSpeechConfig(text_to_speech) - })() - }, [appData, appParams]) + // const { user_input_form, more_like_this, file_upload, text_to_speech }: any = appParams + // setVisionConfig({ + // // legacy of image upload compatible + // ...file_upload, + // transfer_methods: file_upload?.allowed_file_upload_methods || file_upload?.allowed_upload_methods, + // // legacy of image upload compatible + // image_file_size_limit: appParams?.system_parameters.image_file_size_limit, + // fileUploadConfig: appParams?.system_parameters, + // } as any) + // const prompt_variables = userInputsFormToPromptVariables(user_input_form) + // setPromptConfig({ + // prompt_template: '', // placeholder for future + // prompt_variables, + // } as PromptConfig) + // setMoreLikeThisConfig(more_like_this) + // setTextToSpeechConfig(text_to_speech) + // })() + // }, [appData, appParams]) - const handleCompleted = noop + // const handleCompleted = noop - const renderRes = (task?: Task) => ( setResultExisted(true)} - />) + // const renderRes = (task?: Task) => ( setResultExisted(true)} + // />) - const renderResWrap = ( -
-
- {renderRes()} -
-
- ) + // const renderResWrap = ( + //
+ //
+ // {renderRes()} + //
+ //
+ // ) + + return (
xxxx
) // console.log(siteInfo, promptConfig) diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 05a55e0c51..9425e1a71f 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -1,11 +1,16 @@ import { - getPublic as get, + get, } from './base' import type { - AppData, + SiteInfo, } from '@/models/share' -// would use trial-apps after api is ok -export const fetchTryAppInfo = async () => { - return get('/site') as Promise +type TryAppInfo = { + name: string + mode: 'chat' | 'text-generation' | 'workflow' + site: SiteInfo +} + +export const fetchTryAppInfo = async (appId: string) => { + return get(`/trial-apps/${appId}`) as Promise } diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index c3a686dbcb..1350997990 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -4,11 +4,11 @@ import { AppSourceType, fetchAppParams } from './share' const NAME_SPACE = 'try-app' -export const useGetTryAppInfo = () => { +export const useGetTryAppInfo = (appId: string) => { return useQuery({ queryKey: [NAME_SPACE, 'appInfo'], queryFn: () => { - return fetchTryAppInfo() + return fetchTryAppInfo(appId) }, }) } From c73e84d9927390d71ed2142631dcd836bc5aeeed Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 10 Oct 2025 16:34:10 +0800 Subject: [PATCH 13/85] feat: can show text completion run result pages --- web/app/(commonLayout)/try/right/page.tsx | 9 + web/app/components/try/app/meta.tsx | 17 ++ .../components/try/app/text-generation.tsx | 226 +++++++++--------- web/service/share.ts | 2 +- web/service/use-try-app.ts | 4 +- 5 files changed, 146 insertions(+), 112 deletions(-) create mode 100644 web/app/(commonLayout)/try/right/page.tsx create mode 100644 web/app/components/try/app/meta.tsx diff --git a/web/app/(commonLayout)/try/right/page.tsx b/web/app/(commonLayout)/try/right/page.tsx new file mode 100644 index 0000000000..8ea68b5b3d --- /dev/null +++ b/web/app/(commonLayout)/try/right/page.tsx @@ -0,0 +1,9 @@ +import Meta from '../../../components/try/app/meta' + +const Page = () => { + return ( + + ) +} + +export default Page diff --git a/web/app/components/try/app/meta.tsx b/web/app/components/try/app/meta.tsx new file mode 100644 index 0000000000..9c19e40f83 --- /dev/null +++ b/web/app/components/try/app/meta.tsx @@ -0,0 +1,17 @@ +'use client' +import type { FC } from 'react' +import React from 'react' + +type Props = { + +} + +const Meta: FC = ({ +}) => { + return ( +
+ Meta Info +
+ ) +} +export default React.memo(Meta) diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index f05523223f..447b851f1b 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -9,7 +9,18 @@ import Loading from '@/app/components/base/loading' import { appDefaultIconBackground } from '@/config' import RunOnce from '../../share/text-generation/run-once' import { useWebAppStore } from '@/context/web-app-context' -import type { AppData } from '@/models/share' +import type { AppData, SiteInfo } from '@/models/share' +import { useGetTryAppParams } from '@/service/use-try-app' +import type { MoreLikeThisConfig, PromptConfig, TextToSpeechConfig } from '@/models/debug' +import { userInputsFormToPromptVariables } from '@/utils/model-config' +import type { VisionFile, VisionSettings } from '@/types/app' +import { Resolution, TransferMethod } from '@/types/app' +import { useBoolean } from 'ahooks' +import { noop } from 'lodash' +import type { Task } from '../../share/text-generation/types' +import Res from '@/app/components/share/text-generation/result' +import { AppSourceType } from '@/service/share' +import { TaskStatus } from '@/app/components/share/text-generation/types' type Props = { appId: string @@ -33,130 +44,127 @@ const TextGeneration: FC = ({ doSetInputs(newInputs) inputsRef.current = newInputs }, []) - console.log(isPC, setInputs) + // console.log(isPC, setInputs) const updateAppInfo = useWebAppStore(s => s.updateAppInfo) - // const { data: tryAppParams } = useGetTryAppParams() - // const updateAppParams = useWebAppStore(s => s.updateAppParams) - // const appParams = useWebAppStore(s => s.appParams) - // const [siteInfo, setSiteInfo] = useState(null) - // const [promptConfig, setPromptConfig] = useState(null) - // const [customConfig, setCustomConfig] = useState | null>(null) - // const [moreLikeThisConfig, setMoreLikeThisConfig] = useState(null) - // const [textToSpeechConfig, setTextToSpeechConfig] = useState(null) - // const [controlSend, setControlSend] = useState(0) - // const [visionConfig, setVisionConfig] = useState({ - // enabled: false, - // number_limits: 2, - // detail: Resolution.low, - // transfer_methods: [TransferMethod.local_file], - // }) - // const [completionFiles, setCompletionFiles] = useState([]) - // const [isShowResultPanel, { setTrue: doShowResultPanel, setFalse: hideResultPanel }] = useBoolean(false) - // const showResultPanel = () => { - // // fix: useClickAway hideResSidebar will close sidebar - // setTimeout(() => { - // doShowResultPanel() - // }, 0) - // } + const { data: tryAppParams } = useGetTryAppParams(appId) - // const handleSend = () => { - // setControlSend(Date.now()) - // showResultPanel() - // } + const updateAppParams = useWebAppStore(s => s.updateAppParams) + const appParams = useWebAppStore(s => s.appParams) + const [siteInfo, setSiteInfo] = useState(null) + const [promptConfig, setPromptConfig] = useState(null) + const [customConfig, setCustomConfig] = useState | null>(null) + const [moreLikeThisConfig, setMoreLikeThisConfig] = useState(null) + const [textToSpeechConfig, setTextToSpeechConfig] = useState(null) + const [controlSend, setControlSend] = useState(0) + const [visionConfig, setVisionConfig] = useState({ + enabled: false, + number_limits: 2, + detail: Resolution.low, + transfer_methods: [TransferMethod.local_file], + }) + const [completionFiles, setCompletionFiles] = useState([]) + const [isShowResultPanel, { setTrue: doShowResultPanel, setFalse: hideResultPanel }] = useBoolean(false) + const showResultPanel = () => { + // fix: useClickAway hideResSidebar will close sidebar + setTimeout(() => { + doShowResultPanel() + }, 0) + } - // const [resultExisted, setResultExisted] = useState(false) + const handleSend = () => { + setControlSend(Date.now()) + showResultPanel() + } + + const [resultExisted, setResultExisted] = useState(false) useEffect(() => { if (!appData) return updateAppInfo(appData) }, [appData, updateAppInfo]) - // useEffect(() => { - // if (!tryAppParams) return - // updateAppParams(tryAppParams) - // }, [tryAppParams, updateAppParams]) + useEffect(() => { + if (!tryAppParams) return + updateAppParams(tryAppParams) + }, [tryAppParams, updateAppParams]) - // useEffect(() => { - // (async () => { - // if (!appData || !appParams) - // return - // const { site: siteInfo, custom_config } = appData - // setSiteInfo(siteInfo as SiteInfo) - // setCustomConfig(custom_config) + useEffect(() => { + (async () => { + if (!appData || !appParams) + return + const { site: siteInfo, custom_config } = appData + setSiteInfo(siteInfo as SiteInfo) + setCustomConfig(custom_config) - // const { user_input_form, more_like_this, file_upload, text_to_speech }: any = appParams - // setVisionConfig({ - // // legacy of image upload compatible - // ...file_upload, - // transfer_methods: file_upload?.allowed_file_upload_methods || file_upload?.allowed_upload_methods, - // // legacy of image upload compatible - // image_file_size_limit: appParams?.system_parameters.image_file_size_limit, - // fileUploadConfig: appParams?.system_parameters, - // } as any) - // const prompt_variables = userInputsFormToPromptVariables(user_input_form) - // setPromptConfig({ - // prompt_template: '', // placeholder for future - // prompt_variables, - // } as PromptConfig) - // setMoreLikeThisConfig(more_like_this) - // setTextToSpeechConfig(text_to_speech) - // })() - // }, [appData, appParams]) + const { user_input_form, more_like_this, file_upload, text_to_speech }: any = appParams + setVisionConfig({ + // legacy of image upload compatible + ...file_upload, + transfer_methods: file_upload?.allowed_file_upload_methods || file_upload?.allowed_upload_methods, + // legacy of image upload compatible + image_file_size_limit: appParams?.system_parameters.image_file_size_limit, + fileUploadConfig: appParams?.system_parameters, + } as any) + const prompt_variables = userInputsFormToPromptVariables(user_input_form) + setPromptConfig({ + prompt_template: '', // placeholder for future + prompt_variables, + } as PromptConfig) + setMoreLikeThisConfig(more_like_this) + setTextToSpeechConfig(text_to_speech) + })() + }, [appData, appParams]) - // const handleCompleted = noop + const handleCompleted = noop - // const renderRes = (task?: Task) => ( setResultExisted(true)} - // />) + const renderRes = (task?: Task) => ( setResultExisted(true)} + />) - // const renderResWrap = ( - //
- //
- // {renderRes()} - //
- //
- // ) + const renderResWrap = ( +
+
+ {renderRes()} +
+
+ ) - return (
xxxx
) - - // console.log(siteInfo, promptConfig) - - if(isFetchingAppInfo || !siteInfo || !promptConfig) { + if(!siteInfo || !promptConfig) { return (
diff --git a/web/service/share.ts b/web/service/share.ts index a940af98c5..70f1044c61 100644 --- a/web/service/share.ts +++ b/web/service/share.ts @@ -39,7 +39,7 @@ export enum AppSourceType { const apiPrefix = { [AppSourceType.webApp]: '', [AppSourceType.installedApp]: 'installed-apps', - [AppSourceType.tryApp]: 'installed-apps', // 'trial-apps', use 'installed-apps' for test + [AppSourceType.tryApp]: 'trial-apps', } function getIsPublicAPI(appSourceType: AppSourceType) { diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index 1350997990..1d7ed2ca02 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -13,11 +13,11 @@ export const useGetTryAppInfo = (appId: string) => { }) } -export const useGetTryAppParams = () => { +export const useGetTryAppParams = (appId: string) => { return useQuery({ queryKey: [NAME_SPACE, 'appParams'], queryFn: () => { - return fetchAppParams(AppSourceType.webApp) // todo: wait api + return fetchAppParams(AppSourceType.tryApp, appId) }, }) } From d1e5d30ea98d1506c007ab67942498dd6c1eae66 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 10 Oct 2025 16:39:42 +0800 Subject: [PATCH 14/85] fix: text generation api url --- web/app/components/try/app/index.tsx | 1 - web/app/components/try/app/text-generation.tsx | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx index 24c0a9a4e8..5c737eb061 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/try/app/index.tsx @@ -25,7 +25,6 @@ const TryApp: FC = ({
) } - console.log(appInfo) return (
{isChat && ( diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index 447b851f1b..f4cdcc7d84 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -124,7 +124,7 @@ const TextGeneration: FC = ({ isCallBatchAPI={false} isPC={isPC} isMobile={!isPC} - appSourceType={AppSourceType.installedApp} + appSourceType={AppSourceType.tryApp} appId={appId} isError={task?.status === TaskStatus.failed} promptConfig={promptConfig} From ac351b700c233c937131c59be8191cafa6c879c1 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 10 Oct 2025 16:51:49 +0800 Subject: [PATCH 15/85] chore: some ui --- web/app/components/try/app/text-generation.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index f4cdcc7d84..c795dc14c8 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -4,7 +4,6 @@ import React, { useCallback, useEffect, useRef, useState } from 'react' import cn from '@/utils/classnames' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import AppIcon from '@/app/components/base/app-icon' -import MenuDropdown from '@/app/components/share/text-generation/menu-dropdown' import Loading from '@/app/components/base/loading' import { appDefaultIconBackground } from '@/config' import RunOnce from '../../share/text-generation/run-once' @@ -21,6 +20,7 @@ import type { Task } from '../../share/text-generation/types' import Res from '@/app/components/share/text-generation/result' import { AppSourceType } from '@/service/share' import { TaskStatus } from '@/app/components/share/text-generation/types' +import useDocumentTitle from '@/hooks/use-document-title' type Props = { appId: string @@ -37,6 +37,7 @@ const TextGeneration: FC = ({ }) => { const media = useBreakpoints() const isPC = media === MediaType.pc + useDocumentTitle(appData?.site?.title || '') const [inputs, doSetInputs] = useState>({}) const inputsRef = useRef>(inputs) @@ -187,7 +188,7 @@ const TextGeneration: FC = ({ 'rounded-l-2xl', )}> {/* Header */} -
+
= ({ imageUrl={siteInfo.icon_url} />
{siteInfo.title}
-
{siteInfo.description && (
{siteInfo.description}
From b0aef35c63452004162050344a1836aa4f056767 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 10 Oct 2025 18:24:56 +0800 Subject: [PATCH 16/85] feat: try chat flow app --- .../base/chat/embedded-chatbot/chat-wrapper.tsx | 3 +-- .../base/chat/embedded-chatbot/context.tsx | 3 +++ .../components/base/chat/embedded-chatbot/hooks.tsx | 12 ++++++------ web/app/components/try/app/chat.tsx | 2 +- web/app/components/try/app/index.tsx | 2 +- web/service/try-app.ts | 2 +- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx index dc1e969b53..6dc504ad91 100644 --- a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx +++ b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx @@ -14,7 +14,6 @@ import { InputVarType } from '@/app/components/workflow/types' import { TransferMethod } from '@/types/app' import InputsForm from '@/app/components/base/chat/embedded-chatbot/inputs-form' import { - AppSourceType, fetchSuggestedQuestions, getUrl, stopChatMessageResponding, @@ -53,9 +52,9 @@ const ChatWrapper = () => { setIsResponding, allInputsHidden, initUserVariables, + appSourceType, } = useEmbeddedChatbotContext() - const appSourceType = isInstalledApp ? AppSourceType.installedApp : AppSourceType.webApp const appConfig = useMemo(() => { const config = appParams || {} diff --git a/web/app/components/base/chat/embedded-chatbot/context.tsx b/web/app/components/base/chat/embedded-chatbot/context.tsx index b8e385d33f..ef48d0a6c9 100644 --- a/web/app/components/base/chat/embedded-chatbot/context.tsx +++ b/web/app/components/base/chat/embedded-chatbot/context.tsx @@ -15,6 +15,7 @@ import type { ConversationItem, } from '@/models/share' import { noop } from 'lodash-es' +import { AppSourceType } from '@/service/share' export type EmbeddedChatbotContextValue = { userCanAccess?: boolean @@ -40,6 +41,7 @@ export type EmbeddedChatbotContextValue = { chatShouldReloadKey: string isMobile: boolean isInstalledApp: boolean + appSourceType: AppSourceType allowResetChat: boolean appId?: string disableFeedback?: boolean @@ -75,6 +77,7 @@ export const EmbeddedChatbotContext = createContext handleNewConversationCompleted: noop, chatShouldReloadKey: '', isMobile: false, + appSourceType: AppSourceType.webApp, isInstalledApp: false, allowResetChat: true, handleFeedback: noop, diff --git a/web/app/components/base/chat/embedded-chatbot/hooks.tsx b/web/app/components/base/chat/embedded-chatbot/hooks.tsx index ba7b902d5f..84309ba98b 100644 --- a/web/app/components/base/chat/embedded-chatbot/hooks.tsx +++ b/web/app/components/base/chat/embedded-chatbot/hooks.tsx @@ -70,13 +70,12 @@ function getFormattedChatList(messages: any[]) { } export const useEmbeddedChatbot = (appSourceType = AppSourceType.webApp, tryAppId?: string) => { - // const isWebApp = appSourceType === AppSourceType.webApp - const isInstalledApp = false // webapp and try app + const isInstalledApp = false // just can be webapp and try app const isTryApp = appSourceType === AppSourceType.tryApp const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) - const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', isTryApp ? fetchTryAppInfo : fetchAppInfo) + const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', isTryApp ? () => fetchTryAppInfo(tryAppId) : fetchAppInfo) const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp({ - appId: appInfo?.app_id, + appId: appInfo?.app_id || tryAppId, isInstalledApp, enabled: systemFeatures.webapp_auth.enabled && !isTryApp, }) @@ -154,8 +153,8 @@ export const useEmbeddedChatbot = (appSourceType = AppSourceType.webApp, tryAppI }, [currentConversationId, newConversationId]) const { data: appParams } = useSWR(['appParams', appSourceType, appId], () => fetchAppParams(appSourceType, appId)) - const { data: appMeta } = useSWR(['appMeta', appSourceType, appId], () => fetchAppMeta(appSourceType, appId)) - const { data: appPinnedConversationData } = useSWR(['appConversationData', appSourceType, appId, true], () => fetchConversations(appSourceType, appId, undefined, true, 100)) + const { data: appMeta } = useSWR(isTryApp ? null : ['appMeta', appSourceType, appId], () => fetchAppMeta(appSourceType, appId)) + const { data: appPinnedConversationData } = useSWR(isTryApp ? null : ['appConversationData', appSourceType, appId, true], () => fetchConversations(appSourceType, appId, undefined, true, 100)) const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR(isTryApp ? null : ['appConversationData', appSourceType, appId, false], () => fetchConversations(appSourceType, appId, undefined, false, 100)) const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR(chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, appSourceType, appId] : null, () => fetchChatList(chatShouldReloadKey, appSourceType, appId)) @@ -408,6 +407,7 @@ export const useEmbeddedChatbot = (appSourceType = AppSourceType.webApp, tryAppI appInfoError, appInfoLoading: appInfoLoading || (systemFeatures.webapp_auth.enabled && isCheckingPermission), userCanAccess: isTryApp || (systemFeatures.webapp_auth.enabled ? (userCanAccessResult as { result: boolean })?.result : true), + appSourceType, isInstalledApp, allowResetChat, appId, diff --git a/web/app/components/try/app/chat.tsx b/web/app/components/try/app/chat.tsx index 364f0d2860..56d00db099 100644 --- a/web/app/components/try/app/chat.tsx +++ b/web/app/components/try/app/chat.tsx @@ -32,7 +32,7 @@ const TryApp: FC = ({ disableFeedback: true, isMobile, themeBuilder, - }}> + } as any}>
diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx index 5c737eb061..d5c1063705 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/try/app/index.tsx @@ -16,7 +16,7 @@ const TryApp: FC = ({ }) => { const { isFetching: isFetchingAppInfo, data: appInfo } = useGetTryAppInfo(appId) const mode = appInfo?.mode - const isChat = mode === 'chat' + const isChat = mode === 'chat' || mode === 'advanced-chat' const isCompletion = !isChat if (isFetchingAppInfo) { return ( diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 9425e1a71f..5384cba9f7 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -7,7 +7,7 @@ import type { type TryAppInfo = { name: string - mode: 'chat' | 'text-generation' | 'workflow' + mode: 'chat' | 'advanced-chat' | 'text-generation' | 'workflow' site: SiteInfo } From 1ab7e1cba805a394ff883a5c02303eddddc97a71 Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 11 Oct 2025 10:11:14 +0800 Subject: [PATCH 17/85] fix: try chatflow run url problem --- .../components/base/chat/embedded-chatbot/chat-wrapper.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx index 6dc504ad91..68d599f57d 100644 --- a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx +++ b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx @@ -14,6 +14,7 @@ import { InputVarType } from '@/app/components/workflow/types' import { TransferMethod } from '@/types/app' import InputsForm from '@/app/components/base/chat/embedded-chatbot/inputs-form' import { + AppSourceType, fetchSuggestedQuestions, getUrl, stopChatMessageResponding, @@ -138,14 +139,13 @@ const ChatWrapper = () => { conversation_id: currentConversationId, parent_message_id: (isRegenerate ? parentAnswer?.id : getLastAnswer(chatList)?.id) || null, } - handleSend( getUrl('chat-messages', appSourceType, appId || ''), data, { onGetSuggestedQuestions: responseItemId => fetchSuggestedQuestions(responseItemId, appSourceType, appId), onConversationComplete: currentConversationId ? undefined : handleNewConversationCompleted, - isPublicAPI: !isInstalledApp, + isPublicAPI: appSourceType === AppSourceType.webApp, }, ) }, [currentConversationId, currentConversationInputs, newConversationInputs, chatList, handleSend, isInstalledApp, appId, handleNewConversationCompleted]) From 50072a63ae866ba01851933292eec0d9e8b8c34e Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 11 Oct 2025 10:42:55 +0800 Subject: [PATCH 18/85] feat: support try agent app --- web/app/components/try/app/index.tsx | 2 +- web/app/components/try/app/text-generation.tsx | 1 - web/service/try-app.ts | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx index d5c1063705..5509acc86d 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/try/app/index.tsx @@ -16,7 +16,7 @@ const TryApp: FC = ({ }) => { const { isFetching: isFetchingAppInfo, data: appInfo } = useGetTryAppInfo(appId) const mode = appInfo?.mode - const isChat = mode === 'chat' || mode === 'advanced-chat' + const isChat = ['chat', 'advanced-chat', 'agent-chat'].includes(mode!) const isCompletion = !isChat if (isFetchingAppInfo) { return ( diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index c795dc14c8..fe246c75f5 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -45,7 +45,6 @@ const TextGeneration: FC = ({ doSetInputs(newInputs) inputsRef.current = newInputs }, []) - // console.log(isPC, setInputs) const updateAppInfo = useWebAppStore(s => s.updateAppInfo) const { data: tryAppParams } = useGetTryAppParams(appId) diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 5384cba9f7..78df7ba8ed 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -1,3 +1,4 @@ +import type { AppMode } from '@/types/app' import { get, } from './base' @@ -7,7 +8,7 @@ import type { type TryAppInfo = { name: string - mode: 'chat' | 'advanced-chat' | 'text-generation' | 'workflow' + mode: AppMode site: SiteInfo } From 3276d6429db4e05c615266cd6aff25bf7af5e0c4 Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 11 Oct 2025 10:53:24 +0800 Subject: [PATCH 19/85] chore: handle completion acion --- web/app/components/app/text-generate/item/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/app/components/app/text-generate/item/index.tsx b/web/app/components/app/text-generate/item/index.tsx index 9654e86558..0a715c4b68 100644 --- a/web/app/components/app/text-generate/item/index.tsx +++ b/web/app/components/app/text-generate/item/index.tsx @@ -99,6 +99,7 @@ const GenerationItem: FC = ({ const { t } = useTranslation() const params = useParams() const isTop = depth === 1 + const isTryApp = appSourceType === AppSourceType.tryApp const [completionRes, setCompletionRes] = useState('') const [childMessageId, setChildMessageId] = useState(null) const [childFeedback, setChildFeedback] = useState({ @@ -329,13 +330,13 @@ const GenerationItem: FC = ({ )} - {isInWebApp && !isWorkflow && ( + {isInWebApp && !isWorkflow && !isTryApp && ( { onSave?.(messageId as string) }}> )}
- {(supportFeedback || isInWebApp) && !isWorkflow && !isError && messageId && ( + {(supportFeedback || isInWebApp) && !isWorkflow && !isTryApp && !isError && messageId && (
{!feedback?.rating && ( <> From 93be1219ebc597eed7fa44d9f9d79a3bb34f93a5 Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 11 Oct 2025 11:00:26 +0800 Subject: [PATCH 20/85] chore: try app title --- web/app/components/try/app/index.tsx | 4 ++++ web/app/components/try/app/text-generation.tsx | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/web/app/components/try/app/index.tsx b/web/app/components/try/app/index.tsx index 5509acc86d..26c24fcaba 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/try/app/index.tsx @@ -6,6 +6,7 @@ import TextGeneration from './text-generation' import Loading from '../../base/loading' import { useGetTryAppInfo } from '@/service/use-try-app' import type { AppData } from '@/models/share' +import useDocumentTitle from '@/hooks/use-document-title' type Props = { appId: string @@ -18,6 +19,9 @@ const TryApp: FC = ({ const mode = appInfo?.mode const isChat = ['chat', 'advanced-chat', 'agent-chat'].includes(mode!) const isCompletion = !isChat + + useDocumentTitle(appInfo?.site?.title || '') + if (isFetchingAppInfo) { return (
diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/try/app/text-generation.tsx index fe246c75f5..889606d700 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/try/app/text-generation.tsx @@ -20,7 +20,6 @@ import type { Task } from '../../share/text-generation/types' import Res from '@/app/components/share/text-generation/result' import { AppSourceType } from '@/service/share' import { TaskStatus } from '@/app/components/share/text-generation/types' -import useDocumentTitle from '@/hooks/use-document-title' type Props = { appId: string @@ -37,7 +36,6 @@ const TextGeneration: FC = ({ }) => { const media = useBreakpoints() const isPC = media === MediaType.pc - useDocumentTitle(appData?.site?.title || '') const [inputs, doSetInputs] = useState>({}) const inputsRef = useRef>(inputs) From 781a9a56cdd5099b019255edbcdf83697f9465d1 Mon Sep 17 00:00:00 2001 From: Joel Date: Sat, 11 Oct 2025 14:58:54 +0800 Subject: [PATCH 21/85] feat: explore title change --- web/app/components/explore/app-list/index.tsx | 25 ++++++++----------- web/i18n/de-DE/explore.ts | 2 -- web/i18n/en-US/explore.ts | 3 +-- web/i18n/es-ES/explore.ts | 2 -- web/i18n/fa-IR/explore.ts | 2 -- web/i18n/fr-FR/explore.ts | 2 -- web/i18n/hi-IN/explore.ts | 3 --- web/i18n/id-ID/explore.ts | 2 -- web/i18n/it-IT/explore.ts | 3 --- web/i18n/ja-JP/explore.ts | 3 +-- web/i18n/ko-KR/explore.ts | 2 -- web/i18n/pl-PL/explore.ts | 3 --- web/i18n/pt-BR/explore.ts | 2 -- web/i18n/ro-RO/explore.ts | 2 -- web/i18n/ru-RU/explore.ts | 2 -- web/i18n/sl-SI/explore.ts | 2 -- web/i18n/th-TH/explore.ts | 2 -- web/i18n/tr-TR/explore.ts | 2 -- web/i18n/uk-UA/explore.ts | 2 -- web/i18n/vi-VN/explore.ts | 2 -- web/i18n/zh-Hans/explore.ts | 3 +-- web/i18n/zh-Hant/explore.ts | 2 -- 22 files changed, 13 insertions(+), 60 deletions(-) diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 79cbff81c8..6ce69b48d1 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -143,32 +143,27 @@ const Apps = ({
- -
-
{t('explore.apps.title')}
-
{t('explore.apps.description')}
-
-
- <> - - +
{t('explore.apps.title')}
handleKeywordsChange(e.target.value)} onClear={() => handleKeywordsChange('')} /> +
+
+
Date: Sat, 11 Oct 2025 15:07:03 +0800 Subject: [PATCH 22/85] feat: banner placeholder --- web/app/components/explore/app-list/index.tsx | 4 ++++ web/app/components/explore/banner.tsx | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 web/app/components/explore/banner.tsx diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 6ce69b48d1..17930b6f0f 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -22,6 +22,7 @@ import { } from '@/models/app' import { useImportDSL } from '@/hooks/use-import-dsl' import DSLConfirmModal from '@/app/components/app/create-from-dsl-modal/dsl-confirm-modal' +import Banner from '../banner' type AppsProps = { onSuccess?: () => void @@ -143,6 +144,9 @@ const Apps = ({
+
+ +
diff --git a/web/app/components/explore/banner.tsx b/web/app/components/explore/banner.tsx new file mode 100644 index 0000000000..b33347f513 --- /dev/null +++ b/web/app/components/explore/banner.tsx @@ -0,0 +1,12 @@ +'use client' +import type { FC } from 'react' +import React from 'react' + +const Banner: FC = () => { + return ( +
+ Banner placeholder +
+ ) +} +export default React.memo(Banner) From 176d810c8de1b755d52831ef53913e230c537999 Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 13 Oct 2025 10:55:49 +0800 Subject: [PATCH 23/85] chore: update category ui --- web/app/components/explore/category.tsx | 4 +--- web/i18n/de-DE/explore.ts | 1 - web/i18n/en-US/explore.ts | 2 +- web/i18n/es-ES/explore.ts | 1 - web/i18n/fa-IR/explore.ts | 1 - web/i18n/fr-FR/explore.ts | 1 - web/i18n/hi-IN/explore.ts | 1 - web/i18n/id-ID/explore.ts | 1 - web/i18n/it-IT/explore.ts | 1 - web/i18n/ja-JP/explore.ts | 2 +- web/i18n/ko-KR/explore.ts | 1 - web/i18n/pl-PL/explore.ts | 1 - web/i18n/pt-BR/explore.ts | 1 - web/i18n/ro-RO/explore.ts | 1 - web/i18n/ru-RU/explore.ts | 1 - web/i18n/sl-SI/explore.ts | 1 - web/i18n/th-TH/explore.ts | 1 - web/i18n/tr-TR/explore.ts | 1 - web/i18n/uk-UA/explore.ts | 1 - web/i18n/vi-VN/explore.ts | 1 - web/i18n/zh-Hans/explore.ts | 2 +- web/i18n/zh-Hant/explore.ts | 1 - 22 files changed, 4 insertions(+), 24 deletions(-) diff --git a/web/app/components/explore/category.tsx b/web/app/components/explore/category.tsx index a36c91a73d..66b63c68da 100644 --- a/web/app/components/explore/category.tsx +++ b/web/app/components/explore/category.tsx @@ -5,7 +5,6 @@ import { useTranslation } from 'react-i18next' import cn from '@/utils/classnames' import exploreI18n from '@/i18n/en-US/explore' import type { AppCategory } from '@/models/explore' -import { ThumbsUp } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback' const categoryI18n = exploreI18n.category @@ -31,7 +30,7 @@ const Category: FC = ({ const isAllCategories = !list.includes(value as AppCategory) || value === allCategoriesEn const itemClassName = (isSelected: boolean) => cn( - 'flex h-[32px] cursor-pointer items-center rounded-lg border-[0.5px] border-transparent px-3 py-[7px] font-medium leading-[18px] text-text-tertiary hover:bg-components-main-nav-nav-button-bg-active', + 'system-sm-medium flex h-7 cursor-pointer items-center rounded-lg border border-transparent px-3 text-text-tertiary hover:bg-components-main-nav-nav-button-bg-active', isSelected && 'border-components-main-nav-nav-button-border bg-components-main-nav-nav-button-bg-active text-components-main-nav-nav-button-text-active shadow-xs', ) @@ -41,7 +40,6 @@ const Category: FC = ({ className={itemClassName(isAllCategories)} onClick={() => onChange(allCategoriesEn)} > - {t('explore.apps.allCategories')}
{list.filter(name => name !== allCategoriesEn).map(name => ( diff --git a/web/i18n/de-DE/explore.ts b/web/i18n/de-DE/explore.ts index 3965bffbc8..564f065815 100644 --- a/web/i18n/de-DE/explore.ts +++ b/web/i18n/de-DE/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Alle Kategorien', }, appCard: { addToWorkspace: 'Zum Arbeitsbereich hinzufügen', diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index ef0a620e9e..206e09bc92 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -17,7 +17,7 @@ const translation = { }, apps: { title: 'Try Dify\'s curated apps to find AI solutions for your business', - allCategories: 'Recommended', + allCategories: 'All', }, appCard: { addToWorkspace: 'Add to Workspace', diff --git a/web/i18n/es-ES/explore.ts b/web/i18n/es-ES/explore.ts index 4ef2b32242..abeccfdd93 100644 --- a/web/i18n/es-ES/explore.ts +++ b/web/i18n/es-ES/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Recomendado', }, appCard: { addToWorkspace: 'Agregar al espacio de trabajo', diff --git a/web/i18n/fa-IR/explore.ts b/web/i18n/fa-IR/explore.ts index b104a49881..de0ad6d963 100644 --- a/web/i18n/fa-IR/explore.ts +++ b/web/i18n/fa-IR/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'پیشنهاد شده', }, appCard: { addToWorkspace: 'افزودن به فضای کاری', diff --git a/web/i18n/fr-FR/explore.ts b/web/i18n/fr-FR/explore.ts index 92798929c9..5c641ceaf1 100644 --- a/web/i18n/fr-FR/explore.ts +++ b/web/i18n/fr-FR/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Recommandé', }, appCard: { addToWorkspace: 'Ajouter à l\'espace de travail', diff --git a/web/i18n/hi-IN/explore.ts b/web/i18n/hi-IN/explore.ts index f17a3bf4d1..adb518fbac 100644 --- a/web/i18n/hi-IN/explore.ts +++ b/web/i18n/hi-IN/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'अनुशंसित', }, appCard: { addToWorkspace: 'कार्यक्षेत्र में जोड़ें', diff --git a/web/i18n/id-ID/explore.ts b/web/i18n/id-ID/explore.ts index 6eb0fceec0..336cfb576e 100644 --- a/web/i18n/id-ID/explore.ts +++ b/web/i18n/id-ID/explore.ts @@ -15,7 +15,6 @@ const translation = { chat: 'Mengobrol', }, apps: { - allCategories: 'Direkomendasikan', }, appCard: { customize: 'Menyesuaikan', diff --git a/web/i18n/it-IT/explore.ts b/web/i18n/it-IT/explore.ts index bd021965b5..1682b8c852 100644 --- a/web/i18n/it-IT/explore.ts +++ b/web/i18n/it-IT/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Consigliato', }, appCard: { addToWorkspace: 'Aggiungi a Workspace', diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index 633c1f47a7..b236d56d23 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -17,7 +17,7 @@ const translation = { }, apps: { title: 'Difyの厳選アプリを試して、ビジネス向けのAIソリューションを見つけましょう', - allCategories: '推奨', + allCategories: '全て', }, appCard: { addToWorkspace: 'ワークスペースに追加', diff --git a/web/i18n/ko-KR/explore.ts b/web/i18n/ko-KR/explore.ts index 4af38ad45f..a302663a2c 100644 --- a/web/i18n/ko-KR/explore.ts +++ b/web/i18n/ko-KR/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: '모든 카테고리', }, appCard: { addToWorkspace: '작업 공간에 추가', diff --git a/web/i18n/pl-PL/explore.ts b/web/i18n/pl-PL/explore.ts index 84474f3d94..a325f5e89c 100644 --- a/web/i18n/pl-PL/explore.ts +++ b/web/i18n/pl-PL/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Polecane', }, appCard: { addToWorkspace: 'Dodaj do przestrzeni roboczej', diff --git a/web/i18n/pt-BR/explore.ts b/web/i18n/pt-BR/explore.ts index 6e6ee6dc50..5dc8a18ea9 100644 --- a/web/i18n/pt-BR/explore.ts +++ b/web/i18n/pt-BR/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Recomendado', }, appCard: { addToWorkspace: 'Adicionar ao Espaço de Trabalho', diff --git a/web/i18n/ro-RO/explore.ts b/web/i18n/ro-RO/explore.ts index 607451be3d..ae3a2b9c4f 100644 --- a/web/i18n/ro-RO/explore.ts +++ b/web/i18n/ro-RO/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Recomandate', }, appCard: { addToWorkspace: 'Adăugați la spațiul de lucru', diff --git a/web/i18n/ru-RU/explore.ts b/web/i18n/ru-RU/explore.ts index a977e07f4f..b26cdd24c6 100644 --- a/web/i18n/ru-RU/explore.ts +++ b/web/i18n/ru-RU/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Рекомендуемые', }, appCard: { addToWorkspace: 'Добавить в рабочее пространство', diff --git a/web/i18n/sl-SI/explore.ts b/web/i18n/sl-SI/explore.ts index ae1474f2e5..84bdc80880 100644 --- a/web/i18n/sl-SI/explore.ts +++ b/web/i18n/sl-SI/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Priporočeno', }, appCard: { addToWorkspace: 'Dodaj v delovni prostor', diff --git a/web/i18n/th-TH/explore.ts b/web/i18n/th-TH/explore.ts index ab64ec753a..b316240b71 100644 --- a/web/i18n/th-TH/explore.ts +++ b/web/i18n/th-TH/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'แนะ นำ', }, appCard: { addToWorkspace: 'เพิ่มไปยังพื้นที่ทํางาน', diff --git a/web/i18n/tr-TR/explore.ts b/web/i18n/tr-TR/explore.ts index ea6d4eddb5..402e1c3bac 100644 --- a/web/i18n/tr-TR/explore.ts +++ b/web/i18n/tr-TR/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Önerilen', }, appCard: { addToWorkspace: 'Çalışma Alanına Ekle', diff --git a/web/i18n/uk-UA/explore.ts b/web/i18n/uk-UA/explore.ts index 7fd053bdc3..e9e59e6353 100644 --- a/web/i18n/uk-UA/explore.ts +++ b/web/i18n/uk-UA/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Рекомендовані', }, appCard: { addToWorkspace: 'Додати до робочого простору', diff --git a/web/i18n/vi-VN/explore.ts b/web/i18n/vi-VN/explore.ts index 666017e87f..149c96dfb9 100644 --- a/web/i18n/vi-VN/explore.ts +++ b/web/i18n/vi-VN/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: 'Tất cả danh mục', }, appCard: { addToWorkspace: 'Thêm vào không gian làm việc', diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index b43b12197e..62ab9f699b 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -17,7 +17,7 @@ const translation = { }, apps: { title: '试用 Dify 精选示例应用,为您的业务寻找 AI 解决方案', - allCategories: '推荐', + allCategories: '所有', }, appCard: { addToWorkspace: '添加到工作区', diff --git a/web/i18n/zh-Hant/explore.ts b/web/i18n/zh-Hant/explore.ts index d11df0b141..64dc5b9400 100644 --- a/web/i18n/zh-Hant/explore.ts +++ b/web/i18n/zh-Hant/explore.ts @@ -16,7 +16,6 @@ const translation = { }, }, apps: { - allCategories: '推薦', }, appCard: { addToWorkspace: '新增到工作區', From 84b2913cd9d7cd213e35828fcd767bd4f2d053a3 Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 13 Oct 2025 11:12:10 +0800 Subject: [PATCH 24/85] feat: filter title --- web/app/components/explore/app-list/index.tsx | 17 ++++++++++++++++- web/i18n/en-US/explore.ts | 2 ++ web/i18n/ja-JP/explore.ts | 2 ++ web/i18n/zh-Hans/explore.ts | 2 ++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 17930b6f0f..d40ced8784 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -23,6 +23,7 @@ import { import { useImportDSL } from '@/hooks/use-import-dsl' import DSLConfirmModal from '@/app/components/app/create-from-dsl-modal/dsl-confirm-modal' import Banner from '../banner' +import Button from '../../base/button' type AppsProps = { onSuccess?: () => void @@ -43,6 +44,12 @@ const Apps = ({ const [keywords, setKeywords] = useState('') const [searchKeywords, setSearchKeywords] = useState('') + const hasFilterCondition = !!keywords + const handleResetFilter = useCallback(() => { + setKeywords('') + setSearchKeywords('') + }, []) + const { run: handleSearch } = useDebounceFn(() => { setSearchKeywords(keywords) }, { wait: 500 }) @@ -150,7 +157,15 @@ const Apps = ({
-
{t('explore.apps.title')}
+
+
{!hasFilterCondition ? t('explore.apps.title') : t('explore.apps.resultNum', { num: searchFilteredList.length })}
+ {hasFilterCondition && ( + <> +
+ + + )} +
Date: Mon, 13 Oct 2025 11:27:50 +0800 Subject: [PATCH 25/85] chore: add banner permission --- web/app/components/explore/app-list/index.tsx | 10 +++++++--- web/types/feature.ts | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index d40ced8784..55a07e96aa 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -24,6 +24,7 @@ import { useImportDSL } from '@/hooks/use-import-dsl' import DSLConfirmModal from '@/app/components/app/create-from-dsl-modal/dsl-confirm-modal' import Banner from '../banner' import Button from '../../base/button' +import { useGlobalPublicStore } from '@/context/global-public-context' type AppsProps = { onSuccess?: () => void @@ -38,6 +39,7 @@ const Apps = ({ onSuccess, }: AppsProps) => { const { t } = useTranslation() + const { systemFeatures } = useGlobalPublicStore() const { hasEditPermission } = useContext(ExploreContext) const allCategoriesEn = t('explore.apps.allCategories', { lng: 'en' }) @@ -151,9 +153,11 @@ const Apps = ({
-
- -
+ {systemFeatures.enable_explore_banner && ( +
+ +
+ )}
diff --git a/web/types/feature.ts b/web/types/feature.ts index 56fe0c0484..432cd32ce5 100644 --- a/web/types/feature.ts +++ b/web/types/feature.ts @@ -59,6 +59,8 @@ export type SystemFeatures = { allow_email_code_login: boolean allow_email_password_login: boolean } + enable_trial_app: boolean + enable_explore_banner: boolean } export const defaultSystemFeatures: SystemFeatures = { @@ -98,6 +100,8 @@ export const defaultSystemFeatures: SystemFeatures = { allow_email_code_login: false, allow_email_password_login: false, }, + enable_trial_app: false, + enable_explore_banner: false, } export enum DatasetAttr { From 44b49489728e0b3c3a06a1f2afebdcd40d216dfe Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 13 Oct 2025 15:07:25 +0800 Subject: [PATCH 26/85] chore: explore card ui and permission --- web/app/components/explore/app-card/index.tsx | 29 +++++++++++++++---- web/i18n/de-DE/explore.ts | 1 - web/i18n/en-US/explore.ts | 4 +-- web/i18n/es-ES/explore.ts | 1 - web/i18n/fa-IR/explore.ts | 1 - web/i18n/fr-FR/explore.ts | 1 - web/i18n/hi-IN/explore.ts | 1 - web/i18n/id-ID/explore.ts | 1 - web/i18n/it-IT/explore.ts | 1 - web/i18n/ja-JP/explore.ts | 3 +- web/i18n/ko-KR/explore.ts | 1 - web/i18n/pl-PL/explore.ts | 1 - web/i18n/pt-BR/explore.ts | 1 - web/i18n/ro-RO/explore.ts | 1 - web/i18n/ru-RU/explore.ts | 1 - web/i18n/sl-SI/explore.ts | 1 - web/i18n/th-TH/explore.ts | 1 - web/i18n/tr-TR/explore.ts | 1 - web/i18n/uk-UA/explore.ts | 1 - web/i18n/vi-VN/explore.ts | 1 - web/i18n/zh-Hans/explore.ts | 3 +- web/i18n/zh-Hant/explore.ts | 1 - web/models/explore.ts | 1 + 23 files changed, 30 insertions(+), 28 deletions(-) diff --git a/web/app/components/explore/app-card/index.tsx b/web/app/components/explore/app-card/index.tsx index 31d218a467..7857020556 100644 --- a/web/app/components/explore/app-card/index.tsx +++ b/web/app/components/explore/app-card/index.tsx @@ -6,6 +6,9 @@ import cn from '@/utils/classnames' import type { App } from '@/models/explore' import AppIcon from '@/app/components/base/app-icon' import { AppTypeIcon } from '../../app/type-selector' +import { useGlobalPublicStore } from '@/context/global-public-context' +import { RiArrowRightUpLine } from '@remixicon/react' +import Link from 'next/link' export type AppCardProps = { app: App canCreate: boolean @@ -21,8 +24,11 @@ const AppCard = ({ }: AppCardProps) => { const { t } = useTranslation() const { app: appBasicInfo } = app + const { systemFeatures } = useGlobalPublicStore() + const isTrialApp = app.can_trial && systemFeatures.enable_trial_app + return ( -
+
- {isExplore && canCreate && ( - )}
diff --git a/web/i18n/de-DE/explore.ts b/web/i18n/de-DE/explore.ts index 564f065815..0578c100a0 100644 --- a/web/i18n/de-DE/explore.ts +++ b/web/i18n/de-DE/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Zum Arbeitsbereich hinzufügen', customize: 'Anpassen', }, appCustomize: { diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index ec50e30192..6e30f1d50a 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -22,8 +22,8 @@ const translation = { resetFilter: 'Clear filter', }, appCard: { - addToWorkspace: 'Add to Workspace', - customize: 'Customize', + addToWorkspace: 'Use template', + try: 'Details', }, appCustomize: { title: 'Create app from {{name}}', diff --git a/web/i18n/es-ES/explore.ts b/web/i18n/es-ES/explore.ts index abeccfdd93..19cfe9ad79 100644 --- a/web/i18n/es-ES/explore.ts +++ b/web/i18n/es-ES/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Agregar al espacio de trabajo', customize: 'Personalizar', }, appCustomize: { diff --git a/web/i18n/fa-IR/explore.ts b/web/i18n/fa-IR/explore.ts index de0ad6d963..fe4bb2af57 100644 --- a/web/i18n/fa-IR/explore.ts +++ b/web/i18n/fa-IR/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'افزودن به فضای کاری', customize: 'سفارشی کردن', }, appCustomize: { diff --git a/web/i18n/fr-FR/explore.ts b/web/i18n/fr-FR/explore.ts index 5c641ceaf1..e16e709451 100644 --- a/web/i18n/fr-FR/explore.ts +++ b/web/i18n/fr-FR/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Ajouter à l\'espace de travail', customize: 'Personnaliser', }, appCustomize: { diff --git a/web/i18n/hi-IN/explore.ts b/web/i18n/hi-IN/explore.ts index adb518fbac..f3b7a550a4 100644 --- a/web/i18n/hi-IN/explore.ts +++ b/web/i18n/hi-IN/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'कार्यक्षेत्र में जोड़ें', customize: 'अनुकूलित करें', }, appCustomize: { diff --git a/web/i18n/id-ID/explore.ts b/web/i18n/id-ID/explore.ts index 336cfb576e..21f3ecff3b 100644 --- a/web/i18n/id-ID/explore.ts +++ b/web/i18n/id-ID/explore.ts @@ -18,7 +18,6 @@ const translation = { }, appCard: { customize: 'Menyesuaikan', - addToWorkspace: 'Tambahkan ke Ruang Kerja', }, appCustomize: { subTitle: 'Ikon & nama aplikasi', diff --git a/web/i18n/it-IT/explore.ts b/web/i18n/it-IT/explore.ts index 1682b8c852..683fa86847 100644 --- a/web/i18n/it-IT/explore.ts +++ b/web/i18n/it-IT/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Aggiungi a Workspace', customize: 'Personalizza', }, appCustomize: { diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index 4545e4ede4..d9aa8f44b1 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -22,7 +22,8 @@ const translation = { resetFilter: 'クリア', }, appCard: { - addToWorkspace: 'ワークスペースに追加', + addToWorkspace: 'テンプレートを使用', + try: '詳細', customize: 'カスタマイズ', }, appCustomize: { diff --git a/web/i18n/ko-KR/explore.ts b/web/i18n/ko-KR/explore.ts index a302663a2c..1d88002019 100644 --- a/web/i18n/ko-KR/explore.ts +++ b/web/i18n/ko-KR/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: '작업 공간에 추가', customize: '사용자 정의', }, appCustomize: { diff --git a/web/i18n/pl-PL/explore.ts b/web/i18n/pl-PL/explore.ts index a325f5e89c..028709950f 100644 --- a/web/i18n/pl-PL/explore.ts +++ b/web/i18n/pl-PL/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Dodaj do przestrzeni roboczej', customize: 'Dostosuj', }, appCustomize: { diff --git a/web/i18n/pt-BR/explore.ts b/web/i18n/pt-BR/explore.ts index 5dc8a18ea9..e9bb02602f 100644 --- a/web/i18n/pt-BR/explore.ts +++ b/web/i18n/pt-BR/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Adicionar ao Espaço de Trabalho', customize: 'Personalizar', }, appCustomize: { diff --git a/web/i18n/ro-RO/explore.ts b/web/i18n/ro-RO/explore.ts index ae3a2b9c4f..f6d2794f77 100644 --- a/web/i18n/ro-RO/explore.ts +++ b/web/i18n/ro-RO/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Adăugați la spațiul de lucru', customize: 'Personalizați', }, appCustomize: { diff --git a/web/i18n/ru-RU/explore.ts b/web/i18n/ru-RU/explore.ts index b26cdd24c6..f74c33577c 100644 --- a/web/i18n/ru-RU/explore.ts +++ b/web/i18n/ru-RU/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Добавить в рабочее пространство', customize: 'Настроить', }, appCustomize: { diff --git a/web/i18n/sl-SI/explore.ts b/web/i18n/sl-SI/explore.ts index 84bdc80880..75a47ec6e7 100644 --- a/web/i18n/sl-SI/explore.ts +++ b/web/i18n/sl-SI/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Dodaj v delovni prostor', customize: 'Prilagodi', }, appCustomize: { diff --git a/web/i18n/th-TH/explore.ts b/web/i18n/th-TH/explore.ts index b316240b71..f18e38c091 100644 --- a/web/i18n/th-TH/explore.ts +++ b/web/i18n/th-TH/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'เพิ่มไปยังพื้นที่ทํางาน', customize: 'ปรับแต่ง', }, appCustomize: { diff --git a/web/i18n/tr-TR/explore.ts b/web/i18n/tr-TR/explore.ts index 402e1c3bac..ab7b9ed7ef 100644 --- a/web/i18n/tr-TR/explore.ts +++ b/web/i18n/tr-TR/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Çalışma Alanına Ekle', customize: 'Özelleştir', }, appCustomize: { diff --git a/web/i18n/uk-UA/explore.ts b/web/i18n/uk-UA/explore.ts index e9e59e6353..0030c554f7 100644 --- a/web/i18n/uk-UA/explore.ts +++ b/web/i18n/uk-UA/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Додати до робочого простору', customize: 'Налаштувати', }, appCustomize: { diff --git a/web/i18n/vi-VN/explore.ts b/web/i18n/vi-VN/explore.ts index 149c96dfb9..9f7770742e 100644 --- a/web/i18n/vi-VN/explore.ts +++ b/web/i18n/vi-VN/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: 'Thêm vào không gian làm việc', customize: 'Tùy chỉnh', }, appCustomize: { diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index b0617cfabc..7b4c60298a 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -22,7 +22,8 @@ const translation = { resetFilter: '清除筛选', }, appCard: { - addToWorkspace: '添加到工作区', + addToWorkspace: '使用模板', + try: '详情', customize: '自定义', }, appCustomize: { diff --git a/web/i18n/zh-Hant/explore.ts b/web/i18n/zh-Hant/explore.ts index 64dc5b9400..cdcd6afe4a 100644 --- a/web/i18n/zh-Hant/explore.ts +++ b/web/i18n/zh-Hant/explore.ts @@ -18,7 +18,6 @@ const translation = { apps: { }, appCard: { - addToWorkspace: '新增到工作區', customize: '自定義', }, appCustomize: { diff --git a/web/models/explore.ts b/web/models/explore.ts index ad243e931e..735aa54eab 100644 --- a/web/models/explore.ts +++ b/web/models/explore.ts @@ -27,6 +27,7 @@ export type App = { installed: boolean editable: boolean is_agent: boolean + can_trial: boolean } export type InstalledApp = { From b14afda160789821938428d60650836baa8a9ee2 Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 13 Oct 2025 15:40:13 +0800 Subject: [PATCH 27/85] chore: app gallary nav --- web/app/components/explore/sidebar/index.tsx | 46 +++++--------------- web/i18n/de-DE/explore.ts | 1 - web/i18n/en-US/explore.ts | 2 +- web/i18n/es-ES/explore.ts | 1 - web/i18n/fa-IR/explore.ts | 1 - web/i18n/fr-FR/explore.ts | 1 - web/i18n/hi-IN/explore.ts | 1 - web/i18n/id-ID/explore.ts | 1 - web/i18n/it-IT/explore.ts | 1 - web/i18n/ja-JP/explore.ts | 2 +- web/i18n/ko-KR/explore.ts | 1 - web/i18n/pl-PL/explore.ts | 1 - web/i18n/pt-BR/explore.ts | 1 - web/i18n/ro-RO/explore.ts | 1 - web/i18n/ru-RU/explore.ts | 1 - web/i18n/sl-SI/explore.ts | 1 - web/i18n/th-TH/explore.ts | 1 - web/i18n/tr-TR/explore.ts | 1 - web/i18n/uk-UA/explore.ts | 1 - web/i18n/vi-VN/explore.ts | 1 - web/i18n/zh-Hans/explore.ts | 2 +- web/i18n/zh-Hant/explore.ts | 1 - 22 files changed, 14 insertions(+), 56 deletions(-) diff --git a/web/app/components/explore/sidebar/index.tsx b/web/app/components/explore/sidebar/index.tsx index c5866c31d4..6e908edf66 100644 --- a/web/app/components/explore/sidebar/index.tsx +++ b/web/app/components/explore/sidebar/index.tsx @@ -13,30 +13,7 @@ import Confirm from '@/app/components/base/confirm' import Divider from '@/app/components/base/divider' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import { useGetInstalledApps, useUninstallApp, useUpdateAppPinStatus } from '@/service/use-explore' - -const SelectedDiscoveryIcon = () => ( - - - -) - -const DiscoveryIcon = () => ( - - - -) - -const SelectedChatIcon = () => ( - - - -) - -const ChatIcon = () => ( - - - -) +import { RiAppsFill } from '@remixicon/react' export type IExploreSideBarProps = { controlUpdateInstalledApps: number @@ -96,17 +73,16 @@ const SideBar: FC = ({ const pinnedAppsCount = installedApps.filter(({ is_pinned }) => is_pinned).length return (
-
- - {isDiscoverySelected ? : } - {!isMobile &&
{t('explore.sidebar.discovery')}
} - -
+ +
+ +
+ {!isMobile &&
{t('explore.sidebar.title')}
} + {installedApps.length > 0 && (

{t('explore.sidebar.workspace')}

diff --git a/web/i18n/de-DE/explore.ts b/web/i18n/de-DE/explore.ts index 0578c100a0..ffae683c51 100644 --- a/web/i18n/de-DE/explore.ts +++ b/web/i18n/de-DE/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Entdecken', sidebar: { - discovery: 'Entdeckung', chat: 'Chat', workspace: 'Arbeitsbereich', action: { diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index 6e30f1d50a..891456cb27 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -1,7 +1,7 @@ const translation = { title: 'Explore', sidebar: { - discovery: 'Discovery', + title: 'App gallery', chat: 'Chat', workspace: 'Workspace', action: { diff --git a/web/i18n/es-ES/explore.ts b/web/i18n/es-ES/explore.ts index 19cfe9ad79..5be64d982f 100644 --- a/web/i18n/es-ES/explore.ts +++ b/web/i18n/es-ES/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Explorar', sidebar: { - discovery: 'Descubrimiento', chat: 'Chat', workspace: 'Espacio de trabajo', action: { diff --git a/web/i18n/fa-IR/explore.ts b/web/i18n/fa-IR/explore.ts index fe4bb2af57..c8c7263a59 100644 --- a/web/i18n/fa-IR/explore.ts +++ b/web/i18n/fa-IR/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'کاوش', sidebar: { - discovery: 'کشف', chat: 'چت', workspace: 'فضای کاری', action: { diff --git a/web/i18n/fr-FR/explore.ts b/web/i18n/fr-FR/explore.ts index e16e709451..9b5c120b23 100644 --- a/web/i18n/fr-FR/explore.ts +++ b/web/i18n/fr-FR/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Explorer', sidebar: { - discovery: 'Découverte', chat: 'Discussion', workspace: 'Espace de travail', action: { diff --git a/web/i18n/hi-IN/explore.ts b/web/i18n/hi-IN/explore.ts index f3b7a550a4..5ece08c7f7 100644 --- a/web/i18n/hi-IN/explore.ts +++ b/web/i18n/hi-IN/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'अन्वेषण करें', sidebar: { - discovery: 'खोज', chat: 'चैट', workspace: 'कार्यक्षेत्र', action: { diff --git a/web/i18n/id-ID/explore.ts b/web/i18n/id-ID/explore.ts index 21f3ecff3b..075964c64b 100644 --- a/web/i18n/id-ID/explore.ts +++ b/web/i18n/id-ID/explore.ts @@ -11,7 +11,6 @@ const translation = { title: 'Hapus aplikasi', }, workspace: 'Workspace', - discovery: 'Penemuan', chat: 'Mengobrol', }, apps: { diff --git a/web/i18n/it-IT/explore.ts b/web/i18n/it-IT/explore.ts index 683fa86847..709c9b1f65 100644 --- a/web/i18n/it-IT/explore.ts +++ b/web/i18n/it-IT/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Esplora', sidebar: { - discovery: 'Scoperta', chat: 'Chat', workspace: 'Workspace', action: { diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index d9aa8f44b1..56b84f9457 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -1,7 +1,7 @@ const translation = { title: '探索', sidebar: { - discovery: '探索', + title: 'アプリギャラリー', chat: 'チャット', workspace: 'ワークスペース', action: { diff --git a/web/i18n/ko-KR/explore.ts b/web/i18n/ko-KR/explore.ts index 1d88002019..78a4b705ca 100644 --- a/web/i18n/ko-KR/explore.ts +++ b/web/i18n/ko-KR/explore.ts @@ -1,7 +1,6 @@ const translation = { title: '탐색', sidebar: { - discovery: '탐색', chat: '채팅', workspace: '작업 공간', action: { diff --git a/web/i18n/pl-PL/explore.ts b/web/i18n/pl-PL/explore.ts index 028709950f..8fea8f76d6 100644 --- a/web/i18n/pl-PL/explore.ts +++ b/web/i18n/pl-PL/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Odkryj', sidebar: { - discovery: 'Odkrywanie', chat: 'Czat', workspace: 'Przestrzeń robocza', action: { diff --git a/web/i18n/pt-BR/explore.ts b/web/i18n/pt-BR/explore.ts index e9bb02602f..bd80d0144c 100644 --- a/web/i18n/pt-BR/explore.ts +++ b/web/i18n/pt-BR/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Badać', sidebar: { - discovery: 'Descoberta', chat: 'Chat', workspace: 'Espaço de Trabalho', action: { diff --git a/web/i18n/ro-RO/explore.ts b/web/i18n/ro-RO/explore.ts index f6d2794f77..40f7b1bd7a 100644 --- a/web/i18n/ro-RO/explore.ts +++ b/web/i18n/ro-RO/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Explorați', sidebar: { - discovery: 'Descoperire', chat: 'Chat', workspace: 'Spațiu de lucru', action: { diff --git a/web/i18n/ru-RU/explore.ts b/web/i18n/ru-RU/explore.ts index f74c33577c..2278e65a31 100644 --- a/web/i18n/ru-RU/explore.ts +++ b/web/i18n/ru-RU/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Обзор', sidebar: { - discovery: 'Открытия', chat: 'Чат', workspace: 'Рабочее пространство', action: { diff --git a/web/i18n/sl-SI/explore.ts b/web/i18n/sl-SI/explore.ts index 75a47ec6e7..4b68de7965 100644 --- a/web/i18n/sl-SI/explore.ts +++ b/web/i18n/sl-SI/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Razišči', sidebar: { - discovery: 'Odkritja', chat: 'Klepet', workspace: 'Delovni prostor', action: { diff --git a/web/i18n/th-TH/explore.ts b/web/i18n/th-TH/explore.ts index f18e38c091..d3c8a6f3c8 100644 --- a/web/i18n/th-TH/explore.ts +++ b/web/i18n/th-TH/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'สํารวจ', sidebar: { - discovery: 'การค้นพบ', chat: 'สนทนา', workspace: 'พื้นที่', action: { diff --git a/web/i18n/tr-TR/explore.ts b/web/i18n/tr-TR/explore.ts index ab7b9ed7ef..2f06baafee 100644 --- a/web/i18n/tr-TR/explore.ts +++ b/web/i18n/tr-TR/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Keşfet', sidebar: { - discovery: 'Keşif', chat: 'Sohbet', workspace: 'Çalışma Alanı', action: { diff --git a/web/i18n/uk-UA/explore.ts b/web/i18n/uk-UA/explore.ts index 0030c554f7..c0d5ea0d36 100644 --- a/web/i18n/uk-UA/explore.ts +++ b/web/i18n/uk-UA/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Досліджувати', sidebar: { - discovery: 'Відкриття', chat: 'Чат', workspace: 'Робочий простір', action: { diff --git a/web/i18n/vi-VN/explore.ts b/web/i18n/vi-VN/explore.ts index 9f7770742e..2902227eca 100644 --- a/web/i18n/vi-VN/explore.ts +++ b/web/i18n/vi-VN/explore.ts @@ -1,7 +1,6 @@ const translation = { title: 'Khám phá', sidebar: { - discovery: 'Khám phá', chat: 'Trò chuyện', workspace: 'Không gian làm việc', action: { diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index 7b4c60298a..02f2ee9a30 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -1,7 +1,7 @@ const translation = { title: '探索', sidebar: { - discovery: '发现', + title: '应用库', chat: '智聊', workspace: '工作区', action: { diff --git a/web/i18n/zh-Hant/explore.ts b/web/i18n/zh-Hant/explore.ts index cdcd6afe4a..7cd5138785 100644 --- a/web/i18n/zh-Hant/explore.ts +++ b/web/i18n/zh-Hant/explore.ts @@ -1,7 +1,6 @@ const translation = { title: '探索', sidebar: { - discovery: '發現', chat: '智聊', workspace: '工作區', action: { From 56f12e70c1bf7d6dcd75cbcc88479ec5efe33db1 Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 13 Oct 2025 16:18:57 +0800 Subject: [PATCH 28/85] chore: web apps copywritings --- web/app/components/explore/sidebar/index.tsx | 2 +- web/i18n/de-DE/explore.ts | 1 - web/i18n/en-US/explore.ts | 2 +- web/i18n/es-ES/explore.ts | 1 - web/i18n/fa-IR/explore.ts | 1 - web/i18n/fr-FR/explore.ts | 1 - web/i18n/hi-IN/explore.ts | 1 - web/i18n/id-ID/explore.ts | 1 - web/i18n/it-IT/explore.ts | 1 - web/i18n/ja-JP/explore.ts | 2 +- web/i18n/ko-KR/explore.ts | 1 - web/i18n/pl-PL/explore.ts | 1 - web/i18n/pt-BR/explore.ts | 1 - web/i18n/ro-RO/explore.ts | 1 - web/i18n/ru-RU/explore.ts | 1 - web/i18n/sl-SI/explore.ts | 1 - web/i18n/th-TH/explore.ts | 1 - web/i18n/tr-TR/explore.ts | 1 - web/i18n/uk-UA/explore.ts | 1 - web/i18n/vi-VN/explore.ts | 1 - web/i18n/zh-Hans/explore.ts | 2 +- web/i18n/zh-Hant/explore.ts | 1 - 22 files changed, 4 insertions(+), 22 deletions(-) diff --git a/web/app/components/explore/sidebar/index.tsx b/web/app/components/explore/sidebar/index.tsx index 6e908edf66..7567b9442d 100644 --- a/web/app/components/explore/sidebar/index.tsx +++ b/web/app/components/explore/sidebar/index.tsx @@ -85,7 +85,7 @@ const SideBar: FC = ({ {installedApps.length > 0 && (
-

{t('explore.sidebar.workspace')}

+

{t('explore.sidebar.webApps')}

Date: Mon, 13 Oct 2025 17:11:51 +0800 Subject: [PATCH 29/85] chore: sidebar ui --- web/app/components/explore/app-list/index.tsx | 2 +- web/app/components/explore/item-operation/index.tsx | 2 +- .../explore/sidebar/app-nav-item/index.tsx | 2 +- web/app/components/explore/sidebar/index.tsx | 12 ++++++------ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index bd7b84f6a0..ce7f4c311f 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -151,7 +151,7 @@ const Apps = ({ return (
{systemFeatures.enable_explore_banner && (
diff --git a/web/app/components/explore/item-operation/index.tsx b/web/app/components/explore/item-operation/index.tsx index 6fd11fd084..3959f4710e 100644 --- a/web/app/components/explore/item-operation/index.tsx +++ b/web/app/components/explore/item-operation/index.tsx @@ -52,7 +52,7 @@ const ItemOperation: FC = ({ setOpen(v => !v)} > -
+
-
{name}
+
{name}
e.stopPropagation()}> = ({ const pinnedAppsCount = installedApps.filter(({ is_pinned }) => is_pinned).length return ( -
+
-
+
- {!isMobile &&
{t('explore.sidebar.title')}
} + {!isMobile &&
{t('explore.sidebar.title')}
} {installedApps.length > 0 && ( -
-

{t('explore.sidebar.webApps')}

-
+

{t('explore.sidebar.webApps')}

+
Date: Mon, 13 Oct 2025 17:36:24 +0800 Subject: [PATCH 30/85] feat: toogle sidebar --- web/app/components/explore/sidebar/index.tsx | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/web/app/components/explore/sidebar/index.tsx b/web/app/components/explore/sidebar/index.tsx index c936029fea..a37962d857 100644 --- a/web/app/components/explore/sidebar/index.tsx +++ b/web/app/components/explore/sidebar/index.tsx @@ -13,7 +13,8 @@ import Confirm from '@/app/components/base/confirm' import Divider from '@/app/components/base/divider' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import { useGetInstalledApps, useUninstallApp, useUpdateAppPinStatus } from '@/service/use-explore' -import { RiAppsFill } from '@remixicon/react' +import { RiAppsFill, RiExpandRightLine, RiLayoutLeft2Line } from '@remixicon/react' +import { useBoolean } from 'ahooks' export type IExploreSideBarProps = { controlUpdateInstalledApps: number @@ -33,6 +34,9 @@ const SideBar: FC = ({ const media = useBreakpoints() const isMobile = media === MediaType.mobile + const [isFold, { + toggle: toggleIsFold, + }] = useBoolean(false) const [showConfirm, setShowConfirm] = useState(false) const [currId, setCurrId] = useState('') @@ -72,7 +76,7 @@ const SideBar: FC = ({ const pinnedAppsCount = installedApps.filter(({ is_pinned }) => is_pinned).length return ( -
+
= ({
- {!isMobile &&
{t('explore.sidebar.title')}
} + {!isMobile && !isFold &&
{t('explore.sidebar.title')}
} {installedApps.length > 0 && (
-

{t('explore.sidebar.webApps')}

+ {!isMobile && !isFold &&

{t('explore.sidebar.webApps')}

}
= ({ {installedApps.map(({ id, is_pinned, uninstallable, app: { name, icon_type, icon, icon_url, icon_background } }, index) => ( = ({
)} + + {!isMobile && ( +
+ {isFold ? : ( + + )} +
+ )} + {showConfirm && ( Date: Mon, 13 Oct 2025 18:31:57 +0800 Subject: [PATCH 31/85] feat: no apps --- web/app/components/explore/sidebar/index.tsx | 6 +++-- .../explore/sidebar/no-apps/index.tsx | 24 ++++++++++++++++++ .../sidebar/no-apps/no-web-apps-dark.png | Bin 0 -> 22064 bytes .../sidebar/no-apps/no-web-apps-light.png | Bin 0 -> 21852 bytes .../explore/sidebar/no-apps/style.module.css | 7 +++++ web/i18n/en-US/explore.ts | 5 ++++ web/i18n/ja-JP/explore.ts | 5 ++++ web/i18n/zh-Hans/explore.ts | 5 ++++ 8 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 web/app/components/explore/sidebar/no-apps/index.tsx create mode 100644 web/app/components/explore/sidebar/no-apps/no-web-apps-dark.png create mode 100644 web/app/components/explore/sidebar/no-apps/no-web-apps-light.png create mode 100644 web/app/components/explore/sidebar/no-apps/style.module.css diff --git a/web/app/components/explore/sidebar/index.tsx b/web/app/components/explore/sidebar/index.tsx index a37962d857..a9d67ae2da 100644 --- a/web/app/components/explore/sidebar/index.tsx +++ b/web/app/components/explore/sidebar/index.tsx @@ -15,6 +15,7 @@ import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import { useGetInstalledApps, useUninstallApp, useUpdateAppPinStatus } from '@/service/use-explore' import { RiAppsFill, RiExpandRightLine, RiLayoutLeft2Line } from '@remixicon/react' import { useBoolean } from 'ahooks' +import NoApps from './no-apps' export type IExploreSideBarProps = { controlUpdateInstalledApps: number @@ -89,8 +90,9 @@ const SideBar: FC = ({ {installedApps.length > 0 && (
- {!isMobile && !isFold &&

{t('explore.sidebar.webApps')}

} -
{t('explore.sidebar.webApps')}

} + {installedApps.length === 0 && !isMobile && !isFold && } +
{ + const { t } = useTranslation() + const { theme } = useTheme() + return ( +
+
+
{t(`${i18nPrefix}.title`)}
+
{t(`${i18nPrefix}.description`)}
+ {t(`${i18nPrefix}.learnMore`)} +
+ ) +} +export default React.memo(NoApps) diff --git a/web/app/components/explore/sidebar/no-apps/no-web-apps-dark.png b/web/app/components/explore/sidebar/no-apps/no-web-apps-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e153686fcd09b6c7b38f5acf81d183279ad07e9e GIT binary patch literal 22064 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 f_V#?Dqp$bR3O<;%-AvA^WS$=HeP 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 Date: Tue, 14 Oct 2025 14:17:49 +0800 Subject: [PATCH 32/85] feat: add carousel & new banner of explore page --- node_modules/.modules.yaml | 27 + node_modules/.pnpm-workspace-state.json | 25 + .../node_modules/embla-carousel | 1 + .../embla-carousel-autoplay/README.md | 233 +++ .../cjs/components/Autoplay.d.ts | 27 + .../cjs/components/Options.d.ts | 14 + .../cjs/components/utils.d.ts | 4 + .../cjs/embla-carousel-autoplay.cjs.js | 197 ++ .../cjs/embla-carousel-autoplay.cjs.js.map | 1 + .../embla-carousel-autoplay/cjs/index.d.ts | 2 + .../embla-carousel-autoplay/cjs/package.json | 55 + .../components/Autoplay.d.ts | 27 + .../components/Options.d.ts | 14 + .../components/utils.d.ts | 4 + .../embla-carousel-autoplay.umd.js | 1 + .../esm/components/Autoplay.d.ts | 27 + .../esm/components/Options.d.ts | 14 + .../esm/components/utils.d.ts | 4 + .../esm/embla-carousel-autoplay.esm.js | 195 ++ .../esm/embla-carousel-autoplay.esm.js.map | 1 + .../embla-carousel-autoplay/esm/index.d.ts | 2 + .../embla-carousel-autoplay/esm/package.json | 55 + .../embla-carousel-autoplay/index.d.ts | 2 + .../embla-carousel-autoplay/package.json | 77 + .../node_modules/embla-carousel | 1 + .../embla-carousel-react/README.md | 233 +++ .../cjs/components/useEmblaCarousel.d.ts | 11 + .../cjs/embla-carousel-react.cjs.js | 40 + .../cjs/embla-carousel-react.cjs.js.map | 1 + .../embla-carousel-react/cjs/index.d.ts | 2 + .../embla-carousel-react/cjs/package.json | 60 + .../components/useEmblaCarousel.d.ts | 11 + .../embla-carousel-react.umd.js | 1 + .../esm/components/useEmblaCarousel.d.ts | 11 + .../esm/embla-carousel-react.esm.js | 38 + .../esm/embla-carousel-react.esm.js.map | 1 + .../embla-carousel-react/esm/index.d.ts | 2 + .../embla-carousel-react/esm/package.json | 60 + .../embla-carousel-react/index.d.ts | 2 + .../embla-carousel-react/package.json | 82 + .../embla-carousel-reactive-utils | 1 + .../node_modules/react | 1 + .../node_modules/embla-carousel | 1 + .../embla-carousel-reactive-utils/README.md | 233 +++ .../cjs/components/utils.d.ts | 7 + .../cjs/embla-carousel-reactive-utils.cjs.js | 44 + .../embla-carousel-reactive-utils.cjs.js.map | 1 + .../cjs/index.d.ts | 1 + .../cjs/package.json | 55 + .../components/utils.d.ts | 7 + .../embla-carousel-reactive-utils.umd.js | 1 + .../esm/components/utils.d.ts | 7 + .../esm/embla-carousel-reactive-utils.esm.js | 39 + .../embla-carousel-reactive-utils.esm.js.map | 1 + .../esm/index.d.ts | 1 + .../esm/package.json | 55 + .../embla-carousel-reactive-utils/index.d.ts | 1 + .../package.json | 77 + .../node_modules/embla-carousel/README.md | 233 +++ .../cjs/components/Alignment.d.ts | 5 + .../cjs/components/Animations.d.ts | 13 + .../embla-carousel/cjs/components/Axis.d.ts | 14 + .../cjs/components/Counter.d.ts | 7 + .../cjs/components/DragHandler.d.ts | 21 + .../cjs/components/DragTracker.d.ts | 10 + .../cjs/components/EmblaCarousel.d.ts | 32 + .../embla-carousel/cjs/components/Engine.d.ts | 64 + .../cjs/components/EventHandler.d.ts | 27 + .../cjs/components/EventStore.d.ts | 9 + .../embla-carousel/cjs/components/Limit.d.ts | 11 + .../cjs/components/NodeRects.d.ts | 12 + .../cjs/components/Options.d.ts | 40 + .../cjs/components/OptionsHandler.d.ts | 10 + .../cjs/components/PercentOfView.d.ts | 4 + .../cjs/components/Plugins.d.ts | 16 + .../cjs/components/PluginsHandler.d.ts | 8 + .../cjs/components/ResizeHandler.d.ts | 13 + .../cjs/components/ScrollBody.d.ts | 13 + .../cjs/components/ScrollBounds.d.ts | 10 + .../cjs/components/ScrollContain.d.ts | 7 + .../cjs/components/ScrollLimit.d.ts | 5 + .../cjs/components/ScrollLooper.d.ts | 6 + .../cjs/components/ScrollProgress.d.ts | 5 + .../cjs/components/ScrollSnaps.d.ts | 9 + .../cjs/components/ScrollTarget.d.ts | 12 + .../cjs/components/ScrollTo.d.ts | 11 + .../cjs/components/SlideFocus.d.ts | 13 + .../cjs/components/SlideLooper.d.ts | 18 + .../cjs/components/SlideRegistry.d.ts | 7 + .../cjs/components/SlideSizes.d.ts | 10 + .../cjs/components/SlidesHandler.d.ts | 10 + .../cjs/components/SlidesInView.d.ts | 8 + .../cjs/components/SlidesToScroll.d.ts | 7 + .../cjs/components/Translate.d.ts | 7 + .../cjs/components/Vector1d.d.ts | 7 + .../embla-carousel/cjs/components/utils.d.ts | 19 + .../embla-carousel/cjs/embla-carousel.cjs.js | 1672 +++++++++++++++++ .../cjs/embla-carousel.cjs.js.map | 1 + .../embla-carousel/cjs/index.d.ts | 11 + .../embla-carousel/cjs/package.json | 52 + .../embla-carousel/components/Alignment.d.ts | 5 + .../embla-carousel/components/Animations.d.ts | 13 + .../embla-carousel/components/Axis.d.ts | 14 + .../embla-carousel/components/Counter.d.ts | 7 + .../components/DragHandler.d.ts | 21 + .../components/DragTracker.d.ts | 10 + .../components/EmblaCarousel.d.ts | 32 + .../embla-carousel/components/Engine.d.ts | 64 + .../components/EventHandler.d.ts | 27 + .../embla-carousel/components/EventStore.d.ts | 9 + .../embla-carousel/components/Limit.d.ts | 11 + .../embla-carousel/components/NodeRects.d.ts | 12 + .../embla-carousel/components/Options.d.ts | 40 + .../components/OptionsHandler.d.ts | 10 + .../components/PercentOfView.d.ts | 4 + .../embla-carousel/components/Plugins.d.ts | 16 + .../components/PluginsHandler.d.ts | 8 + .../components/ResizeHandler.d.ts | 13 + .../embla-carousel/components/ScrollBody.d.ts | 13 + .../components/ScrollBounds.d.ts | 10 + .../components/ScrollContain.d.ts | 7 + .../components/ScrollLimit.d.ts | 5 + .../components/ScrollLooper.d.ts | 6 + .../components/ScrollProgress.d.ts | 5 + .../components/ScrollSnaps.d.ts | 9 + .../components/ScrollTarget.d.ts | 12 + .../embla-carousel/components/ScrollTo.d.ts | 11 + .../embla-carousel/components/SlideFocus.d.ts | 13 + .../components/SlideLooper.d.ts | 18 + .../components/SlideRegistry.d.ts | 7 + .../embla-carousel/components/SlideSizes.d.ts | 10 + .../components/SlidesHandler.d.ts | 10 + .../components/SlidesInView.d.ts | 8 + .../components/SlidesToScroll.d.ts | 7 + .../embla-carousel/components/Translate.d.ts | 7 + .../embla-carousel/components/Vector1d.d.ts | 7 + .../embla-carousel/components/utils.d.ts | 19 + .../embla-carousel/embla-carousel.umd.js | 1 + .../esm/components/Alignment.d.ts | 5 + .../esm/components/Animations.d.ts | 13 + .../embla-carousel/esm/components/Axis.d.ts | 14 + .../esm/components/Counter.d.ts | 7 + .../esm/components/DragHandler.d.ts | 21 + .../esm/components/DragTracker.d.ts | 10 + .../esm/components/EmblaCarousel.d.ts | 32 + .../embla-carousel/esm/components/Engine.d.ts | 64 + .../esm/components/EventHandler.d.ts | 27 + .../esm/components/EventStore.d.ts | 9 + .../embla-carousel/esm/components/Limit.d.ts | 11 + .../esm/components/NodeRects.d.ts | 12 + .../esm/components/Options.d.ts | 40 + .../esm/components/OptionsHandler.d.ts | 10 + .../esm/components/PercentOfView.d.ts | 4 + .../esm/components/Plugins.d.ts | 16 + .../esm/components/PluginsHandler.d.ts | 8 + .../esm/components/ResizeHandler.d.ts | 13 + .../esm/components/ScrollBody.d.ts | 13 + .../esm/components/ScrollBounds.d.ts | 10 + .../esm/components/ScrollContain.d.ts | 7 + .../esm/components/ScrollLimit.d.ts | 5 + .../esm/components/ScrollLooper.d.ts | 6 + .../esm/components/ScrollProgress.d.ts | 5 + .../esm/components/ScrollSnaps.d.ts | 9 + .../esm/components/ScrollTarget.d.ts | 12 + .../esm/components/ScrollTo.d.ts | 11 + .../esm/components/SlideFocus.d.ts | 13 + .../esm/components/SlideLooper.d.ts | 18 + .../esm/components/SlideRegistry.d.ts | 7 + .../esm/components/SlideSizes.d.ts | 10 + .../esm/components/SlidesHandler.d.ts | 10 + .../esm/components/SlidesInView.d.ts | 8 + .../esm/components/SlidesToScroll.d.ts | 7 + .../esm/components/Translate.d.ts | 7 + .../esm/components/Vector1d.d.ts | 7 + .../embla-carousel/esm/components/utils.d.ts | 19 + .../embla-carousel/esm/embla-carousel.esm.js | 1670 ++++++++++++++++ .../esm/embla-carousel.esm.js.map | 1 + .../embla-carousel/esm/index.d.ts | 11 + .../embla-carousel/esm/package.json | 52 + .../node_modules/embla-carousel/index.d.ts | 11 + .../node_modules/embla-carousel/package.json | 74 + node_modules/.pnpm/lock.yaml | 60 + .../.pnpm/node_modules/embla-carousel | 1 + .../embla-carousel-reactive-utils | 1 + node_modules/.pnpm/node_modules/react | 1 + .../react@19.2.0/node_modules/react/LICENSE | 21 + .../react@19.2.0/node_modules/react/README.md | 37 + .../cjs/react-compiler-runtime.development.js | 24 + .../cjs/react-compiler-runtime.production.js | 16 + .../cjs/react-compiler-runtime.profiling.js | 16 + .../cjs/react-jsx-dev-runtime.development.js | 338 ++++ .../cjs/react-jsx-dev-runtime.production.js | 14 + .../cjs/react-jsx-dev-runtime.profiling.js | 14 + ...sx-dev-runtime.react-server.development.js | 370 ++++ ...jsx-dev-runtime.react-server.production.js | 40 + .../cjs/react-jsx-runtime.development.js | 352 ++++ .../react/cjs/react-jsx-runtime.production.js | 34 + .../react/cjs/react-jsx-runtime.profiling.js | 34 + ...ct-jsx-runtime.react-server.development.js | 370 ++++ ...act-jsx-runtime.react-server.production.js | 40 + .../react/cjs/react.development.js | 1284 +++++++++++++ .../react/cjs/react.production.js | 542 ++++++ .../cjs/react.react-server.development.js | 848 +++++++++ .../cjs/react.react-server.production.js | 423 +++++ .../node_modules/react/compiler-runtime.js | 14 + .../react@19.2.0/node_modules/react/index.js | 7 + .../node_modules/react/jsx-dev-runtime.js | 7 + .../react/jsx-dev-runtime.react-server.js | 7 + .../node_modules/react/jsx-runtime.js | 7 + .../react/jsx-runtime.react-server.js | 7 + .../node_modules/react/package.json | 51 + .../node_modules/react/react.react-server.js | 7 + node_modules/embla-carousel-autoplay | 1 + node_modules/embla-carousel-react | 1 + package.json | 6 + pnpm-lock.yaml | 60 + web/app/components/base/carousel/index.tsx | 225 +++ web/app/components/explore/app-list/index.tsx | 4 +- web/app/components/explore/banner.tsx | 12 - .../components/explore/banner/banner-item.tsx | 110 ++ web/app/components/explore/banner/banner.tsx | 57 + .../explore/banner/indicator-button.tsx | 102 + web/i18n/en-US/explore.ts | 3 + web/i18n/ja-JP/explore.ts | 3 + web/i18n/zh-Hans/explore.ts | 3 + web/service/explore.ts | 5 + web/service/use-explore.ts | 11 +- 227 files changed, 12962 insertions(+), 15 deletions(-) create mode 100644 node_modules/.modules.yaml create mode 100644 node_modules/.pnpm-workspace-state.json create mode 120000 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json create mode 120000 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json create mode 120000 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils create mode 120000 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react create mode 120000 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts create mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json create mode 100644 node_modules/.pnpm/lock.yaml create mode 120000 node_modules/.pnpm/node_modules/embla-carousel create mode 120000 node_modules/.pnpm/node_modules/embla-carousel-reactive-utils create mode 120000 node_modules/.pnpm/node_modules/react create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/README.md create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/index.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/package.json create mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js create mode 120000 node_modules/embla-carousel-autoplay create mode 120000 node_modules/embla-carousel-react create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 web/app/components/base/carousel/index.tsx delete mode 100644 web/app/components/explore/banner.tsx create mode 100644 web/app/components/explore/banner/banner-item.tsx create mode 100644 web/app/components/explore/banner/banner.tsx create mode 100644 web/app/components/explore/banner/indicator-button.tsx diff --git a/node_modules/.modules.yaml b/node_modules/.modules.yaml new file mode 100644 index 0000000000..2e2c8bf5ee --- /dev/null +++ b/node_modules/.modules.yaml @@ -0,0 +1,27 @@ +hoistPattern: + - '*' +hoistedDependencies: + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + embla-carousel-reactive-utils: private + embla-carousel@8.6.0: + embla-carousel: private + react@19.2.0: + react: private +included: + dependencies: true + devDependencies: true + optionalDependencies: true +injectedDeps: {} +layoutVersion: 5 +nodeLinker: isolated +packageManager: pnpm@10.11.0 +pendingBuilds: [] +prunedAt: Mon, 13 Oct 2025 02:31:23 GMT +publicHoistPattern: [] +registries: + '@jsr': https://npm.jsr.io/ + default: https://mirrors.cloud.tencent.com/npm/ +skipped: [] +storeDir: /Users/hanxujiang/Library/pnpm/store/v10 +virtualStoreDir: .pnpm +virtualStoreDirMaxLength: 120 diff --git a/node_modules/.pnpm-workspace-state.json b/node_modules/.pnpm-workspace-state.json new file mode 100644 index 0000000000..aaa6a3c2cd --- /dev/null +++ b/node_modules/.pnpm-workspace-state.json @@ -0,0 +1,25 @@ +{ + "lastValidatedTimestamp": 1760322690770, + "projects": {}, + "pnpmfileExists": false, + "settings": { + "autoInstallPeers": true, + "dedupeDirectDeps": false, + "dedupeInjectedDeps": true, + "dedupePeerDependents": true, + "dev": true, + "excludeLinksFromLockfile": false, + "hoistPattern": [ + "*" + ], + "hoistWorkspacePackages": true, + "injectWorkspacePackages": false, + "linkWorkspacePackages": false, + "nodeLinker": "isolated", + "optional": true, + "preferWorkspacePackages": false, + "production": true, + "publicHoistPattern": [] + }, + "filteredInstall": false +} diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel new file mode 120000 index 0000000000..ba29366a8c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel @@ -0,0 +1 @@ +../../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md new file mode 100644 index 0000000000..5b5f7e5cea --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md @@ -0,0 +1,233 @@ +
+
+

+ Embla Carousel + +

+ +

+ + + + + + +

+ + +

Embla Carousel Autoplay

+
+ +

+ Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. +

+ +
+ +

+ +  Examples  + +

+ +

+ +  Generator  + +

+ +

+ +  Installation  + +

+
+ +
+ +
+ +

Ready for

+
+ +

+ + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ + + +
+ +
+ +

Special Thanks

+
+

+ + gunnarx2 - React wrapper useEmblaCarousel. + +
+ + LiamMartens - Solid wrapper createEmblaCarousel. + +
+ + donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. + +
+ + xiel - Plugin Embla Carousel Wheel Gestures. + +
+ + zaaakher - Contributing guidelines. + +
+ + sarussss - Answering questions. + +

+
+ +
+ +

Open Source

+ +

+ Embla is MIT licensed 💖.

+ Embla Carousel - Copyright © 2019-present.
+ Package created by David Jerleke. +

+ +

+ · · · +

+ +

+ Thanks BrowserStack. +

+ +

+ + + +

diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts new file mode 100644 index 0000000000..d03a504e20 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts @@ -0,0 +1,27 @@ +import { OptionsType } from './Options'; +import { CreatePluginType } from 'embla-carousel'; +declare module 'embla-carousel' { + interface EmblaPluginsType { + autoplay: AutoplayType; + } + interface EmblaEventListType { + autoplayPlay: 'autoplay:play'; + autoplayStop: 'autoplay:stop'; + autoplaySelect: 'autoplay:select'; + autoplayTimerSet: 'autoplay:timerset'; + autoplayTimerStopped: 'autoplay:timerstopped'; + } +} +export type AutoplayType = CreatePluginType<{ + play: (jump?: boolean) => void; + stop: () => void; + reset: () => void; + isPlaying: () => boolean; + timeUntilNext: () => number | null; +}, OptionsType>; +export type AutoplayOptionsType = AutoplayType['options']; +declare function Autoplay(userOptions?: AutoplayOptionsType): AutoplayType; +declare namespace Autoplay { + let globalOptions: AutoplayOptionsType | undefined; +} +export default Autoplay; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts new file mode 100644 index 0000000000..533b7cda56 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts @@ -0,0 +1,14 @@ +import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'; +export type DelayOptionType = number | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[]); +export type RootNodeType = null | ((emblaRoot: HTMLElement) => HTMLElement | null); +export type OptionsType = CreateOptionsType<{ + delay: DelayOptionType; + jump: boolean; + playOnInit: boolean; + stopOnFocusIn: boolean; + stopOnInteraction: boolean; + stopOnMouseEnter: boolean; + stopOnLastSnap: boolean; + rootNode: RootNodeType; +}>; +export declare const defaultOptions: OptionsType; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts new file mode 100644 index 0000000000..de04c2ed52 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts @@ -0,0 +1,4 @@ +import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'; +import { DelayOptionType, RootNodeType } from './Options'; +export declare function normalizeDelay(emblaApi: EmblaCarouselType, delay: DelayOptionType): number[]; +export declare function getAutoplayRootNode(emblaApi: EmblaCarouselType, rootNode: RootNodeType): HTMLElement; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js new file mode 100644 index 0000000000..24d7f19754 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js @@ -0,0 +1,197 @@ +'use strict'; + +const defaultOptions = { + active: true, + breakpoints: {}, + delay: 4000, + jump: false, + playOnInit: true, + stopOnFocusIn: true, + stopOnInteraction: true, + stopOnMouseEnter: false, + stopOnLastSnap: false, + rootNode: null +}; + +function normalizeDelay(emblaApi, delay) { + const scrollSnaps = emblaApi.scrollSnapList(); + if (typeof delay === 'number') { + return scrollSnaps.map(() => delay); + } + return delay(scrollSnaps, emblaApi); +} +function getAutoplayRootNode(emblaApi, rootNode) { + const emblaRootNode = emblaApi.rootNode(); + return rootNode && rootNode(emblaRootNode) || emblaRootNode; +} + +function Autoplay(userOptions = {}) { + let options; + let emblaApi; + let destroyed; + let delay; + let timerStartTime = null; + let timerId = 0; + let autoplayActive = false; + let mouseIsOver = false; + let playOnDocumentVisible = false; + let jump = false; + function init(emblaApiInstance, optionsHandler) { + emblaApi = emblaApiInstance; + const { + mergeOptions, + optionsAtMedia + } = optionsHandler; + const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions); + const allOptions = mergeOptions(optionsBase, userOptions); + options = optionsAtMedia(allOptions); + if (emblaApi.scrollSnapList().length <= 1) return; + jump = options.jump; + destroyed = false; + delay = normalizeDelay(emblaApi, options.delay); + const { + eventStore, + ownerDocument + } = emblaApi.internalEngine(); + const isDraggable = !!emblaApi.internalEngine().options.watchDrag; + const root = getAutoplayRootNode(emblaApi, options.rootNode); + eventStore.add(ownerDocument, 'visibilitychange', visibilityChange); + if (isDraggable) { + emblaApi.on('pointerDown', pointerDown); + } + if (isDraggable && !options.stopOnInteraction) { + emblaApi.on('pointerUp', pointerUp); + } + if (options.stopOnMouseEnter) { + eventStore.add(root, 'mouseenter', mouseEnter); + } + if (options.stopOnMouseEnter && !options.stopOnInteraction) { + eventStore.add(root, 'mouseleave', mouseLeave); + } + if (options.stopOnFocusIn) { + emblaApi.on('slideFocusStart', stopAutoplay); + } + if (options.stopOnFocusIn && !options.stopOnInteraction) { + eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay); + } + if (options.playOnInit) startAutoplay(); + } + function destroy() { + emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay); + stopAutoplay(); + destroyed = true; + autoplayActive = false; + } + function setTimer() { + const { + ownerWindow + } = emblaApi.internalEngine(); + ownerWindow.clearTimeout(timerId); + timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]); + timerStartTime = new Date().getTime(); + emblaApi.emit('autoplay:timerset'); + } + function clearTimer() { + const { + ownerWindow + } = emblaApi.internalEngine(); + ownerWindow.clearTimeout(timerId); + timerId = 0; + timerStartTime = null; + emblaApi.emit('autoplay:timerstopped'); + } + function startAutoplay() { + if (destroyed) return; + if (documentIsHidden()) { + playOnDocumentVisible = true; + return; + } + if (!autoplayActive) emblaApi.emit('autoplay:play'); + setTimer(); + autoplayActive = true; + } + function stopAutoplay() { + if (destroyed) return; + if (autoplayActive) emblaApi.emit('autoplay:stop'); + clearTimer(); + autoplayActive = false; + } + function visibilityChange() { + if (documentIsHidden()) { + playOnDocumentVisible = autoplayActive; + return stopAutoplay(); + } + if (playOnDocumentVisible) startAutoplay(); + } + function documentIsHidden() { + const { + ownerDocument + } = emblaApi.internalEngine(); + return ownerDocument.visibilityState === 'hidden'; + } + function pointerDown() { + if (!mouseIsOver) stopAutoplay(); + } + function pointerUp() { + if (!mouseIsOver) startAutoplay(); + } + function mouseEnter() { + mouseIsOver = true; + stopAutoplay(); + } + function mouseLeave() { + mouseIsOver = false; + startAutoplay(); + } + function play(jumpOverride) { + if (typeof jumpOverride !== 'undefined') jump = jumpOverride; + startAutoplay(); + } + function stop() { + if (autoplayActive) stopAutoplay(); + } + function reset() { + if (autoplayActive) startAutoplay(); + } + function isPlaying() { + return autoplayActive; + } + function next() { + const { + index + } = emblaApi.internalEngine(); + const nextIndex = index.clone().add(1).get(); + const lastIndex = emblaApi.scrollSnapList().length - 1; + const kill = options.stopOnLastSnap && nextIndex === lastIndex; + if (emblaApi.canScrollNext()) { + emblaApi.scrollNext(jump); + } else { + emblaApi.scrollTo(0, jump); + } + emblaApi.emit('autoplay:select'); + if (kill) return stopAutoplay(); + startAutoplay(); + } + function timeUntilNext() { + if (!timerStartTime) return null; + const currentDelay = delay[emblaApi.selectedScrollSnap()]; + const timePastSinceStart = new Date().getTime() - timerStartTime; + return currentDelay - timePastSinceStart; + } + const self = { + name: 'autoplay', + options: userOptions, + init, + destroy, + play, + stop, + reset, + isPlaying, + timeUntilNext + }; + return self; +} +Autoplay.globalOptions = undefined; + +module.exports = Autoplay; +//# sourceMappingURL=embla-carousel-autoplay.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map new file mode 100644 index 0000000000..9b1cc8e4d8 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel-autoplay.cjs.js","sources":["../src/components/Options.ts","../src/components/utils.ts","../src/components/Autoplay.ts"],"sourcesContent":["import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'\n\nexport type DelayOptionType =\n | number\n | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[])\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n delay: DelayOptionType\n jump: boolean\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n stopOnLastSnap: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { DelayOptionType, RootNodeType } from './Options'\n\nexport function normalizeDelay(\n emblaApi: EmblaCarouselType,\n delay: DelayOptionType\n): number[] {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay)\n }\n return delay(scrollSnaps, emblaApi)\n}\n\nexport function getAutoplayRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoplayRootNode, normalizeDelay } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoplay: AutoplayType\n }\n\n interface EmblaEventListType {\n autoplayPlay: 'autoplay:play'\n autoplayStop: 'autoplay:stop'\n autoplaySelect: 'autoplay:select'\n autoplayTimerSet: 'autoplay:timerset'\n autoplayTimerStopped: 'autoplay:timerstopped'\n }\n}\n\nexport type AutoplayType = CreatePluginType<\n {\n play: (jump?: boolean) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n timeUntilNext: () => number | null\n },\n OptionsType\n>\n\nexport type AutoplayOptionsType = AutoplayType['options']\n\nfunction Autoplay(userOptions: AutoplayOptionsType = {}): AutoplayType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let delay: ReturnType\n let timerStartTime: null | number = null\n let timerId = 0\n let autoplayActive = false\n let mouseIsOver = false\n let playOnDocumentVisible = false\n let jump = false\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n jump = options.jump\n destroyed = false\n delay = normalizeDelay(emblaApi, options.delay)\n\n const { eventStore, ownerDocument } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoplayRootNode(emblaApi, options.rootNode)\n\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay)\n }\n\n if (options.playOnInit) startAutoplay()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoplay)\n\n stopAutoplay()\n destroyed = true\n autoplayActive = false\n }\n\n function setTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()])\n timerStartTime = new Date().getTime()\n emblaApi.emit('autoplay:timerset')\n }\n\n function clearTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n timerStartTime = null\n emblaApi.emit('autoplay:timerstopped')\n }\n\n function startAutoplay(): void {\n if (destroyed) return\n if (documentIsHidden()) {\n playOnDocumentVisible = true\n return\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play')\n\n setTimer()\n autoplayActive = true\n }\n\n function stopAutoplay(): void {\n if (destroyed) return\n if (autoplayActive) emblaApi.emit('autoplay:stop')\n\n clearTimer()\n autoplayActive = false\n }\n\n function visibilityChange(): void {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive\n return stopAutoplay()\n }\n\n if (playOnDocumentVisible) startAutoplay()\n }\n\n function documentIsHidden(): boolean {\n const { ownerDocument } = emblaApi.internalEngine()\n return ownerDocument.visibilityState === 'hidden'\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoplay()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoplay()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoplay()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoplay()\n }\n\n function play(jumpOverride?: boolean): void {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride\n startAutoplay()\n }\n\n function stop(): void {\n if (autoplayActive) stopAutoplay()\n }\n\n function reset(): void {\n if (autoplayActive) startAutoplay()\n }\n\n function isPlaying(): boolean {\n return autoplayActive\n }\n\n function next(): void {\n const { index } = emblaApi.internalEngine()\n const nextIndex = index.clone().add(1).get()\n const lastIndex = emblaApi.scrollSnapList().length - 1\n const kill = options.stopOnLastSnap && nextIndex === lastIndex\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump)\n } else {\n emblaApi.scrollTo(0, jump)\n }\n\n emblaApi.emit('autoplay:select')\n\n if (kill) return stopAutoplay()\n startAutoplay()\n }\n\n function timeUntilNext(): number | null {\n if (!timerStartTime) return null\n const currentDelay = delay[emblaApi.selectedScrollSnap()]\n const timePastSinceStart = new Date().getTime() - timerStartTime\n return currentDelay - timePastSinceStart\n }\n\n const self: AutoplayType = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n }\n return self\n}\n\ndeclare namespace Autoplay {\n let globalOptions: AutoplayOptionsType | undefined\n}\n\nAutoplay.globalOptions = undefined\n\nexport default Autoplay\n"],"names":["defaultOptions","active","breakpoints","delay","jump","playOnInit","stopOnFocusIn","stopOnInteraction","stopOnMouseEnter","stopOnLastSnap","rootNode","normalizeDelay","emblaApi","scrollSnaps","scrollSnapList","map","getAutoplayRootNode","emblaRootNode","Autoplay","userOptions","options","destroyed","timerStartTime","timerId","autoplayActive","mouseIsOver","playOnDocumentVisible","init","emblaApiInstance","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","globalOptions","allOptions","length","eventStore","ownerDocument","internalEngine","isDraggable","watchDrag","root","add","visibilityChange","on","pointerDown","pointerUp","mouseEnter","mouseLeave","stopAutoplay","containerNode","startAutoplay","destroy","off","setTimer","ownerWindow","clearTimeout","setTimeout","next","selectedScrollSnap","Date","getTime","emit","clearTimer","documentIsHidden","visibilityState","play","jumpOverride","stop","reset","isPlaying","index","nextIndex","clone","get","lastIndex","kill","canScrollNext","scrollNext","scrollTo","timeUntilNext","currentDelay","timePastSinceStart","self","name","undefined"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts new file mode 100644 index 0000000000..ee2bc3b587 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts @@ -0,0 +1,2 @@ +export { AutoplayType, AutoplayOptionsType } from './components/Autoplay'; +export { default } from './components/Autoplay'; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json new file mode 100644 index 0000000000..c1f690b498 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json @@ -0,0 +1,55 @@ +{ + "name": "embla-carousel-autoplay", + "version": "8.6.0", + "author": "David Jerleke", + "description": "An autoplay plugin for Embla Carousel", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-autoplay*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "embla-carousel": "8.6.0" + }, + "main": "embla-carousel-autoplay.cjs.js", + "type": "commonjs" +} diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts new file mode 100644 index 0000000000..d03a504e20 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts @@ -0,0 +1,27 @@ +import { OptionsType } from './Options'; +import { CreatePluginType } from 'embla-carousel'; +declare module 'embla-carousel' { + interface EmblaPluginsType { + autoplay: AutoplayType; + } + interface EmblaEventListType { + autoplayPlay: 'autoplay:play'; + autoplayStop: 'autoplay:stop'; + autoplaySelect: 'autoplay:select'; + autoplayTimerSet: 'autoplay:timerset'; + autoplayTimerStopped: 'autoplay:timerstopped'; + } +} +export type AutoplayType = CreatePluginType<{ + play: (jump?: boolean) => void; + stop: () => void; + reset: () => void; + isPlaying: () => boolean; + timeUntilNext: () => number | null; +}, OptionsType>; +export type AutoplayOptionsType = AutoplayType['options']; +declare function Autoplay(userOptions?: AutoplayOptionsType): AutoplayType; +declare namespace Autoplay { + let globalOptions: AutoplayOptionsType | undefined; +} +export default Autoplay; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts new file mode 100644 index 0000000000..533b7cda56 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts @@ -0,0 +1,14 @@ +import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'; +export type DelayOptionType = number | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[]); +export type RootNodeType = null | ((emblaRoot: HTMLElement) => HTMLElement | null); +export type OptionsType = CreateOptionsType<{ + delay: DelayOptionType; + jump: boolean; + playOnInit: boolean; + stopOnFocusIn: boolean; + stopOnInteraction: boolean; + stopOnMouseEnter: boolean; + stopOnLastSnap: boolean; + rootNode: RootNodeType; +}>; +export declare const defaultOptions: OptionsType; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts new file mode 100644 index 0000000000..de04c2ed52 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts @@ -0,0 +1,4 @@ +import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'; +import { DelayOptionType, RootNodeType } from './Options'; +export declare function normalizeDelay(emblaApi: EmblaCarouselType, delay: DelayOptionType): number[]; +export declare function getAutoplayRootNode(emblaApi: EmblaCarouselType, rootNode: RootNodeType): HTMLElement; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js new file mode 100644 index 0000000000..ddccbd5a98 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js @@ -0,0 +1 @@ +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarouselAutoplay=t()}(this,(function(){"use strict";const n={active:!0,breakpoints:{},delay:4e3,jump:!1,playOnInit:!0,stopOnFocusIn:!0,stopOnInteraction:!0,stopOnMouseEnter:!1,stopOnLastSnap:!1,rootNode:null};function t(o={}){let e,i,s,l,r=null,u=0,a=!1,c=!1,p=!1,f=!1;function d(){s||(g()?p=!0:(a||i.emit("autoplay:play"),function(){const{ownerWindow:n}=i.internalEngine();n.clearTimeout(u),u=n.setTimeout(E,l[i.selectedScrollSnap()]),r=(new Date).getTime(),i.emit("autoplay:timerset")}(),a=!0))}function m(){s||(a&&i.emit("autoplay:stop"),function(){const{ownerWindow:n}=i.internalEngine();n.clearTimeout(u),u=0,r=null,i.emit("autoplay:timerstopped")}(),a=!1)}function y(){if(g())return p=a,m();p&&d()}function g(){const{ownerDocument:n}=i.internalEngine();return"hidden"===n.visibilityState}function O(){c||m()}function S(){c||d()}function w(){c=!0,m()}function b(){c=!1,d()}function E(){const{index:n}=i.internalEngine(),t=n.clone().add(1).get(),o=i.scrollSnapList().length-1,s=e.stopOnLastSnap&&t===o;if(i.canScrollNext()?i.scrollNext(f):i.scrollTo(0,f),i.emit("autoplay:select"),s)return m();d()}return{name:"autoplay",options:o,init:function(r,u){i=r;const{mergeOptions:a,optionsAtMedia:c}=u,p=a(n,t.globalOptions),g=a(p,o);if(e=c(g),i.scrollSnapList().length<=1)return;f=e.jump,s=!1,l=function(n,t){const o=n.scrollSnapList();return"number"==typeof t?o.map((()=>t)):t(o,n)}(i,e.delay);const{eventStore:E,ownerDocument:I}=i.internalEngine(),h=!!i.internalEngine().options.watchDrag,T=function(n,t){const o=n.rootNode();return t&&t(o)||o}(i,e.rootNode);E.add(I,"visibilitychange",y),h&&i.on("pointerDown",O),h&&!e.stopOnInteraction&&i.on("pointerUp",S),e.stopOnMouseEnter&&E.add(T,"mouseenter",w),e.stopOnMouseEnter&&!e.stopOnInteraction&&E.add(T,"mouseleave",b),e.stopOnFocusIn&&i.on("slideFocusStart",m),e.stopOnFocusIn&&!e.stopOnInteraction&&E.add(i.containerNode(),"focusout",d),e.playOnInit&&d()},destroy:function(){i.off("pointerDown",O).off("pointerUp",S).off("slideFocusStart",m),m(),s=!0,a=!1},play:function(n){void 0!==n&&(f=n),d()},stop:function(){a&&m()},reset:function(){a&&d()},isPlaying:function(){return a},timeUntilNext:function(){return r?l[i.selectedScrollSnap()]-((new Date).getTime()-r):null}}}return t.globalOptions=void 0,t})); diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts new file mode 100644 index 0000000000..67de09301f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts @@ -0,0 +1,27 @@ +import { OptionsType } from './Options.js'; +import { CreatePluginType } from 'embla-carousel'; +declare module 'embla-carousel' { + interface EmblaPluginsType { + autoplay: AutoplayType; + } + interface EmblaEventListType { + autoplayPlay: 'autoplay:play'; + autoplayStop: 'autoplay:stop'; + autoplaySelect: 'autoplay:select'; + autoplayTimerSet: 'autoplay:timerset'; + autoplayTimerStopped: 'autoplay:timerstopped'; + } +} +export type AutoplayType = CreatePluginType<{ + play: (jump?: boolean) => void; + stop: () => void; + reset: () => void; + isPlaying: () => boolean; + timeUntilNext: () => number | null; +}, OptionsType>; +export type AutoplayOptionsType = AutoplayType['options']; +declare function Autoplay(userOptions?: AutoplayOptionsType): AutoplayType; +declare namespace Autoplay { + let globalOptions: AutoplayOptionsType | undefined; +} +export default Autoplay; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts new file mode 100644 index 0000000000..533b7cda56 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts @@ -0,0 +1,14 @@ +import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'; +export type DelayOptionType = number | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[]); +export type RootNodeType = null | ((emblaRoot: HTMLElement) => HTMLElement | null); +export type OptionsType = CreateOptionsType<{ + delay: DelayOptionType; + jump: boolean; + playOnInit: boolean; + stopOnFocusIn: boolean; + stopOnInteraction: boolean; + stopOnMouseEnter: boolean; + stopOnLastSnap: boolean; + rootNode: RootNodeType; +}>; +export declare const defaultOptions: OptionsType; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts new file mode 100644 index 0000000000..74c23227aa --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts @@ -0,0 +1,4 @@ +import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'; +import { DelayOptionType, RootNodeType } from './Options.js'; +export declare function normalizeDelay(emblaApi: EmblaCarouselType, delay: DelayOptionType): number[]; +export declare function getAutoplayRootNode(emblaApi: EmblaCarouselType, rootNode: RootNodeType): HTMLElement; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js new file mode 100644 index 0000000000..e8e1560cac --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js @@ -0,0 +1,195 @@ +const defaultOptions = { + active: true, + breakpoints: {}, + delay: 4000, + jump: false, + playOnInit: true, + stopOnFocusIn: true, + stopOnInteraction: true, + stopOnMouseEnter: false, + stopOnLastSnap: false, + rootNode: null +}; + +function normalizeDelay(emblaApi, delay) { + const scrollSnaps = emblaApi.scrollSnapList(); + if (typeof delay === 'number') { + return scrollSnaps.map(() => delay); + } + return delay(scrollSnaps, emblaApi); +} +function getAutoplayRootNode(emblaApi, rootNode) { + const emblaRootNode = emblaApi.rootNode(); + return rootNode && rootNode(emblaRootNode) || emblaRootNode; +} + +function Autoplay(userOptions = {}) { + let options; + let emblaApi; + let destroyed; + let delay; + let timerStartTime = null; + let timerId = 0; + let autoplayActive = false; + let mouseIsOver = false; + let playOnDocumentVisible = false; + let jump = false; + function init(emblaApiInstance, optionsHandler) { + emblaApi = emblaApiInstance; + const { + mergeOptions, + optionsAtMedia + } = optionsHandler; + const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions); + const allOptions = mergeOptions(optionsBase, userOptions); + options = optionsAtMedia(allOptions); + if (emblaApi.scrollSnapList().length <= 1) return; + jump = options.jump; + destroyed = false; + delay = normalizeDelay(emblaApi, options.delay); + const { + eventStore, + ownerDocument + } = emblaApi.internalEngine(); + const isDraggable = !!emblaApi.internalEngine().options.watchDrag; + const root = getAutoplayRootNode(emblaApi, options.rootNode); + eventStore.add(ownerDocument, 'visibilitychange', visibilityChange); + if (isDraggable) { + emblaApi.on('pointerDown', pointerDown); + } + if (isDraggable && !options.stopOnInteraction) { + emblaApi.on('pointerUp', pointerUp); + } + if (options.stopOnMouseEnter) { + eventStore.add(root, 'mouseenter', mouseEnter); + } + if (options.stopOnMouseEnter && !options.stopOnInteraction) { + eventStore.add(root, 'mouseleave', mouseLeave); + } + if (options.stopOnFocusIn) { + emblaApi.on('slideFocusStart', stopAutoplay); + } + if (options.stopOnFocusIn && !options.stopOnInteraction) { + eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay); + } + if (options.playOnInit) startAutoplay(); + } + function destroy() { + emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay); + stopAutoplay(); + destroyed = true; + autoplayActive = false; + } + function setTimer() { + const { + ownerWindow + } = emblaApi.internalEngine(); + ownerWindow.clearTimeout(timerId); + timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]); + timerStartTime = new Date().getTime(); + emblaApi.emit('autoplay:timerset'); + } + function clearTimer() { + const { + ownerWindow + } = emblaApi.internalEngine(); + ownerWindow.clearTimeout(timerId); + timerId = 0; + timerStartTime = null; + emblaApi.emit('autoplay:timerstopped'); + } + function startAutoplay() { + if (destroyed) return; + if (documentIsHidden()) { + playOnDocumentVisible = true; + return; + } + if (!autoplayActive) emblaApi.emit('autoplay:play'); + setTimer(); + autoplayActive = true; + } + function stopAutoplay() { + if (destroyed) return; + if (autoplayActive) emblaApi.emit('autoplay:stop'); + clearTimer(); + autoplayActive = false; + } + function visibilityChange() { + if (documentIsHidden()) { + playOnDocumentVisible = autoplayActive; + return stopAutoplay(); + } + if (playOnDocumentVisible) startAutoplay(); + } + function documentIsHidden() { + const { + ownerDocument + } = emblaApi.internalEngine(); + return ownerDocument.visibilityState === 'hidden'; + } + function pointerDown() { + if (!mouseIsOver) stopAutoplay(); + } + function pointerUp() { + if (!mouseIsOver) startAutoplay(); + } + function mouseEnter() { + mouseIsOver = true; + stopAutoplay(); + } + function mouseLeave() { + mouseIsOver = false; + startAutoplay(); + } + function play(jumpOverride) { + if (typeof jumpOverride !== 'undefined') jump = jumpOverride; + startAutoplay(); + } + function stop() { + if (autoplayActive) stopAutoplay(); + } + function reset() { + if (autoplayActive) startAutoplay(); + } + function isPlaying() { + return autoplayActive; + } + function next() { + const { + index + } = emblaApi.internalEngine(); + const nextIndex = index.clone().add(1).get(); + const lastIndex = emblaApi.scrollSnapList().length - 1; + const kill = options.stopOnLastSnap && nextIndex === lastIndex; + if (emblaApi.canScrollNext()) { + emblaApi.scrollNext(jump); + } else { + emblaApi.scrollTo(0, jump); + } + emblaApi.emit('autoplay:select'); + if (kill) return stopAutoplay(); + startAutoplay(); + } + function timeUntilNext() { + if (!timerStartTime) return null; + const currentDelay = delay[emblaApi.selectedScrollSnap()]; + const timePastSinceStart = new Date().getTime() - timerStartTime; + return currentDelay - timePastSinceStart; + } + const self = { + name: 'autoplay', + options: userOptions, + init, + destroy, + play, + stop, + reset, + isPlaying, + timeUntilNext + }; + return self; +} +Autoplay.globalOptions = undefined; + +export { Autoplay as default }; +//# sourceMappingURL=embla-carousel-autoplay.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map new file mode 100644 index 0000000000..4f6917d9e3 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel-autoplay.esm.js","sources":["../src/components/Options.ts","../src/components/utils.ts","../src/components/Autoplay.ts"],"sourcesContent":["import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'\n\nexport type DelayOptionType =\n | number\n | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[])\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n delay: DelayOptionType\n jump: boolean\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n stopOnLastSnap: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { DelayOptionType, RootNodeType } from './Options'\n\nexport function normalizeDelay(\n emblaApi: EmblaCarouselType,\n delay: DelayOptionType\n): number[] {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay)\n }\n return delay(scrollSnaps, emblaApi)\n}\n\nexport function getAutoplayRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoplayRootNode, normalizeDelay } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoplay: AutoplayType\n }\n\n interface EmblaEventListType {\n autoplayPlay: 'autoplay:play'\n autoplayStop: 'autoplay:stop'\n autoplaySelect: 'autoplay:select'\n autoplayTimerSet: 'autoplay:timerset'\n autoplayTimerStopped: 'autoplay:timerstopped'\n }\n}\n\nexport type AutoplayType = CreatePluginType<\n {\n play: (jump?: boolean) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n timeUntilNext: () => number | null\n },\n OptionsType\n>\n\nexport type AutoplayOptionsType = AutoplayType['options']\n\nfunction Autoplay(userOptions: AutoplayOptionsType = {}): AutoplayType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let delay: ReturnType\n let timerStartTime: null | number = null\n let timerId = 0\n let autoplayActive = false\n let mouseIsOver = false\n let playOnDocumentVisible = false\n let jump = false\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n jump = options.jump\n destroyed = false\n delay = normalizeDelay(emblaApi, options.delay)\n\n const { eventStore, ownerDocument } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoplayRootNode(emblaApi, options.rootNode)\n\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay)\n }\n\n if (options.playOnInit) startAutoplay()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoplay)\n\n stopAutoplay()\n destroyed = true\n autoplayActive = false\n }\n\n function setTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()])\n timerStartTime = new Date().getTime()\n emblaApi.emit('autoplay:timerset')\n }\n\n function clearTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n timerStartTime = null\n emblaApi.emit('autoplay:timerstopped')\n }\n\n function startAutoplay(): void {\n if (destroyed) return\n if (documentIsHidden()) {\n playOnDocumentVisible = true\n return\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play')\n\n setTimer()\n autoplayActive = true\n }\n\n function stopAutoplay(): void {\n if (destroyed) return\n if (autoplayActive) emblaApi.emit('autoplay:stop')\n\n clearTimer()\n autoplayActive = false\n }\n\n function visibilityChange(): void {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive\n return stopAutoplay()\n }\n\n if (playOnDocumentVisible) startAutoplay()\n }\n\n function documentIsHidden(): boolean {\n const { ownerDocument } = emblaApi.internalEngine()\n return ownerDocument.visibilityState === 'hidden'\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoplay()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoplay()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoplay()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoplay()\n }\n\n function play(jumpOverride?: boolean): void {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride\n startAutoplay()\n }\n\n function stop(): void {\n if (autoplayActive) stopAutoplay()\n }\n\n function reset(): void {\n if (autoplayActive) startAutoplay()\n }\n\n function isPlaying(): boolean {\n return autoplayActive\n }\n\n function next(): void {\n const { index } = emblaApi.internalEngine()\n const nextIndex = index.clone().add(1).get()\n const lastIndex = emblaApi.scrollSnapList().length - 1\n const kill = options.stopOnLastSnap && nextIndex === lastIndex\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump)\n } else {\n emblaApi.scrollTo(0, jump)\n }\n\n emblaApi.emit('autoplay:select')\n\n if (kill) return stopAutoplay()\n startAutoplay()\n }\n\n function timeUntilNext(): number | null {\n if (!timerStartTime) return null\n const currentDelay = delay[emblaApi.selectedScrollSnap()]\n const timePastSinceStart = new Date().getTime() - timerStartTime\n return currentDelay - timePastSinceStart\n }\n\n const self: AutoplayType = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n }\n return self\n}\n\ndeclare namespace Autoplay {\n let globalOptions: AutoplayOptionsType | undefined\n}\n\nAutoplay.globalOptions = undefined\n\nexport default Autoplay\n"],"names":["defaultOptions","active","breakpoints","delay","jump","playOnInit","stopOnFocusIn","stopOnInteraction","stopOnMouseEnter","stopOnLastSnap","rootNode","normalizeDelay","emblaApi","scrollSnaps","scrollSnapList","map","getAutoplayRootNode","emblaRootNode","Autoplay","userOptions","options","destroyed","timerStartTime","timerId","autoplayActive","mouseIsOver","playOnDocumentVisible","init","emblaApiInstance","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","globalOptions","allOptions","length","eventStore","ownerDocument","internalEngine","isDraggable","watchDrag","root","add","visibilityChange","on","pointerDown","pointerUp","mouseEnter","mouseLeave","stopAutoplay","containerNode","startAutoplay","destroy","off","setTimer","ownerWindow","clearTimeout","setTimeout","next","selectedScrollSnap","Date","getTime","emit","clearTimer","documentIsHidden","visibilityState","play","jumpOverride","stop","reset","isPlaying","index","nextIndex","clone","get","lastIndex","kill","canScrollNext","scrollNext","scrollTo","timeUntilNext","currentDelay","timePastSinceStart","self","name","undefined"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts new file mode 100644 index 0000000000..c3cb09c391 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts @@ -0,0 +1,2 @@ +export { AutoplayType, AutoplayOptionsType } from './components/Autoplay.js'; +export { default } from './components/Autoplay.js'; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json new file mode 100644 index 0000000000..4b01e65195 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json @@ -0,0 +1,55 @@ +{ + "name": "embla-carousel-autoplay", + "version": "8.6.0", + "author": "David Jerleke", + "description": "An autoplay plugin for Embla Carousel", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-autoplay*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "embla-carousel": "8.6.0" + }, + "module": "embla-carousel-autoplay.esm.js", + "type": "module" +} diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts new file mode 100644 index 0000000000..ee2bc3b587 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts @@ -0,0 +1,2 @@ +export { AutoplayType, AutoplayOptionsType } from './components/Autoplay'; +export { default } from './components/Autoplay'; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json new file mode 100644 index 0000000000..58a61edb0a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json @@ -0,0 +1,77 @@ +{ + "name": "embla-carousel-autoplay", + "version": "8.6.0", + "author": "David Jerleke", + "description": "An autoplay plugin for Embla Carousel", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "main": "embla-carousel-autoplay.umd.js", + "unpkg": "embla-carousel-autoplay.umd.js", + "module": "./esm/embla-carousel-autoplay.esm.js", + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-autoplay*", + "components/**/*", + "index.d.ts", + "esm/**/*", + "cjs/**/*" + ], + "scripts": { + "test": "echo \"Info: no tests specified\" && exit 0", + "build": "rollup --bundleConfigAsCjs -c", + "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", + "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" + }, + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "embla-carousel": "8.6.0" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./esm/index.d.ts", + "default": "./esm/embla-carousel-autoplay.esm.js" + }, + "require": { + "types": "./cjs/index.d.ts", + "default": "./cjs/embla-carousel-autoplay.cjs.js" + } + } + } +} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel new file mode 120000 index 0000000000..ba29366a8c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel @@ -0,0 +1 @@ +../../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md new file mode 100644 index 0000000000..e343178cde --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md @@ -0,0 +1,233 @@ +
+
+

+ Embla Carousel + +

+ +

+ + + + + + +

+ + +

Embla Carousel React

+
+ +

+ Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. +

+ +
+ +

+ +  Examples  + +

+ +

+ +  Generator  + +

+ +

+ +  Installation  + +

+
+ +
+ +
+ +

Ready for

+
+ +

+ + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ + + +
+ +
+ +

Special Thanks

+
+

+ + gunnarx2 - React wrapper useEmblaCarousel. + +
+ + LiamMartens - Solid wrapper createEmblaCarousel. + +
+ + donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. + +
+ + xiel - Plugin Embla Carousel Wheel Gestures. + +
+ + zaaakher - Contributing guidelines. + +
+ + sarussss - Answering questions. + +

+
+ +
+ +

Open Source

+ +

+ Embla is MIT licensed 💖.

+ Embla Carousel - Copyright © 2019-present.
+ Package created by David Jerleke. +

+ +

+ · · · +

+ +

+ Thanks BrowserStack. +

+ +

+ + + +

diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts new file mode 100644 index 0000000000..e23b160c11 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts @@ -0,0 +1,11 @@ +import { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } from 'embla-carousel'; +export type EmblaViewportRefType = (instance: ViewportElement | null) => void; +export type UseEmblaCarouselType = [ + EmblaViewportRefType, + EmblaCarouselType | undefined +]; +declare function useEmblaCarousel(options?: EmblaOptionsType, plugins?: EmblaPluginType[]): UseEmblaCarouselType; +declare namespace useEmblaCarousel { + let globalOptions: EmblaOptionsType | undefined; +} +export default useEmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js new file mode 100644 index 0000000000..263b35416c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js @@ -0,0 +1,40 @@ +'use strict'; + +var react = require('react'); +var emblaCarouselReactiveUtils = require('embla-carousel-reactive-utils'); +var EmblaCarousel = require('embla-carousel'); + +function useEmblaCarousel(options = {}, plugins = []) { + const storedOptions = react.useRef(options); + const storedPlugins = react.useRef(plugins); + const [emblaApi, setEmblaApi] = react.useState(); + const [viewport, setViewport] = react.useState(); + const reInit = react.useCallback(() => { + if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current); + }, [emblaApi]); + react.useEffect(() => { + if (emblaCarouselReactiveUtils.areOptionsEqual(storedOptions.current, options)) return; + storedOptions.current = options; + reInit(); + }, [options, reInit]); + react.useEffect(() => { + if (emblaCarouselReactiveUtils.arePluginsEqual(storedPlugins.current, plugins)) return; + storedPlugins.current = plugins; + reInit(); + }, [plugins, reInit]); + react.useEffect(() => { + if (emblaCarouselReactiveUtils.canUseDOM() && viewport) { + EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions; + const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current); + setEmblaApi(newEmblaApi); + return () => newEmblaApi.destroy(); + } else { + setEmblaApi(undefined); + } + }, [viewport, setEmblaApi]); + return [setViewport, emblaApi]; +} +useEmblaCarousel.globalOptions = undefined; + +module.exports = useEmblaCarousel; +//# sourceMappingURL=embla-carousel-react.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map new file mode 100644 index 0000000000..ae9cf4cace --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel-react.cjs.js","sources":["../src/components/useEmblaCarousel.ts"],"sourcesContent":["import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaViewportRefType = (\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState()\n const [viewport, setViewport] = useState()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n return [setViewport, emblaApi]\n}\n\ndeclare namespace useEmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n"],"names":["useEmblaCarousel","options","plugins","storedOptions","useRef","storedPlugins","emblaApi","setEmblaApi","useState","viewport","setViewport","reInit","useCallback","current","useEffect","areOptionsEqual","arePluginsEqual","canUseDOM","EmblaCarousel","globalOptions","newEmblaApi","destroy","undefined"],"mappings":";;;;;;AAqBA,SAASA,gBAAgBA,CACvBC,OAAA,GAA4B,EAAE,EAC9BC,UAA6B,EAAE,EAAA;AAE/B,EAAA,MAAMC,aAAa,GAAGC,YAAM,CAACH,OAAO,CAAC;AACrC,EAAA,MAAMI,aAAa,GAAGD,YAAM,CAACF,OAAO,CAAC;EACrC,MAAM,CAACI,QAAQ,EAAEC,WAAW,CAAC,GAAGC,cAAQ,EAAqB;EAC7D,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGF,cAAQ,EAAe;AAEvD,EAAA,MAAMG,MAAM,GAAGC,iBAAW,CAAC,MAAK;AAC9B,IAAA,IAAIN,QAAQ,EAAEA,QAAQ,CAACK,MAAM,CAACR,aAAa,CAACU,OAAO,EAAER,aAAa,CAACQ,OAAO,CAAC;AAC7E,GAAC,EAAE,CAACP,QAAQ,CAAC,CAAC;AAEdQ,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIC,0CAAe,CAACZ,aAAa,CAACU,OAAO,EAAEZ,OAAO,CAAC,EAAE;IACrDE,aAAa,CAACU,OAAO,GAAGZ,OAAO;AAC/BU,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACV,OAAO,EAAEU,MAAM,CAAC,CAAC;AAErBG,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIE,0CAAe,CAACX,aAAa,CAACQ,OAAO,EAAEX,OAAO,CAAC,EAAE;IACrDG,aAAa,CAACQ,OAAO,GAAGX,OAAO;AAC/BS,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACT,OAAO,EAAES,MAAM,CAAC,CAAC;AAErBG,EAAAA,eAAS,CAAC,MAAK;AACb,IAAA,IAAIG,oCAAS,EAAE,IAAIR,QAAQ,EAAE;AAC3BS,MAAAA,aAAa,CAACC,aAAa,GAAGnB,gBAAgB,CAACmB,aAAa;AAC5D,MAAA,MAAMC,WAAW,GAAGF,aAAa,CAC/BT,QAAQ,EACRN,aAAa,CAACU,OAAO,EACrBR,aAAa,CAACQ,OAAO,CACtB;MACDN,WAAW,CAACa,WAAW,CAAC;AACxB,MAAA,OAAO,MAAMA,WAAW,CAACC,OAAO,EAAE;AACpC,KAAC,MAAM;MACLd,WAAW,CAACe,SAAS,CAAC;AACxB;AACF,GAAC,EAAE,CAACb,QAAQ,EAAEF,WAAW,CAAC,CAAC;AAE3B,EAAA,OAAO,CAAuBG,WAAW,EAAEJ,QAAQ,CAAC;AACtD;AAMAN,gBAAgB,CAACmB,aAAa,GAAGG,SAAS;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts new file mode 100644 index 0000000000..8ce0b23390 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts @@ -0,0 +1,2 @@ +export { UseEmblaCarouselType, EmblaViewportRefType } from './components/useEmblaCarousel'; +export { default } from './components/useEmblaCarousel'; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json new file mode 100644 index 0000000000..a31b7748af --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json @@ -0,0 +1,60 @@ +{ + "name": "embla-carousel-react", + "version": "8.6.0", + "author": "David Jerleke", + "description": "A lightweight carousel library with fluid motion and great swipe precision", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-react*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@types/react": "^18.0.8", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "main": "embla-carousel-react.cjs.js", + "type": "commonjs" +} diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts new file mode 100644 index 0000000000..e23b160c11 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts @@ -0,0 +1,11 @@ +import { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } from 'embla-carousel'; +export type EmblaViewportRefType = (instance: ViewportElement | null) => void; +export type UseEmblaCarouselType = [ + EmblaViewportRefType, + EmblaCarouselType | undefined +]; +declare function useEmblaCarousel(options?: EmblaOptionsType, plugins?: EmblaPluginType[]): UseEmblaCarouselType; +declare namespace useEmblaCarousel { + let globalOptions: EmblaOptionsType | undefined; +} +export default useEmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js new file mode 100644 index 0000000000..f9e88046de --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js @@ -0,0 +1 @@ +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarouselReact=t(n.React)}(this,(function(n){"use strict";function t(n){return function(n){return"[object Object]"===Object.prototype.toString.call(n)}(n)||Array.isArray(n)}function e(n,r){const o=Object.keys(n),i=Object.keys(r);if(o.length!==i.length)return!1;return JSON.stringify(Object.keys(n.breakpoints||{}))===JSON.stringify(Object.keys(r.breakpoints||{}))&&o.every((o=>{const i=n[o],c=r[o];return"function"==typeof i?`${i}`==`${c}`:t(i)&&t(c)?e(i,c):i===c}))}function r(n){return n.concat().sort(((n,t)=>n.name>t.name?1:-1)).map((n=>n.options))}function o(n){return"number"==typeof n}function i(n){return"string"==typeof n}function c(n){return"boolean"==typeof n}function u(n){return"[object Object]"===Object.prototype.toString.call(n)}function s(n){return Math.abs(n)}function a(n){return Math.sign(n)}function d(n,t){return s(n-t)}function f(n){return h(n).map(Number)}function l(n){return n[p(n)]}function p(n){return Math.max(0,n.length-1)}function g(n,t){return t===p(n)}function m(n,t=0){return Array.from(Array(n),((n,e)=>t+e))}function h(n){return Object.keys(n)}function y(n,t){return[n,t].reduce(((n,t)=>(h(t).forEach((e=>{const r=n[e],o=t[e],i=u(r)&&u(o);n[e]=i?y(r,o):o})),n)),{})}function x(n,t){return void 0!==t.MouseEvent&&n instanceof t.MouseEvent}function b(){let n=[];const t={add:function(e,r,o,i={passive:!0}){let c;if("addEventListener"in e)e.addEventListener(r,o,i),c=()=>e.removeEventListener(r,o,i);else{const n=e;n.addListener(o),c=()=>n.removeListener(o)}return n.push(c),t},clear:function(){n=n.filter((n=>n()))}};return t}function v(n,t,e,r){const o=b(),i=1e3/60;let c=null,u=0,s=0;function a(n){if(!s)return;c||(c=n,e(),e());const o=n-c;for(c=n,u+=o;u>=i;)e(),u-=i;r(u/i),s&&(s=t.requestAnimationFrame(a))}function d(){t.cancelAnimationFrame(s),c=null,u=0,s=0}return{init:function(){o.add(n,"visibilitychange",(()=>{n.hidden&&(c=null,u=0)}))},destroy:function(){d(),o.clear()},start:function(){s||(s=t.requestAnimationFrame(a))},stop:d,update:e,render:r}}function S(n=0,t=0){const e=s(n-t);function r(t){return tt}function i(n){return r(n)||o(n)}return{length:e,max:t,min:n,constrain:function(e){return i(e)?r(e)?n:t:e},reachedAny:i,reachedMax:o,reachedMin:r,removeOffset:function(n){return e?n-e*Math.ceil((n-t)/e):n}}}function w(n,t,e){const{constrain:r}=S(0,n),o=n+1;let i=c(t);function c(n){return e?s((o+n)%o):r(n)}function u(){return i}function a(){return w(n,u(),e)}const d={get:u,set:function(n){return i=c(n),d},add:function(n){return a().set(u()+n)},clone:a};return d}function E(n,t,e,r,o,i,u,f,l,p,g,m,h,y,v,w,E,L,O){const{cross:D,direction:I}=n,A=["INPUT","SELECT","TEXTAREA"],M={passive:!1},F=b(),T=b(),k=S(50,225).constrain(y.measure(20)),P={mouse:300,touch:400},z={mouse:500,touch:600},H=v?43:25;let j=!1,R=0,V=0,B=!1,C=!1,N=!1,q=!1;function G(n){if(!x(n,r)&&n.touches.length>=2)return $(n);const t=i.readPoint(n),e=i.readPoint(n,D),c=d(t,R),u=d(e,V);if(!C&&!q){if(!n.cancelable)return $(n);if(C=c>u,!C)return $(n)}const s=i.pointerMove(n);c>w&&(N=!0),p.useFriction(.3).useDuration(.75),f.start(),o.add(I(s)),n.preventDefault()}function $(n){const t=g.byDistance(0,!1).index!==m.get(),e=i.pointerUp(n)*(v?z:P)[q?"mouse":"touch"],r=function(n,t){const e=m.add(-1*a(n)),r=g.byDistance(n,!v).distance;return v||s(n)=2,c&&0!==n.button)return;if(function(n){const t=n.nodeName||"";return A.includes(t)}(n.target))return;B=!0,i.pointerDown(n),p.useFriction(0).useDuration(0),o.set(u),function(){const n=q?e:t;T.add(n,"touchmove",G,M).add(n,"touchend",$).add(n,"mousemove",G,M).add(n,"mouseup",$)}(),R=i.readPoint(n),V=i.readPoint(n,D),h.emit("pointerDown")}(s)}const a=t;F.add(a,"dragstart",(n=>n.preventDefault()),M).add(a,"touchmove",(()=>{}),M).add(a,"touchend",(()=>{})).add(a,"touchstart",s).add(a,"mousedown",s).add(a,"touchcancel",$).add(a,"contextmenu",$).add(a,"click",U,!0)},destroy:function(){F.clear(),T.clear()},pointerDown:function(){return B}}}function L(n,t){let e,r;function o(n){return n.timeStamp}function i(e,r){const o="client"+("x"===(r||n.scroll)?"X":"Y");return(x(e,t)?e:e.touches[0])[o]}return{pointerDown:function(n){return e=n,r=n,i(n)},pointerMove:function(n){const t=i(n)-i(r),c=o(n)-o(e)>170;return r=n,c&&(e=n),t},pointerUp:function(n){if(!e||!r)return 0;const t=i(r)-i(e),c=o(n)-o(e),u=o(n)-o(r)>170,a=t/c;return c&&!u&&s(a)>.1?a:0},readPoint:i}}function O(n,t,e,r,o,i,u){const a=[n].concat(r);let d,f,l=[],p=!1;function g(n){return o.measureSize(u.measure(n))}return{init:function(o){i&&(f=g(n),l=r.map(g),d=new ResizeObserver((e=>{(c(i)||i(o,e))&&function(e){for(const i of e){if(p)return;const e=i.target===n,c=r.indexOf(i.target),u=e?f:l[c];if(s(g(e?n:r[c])-u)>=.5){o.reInit(),t.emit("resize");break}}}(e)})),e.requestAnimationFrame((()=>{a.forEach((n=>d.observe(n)))})))},destroy:function(){p=!0,d&&d.disconnect()}}}function D(n,t,e,r,o){const i=o.measure(10),c=o.measure(50),u=S(.1,.99);let a=!1;function d(){return!a&&(!!n.reachedAny(e.get())&&!!n.reachedAny(t.get()))}return{shouldConstrain:d,constrain:function(o){if(!d())return;const a=n.reachedMin(t.get())?"min":"max",f=s(n[a]-t.get()),l=e.get()-t.get(),p=u.constrain(f/c);e.subtract(l*p),!o&&s(l)n.add(o)))}}}function A(n,t,e,r,o){const{reachedAny:i,removeOffset:c,constrain:u}=r;function d(n){return n.concat().sort(((n,t)=>s(n)-s(t)))[0]}function f(t,r){const o=[t,t+e,t-e];if(!n)return t;if(!r)return d(o);const i=o.filter((n=>a(n)===r));return i.length?d(i):l(o)-e}return{byDistance:function(e,r){const a=o.get()+e,{index:d,distance:l}=function(e){const r=n?c(e):u(e),o=t.map(((n,t)=>({diff:f(n-r,0),index:t}))).sort(((n,t)=>s(n.diff)-s(t.diff))),{index:i}=o[0];return{index:i,distance:r}}(a),p=!n&&i(a);return!r||p?{index:d,distance:e}:{index:d,distance:e+f(t[d]-l,0)}},byIndex:function(n,e){return{index:n,distance:f(t[n]-o.get(),e)}},shortcut:f}}function M(n,t,e,r,i,u,s,a){const d={passive:!0,capture:!0};let f=0;function l(n){"Tab"===n.code&&(f=(new Date).getTime())}return{init:function(p){a&&(u.add(document,"keydown",l,!1),t.forEach(((t,l)=>{u.add(t,"focus",(t=>{(c(a)||a(p,t))&&function(t){if((new Date).getTime()-f>10)return;s.emit("slideFocusStart"),n.scrollLeft=0;const c=e.findIndex((n=>n.includes(t)));o(c)&&(i.useDuration(0),r.index(c,0),s.emit("slideFocus"))}(l)}),d)})))}}}function F(n){let t=n;function e(n){return o(n)?n:n.get()}return{get:function(){return t},set:function(n){t=e(n)},add:function(n){t+=e(n)},subtract:function(n){t-=e(n)}}}function T(n,t){const e="x"===n.scroll?function(n){return`translate3d(${n}px,0px,0px)`}:function(n){return`translate3d(0px,${n}px,0px)`},r=t.style;let o=null,i=!1;return{clear:function(){i||(r.transform="",t.getAttribute("style")||t.removeAttribute("style"))},to:function(t){if(i)return;const c=(u=n.direction(t),Math.round(100*u)/100);var u;c!==o&&(r.transform=e(c),o=c)},toggleActive:function(n){i=!n}}}function k(n,t,e,r,o,i,c,u,s){const a=.5,d=f(o),l=f(o).reverse(),p=function(){const n=c[0];return h(m(l,n),e,!1)}().concat(function(){const n=t-c[0]-1;return h(m(d,n),-e,!0)}());function g(n,t){return n.reduce(((n,t)=>n-o[t]),t)}function m(n,t){return n.reduce(((n,e)=>g(n,t)>0?n.concat([e]):n),[])}function h(o,c,d){const f=function(n){return i.map(((e,o)=>({start:e-r[o]+a+n,end:e+t-a+n})))}(c);return o.map((t=>{const r=d?0:-e,o=d?e:0,i=d?"end":"start",c=f[t][i];return{index:t,loopPoint:c,slideLocation:F(-1),translate:T(n,s[t]),target:()=>u.get()>c?r:o}}))}return{canLoop:function(){return p.every((({index:n})=>g(d.filter((t=>t!==n)),t)<=.1))},clear:function(){p.forEach((n=>n.translate.clear()))},loop:function(){p.forEach((n=>{const{target:t,translate:e,slideLocation:r}=n,o=t();o!==r.get()&&(e.to(o),r.set(o))}))},loopPoints:p}}function P(n,t,e){let r,o=!1;return{init:function(i){e&&(r=new MutationObserver((n=>{o||(c(e)||e(i,n))&&function(n){for(const e of n)if("childList"===e.type){i.reInit(),t.emit("slidesChanged");break}}(n)})),r.observe(n,{childList:!0}))},destroy:function(){r&&r.disconnect(),o=!0}}}function z(n,t,e,r){const o={};let i,c=null,u=null,s=!1;return{init:function(){i=new IntersectionObserver((n=>{s||(n.forEach((n=>{const e=t.indexOf(n.target);o[e]=n})),c=null,u=null,e.emit("slidesInView"))}),{root:n.parentElement,threshold:r}),t.forEach((n=>i.observe(n)))},destroy:function(){i&&i.disconnect(),s=!0},get:function(n=!0){if(n&&c)return c;if(!n&&u)return u;const t=function(n){return h(o).reduce(((t,e)=>{const r=parseInt(e),{isIntersecting:i}=o[r];return(n&&i||!n&&!i)&&t.push(r),t}),[])}(n);return n&&(c=t),n||(u=t),t}}}function H(n,t,e,r,i,c,u,a,d){const{startEdge:g,endEdge:m,direction:h}=n,y=o(e);return{groupSlides:function(n){return y?function(n,t){return f(n).filter((n=>n%t==0)).map((e=>n.slice(e,e+t)))}(n,e):function(n){return n.length?f(n).reduce(((e,o,f)=>{const y=l(e)||0,x=0===y,b=o===p(n),v=i[g]-c[y][g],S=i[g]-c[o][m],w=!r&&x?h(u):0,E=s(S-(!r&&b?h(a):0)-(v+w));return f&&E>t+d&&e.push(o),b&&e.push(n.length),e}),[]).map(((t,e,r)=>{const o=Math.max(r[e-1]||0);return n.slice(o,t)})):[]}(n)}}}function j(n,t,e,r,o,c,u){const{align:h,axis:y,direction:x,startIndex:j,loop:R,duration:V,dragFree:B,dragThreshold:C,inViewThreshold:N,slidesToScroll:q,skipSnaps:G,containScroll:$,watchResize:U,watchSlides:W,watchDrag:J,watchFocus:Q}=c,X={measure:function(n){const{offsetTop:t,offsetLeft:e,offsetWidth:r,offsetHeight:o}=n;return{top:t,right:e+r,bottom:t+o,left:e,width:r,height:o}}},Y=X.measure(t),K=e.map(X.measure),Z=function(n,t){const e="rtl"===t,r="y"===n,o=!r&&e?-1:1;return{scroll:r?"y":"x",cross:r?"x":"y",startEdge:r?"top":e?"right":"left",endEdge:r?"bottom":e?"left":"right",measureSize:function(n){const{height:t,width:e}=n;return r?t:e},direction:function(n){return n*o}}}(y,x),_=Z.measureSize(Y),nn=function(n){return{measure:function(t){return n*(t/100)}}}(_),tn=function(n,t){const e={start:function(){return 0},center:function(n){return r(n)/2},end:r};function r(n){return t-n}return{measure:function(r,o){return i(n)?e[n](r):n(t,r,o)}}}(h,_),en=!R&&!!$,rn=R||!!$,{slideSizes:on,slideSizesWithGaps:cn,startGap:un,endGap:sn}=function(n,t,e,r,o,i){const{measureSize:c,startEdge:u,endEdge:a}=n,d=e[0]&&o,f=function(){if(!d)return 0;const n=e[0];return s(t[u]-n[u])}(),p=function(){if(!d)return 0;const n=i.getComputedStyle(l(r));return parseFloat(n.getPropertyValue(`margin-${a}`))}(),m=e.map(c),h=e.map(((n,t,e)=>{const r=!t,o=g(e,t);return r?m[t]+f:o?m[t]+p:e[t+1][u]-n[u]})).map(s);return{slideSizes:m,slideSizesWithGaps:h,startGap:f,endGap:p}}(Z,Y,K,e,rn,o),an=H(Z,_,q,R,Y,K,un,sn,2),{snaps:dn,snapsAligned:fn}=function(n,t,e,r,o){const{startEdge:i,endEdge:c}=n,{groupSlides:u}=o,a=u(r).map((n=>l(n)[c]-n[0][i])).map(s).map(t.measure),d=r.map((n=>e[i]-n[i])).map((n=>-s(n))),f=u(d).map((n=>n[0])).map(((n,t)=>n+a[t]));return{snaps:d,snapsAligned:f}}(Z,tn,Y,K,an),ln=-l(dn)+l(cn),{snapsContained:pn,scrollContainLimit:gn}=function(n,t,e,r,o){const i=S(-t+n,0),c=e.map(((n,t)=>{const{min:r,max:o}=i,c=i.constrain(n),u=!t,a=g(e,t);return u?o:a||s(r,c)?r:s(o,c)?o:c})).map((n=>parseFloat(n.toFixed(3)))),u=function(){const n=c[0],t=l(c);return S(c.lastIndexOf(n),c.indexOf(t)+1)}();function s(n,t){return d(n,t)<=1}return{snapsContained:function(){if(t<=n+o)return[i.max];if("keepSnaps"===r)return c;const{min:e,max:s}=u;return c.slice(e,s)}(),scrollContainLimit:u}}(_,ln,fn,$,2),mn=en?pn:fn,{limit:hn}=function(n,t,e){const r=t[0];return{limit:S(e?r-n:l(t),r)}}(ln,mn,R),yn=w(p(mn),j,R),xn=yn.clone(),bn=f(e),vn=v(r,o,(()=>(({dragHandler:n,scrollBody:t,scrollBounds:e,options:{loop:r}})=>{r||e.constrain(n.pointerDown()),t.seek()})(zn)),(n=>(({scrollBody:n,translate:t,location:e,offsetLocation:r,previousLocation:o,scrollLooper:i,slideLooper:c,dragHandler:u,animation:s,eventHandler:a,scrollBounds:d,options:{loop:f}},l)=>{const p=n.settled(),g=!d.shouldConstrain(),m=f?p:p&&g,h=m&&!u.pointerDown();h&&s.stop();const y=e.get()*l+o.get()*(1-l);r.set(y),f&&(i.loop(n.direction()),c.loop()),t.to(r.get()),h&&a.emit("settle"),m||a.emit("scroll")})(zn,n))),Sn=mn[yn.get()],wn=F(Sn),En=F(Sn),Ln=F(Sn),On=F(Sn),Dn=function(n,t,e,r,o,i){let c=0,u=0,d=o,f=i,l=n.get(),p=0;function g(n){return d=n,h}function m(n){return f=n,h}const h={direction:function(){return u},duration:function(){return d},velocity:function(){return c},seek:function(){const t=r.get()-n.get();let o=0;return d?(e.set(n),c+=t/d,c*=f,l+=c,n.add(c),o=l-p):(c=0,e.set(r),n.set(r),o=t),u=a(o),p=l,h},settled:function(){return s(r.get()-t.get())<.001},useBaseFriction:function(){return m(i)},useBaseDuration:function(){return g(o)},useFriction:m,useDuration:g};return h}(wn,Ln,En,On,V,.68),In=A(R,mn,ln,hn,On),An=function(n,t,e,r,o,i,c){function u(o){const u=o.distance,s=o.index!==t.get();i.add(u),u&&(r.duration()?n.start():(n.update(),n.render(1),n.update())),s&&(e.set(t.get()),t.set(o.index),c.emit("select"))}return{distance:function(n,t){u(o.byDistance(n,t))},index:function(n,e){const r=t.clone().set(n);u(o.byIndex(r.get(),e))}}}(vn,yn,xn,Dn,In,On,u),Mn=function(n){const{max:t,length:e}=n;return{get:function(n){return e?(n-t)/-e:0}}}(hn),Fn=b(),Tn=z(t,e,u,N),{slideRegistry:kn}=function(n,t,e,r,o,i){const{groupSlides:c}=o,{min:u,max:s}=r;return{slideRegistry:function(){const r=c(i),o=!n||"keepSnaps"===t;return 1===e.length?[i]:o?r:r.slice(u,s).map(((n,t,e)=>{const r=!t,o=g(e,t);return r?m(l(e[0])+1):o?m(p(i)-l(e)[0]+1,l(e)[0]):n}))}()}}(en,$,mn,gn,an,bn),Pn=M(n,e,kn,An,Dn,Fn,u,Q),zn={ownerDocument:r,ownerWindow:o,eventHandler:u,containerRect:Y,slideRects:K,animation:vn,axis:Z,dragHandler:E(Z,n,r,o,On,L(Z,o),wn,vn,An,Dn,In,yn,u,nn,B,C,G,.68,J),eventStore:Fn,percentOfView:nn,index:yn,indexPrevious:xn,limit:hn,location:wn,offsetLocation:Ln,previousLocation:En,options:c,resizeHandler:O(t,u,o,e,Z,U,X),scrollBody:Dn,scrollBounds:D(hn,Ln,On,Dn,nn),scrollLooper:I(ln,hn,Ln,[wn,Ln,En,On]),scrollProgress:Mn,scrollSnapList:mn.map(Mn.get),scrollSnaps:mn,scrollTarget:In,scrollTo:An,slideLooper:k(Z,_,ln,on,cn,dn,mn,Ln,e),slideFocus:Pn,slidesHandler:P(t,u,W),slidesInView:Tn,slideIndexes:bn,slideRegistry:kn,slidesToScroll:an,target:On,translate:T(Z,t)};return zn}const R={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function V(n){function t(n,t){return y(n,t||{})}const e={mergeOptions:t,optionsAtMedia:function(e){const r=e.breakpoints||{},o=h(r).filter((t=>n.matchMedia(t).matches)).map((n=>r[n])).reduce(((n,e)=>t(n,e)),{});return t(e,o)},optionsMediaQueries:function(t){return t.map((n=>h(n.breakpoints||{}))).reduce(((n,t)=>n.concat(t)),[]).map(n.matchMedia)}};return e}function B(n,t,e){const r=n.ownerDocument,o=r.defaultView,c=V(o),u=function(n){let t=[];return{init:function(e,r){return t=r.filter((({options:t})=>!1!==n.optionsAtMedia(t).active)),t.forEach((t=>t.init(e,n))),r.reduce(((n,t)=>Object.assign(n,{[t.name]:t})),{})},destroy:function(){t=t.filter((n=>n.destroy()))}}}(c),s=b(),a=function(){let n,t={};function e(n){return t[n]||[]}const r={init:function(t){n=t},emit:function(t){return e(t).forEach((e=>e(n,t))),r},off:function(n,o){return t[n]=e(n).filter((n=>n!==o)),r},on:function(n,o){return t[n]=e(n).concat([o]),r},clear:function(){t={}}};return r}(),{mergeOptions:d,optionsAtMedia:f,optionsMediaQueries:l}=c,{on:p,off:g,emit:m}=a,h=A;let y,x,v,S,w=!1,E=d(R,B.globalOptions),L=d(E),O=[];function D(t){const e=j(n,v,S,r,o,t,a);if(t.loop&&!e.slideLooper.canLoop()){return D(Object.assign({},t,{loop:!1}))}return e}function I(t,e){w||(E=d(E,t),L=f(E),O=e||O,function(){const{container:t,slides:e}=L,r=i(t)?n.querySelector(t):t;v=r||n.children[0];const o=i(e)?v.querySelectorAll(e):e;S=[].slice.call(o||v.children)}(),y=D(L),l([E,...O.map((({options:n})=>n))]).forEach((n=>s.add(n,"change",A))),L.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(k),y.eventHandler.init(k),y.resizeHandler.init(k),y.slidesHandler.init(k),y.options.loop&&y.slideLooper.loop(),v.offsetParent&&S.length&&y.dragHandler.init(k),x=u.init(k,O)))}function A(n,t){const e=T();M(),I(d({startIndex:e},n),t),a.emit("reInit")}function M(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),u.destroy(),s.clear()}function F(n,t,e){L.active&&!w&&(y.scrollBody.useBaseFriction().useDuration(!0===t?0:L.duration),y.scrollTo.index(n,e||0))}function T(){return y.index.get()}const k={canScrollNext:function(){return y.index.add(1).get()!==T()},canScrollPrev:function(){return y.index.add(-1).get()!==T()},containerNode:function(){return v},internalEngine:function(){return y},destroy:function(){w||(w=!0,s.clear(),M(),a.emit("destroy"),a.clear())},off:g,on:p,emit:m,plugins:function(){return x},previousScrollSnap:function(){return y.indexPrevious.get()},reInit:h,rootNode:function(){return n},scrollNext:function(n){F(y.index.add(1).get(),n,-1)},scrollPrev:function(n){F(y.index.add(-1).get(),n,1)},scrollProgress:function(){return y.scrollProgress.get(y.offsetLocation.get())},scrollSnapList:function(){return y.scrollSnapList},scrollTo:F,selectedScrollSnap:T,slideNodes:function(){return S},slidesInView:function(){return y.slidesInView.get()},slidesNotInView:function(){return y.slidesInView.get(!1)}};return I(t,e),setTimeout((()=>a.emit("init")),0),k}function C(t={},o=[]){const i=n.useRef(t),c=n.useRef(o),[u,s]=n.useState(),[a,d]=n.useState(),f=n.useCallback((()=>{u&&u.reInit(i.current,c.current)}),[u]);return n.useEffect((()=>{e(i.current,t)||(i.current=t,f())}),[t,f]),n.useEffect((()=>{(function(n,t){if(n.length!==t.length)return!1;const o=r(n),i=r(t);return o.every(((n,t)=>e(n,i[t])))})(c.current,o)||(c.current=o,f())}),[o,f]),n.useEffect((()=>{if("undefined"!=typeof window&&window.document&&window.document.createElement&&a){B.globalOptions=C.globalOptions;const n=B(a,i.current,c.current);return s(n),()=>n.destroy()}s(void 0)}),[a,s]),[d,u]}return B.globalOptions=void 0,C.globalOptions=void 0,C})); diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts new file mode 100644 index 0000000000..e23b160c11 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts @@ -0,0 +1,11 @@ +import { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } from 'embla-carousel'; +export type EmblaViewportRefType = (instance: ViewportElement | null) => void; +export type UseEmblaCarouselType = [ + EmblaViewportRefType, + EmblaCarouselType | undefined +]; +declare function useEmblaCarousel(options?: EmblaOptionsType, plugins?: EmblaPluginType[]): UseEmblaCarouselType; +declare namespace useEmblaCarousel { + let globalOptions: EmblaOptionsType | undefined; +} +export default useEmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js new file mode 100644 index 0000000000..9be497027f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js @@ -0,0 +1,38 @@ +import { useRef, useState, useCallback, useEffect } from 'react'; +import { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils'; +import EmblaCarousel from 'embla-carousel'; + +function useEmblaCarousel(options = {}, plugins = []) { + const storedOptions = useRef(options); + const storedPlugins = useRef(plugins); + const [emblaApi, setEmblaApi] = useState(); + const [viewport, setViewport] = useState(); + const reInit = useCallback(() => { + if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current); + }, [emblaApi]); + useEffect(() => { + if (areOptionsEqual(storedOptions.current, options)) return; + storedOptions.current = options; + reInit(); + }, [options, reInit]); + useEffect(() => { + if (arePluginsEqual(storedPlugins.current, plugins)) return; + storedPlugins.current = plugins; + reInit(); + }, [plugins, reInit]); + useEffect(() => { + if (canUseDOM() && viewport) { + EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions; + const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current); + setEmblaApi(newEmblaApi); + return () => newEmblaApi.destroy(); + } else { + setEmblaApi(undefined); + } + }, [viewport, setEmblaApi]); + return [setViewport, emblaApi]; +} +useEmblaCarousel.globalOptions = undefined; + +export { useEmblaCarousel as default }; +//# sourceMappingURL=embla-carousel-react.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map new file mode 100644 index 0000000000..49d3ed0c08 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel-react.esm.js","sources":["../src/components/useEmblaCarousel.ts"],"sourcesContent":["import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaViewportRefType = (\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState()\n const [viewport, setViewport] = useState()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n return [setViewport, emblaApi]\n}\n\ndeclare namespace useEmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n"],"names":["useEmblaCarousel","options","plugins","storedOptions","useRef","storedPlugins","emblaApi","setEmblaApi","useState","viewport","setViewport","reInit","useCallback","current","useEffect","areOptionsEqual","arePluginsEqual","canUseDOM","EmblaCarousel","globalOptions","newEmblaApi","destroy","undefined"],"mappings":";;;;AAqBA,SAASA,gBAAgBA,CACvBC,OAAA,GAA4B,EAAE,EAC9BC,UAA6B,EAAE,EAAA;AAE/B,EAAA,MAAMC,aAAa,GAAGC,MAAM,CAACH,OAAO,CAAC;AACrC,EAAA,MAAMI,aAAa,GAAGD,MAAM,CAACF,OAAO,CAAC;EACrC,MAAM,CAACI,QAAQ,EAAEC,WAAW,CAAC,GAAGC,QAAQ,EAAqB;EAC7D,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGF,QAAQ,EAAe;AAEvD,EAAA,MAAMG,MAAM,GAAGC,WAAW,CAAC,MAAK;AAC9B,IAAA,IAAIN,QAAQ,EAAEA,QAAQ,CAACK,MAAM,CAACR,aAAa,CAACU,OAAO,EAAER,aAAa,CAACQ,OAAO,CAAC;AAC7E,GAAC,EAAE,CAACP,QAAQ,CAAC,CAAC;AAEdQ,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIC,eAAe,CAACZ,aAAa,CAACU,OAAO,EAAEZ,OAAO,CAAC,EAAE;IACrDE,aAAa,CAACU,OAAO,GAAGZ,OAAO;AAC/BU,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACV,OAAO,EAAEU,MAAM,CAAC,CAAC;AAErBG,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIE,eAAe,CAACX,aAAa,CAACQ,OAAO,EAAEX,OAAO,CAAC,EAAE;IACrDG,aAAa,CAACQ,OAAO,GAAGX,OAAO;AAC/BS,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACT,OAAO,EAAES,MAAM,CAAC,CAAC;AAErBG,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIG,SAAS,EAAE,IAAIR,QAAQ,EAAE;AAC3BS,MAAAA,aAAa,CAACC,aAAa,GAAGnB,gBAAgB,CAACmB,aAAa;AAC5D,MAAA,MAAMC,WAAW,GAAGF,aAAa,CAC/BT,QAAQ,EACRN,aAAa,CAACU,OAAO,EACrBR,aAAa,CAACQ,OAAO,CACtB;MACDN,WAAW,CAACa,WAAW,CAAC;AACxB,MAAA,OAAO,MAAMA,WAAW,CAACC,OAAO,EAAE;AACpC,KAAC,MAAM;MACLd,WAAW,CAACe,SAAS,CAAC;AACxB;AACF,GAAC,EAAE,CAACb,QAAQ,EAAEF,WAAW,CAAC,CAAC;AAE3B,EAAA,OAAO,CAAuBG,WAAW,EAAEJ,QAAQ,CAAC;AACtD;AAMAN,gBAAgB,CAACmB,aAAa,GAAGG,SAAS;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts new file mode 100644 index 0000000000..ccec99221c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts @@ -0,0 +1,2 @@ +export { UseEmblaCarouselType, EmblaViewportRefType } from './components/useEmblaCarousel.js'; +export { default } from './components/useEmblaCarousel.js'; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json new file mode 100644 index 0000000000..f4604c2f56 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json @@ -0,0 +1,60 @@ +{ + "name": "embla-carousel-react", + "version": "8.6.0", + "author": "David Jerleke", + "description": "A lightweight carousel library with fluid motion and great swipe precision", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-react*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@types/react": "^18.0.8", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "module": "embla-carousel-react.esm.js", + "type": "module" +} diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts new file mode 100644 index 0000000000..8ce0b23390 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts @@ -0,0 +1,2 @@ +export { UseEmblaCarouselType, EmblaViewportRefType } from './components/useEmblaCarousel'; +export { default } from './components/useEmblaCarousel'; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json new file mode 100644 index 0000000000..25bd77cfd5 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json @@ -0,0 +1,82 @@ +{ + "name": "embla-carousel-react", + "version": "8.6.0", + "author": "David Jerleke", + "description": "A lightweight carousel library with fluid motion and great swipe precision", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "main": "embla-carousel-react.umd.js", + "unpkg": "embla-carousel-react.umd.js", + "module": "./esm/embla-carousel-react.esm.js", + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-react*", + "components/**/*", + "index.d.ts", + "esm/**/*", + "cjs/**/*" + ], + "scripts": { + "test": "echo \"Info: no tests specified\" && exit 0", + "build": "rollup --bundleConfigAsCjs -c", + "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", + "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" + }, + "devDependencies": { + "@types/jest": "^29.5.6", + "@types/react": "^18.0.8", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./esm/index.d.ts", + "default": "./esm/embla-carousel-react.esm.js" + }, + "require": { + "types": "./cjs/index.d.ts", + "default": "./cjs/embla-carousel-react.cjs.js" + } + } + } +} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils new file mode 120000 index 0000000000..1ec418d92e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils @@ -0,0 +1 @@ +../../embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react new file mode 120000 index 0000000000..b1f1fdd058 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react @@ -0,0 +1 @@ +../../react@19.2.0/node_modules/react \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel new file mode 120000 index 0000000000..ba29366a8c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel @@ -0,0 +1 @@ +../../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md new file mode 100644 index 0000000000..45e32dbfe5 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md @@ -0,0 +1,233 @@ +
+
+

+ Embla Carousel + +

+ +

+ + + + + + +

+ + +

Embla Carousel Reactive Utils

+
+ +

+ Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. +

+ +
+ +

+ +  Examples  + +

+ +

+ +  Generator  + +

+ +

+ +  Installation  + +

+
+ +
+ +
+ +

Ready for

+
+ +

+ + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ + + +
+ +
+ +

Special Thanks

+
+

+ + gunnarx2 - React wrapper useEmblaCarousel. + +
+ + LiamMartens - Solid wrapper createEmblaCarousel. + +
+ + donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. + +
+ + xiel - Plugin Embla Carousel Wheel Gestures. + +
+ + zaaakher - Contributing guidelines. + +
+ + sarussss - Answering questions. + +

+
+ +
+ +

Open Source

+ +

+ Embla is MIT licensed 💖.

+ Embla Carousel - Copyright © 2019-present.
+ Package created by David Jerleke. +

+ +

+ · · · +

+ +

+ Thanks BrowserStack. +

+ +

+ + + +

diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts new file mode 100644 index 0000000000..0b6c3b6af9 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts @@ -0,0 +1,7 @@ +import { EmblaPluginType } from 'embla-carousel'; +export declare function isObject(subject: unknown): subject is Record; +export declare function isRecord(subject: unknown): subject is Record; +export declare function canUseDOM(): boolean; +export declare function areOptionsEqual(optionsA: Record, optionsB: Record): boolean; +export declare function sortAndMapPluginToOptions(plugins: EmblaPluginType[]): EmblaPluginType['options'][]; +export declare function arePluginsEqual(pluginsA: EmblaPluginType[], pluginsB: EmblaPluginType[]): boolean; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js new file mode 100644 index 0000000000..98a6ab3788 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js @@ -0,0 +1,44 @@ +'use strict'; + +function isObject(subject) { + return Object.prototype.toString.call(subject) === '[object Object]'; +} +function isRecord(subject) { + return isObject(subject) || Array.isArray(subject); +} +function canUseDOM() { + return !!(typeof window !== 'undefined' && window.document && window.document.createElement); +} +function areOptionsEqual(optionsA, optionsB) { + const optionsAKeys = Object.keys(optionsA); + const optionsBKeys = Object.keys(optionsB); + if (optionsAKeys.length !== optionsBKeys.length) return false; + const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {})); + const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {})); + if (breakpointsA !== breakpointsB) return false; + return optionsAKeys.every(key => { + const valueA = optionsA[key]; + const valueB = optionsB[key]; + if (typeof valueA === 'function') return `${valueA}` === `${valueB}`; + if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB; + return areOptionsEqual(valueA, valueB); + }); +} +function sortAndMapPluginToOptions(plugins) { + return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options); +} +function arePluginsEqual(pluginsA, pluginsB) { + if (pluginsA.length !== pluginsB.length) return false; + const optionsA = sortAndMapPluginToOptions(pluginsA); + const optionsB = sortAndMapPluginToOptions(pluginsB); + return optionsA.every((optionA, index) => { + const optionB = optionsB[index]; + return areOptionsEqual(optionA, optionB); + }); +} + +exports.areOptionsEqual = areOptionsEqual; +exports.arePluginsEqual = arePluginsEqual; +exports.canUseDOM = canUseDOM; +exports.sortAndMapPluginToOptions = sortAndMapPluginToOptions; +//# sourceMappingURL=embla-carousel-reactive-utils.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map new file mode 100644 index 0000000000..4441c57fc3 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel-reactive-utils.cjs.js","sources":["../src/components/utils.ts"],"sourcesContent":["import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record,\n optionsB: Record\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n"],"names":["isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB"],"mappings":";;AAEM,SAAUA,QAAQA,CAACC,OAAgB,EAAA;EACvC,OAAOC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,OAAO,CAAC,KAAK,iBAAiB;AACtE;AAEM,SAAUK,QAAQA,CACtBL,OAAgB,EAAA;EAEhB,OAAOD,QAAQ,CAACC,OAAO,CAAC,IAAIM,KAAK,CAACC,OAAO,CAACP,OAAO,CAAC;AACpD;SAEgBQ,SAASA,GAAA;AACvB,EAAA,OAAO,CAAC,EACN,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,CAACC,QAAQ,IACfD,MAAM,CAACC,QAAQ,CAACC,aAAa,CAC9B;AACH;AAEgB,SAAAC,eAAeA,CAC7BC,QAAiC,EACjCC,QAAiC,EAAA;AAEjC,EAAA,MAAMC,YAAY,GAAGd,MAAM,CAACe,IAAI,CAACH,QAAQ,CAAC;AAC1C,EAAA,MAAMI,YAAY,GAAGhB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAAC;EAE1C,IAAIC,YAAY,CAACG,MAAM,KAAKD,YAAY,CAACC,MAAM,EAAE,OAAO,KAAK;AAE7D,EAAA,MAAMC,YAAY,GAAGC,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACH,QAAQ,CAACS,WAAW,IAAI,EAAE,CAAC,CAAC;AAC5E,EAAA,MAAMC,YAAY,GAAGH,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAACQ,WAAW,IAAI,EAAE,CAAC,CAAC;AAE5E,EAAA,IAAIH,YAAY,KAAKI,YAAY,EAAE,OAAO,KAAK;AAE/C,EAAA,OAAOR,YAAY,CAACS,KAAK,CAAEC,GAAG,IAAI;AAChC,IAAA,MAAMC,MAAM,GAAGb,QAAQ,CAACY,GAAG,CAAC;AAC5B,IAAA,MAAME,MAAM,GAAGb,QAAQ,CAACW,GAAG,CAAC;AAC5B,IAAA,IAAI,OAAOC,MAAM,KAAK,UAAU,EAAE,OAAO,CAAGA,EAAAA,MAAM,CAAE,CAAA,KAAK,CAAGC,EAAAA,MAAM,CAAE,CAAA;AACpE,IAAA,IAAI,CAACtB,QAAQ,CAACqB,MAAM,CAAC,IAAI,CAACrB,QAAQ,CAACsB,MAAM,CAAC,EAAE,OAAOD,MAAM,KAAKC,MAAM;AACpE,IAAA,OAAOf,eAAe,CAACc,MAAM,EAAEC,MAAM,CAAC;AACxC,GAAC,CAAC;AACJ;AAEM,SAAUC,yBAAyBA,CACvCC,OAA0B,EAAA;AAE1B,EAAA,OAAOA,OAAO,CACXC,MAAM,EAAE,CACRC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACE,IAAI,GAAGD,CAAC,CAACC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAC1CC,GAAG,CAAEC,MAAM,IAAKA,MAAM,CAACC,OAAO,CAAC;AACpC;AAEgB,SAAAC,eAAeA,CAC7BC,QAA2B,EAC3BC,QAA2B,EAAA;EAE3B,IAAID,QAAQ,CAACrB,MAAM,KAAKsB,QAAQ,CAACtB,MAAM,EAAE,OAAO,KAAK;AAErD,EAAA,MAAML,QAAQ,GAAGe,yBAAyB,CAACW,QAAQ,CAAC;AACpD,EAAA,MAAMzB,QAAQ,GAAGc,yBAAyB,CAACY,QAAQ,CAAC;EAEpD,OAAO3B,QAAQ,CAACW,KAAK,CAAC,CAACiB,OAAO,EAAEC,KAAK,KAAI;AACvC,IAAA,MAAMC,OAAO,GAAG7B,QAAQ,CAAC4B,KAAK,CAAC;AAC/B,IAAA,OAAO9B,eAAe,CAAC6B,OAAO,EAAEE,OAAO,CAAC;AAC1C,GAAC,CAAC;AACJ;;;;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts new file mode 100644 index 0000000000..c83a671e3b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts @@ -0,0 +1 @@ +export { canUseDOM, areOptionsEqual, sortAndMapPluginToOptions, arePluginsEqual } from './components/utils'; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json new file mode 100644 index 0000000000..944df3ae8f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json @@ -0,0 +1,55 @@ +{ + "name": "embla-carousel-reactive-utils", + "version": "8.6.0", + "author": "David Jerleke", + "description": "Reactive utilities for Embla Carousel", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-reactive-utils*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "embla-carousel": "8.6.0" + }, + "main": "embla-carousel-reactive-utils.cjs.js", + "type": "commonjs" +} diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts new file mode 100644 index 0000000000..0b6c3b6af9 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts @@ -0,0 +1,7 @@ +import { EmblaPluginType } from 'embla-carousel'; +export declare function isObject(subject: unknown): subject is Record; +export declare function isRecord(subject: unknown): subject is Record; +export declare function canUseDOM(): boolean; +export declare function areOptionsEqual(optionsA: Record, optionsB: Record): boolean; +export declare function sortAndMapPluginToOptions(plugins: EmblaPluginType[]): EmblaPluginType['options'][]; +export declare function arePluginsEqual(pluginsA: EmblaPluginType[], pluginsB: EmblaPluginType[]): boolean; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js new file mode 100644 index 0000000000..2c9dea247e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).EmblaCarouselReactiveUtils={})}(this,(function(e){"use strict";function n(e){return function(e){return"[object Object]"===Object.prototype.toString.call(e)}(e)||Array.isArray(e)}function t(e,o){const i=Object.keys(e),r=Object.keys(o);if(i.length!==r.length)return!1;return JSON.stringify(Object.keys(e.breakpoints||{}))===JSON.stringify(Object.keys(o.breakpoints||{}))&&i.every((i=>{const r=e[i],u=o[i];return"function"==typeof r?`${r}`==`${u}`:n(r)&&n(u)?t(r,u):r===u}))}function o(e){return e.concat().sort(((e,n)=>e.name>n.name?1:-1)).map((e=>e.options))}e.areOptionsEqual=t,e.arePluginsEqual=function(e,n){if(e.length!==n.length)return!1;const i=o(e),r=o(n);return i.every(((e,n)=>t(e,r[n])))},e.canUseDOM=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)},e.sortAndMapPluginToOptions=o})); diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts new file mode 100644 index 0000000000..0b6c3b6af9 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts @@ -0,0 +1,7 @@ +import { EmblaPluginType } from 'embla-carousel'; +export declare function isObject(subject: unknown): subject is Record; +export declare function isRecord(subject: unknown): subject is Record; +export declare function canUseDOM(): boolean; +export declare function areOptionsEqual(optionsA: Record, optionsB: Record): boolean; +export declare function sortAndMapPluginToOptions(plugins: EmblaPluginType[]): EmblaPluginType['options'][]; +export declare function arePluginsEqual(pluginsA: EmblaPluginType[], pluginsB: EmblaPluginType[]): boolean; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js new file mode 100644 index 0000000000..3ebfc4e715 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js @@ -0,0 +1,39 @@ +function isObject(subject) { + return Object.prototype.toString.call(subject) === '[object Object]'; +} +function isRecord(subject) { + return isObject(subject) || Array.isArray(subject); +} +function canUseDOM() { + return !!(typeof window !== 'undefined' && window.document && window.document.createElement); +} +function areOptionsEqual(optionsA, optionsB) { + const optionsAKeys = Object.keys(optionsA); + const optionsBKeys = Object.keys(optionsB); + if (optionsAKeys.length !== optionsBKeys.length) return false; + const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {})); + const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {})); + if (breakpointsA !== breakpointsB) return false; + return optionsAKeys.every(key => { + const valueA = optionsA[key]; + const valueB = optionsB[key]; + if (typeof valueA === 'function') return `${valueA}` === `${valueB}`; + if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB; + return areOptionsEqual(valueA, valueB); + }); +} +function sortAndMapPluginToOptions(plugins) { + return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options); +} +function arePluginsEqual(pluginsA, pluginsB) { + if (pluginsA.length !== pluginsB.length) return false; + const optionsA = sortAndMapPluginToOptions(pluginsA); + const optionsB = sortAndMapPluginToOptions(pluginsB); + return optionsA.every((optionA, index) => { + const optionB = optionsB[index]; + return areOptionsEqual(optionA, optionB); + }); +} + +export { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions }; +//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map new file mode 100644 index 0000000000..a731792af4 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel-reactive-utils.esm.js","sources":["../src/components/utils.ts"],"sourcesContent":["import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record,\n optionsB: Record\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n"],"names":["isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB"],"mappings":"AAEM,SAAUA,QAAQA,CAACC,OAAgB,EAAA;EACvC,OAAOC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,OAAO,CAAC,KAAK,iBAAiB;AACtE;AAEM,SAAUK,QAAQA,CACtBL,OAAgB,EAAA;EAEhB,OAAOD,QAAQ,CAACC,OAAO,CAAC,IAAIM,KAAK,CAACC,OAAO,CAACP,OAAO,CAAC;AACpD;SAEgBQ,SAASA,GAAA;AACvB,EAAA,OAAO,CAAC,EACN,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,CAACC,QAAQ,IACfD,MAAM,CAACC,QAAQ,CAACC,aAAa,CAC9B;AACH;AAEgB,SAAAC,eAAeA,CAC7BC,QAAiC,EACjCC,QAAiC,EAAA;AAEjC,EAAA,MAAMC,YAAY,GAAGd,MAAM,CAACe,IAAI,CAACH,QAAQ,CAAC;AAC1C,EAAA,MAAMI,YAAY,GAAGhB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAAC;EAE1C,IAAIC,YAAY,CAACG,MAAM,KAAKD,YAAY,CAACC,MAAM,EAAE,OAAO,KAAK;AAE7D,EAAA,MAAMC,YAAY,GAAGC,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACH,QAAQ,CAACS,WAAW,IAAI,EAAE,CAAC,CAAC;AAC5E,EAAA,MAAMC,YAAY,GAAGH,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAACQ,WAAW,IAAI,EAAE,CAAC,CAAC;AAE5E,EAAA,IAAIH,YAAY,KAAKI,YAAY,EAAE,OAAO,KAAK;AAE/C,EAAA,OAAOR,YAAY,CAACS,KAAK,CAAEC,GAAG,IAAI;AAChC,IAAA,MAAMC,MAAM,GAAGb,QAAQ,CAACY,GAAG,CAAC;AAC5B,IAAA,MAAME,MAAM,GAAGb,QAAQ,CAACW,GAAG,CAAC;AAC5B,IAAA,IAAI,OAAOC,MAAM,KAAK,UAAU,EAAE,OAAO,CAAGA,EAAAA,MAAM,CAAE,CAAA,KAAK,CAAGC,EAAAA,MAAM,CAAE,CAAA;AACpE,IAAA,IAAI,CAACtB,QAAQ,CAACqB,MAAM,CAAC,IAAI,CAACrB,QAAQ,CAACsB,MAAM,CAAC,EAAE,OAAOD,MAAM,KAAKC,MAAM;AACpE,IAAA,OAAOf,eAAe,CAACc,MAAM,EAAEC,MAAM,CAAC;AACxC,GAAC,CAAC;AACJ;AAEM,SAAUC,yBAAyBA,CACvCC,OAA0B,EAAA;AAE1B,EAAA,OAAOA,OAAO,CACXC,MAAM,EAAE,CACRC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACE,IAAI,GAAGD,CAAC,CAACC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAC1CC,GAAG,CAAEC,MAAM,IAAKA,MAAM,CAACC,OAAO,CAAC;AACpC;AAEgB,SAAAC,eAAeA,CAC7BC,QAA2B,EAC3BC,QAA2B,EAAA;EAE3B,IAAID,QAAQ,CAACrB,MAAM,KAAKsB,QAAQ,CAACtB,MAAM,EAAE,OAAO,KAAK;AAErD,EAAA,MAAML,QAAQ,GAAGe,yBAAyB,CAACW,QAAQ,CAAC;AACpD,EAAA,MAAMzB,QAAQ,GAAGc,yBAAyB,CAACY,QAAQ,CAAC;EAEpD,OAAO3B,QAAQ,CAACW,KAAK,CAAC,CAACiB,OAAO,EAAEC,KAAK,KAAI;AACvC,IAAA,MAAMC,OAAO,GAAG7B,QAAQ,CAAC4B,KAAK,CAAC;AAC/B,IAAA,OAAO9B,eAAe,CAAC6B,OAAO,EAAEE,OAAO,CAAC;AAC1C,GAAC,CAAC;AACJ;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts new file mode 100644 index 0000000000..85b20d2283 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts @@ -0,0 +1 @@ +export { canUseDOM, areOptionsEqual, sortAndMapPluginToOptions, arePluginsEqual } from './components/utils.js'; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json new file mode 100644 index 0000000000..3510133d58 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json @@ -0,0 +1,55 @@ +{ + "name": "embla-carousel-reactive-utils", + "version": "8.6.0", + "author": "David Jerleke", + "description": "Reactive utilities for Embla Carousel", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-reactive-utils*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "embla-carousel": "8.6.0" + }, + "module": "embla-carousel-reactive-utils.esm.js", + "type": "module" +} diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts new file mode 100644 index 0000000000..c83a671e3b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts @@ -0,0 +1 @@ +export { canUseDOM, areOptionsEqual, sortAndMapPluginToOptions, arePluginsEqual } from './components/utils'; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json new file mode 100644 index 0000000000..7b8f542fe2 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json @@ -0,0 +1,77 @@ +{ + "name": "embla-carousel-reactive-utils", + "version": "8.6.0", + "author": "David Jerleke", + "description": "Reactive utilities for Embla Carousel", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "main": "embla-carousel-reactive-utils.umd.js", + "unpkg": "embla-carousel-reactive-utils.umd.js", + "module": "./esm/embla-carousel-reactive-utils.esm.js", + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel-reactive-utils*", + "components/**/*", + "index.d.ts", + "esm/**/*", + "cjs/**/*" + ], + "scripts": { + "test": "jest --config jest.config.js", + "build": "rollup --bundleConfigAsCjs -c", + "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", + "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" + }, + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "embla-carousel": "8.6.0" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./esm/index.d.ts", + "default": "./esm/embla-carousel-reactive-utils.esm.js" + }, + "require": { + "types": "./cjs/index.d.ts", + "default": "./cjs/embla-carousel-reactive-utils.cjs.js" + } + } + } +} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md new file mode 100644 index 0000000000..62de8785df --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md @@ -0,0 +1,233 @@ +
+
+

+ Embla Carousel + +

+ +

+ + + + + + +

+ + +

Embla Carousel

+
+ +

+ Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. +

+ +
+ +

+ +  Examples  + +

+ +

+ +  Generator  + +

+ +

+ +  Installation  + +

+
+ +
+ +
+ +

Ready for

+
+ +

+ + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ + + +
+ +
+ +

Special Thanks

+
+

+ + gunnarx2 - React wrapper useEmblaCarousel. + +
+ + LiamMartens - Solid wrapper createEmblaCarousel. + +
+ + donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. + +
+ + xiel - Plugin Embla Carousel Wheel Gestures. + +
+ + zaaakher - Contributing guidelines. + +
+ + sarussss - Answering questions. + +

+
+ +
+ +

Open Source

+ +

+ Embla is MIT licensed 💖.

+ Embla Carousel - Copyright © 2019-present.
+ Package created by David Jerleke. +

+ +

+ · · · +

+ +

+ Thanks BrowserStack. +

+ +

+ + + +

diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts new file mode 100644 index 0000000000..72f1015b7b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts @@ -0,0 +1,5 @@ +export type AlignmentOptionType = 'start' | 'center' | 'end' | ((viewSize: number, snapSize: number, index: number) => number); +export type AlignmentType = { + measure: (n: number, index: number) => number; +}; +export declare function Alignment(align: AlignmentOptionType, viewSize: number): AlignmentType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts new file mode 100644 index 0000000000..693defa7e7 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts @@ -0,0 +1,13 @@ +import { EngineType } from './Engine'; +import { WindowType } from './utils'; +export type AnimationsUpdateType = (engine: EngineType) => void; +export type AnimationsRenderType = (engine: EngineType, alpha: number) => void; +export type AnimationsType = { + init: () => void; + destroy: () => void; + start: () => void; + stop: () => void; + update: () => void; + render: (alpha: number) => void; +}; +export declare function Animations(ownerDocument: Document, ownerWindow: WindowType, update: () => void, render: (alpha: number) => void): AnimationsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts new file mode 100644 index 0000000000..a0735f7e04 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts @@ -0,0 +1,14 @@ +import { NodeRectType } from './NodeRects'; +export type AxisOptionType = 'x' | 'y'; +export type AxisDirectionOptionType = 'ltr' | 'rtl'; +type AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'; +export type AxisType = { + scroll: AxisOptionType; + cross: AxisOptionType; + startEdge: AxisEdgeType; + endEdge: AxisEdgeType; + measureSize: (nodeRect: NodeRectType) => number; + direction: (n: number) => number; +}; +export declare function Axis(axis: AxisOptionType, contentDirection: AxisDirectionOptionType): AxisType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts new file mode 100644 index 0000000000..964a47d838 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts @@ -0,0 +1,7 @@ +export type CounterType = { + get: () => number; + set: (n: number) => CounterType; + add: (n: number) => CounterType; + clone: () => CounterType; +}; +export declare function Counter(max: number, start: number, loop: boolean): CounterType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts new file mode 100644 index 0000000000..0685db222c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts @@ -0,0 +1,21 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { AnimationsType } from './Animations'; +import { CounterType } from './Counter'; +import { DragTrackerType, PointerEventType } from './DragTracker'; +import { EventHandlerType } from './EventHandler'; +import { AxisType } from './Axis'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollTargetType } from './ScrollTarget'; +import { ScrollToType } from './ScrollTo'; +import { Vector1DType } from './Vector1d'; +import { PercentOfViewType } from './PercentOfView'; +import { WindowType } from './utils'; +type DragHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: PointerEventType) => boolean | void; +export type DragHandlerOptionType = boolean | DragHandlerCallbackType; +export type DragHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; + pointerDown: () => boolean; +}; +export declare function DragHandler(axis: AxisType, rootNode: HTMLElement, ownerDocument: Document, ownerWindow: WindowType, target: Vector1DType, dragTracker: DragTrackerType, location: Vector1DType, animation: AnimationsType, scrollTo: ScrollToType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, index: CounterType, eventHandler: EventHandlerType, percentOfView: PercentOfViewType, dragFree: boolean, dragThreshold: number, skipSnaps: boolean, baseFriction: number, watchDrag: DragHandlerOptionType): DragHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts new file mode 100644 index 0000000000..0f4b4cb4a0 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts @@ -0,0 +1,10 @@ +import { AxisOptionType, AxisType } from './Axis'; +import { WindowType } from './utils'; +export type PointerEventType = TouchEvent | MouseEvent; +export type DragTrackerType = { + pointerDown: (evt: PointerEventType) => number; + pointerMove: (evt: PointerEventType) => number; + pointerUp: (evt: PointerEventType) => number; + readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number; +}; +export declare function DragTracker(axis: AxisType, ownerWindow: WindowType): DragTrackerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts new file mode 100644 index 0000000000..5ad21c978a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts @@ -0,0 +1,32 @@ +import { EngineType } from './Engine'; +import { EventHandlerType } from './EventHandler'; +import { EmblaOptionsType } from './Options'; +import { EmblaPluginsType, EmblaPluginType } from './Plugins'; +export type EmblaCarouselType = { + canScrollNext: () => boolean; + canScrollPrev: () => boolean; + containerNode: () => HTMLElement; + internalEngine: () => EngineType; + destroy: () => void; + off: EventHandlerType['off']; + on: EventHandlerType['on']; + emit: EventHandlerType['emit']; + plugins: () => EmblaPluginsType; + previousScrollSnap: () => number; + reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void; + rootNode: () => HTMLElement; + scrollNext: (jump?: boolean) => void; + scrollPrev: (jump?: boolean) => void; + scrollProgress: () => number; + scrollSnapList: () => number[]; + scrollTo: (index: number, jump?: boolean) => void; + selectedScrollSnap: () => number; + slideNodes: () => HTMLElement[]; + slidesInView: () => number[]; + slidesNotInView: () => number[]; +}; +declare function EmblaCarousel(root: HTMLElement, userOptions?: EmblaOptionsType, userPlugins?: EmblaPluginType[]): EmblaCarouselType; +declare namespace EmblaCarousel { + let globalOptions: EmblaOptionsType | undefined; +} +export default EmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts new file mode 100644 index 0000000000..18071b0136 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts @@ -0,0 +1,64 @@ +import { AnimationsType } from './Animations'; +import { AxisType } from './Axis'; +import { CounterType } from './Counter'; +import { DragHandlerType } from './DragHandler'; +import { EventHandlerType } from './EventHandler'; +import { EventStoreType } from './EventStore'; +import { LimitType } from './Limit'; +import { NodeRectType } from './NodeRects'; +import { OptionsType } from './Options'; +import { PercentOfViewType } from './PercentOfView'; +import { ResizeHandlerType } from './ResizeHandler'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollBoundsType } from './ScrollBounds'; +import { ScrollLooperType } from './ScrollLooper'; +import { ScrollProgressType } from './ScrollProgress'; +import { SlideRegistryType } from './SlideRegistry'; +import { ScrollTargetType } from './ScrollTarget'; +import { ScrollToType } from './ScrollTo'; +import { SlideFocusType } from './SlideFocus'; +import { SlideLooperType } from './SlideLooper'; +import { SlidesHandlerType } from './SlidesHandler'; +import { SlidesInViewType } from './SlidesInView'; +import { SlidesToScrollType } from './SlidesToScroll'; +import { TranslateType } from './Translate'; +import { WindowType } from './utils'; +import { Vector1DType } from './Vector1d'; +export type EngineType = { + ownerDocument: Document; + ownerWindow: WindowType; + eventHandler: EventHandlerType; + axis: AxisType; + animation: AnimationsType; + scrollBounds: ScrollBoundsType; + scrollLooper: ScrollLooperType; + scrollProgress: ScrollProgressType; + index: CounterType; + indexPrevious: CounterType; + limit: LimitType; + location: Vector1DType; + offsetLocation: Vector1DType; + previousLocation: Vector1DType; + options: OptionsType; + percentOfView: PercentOfViewType; + scrollBody: ScrollBodyType; + dragHandler: DragHandlerType; + eventStore: EventStoreType; + slideLooper: SlideLooperType; + slidesInView: SlidesInViewType; + slidesToScroll: SlidesToScrollType; + target: Vector1DType; + translate: TranslateType; + resizeHandler: ResizeHandlerType; + slidesHandler: SlidesHandlerType; + scrollTo: ScrollToType; + scrollTarget: ScrollTargetType; + scrollSnapList: number[]; + scrollSnaps: number[]; + slideIndexes: number[]; + slideFocus: SlideFocusType; + slideRegistry: SlideRegistryType['slideRegistry']; + containerRect: NodeRectType; + slideRects: NodeRectType[]; +}; +export declare function Engine(root: HTMLElement, container: HTMLElement, slides: HTMLElement[], ownerDocument: Document, ownerWindow: WindowType, options: OptionsType, eventHandler: EventHandlerType): EngineType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts new file mode 100644 index 0000000000..4c8159f16e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts @@ -0,0 +1,27 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +type CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void; +export type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]; +export interface EmblaEventListType { + init: 'init'; + pointerDown: 'pointerDown'; + pointerUp: 'pointerUp'; + slidesChanged: 'slidesChanged'; + slidesInView: 'slidesInView'; + scroll: 'scroll'; + select: 'select'; + settle: 'settle'; + destroy: 'destroy'; + reInit: 'reInit'; + resize: 'resize'; + slideFocusStart: 'slideFocusStart'; + slideFocus: 'slideFocus'; +} +export type EventHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + emit: (evt: EmblaEventType) => EventHandlerType; + on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; + off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; + clear: () => void; +}; +export declare function EventHandler(): EventHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts new file mode 100644 index 0000000000..8b0f89ed6a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts @@ -0,0 +1,9 @@ +type EventNameType = keyof DocumentEventMap | keyof WindowEventMap; +type EventHandlerType = (evt: any) => void; +type EventOptionsType = boolean | AddEventListenerOptions | undefined; +export type EventStoreType = { + add: (node: EventTarget, type: EventNameType, handler: EventHandlerType, options?: EventOptionsType) => EventStoreType; + clear: () => void; +}; +export declare function EventStore(): EventStoreType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts new file mode 100644 index 0000000000..b6499b04a8 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts @@ -0,0 +1,11 @@ +export type LimitType = { + min: number; + max: number; + length: number; + constrain: (n: number) => number; + reachedAny: (n: number) => boolean; + reachedMax: (n: number) => boolean; + reachedMin: (n: number) => boolean; + removeOffset: (n: number) => number; +}; +export declare function Limit(min?: number, max?: number): LimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts new file mode 100644 index 0000000000..c76623b8e7 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts @@ -0,0 +1,12 @@ +export type NodeRectType = { + top: number; + right: number; + bottom: number; + left: number; + width: number; + height: number; +}; +export type NodeRectsType = { + measure: (node: HTMLElement) => NodeRectType; +}; +export declare function NodeRects(): NodeRectsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts new file mode 100644 index 0000000000..168867d04a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts @@ -0,0 +1,40 @@ +import { AlignmentOptionType } from './Alignment'; +import { AxisDirectionOptionType, AxisOptionType } from './Axis'; +import { SlidesToScrollOptionType } from './SlidesToScroll'; +import { ScrollContainOptionType } from './ScrollContain'; +import { DragHandlerOptionType } from './DragHandler'; +import { ResizeHandlerOptionType } from './ResizeHandler'; +import { SlidesHandlerOptionType } from './SlidesHandler'; +import { SlidesInViewOptionsType } from './SlidesInView'; +import { FocusHandlerOptionType } from './SlideFocus'; +export type LooseOptionsType = { + [key: string]: unknown; +}; +export type CreateOptionsType = Type & { + active: boolean; + breakpoints: { + [key: string]: Omit>, 'breakpoints'>; + }; +}; +export type OptionsType = CreateOptionsType<{ + align: AlignmentOptionType; + axis: AxisOptionType; + container: string | HTMLElement | null; + slides: string | HTMLElement[] | NodeListOf | null; + containScroll: ScrollContainOptionType; + direction: AxisDirectionOptionType; + slidesToScroll: SlidesToScrollOptionType; + dragFree: boolean; + dragThreshold: number; + inViewThreshold: SlidesInViewOptionsType; + loop: boolean; + skipSnaps: boolean; + duration: number; + startIndex: number; + watchDrag: DragHandlerOptionType; + watchResize: ResizeHandlerOptionType; + watchSlides: SlidesHandlerOptionType; + watchFocus: FocusHandlerOptionType; +}>; +export declare const defaultOptions: OptionsType; +export type EmblaOptionsType = Partial; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts new file mode 100644 index 0000000000..54ed8aa7ac --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts @@ -0,0 +1,10 @@ +import { LooseOptionsType, CreateOptionsType } from './Options'; +import { WindowType } from './utils'; +type OptionsType = Partial>; +export type OptionsHandlerType = { + mergeOptions: (optionsA: TypeA, optionsB?: TypeB) => TypeA; + optionsAtMedia: (options: Type) => Type; + optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]; +}; +export declare function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts new file mode 100644 index 0000000000..b51b35a13b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts @@ -0,0 +1,4 @@ +export type PercentOfViewType = { + measure: (n: number) => number; +}; +export declare function PercentOfView(viewSize: number): PercentOfViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts new file mode 100644 index 0000000000..9518557993 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts @@ -0,0 +1,16 @@ +import { CreateOptionsType, LooseOptionsType } from './Options'; +import { EmblaCarouselType } from './EmblaCarousel'; +import { OptionsHandlerType } from './OptionsHandler'; +export type LoosePluginType = { + [key: string]: unknown; +}; +export type CreatePluginType = TypeA & { + name: string; + options: Partial>; + init: (embla: EmblaCarouselType, OptionsHandler: OptionsHandlerType) => void; + destroy: () => void; +}; +export interface EmblaPluginsType { + [key: string]: CreatePluginType; +} +export type EmblaPluginType = EmblaPluginsType[keyof EmblaPluginsType]; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts new file mode 100644 index 0000000000..da2688d0b4 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts @@ -0,0 +1,8 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { OptionsHandlerType } from './OptionsHandler'; +import { EmblaPluginsType, EmblaPluginType } from './Plugins'; +export type PluginsHandlerType = { + init: (emblaApi: EmblaCarouselType, plugins: EmblaPluginType[]) => EmblaPluginsType; + destroy: () => void; +}; +export declare function PluginsHandler(optionsHandler: OptionsHandlerType): PluginsHandlerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts new file mode 100644 index 0000000000..111a58d053 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts @@ -0,0 +1,13 @@ +import { AxisType } from './Axis'; +import { EmblaCarouselType } from './EmblaCarousel'; +import { EventHandlerType } from './EventHandler'; +import { NodeRectsType } from './NodeRects'; +import { WindowType } from './utils'; +type ResizeHandlerCallbackType = (emblaApi: EmblaCarouselType, entries: ResizeObserverEntry[]) => boolean | void; +export type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType; +export type ResizeHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; +}; +export declare function ResizeHandler(container: HTMLElement, eventHandler: EventHandlerType, ownerWindow: WindowType, slides: HTMLElement[], axis: AxisType, watchResize: ResizeHandlerOptionType, nodeRects: NodeRectsType): ResizeHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts new file mode 100644 index 0000000000..d7dc7d5e57 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts @@ -0,0 +1,13 @@ +import { Vector1DType } from './Vector1d'; +export type ScrollBodyType = { + direction: () => number; + duration: () => number; + velocity: () => number; + seek: () => ScrollBodyType; + settled: () => boolean; + useBaseFriction: () => ScrollBodyType; + useBaseDuration: () => ScrollBodyType; + useFriction: (n: number) => ScrollBodyType; + useDuration: (n: number) => ScrollBodyType; +}; +export declare function ScrollBody(location: Vector1DType, offsetLocation: Vector1DType, previousLocation: Vector1DType, target: Vector1DType, baseDuration: number, baseFriction: number): ScrollBodyType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts new file mode 100644 index 0000000000..d040f09a2d --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts @@ -0,0 +1,10 @@ +import { LimitType } from './Limit'; +import { ScrollBodyType } from './ScrollBody'; +import { Vector1DType } from './Vector1d'; +import { PercentOfViewType } from './PercentOfView'; +export type ScrollBoundsType = { + shouldConstrain: () => boolean; + constrain: (pointerDown: boolean) => void; + toggleActive: (active: boolean) => void; +}; +export declare function ScrollBounds(limit: LimitType, location: Vector1DType, target: Vector1DType, scrollBody: ScrollBodyType, percentOfView: PercentOfViewType): ScrollBoundsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts new file mode 100644 index 0000000000..66f5907b81 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts @@ -0,0 +1,7 @@ +import { LimitType } from './Limit'; +export type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'; +export type ScrollContainType = { + snapsContained: number[]; + scrollContainLimit: LimitType; +}; +export declare function ScrollContain(viewSize: number, contentSize: number, snapsAligned: number[], containScroll: ScrollContainOptionType, pixelTolerance: number): ScrollContainType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts new file mode 100644 index 0000000000..3d417cca34 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts @@ -0,0 +1,5 @@ +import { LimitType } from './Limit'; +export type ScrollLimitType = { + limit: LimitType; +}; +export declare function ScrollLimit(contentSize: number, scrollSnaps: number[], loop: boolean): ScrollLimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts new file mode 100644 index 0000000000..97b1b1ba38 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts @@ -0,0 +1,6 @@ +import { LimitType } from './Limit'; +import { Vector1DType } from './Vector1d'; +export type ScrollLooperType = { + loop: (direction: number) => void; +}; +export declare function ScrollLooper(contentSize: number, limit: LimitType, location: Vector1DType, vectors: Vector1DType[]): ScrollLooperType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts new file mode 100644 index 0000000000..224e4d385e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts @@ -0,0 +1,5 @@ +import { LimitType } from './Limit'; +export type ScrollProgressType = { + get: (n: number) => number; +}; +export declare function ScrollProgress(limit: LimitType): ScrollProgressType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts new file mode 100644 index 0000000000..55e7bac4f0 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts @@ -0,0 +1,9 @@ +import { AlignmentType } from './Alignment'; +import { AxisType } from './Axis'; +import { NodeRectType } from './NodeRects'; +import { SlidesToScrollType } from './SlidesToScroll'; +export type ScrollSnapsType = { + snaps: number[]; + snapsAligned: number[]; +}; +export declare function ScrollSnaps(axis: AxisType, alignment: AlignmentType, containerRect: NodeRectType, slideRects: NodeRectType[], slidesToScroll: SlidesToScrollType): ScrollSnapsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts new file mode 100644 index 0000000000..3d26624f0e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts @@ -0,0 +1,12 @@ +import { LimitType } from './Limit'; +import { Vector1DType } from './Vector1d'; +export type TargetType = { + distance: number; + index: number; +}; +export type ScrollTargetType = { + byIndex: (target: number, direction: number) => TargetType; + byDistance: (force: number, snap: boolean) => TargetType; + shortcut: (target: number, direction: number) => number; +}; +export declare function ScrollTarget(loop: boolean, scrollSnaps: number[], contentSize: number, limit: LimitType, targetVector: Vector1DType): ScrollTargetType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts new file mode 100644 index 0000000000..1291ed8628 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts @@ -0,0 +1,11 @@ +import { AnimationsType } from './Animations'; +import { CounterType } from './Counter'; +import { EventHandlerType } from './EventHandler'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollTargetType } from './ScrollTarget'; +import { Vector1DType } from './Vector1d'; +export type ScrollToType = { + distance: (n: number, snap: boolean) => void; + index: (n: number, direction: number) => void; +}; +export declare function ScrollTo(animation: AnimationsType, indexCurrent: CounterType, indexPrevious: CounterType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, targetVector: Vector1DType, eventHandler: EventHandlerType): ScrollToType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts new file mode 100644 index 0000000000..6f962aae8a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts @@ -0,0 +1,13 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { EventHandlerType } from './EventHandler'; +import { EventStoreType } from './EventStore'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollToType } from './ScrollTo'; +import { SlideRegistryType } from './SlideRegistry'; +type FocusHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: FocusEvent) => boolean | void; +export type FocusHandlerOptionType = boolean | FocusHandlerCallbackType; +export type SlideFocusType = { + init: (emblaApi: EmblaCarouselType) => void; +}; +export declare function SlideFocus(root: HTMLElement, slides: HTMLElement[], slideRegistry: SlideRegistryType['slideRegistry'], scrollTo: ScrollToType, scrollBody: ScrollBodyType, eventStore: EventStoreType, eventHandler: EventHandlerType, watchFocus: FocusHandlerOptionType): SlideFocusType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts new file mode 100644 index 0000000000..bb10e7df3c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts @@ -0,0 +1,18 @@ +import { AxisType } from './Axis'; +import { Vector1DType } from './Vector1d'; +import { TranslateType } from './Translate'; +type LoopPointType = { + loopPoint: number; + index: number; + translate: TranslateType; + slideLocation: Vector1DType; + target: () => number; +}; +export type SlideLooperType = { + canLoop: () => boolean; + clear: () => void; + loop: () => void; + loopPoints: LoopPointType[]; +}; +export declare function SlideLooper(axis: AxisType, viewSize: number, contentSize: number, slideSizes: number[], slideSizesWithGaps: number[], snaps: number[], scrollSnaps: number[], location: Vector1DType, slides: HTMLElement[]): SlideLooperType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts new file mode 100644 index 0000000000..d339b15eaa --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts @@ -0,0 +1,7 @@ +import { LimitType } from './Limit'; +import { ScrollContainOptionType } from './ScrollContain'; +import { SlidesToScrollType } from './SlidesToScroll'; +export type SlideRegistryType = { + slideRegistry: number[][]; +}; +export declare function SlideRegistry(containSnaps: boolean, containScroll: ScrollContainOptionType, scrollSnaps: number[], scrollContainLimit: LimitType, slidesToScroll: SlidesToScrollType, slideIndexes: number[]): SlideRegistryType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts new file mode 100644 index 0000000000..86961805cb --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts @@ -0,0 +1,10 @@ +import { AxisType } from './Axis'; +import { NodeRectType } from './NodeRects'; +import { WindowType } from './utils'; +export type SlideSizesType = { + slideSizes: number[]; + slideSizesWithGaps: number[]; + startGap: number; + endGap: number; +}; +export declare function SlideSizes(axis: AxisType, containerRect: NodeRectType, slideRects: NodeRectType[], slides: HTMLElement[], readEdgeGap: boolean, ownerWindow: WindowType): SlideSizesType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts new file mode 100644 index 0000000000..6115d5f30e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts @@ -0,0 +1,10 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { EventHandlerType } from './EventHandler'; +type SlidesHandlerCallbackType = (emblaApi: EmblaCarouselType, mutations: MutationRecord[]) => boolean | void; +export type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType; +export type SlidesHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; +}; +export declare function SlidesHandler(container: HTMLElement, eventHandler: EventHandlerType, watchSlides: SlidesHandlerOptionType): SlidesHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts new file mode 100644 index 0000000000..943d05cd2b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts @@ -0,0 +1,8 @@ +import { EventHandlerType } from './EventHandler'; +export type SlidesInViewOptionsType = IntersectionObserverInit['threshold']; +export type SlidesInViewType = { + init: () => void; + destroy: () => void; + get: (inView?: boolean) => number[]; +}; +export declare function SlidesInView(container: HTMLElement, slides: HTMLElement[], eventHandler: EventHandlerType, threshold: SlidesInViewOptionsType): SlidesInViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts new file mode 100644 index 0000000000..129460e4af --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts @@ -0,0 +1,7 @@ +import { AxisType } from './Axis'; +import { NodeRectType } from './NodeRects'; +export type SlidesToScrollOptionType = 'auto' | number; +export type SlidesToScrollType = { + groupSlides: (array: Type[]) => Type[][]; +}; +export declare function SlidesToScroll(axis: AxisType, viewSize: number, slidesToScroll: SlidesToScrollOptionType, loop: boolean, containerRect: NodeRectType, slideRects: NodeRectType[], startGap: number, endGap: number, pixelTolerance: number): SlidesToScrollType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts new file mode 100644 index 0000000000..2d9c96118f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts @@ -0,0 +1,7 @@ +import { AxisType } from './Axis'; +export type TranslateType = { + clear: () => void; + to: (target: number) => void; + toggleActive: (active: boolean) => void; +}; +export declare function Translate(axis: AxisType, container: HTMLElement): TranslateType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts new file mode 100644 index 0000000000..9ff303c96b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts @@ -0,0 +1,7 @@ +export type Vector1DType = { + get: () => number; + set: (n: Vector1DType | number) => void; + add: (n: Vector1DType | number) => void; + subtract: (n: Vector1DType | number) => void; +}; +export declare function Vector1D(initialValue: number): Vector1DType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts new file mode 100644 index 0000000000..367767d6e8 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts @@ -0,0 +1,19 @@ +import { PointerEventType } from './DragTracker'; +export type WindowType = Window & typeof globalThis; +export declare function isNumber(subject: unknown): subject is number; +export declare function isString(subject: unknown): subject is string; +export declare function isBoolean(subject: unknown): subject is boolean; +export declare function isObject(subject: unknown): subject is Record; +export declare function mathAbs(n: number): number; +export declare function mathSign(n: number): number; +export declare function deltaAbs(valueB: number, valueA: number): number; +export declare function factorAbs(valueB: number, valueA: number): number; +export declare function roundToTwoDecimals(num: number): number; +export declare function arrayKeys(array: Type[]): number[]; +export declare function arrayLast(array: Type[]): Type; +export declare function arrayLastIndex(array: Type[]): number; +export declare function arrayIsLastIndex(array: Type[], index: number): boolean; +export declare function arrayFromNumber(n: number, startAt?: number): number[]; +export declare function objectKeys(object: Type): string[]; +export declare function objectsMergeDeep(objectA: Record, objectB: Record): Record; +export declare function isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js new file mode 100644 index 0000000000..03e30fa6eb --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js @@ -0,0 +1,1672 @@ +'use strict'; + +function isNumber(subject) { + return typeof subject === 'number'; +} +function isString(subject) { + return typeof subject === 'string'; +} +function isBoolean(subject) { + return typeof subject === 'boolean'; +} +function isObject(subject) { + return Object.prototype.toString.call(subject) === '[object Object]'; +} +function mathAbs(n) { + return Math.abs(n); +} +function mathSign(n) { + return Math.sign(n); +} +function deltaAbs(valueB, valueA) { + return mathAbs(valueB - valueA); +} +function factorAbs(valueB, valueA) { + if (valueB === 0 || valueA === 0) return 0; + if (mathAbs(valueB) <= mathAbs(valueA)) return 0; + const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA)); + return mathAbs(diff / valueB); +} +function roundToTwoDecimals(num) { + return Math.round(num * 100) / 100; +} +function arrayKeys(array) { + return objectKeys(array).map(Number); +} +function arrayLast(array) { + return array[arrayLastIndex(array)]; +} +function arrayLastIndex(array) { + return Math.max(0, array.length - 1); +} +function arrayIsLastIndex(array, index) { + return index === arrayLastIndex(array); +} +function arrayFromNumber(n, startAt = 0) { + return Array.from(Array(n), (_, i) => startAt + i); +} +function objectKeys(object) { + return Object.keys(object); +} +function objectsMergeDeep(objectA, objectB) { + return [objectA, objectB].reduce((mergedObjects, currentObject) => { + objectKeys(currentObject).forEach(key => { + const valueA = mergedObjects[key]; + const valueB = currentObject[key]; + const areObjects = isObject(valueA) && isObject(valueB); + mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB; + }); + return mergedObjects; + }, {}); +} +function isMouseEvent(evt, ownerWindow) { + return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent; +} + +function Alignment(align, viewSize) { + const predefined = { + start, + center, + end + }; + function start() { + return 0; + } + function center(n) { + return end(n) / 2; + } + function end(n) { + return viewSize - n; + } + function measure(n, index) { + if (isString(align)) return predefined[align](n); + return align(viewSize, n, index); + } + const self = { + measure + }; + return self; +} + +function EventStore() { + let listeners = []; + function add(node, type, handler, options = { + passive: true + }) { + let removeListener; + if ('addEventListener' in node) { + node.addEventListener(type, handler, options); + removeListener = () => node.removeEventListener(type, handler, options); + } else { + const legacyMediaQueryList = node; + legacyMediaQueryList.addListener(handler); + removeListener = () => legacyMediaQueryList.removeListener(handler); + } + listeners.push(removeListener); + return self; + } + function clear() { + listeners = listeners.filter(remove => remove()); + } + const self = { + add, + clear + }; + return self; +} + +function Animations(ownerDocument, ownerWindow, update, render) { + const documentVisibleHandler = EventStore(); + const fixedTimeStep = 1000 / 60; + let lastTimeStamp = null; + let accumulatedTime = 0; + let animationId = 0; + function init() { + documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => { + if (ownerDocument.hidden) reset(); + }); + } + function destroy() { + stop(); + documentVisibleHandler.clear(); + } + function animate(timeStamp) { + if (!animationId) return; + if (!lastTimeStamp) { + lastTimeStamp = timeStamp; + update(); + update(); + } + const timeElapsed = timeStamp - lastTimeStamp; + lastTimeStamp = timeStamp; + accumulatedTime += timeElapsed; + while (accumulatedTime >= fixedTimeStep) { + update(); + accumulatedTime -= fixedTimeStep; + } + const alpha = accumulatedTime / fixedTimeStep; + render(alpha); + if (animationId) { + animationId = ownerWindow.requestAnimationFrame(animate); + } + } + function start() { + if (animationId) return; + animationId = ownerWindow.requestAnimationFrame(animate); + } + function stop() { + ownerWindow.cancelAnimationFrame(animationId); + lastTimeStamp = null; + accumulatedTime = 0; + animationId = 0; + } + function reset() { + lastTimeStamp = null; + accumulatedTime = 0; + } + const self = { + init, + destroy, + start, + stop, + update, + render + }; + return self; +} + +function Axis(axis, contentDirection) { + const isRightToLeft = contentDirection === 'rtl'; + const isVertical = axis === 'y'; + const scroll = isVertical ? 'y' : 'x'; + const cross = isVertical ? 'x' : 'y'; + const sign = !isVertical && isRightToLeft ? -1 : 1; + const startEdge = getStartEdge(); + const endEdge = getEndEdge(); + function measureSize(nodeRect) { + const { + height, + width + } = nodeRect; + return isVertical ? height : width; + } + function getStartEdge() { + if (isVertical) return 'top'; + return isRightToLeft ? 'right' : 'left'; + } + function getEndEdge() { + if (isVertical) return 'bottom'; + return isRightToLeft ? 'left' : 'right'; + } + function direction(n) { + return n * sign; + } + const self = { + scroll, + cross, + startEdge, + endEdge, + measureSize, + direction + }; + return self; +} + +function Limit(min = 0, max = 0) { + const length = mathAbs(min - max); + function reachedMin(n) { + return n < min; + } + function reachedMax(n) { + return n > max; + } + function reachedAny(n) { + return reachedMin(n) || reachedMax(n); + } + function constrain(n) { + if (!reachedAny(n)) return n; + return reachedMin(n) ? min : max; + } + function removeOffset(n) { + if (!length) return n; + return n - length * Math.ceil((n - max) / length); + } + const self = { + length, + max, + min, + constrain, + reachedAny, + reachedMax, + reachedMin, + removeOffset + }; + return self; +} + +function Counter(max, start, loop) { + const { + constrain + } = Limit(0, max); + const loopEnd = max + 1; + let counter = withinLimit(start); + function withinLimit(n) { + return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd); + } + function get() { + return counter; + } + function set(n) { + counter = withinLimit(n); + return self; + } + function add(n) { + return clone().set(get() + n); + } + function clone() { + return Counter(max, get(), loop); + } + const self = { + get, + set, + add, + clone + }; + return self; +} + +function DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) { + const { + cross: crossAxis, + direction + } = axis; + const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']; + const nonPassiveEvent = { + passive: false + }; + const initEvents = EventStore(); + const dragEvents = EventStore(); + const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20)); + const snapForceBoost = { + mouse: 300, + touch: 400 + }; + const freeForceBoost = { + mouse: 500, + touch: 600 + }; + const baseSpeed = dragFree ? 43 : 25; + let isMoving = false; + let startScroll = 0; + let startCross = 0; + let pointerIsDown = false; + let preventScroll = false; + let preventClick = false; + let isMouse = false; + function init(emblaApi) { + if (!watchDrag) return; + function downIfAllowed(evt) { + if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt); + } + const node = rootNode; + initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true); + } + function destroy() { + initEvents.clear(); + dragEvents.clear(); + } + function addDragEvents() { + const node = isMouse ? ownerDocument : rootNode; + dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up); + } + function isFocusNode(node) { + const nodeName = node.nodeName || ''; + return focusNodes.includes(nodeName); + } + function forceBoost() { + const boost = dragFree ? freeForceBoost : snapForceBoost; + const type = isMouse ? 'mouse' : 'touch'; + return boost[type]; + } + function allowedForce(force, targetChanged) { + const next = index.add(mathSign(force) * -1); + const baseForce = scrollTarget.byDistance(force, !dragFree).distance; + if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce; + if (skipSnaps && targetChanged) return baseForce * 0.5; + return scrollTarget.byIndex(next.get(), 0).distance; + } + function down(evt) { + const isMouseEvt = isMouseEvent(evt, ownerWindow); + isMouse = isMouseEvt; + preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving; + isMoving = deltaAbs(target.get(), location.get()) >= 2; + if (isMouseEvt && evt.button !== 0) return; + if (isFocusNode(evt.target)) return; + pointerIsDown = true; + dragTracker.pointerDown(evt); + scrollBody.useFriction(0).useDuration(0); + target.set(location); + addDragEvents(); + startScroll = dragTracker.readPoint(evt); + startCross = dragTracker.readPoint(evt, crossAxis); + eventHandler.emit('pointerDown'); + } + function move(evt) { + const isTouchEvt = !isMouseEvent(evt, ownerWindow); + if (isTouchEvt && evt.touches.length >= 2) return up(evt); + const lastScroll = dragTracker.readPoint(evt); + const lastCross = dragTracker.readPoint(evt, crossAxis); + const diffScroll = deltaAbs(lastScroll, startScroll); + const diffCross = deltaAbs(lastCross, startCross); + if (!preventScroll && !isMouse) { + if (!evt.cancelable) return up(evt); + preventScroll = diffScroll > diffCross; + if (!preventScroll) return up(evt); + } + const diff = dragTracker.pointerMove(evt); + if (diffScroll > dragThreshold) preventClick = true; + scrollBody.useFriction(0.3).useDuration(0.75); + animation.start(); + target.add(direction(diff)); + evt.preventDefault(); + } + function up(evt) { + const currentLocation = scrollTarget.byDistance(0, false); + const targetChanged = currentLocation.index !== index.get(); + const rawForce = dragTracker.pointerUp(evt) * forceBoost(); + const force = allowedForce(direction(rawForce), targetChanged); + const forceFactor = factorAbs(rawForce, force); + const speed = baseSpeed - 10 * forceFactor; + const friction = baseFriction + forceFactor / 50; + preventScroll = false; + pointerIsDown = false; + dragEvents.clear(); + scrollBody.useDuration(speed).useFriction(friction); + scrollTo.distance(force, !dragFree); + isMouse = false; + eventHandler.emit('pointerUp'); + } + function click(evt) { + if (preventClick) { + evt.stopPropagation(); + evt.preventDefault(); + preventClick = false; + } + } + function pointerDown() { + return pointerIsDown; + } + const self = { + init, + destroy, + pointerDown + }; + return self; +} + +function DragTracker(axis, ownerWindow) { + const logInterval = 170; + let startEvent; + let lastEvent; + function readTime(evt) { + return evt.timeStamp; + } + function readPoint(evt, evtAxis) { + const property = evtAxis || axis.scroll; + const coord = `client${property === 'x' ? 'X' : 'Y'}`; + return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]; + } + function pointerDown(evt) { + startEvent = evt; + lastEvent = evt; + return readPoint(evt); + } + function pointerMove(evt) { + const diff = readPoint(evt) - readPoint(lastEvent); + const expired = readTime(evt) - readTime(startEvent) > logInterval; + lastEvent = evt; + if (expired) startEvent = evt; + return diff; + } + function pointerUp(evt) { + if (!startEvent || !lastEvent) return 0; + const diffDrag = readPoint(lastEvent) - readPoint(startEvent); + const diffTime = readTime(evt) - readTime(startEvent); + const expired = readTime(evt) - readTime(lastEvent) > logInterval; + const force = diffDrag / diffTime; + const isFlick = diffTime && !expired && mathAbs(force) > 0.1; + return isFlick ? force : 0; + } + const self = { + pointerDown, + pointerMove, + pointerUp, + readPoint + }; + return self; +} + +function NodeRects() { + function measure(node) { + const { + offsetTop, + offsetLeft, + offsetWidth, + offsetHeight + } = node; + const offset = { + top: offsetTop, + right: offsetLeft + offsetWidth, + bottom: offsetTop + offsetHeight, + left: offsetLeft, + width: offsetWidth, + height: offsetHeight + }; + return offset; + } + const self = { + measure + }; + return self; +} + +function PercentOfView(viewSize) { + function measure(n) { + return viewSize * (n / 100); + } + const self = { + measure + }; + return self; +} + +function ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) { + const observeNodes = [container].concat(slides); + let resizeObserver; + let containerSize; + let slideSizes = []; + let destroyed = false; + function readSize(node) { + return axis.measureSize(nodeRects.measure(node)); + } + function init(emblaApi) { + if (!watchResize) return; + containerSize = readSize(container); + slideSizes = slides.map(readSize); + function defaultCallback(entries) { + for (const entry of entries) { + if (destroyed) return; + const isContainer = entry.target === container; + const slideIndex = slides.indexOf(entry.target); + const lastSize = isContainer ? containerSize : slideSizes[slideIndex]; + const newSize = readSize(isContainer ? container : slides[slideIndex]); + const diffSize = mathAbs(newSize - lastSize); + if (diffSize >= 0.5) { + emblaApi.reInit(); + eventHandler.emit('resize'); + break; + } + } + } + resizeObserver = new ResizeObserver(entries => { + if (isBoolean(watchResize) || watchResize(emblaApi, entries)) { + defaultCallback(entries); + } + }); + ownerWindow.requestAnimationFrame(() => { + observeNodes.forEach(node => resizeObserver.observe(node)); + }); + } + function destroy() { + destroyed = true; + if (resizeObserver) resizeObserver.disconnect(); + } + const self = { + init, + destroy + }; + return self; +} + +function ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) { + let scrollVelocity = 0; + let scrollDirection = 0; + let scrollDuration = baseDuration; + let scrollFriction = baseFriction; + let rawLocation = location.get(); + let rawLocationPrevious = 0; + function seek() { + const displacement = target.get() - location.get(); + const isInstant = !scrollDuration; + let scrollDistance = 0; + if (isInstant) { + scrollVelocity = 0; + previousLocation.set(target); + location.set(target); + scrollDistance = displacement; + } else { + previousLocation.set(location); + scrollVelocity += displacement / scrollDuration; + scrollVelocity *= scrollFriction; + rawLocation += scrollVelocity; + location.add(scrollVelocity); + scrollDistance = rawLocation - rawLocationPrevious; + } + scrollDirection = mathSign(scrollDistance); + rawLocationPrevious = rawLocation; + return self; + } + function settled() { + const diff = target.get() - offsetLocation.get(); + return mathAbs(diff) < 0.001; + } + function duration() { + return scrollDuration; + } + function direction() { + return scrollDirection; + } + function velocity() { + return scrollVelocity; + } + function useBaseDuration() { + return useDuration(baseDuration); + } + function useBaseFriction() { + return useFriction(baseFriction); + } + function useDuration(n) { + scrollDuration = n; + return self; + } + function useFriction(n) { + scrollFriction = n; + return self; + } + const self = { + direction, + duration, + velocity, + seek, + settled, + useBaseFriction, + useBaseDuration, + useFriction, + useDuration + }; + return self; +} + +function ScrollBounds(limit, location, target, scrollBody, percentOfView) { + const pullBackThreshold = percentOfView.measure(10); + const edgeOffsetTolerance = percentOfView.measure(50); + const frictionLimit = Limit(0.1, 0.99); + let disabled = false; + function shouldConstrain() { + if (disabled) return false; + if (!limit.reachedAny(target.get())) return false; + if (!limit.reachedAny(location.get())) return false; + return true; + } + function constrain(pointerDown) { + if (!shouldConstrain()) return; + const edge = limit.reachedMin(location.get()) ? 'min' : 'max'; + const diffToEdge = mathAbs(limit[edge] - location.get()); + const diffToTarget = target.get() - location.get(); + const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance); + target.subtract(diffToTarget * friction); + if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) { + target.set(limit.constrain(target.get())); + scrollBody.useDuration(25).useBaseFriction(); + } + } + function toggleActive(active) { + disabled = !active; + } + const self = { + shouldConstrain, + constrain, + toggleActive + }; + return self; +} + +function ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) { + const scrollBounds = Limit(-contentSize + viewSize, 0); + const snapsBounded = measureBounded(); + const scrollContainLimit = findScrollContainLimit(); + const snapsContained = measureContained(); + function usePixelTolerance(bound, snap) { + return deltaAbs(bound, snap) <= 1; + } + function findScrollContainLimit() { + const startSnap = snapsBounded[0]; + const endSnap = arrayLast(snapsBounded); + const min = snapsBounded.lastIndexOf(startSnap); + const max = snapsBounded.indexOf(endSnap) + 1; + return Limit(min, max); + } + function measureBounded() { + return snapsAligned.map((snapAligned, index) => { + const { + min, + max + } = scrollBounds; + const snap = scrollBounds.constrain(snapAligned); + const isFirst = !index; + const isLast = arrayIsLastIndex(snapsAligned, index); + if (isFirst) return max; + if (isLast) return min; + if (usePixelTolerance(min, snap)) return min; + if (usePixelTolerance(max, snap)) return max; + return snap; + }).map(scrollBound => parseFloat(scrollBound.toFixed(3))); + } + function measureContained() { + if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]; + if (containScroll === 'keepSnaps') return snapsBounded; + const { + min, + max + } = scrollContainLimit; + return snapsBounded.slice(min, max); + } + const self = { + snapsContained, + scrollContainLimit + }; + return self; +} + +function ScrollLimit(contentSize, scrollSnaps, loop) { + const max = scrollSnaps[0]; + const min = loop ? max - contentSize : arrayLast(scrollSnaps); + const limit = Limit(min, max); + const self = { + limit + }; + return self; +} + +function ScrollLooper(contentSize, limit, location, vectors) { + const jointSafety = 0.1; + const min = limit.min + jointSafety; + const max = limit.max + jointSafety; + const { + reachedMin, + reachedMax + } = Limit(min, max); + function shouldLoop(direction) { + if (direction === 1) return reachedMax(location.get()); + if (direction === -1) return reachedMin(location.get()); + return false; + } + function loop(direction) { + if (!shouldLoop(direction)) return; + const loopDistance = contentSize * (direction * -1); + vectors.forEach(v => v.add(loopDistance)); + } + const self = { + loop + }; + return self; +} + +function ScrollProgress(limit) { + const { + max, + length + } = limit; + function get(n) { + const currentLocation = n - max; + return length ? currentLocation / -length : 0; + } + const self = { + get + }; + return self; +} + +function ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) { + const { + startEdge, + endEdge + } = axis; + const { + groupSlides + } = slidesToScroll; + const alignments = measureSizes().map(alignment.measure); + const snaps = measureUnaligned(); + const snapsAligned = measureAligned(); + function measureSizes() { + return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs); + } + function measureUnaligned() { + return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap)); + } + function measureAligned() { + return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]); + } + const self = { + snaps, + snapsAligned + }; + return self; +} + +function SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) { + const { + groupSlides + } = slidesToScroll; + const { + min, + max + } = scrollContainLimit; + const slideRegistry = createSlideRegistry(); + function createSlideRegistry() { + const groupedSlideIndexes = groupSlides(slideIndexes); + const doNotContain = !containSnaps || containScroll === 'keepSnaps'; + if (scrollSnaps.length === 1) return [slideIndexes]; + if (doNotContain) return groupedSlideIndexes; + return groupedSlideIndexes.slice(min, max).map((group, index, groups) => { + const isFirst = !index; + const isLast = arrayIsLastIndex(groups, index); + if (isFirst) { + const range = arrayLast(groups[0]) + 1; + return arrayFromNumber(range); + } + if (isLast) { + const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1; + return arrayFromNumber(range, arrayLast(groups)[0]); + } + return group; + }); + } + const self = { + slideRegistry + }; + return self; +} + +function ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) { + const { + reachedAny, + removeOffset, + constrain + } = limit; + function minDistance(distances) { + return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]; + } + function findTargetSnap(target) { + const distance = loop ? removeOffset(target) : constrain(target); + const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({ + diff: shortcut(snap - distance, 0), + index + })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff)); + const { + index + } = ascDiffsToSnaps[0]; + return { + index, + distance + }; + } + function shortcut(target, direction) { + const targets = [target, target + contentSize, target - contentSize]; + if (!loop) return target; + if (!direction) return minDistance(targets); + const matchingTargets = targets.filter(t => mathSign(t) === direction); + if (matchingTargets.length) return minDistance(matchingTargets); + return arrayLast(targets) - contentSize; + } + function byIndex(index, direction) { + const diffToSnap = scrollSnaps[index] - targetVector.get(); + const distance = shortcut(diffToSnap, direction); + return { + index, + distance + }; + } + function byDistance(distance, snap) { + const target = targetVector.get() + distance; + const { + index, + distance: targetSnapDistance + } = findTargetSnap(target); + const reachedBound = !loop && reachedAny(target); + if (!snap || reachedBound) return { + index, + distance + }; + const diffToSnap = scrollSnaps[index] - targetSnapDistance; + const snapDistance = distance + shortcut(diffToSnap, 0); + return { + index, + distance: snapDistance + }; + } + const self = { + byDistance, + byIndex, + shortcut + }; + return self; +} + +function ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) { + function scrollTo(target) { + const distanceDiff = target.distance; + const indexDiff = target.index !== indexCurrent.get(); + targetVector.add(distanceDiff); + if (distanceDiff) { + if (scrollBody.duration()) { + animation.start(); + } else { + animation.update(); + animation.render(1); + animation.update(); + } + } + if (indexDiff) { + indexPrevious.set(indexCurrent.get()); + indexCurrent.set(target.index); + eventHandler.emit('select'); + } + } + function distance(n, snap) { + const target = scrollTarget.byDistance(n, snap); + scrollTo(target); + } + function index(n, direction) { + const targetIndex = indexCurrent.clone().set(n); + const target = scrollTarget.byIndex(targetIndex.get(), direction); + scrollTo(target); + } + const self = { + distance, + index + }; + return self; +} + +function SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) { + const focusListenerOptions = { + passive: true, + capture: true + }; + let lastTabPressTime = 0; + function init(emblaApi) { + if (!watchFocus) return; + function defaultCallback(index) { + const nowTime = new Date().getTime(); + const diffTime = nowTime - lastTabPressTime; + if (diffTime > 10) return; + eventHandler.emit('slideFocusStart'); + root.scrollLeft = 0; + const group = slideRegistry.findIndex(group => group.includes(index)); + if (!isNumber(group)) return; + scrollBody.useDuration(0); + scrollTo.index(group, 0); + eventHandler.emit('slideFocus'); + } + eventStore.add(document, 'keydown', registerTabPress, false); + slides.forEach((slide, slideIndex) => { + eventStore.add(slide, 'focus', evt => { + if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) { + defaultCallback(slideIndex); + } + }, focusListenerOptions); + }); + } + function registerTabPress(event) { + if (event.code === 'Tab') lastTabPressTime = new Date().getTime(); + } + const self = { + init + }; + return self; +} + +function Vector1D(initialValue) { + let value = initialValue; + function get() { + return value; + } + function set(n) { + value = normalizeInput(n); + } + function add(n) { + value += normalizeInput(n); + } + function subtract(n) { + value -= normalizeInput(n); + } + function normalizeInput(n) { + return isNumber(n) ? n : n.get(); + } + const self = { + get, + set, + add, + subtract + }; + return self; +} + +function Translate(axis, container) { + const translate = axis.scroll === 'x' ? x : y; + const containerStyle = container.style; + let previousTarget = null; + let disabled = false; + function x(n) { + return `translate3d(${n}px,0px,0px)`; + } + function y(n) { + return `translate3d(0px,${n}px,0px)`; + } + function to(target) { + if (disabled) return; + const newTarget = roundToTwoDecimals(axis.direction(target)); + if (newTarget === previousTarget) return; + containerStyle.transform = translate(newTarget); + previousTarget = newTarget; + } + function toggleActive(active) { + disabled = !active; + } + function clear() { + if (disabled) return; + containerStyle.transform = ''; + if (!container.getAttribute('style')) container.removeAttribute('style'); + } + const self = { + clear, + to, + toggleActive + }; + return self; +} + +function SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) { + const roundingSafety = 0.5; + const ascItems = arrayKeys(slideSizesWithGaps); + const descItems = arrayKeys(slideSizesWithGaps).reverse(); + const loopPoints = startPoints().concat(endPoints()); + function removeSlideSizes(indexes, from) { + return indexes.reduce((a, i) => { + return a - slideSizesWithGaps[i]; + }, from); + } + function slidesInGap(indexes, gap) { + return indexes.reduce((a, i) => { + const remainingGap = removeSlideSizes(a, gap); + return remainingGap > 0 ? a.concat([i]) : a; + }, []); + } + function findSlideBounds(offset) { + return snaps.map((snap, index) => ({ + start: snap - slideSizes[index] + roundingSafety + offset, + end: snap + viewSize - roundingSafety + offset + })); + } + function findLoopPoints(indexes, offset, isEndEdge) { + const slideBounds = findSlideBounds(offset); + return indexes.map(index => { + const initial = isEndEdge ? 0 : -contentSize; + const altered = isEndEdge ? contentSize : 0; + const boundEdge = isEndEdge ? 'end' : 'start'; + const loopPoint = slideBounds[index][boundEdge]; + return { + index, + loopPoint, + slideLocation: Vector1D(-1), + translate: Translate(axis, slides[index]), + target: () => location.get() > loopPoint ? initial : altered + }; + }); + } + function startPoints() { + const gap = scrollSnaps[0]; + const indexes = slidesInGap(descItems, gap); + return findLoopPoints(indexes, contentSize, false); + } + function endPoints() { + const gap = viewSize - scrollSnaps[0] - 1; + const indexes = slidesInGap(ascItems, gap); + return findLoopPoints(indexes, -contentSize, true); + } + function canLoop() { + return loopPoints.every(({ + index + }) => { + const otherIndexes = ascItems.filter(i => i !== index); + return removeSlideSizes(otherIndexes, viewSize) <= 0.1; + }); + } + function loop() { + loopPoints.forEach(loopPoint => { + const { + target, + translate, + slideLocation + } = loopPoint; + const shiftLocation = target(); + if (shiftLocation === slideLocation.get()) return; + translate.to(shiftLocation); + slideLocation.set(shiftLocation); + }); + } + function clear() { + loopPoints.forEach(loopPoint => loopPoint.translate.clear()); + } + const self = { + canLoop, + clear, + loop, + loopPoints + }; + return self; +} + +function SlidesHandler(container, eventHandler, watchSlides) { + let mutationObserver; + let destroyed = false; + function init(emblaApi) { + if (!watchSlides) return; + function defaultCallback(mutations) { + for (const mutation of mutations) { + if (mutation.type === 'childList') { + emblaApi.reInit(); + eventHandler.emit('slidesChanged'); + break; + } + } + } + mutationObserver = new MutationObserver(mutations => { + if (destroyed) return; + if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) { + defaultCallback(mutations); + } + }); + mutationObserver.observe(container, { + childList: true + }); + } + function destroy() { + if (mutationObserver) mutationObserver.disconnect(); + destroyed = true; + } + const self = { + init, + destroy + }; + return self; +} + +function SlidesInView(container, slides, eventHandler, threshold) { + const intersectionEntryMap = {}; + let inViewCache = null; + let notInViewCache = null; + let intersectionObserver; + let destroyed = false; + function init() { + intersectionObserver = new IntersectionObserver(entries => { + if (destroyed) return; + entries.forEach(entry => { + const index = slides.indexOf(entry.target); + intersectionEntryMap[index] = entry; + }); + inViewCache = null; + notInViewCache = null; + eventHandler.emit('slidesInView'); + }, { + root: container.parentElement, + threshold + }); + slides.forEach(slide => intersectionObserver.observe(slide)); + } + function destroy() { + if (intersectionObserver) intersectionObserver.disconnect(); + destroyed = true; + } + function createInViewList(inView) { + return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => { + const index = parseInt(slideIndex); + const { + isIntersecting + } = intersectionEntryMap[index]; + const inViewMatch = inView && isIntersecting; + const notInViewMatch = !inView && !isIntersecting; + if (inViewMatch || notInViewMatch) list.push(index); + return list; + }, []); + } + function get(inView = true) { + if (inView && inViewCache) return inViewCache; + if (!inView && notInViewCache) return notInViewCache; + const slideIndexes = createInViewList(inView); + if (inView) inViewCache = slideIndexes; + if (!inView) notInViewCache = slideIndexes; + return slideIndexes; + } + const self = { + init, + destroy, + get + }; + return self; +} + +function SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) { + const { + measureSize, + startEdge, + endEdge + } = axis; + const withEdgeGap = slideRects[0] && readEdgeGap; + const startGap = measureStartGap(); + const endGap = measureEndGap(); + const slideSizes = slideRects.map(measureSize); + const slideSizesWithGaps = measureWithGaps(); + function measureStartGap() { + if (!withEdgeGap) return 0; + const slideRect = slideRects[0]; + return mathAbs(containerRect[startEdge] - slideRect[startEdge]); + } + function measureEndGap() { + if (!withEdgeGap) return 0; + const style = ownerWindow.getComputedStyle(arrayLast(slides)); + return parseFloat(style.getPropertyValue(`margin-${endEdge}`)); + } + function measureWithGaps() { + return slideRects.map((rect, index, rects) => { + const isFirst = !index; + const isLast = arrayIsLastIndex(rects, index); + if (isFirst) return slideSizes[index] + startGap; + if (isLast) return slideSizes[index] + endGap; + return rects[index + 1][startEdge] - rect[startEdge]; + }).map(mathAbs); + } + const self = { + slideSizes, + slideSizesWithGaps, + startGap, + endGap + }; + return self; +} + +function SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) { + const { + startEdge, + endEdge, + direction + } = axis; + const groupByNumber = isNumber(slidesToScroll); + function byNumber(array, groupSize) { + return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize)); + } + function bySize(array) { + if (!array.length) return []; + return arrayKeys(array).reduce((groups, rectB, index) => { + const rectA = arrayLast(groups) || 0; + const isFirst = rectA === 0; + const isLast = rectB === arrayLastIndex(array); + const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]; + const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]; + const gapA = !loop && isFirst ? direction(startGap) : 0; + const gapB = !loop && isLast ? direction(endGap) : 0; + const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA)); + if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB); + if (isLast) groups.push(array.length); + return groups; + }, []).map((currentSize, index, groups) => { + const previousSize = Math.max(groups[index - 1] || 0); + return array.slice(previousSize, currentSize); + }); + } + function groupSlides(array) { + return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array); + } + const self = { + groupSlides + }; + return self; +} + +function Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) { + // Options + const { + align, + axis: scrollAxis, + direction, + startIndex, + loop, + duration, + dragFree, + dragThreshold, + inViewThreshold, + slidesToScroll: groupSlides, + skipSnaps, + containScroll, + watchResize, + watchSlides, + watchDrag, + watchFocus + } = options; + // Measurements + const pixelTolerance = 2; + const nodeRects = NodeRects(); + const containerRect = nodeRects.measure(container); + const slideRects = slides.map(nodeRects.measure); + const axis = Axis(scrollAxis, direction); + const viewSize = axis.measureSize(containerRect); + const percentOfView = PercentOfView(viewSize); + const alignment = Alignment(align, viewSize); + const containSnaps = !loop && !!containScroll; + const readEdgeGap = loop || !!containScroll; + const { + slideSizes, + slideSizesWithGaps, + startGap, + endGap + } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow); + const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance); + const { + snaps, + snapsAligned + } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll); + const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps); + const { + snapsContained, + scrollContainLimit + } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance); + const scrollSnaps = containSnaps ? snapsContained : snapsAligned; + const { + limit + } = ScrollLimit(contentSize, scrollSnaps, loop); + // Indexes + const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop); + const indexPrevious = index.clone(); + const slideIndexes = arrayKeys(slides); + // Animation + const update = ({ + dragHandler, + scrollBody, + scrollBounds, + options: { + loop + } + }) => { + if (!loop) scrollBounds.constrain(dragHandler.pointerDown()); + scrollBody.seek(); + }; + const render = ({ + scrollBody, + translate, + location, + offsetLocation, + previousLocation, + scrollLooper, + slideLooper, + dragHandler, + animation, + eventHandler, + scrollBounds, + options: { + loop + } + }, alpha) => { + const shouldSettle = scrollBody.settled(); + const withinBounds = !scrollBounds.shouldConstrain(); + const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds; + const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown(); + if (hasSettledAndIdle) animation.stop(); + const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha); + offsetLocation.set(interpolatedLocation); + if (loop) { + scrollLooper.loop(scrollBody.direction()); + slideLooper.loop(); + } + translate.to(offsetLocation.get()); + if (hasSettledAndIdle) eventHandler.emit('settle'); + if (!hasSettled) eventHandler.emit('scroll'); + }; + const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha)); + // Shared + const friction = 0.68; + const startLocation = scrollSnaps[index.get()]; + const location = Vector1D(startLocation); + const previousLocation = Vector1D(startLocation); + const offsetLocation = Vector1D(startLocation); + const target = Vector1D(startLocation); + const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction); + const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target); + const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler); + const scrollProgress = ScrollProgress(limit); + const eventStore = EventStore(); + const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold); + const { + slideRegistry + } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes); + const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus); + // Engine + const engine = { + ownerDocument, + ownerWindow, + eventHandler, + containerRect, + slideRects, + animation, + axis, + dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag), + eventStore, + percentOfView, + index, + indexPrevious, + limit, + location, + offsetLocation, + previousLocation, + options, + resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects), + scrollBody, + scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView), + scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]), + scrollProgress, + scrollSnapList: scrollSnaps.map(scrollProgress.get), + scrollSnaps, + scrollTarget, + scrollTo, + slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides), + slideFocus, + slidesHandler: SlidesHandler(container, eventHandler, watchSlides), + slidesInView, + slideIndexes, + slideRegistry, + slidesToScroll, + target, + translate: Translate(axis, container) + }; + return engine; +} + +function EventHandler() { + let listeners = {}; + let api; + function init(emblaApi) { + api = emblaApi; + } + function getListeners(evt) { + return listeners[evt] || []; + } + function emit(evt) { + getListeners(evt).forEach(e => e(api, evt)); + return self; + } + function on(evt, cb) { + listeners[evt] = getListeners(evt).concat([cb]); + return self; + } + function off(evt, cb) { + listeners[evt] = getListeners(evt).filter(e => e !== cb); + return self; + } + function clear() { + listeners = {}; + } + const self = { + init, + emit, + off, + on, + clear + }; + return self; +} + +const defaultOptions = { + align: 'center', + axis: 'x', + container: null, + slides: null, + containScroll: 'trimSnaps', + direction: 'ltr', + slidesToScroll: 1, + inViewThreshold: 0, + breakpoints: {}, + dragFree: false, + dragThreshold: 10, + loop: false, + skipSnaps: false, + duration: 25, + startIndex: 0, + active: true, + watchDrag: true, + watchResize: true, + watchSlides: true, + watchFocus: true +}; + +function OptionsHandler(ownerWindow) { + function mergeOptions(optionsA, optionsB) { + return objectsMergeDeep(optionsA, optionsB || {}); + } + function optionsAtMedia(options) { + const optionsAtMedia = options.breakpoints || {}; + const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {}); + return mergeOptions(options, matchedMediaOptions); + } + function optionsMediaQueries(optionsList) { + return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia); + } + const self = { + mergeOptions, + optionsAtMedia, + optionsMediaQueries + }; + return self; +} + +function PluginsHandler(optionsHandler) { + let activePlugins = []; + function init(emblaApi, plugins) { + activePlugins = plugins.filter(({ + options + }) => optionsHandler.optionsAtMedia(options).active !== false); + activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler)); + return plugins.reduce((map, plugin) => Object.assign(map, { + [plugin.name]: plugin + }), {}); + } + function destroy() { + activePlugins = activePlugins.filter(plugin => plugin.destroy()); + } + const self = { + init, + destroy + }; + return self; +} + +function EmblaCarousel(root, userOptions, userPlugins) { + const ownerDocument = root.ownerDocument; + const ownerWindow = ownerDocument.defaultView; + const optionsHandler = OptionsHandler(ownerWindow); + const pluginsHandler = PluginsHandler(optionsHandler); + const mediaHandlers = EventStore(); + const eventHandler = EventHandler(); + const { + mergeOptions, + optionsAtMedia, + optionsMediaQueries + } = optionsHandler; + const { + on, + off, + emit + } = eventHandler; + const reInit = reActivate; + let destroyed = false; + let engine; + let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions); + let options = mergeOptions(optionsBase); + let pluginList = []; + let pluginApis; + let container; + let slides; + function storeElements() { + const { + container: userContainer, + slides: userSlides + } = options; + const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer; + container = customContainer || root.children[0]; + const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides; + slides = [].slice.call(customSlides || container.children); + } + function createEngine(options) { + const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler); + if (options.loop && !engine.slideLooper.canLoop()) { + const optionsWithoutLoop = Object.assign({}, options, { + loop: false + }); + return createEngine(optionsWithoutLoop); + } + return engine; + } + function activate(withOptions, withPlugins) { + if (destroyed) return; + optionsBase = mergeOptions(optionsBase, withOptions); + options = optionsAtMedia(optionsBase); + pluginList = withPlugins || pluginList; + storeElements(); + engine = createEngine(options); + optionsMediaQueries([optionsBase, ...pluginList.map(({ + options + }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate)); + if (!options.active) return; + engine.translate.to(engine.location.get()); + engine.animation.init(); + engine.slidesInView.init(); + engine.slideFocus.init(self); + engine.eventHandler.init(self); + engine.resizeHandler.init(self); + engine.slidesHandler.init(self); + if (engine.options.loop) engine.slideLooper.loop(); + if (container.offsetParent && slides.length) engine.dragHandler.init(self); + pluginApis = pluginsHandler.init(self, pluginList); + } + function reActivate(withOptions, withPlugins) { + const startIndex = selectedScrollSnap(); + deActivate(); + activate(mergeOptions({ + startIndex + }, withOptions), withPlugins); + eventHandler.emit('reInit'); + } + function deActivate() { + engine.dragHandler.destroy(); + engine.eventStore.clear(); + engine.translate.clear(); + engine.slideLooper.clear(); + engine.resizeHandler.destroy(); + engine.slidesHandler.destroy(); + engine.slidesInView.destroy(); + engine.animation.destroy(); + pluginsHandler.destroy(); + mediaHandlers.clear(); + } + function destroy() { + if (destroyed) return; + destroyed = true; + mediaHandlers.clear(); + deActivate(); + eventHandler.emit('destroy'); + eventHandler.clear(); + } + function scrollTo(index, jump, direction) { + if (!options.active || destroyed) return; + engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration); + engine.scrollTo.index(index, direction || 0); + } + function scrollNext(jump) { + const next = engine.index.add(1).get(); + scrollTo(next, jump, -1); + } + function scrollPrev(jump) { + const prev = engine.index.add(-1).get(); + scrollTo(prev, jump, 1); + } + function canScrollNext() { + const next = engine.index.add(1).get(); + return next !== selectedScrollSnap(); + } + function canScrollPrev() { + const prev = engine.index.add(-1).get(); + return prev !== selectedScrollSnap(); + } + function scrollSnapList() { + return engine.scrollSnapList; + } + function scrollProgress() { + return engine.scrollProgress.get(engine.offsetLocation.get()); + } + function selectedScrollSnap() { + return engine.index.get(); + } + function previousScrollSnap() { + return engine.indexPrevious.get(); + } + function slidesInView() { + return engine.slidesInView.get(); + } + function slidesNotInView() { + return engine.slidesInView.get(false); + } + function plugins() { + return pluginApis; + } + function internalEngine() { + return engine; + } + function rootNode() { + return root; + } + function containerNode() { + return container; + } + function slideNodes() { + return slides; + } + const self = { + canScrollNext, + canScrollPrev, + containerNode, + internalEngine, + destroy, + off, + on, + emit, + plugins, + previousScrollSnap, + reInit, + rootNode, + scrollNext, + scrollPrev, + scrollProgress, + scrollSnapList, + scrollTo, + selectedScrollSnap, + slideNodes, + slidesInView, + slidesNotInView + }; + activate(userOptions, userPlugins); + setTimeout(() => eventHandler.emit('init'), 0); + return self; +} +EmblaCarousel.globalOptions = undefined; + +module.exports = EmblaCarousel; +//# sourceMappingURL=embla-carousel.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map new file mode 100644 index 0000000000..9e0ec95bce --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel.cjs.js","sources":["../src/components/utils.ts","../src/components/Alignment.ts","../src/components/EventStore.ts","../src/components/Animations.ts","../src/components/Axis.ts","../src/components/Limit.ts","../src/components/Counter.ts","../src/components/DragHandler.ts","../src/components/DragTracker.ts","../src/components/NodeRects.ts","../src/components/PercentOfView.ts","../src/components/ResizeHandler.ts","../src/components/ScrollBody.ts","../src/components/ScrollBounds.ts","../src/components/ScrollContain.ts","../src/components/ScrollLimit.ts","../src/components/ScrollLooper.ts","../src/components/ScrollProgress.ts","../src/components/ScrollSnaps.ts","../src/components/SlideRegistry.ts","../src/components/ScrollTarget.ts","../src/components/ScrollTo.ts","../src/components/SlideFocus.ts","../src/components/Vector1d.ts","../src/components/Translate.ts","../src/components/SlideLooper.ts","../src/components/SlidesHandler.ts","../src/components/SlidesInView.ts","../src/components/SlideSizes.ts","../src/components/SlidesToScroll.ts","../src/components/Engine.ts","../src/components/EventHandler.ts","../src/components/Options.ts","../src/components/OptionsHandler.ts","../src/components/PluginsHandler.ts","../src/components/EmblaCarousel.ts"],"sourcesContent":["import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record,\n objectB: Record\n): Record {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n init: () => void\n destroy: () => void\n start: () => void\n stop: () => void\n update: () => void\n render: (alpha: number) => void\n}\n\nexport function Animations(\n ownerDocument: Document,\n ownerWindow: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const documentVisibleHandler = EventStore()\n const fixedTimeStep = 1000 / 60\n\n let lastTimeStamp: number | null = null\n let accumulatedTime = 0\n let animationId = 0\n\n function init(): void {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset()\n })\n }\n\n function destroy(): void {\n stop()\n documentVisibleHandler.clear()\n }\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!animationId) return\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp\n update()\n update()\n }\n\n const timeElapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n accumulatedTime += timeElapsed\n\n while (accumulatedTime >= fixedTimeStep) {\n update()\n accumulatedTime -= fixedTimeStep\n }\n\n const alpha = accumulatedTime / fixedTimeStep\n render(alpha)\n\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n }\n\n function start(): void {\n if (animationId) return\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(): void {\n ownerWindow.cancelAnimationFrame(animationId)\n lastTimeStamp = null\n accumulatedTime = 0\n animationId = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n accumulatedTime = 0\n }\n\n const self: AnimationsType = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n }\n return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n direction: (n: number) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n contentDirection: AxisDirectionOptionType\n): AxisType {\n const isRightToLeft = contentDirection === 'rtl'\n const isVertical = axis === 'y'\n const scroll = isVertical ? 'y' : 'x'\n const cross = isVertical ? 'x' : 'y'\n const sign = !isVertical && isRightToLeft ? -1 : 1\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { height, width } = nodeRect\n return isVertical ? height : width\n }\n\n function getStartEdge(): AxisEdgeType {\n if (isVertical) return 'top'\n return isRightToLeft ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (isVertical) return 'bottom'\n return isRightToLeft ? 'left' : 'right'\n }\n\n function direction(n: number): number {\n return n * sign\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n }\n return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationsType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis, direction } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(0.75)\n animation.start()\n target.add(direction(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n preventClick = false\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n destroy,\n pointerDown\n }\n return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n","export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n","export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n const observeNodes = [container].concat(slides)\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n if (destroyed) return\n\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n emblaApi.reInit()\n eventHandler.emit('resize')\n\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach((node) => resizeObserver.observe(node))\n })\n }\n\n function destroy(): void {\n destroyed = true\n if (resizeObserver) resizeObserver.disconnect()\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let scrollVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const displacement = target.get() - location.get()\n const isInstant = !scrollDuration\n let scrollDistance = 0\n\n if (isInstant) {\n scrollVelocity = 0\n previousLocation.set(target)\n location.set(target)\n\n scrollDistance = displacement\n } else {\n previousLocation.set(location)\n\n scrollVelocity += displacement / scrollDuration\n scrollVelocity *= scrollFriction\n rawLocation += scrollVelocity\n location.add(scrollVelocity)\n\n scrollDistance = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(scrollDistance)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return scrollVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n shouldConstrain: () => boolean\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n shouldConstrain,\n constrain,\n toggleActive\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType,\n pixelTolerance: number\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function usePixelTolerance(bound: number, snap: number): boolean {\n return deltaAbs(bound, snap) <= 1\n }\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const { min, max } = scrollBounds\n const snap = scrollBounds.constrain(snapAligned)\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return max\n if (isLast) return min\n if (usePixelTolerance(min, snap)) return min\n if (usePixelTolerance(max, snap)) return max\n return snap\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n location: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(location.get())\n if (direction === -1) return reachedMin(location.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollSnaps: number[],\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n if (scrollSnaps.length === 1) return [slideIndexes]\n if (doNotContain) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return target\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationsType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start()\n } else {\n animation.update()\n animation.render(1)\n animation.update()\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType,\n eventHandler: EventHandlerType,\n watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n const focusListenerOptions = { passive: true, capture: true }\n let lastTabPressTime = 0\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchFocus) return\n\n function defaultCallback(index: number): void {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n eventHandler.emit('slideFocusStart')\n root.scrollLeft = 0\n\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n\n eventHandler.emit('slideFocus')\n }\n\n eventStore.add(document, 'keydown', registerTabPress, false)\n\n slides.forEach((slide, slideIndex) => {\n eventStore.add(\n slide,\n 'focus',\n (evt: FocusEvent) => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex)\n }\n },\n focusListenerOptions\n )\n })\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let previousTarget: number | null = null\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n\n const newTarget = roundToTwoDecimals(axis.direction(target))\n if (newTarget === previousTarget) return\n\n containerStyle.transform = translate(newTarget)\n previousTarget = newTarget\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n location: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => (location.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: (array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number,\n pixelTolerance: number\n): SlidesToScrollType {\n const { startEdge, endEdge, direction } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB, index) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction(startGap) : 0\n const gapB = !loop && isLast ? direction(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n","import { Alignment } from './Alignment'\nimport {\n Animations,\n AnimationsType,\n AnimationsUpdateType,\n AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n animation: AnimationsType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n previousLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options\n\n // Measurements\n const pixelTolerance = 2\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const axis = Axis(scrollAxis, direction)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap,\n pixelTolerance\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll,\n pixelTolerance\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationsUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationsRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: { loop }\n },\n alpha\n ) => {\n const shouldSettle = scrollBody.settled()\n const withinBounds = !scrollBounds.shouldConstrain()\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n if (hasSettledAndIdle) animation.stop()\n\n const interpolatedLocation =\n location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n offsetLocation.set(interpolatedLocation)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n\n if (hasSettledAndIdle) eventHandler.emit('settle')\n if (!hasSettled) eventHandler.emit('scroll')\n }\n\n const animation = Animations(\n ownerDocument,\n ownerWindow,\n () => update(engine),\n (alpha: number) => render(engine, alpha)\n )\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const previousLocation = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n previousLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollBody,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n containSnaps,\n containScroll,\n scrollSnaps,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore,\n eventHandler,\n watchFocus\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(\n axis,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n offsetLocation,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n previousLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n }\n\n return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n slideFocusStart: 'slideFocusStart'\n slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n let listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n function clear(): void {\n listeners = {}\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on,\n clear\n }\n return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf | null\n containScroll: ScrollContainOptionType\n direction: AxisDirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial>\n\nexport type OptionsHandlerType = {\n mergeOptions: (\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: (options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const eventHandler = EventHandler()\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = (customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = [].slice.call(customSlides || container.children)\n }\n\n function createEngine(options: OptionsType): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.animation.init()\n engine.slidesInView.init()\n engine.slideFocus.init(self)\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n engine.animation.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n eventHandler.clear()\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody\n .useBaseFriction()\n .useDuration(jump === true ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.offsetLocation.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\ndeclare namespace EmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n"],"names":["isNumber","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","node","type","handler","options","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","isTouchEvt","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","currentLocation","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","logInterval","startEvent","lastEvent","readTime","evtAxis","property","coord","expired","diffDrag","diffTime","isFlick","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","offset","top","right","bottom","left","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","concat","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","diffSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","roundingSafety","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","remainingGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","every","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","inViewMatch","notInViewMatch","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts new file mode 100644 index 0000000000..aab7131a9f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts @@ -0,0 +1,11 @@ +export { EmblaOptionsType } from './components/Options'; +export { EmblaEventType } from './components/EventHandler'; +export { EmblaPluginType } from './components/Plugins'; +export { EmblaCarouselType } from './components/EmblaCarousel'; +export { default } from './components/EmblaCarousel'; +export { CreatePluginType, EmblaPluginsType } from './components/Plugins'; +export { CreateOptionsType } from './components/Options'; +export { OptionsHandlerType } from './components/OptionsHandler'; +export { EmblaEventListType } from './components/EventHandler'; +export { EngineType } from './components/Engine'; +export { ScrollBodyType } from './components/ScrollBody'; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json new file mode 100644 index 0000000000..91c98da6cb --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json @@ -0,0 +1,52 @@ +{ + "name": "embla-carousel", + "version": "8.6.0", + "author": "David Jerleke", + "description": "A lightweight carousel library with fluid motion and great swipe precision", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "main": "embla-carousel.cjs.js", + "type": "commonjs" +} diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts new file mode 100644 index 0000000000..72f1015b7b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts @@ -0,0 +1,5 @@ +export type AlignmentOptionType = 'start' | 'center' | 'end' | ((viewSize: number, snapSize: number, index: number) => number); +export type AlignmentType = { + measure: (n: number, index: number) => number; +}; +export declare function Alignment(align: AlignmentOptionType, viewSize: number): AlignmentType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts new file mode 100644 index 0000000000..693defa7e7 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts @@ -0,0 +1,13 @@ +import { EngineType } from './Engine'; +import { WindowType } from './utils'; +export type AnimationsUpdateType = (engine: EngineType) => void; +export type AnimationsRenderType = (engine: EngineType, alpha: number) => void; +export type AnimationsType = { + init: () => void; + destroy: () => void; + start: () => void; + stop: () => void; + update: () => void; + render: (alpha: number) => void; +}; +export declare function Animations(ownerDocument: Document, ownerWindow: WindowType, update: () => void, render: (alpha: number) => void): AnimationsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts new file mode 100644 index 0000000000..a0735f7e04 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts @@ -0,0 +1,14 @@ +import { NodeRectType } from './NodeRects'; +export type AxisOptionType = 'x' | 'y'; +export type AxisDirectionOptionType = 'ltr' | 'rtl'; +type AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'; +export type AxisType = { + scroll: AxisOptionType; + cross: AxisOptionType; + startEdge: AxisEdgeType; + endEdge: AxisEdgeType; + measureSize: (nodeRect: NodeRectType) => number; + direction: (n: number) => number; +}; +export declare function Axis(axis: AxisOptionType, contentDirection: AxisDirectionOptionType): AxisType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts new file mode 100644 index 0000000000..964a47d838 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts @@ -0,0 +1,7 @@ +export type CounterType = { + get: () => number; + set: (n: number) => CounterType; + add: (n: number) => CounterType; + clone: () => CounterType; +}; +export declare function Counter(max: number, start: number, loop: boolean): CounterType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts new file mode 100644 index 0000000000..0685db222c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts @@ -0,0 +1,21 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { AnimationsType } from './Animations'; +import { CounterType } from './Counter'; +import { DragTrackerType, PointerEventType } from './DragTracker'; +import { EventHandlerType } from './EventHandler'; +import { AxisType } from './Axis'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollTargetType } from './ScrollTarget'; +import { ScrollToType } from './ScrollTo'; +import { Vector1DType } from './Vector1d'; +import { PercentOfViewType } from './PercentOfView'; +import { WindowType } from './utils'; +type DragHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: PointerEventType) => boolean | void; +export type DragHandlerOptionType = boolean | DragHandlerCallbackType; +export type DragHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; + pointerDown: () => boolean; +}; +export declare function DragHandler(axis: AxisType, rootNode: HTMLElement, ownerDocument: Document, ownerWindow: WindowType, target: Vector1DType, dragTracker: DragTrackerType, location: Vector1DType, animation: AnimationsType, scrollTo: ScrollToType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, index: CounterType, eventHandler: EventHandlerType, percentOfView: PercentOfViewType, dragFree: boolean, dragThreshold: number, skipSnaps: boolean, baseFriction: number, watchDrag: DragHandlerOptionType): DragHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts new file mode 100644 index 0000000000..0f4b4cb4a0 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts @@ -0,0 +1,10 @@ +import { AxisOptionType, AxisType } from './Axis'; +import { WindowType } from './utils'; +export type PointerEventType = TouchEvent | MouseEvent; +export type DragTrackerType = { + pointerDown: (evt: PointerEventType) => number; + pointerMove: (evt: PointerEventType) => number; + pointerUp: (evt: PointerEventType) => number; + readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number; +}; +export declare function DragTracker(axis: AxisType, ownerWindow: WindowType): DragTrackerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts new file mode 100644 index 0000000000..5ad21c978a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts @@ -0,0 +1,32 @@ +import { EngineType } from './Engine'; +import { EventHandlerType } from './EventHandler'; +import { EmblaOptionsType } from './Options'; +import { EmblaPluginsType, EmblaPluginType } from './Plugins'; +export type EmblaCarouselType = { + canScrollNext: () => boolean; + canScrollPrev: () => boolean; + containerNode: () => HTMLElement; + internalEngine: () => EngineType; + destroy: () => void; + off: EventHandlerType['off']; + on: EventHandlerType['on']; + emit: EventHandlerType['emit']; + plugins: () => EmblaPluginsType; + previousScrollSnap: () => number; + reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void; + rootNode: () => HTMLElement; + scrollNext: (jump?: boolean) => void; + scrollPrev: (jump?: boolean) => void; + scrollProgress: () => number; + scrollSnapList: () => number[]; + scrollTo: (index: number, jump?: boolean) => void; + selectedScrollSnap: () => number; + slideNodes: () => HTMLElement[]; + slidesInView: () => number[]; + slidesNotInView: () => number[]; +}; +declare function EmblaCarousel(root: HTMLElement, userOptions?: EmblaOptionsType, userPlugins?: EmblaPluginType[]): EmblaCarouselType; +declare namespace EmblaCarousel { + let globalOptions: EmblaOptionsType | undefined; +} +export default EmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts new file mode 100644 index 0000000000..18071b0136 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts @@ -0,0 +1,64 @@ +import { AnimationsType } from './Animations'; +import { AxisType } from './Axis'; +import { CounterType } from './Counter'; +import { DragHandlerType } from './DragHandler'; +import { EventHandlerType } from './EventHandler'; +import { EventStoreType } from './EventStore'; +import { LimitType } from './Limit'; +import { NodeRectType } from './NodeRects'; +import { OptionsType } from './Options'; +import { PercentOfViewType } from './PercentOfView'; +import { ResizeHandlerType } from './ResizeHandler'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollBoundsType } from './ScrollBounds'; +import { ScrollLooperType } from './ScrollLooper'; +import { ScrollProgressType } from './ScrollProgress'; +import { SlideRegistryType } from './SlideRegistry'; +import { ScrollTargetType } from './ScrollTarget'; +import { ScrollToType } from './ScrollTo'; +import { SlideFocusType } from './SlideFocus'; +import { SlideLooperType } from './SlideLooper'; +import { SlidesHandlerType } from './SlidesHandler'; +import { SlidesInViewType } from './SlidesInView'; +import { SlidesToScrollType } from './SlidesToScroll'; +import { TranslateType } from './Translate'; +import { WindowType } from './utils'; +import { Vector1DType } from './Vector1d'; +export type EngineType = { + ownerDocument: Document; + ownerWindow: WindowType; + eventHandler: EventHandlerType; + axis: AxisType; + animation: AnimationsType; + scrollBounds: ScrollBoundsType; + scrollLooper: ScrollLooperType; + scrollProgress: ScrollProgressType; + index: CounterType; + indexPrevious: CounterType; + limit: LimitType; + location: Vector1DType; + offsetLocation: Vector1DType; + previousLocation: Vector1DType; + options: OptionsType; + percentOfView: PercentOfViewType; + scrollBody: ScrollBodyType; + dragHandler: DragHandlerType; + eventStore: EventStoreType; + slideLooper: SlideLooperType; + slidesInView: SlidesInViewType; + slidesToScroll: SlidesToScrollType; + target: Vector1DType; + translate: TranslateType; + resizeHandler: ResizeHandlerType; + slidesHandler: SlidesHandlerType; + scrollTo: ScrollToType; + scrollTarget: ScrollTargetType; + scrollSnapList: number[]; + scrollSnaps: number[]; + slideIndexes: number[]; + slideFocus: SlideFocusType; + slideRegistry: SlideRegistryType['slideRegistry']; + containerRect: NodeRectType; + slideRects: NodeRectType[]; +}; +export declare function Engine(root: HTMLElement, container: HTMLElement, slides: HTMLElement[], ownerDocument: Document, ownerWindow: WindowType, options: OptionsType, eventHandler: EventHandlerType): EngineType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts new file mode 100644 index 0000000000..4c8159f16e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts @@ -0,0 +1,27 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +type CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void; +export type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]; +export interface EmblaEventListType { + init: 'init'; + pointerDown: 'pointerDown'; + pointerUp: 'pointerUp'; + slidesChanged: 'slidesChanged'; + slidesInView: 'slidesInView'; + scroll: 'scroll'; + select: 'select'; + settle: 'settle'; + destroy: 'destroy'; + reInit: 'reInit'; + resize: 'resize'; + slideFocusStart: 'slideFocusStart'; + slideFocus: 'slideFocus'; +} +export type EventHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + emit: (evt: EmblaEventType) => EventHandlerType; + on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; + off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; + clear: () => void; +}; +export declare function EventHandler(): EventHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts new file mode 100644 index 0000000000..8b0f89ed6a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts @@ -0,0 +1,9 @@ +type EventNameType = keyof DocumentEventMap | keyof WindowEventMap; +type EventHandlerType = (evt: any) => void; +type EventOptionsType = boolean | AddEventListenerOptions | undefined; +export type EventStoreType = { + add: (node: EventTarget, type: EventNameType, handler: EventHandlerType, options?: EventOptionsType) => EventStoreType; + clear: () => void; +}; +export declare function EventStore(): EventStoreType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts new file mode 100644 index 0000000000..b6499b04a8 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts @@ -0,0 +1,11 @@ +export type LimitType = { + min: number; + max: number; + length: number; + constrain: (n: number) => number; + reachedAny: (n: number) => boolean; + reachedMax: (n: number) => boolean; + reachedMin: (n: number) => boolean; + removeOffset: (n: number) => number; +}; +export declare function Limit(min?: number, max?: number): LimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts new file mode 100644 index 0000000000..c76623b8e7 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts @@ -0,0 +1,12 @@ +export type NodeRectType = { + top: number; + right: number; + bottom: number; + left: number; + width: number; + height: number; +}; +export type NodeRectsType = { + measure: (node: HTMLElement) => NodeRectType; +}; +export declare function NodeRects(): NodeRectsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts new file mode 100644 index 0000000000..168867d04a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts @@ -0,0 +1,40 @@ +import { AlignmentOptionType } from './Alignment'; +import { AxisDirectionOptionType, AxisOptionType } from './Axis'; +import { SlidesToScrollOptionType } from './SlidesToScroll'; +import { ScrollContainOptionType } from './ScrollContain'; +import { DragHandlerOptionType } from './DragHandler'; +import { ResizeHandlerOptionType } from './ResizeHandler'; +import { SlidesHandlerOptionType } from './SlidesHandler'; +import { SlidesInViewOptionsType } from './SlidesInView'; +import { FocusHandlerOptionType } from './SlideFocus'; +export type LooseOptionsType = { + [key: string]: unknown; +}; +export type CreateOptionsType = Type & { + active: boolean; + breakpoints: { + [key: string]: Omit>, 'breakpoints'>; + }; +}; +export type OptionsType = CreateOptionsType<{ + align: AlignmentOptionType; + axis: AxisOptionType; + container: string | HTMLElement | null; + slides: string | HTMLElement[] | NodeListOf | null; + containScroll: ScrollContainOptionType; + direction: AxisDirectionOptionType; + slidesToScroll: SlidesToScrollOptionType; + dragFree: boolean; + dragThreshold: number; + inViewThreshold: SlidesInViewOptionsType; + loop: boolean; + skipSnaps: boolean; + duration: number; + startIndex: number; + watchDrag: DragHandlerOptionType; + watchResize: ResizeHandlerOptionType; + watchSlides: SlidesHandlerOptionType; + watchFocus: FocusHandlerOptionType; +}>; +export declare const defaultOptions: OptionsType; +export type EmblaOptionsType = Partial; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts new file mode 100644 index 0000000000..54ed8aa7ac --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts @@ -0,0 +1,10 @@ +import { LooseOptionsType, CreateOptionsType } from './Options'; +import { WindowType } from './utils'; +type OptionsType = Partial>; +export type OptionsHandlerType = { + mergeOptions: (optionsA: TypeA, optionsB?: TypeB) => TypeA; + optionsAtMedia: (options: Type) => Type; + optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]; +}; +export declare function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts new file mode 100644 index 0000000000..b51b35a13b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts @@ -0,0 +1,4 @@ +export type PercentOfViewType = { + measure: (n: number) => number; +}; +export declare function PercentOfView(viewSize: number): PercentOfViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts new file mode 100644 index 0000000000..9518557993 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts @@ -0,0 +1,16 @@ +import { CreateOptionsType, LooseOptionsType } from './Options'; +import { EmblaCarouselType } from './EmblaCarousel'; +import { OptionsHandlerType } from './OptionsHandler'; +export type LoosePluginType = { + [key: string]: unknown; +}; +export type CreatePluginType = TypeA & { + name: string; + options: Partial>; + init: (embla: EmblaCarouselType, OptionsHandler: OptionsHandlerType) => void; + destroy: () => void; +}; +export interface EmblaPluginsType { + [key: string]: CreatePluginType; +} +export type EmblaPluginType = EmblaPluginsType[keyof EmblaPluginsType]; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts new file mode 100644 index 0000000000..da2688d0b4 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts @@ -0,0 +1,8 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { OptionsHandlerType } from './OptionsHandler'; +import { EmblaPluginsType, EmblaPluginType } from './Plugins'; +export type PluginsHandlerType = { + init: (emblaApi: EmblaCarouselType, plugins: EmblaPluginType[]) => EmblaPluginsType; + destroy: () => void; +}; +export declare function PluginsHandler(optionsHandler: OptionsHandlerType): PluginsHandlerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts new file mode 100644 index 0000000000..111a58d053 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts @@ -0,0 +1,13 @@ +import { AxisType } from './Axis'; +import { EmblaCarouselType } from './EmblaCarousel'; +import { EventHandlerType } from './EventHandler'; +import { NodeRectsType } from './NodeRects'; +import { WindowType } from './utils'; +type ResizeHandlerCallbackType = (emblaApi: EmblaCarouselType, entries: ResizeObserverEntry[]) => boolean | void; +export type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType; +export type ResizeHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; +}; +export declare function ResizeHandler(container: HTMLElement, eventHandler: EventHandlerType, ownerWindow: WindowType, slides: HTMLElement[], axis: AxisType, watchResize: ResizeHandlerOptionType, nodeRects: NodeRectsType): ResizeHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts new file mode 100644 index 0000000000..d7dc7d5e57 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts @@ -0,0 +1,13 @@ +import { Vector1DType } from './Vector1d'; +export type ScrollBodyType = { + direction: () => number; + duration: () => number; + velocity: () => number; + seek: () => ScrollBodyType; + settled: () => boolean; + useBaseFriction: () => ScrollBodyType; + useBaseDuration: () => ScrollBodyType; + useFriction: (n: number) => ScrollBodyType; + useDuration: (n: number) => ScrollBodyType; +}; +export declare function ScrollBody(location: Vector1DType, offsetLocation: Vector1DType, previousLocation: Vector1DType, target: Vector1DType, baseDuration: number, baseFriction: number): ScrollBodyType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts new file mode 100644 index 0000000000..d040f09a2d --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts @@ -0,0 +1,10 @@ +import { LimitType } from './Limit'; +import { ScrollBodyType } from './ScrollBody'; +import { Vector1DType } from './Vector1d'; +import { PercentOfViewType } from './PercentOfView'; +export type ScrollBoundsType = { + shouldConstrain: () => boolean; + constrain: (pointerDown: boolean) => void; + toggleActive: (active: boolean) => void; +}; +export declare function ScrollBounds(limit: LimitType, location: Vector1DType, target: Vector1DType, scrollBody: ScrollBodyType, percentOfView: PercentOfViewType): ScrollBoundsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts new file mode 100644 index 0000000000..66f5907b81 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts @@ -0,0 +1,7 @@ +import { LimitType } from './Limit'; +export type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'; +export type ScrollContainType = { + snapsContained: number[]; + scrollContainLimit: LimitType; +}; +export declare function ScrollContain(viewSize: number, contentSize: number, snapsAligned: number[], containScroll: ScrollContainOptionType, pixelTolerance: number): ScrollContainType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts new file mode 100644 index 0000000000..3d417cca34 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts @@ -0,0 +1,5 @@ +import { LimitType } from './Limit'; +export type ScrollLimitType = { + limit: LimitType; +}; +export declare function ScrollLimit(contentSize: number, scrollSnaps: number[], loop: boolean): ScrollLimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts new file mode 100644 index 0000000000..97b1b1ba38 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts @@ -0,0 +1,6 @@ +import { LimitType } from './Limit'; +import { Vector1DType } from './Vector1d'; +export type ScrollLooperType = { + loop: (direction: number) => void; +}; +export declare function ScrollLooper(contentSize: number, limit: LimitType, location: Vector1DType, vectors: Vector1DType[]): ScrollLooperType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts new file mode 100644 index 0000000000..224e4d385e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts @@ -0,0 +1,5 @@ +import { LimitType } from './Limit'; +export type ScrollProgressType = { + get: (n: number) => number; +}; +export declare function ScrollProgress(limit: LimitType): ScrollProgressType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts new file mode 100644 index 0000000000..55e7bac4f0 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts @@ -0,0 +1,9 @@ +import { AlignmentType } from './Alignment'; +import { AxisType } from './Axis'; +import { NodeRectType } from './NodeRects'; +import { SlidesToScrollType } from './SlidesToScroll'; +export type ScrollSnapsType = { + snaps: number[]; + snapsAligned: number[]; +}; +export declare function ScrollSnaps(axis: AxisType, alignment: AlignmentType, containerRect: NodeRectType, slideRects: NodeRectType[], slidesToScroll: SlidesToScrollType): ScrollSnapsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts new file mode 100644 index 0000000000..3d26624f0e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts @@ -0,0 +1,12 @@ +import { LimitType } from './Limit'; +import { Vector1DType } from './Vector1d'; +export type TargetType = { + distance: number; + index: number; +}; +export type ScrollTargetType = { + byIndex: (target: number, direction: number) => TargetType; + byDistance: (force: number, snap: boolean) => TargetType; + shortcut: (target: number, direction: number) => number; +}; +export declare function ScrollTarget(loop: boolean, scrollSnaps: number[], contentSize: number, limit: LimitType, targetVector: Vector1DType): ScrollTargetType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts new file mode 100644 index 0000000000..1291ed8628 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts @@ -0,0 +1,11 @@ +import { AnimationsType } from './Animations'; +import { CounterType } from './Counter'; +import { EventHandlerType } from './EventHandler'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollTargetType } from './ScrollTarget'; +import { Vector1DType } from './Vector1d'; +export type ScrollToType = { + distance: (n: number, snap: boolean) => void; + index: (n: number, direction: number) => void; +}; +export declare function ScrollTo(animation: AnimationsType, indexCurrent: CounterType, indexPrevious: CounterType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, targetVector: Vector1DType, eventHandler: EventHandlerType): ScrollToType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts new file mode 100644 index 0000000000..6f962aae8a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts @@ -0,0 +1,13 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { EventHandlerType } from './EventHandler'; +import { EventStoreType } from './EventStore'; +import { ScrollBodyType } from './ScrollBody'; +import { ScrollToType } from './ScrollTo'; +import { SlideRegistryType } from './SlideRegistry'; +type FocusHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: FocusEvent) => boolean | void; +export type FocusHandlerOptionType = boolean | FocusHandlerCallbackType; +export type SlideFocusType = { + init: (emblaApi: EmblaCarouselType) => void; +}; +export declare function SlideFocus(root: HTMLElement, slides: HTMLElement[], slideRegistry: SlideRegistryType['slideRegistry'], scrollTo: ScrollToType, scrollBody: ScrollBodyType, eventStore: EventStoreType, eventHandler: EventHandlerType, watchFocus: FocusHandlerOptionType): SlideFocusType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts new file mode 100644 index 0000000000..bb10e7df3c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts @@ -0,0 +1,18 @@ +import { AxisType } from './Axis'; +import { Vector1DType } from './Vector1d'; +import { TranslateType } from './Translate'; +type LoopPointType = { + loopPoint: number; + index: number; + translate: TranslateType; + slideLocation: Vector1DType; + target: () => number; +}; +export type SlideLooperType = { + canLoop: () => boolean; + clear: () => void; + loop: () => void; + loopPoints: LoopPointType[]; +}; +export declare function SlideLooper(axis: AxisType, viewSize: number, contentSize: number, slideSizes: number[], slideSizesWithGaps: number[], snaps: number[], scrollSnaps: number[], location: Vector1DType, slides: HTMLElement[]): SlideLooperType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts new file mode 100644 index 0000000000..d339b15eaa --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts @@ -0,0 +1,7 @@ +import { LimitType } from './Limit'; +import { ScrollContainOptionType } from './ScrollContain'; +import { SlidesToScrollType } from './SlidesToScroll'; +export type SlideRegistryType = { + slideRegistry: number[][]; +}; +export declare function SlideRegistry(containSnaps: boolean, containScroll: ScrollContainOptionType, scrollSnaps: number[], scrollContainLimit: LimitType, slidesToScroll: SlidesToScrollType, slideIndexes: number[]): SlideRegistryType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts new file mode 100644 index 0000000000..86961805cb --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts @@ -0,0 +1,10 @@ +import { AxisType } from './Axis'; +import { NodeRectType } from './NodeRects'; +import { WindowType } from './utils'; +export type SlideSizesType = { + slideSizes: number[]; + slideSizesWithGaps: number[]; + startGap: number; + endGap: number; +}; +export declare function SlideSizes(axis: AxisType, containerRect: NodeRectType, slideRects: NodeRectType[], slides: HTMLElement[], readEdgeGap: boolean, ownerWindow: WindowType): SlideSizesType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts new file mode 100644 index 0000000000..6115d5f30e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts @@ -0,0 +1,10 @@ +import { EmblaCarouselType } from './EmblaCarousel'; +import { EventHandlerType } from './EventHandler'; +type SlidesHandlerCallbackType = (emblaApi: EmblaCarouselType, mutations: MutationRecord[]) => boolean | void; +export type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType; +export type SlidesHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; +}; +export declare function SlidesHandler(container: HTMLElement, eventHandler: EventHandlerType, watchSlides: SlidesHandlerOptionType): SlidesHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts new file mode 100644 index 0000000000..943d05cd2b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts @@ -0,0 +1,8 @@ +import { EventHandlerType } from './EventHandler'; +export type SlidesInViewOptionsType = IntersectionObserverInit['threshold']; +export type SlidesInViewType = { + init: () => void; + destroy: () => void; + get: (inView?: boolean) => number[]; +}; +export declare function SlidesInView(container: HTMLElement, slides: HTMLElement[], eventHandler: EventHandlerType, threshold: SlidesInViewOptionsType): SlidesInViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts new file mode 100644 index 0000000000..129460e4af --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts @@ -0,0 +1,7 @@ +import { AxisType } from './Axis'; +import { NodeRectType } from './NodeRects'; +export type SlidesToScrollOptionType = 'auto' | number; +export type SlidesToScrollType = { + groupSlides: (array: Type[]) => Type[][]; +}; +export declare function SlidesToScroll(axis: AxisType, viewSize: number, slidesToScroll: SlidesToScrollOptionType, loop: boolean, containerRect: NodeRectType, slideRects: NodeRectType[], startGap: number, endGap: number, pixelTolerance: number): SlidesToScrollType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts new file mode 100644 index 0000000000..2d9c96118f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts @@ -0,0 +1,7 @@ +import { AxisType } from './Axis'; +export type TranslateType = { + clear: () => void; + to: (target: number) => void; + toggleActive: (active: boolean) => void; +}; +export declare function Translate(axis: AxisType, container: HTMLElement): TranslateType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts new file mode 100644 index 0000000000..9ff303c96b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts @@ -0,0 +1,7 @@ +export type Vector1DType = { + get: () => number; + set: (n: Vector1DType | number) => void; + add: (n: Vector1DType | number) => void; + subtract: (n: Vector1DType | number) => void; +}; +export declare function Vector1D(initialValue: number): Vector1DType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts new file mode 100644 index 0000000000..367767d6e8 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts @@ -0,0 +1,19 @@ +import { PointerEventType } from './DragTracker'; +export type WindowType = Window & typeof globalThis; +export declare function isNumber(subject: unknown): subject is number; +export declare function isString(subject: unknown): subject is string; +export declare function isBoolean(subject: unknown): subject is boolean; +export declare function isObject(subject: unknown): subject is Record; +export declare function mathAbs(n: number): number; +export declare function mathSign(n: number): number; +export declare function deltaAbs(valueB: number, valueA: number): number; +export declare function factorAbs(valueB: number, valueA: number): number; +export declare function roundToTwoDecimals(num: number): number; +export declare function arrayKeys(array: Type[]): number[]; +export declare function arrayLast(array: Type[]): Type; +export declare function arrayLastIndex(array: Type[]): number; +export declare function arrayIsLastIndex(array: Type[], index: number): boolean; +export declare function arrayFromNumber(n: number, startAt?: number): number[]; +export declare function objectKeys(object: Type): string[]; +export declare function objectsMergeDeep(objectA: Record, objectB: Record): Record; +export declare function isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js new file mode 100644 index 0000000000..5832ad542d --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js @@ -0,0 +1 @@ +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarousel=t()}(this,(function(){"use strict";function n(n){return"number"==typeof n}function t(n){return"string"==typeof n}function e(n){return"boolean"==typeof n}function r(n){return"[object Object]"===Object.prototype.toString.call(n)}function o(n){return Math.abs(n)}function i(n){return Math.sign(n)}function c(n,t){return o(n-t)}function u(n){return f(n).map(Number)}function s(n){return n[a(n)]}function a(n){return Math.max(0,n.length-1)}function d(n,t){return t===a(n)}function l(n,t=0){return Array.from(Array(n),((n,e)=>t+e))}function f(n){return Object.keys(n)}function p(n,t){return[n,t].reduce(((n,t)=>(f(t).forEach((e=>{const o=n[e],i=t[e],c=r(o)&&r(i);n[e]=c?p(o,i):i})),n)),{})}function m(n,t){return void 0!==t.MouseEvent&&n instanceof t.MouseEvent}function g(){let n=[];const t={add:function(e,r,o,i={passive:!0}){let c;if("addEventListener"in e)e.addEventListener(r,o,i),c=()=>e.removeEventListener(r,o,i);else{const n=e;n.addListener(o),c=()=>n.removeListener(o)}return n.push(c),t},clear:function(){n=n.filter((n=>n()))}};return t}function h(n,t,e,r){const o=g(),i=1e3/60;let c=null,u=0,s=0;function a(n){if(!s)return;c||(c=n,e(),e());const o=n-c;for(c=n,u+=o;u>=i;)e(),u-=i;r(u/i),s&&(s=t.requestAnimationFrame(a))}function d(){t.cancelAnimationFrame(s),c=null,u=0,s=0}return{init:function(){o.add(n,"visibilitychange",(()=>{n.hidden&&(c=null,u=0)}))},destroy:function(){d(),o.clear()},start:function(){s||(s=t.requestAnimationFrame(a))},stop:d,update:e,render:r}}function x(n=0,t=0){const e=o(n-t);function r(t){return tt}function c(n){return r(n)||i(n)}return{length:e,max:t,min:n,constrain:function(e){return c(e)?r(e)?n:t:e},reachedAny:c,reachedMax:i,reachedMin:r,removeOffset:function(n){return e?n-e*Math.ceil((n-t)/e):n}}}function y(n,t,e){const{constrain:r}=x(0,n),i=n+1;let c=u(t);function u(n){return e?o((i+n)%i):r(n)}function s(){return c}function a(){return y(n,s(),e)}const d={get:s,set:function(n){return c=u(n),d},add:function(n){return a().set(s()+n)},clone:a};return d}function v(n,t,r,u,s,a,d,l,f,p,h,y,v,b,S,w,E,L,D){const{cross:I,direction:M}=n,A=["INPUT","SELECT","TEXTAREA"],F={passive:!1},T=g(),O=g(),P=x(50,225).constrain(b.measure(20)),z={mouse:300,touch:400},H={mouse:500,touch:600},k=S?43:25;let V=!1,B=0,C=0,N=!1,R=!1,j=!1,G=!1;function q(n){if(!m(n,u)&&n.touches.length>=2)return U(n);const t=a.readPoint(n),e=a.readPoint(n,I),r=c(t,B),o=c(e,C);if(!R&&!G){if(!n.cancelable)return U(n);if(R=r>o,!R)return U(n)}const i=a.pointerMove(n);r>w&&(j=!0),p.useFriction(.3).useDuration(.75),l.start(),s.add(M(i)),n.preventDefault()}function U(n){const t=h.byDistance(0,!1).index!==y.get(),e=a.pointerUp(n)*(S?H:z)[G?"mouse":"touch"],r=function(n,t){const e=y.add(-1*i(n)),r=h.byDistance(n,!S).distance;return S||o(n)=2,e&&0!==n.button)return;if(function(n){const t=n.nodeName||"";return A.includes(t)}(n.target))return;N=!0,a.pointerDown(n),p.useFriction(0).useDuration(0),s.set(d),function(){const n=G?r:t;O.add(n,"touchmove",q,F).add(n,"touchend",U).add(n,"mousemove",q,F).add(n,"mouseup",U)}(),B=a.readPoint(n),C=a.readPoint(n,I),v.emit("pointerDown")}(o)}const i=t;T.add(i,"dragstart",(n=>n.preventDefault()),F).add(i,"touchmove",(()=>{}),F).add(i,"touchend",(()=>{})).add(i,"touchstart",o).add(i,"mousedown",o).add(i,"touchcancel",U).add(i,"contextmenu",U).add(i,"click",W,!0)},destroy:function(){T.clear(),O.clear()},pointerDown:function(){return N}}}function b(n,t){let e,r;function i(n){return n.timeStamp}function c(e,r){const o="client"+("x"===(r||n.scroll)?"X":"Y");return(m(e,t)?e:e.touches[0])[o]}return{pointerDown:function(n){return e=n,r=n,c(n)},pointerMove:function(n){const t=c(n)-c(r),o=i(n)-i(e)>170;return r=n,o&&(e=n),t},pointerUp:function(n){if(!e||!r)return 0;const t=c(r)-c(e),u=i(n)-i(e),s=i(n)-i(r)>170,a=t/u;return u&&!s&&o(a)>.1?a:0},readPoint:c}}function S(n,t,r,i,c,u,s){const a=[n].concat(i);let d,l,f=[],p=!1;function m(n){return c.measureSize(s.measure(n))}return{init:function(c){u&&(l=m(n),f=i.map(m),d=new ResizeObserver((r=>{(e(u)||u(c,r))&&function(e){for(const r of e){if(p)return;const e=r.target===n,u=i.indexOf(r.target),s=e?l:f[u];if(o(m(e?n:i[u])-s)>=.5){c.reInit(),t.emit("resize");break}}}(r)})),r.requestAnimationFrame((()=>{a.forEach((n=>d.observe(n)))})))},destroy:function(){p=!0,d&&d.disconnect()}}}function w(n,t,e,r,i){const c=i.measure(10),u=i.measure(50),s=x(.1,.99);let a=!1;function d(){return!a&&(!!n.reachedAny(e.get())&&!!n.reachedAny(t.get()))}return{shouldConstrain:d,constrain:function(i){if(!d())return;const a=n.reachedMin(t.get())?"min":"max",l=o(n[a]-t.get()),f=e.get()-t.get(),p=s.constrain(l/u);e.subtract(f*p),!i&&o(f)n.add(o)))}}}function L(n,t,e,r,c){const{reachedAny:u,removeOffset:a,constrain:d}=r;function l(n){return n.concat().sort(((n,t)=>o(n)-o(t)))[0]}function f(t,r){const o=[t,t+e,t-e];if(!n)return t;if(!r)return l(o);const c=o.filter((n=>i(n)===r));return c.length?l(c):s(o)-e}return{byDistance:function(e,r){const i=c.get()+e,{index:s,distance:l}=function(e){const r=n?a(e):d(e),i=t.map(((n,t)=>({diff:f(n-r,0),index:t}))).sort(((n,t)=>o(n.diff)-o(t.diff))),{index:c}=i[0];return{index:c,distance:r}}(i),p=!n&&u(i);return!r||p?{index:s,distance:e}:{index:s,distance:e+f(t[s]-l,0)}},byIndex:function(n,e){return{index:n,distance:f(t[n]-c.get(),e)}},shortcut:f}}function D(t,r,o,i,c,u,s,a){const d={passive:!0,capture:!0};let l=0;function f(n){"Tab"===n.code&&(l=(new Date).getTime())}return{init:function(p){a&&(u.add(document,"keydown",f,!1),r.forEach(((r,f)=>{u.add(r,"focus",(r=>{(e(a)||a(p,r))&&function(e){if((new Date).getTime()-l>10)return;s.emit("slideFocusStart"),t.scrollLeft=0;const r=o.findIndex((n=>n.includes(e)));n(r)&&(c.useDuration(0),i.index(r,0),s.emit("slideFocus"))}(f)}),d)})))}}}function I(t){let e=t;function r(t){return n(t)?t:t.get()}return{get:function(){return e},set:function(n){e=r(n)},add:function(n){e+=r(n)},subtract:function(n){e-=r(n)}}}function M(n,t){const e="x"===n.scroll?function(n){return`translate3d(${n}px,0px,0px)`}:function(n){return`translate3d(0px,${n}px,0px)`},r=t.style;let o=null,i=!1;return{clear:function(){i||(r.transform="",t.getAttribute("style")||t.removeAttribute("style"))},to:function(t){if(i)return;const c=(u=n.direction(t),Math.round(100*u)/100);var u;c!==o&&(r.transform=e(c),o=c)},toggleActive:function(n){i=!n}}}function A(n,t,e,r,o,i,c,s,a){const d=.5,l=u(o),f=u(o).reverse(),p=function(){const n=c[0];return h(g(f,n),e,!1)}().concat(function(){const n=t-c[0]-1;return h(g(l,n),-e,!0)}());function m(n,t){return n.reduce(((n,t)=>n-o[t]),t)}function g(n,t){return n.reduce(((n,e)=>m(n,t)>0?n.concat([e]):n),[])}function h(o,c,u){const l=function(n){return i.map(((e,o)=>({start:e-r[o]+d+n,end:e+t-d+n})))}(c);return o.map((t=>{const r=u?0:-e,o=u?e:0,i=u?"end":"start",c=l[t][i];return{index:t,loopPoint:c,slideLocation:I(-1),translate:M(n,a[t]),target:()=>s.get()>c?r:o}}))}return{canLoop:function(){return p.every((({index:n})=>m(l.filter((t=>t!==n)),t)<=.1))},clear:function(){p.forEach((n=>n.translate.clear()))},loop:function(){p.forEach((n=>{const{target:t,translate:e,slideLocation:r}=n,o=t();o!==r.get()&&(e.to(o),r.set(o))}))},loopPoints:p}}function F(n,t,r){let o,i=!1;return{init:function(c){r&&(o=new MutationObserver((n=>{i||(e(r)||r(c,n))&&function(n){for(const e of n)if("childList"===e.type){c.reInit(),t.emit("slidesChanged");break}}(n)})),o.observe(n,{childList:!0}))},destroy:function(){o&&o.disconnect(),i=!0}}}function T(n,t,e,r){const o={};let i,c=null,u=null,s=!1;return{init:function(){i=new IntersectionObserver((n=>{s||(n.forEach((n=>{const e=t.indexOf(n.target);o[e]=n})),c=null,u=null,e.emit("slidesInView"))}),{root:n.parentElement,threshold:r}),t.forEach((n=>i.observe(n)))},destroy:function(){i&&i.disconnect(),s=!0},get:function(n=!0){if(n&&c)return c;if(!n&&u)return u;const t=function(n){return f(o).reduce(((t,e)=>{const r=parseInt(e),{isIntersecting:i}=o[r];return(n&&i||!n&&!i)&&t.push(r),t}),[])}(n);return n&&(c=t),n||(u=t),t}}}function O(t,e,r,i,c,d,l,f,p){const{startEdge:m,endEdge:g,direction:h}=t,x=n(r);return{groupSlides:function(n){return x?function(n,t){return u(n).filter((n=>n%t==0)).map((e=>n.slice(e,e+t)))}(n,r):function(n){return n.length?u(n).reduce(((t,r,u)=>{const x=s(t)||0,y=0===x,v=r===a(n),b=c[m]-d[x][m],S=c[m]-d[r][g],w=!i&&y?h(l):0,E=o(S-(!i&&v?h(f):0)-(b+w));return u&&E>e+p&&t.push(r),v&&t.push(n.length),t}),[]).map(((t,e,r)=>{const o=Math.max(r[e-1]||0);return n.slice(o,t)})):[]}(n)}}}function P(n,e,r,f,p,m,P){const{align:z,axis:H,direction:k,startIndex:V,loop:B,duration:C,dragFree:N,dragThreshold:R,inViewThreshold:j,slidesToScroll:G,skipSnaps:q,containScroll:U,watchResize:W,watchSlides:$,watchDrag:Q,watchFocus:X}=m,Y={measure:function(n){const{offsetTop:t,offsetLeft:e,offsetWidth:r,offsetHeight:o}=n;return{top:t,right:e+r,bottom:t+o,left:e,width:r,height:o}}},J=Y.measure(e),K=r.map(Y.measure),Z=function(n,t){const e="rtl"===t,r="y"===n,o=!r&&e?-1:1;return{scroll:r?"y":"x",cross:r?"x":"y",startEdge:r?"top":e?"right":"left",endEdge:r?"bottom":e?"left":"right",measureSize:function(n){const{height:t,width:e}=n;return r?t:e},direction:function(n){return n*o}}}(H,k),_=Z.measureSize(J),nn=function(n){return{measure:function(t){return n*(t/100)}}}(_),tn=function(n,e){const r={start:function(){return 0},center:function(n){return o(n)/2},end:o};function o(n){return e-n}return{measure:function(o,i){return t(n)?r[n](o):n(e,o,i)}}}(z,_),en=!B&&!!U,rn=B||!!U,{slideSizes:on,slideSizesWithGaps:cn,startGap:un,endGap:sn}=function(n,t,e,r,i,c){const{measureSize:u,startEdge:a,endEdge:l}=n,f=e[0]&&i,p=function(){if(!f)return 0;const n=e[0];return o(t[a]-n[a])}(),m=function(){if(!f)return 0;const n=c.getComputedStyle(s(r));return parseFloat(n.getPropertyValue(`margin-${l}`))}(),g=e.map(u),h=e.map(((n,t,e)=>{const r=!t,o=d(e,t);return r?g[t]+p:o?g[t]+m:e[t+1][a]-n[a]})).map(o);return{slideSizes:g,slideSizesWithGaps:h,startGap:p,endGap:m}}(Z,J,K,r,rn,p),an=O(Z,_,G,B,J,K,un,sn,2),{snaps:dn,snapsAligned:ln}=function(n,t,e,r,i){const{startEdge:c,endEdge:u}=n,{groupSlides:a}=i,d=a(r).map((n=>s(n)[u]-n[0][c])).map(o).map(t.measure),l=r.map((n=>e[c]-n[c])).map((n=>-o(n))),f=a(l).map((n=>n[0])).map(((n,t)=>n+d[t]));return{snaps:l,snapsAligned:f}}(Z,tn,J,K,an),fn=-s(dn)+s(cn),{snapsContained:pn,scrollContainLimit:mn}=function(n,t,e,r,o){const i=x(-t+n,0),u=e.map(((n,t)=>{const{min:r,max:o}=i,c=i.constrain(n),u=!t,s=d(e,t);return u?o:s||l(r,c)?r:l(o,c)?o:c})).map((n=>parseFloat(n.toFixed(3)))),a=function(){const n=u[0],t=s(u);return x(u.lastIndexOf(n),u.indexOf(t)+1)}();function l(n,t){return c(n,t)<=1}return{snapsContained:function(){if(t<=n+o)return[i.max];if("keepSnaps"===r)return u;const{min:e,max:c}=a;return u.slice(e,c)}(),scrollContainLimit:a}}(_,fn,ln,U,2),gn=en?pn:ln,{limit:hn}=function(n,t,e){const r=t[0];return{limit:x(e?r-n:s(t),r)}}(fn,gn,B),xn=y(a(gn),V,B),yn=xn.clone(),vn=u(r),bn=h(f,p,(()=>(({dragHandler:n,scrollBody:t,scrollBounds:e,options:{loop:r}})=>{r||e.constrain(n.pointerDown()),t.seek()})(Hn)),(n=>(({scrollBody:n,translate:t,location:e,offsetLocation:r,previousLocation:o,scrollLooper:i,slideLooper:c,dragHandler:u,animation:s,eventHandler:a,scrollBounds:d,options:{loop:l}},f)=>{const p=n.settled(),m=!d.shouldConstrain(),g=l?p:p&&m,h=g&&!u.pointerDown();h&&s.stop();const x=e.get()*f+o.get()*(1-f);r.set(x),l&&(i.loop(n.direction()),c.loop()),t.to(r.get()),h&&a.emit("settle"),g||a.emit("scroll")})(Hn,n))),Sn=gn[xn.get()],wn=I(Sn),En=I(Sn),Ln=I(Sn),Dn=I(Sn),In=function(n,t,e,r,c,u){let s=0,a=0,d=c,l=u,f=n.get(),p=0;function m(n){return d=n,h}function g(n){return l=n,h}const h={direction:function(){return a},duration:function(){return d},velocity:function(){return s},seek:function(){const t=r.get()-n.get();let o=0;return d?(e.set(n),s+=t/d,s*=l,f+=s,n.add(s),o=f-p):(s=0,e.set(r),n.set(r),o=t),a=i(o),p=f,h},settled:function(){return o(r.get()-t.get())<.001},useBaseFriction:function(){return g(u)},useBaseDuration:function(){return m(c)},useFriction:g,useDuration:m};return h}(wn,Ln,En,Dn,C,.68),Mn=L(B,gn,fn,hn,Dn),An=function(n,t,e,r,o,i,c){function u(o){const u=o.distance,s=o.index!==t.get();i.add(u),u&&(r.duration()?n.start():(n.update(),n.render(1),n.update())),s&&(e.set(t.get()),t.set(o.index),c.emit("select"))}return{distance:function(n,t){u(o.byDistance(n,t))},index:function(n,e){const r=t.clone().set(n);u(o.byIndex(r.get(),e))}}}(bn,xn,yn,In,Mn,Dn,P),Fn=function(n){const{max:t,length:e}=n;return{get:function(n){return e?(n-t)/-e:0}}}(hn),Tn=g(),On=T(e,r,P,j),{slideRegistry:Pn}=function(n,t,e,r,o,i){const{groupSlides:c}=o,{min:u,max:f}=r;return{slideRegistry:function(){const r=c(i),o=!n||"keepSnaps"===t;return 1===e.length?[i]:o?r:r.slice(u,f).map(((n,t,e)=>{const r=!t,o=d(e,t);return r?l(s(e[0])+1):o?l(a(i)-s(e)[0]+1,s(e)[0]):n}))}()}}(en,U,gn,mn,an,vn),zn=D(n,r,Pn,An,In,Tn,P,X),Hn={ownerDocument:f,ownerWindow:p,eventHandler:P,containerRect:J,slideRects:K,animation:bn,axis:Z,dragHandler:v(Z,n,f,p,Dn,b(Z,p),wn,bn,An,In,Mn,xn,P,nn,N,R,q,.68,Q),eventStore:Tn,percentOfView:nn,index:xn,indexPrevious:yn,limit:hn,location:wn,offsetLocation:Ln,previousLocation:En,options:m,resizeHandler:S(e,P,p,r,Z,W,Y),scrollBody:In,scrollBounds:w(hn,Ln,Dn,In,nn),scrollLooper:E(fn,hn,Ln,[wn,Ln,En,Dn]),scrollProgress:Fn,scrollSnapList:gn.map(Fn.get),scrollSnaps:gn,scrollTarget:Mn,scrollTo:An,slideLooper:A(Z,_,fn,on,cn,dn,gn,Ln,r),slideFocus:zn,slidesHandler:F(e,P,$),slidesInView:On,slideIndexes:vn,slideRegistry:Pn,slidesToScroll:an,target:Dn,translate:M(Z,e)};return Hn}const z={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function H(n){function t(n,t){return p(n,t||{})}const e={mergeOptions:t,optionsAtMedia:function(e){const r=e.breakpoints||{},o=f(r).filter((t=>n.matchMedia(t).matches)).map((n=>r[n])).reduce(((n,e)=>t(n,e)),{});return t(e,o)},optionsMediaQueries:function(t){return t.map((n=>f(n.breakpoints||{}))).reduce(((n,t)=>n.concat(t)),[]).map(n.matchMedia)}};return e}function k(n,e,r){const o=n.ownerDocument,i=o.defaultView,c=H(i),u=function(n){let t=[];return{init:function(e,r){return t=r.filter((({options:t})=>!1!==n.optionsAtMedia(t).active)),t.forEach((t=>t.init(e,n))),r.reduce(((n,t)=>Object.assign(n,{[t.name]:t})),{})},destroy:function(){t=t.filter((n=>n.destroy()))}}}(c),s=g(),a=function(){let n,t={};function e(n){return t[n]||[]}const r={init:function(t){n=t},emit:function(t){return e(t).forEach((e=>e(n,t))),r},off:function(n,o){return t[n]=e(n).filter((n=>n!==o)),r},on:function(n,o){return t[n]=e(n).concat([o]),r},clear:function(){t={}}};return r}(),{mergeOptions:d,optionsAtMedia:l,optionsMediaQueries:f}=c,{on:p,off:m,emit:h}=a,x=A;let y,v,b,S,w=!1,E=d(z,k.globalOptions),L=d(E),D=[];function I(t){const e=P(n,b,S,o,i,t,a);if(t.loop&&!e.slideLooper.canLoop()){return I(Object.assign({},t,{loop:!1}))}return e}function M(e,r){w||(E=d(E,e),L=l(E),D=r||D,function(){const{container:e,slides:r}=L,o=t(e)?n.querySelector(e):e;b=o||n.children[0];const i=t(r)?b.querySelectorAll(r):r;S=[].slice.call(i||b.children)}(),y=I(L),f([E,...D.map((({options:n})=>n))]).forEach((n=>s.add(n,"change",A))),L.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(V),y.eventHandler.init(V),y.resizeHandler.init(V),y.slidesHandler.init(V),y.options.loop&&y.slideLooper.loop(),b.offsetParent&&S.length&&y.dragHandler.init(V),v=u.init(V,D)))}function A(n,t){const e=O();F(),M(d({startIndex:e},n),t),a.emit("reInit")}function F(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),u.destroy(),s.clear()}function T(n,t,e){L.active&&!w&&(y.scrollBody.useBaseFriction().useDuration(!0===t?0:L.duration),y.scrollTo.index(n,e||0))}function O(){return y.index.get()}const V={canScrollNext:function(){return y.index.add(1).get()!==O()},canScrollPrev:function(){return y.index.add(-1).get()!==O()},containerNode:function(){return b},internalEngine:function(){return y},destroy:function(){w||(w=!0,s.clear(),F(),a.emit("destroy"),a.clear())},off:m,on:p,emit:h,plugins:function(){return v},previousScrollSnap:function(){return y.indexPrevious.get()},reInit:x,rootNode:function(){return n},scrollNext:function(n){T(y.index.add(1).get(),n,-1)},scrollPrev:function(n){T(y.index.add(-1).get(),n,1)},scrollProgress:function(){return y.scrollProgress.get(y.offsetLocation.get())},scrollSnapList:function(){return y.scrollSnapList},scrollTo:T,selectedScrollSnap:O,slideNodes:function(){return S},slidesInView:function(){return y.slidesInView.get()},slidesNotInView:function(){return y.slidesInView.get(!1)}};return M(e,r),setTimeout((()=>a.emit("init")),0),V}return k.globalOptions=void 0,k})); diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts new file mode 100644 index 0000000000..72f1015b7b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts @@ -0,0 +1,5 @@ +export type AlignmentOptionType = 'start' | 'center' | 'end' | ((viewSize: number, snapSize: number, index: number) => number); +export type AlignmentType = { + measure: (n: number, index: number) => number; +}; +export declare function Alignment(align: AlignmentOptionType, viewSize: number): AlignmentType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts new file mode 100644 index 0000000000..0e8046f964 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts @@ -0,0 +1,13 @@ +import { EngineType } from './Engine.js'; +import { WindowType } from './utils.js'; +export type AnimationsUpdateType = (engine: EngineType) => void; +export type AnimationsRenderType = (engine: EngineType, alpha: number) => void; +export type AnimationsType = { + init: () => void; + destroy: () => void; + start: () => void; + stop: () => void; + update: () => void; + render: (alpha: number) => void; +}; +export declare function Animations(ownerDocument: Document, ownerWindow: WindowType, update: () => void, render: (alpha: number) => void): AnimationsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts new file mode 100644 index 0000000000..6387883614 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts @@ -0,0 +1,14 @@ +import { NodeRectType } from './NodeRects.js'; +export type AxisOptionType = 'x' | 'y'; +export type AxisDirectionOptionType = 'ltr' | 'rtl'; +type AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'; +export type AxisType = { + scroll: AxisOptionType; + cross: AxisOptionType; + startEdge: AxisEdgeType; + endEdge: AxisEdgeType; + measureSize: (nodeRect: NodeRectType) => number; + direction: (n: number) => number; +}; +export declare function Axis(axis: AxisOptionType, contentDirection: AxisDirectionOptionType): AxisType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts new file mode 100644 index 0000000000..964a47d838 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts @@ -0,0 +1,7 @@ +export type CounterType = { + get: () => number; + set: (n: number) => CounterType; + add: (n: number) => CounterType; + clone: () => CounterType; +}; +export declare function Counter(max: number, start: number, loop: boolean): CounterType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts new file mode 100644 index 0000000000..95ca6bc135 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts @@ -0,0 +1,21 @@ +import { EmblaCarouselType } from './EmblaCarousel.js'; +import { AnimationsType } from './Animations.js'; +import { CounterType } from './Counter.js'; +import { DragTrackerType, PointerEventType } from './DragTracker.js'; +import { EventHandlerType } from './EventHandler.js'; +import { AxisType } from './Axis.js'; +import { ScrollBodyType } from './ScrollBody.js'; +import { ScrollTargetType } from './ScrollTarget.js'; +import { ScrollToType } from './ScrollTo.js'; +import { Vector1DType } from './Vector1d.js'; +import { PercentOfViewType } from './PercentOfView.js'; +import { WindowType } from './utils.js'; +type DragHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: PointerEventType) => boolean | void; +export type DragHandlerOptionType = boolean | DragHandlerCallbackType; +export type DragHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; + pointerDown: () => boolean; +}; +export declare function DragHandler(axis: AxisType, rootNode: HTMLElement, ownerDocument: Document, ownerWindow: WindowType, target: Vector1DType, dragTracker: DragTrackerType, location: Vector1DType, animation: AnimationsType, scrollTo: ScrollToType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, index: CounterType, eventHandler: EventHandlerType, percentOfView: PercentOfViewType, dragFree: boolean, dragThreshold: number, skipSnaps: boolean, baseFriction: number, watchDrag: DragHandlerOptionType): DragHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts new file mode 100644 index 0000000000..d51b688974 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts @@ -0,0 +1,10 @@ +import { AxisOptionType, AxisType } from './Axis.js'; +import { WindowType } from './utils.js'; +export type PointerEventType = TouchEvent | MouseEvent; +export type DragTrackerType = { + pointerDown: (evt: PointerEventType) => number; + pointerMove: (evt: PointerEventType) => number; + pointerUp: (evt: PointerEventType) => number; + readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number; +}; +export declare function DragTracker(axis: AxisType, ownerWindow: WindowType): DragTrackerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts new file mode 100644 index 0000000000..192eb4c0e1 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts @@ -0,0 +1,32 @@ +import { EngineType } from './Engine.js'; +import { EventHandlerType } from './EventHandler.js'; +import { EmblaOptionsType } from './Options.js'; +import { EmblaPluginsType, EmblaPluginType } from './Plugins.js'; +export type EmblaCarouselType = { + canScrollNext: () => boolean; + canScrollPrev: () => boolean; + containerNode: () => HTMLElement; + internalEngine: () => EngineType; + destroy: () => void; + off: EventHandlerType['off']; + on: EventHandlerType['on']; + emit: EventHandlerType['emit']; + plugins: () => EmblaPluginsType; + previousScrollSnap: () => number; + reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void; + rootNode: () => HTMLElement; + scrollNext: (jump?: boolean) => void; + scrollPrev: (jump?: boolean) => void; + scrollProgress: () => number; + scrollSnapList: () => number[]; + scrollTo: (index: number, jump?: boolean) => void; + selectedScrollSnap: () => number; + slideNodes: () => HTMLElement[]; + slidesInView: () => number[]; + slidesNotInView: () => number[]; +}; +declare function EmblaCarousel(root: HTMLElement, userOptions?: EmblaOptionsType, userPlugins?: EmblaPluginType[]): EmblaCarouselType; +declare namespace EmblaCarousel { + let globalOptions: EmblaOptionsType | undefined; +} +export default EmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts new file mode 100644 index 0000000000..4eb32043a4 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts @@ -0,0 +1,64 @@ +import { AnimationsType } from './Animations.js'; +import { AxisType } from './Axis.js'; +import { CounterType } from './Counter.js'; +import { DragHandlerType } from './DragHandler.js'; +import { EventHandlerType } from './EventHandler.js'; +import { EventStoreType } from './EventStore.js'; +import { LimitType } from './Limit.js'; +import { NodeRectType } from './NodeRects.js'; +import { OptionsType } from './Options.js'; +import { PercentOfViewType } from './PercentOfView.js'; +import { ResizeHandlerType } from './ResizeHandler.js'; +import { ScrollBodyType } from './ScrollBody.js'; +import { ScrollBoundsType } from './ScrollBounds.js'; +import { ScrollLooperType } from './ScrollLooper.js'; +import { ScrollProgressType } from './ScrollProgress.js'; +import { SlideRegistryType } from './SlideRegistry.js'; +import { ScrollTargetType } from './ScrollTarget.js'; +import { ScrollToType } from './ScrollTo.js'; +import { SlideFocusType } from './SlideFocus.js'; +import { SlideLooperType } from './SlideLooper.js'; +import { SlidesHandlerType } from './SlidesHandler.js'; +import { SlidesInViewType } from './SlidesInView.js'; +import { SlidesToScrollType } from './SlidesToScroll.js'; +import { TranslateType } from './Translate.js'; +import { WindowType } from './utils.js'; +import { Vector1DType } from './Vector1d.js'; +export type EngineType = { + ownerDocument: Document; + ownerWindow: WindowType; + eventHandler: EventHandlerType; + axis: AxisType; + animation: AnimationsType; + scrollBounds: ScrollBoundsType; + scrollLooper: ScrollLooperType; + scrollProgress: ScrollProgressType; + index: CounterType; + indexPrevious: CounterType; + limit: LimitType; + location: Vector1DType; + offsetLocation: Vector1DType; + previousLocation: Vector1DType; + options: OptionsType; + percentOfView: PercentOfViewType; + scrollBody: ScrollBodyType; + dragHandler: DragHandlerType; + eventStore: EventStoreType; + slideLooper: SlideLooperType; + slidesInView: SlidesInViewType; + slidesToScroll: SlidesToScrollType; + target: Vector1DType; + translate: TranslateType; + resizeHandler: ResizeHandlerType; + slidesHandler: SlidesHandlerType; + scrollTo: ScrollToType; + scrollTarget: ScrollTargetType; + scrollSnapList: number[]; + scrollSnaps: number[]; + slideIndexes: number[]; + slideFocus: SlideFocusType; + slideRegistry: SlideRegistryType['slideRegistry']; + containerRect: NodeRectType; + slideRects: NodeRectType[]; +}; +export declare function Engine(root: HTMLElement, container: HTMLElement, slides: HTMLElement[], ownerDocument: Document, ownerWindow: WindowType, options: OptionsType, eventHandler: EventHandlerType): EngineType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts new file mode 100644 index 0000000000..9b6bddde44 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts @@ -0,0 +1,27 @@ +import { EmblaCarouselType } from './EmblaCarousel.js'; +type CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void; +export type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]; +export interface EmblaEventListType { + init: 'init'; + pointerDown: 'pointerDown'; + pointerUp: 'pointerUp'; + slidesChanged: 'slidesChanged'; + slidesInView: 'slidesInView'; + scroll: 'scroll'; + select: 'select'; + settle: 'settle'; + destroy: 'destroy'; + reInit: 'reInit'; + resize: 'resize'; + slideFocusStart: 'slideFocusStart'; + slideFocus: 'slideFocus'; +} +export type EventHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + emit: (evt: EmblaEventType) => EventHandlerType; + on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; + off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; + clear: () => void; +}; +export declare function EventHandler(): EventHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts new file mode 100644 index 0000000000..8b0f89ed6a --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts @@ -0,0 +1,9 @@ +type EventNameType = keyof DocumentEventMap | keyof WindowEventMap; +type EventHandlerType = (evt: any) => void; +type EventOptionsType = boolean | AddEventListenerOptions | undefined; +export type EventStoreType = { + add: (node: EventTarget, type: EventNameType, handler: EventHandlerType, options?: EventOptionsType) => EventStoreType; + clear: () => void; +}; +export declare function EventStore(): EventStoreType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts new file mode 100644 index 0000000000..b6499b04a8 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts @@ -0,0 +1,11 @@ +export type LimitType = { + min: number; + max: number; + length: number; + constrain: (n: number) => number; + reachedAny: (n: number) => boolean; + reachedMax: (n: number) => boolean; + reachedMin: (n: number) => boolean; + removeOffset: (n: number) => number; +}; +export declare function Limit(min?: number, max?: number): LimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts new file mode 100644 index 0000000000..c76623b8e7 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts @@ -0,0 +1,12 @@ +export type NodeRectType = { + top: number; + right: number; + bottom: number; + left: number; + width: number; + height: number; +}; +export type NodeRectsType = { + measure: (node: HTMLElement) => NodeRectType; +}; +export declare function NodeRects(): NodeRectsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts new file mode 100644 index 0000000000..e61de6fc1c --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts @@ -0,0 +1,40 @@ +import { AlignmentOptionType } from './Alignment.js'; +import { AxisDirectionOptionType, AxisOptionType } from './Axis.js'; +import { SlidesToScrollOptionType } from './SlidesToScroll.js'; +import { ScrollContainOptionType } from './ScrollContain.js'; +import { DragHandlerOptionType } from './DragHandler.js'; +import { ResizeHandlerOptionType } from './ResizeHandler.js'; +import { SlidesHandlerOptionType } from './SlidesHandler.js'; +import { SlidesInViewOptionsType } from './SlidesInView.js'; +import { FocusHandlerOptionType } from './SlideFocus.js'; +export type LooseOptionsType = { + [key: string]: unknown; +}; +export type CreateOptionsType = Type & { + active: boolean; + breakpoints: { + [key: string]: Omit>, 'breakpoints'>; + }; +}; +export type OptionsType = CreateOptionsType<{ + align: AlignmentOptionType; + axis: AxisOptionType; + container: string | HTMLElement | null; + slides: string | HTMLElement[] | NodeListOf | null; + containScroll: ScrollContainOptionType; + direction: AxisDirectionOptionType; + slidesToScroll: SlidesToScrollOptionType; + dragFree: boolean; + dragThreshold: number; + inViewThreshold: SlidesInViewOptionsType; + loop: boolean; + skipSnaps: boolean; + duration: number; + startIndex: number; + watchDrag: DragHandlerOptionType; + watchResize: ResizeHandlerOptionType; + watchSlides: SlidesHandlerOptionType; + watchFocus: FocusHandlerOptionType; +}>; +export declare const defaultOptions: OptionsType; +export type EmblaOptionsType = Partial; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts new file mode 100644 index 0000000000..fa5fe21389 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts @@ -0,0 +1,10 @@ +import { LooseOptionsType, CreateOptionsType } from './Options.js'; +import { WindowType } from './utils.js'; +type OptionsType = Partial>; +export type OptionsHandlerType = { + mergeOptions: (optionsA: TypeA, optionsB?: TypeB) => TypeA; + optionsAtMedia: (options: Type) => Type; + optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]; +}; +export declare function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts new file mode 100644 index 0000000000..b51b35a13b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts @@ -0,0 +1,4 @@ +export type PercentOfViewType = { + measure: (n: number) => number; +}; +export declare function PercentOfView(viewSize: number): PercentOfViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts new file mode 100644 index 0000000000..6807d1b372 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts @@ -0,0 +1,16 @@ +import { CreateOptionsType, LooseOptionsType } from './Options.js'; +import { EmblaCarouselType } from './EmblaCarousel.js'; +import { OptionsHandlerType } from './OptionsHandler.js'; +export type LoosePluginType = { + [key: string]: unknown; +}; +export type CreatePluginType = TypeA & { + name: string; + options: Partial>; + init: (embla: EmblaCarouselType, OptionsHandler: OptionsHandlerType) => void; + destroy: () => void; +}; +export interface EmblaPluginsType { + [key: string]: CreatePluginType; +} +export type EmblaPluginType = EmblaPluginsType[keyof EmblaPluginsType]; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts new file mode 100644 index 0000000000..5065388fcb --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts @@ -0,0 +1,8 @@ +import { EmblaCarouselType } from './EmblaCarousel.js'; +import { OptionsHandlerType } from './OptionsHandler.js'; +import { EmblaPluginsType, EmblaPluginType } from './Plugins.js'; +export type PluginsHandlerType = { + init: (emblaApi: EmblaCarouselType, plugins: EmblaPluginType[]) => EmblaPluginsType; + destroy: () => void; +}; +export declare function PluginsHandler(optionsHandler: OptionsHandlerType): PluginsHandlerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts new file mode 100644 index 0000000000..5536cd66da --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts @@ -0,0 +1,13 @@ +import { AxisType } from './Axis.js'; +import { EmblaCarouselType } from './EmblaCarousel.js'; +import { EventHandlerType } from './EventHandler.js'; +import { NodeRectsType } from './NodeRects.js'; +import { WindowType } from './utils.js'; +type ResizeHandlerCallbackType = (emblaApi: EmblaCarouselType, entries: ResizeObserverEntry[]) => boolean | void; +export type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType; +export type ResizeHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; +}; +export declare function ResizeHandler(container: HTMLElement, eventHandler: EventHandlerType, ownerWindow: WindowType, slides: HTMLElement[], axis: AxisType, watchResize: ResizeHandlerOptionType, nodeRects: NodeRectsType): ResizeHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts new file mode 100644 index 0000000000..1d669d8e4d --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts @@ -0,0 +1,13 @@ +import { Vector1DType } from './Vector1d.js'; +export type ScrollBodyType = { + direction: () => number; + duration: () => number; + velocity: () => number; + seek: () => ScrollBodyType; + settled: () => boolean; + useBaseFriction: () => ScrollBodyType; + useBaseDuration: () => ScrollBodyType; + useFriction: (n: number) => ScrollBodyType; + useDuration: (n: number) => ScrollBodyType; +}; +export declare function ScrollBody(location: Vector1DType, offsetLocation: Vector1DType, previousLocation: Vector1DType, target: Vector1DType, baseDuration: number, baseFriction: number): ScrollBodyType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts new file mode 100644 index 0000000000..89e28e64fc --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts @@ -0,0 +1,10 @@ +import { LimitType } from './Limit.js'; +import { ScrollBodyType } from './ScrollBody.js'; +import { Vector1DType } from './Vector1d.js'; +import { PercentOfViewType } from './PercentOfView.js'; +export type ScrollBoundsType = { + shouldConstrain: () => boolean; + constrain: (pointerDown: boolean) => void; + toggleActive: (active: boolean) => void; +}; +export declare function ScrollBounds(limit: LimitType, location: Vector1DType, target: Vector1DType, scrollBody: ScrollBodyType, percentOfView: PercentOfViewType): ScrollBoundsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts new file mode 100644 index 0000000000..e0b6cd3d02 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts @@ -0,0 +1,7 @@ +import { LimitType } from './Limit.js'; +export type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'; +export type ScrollContainType = { + snapsContained: number[]; + scrollContainLimit: LimitType; +}; +export declare function ScrollContain(viewSize: number, contentSize: number, snapsAligned: number[], containScroll: ScrollContainOptionType, pixelTolerance: number): ScrollContainType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts new file mode 100644 index 0000000000..fbf0c96bf6 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts @@ -0,0 +1,5 @@ +import { LimitType } from './Limit.js'; +export type ScrollLimitType = { + limit: LimitType; +}; +export declare function ScrollLimit(contentSize: number, scrollSnaps: number[], loop: boolean): ScrollLimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts new file mode 100644 index 0000000000..c4dd39bb42 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts @@ -0,0 +1,6 @@ +import { LimitType } from './Limit.js'; +import { Vector1DType } from './Vector1d.js'; +export type ScrollLooperType = { + loop: (direction: number) => void; +}; +export declare function ScrollLooper(contentSize: number, limit: LimitType, location: Vector1DType, vectors: Vector1DType[]): ScrollLooperType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts new file mode 100644 index 0000000000..8c59e31b7d --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts @@ -0,0 +1,5 @@ +import { LimitType } from './Limit.js'; +export type ScrollProgressType = { + get: (n: number) => number; +}; +export declare function ScrollProgress(limit: LimitType): ScrollProgressType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts new file mode 100644 index 0000000000..01754a1a73 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts @@ -0,0 +1,9 @@ +import { AlignmentType } from './Alignment.js'; +import { AxisType } from './Axis.js'; +import { NodeRectType } from './NodeRects.js'; +import { SlidesToScrollType } from './SlidesToScroll.js'; +export type ScrollSnapsType = { + snaps: number[]; + snapsAligned: number[]; +}; +export declare function ScrollSnaps(axis: AxisType, alignment: AlignmentType, containerRect: NodeRectType, slideRects: NodeRectType[], slidesToScroll: SlidesToScrollType): ScrollSnapsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts new file mode 100644 index 0000000000..5ab5188bf2 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts @@ -0,0 +1,12 @@ +import { LimitType } from './Limit.js'; +import { Vector1DType } from './Vector1d.js'; +export type TargetType = { + distance: number; + index: number; +}; +export type ScrollTargetType = { + byIndex: (target: number, direction: number) => TargetType; + byDistance: (force: number, snap: boolean) => TargetType; + shortcut: (target: number, direction: number) => number; +}; +export declare function ScrollTarget(loop: boolean, scrollSnaps: number[], contentSize: number, limit: LimitType, targetVector: Vector1DType): ScrollTargetType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts new file mode 100644 index 0000000000..115603c2db --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts @@ -0,0 +1,11 @@ +import { AnimationsType } from './Animations.js'; +import { CounterType } from './Counter.js'; +import { EventHandlerType } from './EventHandler.js'; +import { ScrollBodyType } from './ScrollBody.js'; +import { ScrollTargetType } from './ScrollTarget.js'; +import { Vector1DType } from './Vector1d.js'; +export type ScrollToType = { + distance: (n: number, snap: boolean) => void; + index: (n: number, direction: number) => void; +}; +export declare function ScrollTo(animation: AnimationsType, indexCurrent: CounterType, indexPrevious: CounterType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, targetVector: Vector1DType, eventHandler: EventHandlerType): ScrollToType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts new file mode 100644 index 0000000000..508a3bf745 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts @@ -0,0 +1,13 @@ +import { EmblaCarouselType } from './EmblaCarousel.js'; +import { EventHandlerType } from './EventHandler.js'; +import { EventStoreType } from './EventStore.js'; +import { ScrollBodyType } from './ScrollBody.js'; +import { ScrollToType } from './ScrollTo.js'; +import { SlideRegistryType } from './SlideRegistry.js'; +type FocusHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: FocusEvent) => boolean | void; +export type FocusHandlerOptionType = boolean | FocusHandlerCallbackType; +export type SlideFocusType = { + init: (emblaApi: EmblaCarouselType) => void; +}; +export declare function SlideFocus(root: HTMLElement, slides: HTMLElement[], slideRegistry: SlideRegistryType['slideRegistry'], scrollTo: ScrollToType, scrollBody: ScrollBodyType, eventStore: EventStoreType, eventHandler: EventHandlerType, watchFocus: FocusHandlerOptionType): SlideFocusType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts new file mode 100644 index 0000000000..d44fe20758 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts @@ -0,0 +1,18 @@ +import { AxisType } from './Axis.js'; +import { Vector1DType } from './Vector1d.js'; +import { TranslateType } from './Translate.js'; +type LoopPointType = { + loopPoint: number; + index: number; + translate: TranslateType; + slideLocation: Vector1DType; + target: () => number; +}; +export type SlideLooperType = { + canLoop: () => boolean; + clear: () => void; + loop: () => void; + loopPoints: LoopPointType[]; +}; +export declare function SlideLooper(axis: AxisType, viewSize: number, contentSize: number, slideSizes: number[], slideSizesWithGaps: number[], snaps: number[], scrollSnaps: number[], location: Vector1DType, slides: HTMLElement[]): SlideLooperType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts new file mode 100644 index 0000000000..a2cba13562 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts @@ -0,0 +1,7 @@ +import { LimitType } from './Limit.js'; +import { ScrollContainOptionType } from './ScrollContain.js'; +import { SlidesToScrollType } from './SlidesToScroll.js'; +export type SlideRegistryType = { + slideRegistry: number[][]; +}; +export declare function SlideRegistry(containSnaps: boolean, containScroll: ScrollContainOptionType, scrollSnaps: number[], scrollContainLimit: LimitType, slidesToScroll: SlidesToScrollType, slideIndexes: number[]): SlideRegistryType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts new file mode 100644 index 0000000000..07184d8707 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts @@ -0,0 +1,10 @@ +import { AxisType } from './Axis.js'; +import { NodeRectType } from './NodeRects.js'; +import { WindowType } from './utils.js'; +export type SlideSizesType = { + slideSizes: number[]; + slideSizesWithGaps: number[]; + startGap: number; + endGap: number; +}; +export declare function SlideSizes(axis: AxisType, containerRect: NodeRectType, slideRects: NodeRectType[], slides: HTMLElement[], readEdgeGap: boolean, ownerWindow: WindowType): SlideSizesType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts new file mode 100644 index 0000000000..81d625b0dd --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts @@ -0,0 +1,10 @@ +import { EmblaCarouselType } from './EmblaCarousel.js'; +import { EventHandlerType } from './EventHandler.js'; +type SlidesHandlerCallbackType = (emblaApi: EmblaCarouselType, mutations: MutationRecord[]) => boolean | void; +export type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType; +export type SlidesHandlerType = { + init: (emblaApi: EmblaCarouselType) => void; + destroy: () => void; +}; +export declare function SlidesHandler(container: HTMLElement, eventHandler: EventHandlerType, watchSlides: SlidesHandlerOptionType): SlidesHandlerType; +export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts new file mode 100644 index 0000000000..0eca739360 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts @@ -0,0 +1,8 @@ +import { EventHandlerType } from './EventHandler.js'; +export type SlidesInViewOptionsType = IntersectionObserverInit['threshold']; +export type SlidesInViewType = { + init: () => void; + destroy: () => void; + get: (inView?: boolean) => number[]; +}; +export declare function SlidesInView(container: HTMLElement, slides: HTMLElement[], eventHandler: EventHandlerType, threshold: SlidesInViewOptionsType): SlidesInViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts new file mode 100644 index 0000000000..fd2cafc003 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts @@ -0,0 +1,7 @@ +import { AxisType } from './Axis.js'; +import { NodeRectType } from './NodeRects.js'; +export type SlidesToScrollOptionType = 'auto' | number; +export type SlidesToScrollType = { + groupSlides: (array: Type[]) => Type[][]; +}; +export declare function SlidesToScroll(axis: AxisType, viewSize: number, slidesToScroll: SlidesToScrollOptionType, loop: boolean, containerRect: NodeRectType, slideRects: NodeRectType[], startGap: number, endGap: number, pixelTolerance: number): SlidesToScrollType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts new file mode 100644 index 0000000000..5807eae5fd --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts @@ -0,0 +1,7 @@ +import { AxisType } from './Axis.js'; +export type TranslateType = { + clear: () => void; + to: (target: number) => void; + toggleActive: (active: boolean) => void; +}; +export declare function Translate(axis: AxisType, container: HTMLElement): TranslateType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts new file mode 100644 index 0000000000..9ff303c96b --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts @@ -0,0 +1,7 @@ +export type Vector1DType = { + get: () => number; + set: (n: Vector1DType | number) => void; + add: (n: Vector1DType | number) => void; + subtract: (n: Vector1DType | number) => void; +}; +export declare function Vector1D(initialValue: number): Vector1DType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts new file mode 100644 index 0000000000..554062f72e --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts @@ -0,0 +1,19 @@ +import { PointerEventType } from './DragTracker.js'; +export type WindowType = Window & typeof globalThis; +export declare function isNumber(subject: unknown): subject is number; +export declare function isString(subject: unknown): subject is string; +export declare function isBoolean(subject: unknown): subject is boolean; +export declare function isObject(subject: unknown): subject is Record; +export declare function mathAbs(n: number): number; +export declare function mathSign(n: number): number; +export declare function deltaAbs(valueB: number, valueA: number): number; +export declare function factorAbs(valueB: number, valueA: number): number; +export declare function roundToTwoDecimals(num: number): number; +export declare function arrayKeys(array: Type[]): number[]; +export declare function arrayLast(array: Type[]): Type; +export declare function arrayLastIndex(array: Type[]): number; +export declare function arrayIsLastIndex(array: Type[], index: number): boolean; +export declare function arrayFromNumber(n: number, startAt?: number): number[]; +export declare function objectKeys(object: Type): string[]; +export declare function objectsMergeDeep(objectA: Record, objectB: Record): Record; +export declare function isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js new file mode 100644 index 0000000000..5b0cee64a0 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js @@ -0,0 +1,1670 @@ +function isNumber(subject) { + return typeof subject === 'number'; +} +function isString(subject) { + return typeof subject === 'string'; +} +function isBoolean(subject) { + return typeof subject === 'boolean'; +} +function isObject(subject) { + return Object.prototype.toString.call(subject) === '[object Object]'; +} +function mathAbs(n) { + return Math.abs(n); +} +function mathSign(n) { + return Math.sign(n); +} +function deltaAbs(valueB, valueA) { + return mathAbs(valueB - valueA); +} +function factorAbs(valueB, valueA) { + if (valueB === 0 || valueA === 0) return 0; + if (mathAbs(valueB) <= mathAbs(valueA)) return 0; + const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA)); + return mathAbs(diff / valueB); +} +function roundToTwoDecimals(num) { + return Math.round(num * 100) / 100; +} +function arrayKeys(array) { + return objectKeys(array).map(Number); +} +function arrayLast(array) { + return array[arrayLastIndex(array)]; +} +function arrayLastIndex(array) { + return Math.max(0, array.length - 1); +} +function arrayIsLastIndex(array, index) { + return index === arrayLastIndex(array); +} +function arrayFromNumber(n, startAt = 0) { + return Array.from(Array(n), (_, i) => startAt + i); +} +function objectKeys(object) { + return Object.keys(object); +} +function objectsMergeDeep(objectA, objectB) { + return [objectA, objectB].reduce((mergedObjects, currentObject) => { + objectKeys(currentObject).forEach(key => { + const valueA = mergedObjects[key]; + const valueB = currentObject[key]; + const areObjects = isObject(valueA) && isObject(valueB); + mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB; + }); + return mergedObjects; + }, {}); +} +function isMouseEvent(evt, ownerWindow) { + return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent; +} + +function Alignment(align, viewSize) { + const predefined = { + start, + center, + end + }; + function start() { + return 0; + } + function center(n) { + return end(n) / 2; + } + function end(n) { + return viewSize - n; + } + function measure(n, index) { + if (isString(align)) return predefined[align](n); + return align(viewSize, n, index); + } + const self = { + measure + }; + return self; +} + +function EventStore() { + let listeners = []; + function add(node, type, handler, options = { + passive: true + }) { + let removeListener; + if ('addEventListener' in node) { + node.addEventListener(type, handler, options); + removeListener = () => node.removeEventListener(type, handler, options); + } else { + const legacyMediaQueryList = node; + legacyMediaQueryList.addListener(handler); + removeListener = () => legacyMediaQueryList.removeListener(handler); + } + listeners.push(removeListener); + return self; + } + function clear() { + listeners = listeners.filter(remove => remove()); + } + const self = { + add, + clear + }; + return self; +} + +function Animations(ownerDocument, ownerWindow, update, render) { + const documentVisibleHandler = EventStore(); + const fixedTimeStep = 1000 / 60; + let lastTimeStamp = null; + let accumulatedTime = 0; + let animationId = 0; + function init() { + documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => { + if (ownerDocument.hidden) reset(); + }); + } + function destroy() { + stop(); + documentVisibleHandler.clear(); + } + function animate(timeStamp) { + if (!animationId) return; + if (!lastTimeStamp) { + lastTimeStamp = timeStamp; + update(); + update(); + } + const timeElapsed = timeStamp - lastTimeStamp; + lastTimeStamp = timeStamp; + accumulatedTime += timeElapsed; + while (accumulatedTime >= fixedTimeStep) { + update(); + accumulatedTime -= fixedTimeStep; + } + const alpha = accumulatedTime / fixedTimeStep; + render(alpha); + if (animationId) { + animationId = ownerWindow.requestAnimationFrame(animate); + } + } + function start() { + if (animationId) return; + animationId = ownerWindow.requestAnimationFrame(animate); + } + function stop() { + ownerWindow.cancelAnimationFrame(animationId); + lastTimeStamp = null; + accumulatedTime = 0; + animationId = 0; + } + function reset() { + lastTimeStamp = null; + accumulatedTime = 0; + } + const self = { + init, + destroy, + start, + stop, + update, + render + }; + return self; +} + +function Axis(axis, contentDirection) { + const isRightToLeft = contentDirection === 'rtl'; + const isVertical = axis === 'y'; + const scroll = isVertical ? 'y' : 'x'; + const cross = isVertical ? 'x' : 'y'; + const sign = !isVertical && isRightToLeft ? -1 : 1; + const startEdge = getStartEdge(); + const endEdge = getEndEdge(); + function measureSize(nodeRect) { + const { + height, + width + } = nodeRect; + return isVertical ? height : width; + } + function getStartEdge() { + if (isVertical) return 'top'; + return isRightToLeft ? 'right' : 'left'; + } + function getEndEdge() { + if (isVertical) return 'bottom'; + return isRightToLeft ? 'left' : 'right'; + } + function direction(n) { + return n * sign; + } + const self = { + scroll, + cross, + startEdge, + endEdge, + measureSize, + direction + }; + return self; +} + +function Limit(min = 0, max = 0) { + const length = mathAbs(min - max); + function reachedMin(n) { + return n < min; + } + function reachedMax(n) { + return n > max; + } + function reachedAny(n) { + return reachedMin(n) || reachedMax(n); + } + function constrain(n) { + if (!reachedAny(n)) return n; + return reachedMin(n) ? min : max; + } + function removeOffset(n) { + if (!length) return n; + return n - length * Math.ceil((n - max) / length); + } + const self = { + length, + max, + min, + constrain, + reachedAny, + reachedMax, + reachedMin, + removeOffset + }; + return self; +} + +function Counter(max, start, loop) { + const { + constrain + } = Limit(0, max); + const loopEnd = max + 1; + let counter = withinLimit(start); + function withinLimit(n) { + return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd); + } + function get() { + return counter; + } + function set(n) { + counter = withinLimit(n); + return self; + } + function add(n) { + return clone().set(get() + n); + } + function clone() { + return Counter(max, get(), loop); + } + const self = { + get, + set, + add, + clone + }; + return self; +} + +function DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) { + const { + cross: crossAxis, + direction + } = axis; + const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']; + const nonPassiveEvent = { + passive: false + }; + const initEvents = EventStore(); + const dragEvents = EventStore(); + const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20)); + const snapForceBoost = { + mouse: 300, + touch: 400 + }; + const freeForceBoost = { + mouse: 500, + touch: 600 + }; + const baseSpeed = dragFree ? 43 : 25; + let isMoving = false; + let startScroll = 0; + let startCross = 0; + let pointerIsDown = false; + let preventScroll = false; + let preventClick = false; + let isMouse = false; + function init(emblaApi) { + if (!watchDrag) return; + function downIfAllowed(evt) { + if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt); + } + const node = rootNode; + initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true); + } + function destroy() { + initEvents.clear(); + dragEvents.clear(); + } + function addDragEvents() { + const node = isMouse ? ownerDocument : rootNode; + dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up); + } + function isFocusNode(node) { + const nodeName = node.nodeName || ''; + return focusNodes.includes(nodeName); + } + function forceBoost() { + const boost = dragFree ? freeForceBoost : snapForceBoost; + const type = isMouse ? 'mouse' : 'touch'; + return boost[type]; + } + function allowedForce(force, targetChanged) { + const next = index.add(mathSign(force) * -1); + const baseForce = scrollTarget.byDistance(force, !dragFree).distance; + if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce; + if (skipSnaps && targetChanged) return baseForce * 0.5; + return scrollTarget.byIndex(next.get(), 0).distance; + } + function down(evt) { + const isMouseEvt = isMouseEvent(evt, ownerWindow); + isMouse = isMouseEvt; + preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving; + isMoving = deltaAbs(target.get(), location.get()) >= 2; + if (isMouseEvt && evt.button !== 0) return; + if (isFocusNode(evt.target)) return; + pointerIsDown = true; + dragTracker.pointerDown(evt); + scrollBody.useFriction(0).useDuration(0); + target.set(location); + addDragEvents(); + startScroll = dragTracker.readPoint(evt); + startCross = dragTracker.readPoint(evt, crossAxis); + eventHandler.emit('pointerDown'); + } + function move(evt) { + const isTouchEvt = !isMouseEvent(evt, ownerWindow); + if (isTouchEvt && evt.touches.length >= 2) return up(evt); + const lastScroll = dragTracker.readPoint(evt); + const lastCross = dragTracker.readPoint(evt, crossAxis); + const diffScroll = deltaAbs(lastScroll, startScroll); + const diffCross = deltaAbs(lastCross, startCross); + if (!preventScroll && !isMouse) { + if (!evt.cancelable) return up(evt); + preventScroll = diffScroll > diffCross; + if (!preventScroll) return up(evt); + } + const diff = dragTracker.pointerMove(evt); + if (diffScroll > dragThreshold) preventClick = true; + scrollBody.useFriction(0.3).useDuration(0.75); + animation.start(); + target.add(direction(diff)); + evt.preventDefault(); + } + function up(evt) { + const currentLocation = scrollTarget.byDistance(0, false); + const targetChanged = currentLocation.index !== index.get(); + const rawForce = dragTracker.pointerUp(evt) * forceBoost(); + const force = allowedForce(direction(rawForce), targetChanged); + const forceFactor = factorAbs(rawForce, force); + const speed = baseSpeed - 10 * forceFactor; + const friction = baseFriction + forceFactor / 50; + preventScroll = false; + pointerIsDown = false; + dragEvents.clear(); + scrollBody.useDuration(speed).useFriction(friction); + scrollTo.distance(force, !dragFree); + isMouse = false; + eventHandler.emit('pointerUp'); + } + function click(evt) { + if (preventClick) { + evt.stopPropagation(); + evt.preventDefault(); + preventClick = false; + } + } + function pointerDown() { + return pointerIsDown; + } + const self = { + init, + destroy, + pointerDown + }; + return self; +} + +function DragTracker(axis, ownerWindow) { + const logInterval = 170; + let startEvent; + let lastEvent; + function readTime(evt) { + return evt.timeStamp; + } + function readPoint(evt, evtAxis) { + const property = evtAxis || axis.scroll; + const coord = `client${property === 'x' ? 'X' : 'Y'}`; + return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]; + } + function pointerDown(evt) { + startEvent = evt; + lastEvent = evt; + return readPoint(evt); + } + function pointerMove(evt) { + const diff = readPoint(evt) - readPoint(lastEvent); + const expired = readTime(evt) - readTime(startEvent) > logInterval; + lastEvent = evt; + if (expired) startEvent = evt; + return diff; + } + function pointerUp(evt) { + if (!startEvent || !lastEvent) return 0; + const diffDrag = readPoint(lastEvent) - readPoint(startEvent); + const diffTime = readTime(evt) - readTime(startEvent); + const expired = readTime(evt) - readTime(lastEvent) > logInterval; + const force = diffDrag / diffTime; + const isFlick = diffTime && !expired && mathAbs(force) > 0.1; + return isFlick ? force : 0; + } + const self = { + pointerDown, + pointerMove, + pointerUp, + readPoint + }; + return self; +} + +function NodeRects() { + function measure(node) { + const { + offsetTop, + offsetLeft, + offsetWidth, + offsetHeight + } = node; + const offset = { + top: offsetTop, + right: offsetLeft + offsetWidth, + bottom: offsetTop + offsetHeight, + left: offsetLeft, + width: offsetWidth, + height: offsetHeight + }; + return offset; + } + const self = { + measure + }; + return self; +} + +function PercentOfView(viewSize) { + function measure(n) { + return viewSize * (n / 100); + } + const self = { + measure + }; + return self; +} + +function ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) { + const observeNodes = [container].concat(slides); + let resizeObserver; + let containerSize; + let slideSizes = []; + let destroyed = false; + function readSize(node) { + return axis.measureSize(nodeRects.measure(node)); + } + function init(emblaApi) { + if (!watchResize) return; + containerSize = readSize(container); + slideSizes = slides.map(readSize); + function defaultCallback(entries) { + for (const entry of entries) { + if (destroyed) return; + const isContainer = entry.target === container; + const slideIndex = slides.indexOf(entry.target); + const lastSize = isContainer ? containerSize : slideSizes[slideIndex]; + const newSize = readSize(isContainer ? container : slides[slideIndex]); + const diffSize = mathAbs(newSize - lastSize); + if (diffSize >= 0.5) { + emblaApi.reInit(); + eventHandler.emit('resize'); + break; + } + } + } + resizeObserver = new ResizeObserver(entries => { + if (isBoolean(watchResize) || watchResize(emblaApi, entries)) { + defaultCallback(entries); + } + }); + ownerWindow.requestAnimationFrame(() => { + observeNodes.forEach(node => resizeObserver.observe(node)); + }); + } + function destroy() { + destroyed = true; + if (resizeObserver) resizeObserver.disconnect(); + } + const self = { + init, + destroy + }; + return self; +} + +function ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) { + let scrollVelocity = 0; + let scrollDirection = 0; + let scrollDuration = baseDuration; + let scrollFriction = baseFriction; + let rawLocation = location.get(); + let rawLocationPrevious = 0; + function seek() { + const displacement = target.get() - location.get(); + const isInstant = !scrollDuration; + let scrollDistance = 0; + if (isInstant) { + scrollVelocity = 0; + previousLocation.set(target); + location.set(target); + scrollDistance = displacement; + } else { + previousLocation.set(location); + scrollVelocity += displacement / scrollDuration; + scrollVelocity *= scrollFriction; + rawLocation += scrollVelocity; + location.add(scrollVelocity); + scrollDistance = rawLocation - rawLocationPrevious; + } + scrollDirection = mathSign(scrollDistance); + rawLocationPrevious = rawLocation; + return self; + } + function settled() { + const diff = target.get() - offsetLocation.get(); + return mathAbs(diff) < 0.001; + } + function duration() { + return scrollDuration; + } + function direction() { + return scrollDirection; + } + function velocity() { + return scrollVelocity; + } + function useBaseDuration() { + return useDuration(baseDuration); + } + function useBaseFriction() { + return useFriction(baseFriction); + } + function useDuration(n) { + scrollDuration = n; + return self; + } + function useFriction(n) { + scrollFriction = n; + return self; + } + const self = { + direction, + duration, + velocity, + seek, + settled, + useBaseFriction, + useBaseDuration, + useFriction, + useDuration + }; + return self; +} + +function ScrollBounds(limit, location, target, scrollBody, percentOfView) { + const pullBackThreshold = percentOfView.measure(10); + const edgeOffsetTolerance = percentOfView.measure(50); + const frictionLimit = Limit(0.1, 0.99); + let disabled = false; + function shouldConstrain() { + if (disabled) return false; + if (!limit.reachedAny(target.get())) return false; + if (!limit.reachedAny(location.get())) return false; + return true; + } + function constrain(pointerDown) { + if (!shouldConstrain()) return; + const edge = limit.reachedMin(location.get()) ? 'min' : 'max'; + const diffToEdge = mathAbs(limit[edge] - location.get()); + const diffToTarget = target.get() - location.get(); + const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance); + target.subtract(diffToTarget * friction); + if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) { + target.set(limit.constrain(target.get())); + scrollBody.useDuration(25).useBaseFriction(); + } + } + function toggleActive(active) { + disabled = !active; + } + const self = { + shouldConstrain, + constrain, + toggleActive + }; + return self; +} + +function ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) { + const scrollBounds = Limit(-contentSize + viewSize, 0); + const snapsBounded = measureBounded(); + const scrollContainLimit = findScrollContainLimit(); + const snapsContained = measureContained(); + function usePixelTolerance(bound, snap) { + return deltaAbs(bound, snap) <= 1; + } + function findScrollContainLimit() { + const startSnap = snapsBounded[0]; + const endSnap = arrayLast(snapsBounded); + const min = snapsBounded.lastIndexOf(startSnap); + const max = snapsBounded.indexOf(endSnap) + 1; + return Limit(min, max); + } + function measureBounded() { + return snapsAligned.map((snapAligned, index) => { + const { + min, + max + } = scrollBounds; + const snap = scrollBounds.constrain(snapAligned); + const isFirst = !index; + const isLast = arrayIsLastIndex(snapsAligned, index); + if (isFirst) return max; + if (isLast) return min; + if (usePixelTolerance(min, snap)) return min; + if (usePixelTolerance(max, snap)) return max; + return snap; + }).map(scrollBound => parseFloat(scrollBound.toFixed(3))); + } + function measureContained() { + if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]; + if (containScroll === 'keepSnaps') return snapsBounded; + const { + min, + max + } = scrollContainLimit; + return snapsBounded.slice(min, max); + } + const self = { + snapsContained, + scrollContainLimit + }; + return self; +} + +function ScrollLimit(contentSize, scrollSnaps, loop) { + const max = scrollSnaps[0]; + const min = loop ? max - contentSize : arrayLast(scrollSnaps); + const limit = Limit(min, max); + const self = { + limit + }; + return self; +} + +function ScrollLooper(contentSize, limit, location, vectors) { + const jointSafety = 0.1; + const min = limit.min + jointSafety; + const max = limit.max + jointSafety; + const { + reachedMin, + reachedMax + } = Limit(min, max); + function shouldLoop(direction) { + if (direction === 1) return reachedMax(location.get()); + if (direction === -1) return reachedMin(location.get()); + return false; + } + function loop(direction) { + if (!shouldLoop(direction)) return; + const loopDistance = contentSize * (direction * -1); + vectors.forEach(v => v.add(loopDistance)); + } + const self = { + loop + }; + return self; +} + +function ScrollProgress(limit) { + const { + max, + length + } = limit; + function get(n) { + const currentLocation = n - max; + return length ? currentLocation / -length : 0; + } + const self = { + get + }; + return self; +} + +function ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) { + const { + startEdge, + endEdge + } = axis; + const { + groupSlides + } = slidesToScroll; + const alignments = measureSizes().map(alignment.measure); + const snaps = measureUnaligned(); + const snapsAligned = measureAligned(); + function measureSizes() { + return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs); + } + function measureUnaligned() { + return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap)); + } + function measureAligned() { + return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]); + } + const self = { + snaps, + snapsAligned + }; + return self; +} + +function SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) { + const { + groupSlides + } = slidesToScroll; + const { + min, + max + } = scrollContainLimit; + const slideRegistry = createSlideRegistry(); + function createSlideRegistry() { + const groupedSlideIndexes = groupSlides(slideIndexes); + const doNotContain = !containSnaps || containScroll === 'keepSnaps'; + if (scrollSnaps.length === 1) return [slideIndexes]; + if (doNotContain) return groupedSlideIndexes; + return groupedSlideIndexes.slice(min, max).map((group, index, groups) => { + const isFirst = !index; + const isLast = arrayIsLastIndex(groups, index); + if (isFirst) { + const range = arrayLast(groups[0]) + 1; + return arrayFromNumber(range); + } + if (isLast) { + const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1; + return arrayFromNumber(range, arrayLast(groups)[0]); + } + return group; + }); + } + const self = { + slideRegistry + }; + return self; +} + +function ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) { + const { + reachedAny, + removeOffset, + constrain + } = limit; + function minDistance(distances) { + return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]; + } + function findTargetSnap(target) { + const distance = loop ? removeOffset(target) : constrain(target); + const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({ + diff: shortcut(snap - distance, 0), + index + })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff)); + const { + index + } = ascDiffsToSnaps[0]; + return { + index, + distance + }; + } + function shortcut(target, direction) { + const targets = [target, target + contentSize, target - contentSize]; + if (!loop) return target; + if (!direction) return minDistance(targets); + const matchingTargets = targets.filter(t => mathSign(t) === direction); + if (matchingTargets.length) return minDistance(matchingTargets); + return arrayLast(targets) - contentSize; + } + function byIndex(index, direction) { + const diffToSnap = scrollSnaps[index] - targetVector.get(); + const distance = shortcut(diffToSnap, direction); + return { + index, + distance + }; + } + function byDistance(distance, snap) { + const target = targetVector.get() + distance; + const { + index, + distance: targetSnapDistance + } = findTargetSnap(target); + const reachedBound = !loop && reachedAny(target); + if (!snap || reachedBound) return { + index, + distance + }; + const diffToSnap = scrollSnaps[index] - targetSnapDistance; + const snapDistance = distance + shortcut(diffToSnap, 0); + return { + index, + distance: snapDistance + }; + } + const self = { + byDistance, + byIndex, + shortcut + }; + return self; +} + +function ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) { + function scrollTo(target) { + const distanceDiff = target.distance; + const indexDiff = target.index !== indexCurrent.get(); + targetVector.add(distanceDiff); + if (distanceDiff) { + if (scrollBody.duration()) { + animation.start(); + } else { + animation.update(); + animation.render(1); + animation.update(); + } + } + if (indexDiff) { + indexPrevious.set(indexCurrent.get()); + indexCurrent.set(target.index); + eventHandler.emit('select'); + } + } + function distance(n, snap) { + const target = scrollTarget.byDistance(n, snap); + scrollTo(target); + } + function index(n, direction) { + const targetIndex = indexCurrent.clone().set(n); + const target = scrollTarget.byIndex(targetIndex.get(), direction); + scrollTo(target); + } + const self = { + distance, + index + }; + return self; +} + +function SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) { + const focusListenerOptions = { + passive: true, + capture: true + }; + let lastTabPressTime = 0; + function init(emblaApi) { + if (!watchFocus) return; + function defaultCallback(index) { + const nowTime = new Date().getTime(); + const diffTime = nowTime - lastTabPressTime; + if (diffTime > 10) return; + eventHandler.emit('slideFocusStart'); + root.scrollLeft = 0; + const group = slideRegistry.findIndex(group => group.includes(index)); + if (!isNumber(group)) return; + scrollBody.useDuration(0); + scrollTo.index(group, 0); + eventHandler.emit('slideFocus'); + } + eventStore.add(document, 'keydown', registerTabPress, false); + slides.forEach((slide, slideIndex) => { + eventStore.add(slide, 'focus', evt => { + if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) { + defaultCallback(slideIndex); + } + }, focusListenerOptions); + }); + } + function registerTabPress(event) { + if (event.code === 'Tab') lastTabPressTime = new Date().getTime(); + } + const self = { + init + }; + return self; +} + +function Vector1D(initialValue) { + let value = initialValue; + function get() { + return value; + } + function set(n) { + value = normalizeInput(n); + } + function add(n) { + value += normalizeInput(n); + } + function subtract(n) { + value -= normalizeInput(n); + } + function normalizeInput(n) { + return isNumber(n) ? n : n.get(); + } + const self = { + get, + set, + add, + subtract + }; + return self; +} + +function Translate(axis, container) { + const translate = axis.scroll === 'x' ? x : y; + const containerStyle = container.style; + let previousTarget = null; + let disabled = false; + function x(n) { + return `translate3d(${n}px,0px,0px)`; + } + function y(n) { + return `translate3d(0px,${n}px,0px)`; + } + function to(target) { + if (disabled) return; + const newTarget = roundToTwoDecimals(axis.direction(target)); + if (newTarget === previousTarget) return; + containerStyle.transform = translate(newTarget); + previousTarget = newTarget; + } + function toggleActive(active) { + disabled = !active; + } + function clear() { + if (disabled) return; + containerStyle.transform = ''; + if (!container.getAttribute('style')) container.removeAttribute('style'); + } + const self = { + clear, + to, + toggleActive + }; + return self; +} + +function SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) { + const roundingSafety = 0.5; + const ascItems = arrayKeys(slideSizesWithGaps); + const descItems = arrayKeys(slideSizesWithGaps).reverse(); + const loopPoints = startPoints().concat(endPoints()); + function removeSlideSizes(indexes, from) { + return indexes.reduce((a, i) => { + return a - slideSizesWithGaps[i]; + }, from); + } + function slidesInGap(indexes, gap) { + return indexes.reduce((a, i) => { + const remainingGap = removeSlideSizes(a, gap); + return remainingGap > 0 ? a.concat([i]) : a; + }, []); + } + function findSlideBounds(offset) { + return snaps.map((snap, index) => ({ + start: snap - slideSizes[index] + roundingSafety + offset, + end: snap + viewSize - roundingSafety + offset + })); + } + function findLoopPoints(indexes, offset, isEndEdge) { + const slideBounds = findSlideBounds(offset); + return indexes.map(index => { + const initial = isEndEdge ? 0 : -contentSize; + const altered = isEndEdge ? contentSize : 0; + const boundEdge = isEndEdge ? 'end' : 'start'; + const loopPoint = slideBounds[index][boundEdge]; + return { + index, + loopPoint, + slideLocation: Vector1D(-1), + translate: Translate(axis, slides[index]), + target: () => location.get() > loopPoint ? initial : altered + }; + }); + } + function startPoints() { + const gap = scrollSnaps[0]; + const indexes = slidesInGap(descItems, gap); + return findLoopPoints(indexes, contentSize, false); + } + function endPoints() { + const gap = viewSize - scrollSnaps[0] - 1; + const indexes = slidesInGap(ascItems, gap); + return findLoopPoints(indexes, -contentSize, true); + } + function canLoop() { + return loopPoints.every(({ + index + }) => { + const otherIndexes = ascItems.filter(i => i !== index); + return removeSlideSizes(otherIndexes, viewSize) <= 0.1; + }); + } + function loop() { + loopPoints.forEach(loopPoint => { + const { + target, + translate, + slideLocation + } = loopPoint; + const shiftLocation = target(); + if (shiftLocation === slideLocation.get()) return; + translate.to(shiftLocation); + slideLocation.set(shiftLocation); + }); + } + function clear() { + loopPoints.forEach(loopPoint => loopPoint.translate.clear()); + } + const self = { + canLoop, + clear, + loop, + loopPoints + }; + return self; +} + +function SlidesHandler(container, eventHandler, watchSlides) { + let mutationObserver; + let destroyed = false; + function init(emblaApi) { + if (!watchSlides) return; + function defaultCallback(mutations) { + for (const mutation of mutations) { + if (mutation.type === 'childList') { + emblaApi.reInit(); + eventHandler.emit('slidesChanged'); + break; + } + } + } + mutationObserver = new MutationObserver(mutations => { + if (destroyed) return; + if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) { + defaultCallback(mutations); + } + }); + mutationObserver.observe(container, { + childList: true + }); + } + function destroy() { + if (mutationObserver) mutationObserver.disconnect(); + destroyed = true; + } + const self = { + init, + destroy + }; + return self; +} + +function SlidesInView(container, slides, eventHandler, threshold) { + const intersectionEntryMap = {}; + let inViewCache = null; + let notInViewCache = null; + let intersectionObserver; + let destroyed = false; + function init() { + intersectionObserver = new IntersectionObserver(entries => { + if (destroyed) return; + entries.forEach(entry => { + const index = slides.indexOf(entry.target); + intersectionEntryMap[index] = entry; + }); + inViewCache = null; + notInViewCache = null; + eventHandler.emit('slidesInView'); + }, { + root: container.parentElement, + threshold + }); + slides.forEach(slide => intersectionObserver.observe(slide)); + } + function destroy() { + if (intersectionObserver) intersectionObserver.disconnect(); + destroyed = true; + } + function createInViewList(inView) { + return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => { + const index = parseInt(slideIndex); + const { + isIntersecting + } = intersectionEntryMap[index]; + const inViewMatch = inView && isIntersecting; + const notInViewMatch = !inView && !isIntersecting; + if (inViewMatch || notInViewMatch) list.push(index); + return list; + }, []); + } + function get(inView = true) { + if (inView && inViewCache) return inViewCache; + if (!inView && notInViewCache) return notInViewCache; + const slideIndexes = createInViewList(inView); + if (inView) inViewCache = slideIndexes; + if (!inView) notInViewCache = slideIndexes; + return slideIndexes; + } + const self = { + init, + destroy, + get + }; + return self; +} + +function SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) { + const { + measureSize, + startEdge, + endEdge + } = axis; + const withEdgeGap = slideRects[0] && readEdgeGap; + const startGap = measureStartGap(); + const endGap = measureEndGap(); + const slideSizes = slideRects.map(measureSize); + const slideSizesWithGaps = measureWithGaps(); + function measureStartGap() { + if (!withEdgeGap) return 0; + const slideRect = slideRects[0]; + return mathAbs(containerRect[startEdge] - slideRect[startEdge]); + } + function measureEndGap() { + if (!withEdgeGap) return 0; + const style = ownerWindow.getComputedStyle(arrayLast(slides)); + return parseFloat(style.getPropertyValue(`margin-${endEdge}`)); + } + function measureWithGaps() { + return slideRects.map((rect, index, rects) => { + const isFirst = !index; + const isLast = arrayIsLastIndex(rects, index); + if (isFirst) return slideSizes[index] + startGap; + if (isLast) return slideSizes[index] + endGap; + return rects[index + 1][startEdge] - rect[startEdge]; + }).map(mathAbs); + } + const self = { + slideSizes, + slideSizesWithGaps, + startGap, + endGap + }; + return self; +} + +function SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) { + const { + startEdge, + endEdge, + direction + } = axis; + const groupByNumber = isNumber(slidesToScroll); + function byNumber(array, groupSize) { + return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize)); + } + function bySize(array) { + if (!array.length) return []; + return arrayKeys(array).reduce((groups, rectB, index) => { + const rectA = arrayLast(groups) || 0; + const isFirst = rectA === 0; + const isLast = rectB === arrayLastIndex(array); + const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]; + const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]; + const gapA = !loop && isFirst ? direction(startGap) : 0; + const gapB = !loop && isLast ? direction(endGap) : 0; + const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA)); + if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB); + if (isLast) groups.push(array.length); + return groups; + }, []).map((currentSize, index, groups) => { + const previousSize = Math.max(groups[index - 1] || 0); + return array.slice(previousSize, currentSize); + }); + } + function groupSlides(array) { + return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array); + } + const self = { + groupSlides + }; + return self; +} + +function Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) { + // Options + const { + align, + axis: scrollAxis, + direction, + startIndex, + loop, + duration, + dragFree, + dragThreshold, + inViewThreshold, + slidesToScroll: groupSlides, + skipSnaps, + containScroll, + watchResize, + watchSlides, + watchDrag, + watchFocus + } = options; + // Measurements + const pixelTolerance = 2; + const nodeRects = NodeRects(); + const containerRect = nodeRects.measure(container); + const slideRects = slides.map(nodeRects.measure); + const axis = Axis(scrollAxis, direction); + const viewSize = axis.measureSize(containerRect); + const percentOfView = PercentOfView(viewSize); + const alignment = Alignment(align, viewSize); + const containSnaps = !loop && !!containScroll; + const readEdgeGap = loop || !!containScroll; + const { + slideSizes, + slideSizesWithGaps, + startGap, + endGap + } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow); + const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance); + const { + snaps, + snapsAligned + } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll); + const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps); + const { + snapsContained, + scrollContainLimit + } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance); + const scrollSnaps = containSnaps ? snapsContained : snapsAligned; + const { + limit + } = ScrollLimit(contentSize, scrollSnaps, loop); + // Indexes + const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop); + const indexPrevious = index.clone(); + const slideIndexes = arrayKeys(slides); + // Animation + const update = ({ + dragHandler, + scrollBody, + scrollBounds, + options: { + loop + } + }) => { + if (!loop) scrollBounds.constrain(dragHandler.pointerDown()); + scrollBody.seek(); + }; + const render = ({ + scrollBody, + translate, + location, + offsetLocation, + previousLocation, + scrollLooper, + slideLooper, + dragHandler, + animation, + eventHandler, + scrollBounds, + options: { + loop + } + }, alpha) => { + const shouldSettle = scrollBody.settled(); + const withinBounds = !scrollBounds.shouldConstrain(); + const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds; + const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown(); + if (hasSettledAndIdle) animation.stop(); + const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha); + offsetLocation.set(interpolatedLocation); + if (loop) { + scrollLooper.loop(scrollBody.direction()); + slideLooper.loop(); + } + translate.to(offsetLocation.get()); + if (hasSettledAndIdle) eventHandler.emit('settle'); + if (!hasSettled) eventHandler.emit('scroll'); + }; + const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha)); + // Shared + const friction = 0.68; + const startLocation = scrollSnaps[index.get()]; + const location = Vector1D(startLocation); + const previousLocation = Vector1D(startLocation); + const offsetLocation = Vector1D(startLocation); + const target = Vector1D(startLocation); + const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction); + const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target); + const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler); + const scrollProgress = ScrollProgress(limit); + const eventStore = EventStore(); + const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold); + const { + slideRegistry + } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes); + const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus); + // Engine + const engine = { + ownerDocument, + ownerWindow, + eventHandler, + containerRect, + slideRects, + animation, + axis, + dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag), + eventStore, + percentOfView, + index, + indexPrevious, + limit, + location, + offsetLocation, + previousLocation, + options, + resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects), + scrollBody, + scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView), + scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]), + scrollProgress, + scrollSnapList: scrollSnaps.map(scrollProgress.get), + scrollSnaps, + scrollTarget, + scrollTo, + slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides), + slideFocus, + slidesHandler: SlidesHandler(container, eventHandler, watchSlides), + slidesInView, + slideIndexes, + slideRegistry, + slidesToScroll, + target, + translate: Translate(axis, container) + }; + return engine; +} + +function EventHandler() { + let listeners = {}; + let api; + function init(emblaApi) { + api = emblaApi; + } + function getListeners(evt) { + return listeners[evt] || []; + } + function emit(evt) { + getListeners(evt).forEach(e => e(api, evt)); + return self; + } + function on(evt, cb) { + listeners[evt] = getListeners(evt).concat([cb]); + return self; + } + function off(evt, cb) { + listeners[evt] = getListeners(evt).filter(e => e !== cb); + return self; + } + function clear() { + listeners = {}; + } + const self = { + init, + emit, + off, + on, + clear + }; + return self; +} + +const defaultOptions = { + align: 'center', + axis: 'x', + container: null, + slides: null, + containScroll: 'trimSnaps', + direction: 'ltr', + slidesToScroll: 1, + inViewThreshold: 0, + breakpoints: {}, + dragFree: false, + dragThreshold: 10, + loop: false, + skipSnaps: false, + duration: 25, + startIndex: 0, + active: true, + watchDrag: true, + watchResize: true, + watchSlides: true, + watchFocus: true +}; + +function OptionsHandler(ownerWindow) { + function mergeOptions(optionsA, optionsB) { + return objectsMergeDeep(optionsA, optionsB || {}); + } + function optionsAtMedia(options) { + const optionsAtMedia = options.breakpoints || {}; + const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {}); + return mergeOptions(options, matchedMediaOptions); + } + function optionsMediaQueries(optionsList) { + return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia); + } + const self = { + mergeOptions, + optionsAtMedia, + optionsMediaQueries + }; + return self; +} + +function PluginsHandler(optionsHandler) { + let activePlugins = []; + function init(emblaApi, plugins) { + activePlugins = plugins.filter(({ + options + }) => optionsHandler.optionsAtMedia(options).active !== false); + activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler)); + return plugins.reduce((map, plugin) => Object.assign(map, { + [plugin.name]: plugin + }), {}); + } + function destroy() { + activePlugins = activePlugins.filter(plugin => plugin.destroy()); + } + const self = { + init, + destroy + }; + return self; +} + +function EmblaCarousel(root, userOptions, userPlugins) { + const ownerDocument = root.ownerDocument; + const ownerWindow = ownerDocument.defaultView; + const optionsHandler = OptionsHandler(ownerWindow); + const pluginsHandler = PluginsHandler(optionsHandler); + const mediaHandlers = EventStore(); + const eventHandler = EventHandler(); + const { + mergeOptions, + optionsAtMedia, + optionsMediaQueries + } = optionsHandler; + const { + on, + off, + emit + } = eventHandler; + const reInit = reActivate; + let destroyed = false; + let engine; + let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions); + let options = mergeOptions(optionsBase); + let pluginList = []; + let pluginApis; + let container; + let slides; + function storeElements() { + const { + container: userContainer, + slides: userSlides + } = options; + const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer; + container = customContainer || root.children[0]; + const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides; + slides = [].slice.call(customSlides || container.children); + } + function createEngine(options) { + const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler); + if (options.loop && !engine.slideLooper.canLoop()) { + const optionsWithoutLoop = Object.assign({}, options, { + loop: false + }); + return createEngine(optionsWithoutLoop); + } + return engine; + } + function activate(withOptions, withPlugins) { + if (destroyed) return; + optionsBase = mergeOptions(optionsBase, withOptions); + options = optionsAtMedia(optionsBase); + pluginList = withPlugins || pluginList; + storeElements(); + engine = createEngine(options); + optionsMediaQueries([optionsBase, ...pluginList.map(({ + options + }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate)); + if (!options.active) return; + engine.translate.to(engine.location.get()); + engine.animation.init(); + engine.slidesInView.init(); + engine.slideFocus.init(self); + engine.eventHandler.init(self); + engine.resizeHandler.init(self); + engine.slidesHandler.init(self); + if (engine.options.loop) engine.slideLooper.loop(); + if (container.offsetParent && slides.length) engine.dragHandler.init(self); + pluginApis = pluginsHandler.init(self, pluginList); + } + function reActivate(withOptions, withPlugins) { + const startIndex = selectedScrollSnap(); + deActivate(); + activate(mergeOptions({ + startIndex + }, withOptions), withPlugins); + eventHandler.emit('reInit'); + } + function deActivate() { + engine.dragHandler.destroy(); + engine.eventStore.clear(); + engine.translate.clear(); + engine.slideLooper.clear(); + engine.resizeHandler.destroy(); + engine.slidesHandler.destroy(); + engine.slidesInView.destroy(); + engine.animation.destroy(); + pluginsHandler.destroy(); + mediaHandlers.clear(); + } + function destroy() { + if (destroyed) return; + destroyed = true; + mediaHandlers.clear(); + deActivate(); + eventHandler.emit('destroy'); + eventHandler.clear(); + } + function scrollTo(index, jump, direction) { + if (!options.active || destroyed) return; + engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration); + engine.scrollTo.index(index, direction || 0); + } + function scrollNext(jump) { + const next = engine.index.add(1).get(); + scrollTo(next, jump, -1); + } + function scrollPrev(jump) { + const prev = engine.index.add(-1).get(); + scrollTo(prev, jump, 1); + } + function canScrollNext() { + const next = engine.index.add(1).get(); + return next !== selectedScrollSnap(); + } + function canScrollPrev() { + const prev = engine.index.add(-1).get(); + return prev !== selectedScrollSnap(); + } + function scrollSnapList() { + return engine.scrollSnapList; + } + function scrollProgress() { + return engine.scrollProgress.get(engine.offsetLocation.get()); + } + function selectedScrollSnap() { + return engine.index.get(); + } + function previousScrollSnap() { + return engine.indexPrevious.get(); + } + function slidesInView() { + return engine.slidesInView.get(); + } + function slidesNotInView() { + return engine.slidesInView.get(false); + } + function plugins() { + return pluginApis; + } + function internalEngine() { + return engine; + } + function rootNode() { + return root; + } + function containerNode() { + return container; + } + function slideNodes() { + return slides; + } + const self = { + canScrollNext, + canScrollPrev, + containerNode, + internalEngine, + destroy, + off, + on, + emit, + plugins, + previousScrollSnap, + reInit, + rootNode, + scrollNext, + scrollPrev, + scrollProgress, + scrollSnapList, + scrollTo, + selectedScrollSnap, + slideNodes, + slidesInView, + slidesNotInView + }; + activate(userOptions, userPlugins); + setTimeout(() => eventHandler.emit('init'), 0); + return self; +} +EmblaCarousel.globalOptions = undefined; + +export { EmblaCarousel as default }; +//# sourceMappingURL=embla-carousel.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map new file mode 100644 index 0000000000..de76d19cb2 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embla-carousel.esm.js","sources":["../src/components/utils.ts","../src/components/Alignment.ts","../src/components/EventStore.ts","../src/components/Animations.ts","../src/components/Axis.ts","../src/components/Limit.ts","../src/components/Counter.ts","../src/components/DragHandler.ts","../src/components/DragTracker.ts","../src/components/NodeRects.ts","../src/components/PercentOfView.ts","../src/components/ResizeHandler.ts","../src/components/ScrollBody.ts","../src/components/ScrollBounds.ts","../src/components/ScrollContain.ts","../src/components/ScrollLimit.ts","../src/components/ScrollLooper.ts","../src/components/ScrollProgress.ts","../src/components/ScrollSnaps.ts","../src/components/SlideRegistry.ts","../src/components/ScrollTarget.ts","../src/components/ScrollTo.ts","../src/components/SlideFocus.ts","../src/components/Vector1d.ts","../src/components/Translate.ts","../src/components/SlideLooper.ts","../src/components/SlidesHandler.ts","../src/components/SlidesInView.ts","../src/components/SlideSizes.ts","../src/components/SlidesToScroll.ts","../src/components/Engine.ts","../src/components/EventHandler.ts","../src/components/Options.ts","../src/components/OptionsHandler.ts","../src/components/PluginsHandler.ts","../src/components/EmblaCarousel.ts"],"sourcesContent":["import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record,\n objectB: Record\n): Record {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n init: () => void\n destroy: () => void\n start: () => void\n stop: () => void\n update: () => void\n render: (alpha: number) => void\n}\n\nexport function Animations(\n ownerDocument: Document,\n ownerWindow: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const documentVisibleHandler = EventStore()\n const fixedTimeStep = 1000 / 60\n\n let lastTimeStamp: number | null = null\n let accumulatedTime = 0\n let animationId = 0\n\n function init(): void {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset()\n })\n }\n\n function destroy(): void {\n stop()\n documentVisibleHandler.clear()\n }\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!animationId) return\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp\n update()\n update()\n }\n\n const timeElapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n accumulatedTime += timeElapsed\n\n while (accumulatedTime >= fixedTimeStep) {\n update()\n accumulatedTime -= fixedTimeStep\n }\n\n const alpha = accumulatedTime / fixedTimeStep\n render(alpha)\n\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n }\n\n function start(): void {\n if (animationId) return\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(): void {\n ownerWindow.cancelAnimationFrame(animationId)\n lastTimeStamp = null\n accumulatedTime = 0\n animationId = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n accumulatedTime = 0\n }\n\n const self: AnimationsType = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n }\n return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n direction: (n: number) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n contentDirection: AxisDirectionOptionType\n): AxisType {\n const isRightToLeft = contentDirection === 'rtl'\n const isVertical = axis === 'y'\n const scroll = isVertical ? 'y' : 'x'\n const cross = isVertical ? 'x' : 'y'\n const sign = !isVertical && isRightToLeft ? -1 : 1\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { height, width } = nodeRect\n return isVertical ? height : width\n }\n\n function getStartEdge(): AxisEdgeType {\n if (isVertical) return 'top'\n return isRightToLeft ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (isVertical) return 'bottom'\n return isRightToLeft ? 'left' : 'right'\n }\n\n function direction(n: number): number {\n return n * sign\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n }\n return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationsType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis, direction } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(0.75)\n animation.start()\n target.add(direction(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n preventClick = false\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n destroy,\n pointerDown\n }\n return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n","export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n","export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n const observeNodes = [container].concat(slides)\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n if (destroyed) return\n\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n emblaApi.reInit()\n eventHandler.emit('resize')\n\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach((node) => resizeObserver.observe(node))\n })\n }\n\n function destroy(): void {\n destroyed = true\n if (resizeObserver) resizeObserver.disconnect()\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let scrollVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const displacement = target.get() - location.get()\n const isInstant = !scrollDuration\n let scrollDistance = 0\n\n if (isInstant) {\n scrollVelocity = 0\n previousLocation.set(target)\n location.set(target)\n\n scrollDistance = displacement\n } else {\n previousLocation.set(location)\n\n scrollVelocity += displacement / scrollDuration\n scrollVelocity *= scrollFriction\n rawLocation += scrollVelocity\n location.add(scrollVelocity)\n\n scrollDistance = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(scrollDistance)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return scrollVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n shouldConstrain: () => boolean\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n shouldConstrain,\n constrain,\n toggleActive\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType,\n pixelTolerance: number\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function usePixelTolerance(bound: number, snap: number): boolean {\n return deltaAbs(bound, snap) <= 1\n }\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const { min, max } = scrollBounds\n const snap = scrollBounds.constrain(snapAligned)\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return max\n if (isLast) return min\n if (usePixelTolerance(min, snap)) return min\n if (usePixelTolerance(max, snap)) return max\n return snap\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n location: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(location.get())\n if (direction === -1) return reachedMin(location.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollSnaps: number[],\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n if (scrollSnaps.length === 1) return [slideIndexes]\n if (doNotContain) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return target\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationsType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start()\n } else {\n animation.update()\n animation.render(1)\n animation.update()\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType,\n eventHandler: EventHandlerType,\n watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n const focusListenerOptions = { passive: true, capture: true }\n let lastTabPressTime = 0\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchFocus) return\n\n function defaultCallback(index: number): void {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n eventHandler.emit('slideFocusStart')\n root.scrollLeft = 0\n\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n\n eventHandler.emit('slideFocus')\n }\n\n eventStore.add(document, 'keydown', registerTabPress, false)\n\n slides.forEach((slide, slideIndex) => {\n eventStore.add(\n slide,\n 'focus',\n (evt: FocusEvent) => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex)\n }\n },\n focusListenerOptions\n )\n })\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let previousTarget: number | null = null\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n\n const newTarget = roundToTwoDecimals(axis.direction(target))\n if (newTarget === previousTarget) return\n\n containerStyle.transform = translate(newTarget)\n previousTarget = newTarget\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n location: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => (location.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: (array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number,\n pixelTolerance: number\n): SlidesToScrollType {\n const { startEdge, endEdge, direction } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB, index) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction(startGap) : 0\n const gapB = !loop && isLast ? direction(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n","import { Alignment } from './Alignment'\nimport {\n Animations,\n AnimationsType,\n AnimationsUpdateType,\n AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n animation: AnimationsType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n previousLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options\n\n // Measurements\n const pixelTolerance = 2\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const axis = Axis(scrollAxis, direction)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap,\n pixelTolerance\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll,\n pixelTolerance\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationsUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationsRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: { loop }\n },\n alpha\n ) => {\n const shouldSettle = scrollBody.settled()\n const withinBounds = !scrollBounds.shouldConstrain()\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n if (hasSettledAndIdle) animation.stop()\n\n const interpolatedLocation =\n location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n offsetLocation.set(interpolatedLocation)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n\n if (hasSettledAndIdle) eventHandler.emit('settle')\n if (!hasSettled) eventHandler.emit('scroll')\n }\n\n const animation = Animations(\n ownerDocument,\n ownerWindow,\n () => update(engine),\n (alpha: number) => render(engine, alpha)\n )\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const previousLocation = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n previousLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollBody,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n containSnaps,\n containScroll,\n scrollSnaps,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore,\n eventHandler,\n watchFocus\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(\n axis,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n offsetLocation,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n previousLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n }\n\n return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n slideFocusStart: 'slideFocusStart'\n slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n let listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n function clear(): void {\n listeners = {}\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on,\n clear\n }\n return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf | null\n containScroll: ScrollContainOptionType\n direction: AxisDirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial>\n\nexport type OptionsHandlerType = {\n mergeOptions: (\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: (options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const eventHandler = EventHandler()\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = (customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = [].slice.call(customSlides || container.children)\n }\n\n function createEngine(options: OptionsType): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.animation.init()\n engine.slidesInView.init()\n engine.slideFocus.init(self)\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n engine.animation.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n eventHandler.clear()\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody\n .useBaseFriction()\n .useDuration(jump === true ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.offsetLocation.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\ndeclare namespace EmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n"],"names":["isNumber","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","node","type","handler","options","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","isTouchEvt","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","currentLocation","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","logInterval","startEvent","lastEvent","readTime","evtAxis","property","coord","expired","diffDrag","diffTime","isFlick","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","offset","top","right","bottom","left","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","concat","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","diffSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","roundingSafety","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","remainingGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","every","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","inViewMatch","notInViewMatch","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts new file mode 100644 index 0000000000..2cd562e075 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts @@ -0,0 +1,11 @@ +export { EmblaOptionsType } from './components/Options.js'; +export { EmblaEventType } from './components/EventHandler.js'; +export { EmblaPluginType } from './components/Plugins.js'; +export { EmblaCarouselType } from './components/EmblaCarousel.js'; +export { default } from './components/EmblaCarousel.js'; +export { CreatePluginType, EmblaPluginsType } from './components/Plugins.js'; +export { CreateOptionsType } from './components/Options.js'; +export { OptionsHandlerType } from './components/OptionsHandler.js'; +export { EmblaEventListType } from './components/EventHandler.js'; +export { EngineType } from './components/Engine.js'; +export { ScrollBodyType } from './components/ScrollBody.js'; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json new file mode 100644 index 0000000000..054c893547 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json @@ -0,0 +1,52 @@ +{ + "name": "embla-carousel", + "version": "8.6.0", + "author": "David Jerleke", + "description": "A lightweight carousel library with fluid motion and great swipe precision", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel*", + "components/**/*", + "index.d.ts" + ], + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "module": "embla-carousel.esm.js", + "type": "module" +} diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts new file mode 100644 index 0000000000..aab7131a9f --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts @@ -0,0 +1,11 @@ +export { EmblaOptionsType } from './components/Options'; +export { EmblaEventType } from './components/EventHandler'; +export { EmblaPluginType } from './components/Plugins'; +export { EmblaCarouselType } from './components/EmblaCarousel'; +export { default } from './components/EmblaCarousel'; +export { CreatePluginType, EmblaPluginsType } from './components/Plugins'; +export { CreateOptionsType } from './components/Options'; +export { OptionsHandlerType } from './components/OptionsHandler'; +export { EmblaEventListType } from './components/EventHandler'; +export { EngineType } from './components/Engine'; +export { ScrollBodyType } from './components/ScrollBody'; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json new file mode 100644 index 0000000000..bb53b31be4 --- /dev/null +++ b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json @@ -0,0 +1,74 @@ +{ + "name": "embla-carousel", + "version": "8.6.0", + "author": "David Jerleke", + "description": "A lightweight carousel library with fluid motion and great swipe precision", + "repository": { + "type": "git", + "url": "git+https://github.com/davidjerleke/embla-carousel" + }, + "bugs": { + "url": "https://github.com/davidjerleke/embla-carousel/issues" + }, + "homepage": "https://www.embla-carousel.com", + "license": "MIT", + "keywords": [ + "slider", + "carousel", + "slideshow", + "gallery", + "lightweight", + "touch", + "javascript", + "typescript", + "react", + "vue", + "svelte", + "solid" + ], + "main": "embla-carousel.umd.js", + "unpkg": "embla-carousel.umd.js", + "module": "./esm/embla-carousel.esm.js", + "types": "index.d.ts", + "sideEffects": false, + "files": [ + "embla-carousel*", + "components/**/*", + "index.d.ts", + "esm/**/*", + "cjs/**/*" + ], + "scripts": { + "test": "jest --config jest.config.js", + "build": "rollup --bundleConfigAsCjs -c", + "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", + "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" + }, + "devDependencies": { + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "prettier": "2.8.8", + "rollup": "^4.22.4", + "ts-jest": "^29.1.1", + "typescript": "^5.2.2" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./esm/index.d.ts", + "default": "./esm/embla-carousel.esm.js" + }, + "require": { + "types": "./cjs/index.d.ts", + "default": "./cjs/embla-carousel.cjs.js" + } + } + } +} \ No newline at end of file diff --git a/node_modules/.pnpm/lock.yaml b/node_modules/.pnpm/lock.yaml new file mode 100644 index 0000000000..78670e94f8 --- /dev/null +++ b/node_modules/.pnpm/lock.yaml @@ -0,0 +1,60 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + embla-carousel-autoplay: + specifier: ^8.6.0 + version: 8.6.0(embla-carousel@8.6.0) + embla-carousel-react: + specifier: ^8.6.0 + version: 8.6.0(react@19.2.0) + +packages: + + embla-carousel-autoplay@8.6.0: + resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0: + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + embla-carousel-reactive-utils@8.6.0: + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + +snapshots: + + embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0(react@19.2.0): + dependencies: + embla-carousel: 8.6.0 + embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) + react: 19.2.0 + + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: {} + + react@19.2.0: {} diff --git a/node_modules/.pnpm/node_modules/embla-carousel b/node_modules/.pnpm/node_modules/embla-carousel new file mode 120000 index 0000000000..b2d64d5eff --- /dev/null +++ b/node_modules/.pnpm/node_modules/embla-carousel @@ -0,0 +1 @@ +../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/node_modules/embla-carousel-reactive-utils b/node_modules/.pnpm/node_modules/embla-carousel-reactive-utils new file mode 120000 index 0000000000..f7f6e184be --- /dev/null +++ b/node_modules/.pnpm/node_modules/embla-carousel-reactive-utils @@ -0,0 +1 @@ +../embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils \ No newline at end of file diff --git a/node_modules/.pnpm/node_modules/react b/node_modules/.pnpm/node_modules/react new file mode 120000 index 0000000000..19ba4de13c --- /dev/null +++ b/node_modules/.pnpm/node_modules/react @@ -0,0 +1 @@ +../react@19.2.0/node_modules/react \ No newline at end of file diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE b/node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE new file mode 100644 index 0000000000..b93be90515 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/README.md b/node_modules/.pnpm/react@19.2.0/node_modules/react/README.md new file mode 100644 index 0000000000..20a855efd3 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/README.md @@ -0,0 +1,37 @@ +# `react` + +React is a JavaScript library for creating user interfaces. + +The `react` package contains only the functionality necessary to define React components. It is typically used together with a React renderer like `react-dom` for the web, or `react-native` for the native environments. + +**Note:** by default, React will be in development mode. The development version includes extra warnings about common mistakes, whereas the production version includes extra performance optimizations and strips all error messages. Don't forget to use the [production build](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build) when deploying your application. + +## Usage + +```js +import { useState } from 'react'; +import { createRoot } from 'react-dom/client'; + +function Counter() { + const [count, setCount] = useState(0); + return ( + <> +

{count}

+ + + ); +} + +const root = createRoot(document.getElementById('root')); +root.render(); +``` + +## Documentation + +See https://react.dev/ + +## API + +See https://react.dev/reference/react diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js new file mode 100644 index 0000000000..84ceaac6f5 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js @@ -0,0 +1,24 @@ +/** + * @license React + * react-compiler-runtime.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + var ReactSharedInternals = + require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + exports.c = function (size) { + var dispatcher = ReactSharedInternals.H; + null === dispatcher && + console.error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return dispatcher.useMemoCache(size); + }; + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js new file mode 100644 index 0000000000..4d5ade38f0 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js @@ -0,0 +1,16 @@ +/** + * @license React + * react-compiler-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var ReactSharedInternals = + require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; +exports.c = function (size) { + return ReactSharedInternals.H.useMemoCache(size); +}; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js new file mode 100644 index 0000000000..9b93257e37 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js @@ -0,0 +1,16 @@ +/** + * @license React + * react-compiler-runtime.profiling.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var ReactSharedInternals = + require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; +exports.c = function (size) { + return ReactSharedInternals.H.useMemoCache(size); +}; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js new file mode 100644 index 0000000000..95f9877479 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js @@ -0,0 +1,338 @@ +/** + * @license React + * react-jsx-dev-runtime.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + debugStack, + debugTask + ) { + var children = config.children; + if (void 0 !== children) + if (isStaticChildren) + if (isArrayImpl(children)) { + for ( + isStaticChildren = 0; + isStaticChildren < children.length; + isStaticChildren++ + ) + validateChildKeys(children[isStaticChildren]); + Object.freeze && Object.freeze(children); + } else + console.error( + "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." + ); + else validateChildKeys(children); + if (hasOwnProperty.call(config, "key")) { + children = getComponentNameFromType(type); + var keys = Object.keys(config).filter(function (k) { + return "key" !== k; + }); + isStaticChildren = + 0 < keys.length + ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" + : "{key: someKey}"; + didWarnAboutKeySpread[children + isStaticChildren] || + ((keys = + 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), + console.error( + 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', + isStaticChildren, + children, + keys, + children + ), + (didWarnAboutKeySpread[children + isStaticChildren] = !0)); + } + children = null; + void 0 !== maybeKey && + (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (children = "" + config.key)); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + children && + defineKeyPropWarningGetter( + maybeKey, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + return ReactElement( + type, + children, + maybeKey, + getOwner(), + debugStack, + debugTask + ); + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + var React = require("react"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + hasOwnProperty = Object.prototype.hasOwnProperty, + isArrayImpl = Array.isArray, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }; + React = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( + React, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutKeySpread = {}; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) { + var trackActualOwner = + 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js new file mode 100644 index 0000000000..22ad88648e --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js @@ -0,0 +1,14 @@ +/** + * @license React + * react-jsx-dev-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsxDEV = void 0; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js new file mode 100644 index 0000000000..f9e8942f4d --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js @@ -0,0 +1,14 @@ +/** + * @license React + * react-jsx-dev-runtime.profiling.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsxDEV = void 0; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js new file mode 100644 index 0000000000..b79b7589bf --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js @@ -0,0 +1,370 @@ +/** + * @license React + * react-jsx-dev-runtime.react-server.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternalsServer.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + debugStack, + debugTask + ) { + var children = config.children; + if (void 0 !== children) + if (isStaticChildren) + if (isArrayImpl(children)) { + for ( + isStaticChildren = 0; + isStaticChildren < children.length; + isStaticChildren++ + ) + validateChildKeys(children[isStaticChildren]); + Object.freeze && Object.freeze(children); + } else + console.error( + "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." + ); + else validateChildKeys(children); + if (hasOwnProperty.call(config, "key")) { + children = getComponentNameFromType(type); + var keys = Object.keys(config).filter(function (k) { + return "key" !== k; + }); + isStaticChildren = + 0 < keys.length + ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" + : "{key: someKey}"; + didWarnAboutKeySpread[children + isStaticChildren] || + ((keys = + 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), + console.error( + 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', + isStaticChildren, + children, + keys, + children + ), + (didWarnAboutKeySpread[children + isStaticChildren] = !0)); + } + children = null; + void 0 !== maybeKey && + (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (children = "" + config.key)); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + children && + defineKeyPropWarningGetter( + maybeKey, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + return ReactElement( + type, + children, + maybeKey, + getOwner(), + debugStack, + debugTask + ); + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + var React = require("react"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + ReactSharedInternalsServer = + React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + if (!ReactSharedInternalsServer) + throw Error( + 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' + ); + var hasOwnProperty = Object.prototype.hasOwnProperty, + isArrayImpl = Array.isArray, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }; + React = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( + React, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutKeySpread = {}; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.jsx = function (type, config, maybeKey) { + var trackActualOwner = + 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + !1, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) { + var trackActualOwner = + 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.jsxs = function (type, config, maybeKey) { + var trackActualOwner = + 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + !0, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js new file mode 100644 index 0000000000..0664121996 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js @@ -0,0 +1,40 @@ +/** + * @license React + * react-jsx-dev-runtime.react-server.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var React = require("react"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) + throw Error( + 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' + ); +function jsxProd(type, config, maybeKey) { + var key = null; + void 0 !== maybeKey && (key = "" + maybeKey); + void 0 !== config.key && (key = "" + config.key); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + config = maybeKey.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== config ? config : null, + props: maybeKey + }; +} +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsx = jsxProd; +exports.jsxDEV = void 0; +exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js new file mode 100644 index 0000000000..35331a3c5c --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js @@ -0,0 +1,352 @@ +/** + * @license React + * react-jsx-runtime.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + debugStack, + debugTask + ) { + var children = config.children; + if (void 0 !== children) + if (isStaticChildren) + if (isArrayImpl(children)) { + for ( + isStaticChildren = 0; + isStaticChildren < children.length; + isStaticChildren++ + ) + validateChildKeys(children[isStaticChildren]); + Object.freeze && Object.freeze(children); + } else + console.error( + "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." + ); + else validateChildKeys(children); + if (hasOwnProperty.call(config, "key")) { + children = getComponentNameFromType(type); + var keys = Object.keys(config).filter(function (k) { + return "key" !== k; + }); + isStaticChildren = + 0 < keys.length + ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" + : "{key: someKey}"; + didWarnAboutKeySpread[children + isStaticChildren] || + ((keys = + 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), + console.error( + 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', + isStaticChildren, + children, + keys, + children + ), + (didWarnAboutKeySpread[children + isStaticChildren] = !0)); + } + children = null; + void 0 !== maybeKey && + (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (children = "" + config.key)); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + children && + defineKeyPropWarningGetter( + maybeKey, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + return ReactElement( + type, + children, + maybeKey, + getOwner(), + debugStack, + debugTask + ); + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + var React = require("react"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + ReactSharedInternals = + React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, + hasOwnProperty = Object.prototype.hasOwnProperty, + isArrayImpl = Array.isArray, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }; + React = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( + React, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutKeySpread = {}; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.jsx = function (type, config, maybeKey) { + var trackActualOwner = + 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + !1, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.jsxs = function (type, config, maybeKey) { + var trackActualOwner = + 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + !0, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js new file mode 100644 index 0000000000..12d60887f0 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js @@ -0,0 +1,34 @@ +/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +function jsxProd(type, config, maybeKey) { + var key = null; + void 0 !== maybeKey && (key = "" + maybeKey); + void 0 !== config.key && (key = "" + config.key); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + config = maybeKey.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== config ? config : null, + props: maybeKey + }; +} +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsx = jsxProd; +exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js new file mode 100644 index 0000000000..68a28d6ad6 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js @@ -0,0 +1,34 @@ +/** + * @license React + * react-jsx-runtime.profiling.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +function jsxProd(type, config, maybeKey) { + var key = null; + void 0 !== maybeKey && (key = "" + maybeKey); + void 0 !== config.key && (key = "" + config.key); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + config = maybeKey.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== config ? config : null, + props: maybeKey + }; +} +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsx = jsxProd; +exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js new file mode 100644 index 0000000000..59ee4be6d6 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js @@ -0,0 +1,370 @@ +/** + * @license React + * react-jsx-runtime.react-server.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternalsServer.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + debugStack, + debugTask + ) { + var children = config.children; + if (void 0 !== children) + if (isStaticChildren) + if (isArrayImpl(children)) { + for ( + isStaticChildren = 0; + isStaticChildren < children.length; + isStaticChildren++ + ) + validateChildKeys(children[isStaticChildren]); + Object.freeze && Object.freeze(children); + } else + console.error( + "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." + ); + else validateChildKeys(children); + if (hasOwnProperty.call(config, "key")) { + children = getComponentNameFromType(type); + var keys = Object.keys(config).filter(function (k) { + return "key" !== k; + }); + isStaticChildren = + 0 < keys.length + ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" + : "{key: someKey}"; + didWarnAboutKeySpread[children + isStaticChildren] || + ((keys = + 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), + console.error( + 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', + isStaticChildren, + children, + keys, + children + ), + (didWarnAboutKeySpread[children + isStaticChildren] = !0)); + } + children = null; + void 0 !== maybeKey && + (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (children = "" + config.key)); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + children && + defineKeyPropWarningGetter( + maybeKey, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + return ReactElement( + type, + children, + maybeKey, + getOwner(), + debugStack, + debugTask + ); + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + var React = require("react"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + ReactSharedInternalsServer = + React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + if (!ReactSharedInternalsServer) + throw Error( + 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' + ); + var hasOwnProperty = Object.prototype.hasOwnProperty, + isArrayImpl = Array.isArray, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }; + React = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( + React, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutKeySpread = {}; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.jsx = function (type, config, maybeKey) { + var trackActualOwner = + 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + !1, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) { + var trackActualOwner = + 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + isStaticChildren, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.jsxs = function (type, config, maybeKey) { + var trackActualOwner = + 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; + return jsxDEVImpl( + type, + config, + maybeKey, + !0, + trackActualOwner + ? Error("react-stack-top-frame") + : unknownOwnerDebugStack, + trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js new file mode 100644 index 0000000000..486facb521 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js @@ -0,0 +1,40 @@ +/** + * @license React + * react-jsx-runtime.react-server.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var React = require("react"), + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); +if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) + throw Error( + 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' + ); +function jsxProd(type, config, maybeKey) { + var key = null; + void 0 !== maybeKey && (key = "" + maybeKey); + void 0 !== config.key && (key = "" + config.key); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) + "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + config = maybeKey.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== config ? config : null, + props: maybeKey + }; +} +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.jsx = jsxProd; +exports.jsxDEV = void 0; +exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js new file mode 100644 index 0000000000..e7695c689b --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js @@ -0,0 +1,1284 @@ +/** + * @license React + * react.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function defineDeprecationWarning(methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function () { + console.warn( + "%s(...) is deprecated in plain JavaScript React classes. %s", + info[0], + info[1] + ); + } + }); + } + function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) + return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; + } + function warnNoop(publicInstance, callerName) { + publicInstance = + ((publicInstance = publicInstance.constructor) && + (publicInstance.displayName || publicInstance.name)) || + "ReactClass"; + var warningKey = publicInstance + "." + callerName; + didWarnStateUpdateForUnmountedComponent[warningKey] || + (console.error( + "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", + callerName, + publicInstance + ), + (didWarnStateUpdateForUnmountedComponent[warningKey] = !0)); + } + function Component(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + function ComponentDummy() {} + function PureComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + function noop() {} + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function cloneAndReplaceKey(oldElement, newKey) { + newKey = ReactElement( + oldElement.type, + newKey, + oldElement.props, + oldElement._owner, + oldElement._debugStack, + oldElement._debugTask + ); + oldElement._store && + (newKey._store.validated = oldElement._store.validated); + return newKey; + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return ( + "$" + + key.replace(/[=:]/g, function (match) { + return escaperLookup[match]; + }) + ); + } + function getElementKey(element, index) { + return "object" === typeof element && + null !== element && + null != element.key + ? (checkKeyStringCoercion(element.key), escape("" + element.key)) + : index.toString(36); + } + function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ( + ("string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenable.status = "pending"), + thenable.then( + function (fulfilledValue) { + "pending" === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = fulfilledValue)); + }, + function (error) { + "pending" === thenable.status && + ((thenable.status = "rejected"), + (thenable.reason = error)); + } + )), + thenable.status) + ) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; + } + function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = !1; + if (null === children) invokeCallback = !0; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = !0; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = !0; + break; + case REACT_LAZY_TYPE: + return ( + (invokeCallback = children._init), + mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ) + ); + } + } + if (invokeCallback) { + invokeCallback = children; + callback = callback(invokeCallback); + var childKey = + "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; + isArrayImpl(callback) + ? ((escapedPrefix = ""), + null != childKey && + (escapedPrefix = + childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), + mapIntoArray(callback, array, escapedPrefix, "", function (c) { + return c; + })) + : null != callback && + (isValidElement(callback) && + (null != callback.key && + ((invokeCallback && invokeCallback.key === callback.key) || + checkKeyStringCoercion(callback.key)), + (escapedPrefix = cloneAndReplaceKey( + callback, + escapedPrefix + + (null == callback.key || + (invokeCallback && invokeCallback.key === callback.key) + ? "" + : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + + childKey + )), + "" !== nameSoFar && + null != invokeCallback && + isValidElement(invokeCallback) && + null == invokeCallback.key && + invokeCallback._store && + !invokeCallback._store.validated && + (escapedPrefix._store.validated = 2), + (callback = escapedPrefix)), + array.push(callback)); + return 1; + } + invokeCallback = 0; + childKey = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + (nameSoFar = children[i]), + (type = childKey + getElementKey(nameSoFar, i)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if (((i = getIteratorFn(children)), "function" === typeof i)) + for ( + i === children.entries && + (didWarnAboutMaps || + console.warn( + "Using Maps as children is not supported. Use an array of keyed ReactElements instead." + ), + (didWarnAboutMaps = !0)), + children = i.call(children), + i = 0; + !(nameSoFar = children.next()).done; + + ) + (nameSoFar = nameSoFar.value), + (type = childKey + getElementKey(nameSoFar, i++)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === array + ? "object with keys {" + Object.keys(children).join(", ") + "}" + : array) + + "). If you meant to render a collection of children, use an array instead." + ); + } + return invokeCallback; + } + function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], + count = 0; + mapIntoArray(children, result, "", "", function (child) { + return func.call(context, child, count++); + }); + return result; + } + function lazyInitializer(payload) { + if (-1 === payload._status) { + var ioInfo = payload._ioInfo; + null != ioInfo && (ioInfo.start = ioInfo.end = performance.now()); + ioInfo = payload._result; + var thenable = ioInfo(); + thenable.then( + function (moduleObject) { + if (0 === payload._status || -1 === payload._status) { + payload._status = 1; + payload._result = moduleObject; + var _ioInfo = payload._ioInfo; + null != _ioInfo && (_ioInfo.end = performance.now()); + void 0 === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = moduleObject)); + } + }, + function (error) { + if (0 === payload._status || -1 === payload._status) { + payload._status = 2; + payload._result = error; + var _ioInfo2 = payload._ioInfo; + null != _ioInfo2 && (_ioInfo2.end = performance.now()); + void 0 === thenable.status && + ((thenable.status = "rejected"), (thenable.reason = error)); + } + } + ); + ioInfo = payload._ioInfo; + if (null != ioInfo) { + ioInfo.value = thenable; + var displayName = thenable.displayName; + "string" === typeof displayName && (ioInfo.name = displayName); + } + -1 === payload._status && + ((payload._status = 0), (payload._result = thenable)); + } + if (1 === payload._status) + return ( + (ioInfo = payload._result), + void 0 === ioInfo && + console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", + ioInfo + ), + "default" in ioInfo || + console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", + ioInfo + ), + ioInfo.default + ); + throw payload._result; + } + function resolveDispatcher() { + var dispatcher = ReactSharedInternals.H; + null === dispatcher && + console.error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return dispatcher; + } + function releaseAsyncTransition() { + ReactSharedInternals.asyncTransitions--; + } + function enqueueTask(task) { + if (null === enqueueTaskImpl) + try { + var requireString = ("require" + Math.random()).slice(0, 7); + enqueueTaskImpl = (module && module[requireString]).call( + module, + "timers" + ).setImmediate; + } catch (_err) { + enqueueTaskImpl = function (callback) { + !1 === didWarnAboutMessageChannel && + ((didWarnAboutMessageChannel = !0), + "undefined" === typeof MessageChannel && + console.error( + "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning." + )); + var channel = new MessageChannel(); + channel.port1.onmessage = callback; + channel.port2.postMessage(void 0); + }; + } + return enqueueTaskImpl(task); + } + function aggregateErrors(errors) { + return 1 < errors.length && "function" === typeof AggregateError + ? new AggregateError(errors) + : errors[0]; + } + function popActScope(prevActQueue, prevActScopeDepth) { + prevActScopeDepth !== actScopeDepth - 1 && + console.error( + "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. " + ); + actScopeDepth = prevActScopeDepth; + } + function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { + var queue = ReactSharedInternals.actQueue; + if (null !== queue) + if (0 !== queue.length) + try { + flushActQueue(queue); + enqueueTask(function () { + return recursivelyFlushAsyncActWork(returnValue, resolve, reject); + }); + return; + } catch (error) { + ReactSharedInternals.thrownErrors.push(error); + } + else ReactSharedInternals.actQueue = null; + 0 < ReactSharedInternals.thrownErrors.length + ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)), + (ReactSharedInternals.thrownErrors.length = 0), + reject(queue)) + : resolve(returnValue); + } + function flushActQueue(queue) { + if (!isFlushing) { + isFlushing = !0; + var i = 0; + try { + for (; i < queue.length; i++) { + var callback = queue[i]; + do { + ReactSharedInternals.didUsePromise = !1; + var continuation = callback(!1); + if (null !== continuation) { + if (ReactSharedInternals.didUsePromise) { + queue[i] = callback; + queue.splice(0, i); + return; + } + callback = continuation; + } else break; + } while (1); + } + queue.length = 0; + } catch (error) { + queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error); + } finally { + isFlushing = !1; + } + } + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && + "function" === + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator, + didWarnStateUpdateForUnmountedComponent = {}, + ReactNoopUpdateQueue = { + isMounted: function () { + return !1; + }, + enqueueForceUpdate: function (publicInstance) { + warnNoop(publicInstance, "forceUpdate"); + }, + enqueueReplaceState: function (publicInstance) { + warnNoop(publicInstance, "replaceState"); + }, + enqueueSetState: function (publicInstance) { + warnNoop(publicInstance, "setState"); + } + }, + assign = Object.assign, + emptyObject = {}; + Object.freeze(emptyObject); + Component.prototype.isReactComponent = {}; + Component.prototype.setState = function (partialState, callback) { + if ( + "object" !== typeof partialState && + "function" !== typeof partialState && + null != partialState + ) + throw Error( + "takes an object of state variables to update or a function which returns an object of state variables." + ); + this.updater.enqueueSetState(this, partialState, callback, "setState"); + }; + Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); + }; + var deprecatedAPIs = { + isMounted: [ + "isMounted", + "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks." + ], + replaceState: [ + "replaceState", + "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)." + ] + }; + for (fnName in deprecatedAPIs) + deprecatedAPIs.hasOwnProperty(fnName) && + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + ComponentDummy.prototype = Component.prototype; + deprecatedAPIs = PureComponent.prototype = new ComponentDummy(); + deprecatedAPIs.constructor = PureComponent; + assign(deprecatedAPIs, Component.prototype); + deprecatedAPIs.isPureReactComponent = !0; + var isArrayImpl = Array.isArray, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + ReactSharedInternals = { + H: null, + A: null, + T: null, + S: null, + actQueue: null, + asyncTransitions: 0, + isBatchingLegacy: !1, + didScheduleLegacyUpdate: !1, + didUsePromise: !1, + thrownErrors: [], + getCurrentStack: null, + recentlyCreatedOwnerStacks: 0 + }, + hasOwnProperty = Object.prototype.hasOwnProperty, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }; + deprecatedAPIs = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind( + deprecatedAPIs, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutMaps = !1, + userProvidedKeyEscapeRegex = /\/+/g, + reportGlobalError = + "function" === typeof reportError + ? reportError + : function (error) { + if ( + "object" === typeof window && + "function" === typeof window.ErrorEvent + ) { + var event = new window.ErrorEvent("error", { + bubbles: !0, + cancelable: !0, + message: + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error), + error: error + }); + if (!window.dispatchEvent(event)) return; + } else if ( + "object" === typeof process && + "function" === typeof process.emit + ) { + process.emit("uncaughtException", error); + return; + } + console.error(error); + }, + didWarnAboutMessageChannel = !1, + enqueueTaskImpl = null, + actScopeDepth = 0, + didWarnNoAwaitAct = !1, + isFlushing = !1, + queueSeveralMicrotasks = + "function" === typeof queueMicrotask + ? function (callback) { + queueMicrotask(function () { + return queueMicrotask(callback); + }); + } + : enqueueTask; + deprecatedAPIs = Object.freeze({ + __proto__: null, + c: function (size) { + return resolveDispatcher().useMemoCache(size); + } + }); + var fnName = { + map: mapChildren, + forEach: function (children, forEachFunc, forEachContext) { + mapChildren( + children, + function () { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function (children) { + var n = 0; + mapChildren(children, function () { + n++; + }); + return n; + }, + toArray: function (children) { + return ( + mapChildren(children, function (child) { + return child; + }) || [] + ); + }, + only: function (children) { + if (!isValidElement(children)) + throw Error( + "React.Children.only expected to receive a single React element child." + ); + return children; + } + }; + exports.Activity = REACT_ACTIVITY_TYPE; + exports.Children = fnName; + exports.Component = Component; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.Profiler = REACT_PROFILER_TYPE; + exports.PureComponent = PureComponent; + exports.StrictMode = REACT_STRICT_MODE_TYPE; + exports.Suspense = REACT_SUSPENSE_TYPE; + exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + ReactSharedInternals; + exports.__COMPILER_RUNTIME = deprecatedAPIs; + exports.act = function (callback) { + var prevActQueue = ReactSharedInternals.actQueue, + prevActScopeDepth = actScopeDepth; + actScopeDepth++; + var queue = (ReactSharedInternals.actQueue = + null !== prevActQueue ? prevActQueue : []), + didAwaitActCall = !1; + try { + var result = callback(); + } catch (error) { + ReactSharedInternals.thrownErrors.push(error); + } + if (0 < ReactSharedInternals.thrownErrors.length) + throw ( + (popActScope(prevActQueue, prevActScopeDepth), + (callback = aggregateErrors(ReactSharedInternals.thrownErrors)), + (ReactSharedInternals.thrownErrors.length = 0), + callback) + ); + if ( + null !== result && + "object" === typeof result && + "function" === typeof result.then + ) { + var thenable = result; + queueSeveralMicrotasks(function () { + didAwaitActCall || + didWarnNoAwaitAct || + ((didWarnNoAwaitAct = !0), + console.error( + "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);" + )); + }); + return { + then: function (resolve, reject) { + didAwaitActCall = !0; + thenable.then( + function (returnValue) { + popActScope(prevActQueue, prevActScopeDepth); + if (0 === prevActScopeDepth) { + try { + flushActQueue(queue), + enqueueTask(function () { + return recursivelyFlushAsyncActWork( + returnValue, + resolve, + reject + ); + }); + } catch (error$0) { + ReactSharedInternals.thrownErrors.push(error$0); + } + if (0 < ReactSharedInternals.thrownErrors.length) { + var _thrownError = aggregateErrors( + ReactSharedInternals.thrownErrors + ); + ReactSharedInternals.thrownErrors.length = 0; + reject(_thrownError); + } + } else resolve(returnValue); + }, + function (error) { + popActScope(prevActQueue, prevActScopeDepth); + 0 < ReactSharedInternals.thrownErrors.length + ? ((error = aggregateErrors( + ReactSharedInternals.thrownErrors + )), + (ReactSharedInternals.thrownErrors.length = 0), + reject(error)) + : reject(error); + } + ); + } + }; + } + var returnValue$jscomp$0 = result; + popActScope(prevActQueue, prevActScopeDepth); + 0 === prevActScopeDepth && + (flushActQueue(queue), + 0 !== queue.length && + queueSeveralMicrotasks(function () { + didAwaitActCall || + didWarnNoAwaitAct || + ((didWarnNoAwaitAct = !0), + console.error( + "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)" + )); + }), + (ReactSharedInternals.actQueue = null)); + if (0 < ReactSharedInternals.thrownErrors.length) + throw ( + ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)), + (ReactSharedInternals.thrownErrors.length = 0), + callback) + ); + return { + then: function (resolve, reject) { + didAwaitActCall = !0; + 0 === prevActScopeDepth + ? ((ReactSharedInternals.actQueue = queue), + enqueueTask(function () { + return recursivelyFlushAsyncActWork( + returnValue$jscomp$0, + resolve, + reject + ); + })) + : resolve(returnValue$jscomp$0); + } + }; + }; + exports.cache = function (fn) { + return function () { + return fn.apply(null, arguments); + }; + }; + exports.cacheSignal = function () { + return null; + }; + exports.captureOwnerStack = function () { + var getCurrentStack = ReactSharedInternals.getCurrentStack; + return null === getCurrentStack ? null : getCurrentStack(); + }; + exports.cloneElement = function (element, config, children) { + if (null === element || void 0 === element) + throw Error( + "The argument must be a React element, but you passed " + + element + + "." + ); + var props = assign({}, element.props), + key = element.key, + owner = element._owner; + if (null != config) { + var JSCompiler_inline_result; + a: { + if ( + hasOwnProperty.call(config, "ref") && + (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( + config, + "ref" + ).get) && + JSCompiler_inline_result.isReactWarning + ) { + JSCompiler_inline_result = !1; + break a; + } + JSCompiler_inline_result = void 0 !== config.ref; + } + JSCompiler_inline_result && (owner = getOwner()); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (key = "" + config.key)); + for (propName in config) + !hasOwnProperty.call(config, propName) || + "key" === propName || + "__self" === propName || + "__source" === propName || + ("ref" === propName && void 0 === config.ref) || + (props[propName] = config[propName]); + } + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + JSCompiler_inline_result = Array(propName); + for (var i = 0; i < propName; i++) + JSCompiler_inline_result[i] = arguments[i + 2]; + props.children = JSCompiler_inline_result; + } + props = ReactElement( + element.type, + key, + props, + owner, + element._debugStack, + element._debugTask + ); + for (key = 2; key < arguments.length; key++) + validateChildKeys(arguments[key]); + return props; + }; + exports.createContext = function (defaultValue) { + defaultValue = { + $$typeof: REACT_CONTEXT_TYPE, + _currentValue: defaultValue, + _currentValue2: defaultValue, + _threadCount: 0, + Provider: null, + Consumer: null + }; + defaultValue.Provider = defaultValue; + defaultValue.Consumer = { + $$typeof: REACT_CONSUMER_TYPE, + _context: defaultValue + }; + defaultValue._currentRenderer = null; + defaultValue._currentRenderer2 = null; + return defaultValue; + }; + exports.createElement = function (type, config, children) { + for (var i = 2; i < arguments.length; i++) + validateChildKeys(arguments[i]); + i = {}; + var key = null; + if (null != config) + for (propName in (didWarnAboutOldJSXRuntime || + !("__self" in config) || + "key" in config || + ((didWarnAboutOldJSXRuntime = !0), + console.warn( + "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" + )), + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (key = "" + config.key)), + config)) + hasOwnProperty.call(config, propName) && + "key" !== propName && + "__self" !== propName && + "__source" !== propName && + (i[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) i.children = children; + else if (1 < childrenLength) { + for ( + var childArray = Array(childrenLength), _i = 0; + _i < childrenLength; + _i++ + ) + childArray[_i] = arguments[_i + 2]; + Object.freeze && Object.freeze(childArray); + i.children = childArray; + } + if (type && type.defaultProps) + for (propName in ((childrenLength = type.defaultProps), childrenLength)) + void 0 === i[propName] && (i[propName] = childrenLength[propName]); + key && + defineKeyPropWarningGetter( + i, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return ReactElement( + type, + key, + i, + getOwner(), + propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, + propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.createRef = function () { + var refObject = { current: null }; + Object.seal(refObject); + return refObject; + }; + exports.forwardRef = function (render) { + null != render && render.$$typeof === REACT_MEMO_TYPE + ? console.error( + "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." + ) + : "function" !== typeof render + ? console.error( + "forwardRef requires a render function but was given %s.", + null === render ? "null" : typeof render + ) + : 0 !== render.length && + 2 !== render.length && + console.error( + "forwardRef render functions accept exactly two parameters: props and ref. %s", + 1 === render.length + ? "Did you forget to use the ref parameter?" + : "Any additional parameter will be undefined." + ); + null != render && + null != render.defaultProps && + console.error( + "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" + ); + var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render }, + ownName; + Object.defineProperty(elementType, "displayName", { + enumerable: !1, + configurable: !0, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + render.name || + render.displayName || + (Object.defineProperty(render, "name", { value: name }), + (render.displayName = name)); + } + }); + return elementType; + }; + exports.isValidElement = isValidElement; + exports.lazy = function (ctor) { + ctor = { _status: -1, _result: ctor }; + var lazyType = { + $$typeof: REACT_LAZY_TYPE, + _payload: ctor, + _init: lazyInitializer + }, + ioInfo = { + name: "lazy", + start: -1, + end: -1, + value: null, + owner: null, + debugStack: Error("react-stack-top-frame"), + debugTask: console.createTask ? console.createTask("lazy()") : null + }; + ctor._ioInfo = ioInfo; + lazyType._debugInfo = [{ awaited: ioInfo }]; + return lazyType; + }; + exports.memo = function (type, compare) { + null == type && + console.error( + "memo: The first argument must be a component. Instead received: %s", + null === type ? "null" : typeof type + ); + compare = { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: void 0 === compare ? null : compare + }; + var ownName; + Object.defineProperty(compare, "displayName", { + enumerable: !1, + configurable: !0, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + type.name || + type.displayName || + (Object.defineProperty(type, "name", { value: name }), + (type.displayName = name)); + } + }); + return compare; + }; + exports.startTransition = function (scope) { + var prevTransition = ReactSharedInternals.T, + currentTransition = {}; + currentTransition._updatedFibers = new Set(); + ReactSharedInternals.T = currentTransition; + try { + var returnValue = scope(), + onStartTransitionFinish = ReactSharedInternals.S; + null !== onStartTransitionFinish && + onStartTransitionFinish(currentTransition, returnValue); + "object" === typeof returnValue && + null !== returnValue && + "function" === typeof returnValue.then && + (ReactSharedInternals.asyncTransitions++, + returnValue.then(releaseAsyncTransition, releaseAsyncTransition), + returnValue.then(noop, reportGlobalError)); + } catch (error) { + reportGlobalError(error); + } finally { + null === prevTransition && + currentTransition._updatedFibers && + ((scope = currentTransition._updatedFibers.size), + currentTransition._updatedFibers.clear(), + 10 < scope && + console.warn( + "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." + )), + null !== prevTransition && + null !== currentTransition.types && + (null !== prevTransition.types && + prevTransition.types !== currentTransition.types && + console.error( + "We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React." + ), + (prevTransition.types = currentTransition.types)), + (ReactSharedInternals.T = prevTransition); + } + }; + exports.unstable_useCacheRefresh = function () { + return resolveDispatcher().useCacheRefresh(); + }; + exports.use = function (usable) { + return resolveDispatcher().use(usable); + }; + exports.useActionState = function (action, initialState, permalink) { + return resolveDispatcher().useActionState( + action, + initialState, + permalink + ); + }; + exports.useCallback = function (callback, deps) { + return resolveDispatcher().useCallback(callback, deps); + }; + exports.useContext = function (Context) { + var dispatcher = resolveDispatcher(); + Context.$$typeof === REACT_CONSUMER_TYPE && + console.error( + "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?" + ); + return dispatcher.useContext(Context); + }; + exports.useDebugValue = function (value, formatterFn) { + return resolveDispatcher().useDebugValue(value, formatterFn); + }; + exports.useDeferredValue = function (value, initialValue) { + return resolveDispatcher().useDeferredValue(value, initialValue); + }; + exports.useEffect = function (create, deps) { + null == create && + console.warn( + "React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useEffect(create, deps); + }; + exports.useEffectEvent = function (callback) { + return resolveDispatcher().useEffectEvent(callback); + }; + exports.useId = function () { + return resolveDispatcher().useId(); + }; + exports.useImperativeHandle = function (ref, create, deps) { + return resolveDispatcher().useImperativeHandle(ref, create, deps); + }; + exports.useInsertionEffect = function (create, deps) { + null == create && + console.warn( + "React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useInsertionEffect(create, deps); + }; + exports.useLayoutEffect = function (create, deps) { + null == create && + console.warn( + "React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useLayoutEffect(create, deps); + }; + exports.useMemo = function (create, deps) { + return resolveDispatcher().useMemo(create, deps); + }; + exports.useOptimistic = function (passthrough, reducer) { + return resolveDispatcher().useOptimistic(passthrough, reducer); + }; + exports.useReducer = function (reducer, initialArg, init) { + return resolveDispatcher().useReducer(reducer, initialArg, init); + }; + exports.useRef = function (initialValue) { + return resolveDispatcher().useRef(initialValue); + }; + exports.useState = function (initialState) { + return resolveDispatcher().useState(initialState); + }; + exports.useSyncExternalStore = function ( + subscribe, + getSnapshot, + getServerSnapshot + ) { + return resolveDispatcher().useSyncExternalStore( + subscribe, + getSnapshot, + getServerSnapshot + ); + }; + exports.useTransition = function () { + return resolveDispatcher().useTransition(); + }; + exports.version = "19.2.0"; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && + "function" === + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js new file mode 100644 index 0000000000..0637a6ad47 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js @@ -0,0 +1,542 @@ +/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var ReactNoopUpdateQueue = { + isMounted: function () { + return !1; + }, + enqueueForceUpdate: function () {}, + enqueueReplaceState: function () {}, + enqueueSetState: function () {} + }, + assign = Object.assign, + emptyObject = {}; +function Component(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; +} +Component.prototype.isReactComponent = {}; +Component.prototype.setState = function (partialState, callback) { + if ( + "object" !== typeof partialState && + "function" !== typeof partialState && + null != partialState + ) + throw Error( + "takes an object of state variables to update or a function which returns an object of state variables." + ); + this.updater.enqueueSetState(this, partialState, callback, "setState"); +}; +Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); +}; +function ComponentDummy() {} +ComponentDummy.prototype = Component.prototype; +function PureComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; +} +var pureComponentPrototype = (PureComponent.prototype = new ComponentDummy()); +pureComponentPrototype.constructor = PureComponent; +assign(pureComponentPrototype, Component.prototype); +pureComponentPrototype.isPureReactComponent = !0; +var isArrayImpl = Array.isArray; +function noop() {} +var ReactSharedInternals = { H: null, A: null, T: null, S: null }, + hasOwnProperty = Object.prototype.hasOwnProperty; +function ReactElement(type, key, props) { + var refProp = props.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== refProp ? refProp : null, + props: props + }; +} +function cloneAndReplaceKey(oldElement, newKey) { + return ReactElement(oldElement.type, newKey, oldElement.props); +} +function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); +} +function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return ( + "$" + + key.replace(/[=:]/g, function (match) { + return escaperLookup[match]; + }) + ); +} +var userProvidedKeyEscapeRegex = /\/+/g; +function getElementKey(element, index) { + return "object" === typeof element && null !== element && null != element.key + ? escape("" + element.key) + : index.toString(36); +} +function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ( + ("string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenable.status = "pending"), + thenable.then( + function (fulfilledValue) { + "pending" === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = fulfilledValue)); + }, + function (error) { + "pending" === thenable.status && + ((thenable.status = "rejected"), (thenable.reason = error)); + } + )), + thenable.status) + ) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; +} +function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = !1; + if (null === children) invokeCallback = !0; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = !0; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = !0; + break; + case REACT_LAZY_TYPE: + return ( + (invokeCallback = children._init), + mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ) + ); + } + } + if (invokeCallback) + return ( + (callback = callback(children)), + (invokeCallback = + "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), + isArrayImpl(callback) + ? ((escapedPrefix = ""), + null != invokeCallback && + (escapedPrefix = + invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), + mapIntoArray(callback, array, escapedPrefix, "", function (c) { + return c; + })) + : null != callback && + (isValidElement(callback) && + (callback = cloneAndReplaceKey( + callback, + escapedPrefix + + (null == callback.key || + (children && children.key === callback.key) + ? "" + : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + + invokeCallback + )), + array.push(callback)), + 1 + ); + invokeCallback = 0; + var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + (nameSoFar = children[i]), + (type = nextNamePrefix + getElementKey(nameSoFar, i)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if (((i = getIteratorFn(children)), "function" === typeof i)) + for ( + children = i.call(children), i = 0; + !(nameSoFar = children.next()).done; + + ) + (nameSoFar = nameSoFar.value), + (type = nextNamePrefix + getElementKey(nameSoFar, i++)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === array + ? "object with keys {" + Object.keys(children).join(", ") + "}" + : array) + + "). If you meant to render a collection of children, use an array instead." + ); + } + return invokeCallback; +} +function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], + count = 0; + mapIntoArray(children, result, "", "", function (child) { + return func.call(context, child, count++); + }); + return result; +} +function lazyInitializer(payload) { + if (-1 === payload._status) { + var ctor = payload._result; + ctor = ctor(); + ctor.then( + function (moduleObject) { + if (0 === payload._status || -1 === payload._status) + (payload._status = 1), (payload._result = moduleObject); + }, + function (error) { + if (0 === payload._status || -1 === payload._status) + (payload._status = 2), (payload._result = error); + } + ); + -1 === payload._status && ((payload._status = 0), (payload._result = ctor)); + } + if (1 === payload._status) return payload._result.default; + throw payload._result; +} +var reportGlobalError = + "function" === typeof reportError + ? reportError + : function (error) { + if ( + "object" === typeof window && + "function" === typeof window.ErrorEvent + ) { + var event = new window.ErrorEvent("error", { + bubbles: !0, + cancelable: !0, + message: + "object" === typeof error && + null !== error && + "string" === typeof error.message + ? String(error.message) + : String(error), + error: error + }); + if (!window.dispatchEvent(event)) return; + } else if ( + "object" === typeof process && + "function" === typeof process.emit + ) { + process.emit("uncaughtException", error); + return; + } + console.error(error); + }, + Children = { + map: mapChildren, + forEach: function (children, forEachFunc, forEachContext) { + mapChildren( + children, + function () { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function (children) { + var n = 0; + mapChildren(children, function () { + n++; + }); + return n; + }, + toArray: function (children) { + return ( + mapChildren(children, function (child) { + return child; + }) || [] + ); + }, + only: function (children) { + if (!isValidElement(children)) + throw Error( + "React.Children.only expected to receive a single React element child." + ); + return children; + } + }; +exports.Activity = REACT_ACTIVITY_TYPE; +exports.Children = Children; +exports.Component = Component; +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.Profiler = REACT_PROFILER_TYPE; +exports.PureComponent = PureComponent; +exports.StrictMode = REACT_STRICT_MODE_TYPE; +exports.Suspense = REACT_SUSPENSE_TYPE; +exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + ReactSharedInternals; +exports.__COMPILER_RUNTIME = { + __proto__: null, + c: function (size) { + return ReactSharedInternals.H.useMemoCache(size); + } +}; +exports.cache = function (fn) { + return function () { + return fn.apply(null, arguments); + }; +}; +exports.cacheSignal = function () { + return null; +}; +exports.cloneElement = function (element, config, children) { + if (null === element || void 0 === element) + throw Error( + "The argument must be a React element, but you passed " + element + "." + ); + var props = assign({}, element.props), + key = element.key; + if (null != config) + for (propName in (void 0 !== config.key && (key = "" + config.key), config)) + !hasOwnProperty.call(config, propName) || + "key" === propName || + "__self" === propName || + "__source" === propName || + ("ref" === propName && void 0 === config.ref) || + (props[propName] = config[propName]); + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + for (var childArray = Array(propName), i = 0; i < propName; i++) + childArray[i] = arguments[i + 2]; + props.children = childArray; + } + return ReactElement(element.type, key, props); +}; +exports.createContext = function (defaultValue) { + defaultValue = { + $$typeof: REACT_CONTEXT_TYPE, + _currentValue: defaultValue, + _currentValue2: defaultValue, + _threadCount: 0, + Provider: null, + Consumer: null + }; + defaultValue.Provider = defaultValue; + defaultValue.Consumer = { + $$typeof: REACT_CONSUMER_TYPE, + _context: defaultValue + }; + return defaultValue; +}; +exports.createElement = function (type, config, children) { + var propName, + props = {}, + key = null; + if (null != config) + for (propName in (void 0 !== config.key && (key = "" + config.key), config)) + hasOwnProperty.call(config, propName) && + "key" !== propName && + "__self" !== propName && + "__source" !== propName && + (props[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) props.children = children; + else if (1 < childrenLength) { + for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) + childArray[i] = arguments[i + 2]; + props.children = childArray; + } + if (type && type.defaultProps) + for (propName in ((childrenLength = type.defaultProps), childrenLength)) + void 0 === props[propName] && + (props[propName] = childrenLength[propName]); + return ReactElement(type, key, props); +}; +exports.createRef = function () { + return { current: null }; +}; +exports.forwardRef = function (render) { + return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; +}; +exports.isValidElement = isValidElement; +exports.lazy = function (ctor) { + return { + $$typeof: REACT_LAZY_TYPE, + _payload: { _status: -1, _result: ctor }, + _init: lazyInitializer + }; +}; +exports.memo = function (type, compare) { + return { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: void 0 === compare ? null : compare + }; +}; +exports.startTransition = function (scope) { + var prevTransition = ReactSharedInternals.T, + currentTransition = {}; + ReactSharedInternals.T = currentTransition; + try { + var returnValue = scope(), + onStartTransitionFinish = ReactSharedInternals.S; + null !== onStartTransitionFinish && + onStartTransitionFinish(currentTransition, returnValue); + "object" === typeof returnValue && + null !== returnValue && + "function" === typeof returnValue.then && + returnValue.then(noop, reportGlobalError); + } catch (error) { + reportGlobalError(error); + } finally { + null !== prevTransition && + null !== currentTransition.types && + (prevTransition.types = currentTransition.types), + (ReactSharedInternals.T = prevTransition); + } +}; +exports.unstable_useCacheRefresh = function () { + return ReactSharedInternals.H.useCacheRefresh(); +}; +exports.use = function (usable) { + return ReactSharedInternals.H.use(usable); +}; +exports.useActionState = function (action, initialState, permalink) { + return ReactSharedInternals.H.useActionState(action, initialState, permalink); +}; +exports.useCallback = function (callback, deps) { + return ReactSharedInternals.H.useCallback(callback, deps); +}; +exports.useContext = function (Context) { + return ReactSharedInternals.H.useContext(Context); +}; +exports.useDebugValue = function () {}; +exports.useDeferredValue = function (value, initialValue) { + return ReactSharedInternals.H.useDeferredValue(value, initialValue); +}; +exports.useEffect = function (create, deps) { + return ReactSharedInternals.H.useEffect(create, deps); +}; +exports.useEffectEvent = function (callback) { + return ReactSharedInternals.H.useEffectEvent(callback); +}; +exports.useId = function () { + return ReactSharedInternals.H.useId(); +}; +exports.useImperativeHandle = function (ref, create, deps) { + return ReactSharedInternals.H.useImperativeHandle(ref, create, deps); +}; +exports.useInsertionEffect = function (create, deps) { + return ReactSharedInternals.H.useInsertionEffect(create, deps); +}; +exports.useLayoutEffect = function (create, deps) { + return ReactSharedInternals.H.useLayoutEffect(create, deps); +}; +exports.useMemo = function (create, deps) { + return ReactSharedInternals.H.useMemo(create, deps); +}; +exports.useOptimistic = function (passthrough, reducer) { + return ReactSharedInternals.H.useOptimistic(passthrough, reducer); +}; +exports.useReducer = function (reducer, initialArg, init) { + return ReactSharedInternals.H.useReducer(reducer, initialArg, init); +}; +exports.useRef = function (initialValue) { + return ReactSharedInternals.H.useRef(initialValue); +}; +exports.useState = function (initialState) { + return ReactSharedInternals.H.useState(initialState); +}; +exports.useSyncExternalStore = function ( + subscribe, + getSnapshot, + getServerSnapshot +) { + return ReactSharedInternals.H.useSyncExternalStore( + subscribe, + getSnapshot, + getServerSnapshot + ); +}; +exports.useTransition = function () { + return ReactSharedInternals.H.useTransition(); +}; +exports.version = "19.2.0"; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js new file mode 100644 index 0000000000..6d1588e9ac --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js @@ -0,0 +1,848 @@ +/** + * @license React + * react.react-server.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +"production" !== process.env.NODE_ENV && + (function () { + function noop() {} + function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) + return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = + ("function" === typeof Symbol && + Symbol.toStringTag && + value[Symbol.toStringTag]) || + value.constructor.name || + "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE + ? null + : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ( + ("number" === typeof type.tag && + console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), + type.$$typeof) + ) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || + ((type = innerType.displayName || innerType.name || ""), + (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); + return type; + case REACT_MEMO_TYPE: + return ( + (innerType = type.displayName || null), + null !== innerType + ? innerType + : getComponentNameFromType(type.type) || "Memo" + ); + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ( + "object" === typeof type && + null !== type && + type.$$typeof === REACT_LAZY_TYPE + ) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || + ((specialPropKeyWarningShown = !0), + console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || + ((didWarnAboutElementRef[componentName] = !0), + console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + props: props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) + ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) + : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function cloneAndReplaceKey(oldElement, newKey) { + newKey = ReactElement( + oldElement.type, + newKey, + oldElement.props, + oldElement._owner, + oldElement._debugStack, + oldElement._debugTask + ); + oldElement._store && + (newKey._store.validated = oldElement._store.validated); + return newKey; + } + function validateChildKeys(node) { + isValidElement(node) + ? node._store && (node._store.validated = 1) + : "object" === typeof node && + null !== node && + node.$$typeof === REACT_LAZY_TYPE && + ("fulfilled" === node._payload.status + ? isValidElement(node._payload.value) && + node._payload.value._store && + (node._payload.value._store.validated = 1) + : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); + } + function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return ( + "$" + + key.replace(/[=:]/g, function (match) { + return escaperLookup[match]; + }) + ); + } + function getElementKey(element, index) { + return "object" === typeof element && + null !== element && + null != element.key + ? (checkKeyStringCoercion(element.key), escape("" + element.key)) + : index.toString(36); + } + function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ( + ("string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenable.status = "pending"), + thenable.then( + function (fulfilledValue) { + "pending" === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = fulfilledValue)); + }, + function (error) { + "pending" === thenable.status && + ((thenable.status = "rejected"), + (thenable.reason = error)); + } + )), + thenable.status) + ) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; + } + function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = !1; + if (null === children) invokeCallback = !0; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = !0; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = !0; + break; + case REACT_LAZY_TYPE: + return ( + (invokeCallback = children._init), + mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ) + ); + } + } + if (invokeCallback) { + invokeCallback = children; + callback = callback(invokeCallback); + var childKey = + "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; + isArrayImpl(callback) + ? ((escapedPrefix = ""), + null != childKey && + (escapedPrefix = + childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), + mapIntoArray(callback, array, escapedPrefix, "", function (c) { + return c; + })) + : null != callback && + (isValidElement(callback) && + (null != callback.key && + ((invokeCallback && invokeCallback.key === callback.key) || + checkKeyStringCoercion(callback.key)), + (escapedPrefix = cloneAndReplaceKey( + callback, + escapedPrefix + + (null == callback.key || + (invokeCallback && invokeCallback.key === callback.key) + ? "" + : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + + childKey + )), + "" !== nameSoFar && + null != invokeCallback && + isValidElement(invokeCallback) && + null == invokeCallback.key && + invokeCallback._store && + !invokeCallback._store.validated && + (escapedPrefix._store.validated = 2), + (callback = escapedPrefix)), + array.push(callback)); + return 1; + } + invokeCallback = 0; + childKey = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + (nameSoFar = children[i]), + (type = childKey + getElementKey(nameSoFar, i)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if (((i = getIteratorFn(children)), "function" === typeof i)) + for ( + i === children.entries && + (didWarnAboutMaps || + console.warn( + "Using Maps as children is not supported. Use an array of keyed ReactElements instead." + ), + (didWarnAboutMaps = !0)), + children = i.call(children), + i = 0; + !(nameSoFar = children.next()).done; + + ) + (nameSoFar = nameSoFar.value), + (type = childKey + getElementKey(nameSoFar, i++)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + "Objects are not valid as a React child (found: " + + ("[object Object]" === array + ? "object with keys {" + Object.keys(children).join(", ") + "}" + : array) + + "). If you meant to render a collection of children, use an array instead." + ); + } + return invokeCallback; + } + function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], + count = 0; + mapIntoArray(children, result, "", "", function (child) { + return func.call(context, child, count++); + }); + return result; + } + function resolveDispatcher() { + var dispatcher = ReactSharedInternals.H; + null === dispatcher && + console.error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return dispatcher; + } + function lazyInitializer(payload) { + if (-1 === payload._status) { + var ioInfo = payload._ioInfo; + null != ioInfo && (ioInfo.start = ioInfo.end = performance.now()); + ioInfo = payload._result; + var thenable = ioInfo(); + thenable.then( + function (moduleObject) { + if (0 === payload._status || -1 === payload._status) { + payload._status = 1; + payload._result = moduleObject; + var _ioInfo = payload._ioInfo; + null != _ioInfo && (_ioInfo.end = performance.now()); + void 0 === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = moduleObject)); + } + }, + function (error) { + if (0 === payload._status || -1 === payload._status) { + payload._status = 2; + payload._result = error; + var _ioInfo2 = payload._ioInfo; + null != _ioInfo2 && (_ioInfo2.end = performance.now()); + void 0 === thenable.status && + ((thenable.status = "rejected"), (thenable.reason = error)); + } + } + ); + ioInfo = payload._ioInfo; + if (null != ioInfo) { + ioInfo.value = thenable; + var displayName = thenable.displayName; + "string" === typeof displayName && (ioInfo.name = displayName); + } + -1 === payload._status && + ((payload._status = 0), (payload._result = thenable)); + } + if (1 === payload._status) + return ( + (ioInfo = payload._result), + void 0 === ioInfo && + console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", + ioInfo + ), + "default" in ioInfo || + console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", + ioInfo + ), + ioInfo.default + ); + throw payload._result; + } + function createCacheRoot() { + return new WeakMap(); + } + function createCacheNode() { + return { s: 0, v: void 0, o: null, p: null }; + } + var ReactSharedInternals = { + H: null, + A: null, + getCurrentStack: null, + recentlyCreatedOwnerStacks: 0 + }, + isArrayImpl = Array.isArray, + REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), + REACT_CONTEXT_TYPE = Symbol.for("react.context"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator, + REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), + hasOwnProperty = Object.prototype.hasOwnProperty, + assign = Object.assign, + createTask = console.createTask + ? console.createTask + : function () { + return null; + }, + createFakeCallStack = { + react_stack_bottom_frame: function (callStackForError) { + return callStackForError(); + } + }, + specialPropKeyWarningShown, + didWarnAboutOldJSXRuntime; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = + createFakeCallStack.react_stack_bottom_frame.bind( + createFakeCallStack, + UnknownOwner + )(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutMaps = !1, + userProvidedKeyEscapeRegex = /\/+/g; + exports.Children = { + map: mapChildren, + forEach: function (children, forEachFunc, forEachContext) { + mapChildren( + children, + function () { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function (children) { + var n = 0; + mapChildren(children, function () { + n++; + }); + return n; + }, + toArray: function (children) { + return ( + mapChildren(children, function (child) { + return child; + }) || [] + ); + }, + only: function (children) { + if (!isValidElement(children)) + throw Error( + "React.Children.only expected to receive a single React element child." + ); + return children; + } + }; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.Profiler = REACT_PROFILER_TYPE; + exports.StrictMode = REACT_STRICT_MODE_TYPE; + exports.Suspense = REACT_SUSPENSE_TYPE; + exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + ReactSharedInternals; + exports.cache = function (fn) { + return function () { + var dispatcher = ReactSharedInternals.A; + if (!dispatcher) return fn.apply(null, arguments); + var fnMap = dispatcher.getCacheForType(createCacheRoot); + dispatcher = fnMap.get(fn); + void 0 === dispatcher && + ((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher)); + fnMap = 0; + for (var l = arguments.length; fnMap < l; fnMap++) { + var arg = arguments[fnMap]; + if ( + "function" === typeof arg || + ("object" === typeof arg && null !== arg) + ) { + var objectCache = dispatcher.o; + null === objectCache && + (dispatcher.o = objectCache = new WeakMap()); + dispatcher = objectCache.get(arg); + void 0 === dispatcher && + ((dispatcher = createCacheNode()), + objectCache.set(arg, dispatcher)); + } else + (objectCache = dispatcher.p), + null === objectCache && (dispatcher.p = objectCache = new Map()), + (dispatcher = objectCache.get(arg)), + void 0 === dispatcher && + ((dispatcher = createCacheNode()), + objectCache.set(arg, dispatcher)); + } + if (1 === dispatcher.s) return dispatcher.v; + if (2 === dispatcher.s) throw dispatcher.v; + try { + var result = fn.apply(null, arguments); + fnMap = dispatcher; + fnMap.s = 1; + return (fnMap.v = result); + } catch (error) { + throw ( + ((result = dispatcher), (result.s = 2), (result.v = error), error) + ); + } + }; + }; + exports.cacheSignal = function () { + var dispatcher = ReactSharedInternals.A; + return dispatcher ? dispatcher.cacheSignal() : null; + }; + exports.captureOwnerStack = function () { + var getCurrentStack = ReactSharedInternals.getCurrentStack; + return null === getCurrentStack ? null : getCurrentStack(); + }; + exports.cloneElement = function (element, config, children) { + if (null === element || void 0 === element) + throw Error( + "The argument must be a React element, but you passed " + + element + + "." + ); + var props = assign({}, element.props), + key = element.key, + owner = element._owner; + if (null != config) { + var JSCompiler_inline_result; + a: { + if ( + hasOwnProperty.call(config, "ref") && + (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( + config, + "ref" + ).get) && + JSCompiler_inline_result.isReactWarning + ) { + JSCompiler_inline_result = !1; + break a; + } + JSCompiler_inline_result = void 0 !== config.ref; + } + JSCompiler_inline_result && (owner = getOwner()); + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (key = "" + config.key)); + for (propName in config) + !hasOwnProperty.call(config, propName) || + "key" === propName || + "__self" === propName || + "__source" === propName || + ("ref" === propName && void 0 === config.ref) || + (props[propName] = config[propName]); + } + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + JSCompiler_inline_result = Array(propName); + for (var i = 0; i < propName; i++) + JSCompiler_inline_result[i] = arguments[i + 2]; + props.children = JSCompiler_inline_result; + } + props = ReactElement( + element.type, + key, + props, + owner, + element._debugStack, + element._debugTask + ); + for (key = 2; key < arguments.length; key++) + validateChildKeys(arguments[key]); + return props; + }; + exports.createElement = function (type, config, children) { + for (var i = 2; i < arguments.length; i++) + validateChildKeys(arguments[i]); + i = {}; + var key = null; + if (null != config) + for (propName in (didWarnAboutOldJSXRuntime || + !("__self" in config) || + "key" in config || + ((didWarnAboutOldJSXRuntime = !0), + console.warn( + "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" + )), + hasValidKey(config) && + (checkKeyStringCoercion(config.key), (key = "" + config.key)), + config)) + hasOwnProperty.call(config, propName) && + "key" !== propName && + "__self" !== propName && + "__source" !== propName && + (i[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) i.children = children; + else if (1 < childrenLength) { + for ( + var childArray = Array(childrenLength), _i = 0; + _i < childrenLength; + _i++ + ) + childArray[_i] = arguments[_i + 2]; + Object.freeze && Object.freeze(childArray); + i.children = childArray; + } + if (type && type.defaultProps) + for (propName in ((childrenLength = type.defaultProps), childrenLength)) + void 0 === i[propName] && (i[propName] = childrenLength[propName]); + key && + defineKeyPropWarningGetter( + i, + "function" === typeof type + ? type.displayName || type.name || "Unknown" + : type + ); + var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return ReactElement( + type, + key, + i, + getOwner(), + propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, + propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.createRef = function () { + var refObject = { current: null }; + Object.seal(refObject); + return refObject; + }; + exports.forwardRef = function (render) { + null != render && render.$$typeof === REACT_MEMO_TYPE + ? console.error( + "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." + ) + : "function" !== typeof render + ? console.error( + "forwardRef requires a render function but was given %s.", + null === render ? "null" : typeof render + ) + : 0 !== render.length && + 2 !== render.length && + console.error( + "forwardRef render functions accept exactly two parameters: props and ref. %s", + 1 === render.length + ? "Did you forget to use the ref parameter?" + : "Any additional parameter will be undefined." + ); + null != render && + null != render.defaultProps && + console.error( + "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" + ); + var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render }, + ownName; + Object.defineProperty(elementType, "displayName", { + enumerable: !1, + configurable: !0, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + render.name || + render.displayName || + (Object.defineProperty(render, "name", { value: name }), + (render.displayName = name)); + } + }); + return elementType; + }; + exports.isValidElement = isValidElement; + exports.lazy = function (ctor) { + ctor = { _status: -1, _result: ctor }; + var lazyType = { + $$typeof: REACT_LAZY_TYPE, + _payload: ctor, + _init: lazyInitializer + }, + ioInfo = { + name: "lazy", + start: -1, + end: -1, + value: null, + owner: null, + debugStack: Error("react-stack-top-frame"), + debugTask: console.createTask ? console.createTask("lazy()") : null + }; + ctor._ioInfo = ioInfo; + lazyType._debugInfo = [{ awaited: ioInfo }]; + return lazyType; + }; + exports.memo = function (type, compare) { + null == type && + console.error( + "memo: The first argument must be a component. Instead received: %s", + null === type ? "null" : typeof type + ); + compare = { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: void 0 === compare ? null : compare + }; + var ownName; + Object.defineProperty(compare, "displayName", { + enumerable: !1, + configurable: !0, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + type.name || + type.displayName || + (Object.defineProperty(type, "name", { value: name }), + (type.displayName = name)); + } + }); + return compare; + }; + exports.use = function (usable) { + return resolveDispatcher().use(usable); + }; + exports.useCallback = function (callback, deps) { + return resolveDispatcher().useCallback(callback, deps); + }; + exports.useDebugValue = function (value, formatterFn) { + return resolveDispatcher().useDebugValue(value, formatterFn); + }; + exports.useId = function () { + return resolveDispatcher().useId(); + }; + exports.useMemo = function (create, deps) { + return resolveDispatcher().useMemo(create, deps); + }; + exports.version = "19.2.0"; + })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js new file mode 100644 index 0000000000..cb7b63b319 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js @@ -0,0 +1,423 @@ +/** + * @license React + * react.react-server.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; +var ReactSharedInternals = { H: null, A: null }; +function formatProdErrorMessage(code) { + var url = "https://react.dev/errors/" + code; + if (1 < arguments.length) { + url += "?args[]=" + encodeURIComponent(arguments[1]); + for (var i = 2; i < arguments.length; i++) + url += "&args[]=" + encodeURIComponent(arguments[i]); + } + return ( + "Minified React error #" + + code + + "; visit " + + url + + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + ); +} +var isArrayImpl = Array.isArray; +function noop() {} +var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), + REACT_PORTAL_TYPE = Symbol.for("react.portal"), + REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), + REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), + REACT_PROFILER_TYPE = Symbol.for("react.profiler"), + REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), + REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), + REACT_MEMO_TYPE = Symbol.for("react.memo"), + REACT_LAZY_TYPE = Symbol.for("react.lazy"), + MAYBE_ITERATOR_SYMBOL = Symbol.iterator; +function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = + (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || + maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; +} +var hasOwnProperty = Object.prototype.hasOwnProperty, + assign = Object.assign; +function ReactElement(type, key, props) { + var refProp = props.ref; + return { + $$typeof: REACT_ELEMENT_TYPE, + type: type, + key: key, + ref: void 0 !== refProp ? refProp : null, + props: props + }; +} +function cloneAndReplaceKey(oldElement, newKey) { + return ReactElement(oldElement.type, newKey, oldElement.props); +} +function isValidElement(object) { + return ( + "object" === typeof object && + null !== object && + object.$$typeof === REACT_ELEMENT_TYPE + ); +} +function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return ( + "$" + + key.replace(/[=:]/g, function (match) { + return escaperLookup[match]; + }) + ); +} +var userProvidedKeyEscapeRegex = /\/+/g; +function getElementKey(element, index) { + return "object" === typeof element && null !== element && null != element.key + ? escape("" + element.key) + : index.toString(36); +} +function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ( + ("string" === typeof thenable.status + ? thenable.then(noop, noop) + : ((thenable.status = "pending"), + thenable.then( + function (fulfilledValue) { + "pending" === thenable.status && + ((thenable.status = "fulfilled"), + (thenable.value = fulfilledValue)); + }, + function (error) { + "pending" === thenable.status && + ((thenable.status = "rejected"), (thenable.reason = error)); + } + )), + thenable.status) + ) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; +} +function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = !1; + if (null === children) invokeCallback = !0; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = !0; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = !0; + break; + case REACT_LAZY_TYPE: + return ( + (invokeCallback = children._init), + mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ) + ); + } + } + if (invokeCallback) + return ( + (callback = callback(children)), + (invokeCallback = + "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), + isArrayImpl(callback) + ? ((escapedPrefix = ""), + null != invokeCallback && + (escapedPrefix = + invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), + mapIntoArray(callback, array, escapedPrefix, "", function (c) { + return c; + })) + : null != callback && + (isValidElement(callback) && + (callback = cloneAndReplaceKey( + callback, + escapedPrefix + + (null == callback.key || + (children && children.key === callback.key) + ? "" + : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + + invokeCallback + )), + array.push(callback)), + 1 + ); + invokeCallback = 0; + var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + (nameSoFar = children[i]), + (type = nextNamePrefix + getElementKey(nameSoFar, i)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if (((i = getIteratorFn(children)), "function" === typeof i)) + for ( + children = i.call(children), i = 0; + !(nameSoFar = children.next()).done; + + ) + (nameSoFar = nameSoFar.value), + (type = nextNamePrefix + getElementKey(nameSoFar, i++)), + (invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + )); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + formatProdErrorMessage( + 31, + "[object Object]" === array + ? "object with keys {" + Object.keys(children).join(", ") + "}" + : array + ) + ); + } + return invokeCallback; +} +function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], + count = 0; + mapIntoArray(children, result, "", "", function (child) { + return func.call(context, child, count++); + }); + return result; +} +function lazyInitializer(payload) { + if (-1 === payload._status) { + var ctor = payload._result; + ctor = ctor(); + ctor.then( + function (moduleObject) { + if (0 === payload._status || -1 === payload._status) + (payload._status = 1), (payload._result = moduleObject); + }, + function (error) { + if (0 === payload._status || -1 === payload._status) + (payload._status = 2), (payload._result = error); + } + ); + -1 === payload._status && ((payload._status = 0), (payload._result = ctor)); + } + if (1 === payload._status) return payload._result.default; + throw payload._result; +} +function createCacheRoot() { + return new WeakMap(); +} +function createCacheNode() { + return { s: 0, v: void 0, o: null, p: null }; +} +exports.Children = { + map: mapChildren, + forEach: function (children, forEachFunc, forEachContext) { + mapChildren( + children, + function () { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function (children) { + var n = 0; + mapChildren(children, function () { + n++; + }); + return n; + }, + toArray: function (children) { + return ( + mapChildren(children, function (child) { + return child; + }) || [] + ); + }, + only: function (children) { + if (!isValidElement(children)) throw Error(formatProdErrorMessage(143)); + return children; + } +}; +exports.Fragment = REACT_FRAGMENT_TYPE; +exports.Profiler = REACT_PROFILER_TYPE; +exports.StrictMode = REACT_STRICT_MODE_TYPE; +exports.Suspense = REACT_SUSPENSE_TYPE; +exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = + ReactSharedInternals; +exports.cache = function (fn) { + return function () { + var dispatcher = ReactSharedInternals.A; + if (!dispatcher) return fn.apply(null, arguments); + var fnMap = dispatcher.getCacheForType(createCacheRoot); + dispatcher = fnMap.get(fn); + void 0 === dispatcher && + ((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher)); + fnMap = 0; + for (var l = arguments.length; fnMap < l; fnMap++) { + var arg = arguments[fnMap]; + if ( + "function" === typeof arg || + ("object" === typeof arg && null !== arg) + ) { + var objectCache = dispatcher.o; + null === objectCache && (dispatcher.o = objectCache = new WeakMap()); + dispatcher = objectCache.get(arg); + void 0 === dispatcher && + ((dispatcher = createCacheNode()), objectCache.set(arg, dispatcher)); + } else + (objectCache = dispatcher.p), + null === objectCache && (dispatcher.p = objectCache = new Map()), + (dispatcher = objectCache.get(arg)), + void 0 === dispatcher && + ((dispatcher = createCacheNode()), + objectCache.set(arg, dispatcher)); + } + if (1 === dispatcher.s) return dispatcher.v; + if (2 === dispatcher.s) throw dispatcher.v; + try { + var result = fn.apply(null, arguments); + fnMap = dispatcher; + fnMap.s = 1; + return (fnMap.v = result); + } catch (error) { + throw ((result = dispatcher), (result.s = 2), (result.v = error), error); + } + }; +}; +exports.cacheSignal = function () { + var dispatcher = ReactSharedInternals.A; + return dispatcher ? dispatcher.cacheSignal() : null; +}; +exports.captureOwnerStack = function () { + return null; +}; +exports.cloneElement = function (element, config, children) { + if (null === element || void 0 === element) + throw Error(formatProdErrorMessage(267, element)); + var props = assign({}, element.props), + key = element.key; + if (null != config) + for (propName in (void 0 !== config.key && (key = "" + config.key), config)) + !hasOwnProperty.call(config, propName) || + "key" === propName || + "__self" === propName || + "__source" === propName || + ("ref" === propName && void 0 === config.ref) || + (props[propName] = config[propName]); + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + for (var childArray = Array(propName), i = 0; i < propName; i++) + childArray[i] = arguments[i + 2]; + props.children = childArray; + } + return ReactElement(element.type, key, props); +}; +exports.createElement = function (type, config, children) { + var propName, + props = {}, + key = null; + if (null != config) + for (propName in (void 0 !== config.key && (key = "" + config.key), config)) + hasOwnProperty.call(config, propName) && + "key" !== propName && + "__self" !== propName && + "__source" !== propName && + (props[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) props.children = children; + else if (1 < childrenLength) { + for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) + childArray[i] = arguments[i + 2]; + props.children = childArray; + } + if (type && type.defaultProps) + for (propName in ((childrenLength = type.defaultProps), childrenLength)) + void 0 === props[propName] && + (props[propName] = childrenLength[propName]); + return ReactElement(type, key, props); +}; +exports.createRef = function () { + return { current: null }; +}; +exports.forwardRef = function (render) { + return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; +}; +exports.isValidElement = isValidElement; +exports.lazy = function (ctor) { + return { + $$typeof: REACT_LAZY_TYPE, + _payload: { _status: -1, _result: ctor }, + _init: lazyInitializer + }; +}; +exports.memo = function (type, compare) { + return { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: void 0 === compare ? null : compare + }; +}; +exports.use = function (usable) { + return ReactSharedInternals.H.use(usable); +}; +exports.useCallback = function (callback, deps) { + return ReactSharedInternals.H.useCallback(callback, deps); +}; +exports.useDebugValue = function () {}; +exports.useId = function () { + return ReactSharedInternals.H.useId(); +}; +exports.useMemo = function (create, deps) { + return ReactSharedInternals.H.useMemo(create, deps); +}; +exports.version = "19.2.0"; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js new file mode 100644 index 0000000000..ab6aabb0a9 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js @@ -0,0 +1,14 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-compiler-runtime.production.js'); +} else { + module.exports = require('./cjs/react-compiler-runtime.development.js'); +} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/index.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/index.js new file mode 100644 index 0000000000..d830d7a2f9 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/index.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react.production.js'); +} else { + module.exports = require('./cjs/react.development.js'); +} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js new file mode 100644 index 0000000000..0a80857d2d --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-jsx-dev-runtime.production.js'); +} else { + module.exports = require('./cjs/react-jsx-dev-runtime.development.js'); +} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js new file mode 100644 index 0000000000..d11e6e82d0 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-jsx-dev-runtime.react-server.production.js'); +} else { + module.exports = require('./cjs/react-jsx-dev-runtime.react-server.development.js'); +} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js new file mode 100644 index 0000000000..8679b72159 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-jsx-runtime.production.js'); +} else { + module.exports = require('./cjs/react-jsx-runtime.development.js'); +} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js new file mode 100644 index 0000000000..2d23c8c344 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react-jsx-runtime.react-server.production.js'); +} else { + module.exports = require('./cjs/react-jsx-runtime.react-server.development.js'); +} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/package.json b/node_modules/.pnpm/react@19.2.0/node_modules/react/package.json new file mode 100644 index 0000000000..ece7bd3190 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/package.json @@ -0,0 +1,51 @@ +{ + "name": "react", + "description": "React is a JavaScript library for building user interfaces.", + "keywords": [ + "react" + ], + "version": "19.2.0", + "homepage": "https://react.dev/", + "bugs": "https://github.com/facebook/react/issues", + "license": "MIT", + "files": [ + "LICENSE", + "README.md", + "index.js", + "cjs/", + "compiler-runtime.js", + "jsx-runtime.js", + "jsx-runtime.react-server.js", + "jsx-dev-runtime.js", + "jsx-dev-runtime.react-server.js", + "react.react-server.js" + ], + "main": "index.js", + "exports": { + ".": { + "react-server": "./react.react-server.js", + "default": "./index.js" + }, + "./package.json": "./package.json", + "./jsx-runtime": { + "react-server": "./jsx-runtime.react-server.js", + "default": "./jsx-runtime.js" + }, + "./jsx-dev-runtime": { + "react-server": "./jsx-dev-runtime.react-server.js", + "default": "./jsx-dev-runtime.js" + }, + "./compiler-runtime": { + "react-server": "./compiler-runtime.js", + "default": "./compiler-runtime.js" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/facebook/react.git", + "directory": "packages/react" + }, + "engines": { + "node": ">=0.10.0" + } +} \ No newline at end of file diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js new file mode 100644 index 0000000000..c66e3b7636 --- /dev/null +++ b/node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react.react-server.production.js'); +} else { + module.exports = require('./cjs/react.react-server.development.js'); +} diff --git a/node_modules/embla-carousel-autoplay b/node_modules/embla-carousel-autoplay new file mode 120000 index 0000000000..a653f304af --- /dev/null +++ b/node_modules/embla-carousel-autoplay @@ -0,0 +1 @@ +.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay \ No newline at end of file diff --git a/node_modules/embla-carousel-react b/node_modules/embla-carousel-react new file mode 120000 index 0000000000..7ae3795080 --- /dev/null +++ b/node_modules/embla-carousel-react @@ -0,0 +1 @@ +.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000000..221aa2646b --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "embla-carousel-autoplay": "^8.6.0", + "embla-carousel-react": "^8.6.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000..78670e94f8 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,60 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + embla-carousel-autoplay: + specifier: ^8.6.0 + version: 8.6.0(embla-carousel@8.6.0) + embla-carousel-react: + specifier: ^8.6.0 + version: 8.6.0(react@19.2.0) + +packages: + + embla-carousel-autoplay@8.6.0: + resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0: + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + embla-carousel-reactive-utils@8.6.0: + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + +snapshots: + + embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0(react@19.2.0): + dependencies: + embla-carousel: 8.6.0 + embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) + react: 19.2.0 + + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: {} + + react@19.2.0: {} diff --git a/web/app/components/base/carousel/index.tsx b/web/app/components/base/carousel/index.tsx new file mode 100644 index 0000000000..d3baeab1c6 --- /dev/null +++ b/web/app/components/base/carousel/index.tsx @@ -0,0 +1,225 @@ +import cn from '@/utils/classnames' +import Autoplay from 'embla-carousel-autoplay' +import useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react' +import * as React from 'react' + +type CarouselApi = UseEmblaCarouselType[1] +type UseCarouselParameters = Parameters +type CarouselOptions = UseCarouselParameters[0] +type CarouselPlugin = UseCarouselParameters[1] + +type CarouselProps = { + opts?: CarouselOptions; + plugins?: CarouselPlugin; + orientation?: 'horizontal' | 'vertical'; +} + +type CarouselContextValue = { + carouselRef: ReturnType[0]; + api: ReturnType[1]; + scrollPrev: () => void; + scrollNext: () => void; + selectedIndex: number; + canScrollPrev: boolean; + canScrollNext: boolean; +} & CarouselProps + +const CarouselContext = React.createContext(null) + +function useCarousel() { + const context = React.useContext(CarouselContext) + + if (!context) + throw new Error('useCarousel must be used within a ') + + return context +} + +type TCarousel = { + Content: typeof CarouselContent; + Item: typeof CarouselItem; + Previous: typeof CarouselPrevious; + Next: typeof CarouselNext; + Dot: typeof CarouselDot; + Plugin: typeof CarouselPlugins; +} & React.ForwardRefExoticComponent< + React.HTMLAttributes & CarouselProps & React.RefAttributes +> + +const Carousel: TCarousel = React.forwardRef( + ({ orientation = 'horizontal', opts, plugins, className, children, ...props }, ref) => { + const [carouselRef, api] = useEmblaCarousel( + { ...opts, axis: orientation === 'horizontal' ? 'x' : 'y' }, + plugins, + ) + const [canScrollPrev, setCanScrollPrev] = React.useState(false) + const [canScrollNext, setCanScrollNext] = React.useState(false) + const [selectedIndex, setSelectedIndex] = React.useState(0) + + const scrollPrev = React.useCallback(() => { + api?.scrollPrev() + }, [api]) + + const scrollNext = React.useCallback(() => { + api?.scrollNext() + }, [api]) + + React.useEffect(() => { + if (!api) + return + + const onSelect = (api: CarouselApi) => { + if (!api) + return + + setSelectedIndex(api.selectedScrollSnap()) + setCanScrollPrev(api.canScrollPrev()) + setCanScrollNext(api.canScrollNext()) + } + + onSelect(api) + api.on('reInit', onSelect) + api.on('select', onSelect) + + return () => { + api?.off('select', onSelect) + } + }, [api]) + + React.useImperativeHandle(ref, () => ({ + carouselRef, + api, + opts, + orientation, + scrollPrev, + scrollNext, + selectedIndex, + canScrollPrev, + canScrollNext, + })) + + return ( + +
+ {children} +
+
+ ) + }, +) as TCarousel +Carousel.displayName = 'Carousel' + +const CarouselContent = React.forwardRef>( + ({ className, ...props }, ref) => { + const { orientation } = useCarousel() + + return ( +
+ ) + }, +) +CarouselContent.displayName = 'CarouselContent' + +const CarouselItem = React.forwardRef>( + ({ className, ...props }, ref) => { + return ( +
+ ) + }, +) +CarouselItem.displayName = 'CarouselItem' + +type CarouselActionProps = { + children?: React.ReactNode; +} & Omit, 'disabled' | 'onClick'> + +const CarouselPrevious = React.forwardRef( + ({ children, ...props }, ref) => { + const { scrollPrev, canScrollPrev } = useCarousel() + + return ( + + ) + }, +) +CarouselPrevious.displayName = 'CarouselPrevious' + +const CarouselNext = React.forwardRef( + ({ children, ...props }, ref) => { + const { scrollNext, canScrollNext } = useCarousel() + + return ( + + ) + }, +) +CarouselNext.displayName = 'CarouselNext' + +const CarouselDot = React.forwardRef( + ({ children, ...props }, ref) => { + const { api, selectedIndex } = useCarousel() + + return api?.slideNodes().map((_, index) => { + return ( + + ) + }) + }, +) +CarouselDot.displayName = 'CarouselDot' + +const CarouselPlugins = { + Autoplay, +} + +Carousel.Content = CarouselContent +Carousel.Item = CarouselItem +Carousel.Previous = CarouselPrevious +Carousel.Next = CarouselNext +Carousel.Dot = CarouselDot +Carousel.Plugin = CarouselPlugins + +export { Carousel, useCarousel } diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index ce7f4c311f..58c850eb08 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -22,9 +22,9 @@ import { } from '@/models/app' import { useImportDSL } from '@/hooks/use-import-dsl' import DSLConfirmModal from '@/app/components/app/create-from-dsl-modal/dsl-confirm-modal' -import Banner from '../banner' -import Button from '../../base/button' +import Banner from '@/app/components/explore/banner/banner' import { useGlobalPublicStore } from '@/context/global-public-context' +import Button from '@/app/components/base/button' type AppsProps = { onSuccess?: () => void diff --git a/web/app/components/explore/banner.tsx b/web/app/components/explore/banner.tsx deleted file mode 100644 index b33347f513..0000000000 --- a/web/app/components/explore/banner.tsx +++ /dev/null @@ -1,12 +0,0 @@ -'use client' -import type { FC } from 'react' -import React from 'react' - -const Banner: FC = () => { - return ( -
- Banner placeholder -
- ) -} -export default React.memo(Banner) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx new file mode 100644 index 0000000000..65585ed316 --- /dev/null +++ b/web/app/components/explore/banner/banner-item.tsx @@ -0,0 +1,110 @@ +import type { FC } from 'react' +import { useCallback, useMemo } from 'react' +import { RiArrowRightLine } from '@remixicon/react' +import { useCarousel } from '@/app/components/base/carousel' +import { IndicatorButton } from './indicator-button' +import { useTranslation } from 'react-i18next' +import cn from '@/utils/classnames' + +export type BannerData = { + id: string + content: { + 'category': string + 'title': string + 'description': string + 'img-src': string + } + status: 'enabled' | 'disabled' + link: string + created_at: number +} + +type BannerItemProps = { + banner: BannerData + autoplayDelay: number +} + +export const BannerItem: FC = ({ banner, autoplayDelay }) => { + const { t } = useTranslation() + const { api, selectedIndex } = useCarousel() + + const slideInfo = useMemo(() => { + const slides = api?.slideNodes() ?? [] + const totalSlides = slides.length + const nextIndex = totalSlides > 0 ? (selectedIndex + 1) % totalSlides : 0 + return { slides, totalSlides, nextIndex } + }, [api, selectedIndex]) + + const handleClick = useCallback(() => { + if (banner.link) + window.open(banner.link, '_blank', 'noopener,noreferrer') + }, [banner.link]) + + return ( +
+ {/* Left content area */} +
+
+ {/* Text section */} +
+ {/* Title area */} +
+

+ {banner.content.category} +

+

+ {banner.content.title} +

+
+ {/* Description area */} +
+ {banner.content.description} +
+
+ + {/* Actions section */} +
+ {/* View more button */} +
+
+ +
+ + {t('explore.banner.viewMore')} + +
+ + {/* Slide navigation indicators */} +
+ {slideInfo.slides.map((_: unknown, index: number) => ( + api?.scrollTo(index)} + /> + ))} +
+
+
+
+ + {/* Right image area */} +
+ {banner.content.title} +
+
+ ) +} diff --git a/web/app/components/explore/banner/banner.tsx b/web/app/components/explore/banner/banner.tsx new file mode 100644 index 0000000000..c917f64734 --- /dev/null +++ b/web/app/components/explore/banner/banner.tsx @@ -0,0 +1,57 @@ +import type { FC } from 'react' +import React, { useMemo } from 'react' +import { Carousel } from '@/app/components/base/carousel' +import { useGetBanners } from '@/service/use-explore' +import Loading from '../../base/loading' +import { type BannerData, BannerItem } from './banner-item' +import { useI18N } from '@/context/i18n' + +const AUTOPLAY_DELAY = 5000 +const MIN_LOADING_HEIGHT = 168 + +const Banner: FC = () => { + const { locale } = useI18N() + const { data: banners, isLoading } = useGetBanners(locale) + + const enabledBanners = useMemo( + () => banners?.filter((banner: BannerData) => banner.status === 'enabled') ?? [], + [banners], + ) + + if (isLoading || !banners) { + return ( +
+ +
+ ) + } + + if (enabledBanners.length === 0) + return null + + return ( + + + {enabledBanners.map((banner: BannerData) => ( + + + + ))} + + + ) +} + +export default React.memo(Banner) diff --git a/web/app/components/explore/banner/indicator-button.tsx b/web/app/components/explore/banner/indicator-button.tsx new file mode 100644 index 0000000000..469f0906da --- /dev/null +++ b/web/app/components/explore/banner/indicator-button.tsx @@ -0,0 +1,102 @@ +import type { FC } from 'react' +import { useCallback, useEffect, useRef, useState } from 'react' +import cn from '@/utils/classnames' + +type IndicatorButtonProps = { + index: number + selectedIndex: number + isNextSlide: boolean + autoplayDelay: number + onClick: () => void +} + +const PROGRESS_MAX = 100 +const DEGREES_PER_PERCENT = 3.6 + +export const IndicatorButton: FC = ({ + index, + selectedIndex, + isNextSlide, + autoplayDelay, + onClick, +}) => { + const [progress, setProgress] = useState(0) + const animationIdRef = useRef(0) + const frameIdRef = useRef(undefined) + + useEffect(() => { + if (!isNextSlide) { + setProgress(0) + if (frameIdRef.current) + cancelAnimationFrame(frameIdRef.current) + + return + } + + // 重置并开始新动画 + setProgress(0) + animationIdRef.current += 1 + + const startTime = Date.now() + + const animate = () => { + const elapsed = Date.now() - startTime + const newProgress = Math.min((elapsed / autoplayDelay) * PROGRESS_MAX, PROGRESS_MAX) + setProgress(newProgress) + + if (newProgress < PROGRESS_MAX) + frameIdRef.current = requestAnimationFrame(animate) + } + + frameIdRef.current = requestAnimationFrame(animate) + + return () => { + if (frameIdRef.current) + cancelAnimationFrame(frameIdRef.current) + } + }, [isNextSlide, autoplayDelay]) + + const isActive = index === selectedIndex + + const handleClick = useCallback((e: React.MouseEvent) => { + e.stopPropagation() + onClick() + }, [onClick]) + + return ( + + ) +} diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index d1373d7298..bd016f9da9 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -45,6 +45,9 @@ const translation = { Workflow: 'Workflow', Entertainment: 'Entertainment', }, + banner: { + viewMore: 'VIEW MORE', + }, } export default translation diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index b8e3962d6e..d897c46d23 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -46,6 +46,9 @@ const translation = { Agent: 'エージェント', Entertainment: 'エンターテイメント', }, + banner: { + viewMore: 'もっと見る', + }, } export default translation diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index 5c338d0c5d..3688c75063 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -46,6 +46,9 @@ const translation = { Workflow: '工作流', Entertainment: '娱乐', }, + banner: { + viewMore: '查看更多', + }, } export default translation diff --git a/web/service/explore.ts b/web/service/explore.ts index 6a440d7f5d..98acda346c 100644 --- a/web/service/explore.ts +++ b/web/service/explore.ts @@ -44,3 +44,8 @@ export const getToolProviders = () => { export const getAppAccessModeByAppId = (appId: string) => { return get<{ accessMode: AccessMode }>(`/enterprise/webapp/app/access-mode?appId=${appId}`) } + +export const fetchBanners = (language?: string): Promise => { + const url = language ? `/explore/banners?language=${language}` : '/explore/banners' + return get(url) +} diff --git a/web/service/use-explore.ts b/web/service/use-explore.ts index cbbb774cdc..f1a441f577 100644 --- a/web/service/use-explore.ts +++ b/web/service/use-explore.ts @@ -1,7 +1,7 @@ import { useGlobalPublicStore } from '@/context/global-public-context' import { AccessMode } from '@/models/access-control' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' -import { fetchInstalledAppList, getAppAccessModeByAppId, uninstallApp, updatePinStatus } from './explore' +import { fetchBanners, fetchInstalledAppList, getAppAccessModeByAppId, uninstallApp, updatePinStatus } from './explore' import { AppSourceType, fetchAppMeta, fetchAppParams } from './share' const NAME_SPACE = 'explore' @@ -79,3 +79,12 @@ export const useGetInstalledAppMeta = (appId: string | null) => { enabled: !!appId, }) } + +export const useGetBanners = (locale?: string) => { + return useQuery({ + queryKey: [NAME_SPACE, 'banners', locale], + queryFn: () => { + return fetchBanners(locale) + }, + }) +} From 0f52b34b61f0823e47f6ad34f929d28c62f57b68 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 14 Oct 2025 15:38:14 +0800 Subject: [PATCH 33/85] feat: try apps basic app preveiw --- .../try/preview/[appId]/page.tsx | 17 + .../components/app/configuration/preview.tsx | 316 ++++++++++++++++++ web/service/try-app.ts | 2 + web/types/app.ts | 1 + 4 files changed, 336 insertions(+) create mode 100644 web/app/(commonLayout)/try/preview/[appId]/page.tsx create mode 100644 web/app/components/app/configuration/preview.tsx diff --git a/web/app/(commonLayout)/try/preview/[appId]/page.tsx b/web/app/(commonLayout)/try/preview/[appId]/page.tsx new file mode 100644 index 0000000000..bba616c3c0 --- /dev/null +++ b/web/app/(commonLayout)/try/preview/[appId]/page.tsx @@ -0,0 +1,17 @@ +import React from 'react' +import Main from '@/app/components/app/configuration/preview' + +export type IPreviewProps = { + params: { + appId: string + } +} + +async function Preview({ params }: IPreviewProps) { + const appId = (await params).appId + return ( +
+ ) +} + +export default Preview diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx new file mode 100644 index 0000000000..cba81a7199 --- /dev/null +++ b/web/app/components/app/configuration/preview.tsx @@ -0,0 +1,316 @@ +'use client' +import type { FC } from 'react' +import React, { useMemo, useState } from 'react' +import { clone } from 'lodash-es' + +import Loading from '@/app/components/base/loading' + +import type { ModelConfig as BackendModelConfig, PromptVariable } from '@/types/app' +import ConfigContext from '@/context/debug-configuration' +import Config from '@/app/components/app/configuration/config' +import Debug from '@/app/components/app/configuration/debug' +import { ModelFeatureEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' +import { ModelModeType, Resolution, TransferMethod } from '@/types/app' +import { PromptMode } from '@/models/debug' +import { ANNOTATION_DEFAULT, DEFAULT_AGENT_SETTING, DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG } from '@/config' +import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' +import type { FormValue } from '@/app/components/header/account-setting/model-provider-page/declarations' + +import { FeaturesProvider } from '@/app/components/base/features' +import type { Features as FeaturesData, FileUpload } from '@/app/components/base/features/types' +import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' +import { SupportUploadFileTypes } from '@/app/components/workflow/types' + +import { useGetTryAppInfo } from '@/service/use-try-app' +import { noop } from 'lodash' +import { correctModelProvider } from '@/utils' +import { userInputsFormToPromptVariables } from '@/utils/model-config' + +type Props = { + appId: string +} + +const defaultModelConfig = { + provider: 'langgenius/openai/openai', + model_id: 'gpt-3.5-turbo', + mode: ModelModeType.unset, + configs: { + prompt_template: '', + prompt_variables: [] as PromptVariable[], + }, + more_like_this: null, + opening_statement: '', + suggested_questions: [], + sensitive_word_avoidance: null, + speech_to_text: null, + text_to_speech: null, + file_upload: null, + suggested_questions_after_answer: null, + retriever_resource: null, + annotation_reply: null, + dataSets: [], + agentConfig: DEFAULT_AGENT_SETTING, +} +const Configuration: FC = ({ + appId, +}) => { + const media = useBreakpoints() + const isMobile = media === MediaType.mobile + + const { data: appDetail, isLoading } = useGetTryAppInfo(appId) + const modelConfig = ((modelConfig?: BackendModelConfig) => { + if(isLoading || !modelConfig) + return defaultModelConfig + + const model = modelConfig.model + const newModelConfig = { + provider: correctModelProvider(model.provider), + model_id: model.name, + mode: model.mode, + configs: { + prompt_template: modelConfig.pre_prompt || '', + prompt_variables: userInputsFormToPromptVariables( + [ + ...(modelConfig.user_input_form as any), + ...( + modelConfig.external_data_tools?.length + ? modelConfig.external_data_tools.map((item: any) => { + return { + external_data_tool: { + variable: item.variable as string, + label: item.label as string, + enabled: item.enabled, + type: item.type as string, + config: item.config, + required: true, + icon: item.icon, + icon_background: item.icon_background, + }, + } + }) + : [] + ), + ], + modelConfig.dataset_query_variable, + ), + }, + more_like_this: modelConfig.more_like_this, + opening_statement: modelConfig.opening_statement, + suggested_questions: modelConfig.suggested_questions, + sensitive_word_avoidance: modelConfig.sensitive_word_avoidance, + speech_to_text: modelConfig.speech_to_text, + text_to_speech: modelConfig.text_to_speech, + file_upload: modelConfig.file_upload, + suggested_questions_after_answer: modelConfig.suggested_questions_after_answer, + retriever_resource: modelConfig.retriever_resource, + annotation_reply: modelConfig.annotation_reply, + external_data_tools: modelConfig.external_data_tools, + dataSets: [], + agentConfig: appDetail?.mode === 'agent-chat' ? { + max_iteration: DEFAULT_AGENT_SETTING.max_iteration, + ...modelConfig.agent_mode, + // remove dataset + enabled: true, // modelConfig.agent_mode?.enabled is not correct. old app: the value of app with dataset's is always true + tools: [], + } : DEFAULT_AGENT_SETTING, + } + return newModelConfig + })(appDetail?.model_config) + const mode = appDetail?.mode + // const isChatApp = ['chat', 'advanced-chat', 'agent-chat'].includes(mode!) + + // chat configuration + const promptMode = modelConfig?.prompt_type === PromptMode.advanced ? PromptMode.advanced : PromptMode.simple + const isAdvancedMode = promptMode === PromptMode.advanced + const isAgent = mode === 'agent-chat' + const chatPromptConfig = isAdvancedMode ? (modelConfig?.chat_prompt_config || clone(DEFAULT_CHAT_PROMPT_CONFIG)) : undefined + const suggestedQuestions = modelConfig?.suggested_questions || [] + const moreLikeThisConfig = modelConfig?.more_like_this || { enabled: false } + const suggestedQuestionsAfterAnswerConfig = modelConfig?.suggested_questions_after_answer || { enabled: false } + const speechToTextConfig = modelConfig?.speech_to_text || { enabled: false } + const textToSpeechConfig = modelConfig?.text_to_speech || { enabled: false, voice: '', language: '' } + const citationConfig = modelConfig?.retriever_resource || { enabled: false } + const annotationConfig = modelConfig?.annotation_reply || { + id: '', + enabled: false, + score_threshold: ANNOTATION_DEFAULT.score_threshold, + embedding_model: { + embedding_provider_name: '', + embedding_model_name: '', + }, + } + const moderationConfig = modelConfig?.sensitive_word_avoidance || { enabled: false } + // completion configuration + const completionPromptConfig = modelConfig?.completion_prompt_config || clone(DEFAULT_COMPLETION_PROMPT_CONFIG) as any + + // datasets + const dataSets = (() => { + return [] + })() + // const selectedIds = dataSets.map(item => item.id) + + // prompt & model config + const inputs = {} + const query = '' + const completionParams = useState({}) + + // todo + const currModel: { + features: ModelFeatureEnum[] + } = { + features: [], + } + + const isShowVisionConfig = !!currModel?.features?.includes(ModelFeatureEnum.vision) + const isShowDocumentConfig = !!currModel?.features?.includes(ModelFeatureEnum.document) + const isShowAudioConfig = !!currModel?.features?.includes(ModelFeatureEnum.audio) + const isAllowVideoUpload = !!currModel?.features?.includes(ModelFeatureEnum.video) + const visionConfig = { + enabled: false, + number_limits: 2, + detail: Resolution.low, + transfer_methods: [TransferMethod.local_file], + } + + const featuresData: FeaturesData = useMemo(() => { + return { + moreLikeThis: modelConfig.more_like_this || { enabled: false }, + opening: { + enabled: !!modelConfig.opening_statement, + opening_statement: modelConfig.opening_statement || '', + suggested_questions: modelConfig.suggested_questions || [], + }, + moderation: modelConfig.sensitive_word_avoidance || { enabled: false }, + speech2text: modelConfig.speech_to_text || { enabled: false }, + text2speech: modelConfig.text_to_speech || { enabled: false }, + file: { + image: { + detail: modelConfig.file_upload?.image?.detail || Resolution.high, + enabled: !!modelConfig.file_upload?.image?.enabled, + number_limits: modelConfig.file_upload?.image?.number_limits || 3, + transfer_methods: modelConfig.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'], + }, + enabled: true, + allowed_file_types: modelConfig.file_upload?.allowed_file_types || [], + allowed_file_extensions: modelConfig.file_upload?.allowed_file_extensions || [...FILE_EXTS[SupportUploadFileTypes.image], ...FILE_EXTS[SupportUploadFileTypes.video]].map(ext => `.${ext}`), + allowed_file_upload_methods: modelConfig.file_upload?.allowed_file_upload_methods || modelConfig.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'], + number_limits: modelConfig.file_upload?.number_limits || modelConfig.file_upload?.image?.number_limits || 3, + fileUploadConfig: {}, + } as FileUpload, + suggested: modelConfig.suggested_questions_after_answer || { enabled: false }, + citation: modelConfig.retriever_resource || { enabled: false }, + annotationReply: modelConfig.annotation_reply || { enabled: false }, + } + }, [modelConfig]) + + if (isLoading) { + return
+ +
+ } + const value = { + appId, + isAPIKeySet: true, + isTrailFinished: false, + mode, + modelModeType: '', + promptMode, + isAdvancedMode, + isAgent, + isOpenAI: false, + isFunctionCall: false, + collectionList: [], + setPromptMode: noop, + canReturnToSimpleMode: false, + setCanReturnToSimpleMode: noop, + chatPromptConfig, + completionPromptConfig, + currentAdvancedPrompt: '', + setCurrentAdvancedPrompt: noop, + conversationHistoriesRole: completionPromptConfig.conversation_histories_role, + showHistoryModal: false, + setConversationHistoriesRole: noop, + hasSetBlockStatus: true, + conversationId: '', + introduction: '', + setIntroduction: noop, + suggestedQuestions, + setSuggestedQuestions: noop, + setConversationId: noop, + controlClearChatMessage: false, + setControlClearChatMessage: noop, + prevPromptConfig: {}, + setPrevPromptConfig: noop, + moreLikeThisConfig, + setMoreLikeThisConfig: noop, + suggestedQuestionsAfterAnswerConfig, + setSuggestedQuestionsAfterAnswerConfig: noop, + speechToTextConfig, + setSpeechToTextConfig: noop, + textToSpeechConfig, + setTextToSpeechConfig: noop, + citationConfig, + setCitationConfig: noop, + annotationConfig, + setAnnotationConfig: noop, + moderationConfig, + setModerationConfig: noop, + externalDataToolsConfig: {}, + setExternalDataToolsConfig: noop, + formattingChanged: false, + setFormattingChanged: noop, + inputs, + setInputs: noop, + query, + setQuery: noop, + completionParams, + setCompletionParams: noop, + modelConfig, + setModelConfig: noop, + showSelectDataSet: noop, + dataSets, + setDataSets: noop, + datasetConfigs: [], + datasetConfigsRef: {}, + setDatasetConfigs: noop, + hasSetContextVar: true, + isShowVisionConfig, + visionConfig, + setVisionConfig: noop, + isAllowVideoUpload, + isShowDocumentConfig, + isShowAudioConfig, + rerankSettingModalOpen: false, + setRerankSettingModalOpen: noop, + } + return ( + + +
+
+
+ +
+ {!isMobile &&
+
+ +
+
} +
+
+
+
+ ) +} +export default React.memo(Configuration) diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 78df7ba8ed..e174a6a35d 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -5,11 +5,13 @@ import { import type { SiteInfo, } from '@/models/share' +import type { ModelConfig } from '@/types/app' type TryAppInfo = { name: string mode: AppMode site: SiteInfo + model_config: ModelConfig } export const fetchTryAppInfo = async (appId: string) => { diff --git a/web/types/app.ts b/web/types/app.ts index abc5b34ca5..0a12e28729 100644 --- a/web/types/app.ts +++ b/web/types/app.ts @@ -243,6 +243,7 @@ export type ModelConfig = { image: VisionSettings } & UploadFileSetting files?: VisionFile[] + external_data_tools: any[] created_at?: number updated_at?: number } From 5653309080acf4425672a6445a435f5d2ef00c88 Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Tue, 14 Oct 2025 15:41:22 +0800 Subject: [PATCH 34/85] feat: add carousel & new banner of explore page --- web/app/components/explore/banner/indicator-button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/components/explore/banner/indicator-button.tsx b/web/app/components/explore/banner/indicator-button.tsx index 469f0906da..1ecb541c33 100644 --- a/web/app/components/explore/banner/indicator-button.tsx +++ b/web/app/components/explore/banner/indicator-button.tsx @@ -33,7 +33,7 @@ export const IndicatorButton: FC = ({ return } - // 重置并开始新动画 + // reset and start new animation setProgress(0) animationIdRef.current += 1 From 67bb14d3ee8add4e800e7cfa7f72cc8e9f7f24fe Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Tue, 14 Oct 2025 15:51:07 +0800 Subject: [PATCH 35/85] chore: update dependencies and improve explore page banner --- node_modules/.modules.yaml | 27 - node_modules/.pnpm-workspace-state.json | 25 - .../node_modules/embla-carousel | 1 - .../embla-carousel-autoplay/README.md | 233 --- .../cjs/components/Autoplay.d.ts | 27 - .../cjs/components/Options.d.ts | 14 - .../cjs/components/utils.d.ts | 4 - .../cjs/embla-carousel-autoplay.cjs.js | 197 -- .../cjs/embla-carousel-autoplay.cjs.js.map | 1 - .../embla-carousel-autoplay/cjs/index.d.ts | 2 - .../embla-carousel-autoplay/cjs/package.json | 55 - .../components/Autoplay.d.ts | 27 - .../components/Options.d.ts | 14 - .../components/utils.d.ts | 4 - .../embla-carousel-autoplay.umd.js | 1 - .../esm/components/Autoplay.d.ts | 27 - .../esm/components/Options.d.ts | 14 - .../esm/components/utils.d.ts | 4 - .../esm/embla-carousel-autoplay.esm.js | 195 -- .../esm/embla-carousel-autoplay.esm.js.map | 1 - .../embla-carousel-autoplay/esm/index.d.ts | 2 - .../embla-carousel-autoplay/esm/package.json | 55 - .../embla-carousel-autoplay/index.d.ts | 2 - .../embla-carousel-autoplay/package.json | 77 - .../node_modules/embla-carousel | 1 - .../embla-carousel-react/README.md | 233 --- .../cjs/components/useEmblaCarousel.d.ts | 11 - .../cjs/embla-carousel-react.cjs.js | 40 - .../cjs/embla-carousel-react.cjs.js.map | 1 - .../embla-carousel-react/cjs/index.d.ts | 2 - .../embla-carousel-react/cjs/package.json | 60 - .../components/useEmblaCarousel.d.ts | 11 - .../embla-carousel-react.umd.js | 1 - .../esm/components/useEmblaCarousel.d.ts | 11 - .../esm/embla-carousel-react.esm.js | 38 - .../esm/embla-carousel-react.esm.js.map | 1 - .../embla-carousel-react/esm/index.d.ts | 2 - .../embla-carousel-react/esm/package.json | 60 - .../embla-carousel-react/index.d.ts | 2 - .../embla-carousel-react/package.json | 82 - .../embla-carousel-reactive-utils | 1 - .../node_modules/react | 1 - .../node_modules/embla-carousel | 1 - .../embla-carousel-reactive-utils/README.md | 233 --- .../cjs/components/utils.d.ts | 7 - .../cjs/embla-carousel-reactive-utils.cjs.js | 44 - .../embla-carousel-reactive-utils.cjs.js.map | 1 - .../cjs/index.d.ts | 1 - .../cjs/package.json | 55 - .../components/utils.d.ts | 7 - .../embla-carousel-reactive-utils.umd.js | 1 - .../esm/components/utils.d.ts | 7 - .../esm/embla-carousel-reactive-utils.esm.js | 39 - .../embla-carousel-reactive-utils.esm.js.map | 1 - .../esm/index.d.ts | 1 - .../esm/package.json | 55 - .../embla-carousel-reactive-utils/index.d.ts | 1 - .../package.json | 77 - .../node_modules/embla-carousel/README.md | 233 --- .../cjs/components/Alignment.d.ts | 5 - .../cjs/components/Animations.d.ts | 13 - .../embla-carousel/cjs/components/Axis.d.ts | 14 - .../cjs/components/Counter.d.ts | 7 - .../cjs/components/DragHandler.d.ts | 21 - .../cjs/components/DragTracker.d.ts | 10 - .../cjs/components/EmblaCarousel.d.ts | 32 - .../embla-carousel/cjs/components/Engine.d.ts | 64 - .../cjs/components/EventHandler.d.ts | 27 - .../cjs/components/EventStore.d.ts | 9 - .../embla-carousel/cjs/components/Limit.d.ts | 11 - .../cjs/components/NodeRects.d.ts | 12 - .../cjs/components/Options.d.ts | 40 - .../cjs/components/OptionsHandler.d.ts | 10 - .../cjs/components/PercentOfView.d.ts | 4 - .../cjs/components/Plugins.d.ts | 16 - .../cjs/components/PluginsHandler.d.ts | 8 - .../cjs/components/ResizeHandler.d.ts | 13 - .../cjs/components/ScrollBody.d.ts | 13 - .../cjs/components/ScrollBounds.d.ts | 10 - .../cjs/components/ScrollContain.d.ts | 7 - .../cjs/components/ScrollLimit.d.ts | 5 - .../cjs/components/ScrollLooper.d.ts | 6 - .../cjs/components/ScrollProgress.d.ts | 5 - .../cjs/components/ScrollSnaps.d.ts | 9 - .../cjs/components/ScrollTarget.d.ts | 12 - .../cjs/components/ScrollTo.d.ts | 11 - .../cjs/components/SlideFocus.d.ts | 13 - .../cjs/components/SlideLooper.d.ts | 18 - .../cjs/components/SlideRegistry.d.ts | 7 - .../cjs/components/SlideSizes.d.ts | 10 - .../cjs/components/SlidesHandler.d.ts | 10 - .../cjs/components/SlidesInView.d.ts | 8 - .../cjs/components/SlidesToScroll.d.ts | 7 - .../cjs/components/Translate.d.ts | 7 - .../cjs/components/Vector1d.d.ts | 7 - .../embla-carousel/cjs/components/utils.d.ts | 19 - .../embla-carousel/cjs/embla-carousel.cjs.js | 1672 ----------------- .../cjs/embla-carousel.cjs.js.map | 1 - .../embla-carousel/cjs/index.d.ts | 11 - .../embla-carousel/cjs/package.json | 52 - .../embla-carousel/components/Alignment.d.ts | 5 - .../embla-carousel/components/Animations.d.ts | 13 - .../embla-carousel/components/Axis.d.ts | 14 - .../embla-carousel/components/Counter.d.ts | 7 - .../components/DragHandler.d.ts | 21 - .../components/DragTracker.d.ts | 10 - .../components/EmblaCarousel.d.ts | 32 - .../embla-carousel/components/Engine.d.ts | 64 - .../components/EventHandler.d.ts | 27 - .../embla-carousel/components/EventStore.d.ts | 9 - .../embla-carousel/components/Limit.d.ts | 11 - .../embla-carousel/components/NodeRects.d.ts | 12 - .../embla-carousel/components/Options.d.ts | 40 - .../components/OptionsHandler.d.ts | 10 - .../components/PercentOfView.d.ts | 4 - .../embla-carousel/components/Plugins.d.ts | 16 - .../components/PluginsHandler.d.ts | 8 - .../components/ResizeHandler.d.ts | 13 - .../embla-carousel/components/ScrollBody.d.ts | 13 - .../components/ScrollBounds.d.ts | 10 - .../components/ScrollContain.d.ts | 7 - .../components/ScrollLimit.d.ts | 5 - .../components/ScrollLooper.d.ts | 6 - .../components/ScrollProgress.d.ts | 5 - .../components/ScrollSnaps.d.ts | 9 - .../components/ScrollTarget.d.ts | 12 - .../embla-carousel/components/ScrollTo.d.ts | 11 - .../embla-carousel/components/SlideFocus.d.ts | 13 - .../components/SlideLooper.d.ts | 18 - .../components/SlideRegistry.d.ts | 7 - .../embla-carousel/components/SlideSizes.d.ts | 10 - .../components/SlidesHandler.d.ts | 10 - .../components/SlidesInView.d.ts | 8 - .../components/SlidesToScroll.d.ts | 7 - .../embla-carousel/components/Translate.d.ts | 7 - .../embla-carousel/components/Vector1d.d.ts | 7 - .../embla-carousel/components/utils.d.ts | 19 - .../embla-carousel/embla-carousel.umd.js | 1 - .../esm/components/Alignment.d.ts | 5 - .../esm/components/Animations.d.ts | 13 - .../embla-carousel/esm/components/Axis.d.ts | 14 - .../esm/components/Counter.d.ts | 7 - .../esm/components/DragHandler.d.ts | 21 - .../esm/components/DragTracker.d.ts | 10 - .../esm/components/EmblaCarousel.d.ts | 32 - .../embla-carousel/esm/components/Engine.d.ts | 64 - .../esm/components/EventHandler.d.ts | 27 - .../esm/components/EventStore.d.ts | 9 - .../embla-carousel/esm/components/Limit.d.ts | 11 - .../esm/components/NodeRects.d.ts | 12 - .../esm/components/Options.d.ts | 40 - .../esm/components/OptionsHandler.d.ts | 10 - .../esm/components/PercentOfView.d.ts | 4 - .../esm/components/Plugins.d.ts | 16 - .../esm/components/PluginsHandler.d.ts | 8 - .../esm/components/ResizeHandler.d.ts | 13 - .../esm/components/ScrollBody.d.ts | 13 - .../esm/components/ScrollBounds.d.ts | 10 - .../esm/components/ScrollContain.d.ts | 7 - .../esm/components/ScrollLimit.d.ts | 5 - .../esm/components/ScrollLooper.d.ts | 6 - .../esm/components/ScrollProgress.d.ts | 5 - .../esm/components/ScrollSnaps.d.ts | 9 - .../esm/components/ScrollTarget.d.ts | 12 - .../esm/components/ScrollTo.d.ts | 11 - .../esm/components/SlideFocus.d.ts | 13 - .../esm/components/SlideLooper.d.ts | 18 - .../esm/components/SlideRegistry.d.ts | 7 - .../esm/components/SlideSizes.d.ts | 10 - .../esm/components/SlidesHandler.d.ts | 10 - .../esm/components/SlidesInView.d.ts | 8 - .../esm/components/SlidesToScroll.d.ts | 7 - .../esm/components/Translate.d.ts | 7 - .../esm/components/Vector1d.d.ts | 7 - .../embla-carousel/esm/components/utils.d.ts | 19 - .../embla-carousel/esm/embla-carousel.esm.js | 1670 ---------------- .../esm/embla-carousel.esm.js.map | 1 - .../embla-carousel/esm/index.d.ts | 11 - .../embla-carousel/esm/package.json | 52 - .../node_modules/embla-carousel/index.d.ts | 11 - .../node_modules/embla-carousel/package.json | 74 - node_modules/.pnpm/lock.yaml | 60 - .../.pnpm/node_modules/embla-carousel | 1 - .../embla-carousel-reactive-utils | 1 - node_modules/.pnpm/node_modules/react | 1 - .../react@19.2.0/node_modules/react/LICENSE | 21 - .../react@19.2.0/node_modules/react/README.md | 37 - .../cjs/react-compiler-runtime.development.js | 24 - .../cjs/react-compiler-runtime.production.js | 16 - .../cjs/react-compiler-runtime.profiling.js | 16 - .../cjs/react-jsx-dev-runtime.development.js | 338 ---- .../cjs/react-jsx-dev-runtime.production.js | 14 - .../cjs/react-jsx-dev-runtime.profiling.js | 14 - ...sx-dev-runtime.react-server.development.js | 370 ---- ...jsx-dev-runtime.react-server.production.js | 40 - .../cjs/react-jsx-runtime.development.js | 352 ---- .../react/cjs/react-jsx-runtime.production.js | 34 - .../react/cjs/react-jsx-runtime.profiling.js | 34 - ...ct-jsx-runtime.react-server.development.js | 370 ---- ...act-jsx-runtime.react-server.production.js | 40 - .../react/cjs/react.development.js | 1284 ------------- .../react/cjs/react.production.js | 542 ------ .../cjs/react.react-server.development.js | 848 --------- .../cjs/react.react-server.production.js | 423 ----- .../node_modules/react/compiler-runtime.js | 14 - .../react@19.2.0/node_modules/react/index.js | 7 - .../node_modules/react/jsx-dev-runtime.js | 7 - .../react/jsx-dev-runtime.react-server.js | 7 - .../node_modules/react/jsx-runtime.js | 7 - .../react/jsx-runtime.react-server.js | 7 - .../node_modules/react/package.json | 51 - .../node_modules/react/react.react-server.js | 7 - node_modules/embla-carousel-autoplay | 1 - node_modules/embla-carousel-react | 1 - package.json | 6 - pnpm-lock.yaml | 60 - web/app/components/explore/banner/banner.tsx | 6 +- web/package.json | 2 + web/pnpm-lock.yaml | 40 + 219 files changed, 45 insertions(+), 12445 deletions(-) delete mode 100644 node_modules/.modules.yaml delete mode 100644 node_modules/.pnpm-workspace-state.json delete mode 120000 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json delete mode 120000 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json delete mode 120000 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils delete mode 120000 node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react delete mode 120000 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts delete mode 100644 node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json delete mode 100644 node_modules/.pnpm/lock.yaml delete mode 120000 node_modules/.pnpm/node_modules/embla-carousel delete mode 120000 node_modules/.pnpm/node_modules/embla-carousel-reactive-utils delete mode 120000 node_modules/.pnpm/node_modules/react delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/README.md delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/index.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/package.json delete mode 100644 node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js delete mode 120000 node_modules/embla-carousel-autoplay delete mode 120000 node_modules/embla-carousel-react delete mode 100644 package.json delete mode 100644 pnpm-lock.yaml diff --git a/node_modules/.modules.yaml b/node_modules/.modules.yaml deleted file mode 100644 index 2e2c8bf5ee..0000000000 --- a/node_modules/.modules.yaml +++ /dev/null @@ -1,27 +0,0 @@ -hoistPattern: - - '*' -hoistedDependencies: - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - embla-carousel-reactive-utils: private - embla-carousel@8.6.0: - embla-carousel: private - react@19.2.0: - react: private -included: - dependencies: true - devDependencies: true - optionalDependencies: true -injectedDeps: {} -layoutVersion: 5 -nodeLinker: isolated -packageManager: pnpm@10.11.0 -pendingBuilds: [] -prunedAt: Mon, 13 Oct 2025 02:31:23 GMT -publicHoistPattern: [] -registries: - '@jsr': https://npm.jsr.io/ - default: https://mirrors.cloud.tencent.com/npm/ -skipped: [] -storeDir: /Users/hanxujiang/Library/pnpm/store/v10 -virtualStoreDir: .pnpm -virtualStoreDirMaxLength: 120 diff --git a/node_modules/.pnpm-workspace-state.json b/node_modules/.pnpm-workspace-state.json deleted file mode 100644 index aaa6a3c2cd..0000000000 --- a/node_modules/.pnpm-workspace-state.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "lastValidatedTimestamp": 1760322690770, - "projects": {}, - "pnpmfileExists": false, - "settings": { - "autoInstallPeers": true, - "dedupeDirectDeps": false, - "dedupeInjectedDeps": true, - "dedupePeerDependents": true, - "dev": true, - "excludeLinksFromLockfile": false, - "hoistPattern": [ - "*" - ], - "hoistWorkspacePackages": true, - "injectWorkspacePackages": false, - "linkWorkspacePackages": false, - "nodeLinker": "isolated", - "optional": true, - "preferWorkspacePackages": false, - "production": true, - "publicHoistPattern": [] - }, - "filteredInstall": false -} diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel deleted file mode 120000 index ba29366a8c..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel +++ /dev/null @@ -1 +0,0 @@ -../../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md deleted file mode 100644 index 5b5f7e5cea..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/README.md +++ /dev/null @@ -1,233 +0,0 @@ -
-
-

- Embla Carousel - -

- -

- - - - - - -

- - -

Embla Carousel Autoplay

-
- -

- Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. -

- -
- -

- -  Examples  - -

- -

- -  Generator  - -

- -

- -  Installation  - -

-
- -
- -
- -

Ready for

-
- -

- - - - - - - - - - - - - - - - - - - - - -

-
- -
- - - -
- -
- -

Special Thanks

-
-

- - gunnarx2 - React wrapper useEmblaCarousel. - -
- - LiamMartens - Solid wrapper createEmblaCarousel. - -
- - donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. - -
- - xiel - Plugin Embla Carousel Wheel Gestures. - -
- - zaaakher - Contributing guidelines. - -
- - sarussss - Answering questions. - -

-
- -
- -

Open Source

- -

- Embla is MIT licensed 💖.

- Embla Carousel - Copyright © 2019-present.
- Package created by David Jerleke. -

- -

- · · · -

- -

- Thanks BrowserStack. -

- -

- - - -

diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts deleted file mode 100644 index d03a504e20..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Autoplay.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { OptionsType } from './Options'; -import { CreatePluginType } from 'embla-carousel'; -declare module 'embla-carousel' { - interface EmblaPluginsType { - autoplay: AutoplayType; - } - interface EmblaEventListType { - autoplayPlay: 'autoplay:play'; - autoplayStop: 'autoplay:stop'; - autoplaySelect: 'autoplay:select'; - autoplayTimerSet: 'autoplay:timerset'; - autoplayTimerStopped: 'autoplay:timerstopped'; - } -} -export type AutoplayType = CreatePluginType<{ - play: (jump?: boolean) => void; - stop: () => void; - reset: () => void; - isPlaying: () => boolean; - timeUntilNext: () => number | null; -}, OptionsType>; -export type AutoplayOptionsType = AutoplayType['options']; -declare function Autoplay(userOptions?: AutoplayOptionsType): AutoplayType; -declare namespace Autoplay { - let globalOptions: AutoplayOptionsType | undefined; -} -export default Autoplay; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts deleted file mode 100644 index 533b7cda56..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/Options.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'; -export type DelayOptionType = number | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[]); -export type RootNodeType = null | ((emblaRoot: HTMLElement) => HTMLElement | null); -export type OptionsType = CreateOptionsType<{ - delay: DelayOptionType; - jump: boolean; - playOnInit: boolean; - stopOnFocusIn: boolean; - stopOnInteraction: boolean; - stopOnMouseEnter: boolean; - stopOnLastSnap: boolean; - rootNode: RootNodeType; -}>; -export declare const defaultOptions: OptionsType; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts deleted file mode 100644 index de04c2ed52..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/components/utils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'; -import { DelayOptionType, RootNodeType } from './Options'; -export declare function normalizeDelay(emblaApi: EmblaCarouselType, delay: DelayOptionType): number[]; -export declare function getAutoplayRootNode(emblaApi: EmblaCarouselType, rootNode: RootNodeType): HTMLElement; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js deleted file mode 100644 index 24d7f19754..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js +++ /dev/null @@ -1,197 +0,0 @@ -'use strict'; - -const defaultOptions = { - active: true, - breakpoints: {}, - delay: 4000, - jump: false, - playOnInit: true, - stopOnFocusIn: true, - stopOnInteraction: true, - stopOnMouseEnter: false, - stopOnLastSnap: false, - rootNode: null -}; - -function normalizeDelay(emblaApi, delay) { - const scrollSnaps = emblaApi.scrollSnapList(); - if (typeof delay === 'number') { - return scrollSnaps.map(() => delay); - } - return delay(scrollSnaps, emblaApi); -} -function getAutoplayRootNode(emblaApi, rootNode) { - const emblaRootNode = emblaApi.rootNode(); - return rootNode && rootNode(emblaRootNode) || emblaRootNode; -} - -function Autoplay(userOptions = {}) { - let options; - let emblaApi; - let destroyed; - let delay; - let timerStartTime = null; - let timerId = 0; - let autoplayActive = false; - let mouseIsOver = false; - let playOnDocumentVisible = false; - let jump = false; - function init(emblaApiInstance, optionsHandler) { - emblaApi = emblaApiInstance; - const { - mergeOptions, - optionsAtMedia - } = optionsHandler; - const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions); - const allOptions = mergeOptions(optionsBase, userOptions); - options = optionsAtMedia(allOptions); - if (emblaApi.scrollSnapList().length <= 1) return; - jump = options.jump; - destroyed = false; - delay = normalizeDelay(emblaApi, options.delay); - const { - eventStore, - ownerDocument - } = emblaApi.internalEngine(); - const isDraggable = !!emblaApi.internalEngine().options.watchDrag; - const root = getAutoplayRootNode(emblaApi, options.rootNode); - eventStore.add(ownerDocument, 'visibilitychange', visibilityChange); - if (isDraggable) { - emblaApi.on('pointerDown', pointerDown); - } - if (isDraggable && !options.stopOnInteraction) { - emblaApi.on('pointerUp', pointerUp); - } - if (options.stopOnMouseEnter) { - eventStore.add(root, 'mouseenter', mouseEnter); - } - if (options.stopOnMouseEnter && !options.stopOnInteraction) { - eventStore.add(root, 'mouseleave', mouseLeave); - } - if (options.stopOnFocusIn) { - emblaApi.on('slideFocusStart', stopAutoplay); - } - if (options.stopOnFocusIn && !options.stopOnInteraction) { - eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay); - } - if (options.playOnInit) startAutoplay(); - } - function destroy() { - emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay); - stopAutoplay(); - destroyed = true; - autoplayActive = false; - } - function setTimer() { - const { - ownerWindow - } = emblaApi.internalEngine(); - ownerWindow.clearTimeout(timerId); - timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]); - timerStartTime = new Date().getTime(); - emblaApi.emit('autoplay:timerset'); - } - function clearTimer() { - const { - ownerWindow - } = emblaApi.internalEngine(); - ownerWindow.clearTimeout(timerId); - timerId = 0; - timerStartTime = null; - emblaApi.emit('autoplay:timerstopped'); - } - function startAutoplay() { - if (destroyed) return; - if (documentIsHidden()) { - playOnDocumentVisible = true; - return; - } - if (!autoplayActive) emblaApi.emit('autoplay:play'); - setTimer(); - autoplayActive = true; - } - function stopAutoplay() { - if (destroyed) return; - if (autoplayActive) emblaApi.emit('autoplay:stop'); - clearTimer(); - autoplayActive = false; - } - function visibilityChange() { - if (documentIsHidden()) { - playOnDocumentVisible = autoplayActive; - return stopAutoplay(); - } - if (playOnDocumentVisible) startAutoplay(); - } - function documentIsHidden() { - const { - ownerDocument - } = emblaApi.internalEngine(); - return ownerDocument.visibilityState === 'hidden'; - } - function pointerDown() { - if (!mouseIsOver) stopAutoplay(); - } - function pointerUp() { - if (!mouseIsOver) startAutoplay(); - } - function mouseEnter() { - mouseIsOver = true; - stopAutoplay(); - } - function mouseLeave() { - mouseIsOver = false; - startAutoplay(); - } - function play(jumpOverride) { - if (typeof jumpOverride !== 'undefined') jump = jumpOverride; - startAutoplay(); - } - function stop() { - if (autoplayActive) stopAutoplay(); - } - function reset() { - if (autoplayActive) startAutoplay(); - } - function isPlaying() { - return autoplayActive; - } - function next() { - const { - index - } = emblaApi.internalEngine(); - const nextIndex = index.clone().add(1).get(); - const lastIndex = emblaApi.scrollSnapList().length - 1; - const kill = options.stopOnLastSnap && nextIndex === lastIndex; - if (emblaApi.canScrollNext()) { - emblaApi.scrollNext(jump); - } else { - emblaApi.scrollTo(0, jump); - } - emblaApi.emit('autoplay:select'); - if (kill) return stopAutoplay(); - startAutoplay(); - } - function timeUntilNext() { - if (!timerStartTime) return null; - const currentDelay = delay[emblaApi.selectedScrollSnap()]; - const timePastSinceStart = new Date().getTime() - timerStartTime; - return currentDelay - timePastSinceStart; - } - const self = { - name: 'autoplay', - options: userOptions, - init, - destroy, - play, - stop, - reset, - isPlaying, - timeUntilNext - }; - return self; -} -Autoplay.globalOptions = undefined; - -module.exports = Autoplay; -//# sourceMappingURL=embla-carousel-autoplay.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map deleted file mode 100644 index 9b1cc8e4d8..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/embla-carousel-autoplay.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel-autoplay.cjs.js","sources":["../src/components/Options.ts","../src/components/utils.ts","../src/components/Autoplay.ts"],"sourcesContent":["import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'\n\nexport type DelayOptionType =\n | number\n | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[])\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n delay: DelayOptionType\n jump: boolean\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n stopOnLastSnap: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { DelayOptionType, RootNodeType } from './Options'\n\nexport function normalizeDelay(\n emblaApi: EmblaCarouselType,\n delay: DelayOptionType\n): number[] {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay)\n }\n return delay(scrollSnaps, emblaApi)\n}\n\nexport function getAutoplayRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoplayRootNode, normalizeDelay } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoplay: AutoplayType\n }\n\n interface EmblaEventListType {\n autoplayPlay: 'autoplay:play'\n autoplayStop: 'autoplay:stop'\n autoplaySelect: 'autoplay:select'\n autoplayTimerSet: 'autoplay:timerset'\n autoplayTimerStopped: 'autoplay:timerstopped'\n }\n}\n\nexport type AutoplayType = CreatePluginType<\n {\n play: (jump?: boolean) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n timeUntilNext: () => number | null\n },\n OptionsType\n>\n\nexport type AutoplayOptionsType = AutoplayType['options']\n\nfunction Autoplay(userOptions: AutoplayOptionsType = {}): AutoplayType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let delay: ReturnType\n let timerStartTime: null | number = null\n let timerId = 0\n let autoplayActive = false\n let mouseIsOver = false\n let playOnDocumentVisible = false\n let jump = false\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n jump = options.jump\n destroyed = false\n delay = normalizeDelay(emblaApi, options.delay)\n\n const { eventStore, ownerDocument } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoplayRootNode(emblaApi, options.rootNode)\n\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay)\n }\n\n if (options.playOnInit) startAutoplay()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoplay)\n\n stopAutoplay()\n destroyed = true\n autoplayActive = false\n }\n\n function setTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()])\n timerStartTime = new Date().getTime()\n emblaApi.emit('autoplay:timerset')\n }\n\n function clearTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n timerStartTime = null\n emblaApi.emit('autoplay:timerstopped')\n }\n\n function startAutoplay(): void {\n if (destroyed) return\n if (documentIsHidden()) {\n playOnDocumentVisible = true\n return\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play')\n\n setTimer()\n autoplayActive = true\n }\n\n function stopAutoplay(): void {\n if (destroyed) return\n if (autoplayActive) emblaApi.emit('autoplay:stop')\n\n clearTimer()\n autoplayActive = false\n }\n\n function visibilityChange(): void {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive\n return stopAutoplay()\n }\n\n if (playOnDocumentVisible) startAutoplay()\n }\n\n function documentIsHidden(): boolean {\n const { ownerDocument } = emblaApi.internalEngine()\n return ownerDocument.visibilityState === 'hidden'\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoplay()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoplay()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoplay()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoplay()\n }\n\n function play(jumpOverride?: boolean): void {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride\n startAutoplay()\n }\n\n function stop(): void {\n if (autoplayActive) stopAutoplay()\n }\n\n function reset(): void {\n if (autoplayActive) startAutoplay()\n }\n\n function isPlaying(): boolean {\n return autoplayActive\n }\n\n function next(): void {\n const { index } = emblaApi.internalEngine()\n const nextIndex = index.clone().add(1).get()\n const lastIndex = emblaApi.scrollSnapList().length - 1\n const kill = options.stopOnLastSnap && nextIndex === lastIndex\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump)\n } else {\n emblaApi.scrollTo(0, jump)\n }\n\n emblaApi.emit('autoplay:select')\n\n if (kill) return stopAutoplay()\n startAutoplay()\n }\n\n function timeUntilNext(): number | null {\n if (!timerStartTime) return null\n const currentDelay = delay[emblaApi.selectedScrollSnap()]\n const timePastSinceStart = new Date().getTime() - timerStartTime\n return currentDelay - timePastSinceStart\n }\n\n const self: AutoplayType = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n }\n return self\n}\n\ndeclare namespace Autoplay {\n let globalOptions: AutoplayOptionsType | undefined\n}\n\nAutoplay.globalOptions = undefined\n\nexport default Autoplay\n"],"names":["defaultOptions","active","breakpoints","delay","jump","playOnInit","stopOnFocusIn","stopOnInteraction","stopOnMouseEnter","stopOnLastSnap","rootNode","normalizeDelay","emblaApi","scrollSnaps","scrollSnapList","map","getAutoplayRootNode","emblaRootNode","Autoplay","userOptions","options","destroyed","timerStartTime","timerId","autoplayActive","mouseIsOver","playOnDocumentVisible","init","emblaApiInstance","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","globalOptions","allOptions","length","eventStore","ownerDocument","internalEngine","isDraggable","watchDrag","root","add","visibilityChange","on","pointerDown","pointerUp","mouseEnter","mouseLeave","stopAutoplay","containerNode","startAutoplay","destroy","off","setTimer","ownerWindow","clearTimeout","setTimeout","next","selectedScrollSnap","Date","getTime","emit","clearTimer","documentIsHidden","visibilityState","play","jumpOverride","stop","reset","isPlaying","index","nextIndex","clone","get","lastIndex","kill","canScrollNext","scrollNext","scrollTo","timeUntilNext","currentDelay","timePastSinceStart","self","name","undefined"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts deleted file mode 100644 index ee2bc3b587..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { AutoplayType, AutoplayOptionsType } from './components/Autoplay'; -export { default } from './components/Autoplay'; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json deleted file mode 100644 index c1f690b498..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/cjs/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "embla-carousel-autoplay", - "version": "8.6.0", - "author": "David Jerleke", - "description": "An autoplay plugin for Embla Carousel", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-autoplay*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "peerDependencies": { - "embla-carousel": "8.6.0" - }, - "main": "embla-carousel-autoplay.cjs.js", - "type": "commonjs" -} diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts deleted file mode 100644 index d03a504e20..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Autoplay.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { OptionsType } from './Options'; -import { CreatePluginType } from 'embla-carousel'; -declare module 'embla-carousel' { - interface EmblaPluginsType { - autoplay: AutoplayType; - } - interface EmblaEventListType { - autoplayPlay: 'autoplay:play'; - autoplayStop: 'autoplay:stop'; - autoplaySelect: 'autoplay:select'; - autoplayTimerSet: 'autoplay:timerset'; - autoplayTimerStopped: 'autoplay:timerstopped'; - } -} -export type AutoplayType = CreatePluginType<{ - play: (jump?: boolean) => void; - stop: () => void; - reset: () => void; - isPlaying: () => boolean; - timeUntilNext: () => number | null; -}, OptionsType>; -export type AutoplayOptionsType = AutoplayType['options']; -declare function Autoplay(userOptions?: AutoplayOptionsType): AutoplayType; -declare namespace Autoplay { - let globalOptions: AutoplayOptionsType | undefined; -} -export default Autoplay; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts deleted file mode 100644 index 533b7cda56..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/Options.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'; -export type DelayOptionType = number | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[]); -export type RootNodeType = null | ((emblaRoot: HTMLElement) => HTMLElement | null); -export type OptionsType = CreateOptionsType<{ - delay: DelayOptionType; - jump: boolean; - playOnInit: boolean; - stopOnFocusIn: boolean; - stopOnInteraction: boolean; - stopOnMouseEnter: boolean; - stopOnLastSnap: boolean; - rootNode: RootNodeType; -}>; -export declare const defaultOptions: OptionsType; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts deleted file mode 100644 index de04c2ed52..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/components/utils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'; -import { DelayOptionType, RootNodeType } from './Options'; -export declare function normalizeDelay(emblaApi: EmblaCarouselType, delay: DelayOptionType): number[]; -export declare function getAutoplayRootNode(emblaApi: EmblaCarouselType, rootNode: RootNodeType): HTMLElement; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js deleted file mode 100644 index ddccbd5a98..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/embla-carousel-autoplay.umd.js +++ /dev/null @@ -1 +0,0 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarouselAutoplay=t()}(this,(function(){"use strict";const n={active:!0,breakpoints:{},delay:4e3,jump:!1,playOnInit:!0,stopOnFocusIn:!0,stopOnInteraction:!0,stopOnMouseEnter:!1,stopOnLastSnap:!1,rootNode:null};function t(o={}){let e,i,s,l,r=null,u=0,a=!1,c=!1,p=!1,f=!1;function d(){s||(g()?p=!0:(a||i.emit("autoplay:play"),function(){const{ownerWindow:n}=i.internalEngine();n.clearTimeout(u),u=n.setTimeout(E,l[i.selectedScrollSnap()]),r=(new Date).getTime(),i.emit("autoplay:timerset")}(),a=!0))}function m(){s||(a&&i.emit("autoplay:stop"),function(){const{ownerWindow:n}=i.internalEngine();n.clearTimeout(u),u=0,r=null,i.emit("autoplay:timerstopped")}(),a=!1)}function y(){if(g())return p=a,m();p&&d()}function g(){const{ownerDocument:n}=i.internalEngine();return"hidden"===n.visibilityState}function O(){c||m()}function S(){c||d()}function w(){c=!0,m()}function b(){c=!1,d()}function E(){const{index:n}=i.internalEngine(),t=n.clone().add(1).get(),o=i.scrollSnapList().length-1,s=e.stopOnLastSnap&&t===o;if(i.canScrollNext()?i.scrollNext(f):i.scrollTo(0,f),i.emit("autoplay:select"),s)return m();d()}return{name:"autoplay",options:o,init:function(r,u){i=r;const{mergeOptions:a,optionsAtMedia:c}=u,p=a(n,t.globalOptions),g=a(p,o);if(e=c(g),i.scrollSnapList().length<=1)return;f=e.jump,s=!1,l=function(n,t){const o=n.scrollSnapList();return"number"==typeof t?o.map((()=>t)):t(o,n)}(i,e.delay);const{eventStore:E,ownerDocument:I}=i.internalEngine(),h=!!i.internalEngine().options.watchDrag,T=function(n,t){const o=n.rootNode();return t&&t(o)||o}(i,e.rootNode);E.add(I,"visibilitychange",y),h&&i.on("pointerDown",O),h&&!e.stopOnInteraction&&i.on("pointerUp",S),e.stopOnMouseEnter&&E.add(T,"mouseenter",w),e.stopOnMouseEnter&&!e.stopOnInteraction&&E.add(T,"mouseleave",b),e.stopOnFocusIn&&i.on("slideFocusStart",m),e.stopOnFocusIn&&!e.stopOnInteraction&&E.add(i.containerNode(),"focusout",d),e.playOnInit&&d()},destroy:function(){i.off("pointerDown",O).off("pointerUp",S).off("slideFocusStart",m),m(),s=!0,a=!1},play:function(n){void 0!==n&&(f=n),d()},stop:function(){a&&m()},reset:function(){a&&d()},isPlaying:function(){return a},timeUntilNext:function(){return r?l[i.selectedScrollSnap()]-((new Date).getTime()-r):null}}}return t.globalOptions=void 0,t})); diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts deleted file mode 100644 index 67de09301f..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Autoplay.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { OptionsType } from './Options.js'; -import { CreatePluginType } from 'embla-carousel'; -declare module 'embla-carousel' { - interface EmblaPluginsType { - autoplay: AutoplayType; - } - interface EmblaEventListType { - autoplayPlay: 'autoplay:play'; - autoplayStop: 'autoplay:stop'; - autoplaySelect: 'autoplay:select'; - autoplayTimerSet: 'autoplay:timerset'; - autoplayTimerStopped: 'autoplay:timerstopped'; - } -} -export type AutoplayType = CreatePluginType<{ - play: (jump?: boolean) => void; - stop: () => void; - reset: () => void; - isPlaying: () => boolean; - timeUntilNext: () => number | null; -}, OptionsType>; -export type AutoplayOptionsType = AutoplayType['options']; -declare function Autoplay(userOptions?: AutoplayOptionsType): AutoplayType; -declare namespace Autoplay { - let globalOptions: AutoplayOptionsType | undefined; -} -export default Autoplay; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts deleted file mode 100644 index 533b7cda56..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/Options.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'; -export type DelayOptionType = number | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[]); -export type RootNodeType = null | ((emblaRoot: HTMLElement) => HTMLElement | null); -export type OptionsType = CreateOptionsType<{ - delay: DelayOptionType; - jump: boolean; - playOnInit: boolean; - stopOnFocusIn: boolean; - stopOnInteraction: boolean; - stopOnMouseEnter: boolean; - stopOnLastSnap: boolean; - rootNode: RootNodeType; -}>; -export declare const defaultOptions: OptionsType; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts deleted file mode 100644 index 74c23227aa..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/components/utils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'; -import { DelayOptionType, RootNodeType } from './Options.js'; -export declare function normalizeDelay(emblaApi: EmblaCarouselType, delay: DelayOptionType): number[]; -export declare function getAutoplayRootNode(emblaApi: EmblaCarouselType, rootNode: RootNodeType): HTMLElement; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js deleted file mode 100644 index e8e1560cac..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js +++ /dev/null @@ -1,195 +0,0 @@ -const defaultOptions = { - active: true, - breakpoints: {}, - delay: 4000, - jump: false, - playOnInit: true, - stopOnFocusIn: true, - stopOnInteraction: true, - stopOnMouseEnter: false, - stopOnLastSnap: false, - rootNode: null -}; - -function normalizeDelay(emblaApi, delay) { - const scrollSnaps = emblaApi.scrollSnapList(); - if (typeof delay === 'number') { - return scrollSnaps.map(() => delay); - } - return delay(scrollSnaps, emblaApi); -} -function getAutoplayRootNode(emblaApi, rootNode) { - const emblaRootNode = emblaApi.rootNode(); - return rootNode && rootNode(emblaRootNode) || emblaRootNode; -} - -function Autoplay(userOptions = {}) { - let options; - let emblaApi; - let destroyed; - let delay; - let timerStartTime = null; - let timerId = 0; - let autoplayActive = false; - let mouseIsOver = false; - let playOnDocumentVisible = false; - let jump = false; - function init(emblaApiInstance, optionsHandler) { - emblaApi = emblaApiInstance; - const { - mergeOptions, - optionsAtMedia - } = optionsHandler; - const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions); - const allOptions = mergeOptions(optionsBase, userOptions); - options = optionsAtMedia(allOptions); - if (emblaApi.scrollSnapList().length <= 1) return; - jump = options.jump; - destroyed = false; - delay = normalizeDelay(emblaApi, options.delay); - const { - eventStore, - ownerDocument - } = emblaApi.internalEngine(); - const isDraggable = !!emblaApi.internalEngine().options.watchDrag; - const root = getAutoplayRootNode(emblaApi, options.rootNode); - eventStore.add(ownerDocument, 'visibilitychange', visibilityChange); - if (isDraggable) { - emblaApi.on('pointerDown', pointerDown); - } - if (isDraggable && !options.stopOnInteraction) { - emblaApi.on('pointerUp', pointerUp); - } - if (options.stopOnMouseEnter) { - eventStore.add(root, 'mouseenter', mouseEnter); - } - if (options.stopOnMouseEnter && !options.stopOnInteraction) { - eventStore.add(root, 'mouseleave', mouseLeave); - } - if (options.stopOnFocusIn) { - emblaApi.on('slideFocusStart', stopAutoplay); - } - if (options.stopOnFocusIn && !options.stopOnInteraction) { - eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay); - } - if (options.playOnInit) startAutoplay(); - } - function destroy() { - emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay); - stopAutoplay(); - destroyed = true; - autoplayActive = false; - } - function setTimer() { - const { - ownerWindow - } = emblaApi.internalEngine(); - ownerWindow.clearTimeout(timerId); - timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]); - timerStartTime = new Date().getTime(); - emblaApi.emit('autoplay:timerset'); - } - function clearTimer() { - const { - ownerWindow - } = emblaApi.internalEngine(); - ownerWindow.clearTimeout(timerId); - timerId = 0; - timerStartTime = null; - emblaApi.emit('autoplay:timerstopped'); - } - function startAutoplay() { - if (destroyed) return; - if (documentIsHidden()) { - playOnDocumentVisible = true; - return; - } - if (!autoplayActive) emblaApi.emit('autoplay:play'); - setTimer(); - autoplayActive = true; - } - function stopAutoplay() { - if (destroyed) return; - if (autoplayActive) emblaApi.emit('autoplay:stop'); - clearTimer(); - autoplayActive = false; - } - function visibilityChange() { - if (documentIsHidden()) { - playOnDocumentVisible = autoplayActive; - return stopAutoplay(); - } - if (playOnDocumentVisible) startAutoplay(); - } - function documentIsHidden() { - const { - ownerDocument - } = emblaApi.internalEngine(); - return ownerDocument.visibilityState === 'hidden'; - } - function pointerDown() { - if (!mouseIsOver) stopAutoplay(); - } - function pointerUp() { - if (!mouseIsOver) startAutoplay(); - } - function mouseEnter() { - mouseIsOver = true; - stopAutoplay(); - } - function mouseLeave() { - mouseIsOver = false; - startAutoplay(); - } - function play(jumpOverride) { - if (typeof jumpOverride !== 'undefined') jump = jumpOverride; - startAutoplay(); - } - function stop() { - if (autoplayActive) stopAutoplay(); - } - function reset() { - if (autoplayActive) startAutoplay(); - } - function isPlaying() { - return autoplayActive; - } - function next() { - const { - index - } = emblaApi.internalEngine(); - const nextIndex = index.clone().add(1).get(); - const lastIndex = emblaApi.scrollSnapList().length - 1; - const kill = options.stopOnLastSnap && nextIndex === lastIndex; - if (emblaApi.canScrollNext()) { - emblaApi.scrollNext(jump); - } else { - emblaApi.scrollTo(0, jump); - } - emblaApi.emit('autoplay:select'); - if (kill) return stopAutoplay(); - startAutoplay(); - } - function timeUntilNext() { - if (!timerStartTime) return null; - const currentDelay = delay[emblaApi.selectedScrollSnap()]; - const timePastSinceStart = new Date().getTime() - timerStartTime; - return currentDelay - timePastSinceStart; - } - const self = { - name: 'autoplay', - options: userOptions, - init, - destroy, - play, - stop, - reset, - isPlaying, - timeUntilNext - }; - return self; -} -Autoplay.globalOptions = undefined; - -export { Autoplay as default }; -//# sourceMappingURL=embla-carousel-autoplay.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map deleted file mode 100644 index 4f6917d9e3..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel-autoplay.esm.js","sources":["../src/components/Options.ts","../src/components/utils.ts","../src/components/Autoplay.ts"],"sourcesContent":["import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'\n\nexport type DelayOptionType =\n | number\n | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[])\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n delay: DelayOptionType\n jump: boolean\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n stopOnLastSnap: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { DelayOptionType, RootNodeType } from './Options'\n\nexport function normalizeDelay(\n emblaApi: EmblaCarouselType,\n delay: DelayOptionType\n): number[] {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay)\n }\n return delay(scrollSnaps, emblaApi)\n}\n\nexport function getAutoplayRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoplayRootNode, normalizeDelay } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoplay: AutoplayType\n }\n\n interface EmblaEventListType {\n autoplayPlay: 'autoplay:play'\n autoplayStop: 'autoplay:stop'\n autoplaySelect: 'autoplay:select'\n autoplayTimerSet: 'autoplay:timerset'\n autoplayTimerStopped: 'autoplay:timerstopped'\n }\n}\n\nexport type AutoplayType = CreatePluginType<\n {\n play: (jump?: boolean) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n timeUntilNext: () => number | null\n },\n OptionsType\n>\n\nexport type AutoplayOptionsType = AutoplayType['options']\n\nfunction Autoplay(userOptions: AutoplayOptionsType = {}): AutoplayType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let delay: ReturnType\n let timerStartTime: null | number = null\n let timerId = 0\n let autoplayActive = false\n let mouseIsOver = false\n let playOnDocumentVisible = false\n let jump = false\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n jump = options.jump\n destroyed = false\n delay = normalizeDelay(emblaApi, options.delay)\n\n const { eventStore, ownerDocument } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoplayRootNode(emblaApi, options.rootNode)\n\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay)\n }\n\n if (options.playOnInit) startAutoplay()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoplay)\n\n stopAutoplay()\n destroyed = true\n autoplayActive = false\n }\n\n function setTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()])\n timerStartTime = new Date().getTime()\n emblaApi.emit('autoplay:timerset')\n }\n\n function clearTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n timerStartTime = null\n emblaApi.emit('autoplay:timerstopped')\n }\n\n function startAutoplay(): void {\n if (destroyed) return\n if (documentIsHidden()) {\n playOnDocumentVisible = true\n return\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play')\n\n setTimer()\n autoplayActive = true\n }\n\n function stopAutoplay(): void {\n if (destroyed) return\n if (autoplayActive) emblaApi.emit('autoplay:stop')\n\n clearTimer()\n autoplayActive = false\n }\n\n function visibilityChange(): void {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive\n return stopAutoplay()\n }\n\n if (playOnDocumentVisible) startAutoplay()\n }\n\n function documentIsHidden(): boolean {\n const { ownerDocument } = emblaApi.internalEngine()\n return ownerDocument.visibilityState === 'hidden'\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoplay()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoplay()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoplay()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoplay()\n }\n\n function play(jumpOverride?: boolean): void {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride\n startAutoplay()\n }\n\n function stop(): void {\n if (autoplayActive) stopAutoplay()\n }\n\n function reset(): void {\n if (autoplayActive) startAutoplay()\n }\n\n function isPlaying(): boolean {\n return autoplayActive\n }\n\n function next(): void {\n const { index } = emblaApi.internalEngine()\n const nextIndex = index.clone().add(1).get()\n const lastIndex = emblaApi.scrollSnapList().length - 1\n const kill = options.stopOnLastSnap && nextIndex === lastIndex\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump)\n } else {\n emblaApi.scrollTo(0, jump)\n }\n\n emblaApi.emit('autoplay:select')\n\n if (kill) return stopAutoplay()\n startAutoplay()\n }\n\n function timeUntilNext(): number | null {\n if (!timerStartTime) return null\n const currentDelay = delay[emblaApi.selectedScrollSnap()]\n const timePastSinceStart = new Date().getTime() - timerStartTime\n return currentDelay - timePastSinceStart\n }\n\n const self: AutoplayType = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n }\n return self\n}\n\ndeclare namespace Autoplay {\n let globalOptions: AutoplayOptionsType | undefined\n}\n\nAutoplay.globalOptions = undefined\n\nexport default Autoplay\n"],"names":["defaultOptions","active","breakpoints","delay","jump","playOnInit","stopOnFocusIn","stopOnInteraction","stopOnMouseEnter","stopOnLastSnap","rootNode","normalizeDelay","emblaApi","scrollSnaps","scrollSnapList","map","getAutoplayRootNode","emblaRootNode","Autoplay","userOptions","options","destroyed","timerStartTime","timerId","autoplayActive","mouseIsOver","playOnDocumentVisible","init","emblaApiInstance","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","globalOptions","allOptions","length","eventStore","ownerDocument","internalEngine","isDraggable","watchDrag","root","add","visibilityChange","on","pointerDown","pointerUp","mouseEnter","mouseLeave","stopAutoplay","containerNode","startAutoplay","destroy","off","setTimer","ownerWindow","clearTimeout","setTimeout","next","selectedScrollSnap","Date","getTime","emit","clearTimer","documentIsHidden","visibilityState","play","jumpOverride","stop","reset","isPlaying","index","nextIndex","clone","get","lastIndex","kill","canScrollNext","scrollNext","scrollTo","timeUntilNext","currentDelay","timePastSinceStart","self","name","undefined"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts deleted file mode 100644 index c3cb09c391..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { AutoplayType, AutoplayOptionsType } from './components/Autoplay.js'; -export { default } from './components/Autoplay.js'; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json deleted file mode 100644 index 4b01e65195..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "embla-carousel-autoplay", - "version": "8.6.0", - "author": "David Jerleke", - "description": "An autoplay plugin for Embla Carousel", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-autoplay*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "peerDependencies": { - "embla-carousel": "8.6.0" - }, - "module": "embla-carousel-autoplay.esm.js", - "type": "module" -} diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts deleted file mode 100644 index ee2bc3b587..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { AutoplayType, AutoplayOptionsType } from './components/Autoplay'; -export { default } from './components/Autoplay'; diff --git a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json b/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json deleted file mode 100644 index 58a61edb0a..0000000000 --- a/node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "embla-carousel-autoplay", - "version": "8.6.0", - "author": "David Jerleke", - "description": "An autoplay plugin for Embla Carousel", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "main": "embla-carousel-autoplay.umd.js", - "unpkg": "embla-carousel-autoplay.umd.js", - "module": "./esm/embla-carousel-autoplay.esm.js", - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-autoplay*", - "components/**/*", - "index.d.ts", - "esm/**/*", - "cjs/**/*" - ], - "scripts": { - "test": "echo \"Info: no tests specified\" && exit 0", - "build": "rollup --bundleConfigAsCjs -c", - "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", - "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" - }, - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "peerDependencies": { - "embla-carousel": "8.6.0" - }, - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./esm/index.d.ts", - "default": "./esm/embla-carousel-autoplay.esm.js" - }, - "require": { - "types": "./cjs/index.d.ts", - "default": "./cjs/embla-carousel-autoplay.cjs.js" - } - } - } -} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel deleted file mode 120000 index ba29366a8c..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel +++ /dev/null @@ -1 +0,0 @@ -../../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md deleted file mode 100644 index e343178cde..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/README.md +++ /dev/null @@ -1,233 +0,0 @@ -
-
-

- Embla Carousel - -

- -

- - - - - - -

- - -

Embla Carousel React

-
- -

- Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. -

- -
- -

- -  Examples  - -

- -

- -  Generator  - -

- -

- -  Installation  - -

-
- -
- -
- -

Ready for

-
- -

- - - - - - - - - - - - - - - - - - - - - -

-
- -
- - - -
- -
- -

Special Thanks

-
-

- - gunnarx2 - React wrapper useEmblaCarousel. - -
- - LiamMartens - Solid wrapper createEmblaCarousel. - -
- - donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. - -
- - xiel - Plugin Embla Carousel Wheel Gestures. - -
- - zaaakher - Contributing guidelines. - -
- - sarussss - Answering questions. - -

-
- -
- -

Open Source

- -

- Embla is MIT licensed 💖.

- Embla Carousel - Copyright © 2019-present.
- Package created by David Jerleke. -

- -

- · · · -

- -

- Thanks BrowserStack. -

- -

- - - -

diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts deleted file mode 100644 index e23b160c11..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/components/useEmblaCarousel.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } from 'embla-carousel'; -export type EmblaViewportRefType = (instance: ViewportElement | null) => void; -export type UseEmblaCarouselType = [ - EmblaViewportRefType, - EmblaCarouselType | undefined -]; -declare function useEmblaCarousel(options?: EmblaOptionsType, plugins?: EmblaPluginType[]): UseEmblaCarouselType; -declare namespace useEmblaCarousel { - let globalOptions: EmblaOptionsType | undefined; -} -export default useEmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js deleted file mode 100644 index 263b35416c..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var react = require('react'); -var emblaCarouselReactiveUtils = require('embla-carousel-reactive-utils'); -var EmblaCarousel = require('embla-carousel'); - -function useEmblaCarousel(options = {}, plugins = []) { - const storedOptions = react.useRef(options); - const storedPlugins = react.useRef(plugins); - const [emblaApi, setEmblaApi] = react.useState(); - const [viewport, setViewport] = react.useState(); - const reInit = react.useCallback(() => { - if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current); - }, [emblaApi]); - react.useEffect(() => { - if (emblaCarouselReactiveUtils.areOptionsEqual(storedOptions.current, options)) return; - storedOptions.current = options; - reInit(); - }, [options, reInit]); - react.useEffect(() => { - if (emblaCarouselReactiveUtils.arePluginsEqual(storedPlugins.current, plugins)) return; - storedPlugins.current = plugins; - reInit(); - }, [plugins, reInit]); - react.useEffect(() => { - if (emblaCarouselReactiveUtils.canUseDOM() && viewport) { - EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions; - const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current); - setEmblaApi(newEmblaApi); - return () => newEmblaApi.destroy(); - } else { - setEmblaApi(undefined); - } - }, [viewport, setEmblaApi]); - return [setViewport, emblaApi]; -} -useEmblaCarousel.globalOptions = undefined; - -module.exports = useEmblaCarousel; -//# sourceMappingURL=embla-carousel-react.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map deleted file mode 100644 index ae9cf4cace..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/embla-carousel-react.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel-react.cjs.js","sources":["../src/components/useEmblaCarousel.ts"],"sourcesContent":["import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaViewportRefType = (\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState()\n const [viewport, setViewport] = useState()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n return [setViewport, emblaApi]\n}\n\ndeclare namespace useEmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n"],"names":["useEmblaCarousel","options","plugins","storedOptions","useRef","storedPlugins","emblaApi","setEmblaApi","useState","viewport","setViewport","reInit","useCallback","current","useEffect","areOptionsEqual","arePluginsEqual","canUseDOM","EmblaCarousel","globalOptions","newEmblaApi","destroy","undefined"],"mappings":";;;;;;AAqBA,SAASA,gBAAgBA,CACvBC,OAAA,GAA4B,EAAE,EAC9BC,UAA6B,EAAE,EAAA;AAE/B,EAAA,MAAMC,aAAa,GAAGC,YAAM,CAACH,OAAO,CAAC;AACrC,EAAA,MAAMI,aAAa,GAAGD,YAAM,CAACF,OAAO,CAAC;EACrC,MAAM,CAACI,QAAQ,EAAEC,WAAW,CAAC,GAAGC,cAAQ,EAAqB;EAC7D,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGF,cAAQ,EAAe;AAEvD,EAAA,MAAMG,MAAM,GAAGC,iBAAW,CAAC,MAAK;AAC9B,IAAA,IAAIN,QAAQ,EAAEA,QAAQ,CAACK,MAAM,CAACR,aAAa,CAACU,OAAO,EAAER,aAAa,CAACQ,OAAO,CAAC;AAC7E,GAAC,EAAE,CAACP,QAAQ,CAAC,CAAC;AAEdQ,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIC,0CAAe,CAACZ,aAAa,CAACU,OAAO,EAAEZ,OAAO,CAAC,EAAE;IACrDE,aAAa,CAACU,OAAO,GAAGZ,OAAO;AAC/BU,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACV,OAAO,EAAEU,MAAM,CAAC,CAAC;AAErBG,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIE,0CAAe,CAACX,aAAa,CAACQ,OAAO,EAAEX,OAAO,CAAC,EAAE;IACrDG,aAAa,CAACQ,OAAO,GAAGX,OAAO;AAC/BS,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACT,OAAO,EAAES,MAAM,CAAC,CAAC;AAErBG,EAAAA,eAAS,CAAC,MAAK;AACb,IAAA,IAAIG,oCAAS,EAAE,IAAIR,QAAQ,EAAE;AAC3BS,MAAAA,aAAa,CAACC,aAAa,GAAGnB,gBAAgB,CAACmB,aAAa;AAC5D,MAAA,MAAMC,WAAW,GAAGF,aAAa,CAC/BT,QAAQ,EACRN,aAAa,CAACU,OAAO,EACrBR,aAAa,CAACQ,OAAO,CACtB;MACDN,WAAW,CAACa,WAAW,CAAC;AACxB,MAAA,OAAO,MAAMA,WAAW,CAACC,OAAO,EAAE;AACpC,KAAC,MAAM;MACLd,WAAW,CAACe,SAAS,CAAC;AACxB;AACF,GAAC,EAAE,CAACb,QAAQ,EAAEF,WAAW,CAAC,CAAC;AAE3B,EAAA,OAAO,CAAuBG,WAAW,EAAEJ,QAAQ,CAAC;AACtD;AAMAN,gBAAgB,CAACmB,aAAa,GAAGG,SAAS;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts deleted file mode 100644 index 8ce0b23390..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { UseEmblaCarouselType, EmblaViewportRefType } from './components/useEmblaCarousel'; -export { default } from './components/useEmblaCarousel'; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json deleted file mode 100644 index a31b7748af..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/cjs/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "embla-carousel-react", - "version": "8.6.0", - "author": "David Jerleke", - "description": "A lightweight carousel library with fluid motion and great swipe precision", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-react*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@types/react": "^18.0.8", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "dependencies": { - "embla-carousel": "8.6.0", - "embla-carousel-reactive-utils": "8.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "main": "embla-carousel-react.cjs.js", - "type": "commonjs" -} diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts deleted file mode 100644 index e23b160c11..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/components/useEmblaCarousel.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } from 'embla-carousel'; -export type EmblaViewportRefType = (instance: ViewportElement | null) => void; -export type UseEmblaCarouselType = [ - EmblaViewportRefType, - EmblaCarouselType | undefined -]; -declare function useEmblaCarousel(options?: EmblaOptionsType, plugins?: EmblaPluginType[]): UseEmblaCarouselType; -declare namespace useEmblaCarousel { - let globalOptions: EmblaOptionsType | undefined; -} -export default useEmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js deleted file mode 100644 index f9e88046de..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/embla-carousel-react.umd.js +++ /dev/null @@ -1 +0,0 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarouselReact=t(n.React)}(this,(function(n){"use strict";function t(n){return function(n){return"[object Object]"===Object.prototype.toString.call(n)}(n)||Array.isArray(n)}function e(n,r){const o=Object.keys(n),i=Object.keys(r);if(o.length!==i.length)return!1;return JSON.stringify(Object.keys(n.breakpoints||{}))===JSON.stringify(Object.keys(r.breakpoints||{}))&&o.every((o=>{const i=n[o],c=r[o];return"function"==typeof i?`${i}`==`${c}`:t(i)&&t(c)?e(i,c):i===c}))}function r(n){return n.concat().sort(((n,t)=>n.name>t.name?1:-1)).map((n=>n.options))}function o(n){return"number"==typeof n}function i(n){return"string"==typeof n}function c(n){return"boolean"==typeof n}function u(n){return"[object Object]"===Object.prototype.toString.call(n)}function s(n){return Math.abs(n)}function a(n){return Math.sign(n)}function d(n,t){return s(n-t)}function f(n){return h(n).map(Number)}function l(n){return n[p(n)]}function p(n){return Math.max(0,n.length-1)}function g(n,t){return t===p(n)}function m(n,t=0){return Array.from(Array(n),((n,e)=>t+e))}function h(n){return Object.keys(n)}function y(n,t){return[n,t].reduce(((n,t)=>(h(t).forEach((e=>{const r=n[e],o=t[e],i=u(r)&&u(o);n[e]=i?y(r,o):o})),n)),{})}function x(n,t){return void 0!==t.MouseEvent&&n instanceof t.MouseEvent}function b(){let n=[];const t={add:function(e,r,o,i={passive:!0}){let c;if("addEventListener"in e)e.addEventListener(r,o,i),c=()=>e.removeEventListener(r,o,i);else{const n=e;n.addListener(o),c=()=>n.removeListener(o)}return n.push(c),t},clear:function(){n=n.filter((n=>n()))}};return t}function v(n,t,e,r){const o=b(),i=1e3/60;let c=null,u=0,s=0;function a(n){if(!s)return;c||(c=n,e(),e());const o=n-c;for(c=n,u+=o;u>=i;)e(),u-=i;r(u/i),s&&(s=t.requestAnimationFrame(a))}function d(){t.cancelAnimationFrame(s),c=null,u=0,s=0}return{init:function(){o.add(n,"visibilitychange",(()=>{n.hidden&&(c=null,u=0)}))},destroy:function(){d(),o.clear()},start:function(){s||(s=t.requestAnimationFrame(a))},stop:d,update:e,render:r}}function S(n=0,t=0){const e=s(n-t);function r(t){return tt}function i(n){return r(n)||o(n)}return{length:e,max:t,min:n,constrain:function(e){return i(e)?r(e)?n:t:e},reachedAny:i,reachedMax:o,reachedMin:r,removeOffset:function(n){return e?n-e*Math.ceil((n-t)/e):n}}}function w(n,t,e){const{constrain:r}=S(0,n),o=n+1;let i=c(t);function c(n){return e?s((o+n)%o):r(n)}function u(){return i}function a(){return w(n,u(),e)}const d={get:u,set:function(n){return i=c(n),d},add:function(n){return a().set(u()+n)},clone:a};return d}function E(n,t,e,r,o,i,u,f,l,p,g,m,h,y,v,w,E,L,O){const{cross:D,direction:I}=n,A=["INPUT","SELECT","TEXTAREA"],M={passive:!1},F=b(),T=b(),k=S(50,225).constrain(y.measure(20)),P={mouse:300,touch:400},z={mouse:500,touch:600},H=v?43:25;let j=!1,R=0,V=0,B=!1,C=!1,N=!1,q=!1;function G(n){if(!x(n,r)&&n.touches.length>=2)return $(n);const t=i.readPoint(n),e=i.readPoint(n,D),c=d(t,R),u=d(e,V);if(!C&&!q){if(!n.cancelable)return $(n);if(C=c>u,!C)return $(n)}const s=i.pointerMove(n);c>w&&(N=!0),p.useFriction(.3).useDuration(.75),f.start(),o.add(I(s)),n.preventDefault()}function $(n){const t=g.byDistance(0,!1).index!==m.get(),e=i.pointerUp(n)*(v?z:P)[q?"mouse":"touch"],r=function(n,t){const e=m.add(-1*a(n)),r=g.byDistance(n,!v).distance;return v||s(n)=2,c&&0!==n.button)return;if(function(n){const t=n.nodeName||"";return A.includes(t)}(n.target))return;B=!0,i.pointerDown(n),p.useFriction(0).useDuration(0),o.set(u),function(){const n=q?e:t;T.add(n,"touchmove",G,M).add(n,"touchend",$).add(n,"mousemove",G,M).add(n,"mouseup",$)}(),R=i.readPoint(n),V=i.readPoint(n,D),h.emit("pointerDown")}(s)}const a=t;F.add(a,"dragstart",(n=>n.preventDefault()),M).add(a,"touchmove",(()=>{}),M).add(a,"touchend",(()=>{})).add(a,"touchstart",s).add(a,"mousedown",s).add(a,"touchcancel",$).add(a,"contextmenu",$).add(a,"click",U,!0)},destroy:function(){F.clear(),T.clear()},pointerDown:function(){return B}}}function L(n,t){let e,r;function o(n){return n.timeStamp}function i(e,r){const o="client"+("x"===(r||n.scroll)?"X":"Y");return(x(e,t)?e:e.touches[0])[o]}return{pointerDown:function(n){return e=n,r=n,i(n)},pointerMove:function(n){const t=i(n)-i(r),c=o(n)-o(e)>170;return r=n,c&&(e=n),t},pointerUp:function(n){if(!e||!r)return 0;const t=i(r)-i(e),c=o(n)-o(e),u=o(n)-o(r)>170,a=t/c;return c&&!u&&s(a)>.1?a:0},readPoint:i}}function O(n,t,e,r,o,i,u){const a=[n].concat(r);let d,f,l=[],p=!1;function g(n){return o.measureSize(u.measure(n))}return{init:function(o){i&&(f=g(n),l=r.map(g),d=new ResizeObserver((e=>{(c(i)||i(o,e))&&function(e){for(const i of e){if(p)return;const e=i.target===n,c=r.indexOf(i.target),u=e?f:l[c];if(s(g(e?n:r[c])-u)>=.5){o.reInit(),t.emit("resize");break}}}(e)})),e.requestAnimationFrame((()=>{a.forEach((n=>d.observe(n)))})))},destroy:function(){p=!0,d&&d.disconnect()}}}function D(n,t,e,r,o){const i=o.measure(10),c=o.measure(50),u=S(.1,.99);let a=!1;function d(){return!a&&(!!n.reachedAny(e.get())&&!!n.reachedAny(t.get()))}return{shouldConstrain:d,constrain:function(o){if(!d())return;const a=n.reachedMin(t.get())?"min":"max",f=s(n[a]-t.get()),l=e.get()-t.get(),p=u.constrain(f/c);e.subtract(l*p),!o&&s(l)n.add(o)))}}}function A(n,t,e,r,o){const{reachedAny:i,removeOffset:c,constrain:u}=r;function d(n){return n.concat().sort(((n,t)=>s(n)-s(t)))[0]}function f(t,r){const o=[t,t+e,t-e];if(!n)return t;if(!r)return d(o);const i=o.filter((n=>a(n)===r));return i.length?d(i):l(o)-e}return{byDistance:function(e,r){const a=o.get()+e,{index:d,distance:l}=function(e){const r=n?c(e):u(e),o=t.map(((n,t)=>({diff:f(n-r,0),index:t}))).sort(((n,t)=>s(n.diff)-s(t.diff))),{index:i}=o[0];return{index:i,distance:r}}(a),p=!n&&i(a);return!r||p?{index:d,distance:e}:{index:d,distance:e+f(t[d]-l,0)}},byIndex:function(n,e){return{index:n,distance:f(t[n]-o.get(),e)}},shortcut:f}}function M(n,t,e,r,i,u,s,a){const d={passive:!0,capture:!0};let f=0;function l(n){"Tab"===n.code&&(f=(new Date).getTime())}return{init:function(p){a&&(u.add(document,"keydown",l,!1),t.forEach(((t,l)=>{u.add(t,"focus",(t=>{(c(a)||a(p,t))&&function(t){if((new Date).getTime()-f>10)return;s.emit("slideFocusStart"),n.scrollLeft=0;const c=e.findIndex((n=>n.includes(t)));o(c)&&(i.useDuration(0),r.index(c,0),s.emit("slideFocus"))}(l)}),d)})))}}}function F(n){let t=n;function e(n){return o(n)?n:n.get()}return{get:function(){return t},set:function(n){t=e(n)},add:function(n){t+=e(n)},subtract:function(n){t-=e(n)}}}function T(n,t){const e="x"===n.scroll?function(n){return`translate3d(${n}px,0px,0px)`}:function(n){return`translate3d(0px,${n}px,0px)`},r=t.style;let o=null,i=!1;return{clear:function(){i||(r.transform="",t.getAttribute("style")||t.removeAttribute("style"))},to:function(t){if(i)return;const c=(u=n.direction(t),Math.round(100*u)/100);var u;c!==o&&(r.transform=e(c),o=c)},toggleActive:function(n){i=!n}}}function k(n,t,e,r,o,i,c,u,s){const a=.5,d=f(o),l=f(o).reverse(),p=function(){const n=c[0];return h(m(l,n),e,!1)}().concat(function(){const n=t-c[0]-1;return h(m(d,n),-e,!0)}());function g(n,t){return n.reduce(((n,t)=>n-o[t]),t)}function m(n,t){return n.reduce(((n,e)=>g(n,t)>0?n.concat([e]):n),[])}function h(o,c,d){const f=function(n){return i.map(((e,o)=>({start:e-r[o]+a+n,end:e+t-a+n})))}(c);return o.map((t=>{const r=d?0:-e,o=d?e:0,i=d?"end":"start",c=f[t][i];return{index:t,loopPoint:c,slideLocation:F(-1),translate:T(n,s[t]),target:()=>u.get()>c?r:o}}))}return{canLoop:function(){return p.every((({index:n})=>g(d.filter((t=>t!==n)),t)<=.1))},clear:function(){p.forEach((n=>n.translate.clear()))},loop:function(){p.forEach((n=>{const{target:t,translate:e,slideLocation:r}=n,o=t();o!==r.get()&&(e.to(o),r.set(o))}))},loopPoints:p}}function P(n,t,e){let r,o=!1;return{init:function(i){e&&(r=new MutationObserver((n=>{o||(c(e)||e(i,n))&&function(n){for(const e of n)if("childList"===e.type){i.reInit(),t.emit("slidesChanged");break}}(n)})),r.observe(n,{childList:!0}))},destroy:function(){r&&r.disconnect(),o=!0}}}function z(n,t,e,r){const o={};let i,c=null,u=null,s=!1;return{init:function(){i=new IntersectionObserver((n=>{s||(n.forEach((n=>{const e=t.indexOf(n.target);o[e]=n})),c=null,u=null,e.emit("slidesInView"))}),{root:n.parentElement,threshold:r}),t.forEach((n=>i.observe(n)))},destroy:function(){i&&i.disconnect(),s=!0},get:function(n=!0){if(n&&c)return c;if(!n&&u)return u;const t=function(n){return h(o).reduce(((t,e)=>{const r=parseInt(e),{isIntersecting:i}=o[r];return(n&&i||!n&&!i)&&t.push(r),t}),[])}(n);return n&&(c=t),n||(u=t),t}}}function H(n,t,e,r,i,c,u,a,d){const{startEdge:g,endEdge:m,direction:h}=n,y=o(e);return{groupSlides:function(n){return y?function(n,t){return f(n).filter((n=>n%t==0)).map((e=>n.slice(e,e+t)))}(n,e):function(n){return n.length?f(n).reduce(((e,o,f)=>{const y=l(e)||0,x=0===y,b=o===p(n),v=i[g]-c[y][g],S=i[g]-c[o][m],w=!r&&x?h(u):0,E=s(S-(!r&&b?h(a):0)-(v+w));return f&&E>t+d&&e.push(o),b&&e.push(n.length),e}),[]).map(((t,e,r)=>{const o=Math.max(r[e-1]||0);return n.slice(o,t)})):[]}(n)}}}function j(n,t,e,r,o,c,u){const{align:h,axis:y,direction:x,startIndex:j,loop:R,duration:V,dragFree:B,dragThreshold:C,inViewThreshold:N,slidesToScroll:q,skipSnaps:G,containScroll:$,watchResize:U,watchSlides:W,watchDrag:J,watchFocus:Q}=c,X={measure:function(n){const{offsetTop:t,offsetLeft:e,offsetWidth:r,offsetHeight:o}=n;return{top:t,right:e+r,bottom:t+o,left:e,width:r,height:o}}},Y=X.measure(t),K=e.map(X.measure),Z=function(n,t){const e="rtl"===t,r="y"===n,o=!r&&e?-1:1;return{scroll:r?"y":"x",cross:r?"x":"y",startEdge:r?"top":e?"right":"left",endEdge:r?"bottom":e?"left":"right",measureSize:function(n){const{height:t,width:e}=n;return r?t:e},direction:function(n){return n*o}}}(y,x),_=Z.measureSize(Y),nn=function(n){return{measure:function(t){return n*(t/100)}}}(_),tn=function(n,t){const e={start:function(){return 0},center:function(n){return r(n)/2},end:r};function r(n){return t-n}return{measure:function(r,o){return i(n)?e[n](r):n(t,r,o)}}}(h,_),en=!R&&!!$,rn=R||!!$,{slideSizes:on,slideSizesWithGaps:cn,startGap:un,endGap:sn}=function(n,t,e,r,o,i){const{measureSize:c,startEdge:u,endEdge:a}=n,d=e[0]&&o,f=function(){if(!d)return 0;const n=e[0];return s(t[u]-n[u])}(),p=function(){if(!d)return 0;const n=i.getComputedStyle(l(r));return parseFloat(n.getPropertyValue(`margin-${a}`))}(),m=e.map(c),h=e.map(((n,t,e)=>{const r=!t,o=g(e,t);return r?m[t]+f:o?m[t]+p:e[t+1][u]-n[u]})).map(s);return{slideSizes:m,slideSizesWithGaps:h,startGap:f,endGap:p}}(Z,Y,K,e,rn,o),an=H(Z,_,q,R,Y,K,un,sn,2),{snaps:dn,snapsAligned:fn}=function(n,t,e,r,o){const{startEdge:i,endEdge:c}=n,{groupSlides:u}=o,a=u(r).map((n=>l(n)[c]-n[0][i])).map(s).map(t.measure),d=r.map((n=>e[i]-n[i])).map((n=>-s(n))),f=u(d).map((n=>n[0])).map(((n,t)=>n+a[t]));return{snaps:d,snapsAligned:f}}(Z,tn,Y,K,an),ln=-l(dn)+l(cn),{snapsContained:pn,scrollContainLimit:gn}=function(n,t,e,r,o){const i=S(-t+n,0),c=e.map(((n,t)=>{const{min:r,max:o}=i,c=i.constrain(n),u=!t,a=g(e,t);return u?o:a||s(r,c)?r:s(o,c)?o:c})).map((n=>parseFloat(n.toFixed(3)))),u=function(){const n=c[0],t=l(c);return S(c.lastIndexOf(n),c.indexOf(t)+1)}();function s(n,t){return d(n,t)<=1}return{snapsContained:function(){if(t<=n+o)return[i.max];if("keepSnaps"===r)return c;const{min:e,max:s}=u;return c.slice(e,s)}(),scrollContainLimit:u}}(_,ln,fn,$,2),mn=en?pn:fn,{limit:hn}=function(n,t,e){const r=t[0];return{limit:S(e?r-n:l(t),r)}}(ln,mn,R),yn=w(p(mn),j,R),xn=yn.clone(),bn=f(e),vn=v(r,o,(()=>(({dragHandler:n,scrollBody:t,scrollBounds:e,options:{loop:r}})=>{r||e.constrain(n.pointerDown()),t.seek()})(zn)),(n=>(({scrollBody:n,translate:t,location:e,offsetLocation:r,previousLocation:o,scrollLooper:i,slideLooper:c,dragHandler:u,animation:s,eventHandler:a,scrollBounds:d,options:{loop:f}},l)=>{const p=n.settled(),g=!d.shouldConstrain(),m=f?p:p&&g,h=m&&!u.pointerDown();h&&s.stop();const y=e.get()*l+o.get()*(1-l);r.set(y),f&&(i.loop(n.direction()),c.loop()),t.to(r.get()),h&&a.emit("settle"),m||a.emit("scroll")})(zn,n))),Sn=mn[yn.get()],wn=F(Sn),En=F(Sn),Ln=F(Sn),On=F(Sn),Dn=function(n,t,e,r,o,i){let c=0,u=0,d=o,f=i,l=n.get(),p=0;function g(n){return d=n,h}function m(n){return f=n,h}const h={direction:function(){return u},duration:function(){return d},velocity:function(){return c},seek:function(){const t=r.get()-n.get();let o=0;return d?(e.set(n),c+=t/d,c*=f,l+=c,n.add(c),o=l-p):(c=0,e.set(r),n.set(r),o=t),u=a(o),p=l,h},settled:function(){return s(r.get()-t.get())<.001},useBaseFriction:function(){return m(i)},useBaseDuration:function(){return g(o)},useFriction:m,useDuration:g};return h}(wn,Ln,En,On,V,.68),In=A(R,mn,ln,hn,On),An=function(n,t,e,r,o,i,c){function u(o){const u=o.distance,s=o.index!==t.get();i.add(u),u&&(r.duration()?n.start():(n.update(),n.render(1),n.update())),s&&(e.set(t.get()),t.set(o.index),c.emit("select"))}return{distance:function(n,t){u(o.byDistance(n,t))},index:function(n,e){const r=t.clone().set(n);u(o.byIndex(r.get(),e))}}}(vn,yn,xn,Dn,In,On,u),Mn=function(n){const{max:t,length:e}=n;return{get:function(n){return e?(n-t)/-e:0}}}(hn),Fn=b(),Tn=z(t,e,u,N),{slideRegistry:kn}=function(n,t,e,r,o,i){const{groupSlides:c}=o,{min:u,max:s}=r;return{slideRegistry:function(){const r=c(i),o=!n||"keepSnaps"===t;return 1===e.length?[i]:o?r:r.slice(u,s).map(((n,t,e)=>{const r=!t,o=g(e,t);return r?m(l(e[0])+1):o?m(p(i)-l(e)[0]+1,l(e)[0]):n}))}()}}(en,$,mn,gn,an,bn),Pn=M(n,e,kn,An,Dn,Fn,u,Q),zn={ownerDocument:r,ownerWindow:o,eventHandler:u,containerRect:Y,slideRects:K,animation:vn,axis:Z,dragHandler:E(Z,n,r,o,On,L(Z,o),wn,vn,An,Dn,In,yn,u,nn,B,C,G,.68,J),eventStore:Fn,percentOfView:nn,index:yn,indexPrevious:xn,limit:hn,location:wn,offsetLocation:Ln,previousLocation:En,options:c,resizeHandler:O(t,u,o,e,Z,U,X),scrollBody:Dn,scrollBounds:D(hn,Ln,On,Dn,nn),scrollLooper:I(ln,hn,Ln,[wn,Ln,En,On]),scrollProgress:Mn,scrollSnapList:mn.map(Mn.get),scrollSnaps:mn,scrollTarget:In,scrollTo:An,slideLooper:k(Z,_,ln,on,cn,dn,mn,Ln,e),slideFocus:Pn,slidesHandler:P(t,u,W),slidesInView:Tn,slideIndexes:bn,slideRegistry:kn,slidesToScroll:an,target:On,translate:T(Z,t)};return zn}const R={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function V(n){function t(n,t){return y(n,t||{})}const e={mergeOptions:t,optionsAtMedia:function(e){const r=e.breakpoints||{},o=h(r).filter((t=>n.matchMedia(t).matches)).map((n=>r[n])).reduce(((n,e)=>t(n,e)),{});return t(e,o)},optionsMediaQueries:function(t){return t.map((n=>h(n.breakpoints||{}))).reduce(((n,t)=>n.concat(t)),[]).map(n.matchMedia)}};return e}function B(n,t,e){const r=n.ownerDocument,o=r.defaultView,c=V(o),u=function(n){let t=[];return{init:function(e,r){return t=r.filter((({options:t})=>!1!==n.optionsAtMedia(t).active)),t.forEach((t=>t.init(e,n))),r.reduce(((n,t)=>Object.assign(n,{[t.name]:t})),{})},destroy:function(){t=t.filter((n=>n.destroy()))}}}(c),s=b(),a=function(){let n,t={};function e(n){return t[n]||[]}const r={init:function(t){n=t},emit:function(t){return e(t).forEach((e=>e(n,t))),r},off:function(n,o){return t[n]=e(n).filter((n=>n!==o)),r},on:function(n,o){return t[n]=e(n).concat([o]),r},clear:function(){t={}}};return r}(),{mergeOptions:d,optionsAtMedia:f,optionsMediaQueries:l}=c,{on:p,off:g,emit:m}=a,h=A;let y,x,v,S,w=!1,E=d(R,B.globalOptions),L=d(E),O=[];function D(t){const e=j(n,v,S,r,o,t,a);if(t.loop&&!e.slideLooper.canLoop()){return D(Object.assign({},t,{loop:!1}))}return e}function I(t,e){w||(E=d(E,t),L=f(E),O=e||O,function(){const{container:t,slides:e}=L,r=i(t)?n.querySelector(t):t;v=r||n.children[0];const o=i(e)?v.querySelectorAll(e):e;S=[].slice.call(o||v.children)}(),y=D(L),l([E,...O.map((({options:n})=>n))]).forEach((n=>s.add(n,"change",A))),L.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(k),y.eventHandler.init(k),y.resizeHandler.init(k),y.slidesHandler.init(k),y.options.loop&&y.slideLooper.loop(),v.offsetParent&&S.length&&y.dragHandler.init(k),x=u.init(k,O)))}function A(n,t){const e=T();M(),I(d({startIndex:e},n),t),a.emit("reInit")}function M(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),u.destroy(),s.clear()}function F(n,t,e){L.active&&!w&&(y.scrollBody.useBaseFriction().useDuration(!0===t?0:L.duration),y.scrollTo.index(n,e||0))}function T(){return y.index.get()}const k={canScrollNext:function(){return y.index.add(1).get()!==T()},canScrollPrev:function(){return y.index.add(-1).get()!==T()},containerNode:function(){return v},internalEngine:function(){return y},destroy:function(){w||(w=!0,s.clear(),M(),a.emit("destroy"),a.clear())},off:g,on:p,emit:m,plugins:function(){return x},previousScrollSnap:function(){return y.indexPrevious.get()},reInit:h,rootNode:function(){return n},scrollNext:function(n){F(y.index.add(1).get(),n,-1)},scrollPrev:function(n){F(y.index.add(-1).get(),n,1)},scrollProgress:function(){return y.scrollProgress.get(y.offsetLocation.get())},scrollSnapList:function(){return y.scrollSnapList},scrollTo:F,selectedScrollSnap:T,slideNodes:function(){return S},slidesInView:function(){return y.slidesInView.get()},slidesNotInView:function(){return y.slidesInView.get(!1)}};return I(t,e),setTimeout((()=>a.emit("init")),0),k}function C(t={},o=[]){const i=n.useRef(t),c=n.useRef(o),[u,s]=n.useState(),[a,d]=n.useState(),f=n.useCallback((()=>{u&&u.reInit(i.current,c.current)}),[u]);return n.useEffect((()=>{e(i.current,t)||(i.current=t,f())}),[t,f]),n.useEffect((()=>{(function(n,t){if(n.length!==t.length)return!1;const o=r(n),i=r(t);return o.every(((n,t)=>e(n,i[t])))})(c.current,o)||(c.current=o,f())}),[o,f]),n.useEffect((()=>{if("undefined"!=typeof window&&window.document&&window.document.createElement&&a){B.globalOptions=C.globalOptions;const n=B(a,i.current,c.current);return s(n),()=>n.destroy()}s(void 0)}),[a,s]),[d,u]}return B.globalOptions=void 0,C.globalOptions=void 0,C})); diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts deleted file mode 100644 index e23b160c11..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/components/useEmblaCarousel.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } from 'embla-carousel'; -export type EmblaViewportRefType = (instance: ViewportElement | null) => void; -export type UseEmblaCarouselType = [ - EmblaViewportRefType, - EmblaCarouselType | undefined -]; -declare function useEmblaCarousel(options?: EmblaOptionsType, plugins?: EmblaPluginType[]): UseEmblaCarouselType; -declare namespace useEmblaCarousel { - let globalOptions: EmblaOptionsType | undefined; -} -export default useEmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js deleted file mode 100644 index 9be497027f..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js +++ /dev/null @@ -1,38 +0,0 @@ -import { useRef, useState, useCallback, useEffect } from 'react'; -import { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils'; -import EmblaCarousel from 'embla-carousel'; - -function useEmblaCarousel(options = {}, plugins = []) { - const storedOptions = useRef(options); - const storedPlugins = useRef(plugins); - const [emblaApi, setEmblaApi] = useState(); - const [viewport, setViewport] = useState(); - const reInit = useCallback(() => { - if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current); - }, [emblaApi]); - useEffect(() => { - if (areOptionsEqual(storedOptions.current, options)) return; - storedOptions.current = options; - reInit(); - }, [options, reInit]); - useEffect(() => { - if (arePluginsEqual(storedPlugins.current, plugins)) return; - storedPlugins.current = plugins; - reInit(); - }, [plugins, reInit]); - useEffect(() => { - if (canUseDOM() && viewport) { - EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions; - const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current); - setEmblaApi(newEmblaApi); - return () => newEmblaApi.destroy(); - } else { - setEmblaApi(undefined); - } - }, [viewport, setEmblaApi]); - return [setViewport, emblaApi]; -} -useEmblaCarousel.globalOptions = undefined; - -export { useEmblaCarousel as default }; -//# sourceMappingURL=embla-carousel-react.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map deleted file mode 100644 index 49d3ed0c08..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel-react.esm.js","sources":["../src/components/useEmblaCarousel.ts"],"sourcesContent":["import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaViewportRefType = (\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState()\n const [viewport, setViewport] = useState()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n return [setViewport, emblaApi]\n}\n\ndeclare namespace useEmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n"],"names":["useEmblaCarousel","options","plugins","storedOptions","useRef","storedPlugins","emblaApi","setEmblaApi","useState","viewport","setViewport","reInit","useCallback","current","useEffect","areOptionsEqual","arePluginsEqual","canUseDOM","EmblaCarousel","globalOptions","newEmblaApi","destroy","undefined"],"mappings":";;;;AAqBA,SAASA,gBAAgBA,CACvBC,OAAA,GAA4B,EAAE,EAC9BC,UAA6B,EAAE,EAAA;AAE/B,EAAA,MAAMC,aAAa,GAAGC,MAAM,CAACH,OAAO,CAAC;AACrC,EAAA,MAAMI,aAAa,GAAGD,MAAM,CAACF,OAAO,CAAC;EACrC,MAAM,CAACI,QAAQ,EAAEC,WAAW,CAAC,GAAGC,QAAQ,EAAqB;EAC7D,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGF,QAAQ,EAAe;AAEvD,EAAA,MAAMG,MAAM,GAAGC,WAAW,CAAC,MAAK;AAC9B,IAAA,IAAIN,QAAQ,EAAEA,QAAQ,CAACK,MAAM,CAACR,aAAa,CAACU,OAAO,EAAER,aAAa,CAACQ,OAAO,CAAC;AAC7E,GAAC,EAAE,CAACP,QAAQ,CAAC,CAAC;AAEdQ,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIC,eAAe,CAACZ,aAAa,CAACU,OAAO,EAAEZ,OAAO,CAAC,EAAE;IACrDE,aAAa,CAACU,OAAO,GAAGZ,OAAO;AAC/BU,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACV,OAAO,EAAEU,MAAM,CAAC,CAAC;AAErBG,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIE,eAAe,CAACX,aAAa,CAACQ,OAAO,EAAEX,OAAO,CAAC,EAAE;IACrDG,aAAa,CAACQ,OAAO,GAAGX,OAAO;AAC/BS,IAAAA,MAAM,EAAE;AACV,GAAC,EAAE,CAACT,OAAO,EAAES,MAAM,CAAC,CAAC;AAErBG,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAIG,SAAS,EAAE,IAAIR,QAAQ,EAAE;AAC3BS,MAAAA,aAAa,CAACC,aAAa,GAAGnB,gBAAgB,CAACmB,aAAa;AAC5D,MAAA,MAAMC,WAAW,GAAGF,aAAa,CAC/BT,QAAQ,EACRN,aAAa,CAACU,OAAO,EACrBR,aAAa,CAACQ,OAAO,CACtB;MACDN,WAAW,CAACa,WAAW,CAAC;AACxB,MAAA,OAAO,MAAMA,WAAW,CAACC,OAAO,EAAE;AACpC,KAAC,MAAM;MACLd,WAAW,CAACe,SAAS,CAAC;AACxB;AACF,GAAC,EAAE,CAACb,QAAQ,EAAEF,WAAW,CAAC,CAAC;AAE3B,EAAA,OAAO,CAAuBG,WAAW,EAAEJ,QAAQ,CAAC;AACtD;AAMAN,gBAAgB,CAACmB,aAAa,GAAGG,SAAS;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts deleted file mode 100644 index ccec99221c..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { UseEmblaCarouselType, EmblaViewportRefType } from './components/useEmblaCarousel.js'; -export { default } from './components/useEmblaCarousel.js'; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json deleted file mode 100644 index f4604c2f56..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/esm/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "embla-carousel-react", - "version": "8.6.0", - "author": "David Jerleke", - "description": "A lightweight carousel library with fluid motion and great swipe precision", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-react*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@types/react": "^18.0.8", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "dependencies": { - "embla-carousel": "8.6.0", - "embla-carousel-reactive-utils": "8.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "module": "embla-carousel-react.esm.js", - "type": "module" -} diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts deleted file mode 100644 index 8ce0b23390..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { UseEmblaCarouselType, EmblaViewportRefType } from './components/useEmblaCarousel'; -export { default } from './components/useEmblaCarousel'; diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json deleted file mode 100644 index 25bd77cfd5..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "embla-carousel-react", - "version": "8.6.0", - "author": "David Jerleke", - "description": "A lightweight carousel library with fluid motion and great swipe precision", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "main": "embla-carousel-react.umd.js", - "unpkg": "embla-carousel-react.umd.js", - "module": "./esm/embla-carousel-react.esm.js", - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-react*", - "components/**/*", - "index.d.ts", - "esm/**/*", - "cjs/**/*" - ], - "scripts": { - "test": "echo \"Info: no tests specified\" && exit 0", - "build": "rollup --bundleConfigAsCjs -c", - "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", - "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" - }, - "devDependencies": { - "@types/jest": "^29.5.6", - "@types/react": "^18.0.8", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "dependencies": { - "embla-carousel": "8.6.0", - "embla-carousel-reactive-utils": "8.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./esm/index.d.ts", - "default": "./esm/embla-carousel-react.esm.js" - }, - "require": { - "types": "./cjs/index.d.ts", - "default": "./cjs/embla-carousel-react.cjs.js" - } - } - } -} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils deleted file mode 120000 index 1ec418d92e..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-reactive-utils +++ /dev/null @@ -1 +0,0 @@ -../../embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react b/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react deleted file mode 120000 index b1f1fdd058..0000000000 --- a/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/react +++ /dev/null @@ -1 +0,0 @@ -../../react@19.2.0/node_modules/react \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel deleted file mode 120000 index ba29366a8c..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel +++ /dev/null @@ -1 +0,0 @@ -../../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md deleted file mode 100644 index 45e32dbfe5..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/README.md +++ /dev/null @@ -1,233 +0,0 @@ -
-
-

- Embla Carousel - -

- -

- - - - - - -

- - -

Embla Carousel Reactive Utils

-
- -

- Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. -

- -
- -

- -  Examples  - -

- -

- -  Generator  - -

- -

- -  Installation  - -

-
- -
- -
- -

Ready for

-
- -

- - - - - - - - - - - - - - - - - - - - - -

-
- -
- - - -
- -
- -

Special Thanks

-
-

- - gunnarx2 - React wrapper useEmblaCarousel. - -
- - LiamMartens - Solid wrapper createEmblaCarousel. - -
- - donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. - -
- - xiel - Plugin Embla Carousel Wheel Gestures. - -
- - zaaakher - Contributing guidelines. - -
- - sarussss - Answering questions. - -

-
- -
- -

Open Source

- -

- Embla is MIT licensed 💖.

- Embla Carousel - Copyright © 2019-present.
- Package created by David Jerleke. -

- -

- · · · -

- -

- Thanks BrowserStack. -

- -

- - - -

diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts deleted file mode 100644 index 0b6c3b6af9..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/components/utils.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { EmblaPluginType } from 'embla-carousel'; -export declare function isObject(subject: unknown): subject is Record; -export declare function isRecord(subject: unknown): subject is Record; -export declare function canUseDOM(): boolean; -export declare function areOptionsEqual(optionsA: Record, optionsB: Record): boolean; -export declare function sortAndMapPluginToOptions(plugins: EmblaPluginType[]): EmblaPluginType['options'][]; -export declare function arePluginsEqual(pluginsA: EmblaPluginType[], pluginsB: EmblaPluginType[]): boolean; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js deleted file mode 100644 index 98a6ab3788..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -function isObject(subject) { - return Object.prototype.toString.call(subject) === '[object Object]'; -} -function isRecord(subject) { - return isObject(subject) || Array.isArray(subject); -} -function canUseDOM() { - return !!(typeof window !== 'undefined' && window.document && window.document.createElement); -} -function areOptionsEqual(optionsA, optionsB) { - const optionsAKeys = Object.keys(optionsA); - const optionsBKeys = Object.keys(optionsB); - if (optionsAKeys.length !== optionsBKeys.length) return false; - const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {})); - const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {})); - if (breakpointsA !== breakpointsB) return false; - return optionsAKeys.every(key => { - const valueA = optionsA[key]; - const valueB = optionsB[key]; - if (typeof valueA === 'function') return `${valueA}` === `${valueB}`; - if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB; - return areOptionsEqual(valueA, valueB); - }); -} -function sortAndMapPluginToOptions(plugins) { - return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options); -} -function arePluginsEqual(pluginsA, pluginsB) { - if (pluginsA.length !== pluginsB.length) return false; - const optionsA = sortAndMapPluginToOptions(pluginsA); - const optionsB = sortAndMapPluginToOptions(pluginsB); - return optionsA.every((optionA, index) => { - const optionB = optionsB[index]; - return areOptionsEqual(optionA, optionB); - }); -} - -exports.areOptionsEqual = areOptionsEqual; -exports.arePluginsEqual = arePluginsEqual; -exports.canUseDOM = canUseDOM; -exports.sortAndMapPluginToOptions = sortAndMapPluginToOptions; -//# sourceMappingURL=embla-carousel-reactive-utils.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map deleted file mode 100644 index 4441c57fc3..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/embla-carousel-reactive-utils.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel-reactive-utils.cjs.js","sources":["../src/components/utils.ts"],"sourcesContent":["import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record,\n optionsB: Record\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n"],"names":["isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB"],"mappings":";;AAEM,SAAUA,QAAQA,CAACC,OAAgB,EAAA;EACvC,OAAOC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,OAAO,CAAC,KAAK,iBAAiB;AACtE;AAEM,SAAUK,QAAQA,CACtBL,OAAgB,EAAA;EAEhB,OAAOD,QAAQ,CAACC,OAAO,CAAC,IAAIM,KAAK,CAACC,OAAO,CAACP,OAAO,CAAC;AACpD;SAEgBQ,SAASA,GAAA;AACvB,EAAA,OAAO,CAAC,EACN,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,CAACC,QAAQ,IACfD,MAAM,CAACC,QAAQ,CAACC,aAAa,CAC9B;AACH;AAEgB,SAAAC,eAAeA,CAC7BC,QAAiC,EACjCC,QAAiC,EAAA;AAEjC,EAAA,MAAMC,YAAY,GAAGd,MAAM,CAACe,IAAI,CAACH,QAAQ,CAAC;AAC1C,EAAA,MAAMI,YAAY,GAAGhB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAAC;EAE1C,IAAIC,YAAY,CAACG,MAAM,KAAKD,YAAY,CAACC,MAAM,EAAE,OAAO,KAAK;AAE7D,EAAA,MAAMC,YAAY,GAAGC,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACH,QAAQ,CAACS,WAAW,IAAI,EAAE,CAAC,CAAC;AAC5E,EAAA,MAAMC,YAAY,GAAGH,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAACQ,WAAW,IAAI,EAAE,CAAC,CAAC;AAE5E,EAAA,IAAIH,YAAY,KAAKI,YAAY,EAAE,OAAO,KAAK;AAE/C,EAAA,OAAOR,YAAY,CAACS,KAAK,CAAEC,GAAG,IAAI;AAChC,IAAA,MAAMC,MAAM,GAAGb,QAAQ,CAACY,GAAG,CAAC;AAC5B,IAAA,MAAME,MAAM,GAAGb,QAAQ,CAACW,GAAG,CAAC;AAC5B,IAAA,IAAI,OAAOC,MAAM,KAAK,UAAU,EAAE,OAAO,CAAGA,EAAAA,MAAM,CAAE,CAAA,KAAK,CAAGC,EAAAA,MAAM,CAAE,CAAA;AACpE,IAAA,IAAI,CAACtB,QAAQ,CAACqB,MAAM,CAAC,IAAI,CAACrB,QAAQ,CAACsB,MAAM,CAAC,EAAE,OAAOD,MAAM,KAAKC,MAAM;AACpE,IAAA,OAAOf,eAAe,CAACc,MAAM,EAAEC,MAAM,CAAC;AACxC,GAAC,CAAC;AACJ;AAEM,SAAUC,yBAAyBA,CACvCC,OAA0B,EAAA;AAE1B,EAAA,OAAOA,OAAO,CACXC,MAAM,EAAE,CACRC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACE,IAAI,GAAGD,CAAC,CAACC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAC1CC,GAAG,CAAEC,MAAM,IAAKA,MAAM,CAACC,OAAO,CAAC;AACpC;AAEgB,SAAAC,eAAeA,CAC7BC,QAA2B,EAC3BC,QAA2B,EAAA;EAE3B,IAAID,QAAQ,CAACrB,MAAM,KAAKsB,QAAQ,CAACtB,MAAM,EAAE,OAAO,KAAK;AAErD,EAAA,MAAML,QAAQ,GAAGe,yBAAyB,CAACW,QAAQ,CAAC;AACpD,EAAA,MAAMzB,QAAQ,GAAGc,yBAAyB,CAACY,QAAQ,CAAC;EAEpD,OAAO3B,QAAQ,CAACW,KAAK,CAAC,CAACiB,OAAO,EAAEC,KAAK,KAAI;AACvC,IAAA,MAAMC,OAAO,GAAG7B,QAAQ,CAAC4B,KAAK,CAAC;AAC/B,IAAA,OAAO9B,eAAe,CAAC6B,OAAO,EAAEE,OAAO,CAAC;AAC1C,GAAC,CAAC;AACJ;;;;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts deleted file mode 100644 index c83a671e3b..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { canUseDOM, areOptionsEqual, sortAndMapPluginToOptions, arePluginsEqual } from './components/utils'; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json deleted file mode 100644 index 944df3ae8f..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/cjs/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "embla-carousel-reactive-utils", - "version": "8.6.0", - "author": "David Jerleke", - "description": "Reactive utilities for Embla Carousel", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-reactive-utils*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "peerDependencies": { - "embla-carousel": "8.6.0" - }, - "main": "embla-carousel-reactive-utils.cjs.js", - "type": "commonjs" -} diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts deleted file mode 100644 index 0b6c3b6af9..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/components/utils.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { EmblaPluginType } from 'embla-carousel'; -export declare function isObject(subject: unknown): subject is Record; -export declare function isRecord(subject: unknown): subject is Record; -export declare function canUseDOM(): boolean; -export declare function areOptionsEqual(optionsA: Record, optionsB: Record): boolean; -export declare function sortAndMapPluginToOptions(plugins: EmblaPluginType[]): EmblaPluginType['options'][]; -export declare function arePluginsEqual(pluginsA: EmblaPluginType[], pluginsB: EmblaPluginType[]): boolean; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js deleted file mode 100644 index 2c9dea247e..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/embla-carousel-reactive-utils.umd.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).EmblaCarouselReactiveUtils={})}(this,(function(e){"use strict";function n(e){return function(e){return"[object Object]"===Object.prototype.toString.call(e)}(e)||Array.isArray(e)}function t(e,o){const i=Object.keys(e),r=Object.keys(o);if(i.length!==r.length)return!1;return JSON.stringify(Object.keys(e.breakpoints||{}))===JSON.stringify(Object.keys(o.breakpoints||{}))&&i.every((i=>{const r=e[i],u=o[i];return"function"==typeof r?`${r}`==`${u}`:n(r)&&n(u)?t(r,u):r===u}))}function o(e){return e.concat().sort(((e,n)=>e.name>n.name?1:-1)).map((e=>e.options))}e.areOptionsEqual=t,e.arePluginsEqual=function(e,n){if(e.length!==n.length)return!1;const i=o(e),r=o(n);return i.every(((e,n)=>t(e,r[n])))},e.canUseDOM=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)},e.sortAndMapPluginToOptions=o})); diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts deleted file mode 100644 index 0b6c3b6af9..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/components/utils.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { EmblaPluginType } from 'embla-carousel'; -export declare function isObject(subject: unknown): subject is Record; -export declare function isRecord(subject: unknown): subject is Record; -export declare function canUseDOM(): boolean; -export declare function areOptionsEqual(optionsA: Record, optionsB: Record): boolean; -export declare function sortAndMapPluginToOptions(plugins: EmblaPluginType[]): EmblaPluginType['options'][]; -export declare function arePluginsEqual(pluginsA: EmblaPluginType[], pluginsB: EmblaPluginType[]): boolean; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js deleted file mode 100644 index 3ebfc4e715..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js +++ /dev/null @@ -1,39 +0,0 @@ -function isObject(subject) { - return Object.prototype.toString.call(subject) === '[object Object]'; -} -function isRecord(subject) { - return isObject(subject) || Array.isArray(subject); -} -function canUseDOM() { - return !!(typeof window !== 'undefined' && window.document && window.document.createElement); -} -function areOptionsEqual(optionsA, optionsB) { - const optionsAKeys = Object.keys(optionsA); - const optionsBKeys = Object.keys(optionsB); - if (optionsAKeys.length !== optionsBKeys.length) return false; - const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {})); - const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {})); - if (breakpointsA !== breakpointsB) return false; - return optionsAKeys.every(key => { - const valueA = optionsA[key]; - const valueB = optionsB[key]; - if (typeof valueA === 'function') return `${valueA}` === `${valueB}`; - if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB; - return areOptionsEqual(valueA, valueB); - }); -} -function sortAndMapPluginToOptions(plugins) { - return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options); -} -function arePluginsEqual(pluginsA, pluginsB) { - if (pluginsA.length !== pluginsB.length) return false; - const optionsA = sortAndMapPluginToOptions(pluginsA); - const optionsB = sortAndMapPluginToOptions(pluginsB); - return optionsA.every((optionA, index) => { - const optionB = optionsB[index]; - return areOptionsEqual(optionA, optionB); - }); -} - -export { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions }; -//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map deleted file mode 100644 index a731792af4..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel-reactive-utils.esm.js","sources":["../src/components/utils.ts"],"sourcesContent":["import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record,\n optionsB: Record\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n"],"names":["isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB"],"mappings":"AAEM,SAAUA,QAAQA,CAACC,OAAgB,EAAA;EACvC,OAAOC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACJ,OAAO,CAAC,KAAK,iBAAiB;AACtE;AAEM,SAAUK,QAAQA,CACtBL,OAAgB,EAAA;EAEhB,OAAOD,QAAQ,CAACC,OAAO,CAAC,IAAIM,KAAK,CAACC,OAAO,CAACP,OAAO,CAAC;AACpD;SAEgBQ,SAASA,GAAA;AACvB,EAAA,OAAO,CAAC,EACN,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,CAACC,QAAQ,IACfD,MAAM,CAACC,QAAQ,CAACC,aAAa,CAC9B;AACH;AAEgB,SAAAC,eAAeA,CAC7BC,QAAiC,EACjCC,QAAiC,EAAA;AAEjC,EAAA,MAAMC,YAAY,GAAGd,MAAM,CAACe,IAAI,CAACH,QAAQ,CAAC;AAC1C,EAAA,MAAMI,YAAY,GAAGhB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAAC;EAE1C,IAAIC,YAAY,CAACG,MAAM,KAAKD,YAAY,CAACC,MAAM,EAAE,OAAO,KAAK;AAE7D,EAAA,MAAMC,YAAY,GAAGC,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACH,QAAQ,CAACS,WAAW,IAAI,EAAE,CAAC,CAAC;AAC5E,EAAA,MAAMC,YAAY,GAAGH,IAAI,CAACC,SAAS,CAACpB,MAAM,CAACe,IAAI,CAACF,QAAQ,CAACQ,WAAW,IAAI,EAAE,CAAC,CAAC;AAE5E,EAAA,IAAIH,YAAY,KAAKI,YAAY,EAAE,OAAO,KAAK;AAE/C,EAAA,OAAOR,YAAY,CAACS,KAAK,CAAEC,GAAG,IAAI;AAChC,IAAA,MAAMC,MAAM,GAAGb,QAAQ,CAACY,GAAG,CAAC;AAC5B,IAAA,MAAME,MAAM,GAAGb,QAAQ,CAACW,GAAG,CAAC;AAC5B,IAAA,IAAI,OAAOC,MAAM,KAAK,UAAU,EAAE,OAAO,CAAGA,EAAAA,MAAM,CAAE,CAAA,KAAK,CAAGC,EAAAA,MAAM,CAAE,CAAA;AACpE,IAAA,IAAI,CAACtB,QAAQ,CAACqB,MAAM,CAAC,IAAI,CAACrB,QAAQ,CAACsB,MAAM,CAAC,EAAE,OAAOD,MAAM,KAAKC,MAAM;AACpE,IAAA,OAAOf,eAAe,CAACc,MAAM,EAAEC,MAAM,CAAC;AACxC,GAAC,CAAC;AACJ;AAEM,SAAUC,yBAAyBA,CACvCC,OAA0B,EAAA;AAE1B,EAAA,OAAOA,OAAO,CACXC,MAAM,EAAE,CACRC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACE,IAAI,GAAGD,CAAC,CAACC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAC1CC,GAAG,CAAEC,MAAM,IAAKA,MAAM,CAACC,OAAO,CAAC;AACpC;AAEgB,SAAAC,eAAeA,CAC7BC,QAA2B,EAC3BC,QAA2B,EAAA;EAE3B,IAAID,QAAQ,CAACrB,MAAM,KAAKsB,QAAQ,CAACtB,MAAM,EAAE,OAAO,KAAK;AAErD,EAAA,MAAML,QAAQ,GAAGe,yBAAyB,CAACW,QAAQ,CAAC;AACpD,EAAA,MAAMzB,QAAQ,GAAGc,yBAAyB,CAACY,QAAQ,CAAC;EAEpD,OAAO3B,QAAQ,CAACW,KAAK,CAAC,CAACiB,OAAO,EAAEC,KAAK,KAAI;AACvC,IAAA,MAAMC,OAAO,GAAG7B,QAAQ,CAAC4B,KAAK,CAAC;AAC/B,IAAA,OAAO9B,eAAe,CAAC6B,OAAO,EAAEE,OAAO,CAAC;AAC1C,GAAC,CAAC;AACJ;;;;"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts deleted file mode 100644 index 85b20d2283..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { canUseDOM, areOptionsEqual, sortAndMapPluginToOptions, arePluginsEqual } from './components/utils.js'; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json deleted file mode 100644 index 3510133d58..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "embla-carousel-reactive-utils", - "version": "8.6.0", - "author": "David Jerleke", - "description": "Reactive utilities for Embla Carousel", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-reactive-utils*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "peerDependencies": { - "embla-carousel": "8.6.0" - }, - "module": "embla-carousel-reactive-utils.esm.js", - "type": "module" -} diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts deleted file mode 100644 index c83a671e3b..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { canUseDOM, areOptionsEqual, sortAndMapPluginToOptions, arePluginsEqual } from './components/utils'; diff --git a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json b/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json deleted file mode 100644 index 7b8f542fe2..0000000000 --- a/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "embla-carousel-reactive-utils", - "version": "8.6.0", - "author": "David Jerleke", - "description": "Reactive utilities for Embla Carousel", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "main": "embla-carousel-reactive-utils.umd.js", - "unpkg": "embla-carousel-reactive-utils.umd.js", - "module": "./esm/embla-carousel-reactive-utils.esm.js", - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel-reactive-utils*", - "components/**/*", - "index.d.ts", - "esm/**/*", - "cjs/**/*" - ], - "scripts": { - "test": "jest --config jest.config.js", - "build": "rollup --bundleConfigAsCjs -c", - "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", - "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" - }, - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "peerDependencies": { - "embla-carousel": "8.6.0" - }, - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./esm/index.d.ts", - "default": "./esm/embla-carousel-reactive-utils.esm.js" - }, - "require": { - "types": "./cjs/index.d.ts", - "default": "./cjs/embla-carousel-reactive-utils.cjs.js" - } - } - } -} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md deleted file mode 100644 index 62de8785df..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/README.md +++ /dev/null @@ -1,233 +0,0 @@ -
-
-

- Embla Carousel - -

- -

- - - - - - -

- - -

Embla Carousel

-
- -

- Embla Carousel is a bare bones carousel library with great fluid motion and awesome swipe precision. It's library agnostic, dependency free and 100% open source. -

- -
- -

- -  Examples  - -

- -

- -  Generator  - -

- -

- -  Installation  - -

-
- -
- -
- -

Ready for

-
- -

- - - - - - - - - - - - - - - - - - - - - -

-
- -
- - - -
- -
- -

Special Thanks

-
-

- - gunnarx2 - React wrapper useEmblaCarousel. - -
- - LiamMartens - Solid wrapper createEmblaCarousel. - -
- - donaldxdonald, zip-fa, JeanMeche - Angular wrapper EmblaCarouselDirective. - -
- - xiel - Plugin Embla Carousel Wheel Gestures. - -
- - zaaakher - Contributing guidelines. - -
- - sarussss - Answering questions. - -

-
- -
- -

Open Source

- -

- Embla is MIT licensed 💖.

- Embla Carousel - Copyright © 2019-present.
- Package created by David Jerleke. -

- -

- · · · -

- -

- Thanks BrowserStack. -

- -

- - - -

diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts deleted file mode 100644 index 72f1015b7b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Alignment.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type AlignmentOptionType = 'start' | 'center' | 'end' | ((viewSize: number, snapSize: number, index: number) => number); -export type AlignmentType = { - measure: (n: number, index: number) => number; -}; -export declare function Alignment(align: AlignmentOptionType, viewSize: number): AlignmentType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts deleted file mode 100644 index 693defa7e7..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Animations.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EngineType } from './Engine'; -import { WindowType } from './utils'; -export type AnimationsUpdateType = (engine: EngineType) => void; -export type AnimationsRenderType = (engine: EngineType, alpha: number) => void; -export type AnimationsType = { - init: () => void; - destroy: () => void; - start: () => void; - stop: () => void; - update: () => void; - render: (alpha: number) => void; -}; -export declare function Animations(ownerDocument: Document, ownerWindow: WindowType, update: () => void, render: (alpha: number) => void): AnimationsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts deleted file mode 100644 index a0735f7e04..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Axis.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NodeRectType } from './NodeRects'; -export type AxisOptionType = 'x' | 'y'; -export type AxisDirectionOptionType = 'ltr' | 'rtl'; -type AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'; -export type AxisType = { - scroll: AxisOptionType; - cross: AxisOptionType; - startEdge: AxisEdgeType; - endEdge: AxisEdgeType; - measureSize: (nodeRect: NodeRectType) => number; - direction: (n: number) => number; -}; -export declare function Axis(axis: AxisOptionType, contentDirection: AxisDirectionOptionType): AxisType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts deleted file mode 100644 index 964a47d838..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Counter.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type CounterType = { - get: () => number; - set: (n: number) => CounterType; - add: (n: number) => CounterType; - clone: () => CounterType; -}; -export declare function Counter(max: number, start: number, loop: boolean): CounterType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts deleted file mode 100644 index 0685db222c..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragHandler.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { AnimationsType } from './Animations'; -import { CounterType } from './Counter'; -import { DragTrackerType, PointerEventType } from './DragTracker'; -import { EventHandlerType } from './EventHandler'; -import { AxisType } from './Axis'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollTargetType } from './ScrollTarget'; -import { ScrollToType } from './ScrollTo'; -import { Vector1DType } from './Vector1d'; -import { PercentOfViewType } from './PercentOfView'; -import { WindowType } from './utils'; -type DragHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: PointerEventType) => boolean | void; -export type DragHandlerOptionType = boolean | DragHandlerCallbackType; -export type DragHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; - pointerDown: () => boolean; -}; -export declare function DragHandler(axis: AxisType, rootNode: HTMLElement, ownerDocument: Document, ownerWindow: WindowType, target: Vector1DType, dragTracker: DragTrackerType, location: Vector1DType, animation: AnimationsType, scrollTo: ScrollToType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, index: CounterType, eventHandler: EventHandlerType, percentOfView: PercentOfViewType, dragFree: boolean, dragThreshold: number, skipSnaps: boolean, baseFriction: number, watchDrag: DragHandlerOptionType): DragHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts deleted file mode 100644 index 0f4b4cb4a0..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/DragTracker.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AxisOptionType, AxisType } from './Axis'; -import { WindowType } from './utils'; -export type PointerEventType = TouchEvent | MouseEvent; -export type DragTrackerType = { - pointerDown: (evt: PointerEventType) => number; - pointerMove: (evt: PointerEventType) => number; - pointerUp: (evt: PointerEventType) => number; - readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number; -}; -export declare function DragTracker(axis: AxisType, ownerWindow: WindowType): DragTrackerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts deleted file mode 100644 index 5ad21c978a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EmblaCarousel.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { EngineType } from './Engine'; -import { EventHandlerType } from './EventHandler'; -import { EmblaOptionsType } from './Options'; -import { EmblaPluginsType, EmblaPluginType } from './Plugins'; -export type EmblaCarouselType = { - canScrollNext: () => boolean; - canScrollPrev: () => boolean; - containerNode: () => HTMLElement; - internalEngine: () => EngineType; - destroy: () => void; - off: EventHandlerType['off']; - on: EventHandlerType['on']; - emit: EventHandlerType['emit']; - plugins: () => EmblaPluginsType; - previousScrollSnap: () => number; - reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void; - rootNode: () => HTMLElement; - scrollNext: (jump?: boolean) => void; - scrollPrev: (jump?: boolean) => void; - scrollProgress: () => number; - scrollSnapList: () => number[]; - scrollTo: (index: number, jump?: boolean) => void; - selectedScrollSnap: () => number; - slideNodes: () => HTMLElement[]; - slidesInView: () => number[]; - slidesNotInView: () => number[]; -}; -declare function EmblaCarousel(root: HTMLElement, userOptions?: EmblaOptionsType, userPlugins?: EmblaPluginType[]): EmblaCarouselType; -declare namespace EmblaCarousel { - let globalOptions: EmblaOptionsType | undefined; -} -export default EmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts deleted file mode 100644 index 18071b0136..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Engine.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { AnimationsType } from './Animations'; -import { AxisType } from './Axis'; -import { CounterType } from './Counter'; -import { DragHandlerType } from './DragHandler'; -import { EventHandlerType } from './EventHandler'; -import { EventStoreType } from './EventStore'; -import { LimitType } from './Limit'; -import { NodeRectType } from './NodeRects'; -import { OptionsType } from './Options'; -import { PercentOfViewType } from './PercentOfView'; -import { ResizeHandlerType } from './ResizeHandler'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollBoundsType } from './ScrollBounds'; -import { ScrollLooperType } from './ScrollLooper'; -import { ScrollProgressType } from './ScrollProgress'; -import { SlideRegistryType } from './SlideRegistry'; -import { ScrollTargetType } from './ScrollTarget'; -import { ScrollToType } from './ScrollTo'; -import { SlideFocusType } from './SlideFocus'; -import { SlideLooperType } from './SlideLooper'; -import { SlidesHandlerType } from './SlidesHandler'; -import { SlidesInViewType } from './SlidesInView'; -import { SlidesToScrollType } from './SlidesToScroll'; -import { TranslateType } from './Translate'; -import { WindowType } from './utils'; -import { Vector1DType } from './Vector1d'; -export type EngineType = { - ownerDocument: Document; - ownerWindow: WindowType; - eventHandler: EventHandlerType; - axis: AxisType; - animation: AnimationsType; - scrollBounds: ScrollBoundsType; - scrollLooper: ScrollLooperType; - scrollProgress: ScrollProgressType; - index: CounterType; - indexPrevious: CounterType; - limit: LimitType; - location: Vector1DType; - offsetLocation: Vector1DType; - previousLocation: Vector1DType; - options: OptionsType; - percentOfView: PercentOfViewType; - scrollBody: ScrollBodyType; - dragHandler: DragHandlerType; - eventStore: EventStoreType; - slideLooper: SlideLooperType; - slidesInView: SlidesInViewType; - slidesToScroll: SlidesToScrollType; - target: Vector1DType; - translate: TranslateType; - resizeHandler: ResizeHandlerType; - slidesHandler: SlidesHandlerType; - scrollTo: ScrollToType; - scrollTarget: ScrollTargetType; - scrollSnapList: number[]; - scrollSnaps: number[]; - slideIndexes: number[]; - slideFocus: SlideFocusType; - slideRegistry: SlideRegistryType['slideRegistry']; - containerRect: NodeRectType; - slideRects: NodeRectType[]; -}; -export declare function Engine(root: HTMLElement, container: HTMLElement, slides: HTMLElement[], ownerDocument: Document, ownerWindow: WindowType, options: OptionsType, eventHandler: EventHandlerType): EngineType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts deleted file mode 100644 index 4c8159f16e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventHandler.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -type CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void; -export type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]; -export interface EmblaEventListType { - init: 'init'; - pointerDown: 'pointerDown'; - pointerUp: 'pointerUp'; - slidesChanged: 'slidesChanged'; - slidesInView: 'slidesInView'; - scroll: 'scroll'; - select: 'select'; - settle: 'settle'; - destroy: 'destroy'; - reInit: 'reInit'; - resize: 'resize'; - slideFocusStart: 'slideFocusStart'; - slideFocus: 'slideFocus'; -} -export type EventHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - emit: (evt: EmblaEventType) => EventHandlerType; - on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; - off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; - clear: () => void; -}; -export declare function EventHandler(): EventHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts deleted file mode 100644 index 8b0f89ed6a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/EventStore.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -type EventNameType = keyof DocumentEventMap | keyof WindowEventMap; -type EventHandlerType = (evt: any) => void; -type EventOptionsType = boolean | AddEventListenerOptions | undefined; -export type EventStoreType = { - add: (node: EventTarget, type: EventNameType, handler: EventHandlerType, options?: EventOptionsType) => EventStoreType; - clear: () => void; -}; -export declare function EventStore(): EventStoreType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts deleted file mode 100644 index b6499b04a8..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Limit.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type LimitType = { - min: number; - max: number; - length: number; - constrain: (n: number) => number; - reachedAny: (n: number) => boolean; - reachedMax: (n: number) => boolean; - reachedMin: (n: number) => boolean; - removeOffset: (n: number) => number; -}; -export declare function Limit(min?: number, max?: number): LimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts deleted file mode 100644 index c76623b8e7..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/NodeRects.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type NodeRectType = { - top: number; - right: number; - bottom: number; - left: number; - width: number; - height: number; -}; -export type NodeRectsType = { - measure: (node: HTMLElement) => NodeRectType; -}; -export declare function NodeRects(): NodeRectsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts deleted file mode 100644 index 168867d04a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Options.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { AlignmentOptionType } from './Alignment'; -import { AxisDirectionOptionType, AxisOptionType } from './Axis'; -import { SlidesToScrollOptionType } from './SlidesToScroll'; -import { ScrollContainOptionType } from './ScrollContain'; -import { DragHandlerOptionType } from './DragHandler'; -import { ResizeHandlerOptionType } from './ResizeHandler'; -import { SlidesHandlerOptionType } from './SlidesHandler'; -import { SlidesInViewOptionsType } from './SlidesInView'; -import { FocusHandlerOptionType } from './SlideFocus'; -export type LooseOptionsType = { - [key: string]: unknown; -}; -export type CreateOptionsType = Type & { - active: boolean; - breakpoints: { - [key: string]: Omit>, 'breakpoints'>; - }; -}; -export type OptionsType = CreateOptionsType<{ - align: AlignmentOptionType; - axis: AxisOptionType; - container: string | HTMLElement | null; - slides: string | HTMLElement[] | NodeListOf | null; - containScroll: ScrollContainOptionType; - direction: AxisDirectionOptionType; - slidesToScroll: SlidesToScrollOptionType; - dragFree: boolean; - dragThreshold: number; - inViewThreshold: SlidesInViewOptionsType; - loop: boolean; - skipSnaps: boolean; - duration: number; - startIndex: number; - watchDrag: DragHandlerOptionType; - watchResize: ResizeHandlerOptionType; - watchSlides: SlidesHandlerOptionType; - watchFocus: FocusHandlerOptionType; -}>; -export declare const defaultOptions: OptionsType; -export type EmblaOptionsType = Partial; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts deleted file mode 100644 index 54ed8aa7ac..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/OptionsHandler.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LooseOptionsType, CreateOptionsType } from './Options'; -import { WindowType } from './utils'; -type OptionsType = Partial>; -export type OptionsHandlerType = { - mergeOptions: (optionsA: TypeA, optionsB?: TypeB) => TypeA; - optionsAtMedia: (options: Type) => Type; - optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]; -}; -export declare function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts deleted file mode 100644 index b51b35a13b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PercentOfView.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type PercentOfViewType = { - measure: (n: number) => number; -}; -export declare function PercentOfView(viewSize: number): PercentOfViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts deleted file mode 100644 index 9518557993..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Plugins.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { CreateOptionsType, LooseOptionsType } from './Options'; -import { EmblaCarouselType } from './EmblaCarousel'; -import { OptionsHandlerType } from './OptionsHandler'; -export type LoosePluginType = { - [key: string]: unknown; -}; -export type CreatePluginType = TypeA & { - name: string; - options: Partial>; - init: (embla: EmblaCarouselType, OptionsHandler: OptionsHandlerType) => void; - destroy: () => void; -}; -export interface EmblaPluginsType { - [key: string]: CreatePluginType; -} -export type EmblaPluginType = EmblaPluginsType[keyof EmblaPluginsType]; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts deleted file mode 100644 index da2688d0b4..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/PluginsHandler.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { OptionsHandlerType } from './OptionsHandler'; -import { EmblaPluginsType, EmblaPluginType } from './Plugins'; -export type PluginsHandlerType = { - init: (emblaApi: EmblaCarouselType, plugins: EmblaPluginType[]) => EmblaPluginsType; - destroy: () => void; -}; -export declare function PluginsHandler(optionsHandler: OptionsHandlerType): PluginsHandlerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts deleted file mode 100644 index 111a58d053..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ResizeHandler.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { AxisType } from './Axis'; -import { EmblaCarouselType } from './EmblaCarousel'; -import { EventHandlerType } from './EventHandler'; -import { NodeRectsType } from './NodeRects'; -import { WindowType } from './utils'; -type ResizeHandlerCallbackType = (emblaApi: EmblaCarouselType, entries: ResizeObserverEntry[]) => boolean | void; -export type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType; -export type ResizeHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; -}; -export declare function ResizeHandler(container: HTMLElement, eventHandler: EventHandlerType, ownerWindow: WindowType, slides: HTMLElement[], axis: AxisType, watchResize: ResizeHandlerOptionType, nodeRects: NodeRectsType): ResizeHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts deleted file mode 100644 index d7dc7d5e57..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBody.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Vector1DType } from './Vector1d'; -export type ScrollBodyType = { - direction: () => number; - duration: () => number; - velocity: () => number; - seek: () => ScrollBodyType; - settled: () => boolean; - useBaseFriction: () => ScrollBodyType; - useBaseDuration: () => ScrollBodyType; - useFriction: (n: number) => ScrollBodyType; - useDuration: (n: number) => ScrollBodyType; -}; -export declare function ScrollBody(location: Vector1DType, offsetLocation: Vector1DType, previousLocation: Vector1DType, target: Vector1DType, baseDuration: number, baseFriction: number): ScrollBodyType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts deleted file mode 100644 index d040f09a2d..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollBounds.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LimitType } from './Limit'; -import { ScrollBodyType } from './ScrollBody'; -import { Vector1DType } from './Vector1d'; -import { PercentOfViewType } from './PercentOfView'; -export type ScrollBoundsType = { - shouldConstrain: () => boolean; - constrain: (pointerDown: boolean) => void; - toggleActive: (active: boolean) => void; -}; -export declare function ScrollBounds(limit: LimitType, location: Vector1DType, target: Vector1DType, scrollBody: ScrollBodyType, percentOfView: PercentOfViewType): ScrollBoundsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts deleted file mode 100644 index 66f5907b81..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollContain.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LimitType } from './Limit'; -export type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'; -export type ScrollContainType = { - snapsContained: number[]; - scrollContainLimit: LimitType; -}; -export declare function ScrollContain(viewSize: number, contentSize: number, snapsAligned: number[], containScroll: ScrollContainOptionType, pixelTolerance: number): ScrollContainType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts deleted file mode 100644 index 3d417cca34..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLimit.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LimitType } from './Limit'; -export type ScrollLimitType = { - limit: LimitType; -}; -export declare function ScrollLimit(contentSize: number, scrollSnaps: number[], loop: boolean): ScrollLimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts deleted file mode 100644 index 97b1b1ba38..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollLooper.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { LimitType } from './Limit'; -import { Vector1DType } from './Vector1d'; -export type ScrollLooperType = { - loop: (direction: number) => void; -}; -export declare function ScrollLooper(contentSize: number, limit: LimitType, location: Vector1DType, vectors: Vector1DType[]): ScrollLooperType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts deleted file mode 100644 index 224e4d385e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollProgress.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LimitType } from './Limit'; -export type ScrollProgressType = { - get: (n: number) => number; -}; -export declare function ScrollProgress(limit: LimitType): ScrollProgressType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts deleted file mode 100644 index 55e7bac4f0..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollSnaps.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AlignmentType } from './Alignment'; -import { AxisType } from './Axis'; -import { NodeRectType } from './NodeRects'; -import { SlidesToScrollType } from './SlidesToScroll'; -export type ScrollSnapsType = { - snaps: number[]; - snapsAligned: number[]; -}; -export declare function ScrollSnaps(axis: AxisType, alignment: AlignmentType, containerRect: NodeRectType, slideRects: NodeRectType[], slidesToScroll: SlidesToScrollType): ScrollSnapsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts deleted file mode 100644 index 3d26624f0e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTarget.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { LimitType } from './Limit'; -import { Vector1DType } from './Vector1d'; -export type TargetType = { - distance: number; - index: number; -}; -export type ScrollTargetType = { - byIndex: (target: number, direction: number) => TargetType; - byDistance: (force: number, snap: boolean) => TargetType; - shortcut: (target: number, direction: number) => number; -}; -export declare function ScrollTarget(loop: boolean, scrollSnaps: number[], contentSize: number, limit: LimitType, targetVector: Vector1DType): ScrollTargetType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts deleted file mode 100644 index 1291ed8628..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/ScrollTo.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AnimationsType } from './Animations'; -import { CounterType } from './Counter'; -import { EventHandlerType } from './EventHandler'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollTargetType } from './ScrollTarget'; -import { Vector1DType } from './Vector1d'; -export type ScrollToType = { - distance: (n: number, snap: boolean) => void; - index: (n: number, direction: number) => void; -}; -export declare function ScrollTo(animation: AnimationsType, indexCurrent: CounterType, indexPrevious: CounterType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, targetVector: Vector1DType, eventHandler: EventHandlerType): ScrollToType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts deleted file mode 100644 index 6f962aae8a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideFocus.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { EventHandlerType } from './EventHandler'; -import { EventStoreType } from './EventStore'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollToType } from './ScrollTo'; -import { SlideRegistryType } from './SlideRegistry'; -type FocusHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: FocusEvent) => boolean | void; -export type FocusHandlerOptionType = boolean | FocusHandlerCallbackType; -export type SlideFocusType = { - init: (emblaApi: EmblaCarouselType) => void; -}; -export declare function SlideFocus(root: HTMLElement, slides: HTMLElement[], slideRegistry: SlideRegistryType['slideRegistry'], scrollTo: ScrollToType, scrollBody: ScrollBodyType, eventStore: EventStoreType, eventHandler: EventHandlerType, watchFocus: FocusHandlerOptionType): SlideFocusType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts deleted file mode 100644 index bb10e7df3c..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideLooper.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AxisType } from './Axis'; -import { Vector1DType } from './Vector1d'; -import { TranslateType } from './Translate'; -type LoopPointType = { - loopPoint: number; - index: number; - translate: TranslateType; - slideLocation: Vector1DType; - target: () => number; -}; -export type SlideLooperType = { - canLoop: () => boolean; - clear: () => void; - loop: () => void; - loopPoints: LoopPointType[]; -}; -export declare function SlideLooper(axis: AxisType, viewSize: number, contentSize: number, slideSizes: number[], slideSizesWithGaps: number[], snaps: number[], scrollSnaps: number[], location: Vector1DType, slides: HTMLElement[]): SlideLooperType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts deleted file mode 100644 index d339b15eaa..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideRegistry.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LimitType } from './Limit'; -import { ScrollContainOptionType } from './ScrollContain'; -import { SlidesToScrollType } from './SlidesToScroll'; -export type SlideRegistryType = { - slideRegistry: number[][]; -}; -export declare function SlideRegistry(containSnaps: boolean, containScroll: ScrollContainOptionType, scrollSnaps: number[], scrollContainLimit: LimitType, slidesToScroll: SlidesToScrollType, slideIndexes: number[]): SlideRegistryType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts deleted file mode 100644 index 86961805cb..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlideSizes.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AxisType } from './Axis'; -import { NodeRectType } from './NodeRects'; -import { WindowType } from './utils'; -export type SlideSizesType = { - slideSizes: number[]; - slideSizesWithGaps: number[]; - startGap: number; - endGap: number; -}; -export declare function SlideSizes(axis: AxisType, containerRect: NodeRectType, slideRects: NodeRectType[], slides: HTMLElement[], readEdgeGap: boolean, ownerWindow: WindowType): SlideSizesType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts deleted file mode 100644 index 6115d5f30e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesHandler.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { EventHandlerType } from './EventHandler'; -type SlidesHandlerCallbackType = (emblaApi: EmblaCarouselType, mutations: MutationRecord[]) => boolean | void; -export type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType; -export type SlidesHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; -}; -export declare function SlidesHandler(container: HTMLElement, eventHandler: EventHandlerType, watchSlides: SlidesHandlerOptionType): SlidesHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts deleted file mode 100644 index 943d05cd2b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesInView.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { EventHandlerType } from './EventHandler'; -export type SlidesInViewOptionsType = IntersectionObserverInit['threshold']; -export type SlidesInViewType = { - init: () => void; - destroy: () => void; - get: (inView?: boolean) => number[]; -}; -export declare function SlidesInView(container: HTMLElement, slides: HTMLElement[], eventHandler: EventHandlerType, threshold: SlidesInViewOptionsType): SlidesInViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts deleted file mode 100644 index 129460e4af..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/SlidesToScroll.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AxisType } from './Axis'; -import { NodeRectType } from './NodeRects'; -export type SlidesToScrollOptionType = 'auto' | number; -export type SlidesToScrollType = { - groupSlides: (array: Type[]) => Type[][]; -}; -export declare function SlidesToScroll(axis: AxisType, viewSize: number, slidesToScroll: SlidesToScrollOptionType, loop: boolean, containerRect: NodeRectType, slideRects: NodeRectType[], startGap: number, endGap: number, pixelTolerance: number): SlidesToScrollType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts deleted file mode 100644 index 2d9c96118f..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Translate.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AxisType } from './Axis'; -export type TranslateType = { - clear: () => void; - to: (target: number) => void; - toggleActive: (active: boolean) => void; -}; -export declare function Translate(axis: AxisType, container: HTMLElement): TranslateType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts deleted file mode 100644 index 9ff303c96b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/Vector1d.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Vector1DType = { - get: () => number; - set: (n: Vector1DType | number) => void; - add: (n: Vector1DType | number) => void; - subtract: (n: Vector1DType | number) => void; -}; -export declare function Vector1D(initialValue: number): Vector1DType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts deleted file mode 100644 index 367767d6e8..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/components/utils.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { PointerEventType } from './DragTracker'; -export type WindowType = Window & typeof globalThis; -export declare function isNumber(subject: unknown): subject is number; -export declare function isString(subject: unknown): subject is string; -export declare function isBoolean(subject: unknown): subject is boolean; -export declare function isObject(subject: unknown): subject is Record; -export declare function mathAbs(n: number): number; -export declare function mathSign(n: number): number; -export declare function deltaAbs(valueB: number, valueA: number): number; -export declare function factorAbs(valueB: number, valueA: number): number; -export declare function roundToTwoDecimals(num: number): number; -export declare function arrayKeys(array: Type[]): number[]; -export declare function arrayLast(array: Type[]): Type; -export declare function arrayLastIndex(array: Type[]): number; -export declare function arrayIsLastIndex(array: Type[], index: number): boolean; -export declare function arrayFromNumber(n: number, startAt?: number): number[]; -export declare function objectKeys(object: Type): string[]; -export declare function objectsMergeDeep(objectA: Record, objectB: Record): Record; -export declare function isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js deleted file mode 100644 index 03e30fa6eb..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js +++ /dev/null @@ -1,1672 +0,0 @@ -'use strict'; - -function isNumber(subject) { - return typeof subject === 'number'; -} -function isString(subject) { - return typeof subject === 'string'; -} -function isBoolean(subject) { - return typeof subject === 'boolean'; -} -function isObject(subject) { - return Object.prototype.toString.call(subject) === '[object Object]'; -} -function mathAbs(n) { - return Math.abs(n); -} -function mathSign(n) { - return Math.sign(n); -} -function deltaAbs(valueB, valueA) { - return mathAbs(valueB - valueA); -} -function factorAbs(valueB, valueA) { - if (valueB === 0 || valueA === 0) return 0; - if (mathAbs(valueB) <= mathAbs(valueA)) return 0; - const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA)); - return mathAbs(diff / valueB); -} -function roundToTwoDecimals(num) { - return Math.round(num * 100) / 100; -} -function arrayKeys(array) { - return objectKeys(array).map(Number); -} -function arrayLast(array) { - return array[arrayLastIndex(array)]; -} -function arrayLastIndex(array) { - return Math.max(0, array.length - 1); -} -function arrayIsLastIndex(array, index) { - return index === arrayLastIndex(array); -} -function arrayFromNumber(n, startAt = 0) { - return Array.from(Array(n), (_, i) => startAt + i); -} -function objectKeys(object) { - return Object.keys(object); -} -function objectsMergeDeep(objectA, objectB) { - return [objectA, objectB].reduce((mergedObjects, currentObject) => { - objectKeys(currentObject).forEach(key => { - const valueA = mergedObjects[key]; - const valueB = currentObject[key]; - const areObjects = isObject(valueA) && isObject(valueB); - mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB; - }); - return mergedObjects; - }, {}); -} -function isMouseEvent(evt, ownerWindow) { - return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent; -} - -function Alignment(align, viewSize) { - const predefined = { - start, - center, - end - }; - function start() { - return 0; - } - function center(n) { - return end(n) / 2; - } - function end(n) { - return viewSize - n; - } - function measure(n, index) { - if (isString(align)) return predefined[align](n); - return align(viewSize, n, index); - } - const self = { - measure - }; - return self; -} - -function EventStore() { - let listeners = []; - function add(node, type, handler, options = { - passive: true - }) { - let removeListener; - if ('addEventListener' in node) { - node.addEventListener(type, handler, options); - removeListener = () => node.removeEventListener(type, handler, options); - } else { - const legacyMediaQueryList = node; - legacyMediaQueryList.addListener(handler); - removeListener = () => legacyMediaQueryList.removeListener(handler); - } - listeners.push(removeListener); - return self; - } - function clear() { - listeners = listeners.filter(remove => remove()); - } - const self = { - add, - clear - }; - return self; -} - -function Animations(ownerDocument, ownerWindow, update, render) { - const documentVisibleHandler = EventStore(); - const fixedTimeStep = 1000 / 60; - let lastTimeStamp = null; - let accumulatedTime = 0; - let animationId = 0; - function init() { - documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => { - if (ownerDocument.hidden) reset(); - }); - } - function destroy() { - stop(); - documentVisibleHandler.clear(); - } - function animate(timeStamp) { - if (!animationId) return; - if (!lastTimeStamp) { - lastTimeStamp = timeStamp; - update(); - update(); - } - const timeElapsed = timeStamp - lastTimeStamp; - lastTimeStamp = timeStamp; - accumulatedTime += timeElapsed; - while (accumulatedTime >= fixedTimeStep) { - update(); - accumulatedTime -= fixedTimeStep; - } - const alpha = accumulatedTime / fixedTimeStep; - render(alpha); - if (animationId) { - animationId = ownerWindow.requestAnimationFrame(animate); - } - } - function start() { - if (animationId) return; - animationId = ownerWindow.requestAnimationFrame(animate); - } - function stop() { - ownerWindow.cancelAnimationFrame(animationId); - lastTimeStamp = null; - accumulatedTime = 0; - animationId = 0; - } - function reset() { - lastTimeStamp = null; - accumulatedTime = 0; - } - const self = { - init, - destroy, - start, - stop, - update, - render - }; - return self; -} - -function Axis(axis, contentDirection) { - const isRightToLeft = contentDirection === 'rtl'; - const isVertical = axis === 'y'; - const scroll = isVertical ? 'y' : 'x'; - const cross = isVertical ? 'x' : 'y'; - const sign = !isVertical && isRightToLeft ? -1 : 1; - const startEdge = getStartEdge(); - const endEdge = getEndEdge(); - function measureSize(nodeRect) { - const { - height, - width - } = nodeRect; - return isVertical ? height : width; - } - function getStartEdge() { - if (isVertical) return 'top'; - return isRightToLeft ? 'right' : 'left'; - } - function getEndEdge() { - if (isVertical) return 'bottom'; - return isRightToLeft ? 'left' : 'right'; - } - function direction(n) { - return n * sign; - } - const self = { - scroll, - cross, - startEdge, - endEdge, - measureSize, - direction - }; - return self; -} - -function Limit(min = 0, max = 0) { - const length = mathAbs(min - max); - function reachedMin(n) { - return n < min; - } - function reachedMax(n) { - return n > max; - } - function reachedAny(n) { - return reachedMin(n) || reachedMax(n); - } - function constrain(n) { - if (!reachedAny(n)) return n; - return reachedMin(n) ? min : max; - } - function removeOffset(n) { - if (!length) return n; - return n - length * Math.ceil((n - max) / length); - } - const self = { - length, - max, - min, - constrain, - reachedAny, - reachedMax, - reachedMin, - removeOffset - }; - return self; -} - -function Counter(max, start, loop) { - const { - constrain - } = Limit(0, max); - const loopEnd = max + 1; - let counter = withinLimit(start); - function withinLimit(n) { - return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd); - } - function get() { - return counter; - } - function set(n) { - counter = withinLimit(n); - return self; - } - function add(n) { - return clone().set(get() + n); - } - function clone() { - return Counter(max, get(), loop); - } - const self = { - get, - set, - add, - clone - }; - return self; -} - -function DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) { - const { - cross: crossAxis, - direction - } = axis; - const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']; - const nonPassiveEvent = { - passive: false - }; - const initEvents = EventStore(); - const dragEvents = EventStore(); - const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20)); - const snapForceBoost = { - mouse: 300, - touch: 400 - }; - const freeForceBoost = { - mouse: 500, - touch: 600 - }; - const baseSpeed = dragFree ? 43 : 25; - let isMoving = false; - let startScroll = 0; - let startCross = 0; - let pointerIsDown = false; - let preventScroll = false; - let preventClick = false; - let isMouse = false; - function init(emblaApi) { - if (!watchDrag) return; - function downIfAllowed(evt) { - if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt); - } - const node = rootNode; - initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true); - } - function destroy() { - initEvents.clear(); - dragEvents.clear(); - } - function addDragEvents() { - const node = isMouse ? ownerDocument : rootNode; - dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up); - } - function isFocusNode(node) { - const nodeName = node.nodeName || ''; - return focusNodes.includes(nodeName); - } - function forceBoost() { - const boost = dragFree ? freeForceBoost : snapForceBoost; - const type = isMouse ? 'mouse' : 'touch'; - return boost[type]; - } - function allowedForce(force, targetChanged) { - const next = index.add(mathSign(force) * -1); - const baseForce = scrollTarget.byDistance(force, !dragFree).distance; - if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce; - if (skipSnaps && targetChanged) return baseForce * 0.5; - return scrollTarget.byIndex(next.get(), 0).distance; - } - function down(evt) { - const isMouseEvt = isMouseEvent(evt, ownerWindow); - isMouse = isMouseEvt; - preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving; - isMoving = deltaAbs(target.get(), location.get()) >= 2; - if (isMouseEvt && evt.button !== 0) return; - if (isFocusNode(evt.target)) return; - pointerIsDown = true; - dragTracker.pointerDown(evt); - scrollBody.useFriction(0).useDuration(0); - target.set(location); - addDragEvents(); - startScroll = dragTracker.readPoint(evt); - startCross = dragTracker.readPoint(evt, crossAxis); - eventHandler.emit('pointerDown'); - } - function move(evt) { - const isTouchEvt = !isMouseEvent(evt, ownerWindow); - if (isTouchEvt && evt.touches.length >= 2) return up(evt); - const lastScroll = dragTracker.readPoint(evt); - const lastCross = dragTracker.readPoint(evt, crossAxis); - const diffScroll = deltaAbs(lastScroll, startScroll); - const diffCross = deltaAbs(lastCross, startCross); - if (!preventScroll && !isMouse) { - if (!evt.cancelable) return up(evt); - preventScroll = diffScroll > diffCross; - if (!preventScroll) return up(evt); - } - const diff = dragTracker.pointerMove(evt); - if (diffScroll > dragThreshold) preventClick = true; - scrollBody.useFriction(0.3).useDuration(0.75); - animation.start(); - target.add(direction(diff)); - evt.preventDefault(); - } - function up(evt) { - const currentLocation = scrollTarget.byDistance(0, false); - const targetChanged = currentLocation.index !== index.get(); - const rawForce = dragTracker.pointerUp(evt) * forceBoost(); - const force = allowedForce(direction(rawForce), targetChanged); - const forceFactor = factorAbs(rawForce, force); - const speed = baseSpeed - 10 * forceFactor; - const friction = baseFriction + forceFactor / 50; - preventScroll = false; - pointerIsDown = false; - dragEvents.clear(); - scrollBody.useDuration(speed).useFriction(friction); - scrollTo.distance(force, !dragFree); - isMouse = false; - eventHandler.emit('pointerUp'); - } - function click(evt) { - if (preventClick) { - evt.stopPropagation(); - evt.preventDefault(); - preventClick = false; - } - } - function pointerDown() { - return pointerIsDown; - } - const self = { - init, - destroy, - pointerDown - }; - return self; -} - -function DragTracker(axis, ownerWindow) { - const logInterval = 170; - let startEvent; - let lastEvent; - function readTime(evt) { - return evt.timeStamp; - } - function readPoint(evt, evtAxis) { - const property = evtAxis || axis.scroll; - const coord = `client${property === 'x' ? 'X' : 'Y'}`; - return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]; - } - function pointerDown(evt) { - startEvent = evt; - lastEvent = evt; - return readPoint(evt); - } - function pointerMove(evt) { - const diff = readPoint(evt) - readPoint(lastEvent); - const expired = readTime(evt) - readTime(startEvent) > logInterval; - lastEvent = evt; - if (expired) startEvent = evt; - return diff; - } - function pointerUp(evt) { - if (!startEvent || !lastEvent) return 0; - const diffDrag = readPoint(lastEvent) - readPoint(startEvent); - const diffTime = readTime(evt) - readTime(startEvent); - const expired = readTime(evt) - readTime(lastEvent) > logInterval; - const force = diffDrag / diffTime; - const isFlick = diffTime && !expired && mathAbs(force) > 0.1; - return isFlick ? force : 0; - } - const self = { - pointerDown, - pointerMove, - pointerUp, - readPoint - }; - return self; -} - -function NodeRects() { - function measure(node) { - const { - offsetTop, - offsetLeft, - offsetWidth, - offsetHeight - } = node; - const offset = { - top: offsetTop, - right: offsetLeft + offsetWidth, - bottom: offsetTop + offsetHeight, - left: offsetLeft, - width: offsetWidth, - height: offsetHeight - }; - return offset; - } - const self = { - measure - }; - return self; -} - -function PercentOfView(viewSize) { - function measure(n) { - return viewSize * (n / 100); - } - const self = { - measure - }; - return self; -} - -function ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) { - const observeNodes = [container].concat(slides); - let resizeObserver; - let containerSize; - let slideSizes = []; - let destroyed = false; - function readSize(node) { - return axis.measureSize(nodeRects.measure(node)); - } - function init(emblaApi) { - if (!watchResize) return; - containerSize = readSize(container); - slideSizes = slides.map(readSize); - function defaultCallback(entries) { - for (const entry of entries) { - if (destroyed) return; - const isContainer = entry.target === container; - const slideIndex = slides.indexOf(entry.target); - const lastSize = isContainer ? containerSize : slideSizes[slideIndex]; - const newSize = readSize(isContainer ? container : slides[slideIndex]); - const diffSize = mathAbs(newSize - lastSize); - if (diffSize >= 0.5) { - emblaApi.reInit(); - eventHandler.emit('resize'); - break; - } - } - } - resizeObserver = new ResizeObserver(entries => { - if (isBoolean(watchResize) || watchResize(emblaApi, entries)) { - defaultCallback(entries); - } - }); - ownerWindow.requestAnimationFrame(() => { - observeNodes.forEach(node => resizeObserver.observe(node)); - }); - } - function destroy() { - destroyed = true; - if (resizeObserver) resizeObserver.disconnect(); - } - const self = { - init, - destroy - }; - return self; -} - -function ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) { - let scrollVelocity = 0; - let scrollDirection = 0; - let scrollDuration = baseDuration; - let scrollFriction = baseFriction; - let rawLocation = location.get(); - let rawLocationPrevious = 0; - function seek() { - const displacement = target.get() - location.get(); - const isInstant = !scrollDuration; - let scrollDistance = 0; - if (isInstant) { - scrollVelocity = 0; - previousLocation.set(target); - location.set(target); - scrollDistance = displacement; - } else { - previousLocation.set(location); - scrollVelocity += displacement / scrollDuration; - scrollVelocity *= scrollFriction; - rawLocation += scrollVelocity; - location.add(scrollVelocity); - scrollDistance = rawLocation - rawLocationPrevious; - } - scrollDirection = mathSign(scrollDistance); - rawLocationPrevious = rawLocation; - return self; - } - function settled() { - const diff = target.get() - offsetLocation.get(); - return mathAbs(diff) < 0.001; - } - function duration() { - return scrollDuration; - } - function direction() { - return scrollDirection; - } - function velocity() { - return scrollVelocity; - } - function useBaseDuration() { - return useDuration(baseDuration); - } - function useBaseFriction() { - return useFriction(baseFriction); - } - function useDuration(n) { - scrollDuration = n; - return self; - } - function useFriction(n) { - scrollFriction = n; - return self; - } - const self = { - direction, - duration, - velocity, - seek, - settled, - useBaseFriction, - useBaseDuration, - useFriction, - useDuration - }; - return self; -} - -function ScrollBounds(limit, location, target, scrollBody, percentOfView) { - const pullBackThreshold = percentOfView.measure(10); - const edgeOffsetTolerance = percentOfView.measure(50); - const frictionLimit = Limit(0.1, 0.99); - let disabled = false; - function shouldConstrain() { - if (disabled) return false; - if (!limit.reachedAny(target.get())) return false; - if (!limit.reachedAny(location.get())) return false; - return true; - } - function constrain(pointerDown) { - if (!shouldConstrain()) return; - const edge = limit.reachedMin(location.get()) ? 'min' : 'max'; - const diffToEdge = mathAbs(limit[edge] - location.get()); - const diffToTarget = target.get() - location.get(); - const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance); - target.subtract(diffToTarget * friction); - if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) { - target.set(limit.constrain(target.get())); - scrollBody.useDuration(25).useBaseFriction(); - } - } - function toggleActive(active) { - disabled = !active; - } - const self = { - shouldConstrain, - constrain, - toggleActive - }; - return self; -} - -function ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) { - const scrollBounds = Limit(-contentSize + viewSize, 0); - const snapsBounded = measureBounded(); - const scrollContainLimit = findScrollContainLimit(); - const snapsContained = measureContained(); - function usePixelTolerance(bound, snap) { - return deltaAbs(bound, snap) <= 1; - } - function findScrollContainLimit() { - const startSnap = snapsBounded[0]; - const endSnap = arrayLast(snapsBounded); - const min = snapsBounded.lastIndexOf(startSnap); - const max = snapsBounded.indexOf(endSnap) + 1; - return Limit(min, max); - } - function measureBounded() { - return snapsAligned.map((snapAligned, index) => { - const { - min, - max - } = scrollBounds; - const snap = scrollBounds.constrain(snapAligned); - const isFirst = !index; - const isLast = arrayIsLastIndex(snapsAligned, index); - if (isFirst) return max; - if (isLast) return min; - if (usePixelTolerance(min, snap)) return min; - if (usePixelTolerance(max, snap)) return max; - return snap; - }).map(scrollBound => parseFloat(scrollBound.toFixed(3))); - } - function measureContained() { - if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]; - if (containScroll === 'keepSnaps') return snapsBounded; - const { - min, - max - } = scrollContainLimit; - return snapsBounded.slice(min, max); - } - const self = { - snapsContained, - scrollContainLimit - }; - return self; -} - -function ScrollLimit(contentSize, scrollSnaps, loop) { - const max = scrollSnaps[0]; - const min = loop ? max - contentSize : arrayLast(scrollSnaps); - const limit = Limit(min, max); - const self = { - limit - }; - return self; -} - -function ScrollLooper(contentSize, limit, location, vectors) { - const jointSafety = 0.1; - const min = limit.min + jointSafety; - const max = limit.max + jointSafety; - const { - reachedMin, - reachedMax - } = Limit(min, max); - function shouldLoop(direction) { - if (direction === 1) return reachedMax(location.get()); - if (direction === -1) return reachedMin(location.get()); - return false; - } - function loop(direction) { - if (!shouldLoop(direction)) return; - const loopDistance = contentSize * (direction * -1); - vectors.forEach(v => v.add(loopDistance)); - } - const self = { - loop - }; - return self; -} - -function ScrollProgress(limit) { - const { - max, - length - } = limit; - function get(n) { - const currentLocation = n - max; - return length ? currentLocation / -length : 0; - } - const self = { - get - }; - return self; -} - -function ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) { - const { - startEdge, - endEdge - } = axis; - const { - groupSlides - } = slidesToScroll; - const alignments = measureSizes().map(alignment.measure); - const snaps = measureUnaligned(); - const snapsAligned = measureAligned(); - function measureSizes() { - return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs); - } - function measureUnaligned() { - return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap)); - } - function measureAligned() { - return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]); - } - const self = { - snaps, - snapsAligned - }; - return self; -} - -function SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) { - const { - groupSlides - } = slidesToScroll; - const { - min, - max - } = scrollContainLimit; - const slideRegistry = createSlideRegistry(); - function createSlideRegistry() { - const groupedSlideIndexes = groupSlides(slideIndexes); - const doNotContain = !containSnaps || containScroll === 'keepSnaps'; - if (scrollSnaps.length === 1) return [slideIndexes]; - if (doNotContain) return groupedSlideIndexes; - return groupedSlideIndexes.slice(min, max).map((group, index, groups) => { - const isFirst = !index; - const isLast = arrayIsLastIndex(groups, index); - if (isFirst) { - const range = arrayLast(groups[0]) + 1; - return arrayFromNumber(range); - } - if (isLast) { - const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1; - return arrayFromNumber(range, arrayLast(groups)[0]); - } - return group; - }); - } - const self = { - slideRegistry - }; - return self; -} - -function ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) { - const { - reachedAny, - removeOffset, - constrain - } = limit; - function minDistance(distances) { - return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]; - } - function findTargetSnap(target) { - const distance = loop ? removeOffset(target) : constrain(target); - const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({ - diff: shortcut(snap - distance, 0), - index - })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff)); - const { - index - } = ascDiffsToSnaps[0]; - return { - index, - distance - }; - } - function shortcut(target, direction) { - const targets = [target, target + contentSize, target - contentSize]; - if (!loop) return target; - if (!direction) return minDistance(targets); - const matchingTargets = targets.filter(t => mathSign(t) === direction); - if (matchingTargets.length) return minDistance(matchingTargets); - return arrayLast(targets) - contentSize; - } - function byIndex(index, direction) { - const diffToSnap = scrollSnaps[index] - targetVector.get(); - const distance = shortcut(diffToSnap, direction); - return { - index, - distance - }; - } - function byDistance(distance, snap) { - const target = targetVector.get() + distance; - const { - index, - distance: targetSnapDistance - } = findTargetSnap(target); - const reachedBound = !loop && reachedAny(target); - if (!snap || reachedBound) return { - index, - distance - }; - const diffToSnap = scrollSnaps[index] - targetSnapDistance; - const snapDistance = distance + shortcut(diffToSnap, 0); - return { - index, - distance: snapDistance - }; - } - const self = { - byDistance, - byIndex, - shortcut - }; - return self; -} - -function ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) { - function scrollTo(target) { - const distanceDiff = target.distance; - const indexDiff = target.index !== indexCurrent.get(); - targetVector.add(distanceDiff); - if (distanceDiff) { - if (scrollBody.duration()) { - animation.start(); - } else { - animation.update(); - animation.render(1); - animation.update(); - } - } - if (indexDiff) { - indexPrevious.set(indexCurrent.get()); - indexCurrent.set(target.index); - eventHandler.emit('select'); - } - } - function distance(n, snap) { - const target = scrollTarget.byDistance(n, snap); - scrollTo(target); - } - function index(n, direction) { - const targetIndex = indexCurrent.clone().set(n); - const target = scrollTarget.byIndex(targetIndex.get(), direction); - scrollTo(target); - } - const self = { - distance, - index - }; - return self; -} - -function SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) { - const focusListenerOptions = { - passive: true, - capture: true - }; - let lastTabPressTime = 0; - function init(emblaApi) { - if (!watchFocus) return; - function defaultCallback(index) { - const nowTime = new Date().getTime(); - const diffTime = nowTime - lastTabPressTime; - if (diffTime > 10) return; - eventHandler.emit('slideFocusStart'); - root.scrollLeft = 0; - const group = slideRegistry.findIndex(group => group.includes(index)); - if (!isNumber(group)) return; - scrollBody.useDuration(0); - scrollTo.index(group, 0); - eventHandler.emit('slideFocus'); - } - eventStore.add(document, 'keydown', registerTabPress, false); - slides.forEach((slide, slideIndex) => { - eventStore.add(slide, 'focus', evt => { - if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) { - defaultCallback(slideIndex); - } - }, focusListenerOptions); - }); - } - function registerTabPress(event) { - if (event.code === 'Tab') lastTabPressTime = new Date().getTime(); - } - const self = { - init - }; - return self; -} - -function Vector1D(initialValue) { - let value = initialValue; - function get() { - return value; - } - function set(n) { - value = normalizeInput(n); - } - function add(n) { - value += normalizeInput(n); - } - function subtract(n) { - value -= normalizeInput(n); - } - function normalizeInput(n) { - return isNumber(n) ? n : n.get(); - } - const self = { - get, - set, - add, - subtract - }; - return self; -} - -function Translate(axis, container) { - const translate = axis.scroll === 'x' ? x : y; - const containerStyle = container.style; - let previousTarget = null; - let disabled = false; - function x(n) { - return `translate3d(${n}px,0px,0px)`; - } - function y(n) { - return `translate3d(0px,${n}px,0px)`; - } - function to(target) { - if (disabled) return; - const newTarget = roundToTwoDecimals(axis.direction(target)); - if (newTarget === previousTarget) return; - containerStyle.transform = translate(newTarget); - previousTarget = newTarget; - } - function toggleActive(active) { - disabled = !active; - } - function clear() { - if (disabled) return; - containerStyle.transform = ''; - if (!container.getAttribute('style')) container.removeAttribute('style'); - } - const self = { - clear, - to, - toggleActive - }; - return self; -} - -function SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) { - const roundingSafety = 0.5; - const ascItems = arrayKeys(slideSizesWithGaps); - const descItems = arrayKeys(slideSizesWithGaps).reverse(); - const loopPoints = startPoints().concat(endPoints()); - function removeSlideSizes(indexes, from) { - return indexes.reduce((a, i) => { - return a - slideSizesWithGaps[i]; - }, from); - } - function slidesInGap(indexes, gap) { - return indexes.reduce((a, i) => { - const remainingGap = removeSlideSizes(a, gap); - return remainingGap > 0 ? a.concat([i]) : a; - }, []); - } - function findSlideBounds(offset) { - return snaps.map((snap, index) => ({ - start: snap - slideSizes[index] + roundingSafety + offset, - end: snap + viewSize - roundingSafety + offset - })); - } - function findLoopPoints(indexes, offset, isEndEdge) { - const slideBounds = findSlideBounds(offset); - return indexes.map(index => { - const initial = isEndEdge ? 0 : -contentSize; - const altered = isEndEdge ? contentSize : 0; - const boundEdge = isEndEdge ? 'end' : 'start'; - const loopPoint = slideBounds[index][boundEdge]; - return { - index, - loopPoint, - slideLocation: Vector1D(-1), - translate: Translate(axis, slides[index]), - target: () => location.get() > loopPoint ? initial : altered - }; - }); - } - function startPoints() { - const gap = scrollSnaps[0]; - const indexes = slidesInGap(descItems, gap); - return findLoopPoints(indexes, contentSize, false); - } - function endPoints() { - const gap = viewSize - scrollSnaps[0] - 1; - const indexes = slidesInGap(ascItems, gap); - return findLoopPoints(indexes, -contentSize, true); - } - function canLoop() { - return loopPoints.every(({ - index - }) => { - const otherIndexes = ascItems.filter(i => i !== index); - return removeSlideSizes(otherIndexes, viewSize) <= 0.1; - }); - } - function loop() { - loopPoints.forEach(loopPoint => { - const { - target, - translate, - slideLocation - } = loopPoint; - const shiftLocation = target(); - if (shiftLocation === slideLocation.get()) return; - translate.to(shiftLocation); - slideLocation.set(shiftLocation); - }); - } - function clear() { - loopPoints.forEach(loopPoint => loopPoint.translate.clear()); - } - const self = { - canLoop, - clear, - loop, - loopPoints - }; - return self; -} - -function SlidesHandler(container, eventHandler, watchSlides) { - let mutationObserver; - let destroyed = false; - function init(emblaApi) { - if (!watchSlides) return; - function defaultCallback(mutations) { - for (const mutation of mutations) { - if (mutation.type === 'childList') { - emblaApi.reInit(); - eventHandler.emit('slidesChanged'); - break; - } - } - } - mutationObserver = new MutationObserver(mutations => { - if (destroyed) return; - if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) { - defaultCallback(mutations); - } - }); - mutationObserver.observe(container, { - childList: true - }); - } - function destroy() { - if (mutationObserver) mutationObserver.disconnect(); - destroyed = true; - } - const self = { - init, - destroy - }; - return self; -} - -function SlidesInView(container, slides, eventHandler, threshold) { - const intersectionEntryMap = {}; - let inViewCache = null; - let notInViewCache = null; - let intersectionObserver; - let destroyed = false; - function init() { - intersectionObserver = new IntersectionObserver(entries => { - if (destroyed) return; - entries.forEach(entry => { - const index = slides.indexOf(entry.target); - intersectionEntryMap[index] = entry; - }); - inViewCache = null; - notInViewCache = null; - eventHandler.emit('slidesInView'); - }, { - root: container.parentElement, - threshold - }); - slides.forEach(slide => intersectionObserver.observe(slide)); - } - function destroy() { - if (intersectionObserver) intersectionObserver.disconnect(); - destroyed = true; - } - function createInViewList(inView) { - return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => { - const index = parseInt(slideIndex); - const { - isIntersecting - } = intersectionEntryMap[index]; - const inViewMatch = inView && isIntersecting; - const notInViewMatch = !inView && !isIntersecting; - if (inViewMatch || notInViewMatch) list.push(index); - return list; - }, []); - } - function get(inView = true) { - if (inView && inViewCache) return inViewCache; - if (!inView && notInViewCache) return notInViewCache; - const slideIndexes = createInViewList(inView); - if (inView) inViewCache = slideIndexes; - if (!inView) notInViewCache = slideIndexes; - return slideIndexes; - } - const self = { - init, - destroy, - get - }; - return self; -} - -function SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) { - const { - measureSize, - startEdge, - endEdge - } = axis; - const withEdgeGap = slideRects[0] && readEdgeGap; - const startGap = measureStartGap(); - const endGap = measureEndGap(); - const slideSizes = slideRects.map(measureSize); - const slideSizesWithGaps = measureWithGaps(); - function measureStartGap() { - if (!withEdgeGap) return 0; - const slideRect = slideRects[0]; - return mathAbs(containerRect[startEdge] - slideRect[startEdge]); - } - function measureEndGap() { - if (!withEdgeGap) return 0; - const style = ownerWindow.getComputedStyle(arrayLast(slides)); - return parseFloat(style.getPropertyValue(`margin-${endEdge}`)); - } - function measureWithGaps() { - return slideRects.map((rect, index, rects) => { - const isFirst = !index; - const isLast = arrayIsLastIndex(rects, index); - if (isFirst) return slideSizes[index] + startGap; - if (isLast) return slideSizes[index] + endGap; - return rects[index + 1][startEdge] - rect[startEdge]; - }).map(mathAbs); - } - const self = { - slideSizes, - slideSizesWithGaps, - startGap, - endGap - }; - return self; -} - -function SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) { - const { - startEdge, - endEdge, - direction - } = axis; - const groupByNumber = isNumber(slidesToScroll); - function byNumber(array, groupSize) { - return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize)); - } - function bySize(array) { - if (!array.length) return []; - return arrayKeys(array).reduce((groups, rectB, index) => { - const rectA = arrayLast(groups) || 0; - const isFirst = rectA === 0; - const isLast = rectB === arrayLastIndex(array); - const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]; - const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]; - const gapA = !loop && isFirst ? direction(startGap) : 0; - const gapB = !loop && isLast ? direction(endGap) : 0; - const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA)); - if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB); - if (isLast) groups.push(array.length); - return groups; - }, []).map((currentSize, index, groups) => { - const previousSize = Math.max(groups[index - 1] || 0); - return array.slice(previousSize, currentSize); - }); - } - function groupSlides(array) { - return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array); - } - const self = { - groupSlides - }; - return self; -} - -function Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) { - // Options - const { - align, - axis: scrollAxis, - direction, - startIndex, - loop, - duration, - dragFree, - dragThreshold, - inViewThreshold, - slidesToScroll: groupSlides, - skipSnaps, - containScroll, - watchResize, - watchSlides, - watchDrag, - watchFocus - } = options; - // Measurements - const pixelTolerance = 2; - const nodeRects = NodeRects(); - const containerRect = nodeRects.measure(container); - const slideRects = slides.map(nodeRects.measure); - const axis = Axis(scrollAxis, direction); - const viewSize = axis.measureSize(containerRect); - const percentOfView = PercentOfView(viewSize); - const alignment = Alignment(align, viewSize); - const containSnaps = !loop && !!containScroll; - const readEdgeGap = loop || !!containScroll; - const { - slideSizes, - slideSizesWithGaps, - startGap, - endGap - } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow); - const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance); - const { - snaps, - snapsAligned - } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll); - const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps); - const { - snapsContained, - scrollContainLimit - } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance); - const scrollSnaps = containSnaps ? snapsContained : snapsAligned; - const { - limit - } = ScrollLimit(contentSize, scrollSnaps, loop); - // Indexes - const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop); - const indexPrevious = index.clone(); - const slideIndexes = arrayKeys(slides); - // Animation - const update = ({ - dragHandler, - scrollBody, - scrollBounds, - options: { - loop - } - }) => { - if (!loop) scrollBounds.constrain(dragHandler.pointerDown()); - scrollBody.seek(); - }; - const render = ({ - scrollBody, - translate, - location, - offsetLocation, - previousLocation, - scrollLooper, - slideLooper, - dragHandler, - animation, - eventHandler, - scrollBounds, - options: { - loop - } - }, alpha) => { - const shouldSettle = scrollBody.settled(); - const withinBounds = !scrollBounds.shouldConstrain(); - const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds; - const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown(); - if (hasSettledAndIdle) animation.stop(); - const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha); - offsetLocation.set(interpolatedLocation); - if (loop) { - scrollLooper.loop(scrollBody.direction()); - slideLooper.loop(); - } - translate.to(offsetLocation.get()); - if (hasSettledAndIdle) eventHandler.emit('settle'); - if (!hasSettled) eventHandler.emit('scroll'); - }; - const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha)); - // Shared - const friction = 0.68; - const startLocation = scrollSnaps[index.get()]; - const location = Vector1D(startLocation); - const previousLocation = Vector1D(startLocation); - const offsetLocation = Vector1D(startLocation); - const target = Vector1D(startLocation); - const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction); - const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target); - const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler); - const scrollProgress = ScrollProgress(limit); - const eventStore = EventStore(); - const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold); - const { - slideRegistry - } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes); - const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus); - // Engine - const engine = { - ownerDocument, - ownerWindow, - eventHandler, - containerRect, - slideRects, - animation, - axis, - dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag), - eventStore, - percentOfView, - index, - indexPrevious, - limit, - location, - offsetLocation, - previousLocation, - options, - resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects), - scrollBody, - scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView), - scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]), - scrollProgress, - scrollSnapList: scrollSnaps.map(scrollProgress.get), - scrollSnaps, - scrollTarget, - scrollTo, - slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides), - slideFocus, - slidesHandler: SlidesHandler(container, eventHandler, watchSlides), - slidesInView, - slideIndexes, - slideRegistry, - slidesToScroll, - target, - translate: Translate(axis, container) - }; - return engine; -} - -function EventHandler() { - let listeners = {}; - let api; - function init(emblaApi) { - api = emblaApi; - } - function getListeners(evt) { - return listeners[evt] || []; - } - function emit(evt) { - getListeners(evt).forEach(e => e(api, evt)); - return self; - } - function on(evt, cb) { - listeners[evt] = getListeners(evt).concat([cb]); - return self; - } - function off(evt, cb) { - listeners[evt] = getListeners(evt).filter(e => e !== cb); - return self; - } - function clear() { - listeners = {}; - } - const self = { - init, - emit, - off, - on, - clear - }; - return self; -} - -const defaultOptions = { - align: 'center', - axis: 'x', - container: null, - slides: null, - containScroll: 'trimSnaps', - direction: 'ltr', - slidesToScroll: 1, - inViewThreshold: 0, - breakpoints: {}, - dragFree: false, - dragThreshold: 10, - loop: false, - skipSnaps: false, - duration: 25, - startIndex: 0, - active: true, - watchDrag: true, - watchResize: true, - watchSlides: true, - watchFocus: true -}; - -function OptionsHandler(ownerWindow) { - function mergeOptions(optionsA, optionsB) { - return objectsMergeDeep(optionsA, optionsB || {}); - } - function optionsAtMedia(options) { - const optionsAtMedia = options.breakpoints || {}; - const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {}); - return mergeOptions(options, matchedMediaOptions); - } - function optionsMediaQueries(optionsList) { - return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia); - } - const self = { - mergeOptions, - optionsAtMedia, - optionsMediaQueries - }; - return self; -} - -function PluginsHandler(optionsHandler) { - let activePlugins = []; - function init(emblaApi, plugins) { - activePlugins = plugins.filter(({ - options - }) => optionsHandler.optionsAtMedia(options).active !== false); - activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler)); - return plugins.reduce((map, plugin) => Object.assign(map, { - [plugin.name]: plugin - }), {}); - } - function destroy() { - activePlugins = activePlugins.filter(plugin => plugin.destroy()); - } - const self = { - init, - destroy - }; - return self; -} - -function EmblaCarousel(root, userOptions, userPlugins) { - const ownerDocument = root.ownerDocument; - const ownerWindow = ownerDocument.defaultView; - const optionsHandler = OptionsHandler(ownerWindow); - const pluginsHandler = PluginsHandler(optionsHandler); - const mediaHandlers = EventStore(); - const eventHandler = EventHandler(); - const { - mergeOptions, - optionsAtMedia, - optionsMediaQueries - } = optionsHandler; - const { - on, - off, - emit - } = eventHandler; - const reInit = reActivate; - let destroyed = false; - let engine; - let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions); - let options = mergeOptions(optionsBase); - let pluginList = []; - let pluginApis; - let container; - let slides; - function storeElements() { - const { - container: userContainer, - slides: userSlides - } = options; - const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer; - container = customContainer || root.children[0]; - const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides; - slides = [].slice.call(customSlides || container.children); - } - function createEngine(options) { - const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler); - if (options.loop && !engine.slideLooper.canLoop()) { - const optionsWithoutLoop = Object.assign({}, options, { - loop: false - }); - return createEngine(optionsWithoutLoop); - } - return engine; - } - function activate(withOptions, withPlugins) { - if (destroyed) return; - optionsBase = mergeOptions(optionsBase, withOptions); - options = optionsAtMedia(optionsBase); - pluginList = withPlugins || pluginList; - storeElements(); - engine = createEngine(options); - optionsMediaQueries([optionsBase, ...pluginList.map(({ - options - }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate)); - if (!options.active) return; - engine.translate.to(engine.location.get()); - engine.animation.init(); - engine.slidesInView.init(); - engine.slideFocus.init(self); - engine.eventHandler.init(self); - engine.resizeHandler.init(self); - engine.slidesHandler.init(self); - if (engine.options.loop) engine.slideLooper.loop(); - if (container.offsetParent && slides.length) engine.dragHandler.init(self); - pluginApis = pluginsHandler.init(self, pluginList); - } - function reActivate(withOptions, withPlugins) { - const startIndex = selectedScrollSnap(); - deActivate(); - activate(mergeOptions({ - startIndex - }, withOptions), withPlugins); - eventHandler.emit('reInit'); - } - function deActivate() { - engine.dragHandler.destroy(); - engine.eventStore.clear(); - engine.translate.clear(); - engine.slideLooper.clear(); - engine.resizeHandler.destroy(); - engine.slidesHandler.destroy(); - engine.slidesInView.destroy(); - engine.animation.destroy(); - pluginsHandler.destroy(); - mediaHandlers.clear(); - } - function destroy() { - if (destroyed) return; - destroyed = true; - mediaHandlers.clear(); - deActivate(); - eventHandler.emit('destroy'); - eventHandler.clear(); - } - function scrollTo(index, jump, direction) { - if (!options.active || destroyed) return; - engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration); - engine.scrollTo.index(index, direction || 0); - } - function scrollNext(jump) { - const next = engine.index.add(1).get(); - scrollTo(next, jump, -1); - } - function scrollPrev(jump) { - const prev = engine.index.add(-1).get(); - scrollTo(prev, jump, 1); - } - function canScrollNext() { - const next = engine.index.add(1).get(); - return next !== selectedScrollSnap(); - } - function canScrollPrev() { - const prev = engine.index.add(-1).get(); - return prev !== selectedScrollSnap(); - } - function scrollSnapList() { - return engine.scrollSnapList; - } - function scrollProgress() { - return engine.scrollProgress.get(engine.offsetLocation.get()); - } - function selectedScrollSnap() { - return engine.index.get(); - } - function previousScrollSnap() { - return engine.indexPrevious.get(); - } - function slidesInView() { - return engine.slidesInView.get(); - } - function slidesNotInView() { - return engine.slidesInView.get(false); - } - function plugins() { - return pluginApis; - } - function internalEngine() { - return engine; - } - function rootNode() { - return root; - } - function containerNode() { - return container; - } - function slideNodes() { - return slides; - } - const self = { - canScrollNext, - canScrollPrev, - containerNode, - internalEngine, - destroy, - off, - on, - emit, - plugins, - previousScrollSnap, - reInit, - rootNode, - scrollNext, - scrollPrev, - scrollProgress, - scrollSnapList, - scrollTo, - selectedScrollSnap, - slideNodes, - slidesInView, - slidesNotInView - }; - activate(userOptions, userPlugins); - setTimeout(() => eventHandler.emit('init'), 0); - return self; -} -EmblaCarousel.globalOptions = undefined; - -module.exports = EmblaCarousel; -//# sourceMappingURL=embla-carousel.cjs.js.map diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map deleted file mode 100644 index 9e0ec95bce..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/embla-carousel.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel.cjs.js","sources":["../src/components/utils.ts","../src/components/Alignment.ts","../src/components/EventStore.ts","../src/components/Animations.ts","../src/components/Axis.ts","../src/components/Limit.ts","../src/components/Counter.ts","../src/components/DragHandler.ts","../src/components/DragTracker.ts","../src/components/NodeRects.ts","../src/components/PercentOfView.ts","../src/components/ResizeHandler.ts","../src/components/ScrollBody.ts","../src/components/ScrollBounds.ts","../src/components/ScrollContain.ts","../src/components/ScrollLimit.ts","../src/components/ScrollLooper.ts","../src/components/ScrollProgress.ts","../src/components/ScrollSnaps.ts","../src/components/SlideRegistry.ts","../src/components/ScrollTarget.ts","../src/components/ScrollTo.ts","../src/components/SlideFocus.ts","../src/components/Vector1d.ts","../src/components/Translate.ts","../src/components/SlideLooper.ts","../src/components/SlidesHandler.ts","../src/components/SlidesInView.ts","../src/components/SlideSizes.ts","../src/components/SlidesToScroll.ts","../src/components/Engine.ts","../src/components/EventHandler.ts","../src/components/Options.ts","../src/components/OptionsHandler.ts","../src/components/PluginsHandler.ts","../src/components/EmblaCarousel.ts"],"sourcesContent":["import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record,\n objectB: Record\n): Record {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n init: () => void\n destroy: () => void\n start: () => void\n stop: () => void\n update: () => void\n render: (alpha: number) => void\n}\n\nexport function Animations(\n ownerDocument: Document,\n ownerWindow: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const documentVisibleHandler = EventStore()\n const fixedTimeStep = 1000 / 60\n\n let lastTimeStamp: number | null = null\n let accumulatedTime = 0\n let animationId = 0\n\n function init(): void {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset()\n })\n }\n\n function destroy(): void {\n stop()\n documentVisibleHandler.clear()\n }\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!animationId) return\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp\n update()\n update()\n }\n\n const timeElapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n accumulatedTime += timeElapsed\n\n while (accumulatedTime >= fixedTimeStep) {\n update()\n accumulatedTime -= fixedTimeStep\n }\n\n const alpha = accumulatedTime / fixedTimeStep\n render(alpha)\n\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n }\n\n function start(): void {\n if (animationId) return\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(): void {\n ownerWindow.cancelAnimationFrame(animationId)\n lastTimeStamp = null\n accumulatedTime = 0\n animationId = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n accumulatedTime = 0\n }\n\n const self: AnimationsType = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n }\n return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n direction: (n: number) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n contentDirection: AxisDirectionOptionType\n): AxisType {\n const isRightToLeft = contentDirection === 'rtl'\n const isVertical = axis === 'y'\n const scroll = isVertical ? 'y' : 'x'\n const cross = isVertical ? 'x' : 'y'\n const sign = !isVertical && isRightToLeft ? -1 : 1\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { height, width } = nodeRect\n return isVertical ? height : width\n }\n\n function getStartEdge(): AxisEdgeType {\n if (isVertical) return 'top'\n return isRightToLeft ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (isVertical) return 'bottom'\n return isRightToLeft ? 'left' : 'right'\n }\n\n function direction(n: number): number {\n return n * sign\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n }\n return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationsType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis, direction } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(0.75)\n animation.start()\n target.add(direction(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n preventClick = false\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n destroy,\n pointerDown\n }\n return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n","export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n","export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n const observeNodes = [container].concat(slides)\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n if (destroyed) return\n\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n emblaApi.reInit()\n eventHandler.emit('resize')\n\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach((node) => resizeObserver.observe(node))\n })\n }\n\n function destroy(): void {\n destroyed = true\n if (resizeObserver) resizeObserver.disconnect()\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let scrollVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const displacement = target.get() - location.get()\n const isInstant = !scrollDuration\n let scrollDistance = 0\n\n if (isInstant) {\n scrollVelocity = 0\n previousLocation.set(target)\n location.set(target)\n\n scrollDistance = displacement\n } else {\n previousLocation.set(location)\n\n scrollVelocity += displacement / scrollDuration\n scrollVelocity *= scrollFriction\n rawLocation += scrollVelocity\n location.add(scrollVelocity)\n\n scrollDistance = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(scrollDistance)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return scrollVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n shouldConstrain: () => boolean\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n shouldConstrain,\n constrain,\n toggleActive\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType,\n pixelTolerance: number\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function usePixelTolerance(bound: number, snap: number): boolean {\n return deltaAbs(bound, snap) <= 1\n }\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const { min, max } = scrollBounds\n const snap = scrollBounds.constrain(snapAligned)\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return max\n if (isLast) return min\n if (usePixelTolerance(min, snap)) return min\n if (usePixelTolerance(max, snap)) return max\n return snap\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n location: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(location.get())\n if (direction === -1) return reachedMin(location.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollSnaps: number[],\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n if (scrollSnaps.length === 1) return [slideIndexes]\n if (doNotContain) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return target\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationsType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start()\n } else {\n animation.update()\n animation.render(1)\n animation.update()\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType,\n eventHandler: EventHandlerType,\n watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n const focusListenerOptions = { passive: true, capture: true }\n let lastTabPressTime = 0\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchFocus) return\n\n function defaultCallback(index: number): void {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n eventHandler.emit('slideFocusStart')\n root.scrollLeft = 0\n\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n\n eventHandler.emit('slideFocus')\n }\n\n eventStore.add(document, 'keydown', registerTabPress, false)\n\n slides.forEach((slide, slideIndex) => {\n eventStore.add(\n slide,\n 'focus',\n (evt: FocusEvent) => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex)\n }\n },\n focusListenerOptions\n )\n })\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let previousTarget: number | null = null\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n\n const newTarget = roundToTwoDecimals(axis.direction(target))\n if (newTarget === previousTarget) return\n\n containerStyle.transform = translate(newTarget)\n previousTarget = newTarget\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n location: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => (location.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: (array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number,\n pixelTolerance: number\n): SlidesToScrollType {\n const { startEdge, endEdge, direction } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB, index) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction(startGap) : 0\n const gapB = !loop && isLast ? direction(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n","import { Alignment } from './Alignment'\nimport {\n Animations,\n AnimationsType,\n AnimationsUpdateType,\n AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n animation: AnimationsType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n previousLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options\n\n // Measurements\n const pixelTolerance = 2\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const axis = Axis(scrollAxis, direction)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap,\n pixelTolerance\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll,\n pixelTolerance\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationsUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationsRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: { loop }\n },\n alpha\n ) => {\n const shouldSettle = scrollBody.settled()\n const withinBounds = !scrollBounds.shouldConstrain()\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n if (hasSettledAndIdle) animation.stop()\n\n const interpolatedLocation =\n location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n offsetLocation.set(interpolatedLocation)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n\n if (hasSettledAndIdle) eventHandler.emit('settle')\n if (!hasSettled) eventHandler.emit('scroll')\n }\n\n const animation = Animations(\n ownerDocument,\n ownerWindow,\n () => update(engine),\n (alpha: number) => render(engine, alpha)\n )\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const previousLocation = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n previousLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollBody,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n containSnaps,\n containScroll,\n scrollSnaps,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore,\n eventHandler,\n watchFocus\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(\n axis,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n offsetLocation,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n previousLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n }\n\n return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n slideFocusStart: 'slideFocusStart'\n slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n let listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n function clear(): void {\n listeners = {}\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on,\n clear\n }\n return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf | null\n containScroll: ScrollContainOptionType\n direction: AxisDirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial>\n\nexport type OptionsHandlerType = {\n mergeOptions: (\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: (options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const eventHandler = EventHandler()\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = (customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = [].slice.call(customSlides || container.children)\n }\n\n function createEngine(options: OptionsType): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.animation.init()\n engine.slidesInView.init()\n engine.slideFocus.init(self)\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n engine.animation.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n eventHandler.clear()\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody\n .useBaseFriction()\n .useDuration(jump === true ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.offsetLocation.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\ndeclare namespace EmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n"],"names":["isNumber","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","node","type","handler","options","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","isTouchEvt","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","currentLocation","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","logInterval","startEvent","lastEvent","readTime","evtAxis","property","coord","expired","diffDrag","diffTime","isFlick","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","offset","top","right","bottom","left","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","concat","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","diffSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","roundingSafety","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","remainingGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","every","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","inViewMatch","notInViewMatch","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts deleted file mode 100644 index aab7131a9f..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { EmblaOptionsType } from './components/Options'; -export { EmblaEventType } from './components/EventHandler'; -export { EmblaPluginType } from './components/Plugins'; -export { EmblaCarouselType } from './components/EmblaCarousel'; -export { default } from './components/EmblaCarousel'; -export { CreatePluginType, EmblaPluginsType } from './components/Plugins'; -export { CreateOptionsType } from './components/Options'; -export { OptionsHandlerType } from './components/OptionsHandler'; -export { EmblaEventListType } from './components/EventHandler'; -export { EngineType } from './components/Engine'; -export { ScrollBodyType } from './components/ScrollBody'; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json deleted file mode 100644 index 91c98da6cb..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/cjs/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "embla-carousel", - "version": "8.6.0", - "author": "David Jerleke", - "description": "A lightweight carousel library with fluid motion and great swipe precision", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "main": "embla-carousel.cjs.js", - "type": "commonjs" -} diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts deleted file mode 100644 index 72f1015b7b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Alignment.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type AlignmentOptionType = 'start' | 'center' | 'end' | ((viewSize: number, snapSize: number, index: number) => number); -export type AlignmentType = { - measure: (n: number, index: number) => number; -}; -export declare function Alignment(align: AlignmentOptionType, viewSize: number): AlignmentType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts deleted file mode 100644 index 693defa7e7..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Animations.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EngineType } from './Engine'; -import { WindowType } from './utils'; -export type AnimationsUpdateType = (engine: EngineType) => void; -export type AnimationsRenderType = (engine: EngineType, alpha: number) => void; -export type AnimationsType = { - init: () => void; - destroy: () => void; - start: () => void; - stop: () => void; - update: () => void; - render: (alpha: number) => void; -}; -export declare function Animations(ownerDocument: Document, ownerWindow: WindowType, update: () => void, render: (alpha: number) => void): AnimationsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts deleted file mode 100644 index a0735f7e04..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Axis.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NodeRectType } from './NodeRects'; -export type AxisOptionType = 'x' | 'y'; -export type AxisDirectionOptionType = 'ltr' | 'rtl'; -type AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'; -export type AxisType = { - scroll: AxisOptionType; - cross: AxisOptionType; - startEdge: AxisEdgeType; - endEdge: AxisEdgeType; - measureSize: (nodeRect: NodeRectType) => number; - direction: (n: number) => number; -}; -export declare function Axis(axis: AxisOptionType, contentDirection: AxisDirectionOptionType): AxisType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts deleted file mode 100644 index 964a47d838..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Counter.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type CounterType = { - get: () => number; - set: (n: number) => CounterType; - add: (n: number) => CounterType; - clone: () => CounterType; -}; -export declare function Counter(max: number, start: number, loop: boolean): CounterType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts deleted file mode 100644 index 0685db222c..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragHandler.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { AnimationsType } from './Animations'; -import { CounterType } from './Counter'; -import { DragTrackerType, PointerEventType } from './DragTracker'; -import { EventHandlerType } from './EventHandler'; -import { AxisType } from './Axis'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollTargetType } from './ScrollTarget'; -import { ScrollToType } from './ScrollTo'; -import { Vector1DType } from './Vector1d'; -import { PercentOfViewType } from './PercentOfView'; -import { WindowType } from './utils'; -type DragHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: PointerEventType) => boolean | void; -export type DragHandlerOptionType = boolean | DragHandlerCallbackType; -export type DragHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; - pointerDown: () => boolean; -}; -export declare function DragHandler(axis: AxisType, rootNode: HTMLElement, ownerDocument: Document, ownerWindow: WindowType, target: Vector1DType, dragTracker: DragTrackerType, location: Vector1DType, animation: AnimationsType, scrollTo: ScrollToType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, index: CounterType, eventHandler: EventHandlerType, percentOfView: PercentOfViewType, dragFree: boolean, dragThreshold: number, skipSnaps: boolean, baseFriction: number, watchDrag: DragHandlerOptionType): DragHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts deleted file mode 100644 index 0f4b4cb4a0..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/DragTracker.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AxisOptionType, AxisType } from './Axis'; -import { WindowType } from './utils'; -export type PointerEventType = TouchEvent | MouseEvent; -export type DragTrackerType = { - pointerDown: (evt: PointerEventType) => number; - pointerMove: (evt: PointerEventType) => number; - pointerUp: (evt: PointerEventType) => number; - readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number; -}; -export declare function DragTracker(axis: AxisType, ownerWindow: WindowType): DragTrackerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts deleted file mode 100644 index 5ad21c978a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EmblaCarousel.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { EngineType } from './Engine'; -import { EventHandlerType } from './EventHandler'; -import { EmblaOptionsType } from './Options'; -import { EmblaPluginsType, EmblaPluginType } from './Plugins'; -export type EmblaCarouselType = { - canScrollNext: () => boolean; - canScrollPrev: () => boolean; - containerNode: () => HTMLElement; - internalEngine: () => EngineType; - destroy: () => void; - off: EventHandlerType['off']; - on: EventHandlerType['on']; - emit: EventHandlerType['emit']; - plugins: () => EmblaPluginsType; - previousScrollSnap: () => number; - reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void; - rootNode: () => HTMLElement; - scrollNext: (jump?: boolean) => void; - scrollPrev: (jump?: boolean) => void; - scrollProgress: () => number; - scrollSnapList: () => number[]; - scrollTo: (index: number, jump?: boolean) => void; - selectedScrollSnap: () => number; - slideNodes: () => HTMLElement[]; - slidesInView: () => number[]; - slidesNotInView: () => number[]; -}; -declare function EmblaCarousel(root: HTMLElement, userOptions?: EmblaOptionsType, userPlugins?: EmblaPluginType[]): EmblaCarouselType; -declare namespace EmblaCarousel { - let globalOptions: EmblaOptionsType | undefined; -} -export default EmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts deleted file mode 100644 index 18071b0136..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Engine.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { AnimationsType } from './Animations'; -import { AxisType } from './Axis'; -import { CounterType } from './Counter'; -import { DragHandlerType } from './DragHandler'; -import { EventHandlerType } from './EventHandler'; -import { EventStoreType } from './EventStore'; -import { LimitType } from './Limit'; -import { NodeRectType } from './NodeRects'; -import { OptionsType } from './Options'; -import { PercentOfViewType } from './PercentOfView'; -import { ResizeHandlerType } from './ResizeHandler'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollBoundsType } from './ScrollBounds'; -import { ScrollLooperType } from './ScrollLooper'; -import { ScrollProgressType } from './ScrollProgress'; -import { SlideRegistryType } from './SlideRegistry'; -import { ScrollTargetType } from './ScrollTarget'; -import { ScrollToType } from './ScrollTo'; -import { SlideFocusType } from './SlideFocus'; -import { SlideLooperType } from './SlideLooper'; -import { SlidesHandlerType } from './SlidesHandler'; -import { SlidesInViewType } from './SlidesInView'; -import { SlidesToScrollType } from './SlidesToScroll'; -import { TranslateType } from './Translate'; -import { WindowType } from './utils'; -import { Vector1DType } from './Vector1d'; -export type EngineType = { - ownerDocument: Document; - ownerWindow: WindowType; - eventHandler: EventHandlerType; - axis: AxisType; - animation: AnimationsType; - scrollBounds: ScrollBoundsType; - scrollLooper: ScrollLooperType; - scrollProgress: ScrollProgressType; - index: CounterType; - indexPrevious: CounterType; - limit: LimitType; - location: Vector1DType; - offsetLocation: Vector1DType; - previousLocation: Vector1DType; - options: OptionsType; - percentOfView: PercentOfViewType; - scrollBody: ScrollBodyType; - dragHandler: DragHandlerType; - eventStore: EventStoreType; - slideLooper: SlideLooperType; - slidesInView: SlidesInViewType; - slidesToScroll: SlidesToScrollType; - target: Vector1DType; - translate: TranslateType; - resizeHandler: ResizeHandlerType; - slidesHandler: SlidesHandlerType; - scrollTo: ScrollToType; - scrollTarget: ScrollTargetType; - scrollSnapList: number[]; - scrollSnaps: number[]; - slideIndexes: number[]; - slideFocus: SlideFocusType; - slideRegistry: SlideRegistryType['slideRegistry']; - containerRect: NodeRectType; - slideRects: NodeRectType[]; -}; -export declare function Engine(root: HTMLElement, container: HTMLElement, slides: HTMLElement[], ownerDocument: Document, ownerWindow: WindowType, options: OptionsType, eventHandler: EventHandlerType): EngineType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts deleted file mode 100644 index 4c8159f16e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventHandler.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -type CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void; -export type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]; -export interface EmblaEventListType { - init: 'init'; - pointerDown: 'pointerDown'; - pointerUp: 'pointerUp'; - slidesChanged: 'slidesChanged'; - slidesInView: 'slidesInView'; - scroll: 'scroll'; - select: 'select'; - settle: 'settle'; - destroy: 'destroy'; - reInit: 'reInit'; - resize: 'resize'; - slideFocusStart: 'slideFocusStart'; - slideFocus: 'slideFocus'; -} -export type EventHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - emit: (evt: EmblaEventType) => EventHandlerType; - on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; - off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; - clear: () => void; -}; -export declare function EventHandler(): EventHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts deleted file mode 100644 index 8b0f89ed6a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/EventStore.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -type EventNameType = keyof DocumentEventMap | keyof WindowEventMap; -type EventHandlerType = (evt: any) => void; -type EventOptionsType = boolean | AddEventListenerOptions | undefined; -export type EventStoreType = { - add: (node: EventTarget, type: EventNameType, handler: EventHandlerType, options?: EventOptionsType) => EventStoreType; - clear: () => void; -}; -export declare function EventStore(): EventStoreType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts deleted file mode 100644 index b6499b04a8..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Limit.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type LimitType = { - min: number; - max: number; - length: number; - constrain: (n: number) => number; - reachedAny: (n: number) => boolean; - reachedMax: (n: number) => boolean; - reachedMin: (n: number) => boolean; - removeOffset: (n: number) => number; -}; -export declare function Limit(min?: number, max?: number): LimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts deleted file mode 100644 index c76623b8e7..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/NodeRects.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type NodeRectType = { - top: number; - right: number; - bottom: number; - left: number; - width: number; - height: number; -}; -export type NodeRectsType = { - measure: (node: HTMLElement) => NodeRectType; -}; -export declare function NodeRects(): NodeRectsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts deleted file mode 100644 index 168867d04a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Options.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { AlignmentOptionType } from './Alignment'; -import { AxisDirectionOptionType, AxisOptionType } from './Axis'; -import { SlidesToScrollOptionType } from './SlidesToScroll'; -import { ScrollContainOptionType } from './ScrollContain'; -import { DragHandlerOptionType } from './DragHandler'; -import { ResizeHandlerOptionType } from './ResizeHandler'; -import { SlidesHandlerOptionType } from './SlidesHandler'; -import { SlidesInViewOptionsType } from './SlidesInView'; -import { FocusHandlerOptionType } from './SlideFocus'; -export type LooseOptionsType = { - [key: string]: unknown; -}; -export type CreateOptionsType = Type & { - active: boolean; - breakpoints: { - [key: string]: Omit>, 'breakpoints'>; - }; -}; -export type OptionsType = CreateOptionsType<{ - align: AlignmentOptionType; - axis: AxisOptionType; - container: string | HTMLElement | null; - slides: string | HTMLElement[] | NodeListOf | null; - containScroll: ScrollContainOptionType; - direction: AxisDirectionOptionType; - slidesToScroll: SlidesToScrollOptionType; - dragFree: boolean; - dragThreshold: number; - inViewThreshold: SlidesInViewOptionsType; - loop: boolean; - skipSnaps: boolean; - duration: number; - startIndex: number; - watchDrag: DragHandlerOptionType; - watchResize: ResizeHandlerOptionType; - watchSlides: SlidesHandlerOptionType; - watchFocus: FocusHandlerOptionType; -}>; -export declare const defaultOptions: OptionsType; -export type EmblaOptionsType = Partial; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts deleted file mode 100644 index 54ed8aa7ac..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/OptionsHandler.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LooseOptionsType, CreateOptionsType } from './Options'; -import { WindowType } from './utils'; -type OptionsType = Partial>; -export type OptionsHandlerType = { - mergeOptions: (optionsA: TypeA, optionsB?: TypeB) => TypeA; - optionsAtMedia: (options: Type) => Type; - optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]; -}; -export declare function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts deleted file mode 100644 index b51b35a13b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PercentOfView.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type PercentOfViewType = { - measure: (n: number) => number; -}; -export declare function PercentOfView(viewSize: number): PercentOfViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts deleted file mode 100644 index 9518557993..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Plugins.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { CreateOptionsType, LooseOptionsType } from './Options'; -import { EmblaCarouselType } from './EmblaCarousel'; -import { OptionsHandlerType } from './OptionsHandler'; -export type LoosePluginType = { - [key: string]: unknown; -}; -export type CreatePluginType = TypeA & { - name: string; - options: Partial>; - init: (embla: EmblaCarouselType, OptionsHandler: OptionsHandlerType) => void; - destroy: () => void; -}; -export interface EmblaPluginsType { - [key: string]: CreatePluginType; -} -export type EmblaPluginType = EmblaPluginsType[keyof EmblaPluginsType]; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts deleted file mode 100644 index da2688d0b4..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/PluginsHandler.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { OptionsHandlerType } from './OptionsHandler'; -import { EmblaPluginsType, EmblaPluginType } from './Plugins'; -export type PluginsHandlerType = { - init: (emblaApi: EmblaCarouselType, plugins: EmblaPluginType[]) => EmblaPluginsType; - destroy: () => void; -}; -export declare function PluginsHandler(optionsHandler: OptionsHandlerType): PluginsHandlerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts deleted file mode 100644 index 111a58d053..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ResizeHandler.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { AxisType } from './Axis'; -import { EmblaCarouselType } from './EmblaCarousel'; -import { EventHandlerType } from './EventHandler'; -import { NodeRectsType } from './NodeRects'; -import { WindowType } from './utils'; -type ResizeHandlerCallbackType = (emblaApi: EmblaCarouselType, entries: ResizeObserverEntry[]) => boolean | void; -export type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType; -export type ResizeHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; -}; -export declare function ResizeHandler(container: HTMLElement, eventHandler: EventHandlerType, ownerWindow: WindowType, slides: HTMLElement[], axis: AxisType, watchResize: ResizeHandlerOptionType, nodeRects: NodeRectsType): ResizeHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts deleted file mode 100644 index d7dc7d5e57..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBody.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Vector1DType } from './Vector1d'; -export type ScrollBodyType = { - direction: () => number; - duration: () => number; - velocity: () => number; - seek: () => ScrollBodyType; - settled: () => boolean; - useBaseFriction: () => ScrollBodyType; - useBaseDuration: () => ScrollBodyType; - useFriction: (n: number) => ScrollBodyType; - useDuration: (n: number) => ScrollBodyType; -}; -export declare function ScrollBody(location: Vector1DType, offsetLocation: Vector1DType, previousLocation: Vector1DType, target: Vector1DType, baseDuration: number, baseFriction: number): ScrollBodyType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts deleted file mode 100644 index d040f09a2d..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollBounds.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LimitType } from './Limit'; -import { ScrollBodyType } from './ScrollBody'; -import { Vector1DType } from './Vector1d'; -import { PercentOfViewType } from './PercentOfView'; -export type ScrollBoundsType = { - shouldConstrain: () => boolean; - constrain: (pointerDown: boolean) => void; - toggleActive: (active: boolean) => void; -}; -export declare function ScrollBounds(limit: LimitType, location: Vector1DType, target: Vector1DType, scrollBody: ScrollBodyType, percentOfView: PercentOfViewType): ScrollBoundsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts deleted file mode 100644 index 66f5907b81..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollContain.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LimitType } from './Limit'; -export type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'; -export type ScrollContainType = { - snapsContained: number[]; - scrollContainLimit: LimitType; -}; -export declare function ScrollContain(viewSize: number, contentSize: number, snapsAligned: number[], containScroll: ScrollContainOptionType, pixelTolerance: number): ScrollContainType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts deleted file mode 100644 index 3d417cca34..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLimit.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LimitType } from './Limit'; -export type ScrollLimitType = { - limit: LimitType; -}; -export declare function ScrollLimit(contentSize: number, scrollSnaps: number[], loop: boolean): ScrollLimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts deleted file mode 100644 index 97b1b1ba38..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollLooper.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { LimitType } from './Limit'; -import { Vector1DType } from './Vector1d'; -export type ScrollLooperType = { - loop: (direction: number) => void; -}; -export declare function ScrollLooper(contentSize: number, limit: LimitType, location: Vector1DType, vectors: Vector1DType[]): ScrollLooperType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts deleted file mode 100644 index 224e4d385e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollProgress.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LimitType } from './Limit'; -export type ScrollProgressType = { - get: (n: number) => number; -}; -export declare function ScrollProgress(limit: LimitType): ScrollProgressType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts deleted file mode 100644 index 55e7bac4f0..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollSnaps.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AlignmentType } from './Alignment'; -import { AxisType } from './Axis'; -import { NodeRectType } from './NodeRects'; -import { SlidesToScrollType } from './SlidesToScroll'; -export type ScrollSnapsType = { - snaps: number[]; - snapsAligned: number[]; -}; -export declare function ScrollSnaps(axis: AxisType, alignment: AlignmentType, containerRect: NodeRectType, slideRects: NodeRectType[], slidesToScroll: SlidesToScrollType): ScrollSnapsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts deleted file mode 100644 index 3d26624f0e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTarget.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { LimitType } from './Limit'; -import { Vector1DType } from './Vector1d'; -export type TargetType = { - distance: number; - index: number; -}; -export type ScrollTargetType = { - byIndex: (target: number, direction: number) => TargetType; - byDistance: (force: number, snap: boolean) => TargetType; - shortcut: (target: number, direction: number) => number; -}; -export declare function ScrollTarget(loop: boolean, scrollSnaps: number[], contentSize: number, limit: LimitType, targetVector: Vector1DType): ScrollTargetType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts deleted file mode 100644 index 1291ed8628..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/ScrollTo.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AnimationsType } from './Animations'; -import { CounterType } from './Counter'; -import { EventHandlerType } from './EventHandler'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollTargetType } from './ScrollTarget'; -import { Vector1DType } from './Vector1d'; -export type ScrollToType = { - distance: (n: number, snap: boolean) => void; - index: (n: number, direction: number) => void; -}; -export declare function ScrollTo(animation: AnimationsType, indexCurrent: CounterType, indexPrevious: CounterType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, targetVector: Vector1DType, eventHandler: EventHandlerType): ScrollToType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts deleted file mode 100644 index 6f962aae8a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideFocus.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { EventHandlerType } from './EventHandler'; -import { EventStoreType } from './EventStore'; -import { ScrollBodyType } from './ScrollBody'; -import { ScrollToType } from './ScrollTo'; -import { SlideRegistryType } from './SlideRegistry'; -type FocusHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: FocusEvent) => boolean | void; -export type FocusHandlerOptionType = boolean | FocusHandlerCallbackType; -export type SlideFocusType = { - init: (emblaApi: EmblaCarouselType) => void; -}; -export declare function SlideFocus(root: HTMLElement, slides: HTMLElement[], slideRegistry: SlideRegistryType['slideRegistry'], scrollTo: ScrollToType, scrollBody: ScrollBodyType, eventStore: EventStoreType, eventHandler: EventHandlerType, watchFocus: FocusHandlerOptionType): SlideFocusType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts deleted file mode 100644 index bb10e7df3c..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideLooper.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AxisType } from './Axis'; -import { Vector1DType } from './Vector1d'; -import { TranslateType } from './Translate'; -type LoopPointType = { - loopPoint: number; - index: number; - translate: TranslateType; - slideLocation: Vector1DType; - target: () => number; -}; -export type SlideLooperType = { - canLoop: () => boolean; - clear: () => void; - loop: () => void; - loopPoints: LoopPointType[]; -}; -export declare function SlideLooper(axis: AxisType, viewSize: number, contentSize: number, slideSizes: number[], slideSizesWithGaps: number[], snaps: number[], scrollSnaps: number[], location: Vector1DType, slides: HTMLElement[]): SlideLooperType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts deleted file mode 100644 index d339b15eaa..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideRegistry.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LimitType } from './Limit'; -import { ScrollContainOptionType } from './ScrollContain'; -import { SlidesToScrollType } from './SlidesToScroll'; -export type SlideRegistryType = { - slideRegistry: number[][]; -}; -export declare function SlideRegistry(containSnaps: boolean, containScroll: ScrollContainOptionType, scrollSnaps: number[], scrollContainLimit: LimitType, slidesToScroll: SlidesToScrollType, slideIndexes: number[]): SlideRegistryType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts deleted file mode 100644 index 86961805cb..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlideSizes.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AxisType } from './Axis'; -import { NodeRectType } from './NodeRects'; -import { WindowType } from './utils'; -export type SlideSizesType = { - slideSizes: number[]; - slideSizesWithGaps: number[]; - startGap: number; - endGap: number; -}; -export declare function SlideSizes(axis: AxisType, containerRect: NodeRectType, slideRects: NodeRectType[], slides: HTMLElement[], readEdgeGap: boolean, ownerWindow: WindowType): SlideSizesType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts deleted file mode 100644 index 6115d5f30e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesHandler.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel'; -import { EventHandlerType } from './EventHandler'; -type SlidesHandlerCallbackType = (emblaApi: EmblaCarouselType, mutations: MutationRecord[]) => boolean | void; -export type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType; -export type SlidesHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; -}; -export declare function SlidesHandler(container: HTMLElement, eventHandler: EventHandlerType, watchSlides: SlidesHandlerOptionType): SlidesHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts deleted file mode 100644 index 943d05cd2b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesInView.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { EventHandlerType } from './EventHandler'; -export type SlidesInViewOptionsType = IntersectionObserverInit['threshold']; -export type SlidesInViewType = { - init: () => void; - destroy: () => void; - get: (inView?: boolean) => number[]; -}; -export declare function SlidesInView(container: HTMLElement, slides: HTMLElement[], eventHandler: EventHandlerType, threshold: SlidesInViewOptionsType): SlidesInViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts deleted file mode 100644 index 129460e4af..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/SlidesToScroll.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AxisType } from './Axis'; -import { NodeRectType } from './NodeRects'; -export type SlidesToScrollOptionType = 'auto' | number; -export type SlidesToScrollType = { - groupSlides: (array: Type[]) => Type[][]; -}; -export declare function SlidesToScroll(axis: AxisType, viewSize: number, slidesToScroll: SlidesToScrollOptionType, loop: boolean, containerRect: NodeRectType, slideRects: NodeRectType[], startGap: number, endGap: number, pixelTolerance: number): SlidesToScrollType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts deleted file mode 100644 index 2d9c96118f..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Translate.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AxisType } from './Axis'; -export type TranslateType = { - clear: () => void; - to: (target: number) => void; - toggleActive: (active: boolean) => void; -}; -export declare function Translate(axis: AxisType, container: HTMLElement): TranslateType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts deleted file mode 100644 index 9ff303c96b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/Vector1d.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Vector1DType = { - get: () => number; - set: (n: Vector1DType | number) => void; - add: (n: Vector1DType | number) => void; - subtract: (n: Vector1DType | number) => void; -}; -export declare function Vector1D(initialValue: number): Vector1DType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts deleted file mode 100644 index 367767d6e8..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/components/utils.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { PointerEventType } from './DragTracker'; -export type WindowType = Window & typeof globalThis; -export declare function isNumber(subject: unknown): subject is number; -export declare function isString(subject: unknown): subject is string; -export declare function isBoolean(subject: unknown): subject is boolean; -export declare function isObject(subject: unknown): subject is Record; -export declare function mathAbs(n: number): number; -export declare function mathSign(n: number): number; -export declare function deltaAbs(valueB: number, valueA: number): number; -export declare function factorAbs(valueB: number, valueA: number): number; -export declare function roundToTwoDecimals(num: number): number; -export declare function arrayKeys(array: Type[]): number[]; -export declare function arrayLast(array: Type[]): Type; -export declare function arrayLastIndex(array: Type[]): number; -export declare function arrayIsLastIndex(array: Type[], index: number): boolean; -export declare function arrayFromNumber(n: number, startAt?: number): number[]; -export declare function objectKeys(object: Type): string[]; -export declare function objectsMergeDeep(objectA: Record, objectB: Record): Record; -export declare function isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js deleted file mode 100644 index 5832ad542d..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/embla-carousel.umd.js +++ /dev/null @@ -1 +0,0 @@ -!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarousel=t()}(this,(function(){"use strict";function n(n){return"number"==typeof n}function t(n){return"string"==typeof n}function e(n){return"boolean"==typeof n}function r(n){return"[object Object]"===Object.prototype.toString.call(n)}function o(n){return Math.abs(n)}function i(n){return Math.sign(n)}function c(n,t){return o(n-t)}function u(n){return f(n).map(Number)}function s(n){return n[a(n)]}function a(n){return Math.max(0,n.length-1)}function d(n,t){return t===a(n)}function l(n,t=0){return Array.from(Array(n),((n,e)=>t+e))}function f(n){return Object.keys(n)}function p(n,t){return[n,t].reduce(((n,t)=>(f(t).forEach((e=>{const o=n[e],i=t[e],c=r(o)&&r(i);n[e]=c?p(o,i):i})),n)),{})}function m(n,t){return void 0!==t.MouseEvent&&n instanceof t.MouseEvent}function g(){let n=[];const t={add:function(e,r,o,i={passive:!0}){let c;if("addEventListener"in e)e.addEventListener(r,o,i),c=()=>e.removeEventListener(r,o,i);else{const n=e;n.addListener(o),c=()=>n.removeListener(o)}return n.push(c),t},clear:function(){n=n.filter((n=>n()))}};return t}function h(n,t,e,r){const o=g(),i=1e3/60;let c=null,u=0,s=0;function a(n){if(!s)return;c||(c=n,e(),e());const o=n-c;for(c=n,u+=o;u>=i;)e(),u-=i;r(u/i),s&&(s=t.requestAnimationFrame(a))}function d(){t.cancelAnimationFrame(s),c=null,u=0,s=0}return{init:function(){o.add(n,"visibilitychange",(()=>{n.hidden&&(c=null,u=0)}))},destroy:function(){d(),o.clear()},start:function(){s||(s=t.requestAnimationFrame(a))},stop:d,update:e,render:r}}function x(n=0,t=0){const e=o(n-t);function r(t){return tt}function c(n){return r(n)||i(n)}return{length:e,max:t,min:n,constrain:function(e){return c(e)?r(e)?n:t:e},reachedAny:c,reachedMax:i,reachedMin:r,removeOffset:function(n){return e?n-e*Math.ceil((n-t)/e):n}}}function y(n,t,e){const{constrain:r}=x(0,n),i=n+1;let c=u(t);function u(n){return e?o((i+n)%i):r(n)}function s(){return c}function a(){return y(n,s(),e)}const d={get:s,set:function(n){return c=u(n),d},add:function(n){return a().set(s()+n)},clone:a};return d}function v(n,t,r,u,s,a,d,l,f,p,h,y,v,b,S,w,E,L,D){const{cross:I,direction:M}=n,A=["INPUT","SELECT","TEXTAREA"],F={passive:!1},T=g(),O=g(),P=x(50,225).constrain(b.measure(20)),z={mouse:300,touch:400},H={mouse:500,touch:600},k=S?43:25;let V=!1,B=0,C=0,N=!1,R=!1,j=!1,G=!1;function q(n){if(!m(n,u)&&n.touches.length>=2)return U(n);const t=a.readPoint(n),e=a.readPoint(n,I),r=c(t,B),o=c(e,C);if(!R&&!G){if(!n.cancelable)return U(n);if(R=r>o,!R)return U(n)}const i=a.pointerMove(n);r>w&&(j=!0),p.useFriction(.3).useDuration(.75),l.start(),s.add(M(i)),n.preventDefault()}function U(n){const t=h.byDistance(0,!1).index!==y.get(),e=a.pointerUp(n)*(S?H:z)[G?"mouse":"touch"],r=function(n,t){const e=y.add(-1*i(n)),r=h.byDistance(n,!S).distance;return S||o(n)=2,e&&0!==n.button)return;if(function(n){const t=n.nodeName||"";return A.includes(t)}(n.target))return;N=!0,a.pointerDown(n),p.useFriction(0).useDuration(0),s.set(d),function(){const n=G?r:t;O.add(n,"touchmove",q,F).add(n,"touchend",U).add(n,"mousemove",q,F).add(n,"mouseup",U)}(),B=a.readPoint(n),C=a.readPoint(n,I),v.emit("pointerDown")}(o)}const i=t;T.add(i,"dragstart",(n=>n.preventDefault()),F).add(i,"touchmove",(()=>{}),F).add(i,"touchend",(()=>{})).add(i,"touchstart",o).add(i,"mousedown",o).add(i,"touchcancel",U).add(i,"contextmenu",U).add(i,"click",W,!0)},destroy:function(){T.clear(),O.clear()},pointerDown:function(){return N}}}function b(n,t){let e,r;function i(n){return n.timeStamp}function c(e,r){const o="client"+("x"===(r||n.scroll)?"X":"Y");return(m(e,t)?e:e.touches[0])[o]}return{pointerDown:function(n){return e=n,r=n,c(n)},pointerMove:function(n){const t=c(n)-c(r),o=i(n)-i(e)>170;return r=n,o&&(e=n),t},pointerUp:function(n){if(!e||!r)return 0;const t=c(r)-c(e),u=i(n)-i(e),s=i(n)-i(r)>170,a=t/u;return u&&!s&&o(a)>.1?a:0},readPoint:c}}function S(n,t,r,i,c,u,s){const a=[n].concat(i);let d,l,f=[],p=!1;function m(n){return c.measureSize(s.measure(n))}return{init:function(c){u&&(l=m(n),f=i.map(m),d=new ResizeObserver((r=>{(e(u)||u(c,r))&&function(e){for(const r of e){if(p)return;const e=r.target===n,u=i.indexOf(r.target),s=e?l:f[u];if(o(m(e?n:i[u])-s)>=.5){c.reInit(),t.emit("resize");break}}}(r)})),r.requestAnimationFrame((()=>{a.forEach((n=>d.observe(n)))})))},destroy:function(){p=!0,d&&d.disconnect()}}}function w(n,t,e,r,i){const c=i.measure(10),u=i.measure(50),s=x(.1,.99);let a=!1;function d(){return!a&&(!!n.reachedAny(e.get())&&!!n.reachedAny(t.get()))}return{shouldConstrain:d,constrain:function(i){if(!d())return;const a=n.reachedMin(t.get())?"min":"max",l=o(n[a]-t.get()),f=e.get()-t.get(),p=s.constrain(l/u);e.subtract(f*p),!i&&o(f)n.add(o)))}}}function L(n,t,e,r,c){const{reachedAny:u,removeOffset:a,constrain:d}=r;function l(n){return n.concat().sort(((n,t)=>o(n)-o(t)))[0]}function f(t,r){const o=[t,t+e,t-e];if(!n)return t;if(!r)return l(o);const c=o.filter((n=>i(n)===r));return c.length?l(c):s(o)-e}return{byDistance:function(e,r){const i=c.get()+e,{index:s,distance:l}=function(e){const r=n?a(e):d(e),i=t.map(((n,t)=>({diff:f(n-r,0),index:t}))).sort(((n,t)=>o(n.diff)-o(t.diff))),{index:c}=i[0];return{index:c,distance:r}}(i),p=!n&&u(i);return!r||p?{index:s,distance:e}:{index:s,distance:e+f(t[s]-l,0)}},byIndex:function(n,e){return{index:n,distance:f(t[n]-c.get(),e)}},shortcut:f}}function D(t,r,o,i,c,u,s,a){const d={passive:!0,capture:!0};let l=0;function f(n){"Tab"===n.code&&(l=(new Date).getTime())}return{init:function(p){a&&(u.add(document,"keydown",f,!1),r.forEach(((r,f)=>{u.add(r,"focus",(r=>{(e(a)||a(p,r))&&function(e){if((new Date).getTime()-l>10)return;s.emit("slideFocusStart"),t.scrollLeft=0;const r=o.findIndex((n=>n.includes(e)));n(r)&&(c.useDuration(0),i.index(r,0),s.emit("slideFocus"))}(f)}),d)})))}}}function I(t){let e=t;function r(t){return n(t)?t:t.get()}return{get:function(){return e},set:function(n){e=r(n)},add:function(n){e+=r(n)},subtract:function(n){e-=r(n)}}}function M(n,t){const e="x"===n.scroll?function(n){return`translate3d(${n}px,0px,0px)`}:function(n){return`translate3d(0px,${n}px,0px)`},r=t.style;let o=null,i=!1;return{clear:function(){i||(r.transform="",t.getAttribute("style")||t.removeAttribute("style"))},to:function(t){if(i)return;const c=(u=n.direction(t),Math.round(100*u)/100);var u;c!==o&&(r.transform=e(c),o=c)},toggleActive:function(n){i=!n}}}function A(n,t,e,r,o,i,c,s,a){const d=.5,l=u(o),f=u(o).reverse(),p=function(){const n=c[0];return h(g(f,n),e,!1)}().concat(function(){const n=t-c[0]-1;return h(g(l,n),-e,!0)}());function m(n,t){return n.reduce(((n,t)=>n-o[t]),t)}function g(n,t){return n.reduce(((n,e)=>m(n,t)>0?n.concat([e]):n),[])}function h(o,c,u){const l=function(n){return i.map(((e,o)=>({start:e-r[o]+d+n,end:e+t-d+n})))}(c);return o.map((t=>{const r=u?0:-e,o=u?e:0,i=u?"end":"start",c=l[t][i];return{index:t,loopPoint:c,slideLocation:I(-1),translate:M(n,a[t]),target:()=>s.get()>c?r:o}}))}return{canLoop:function(){return p.every((({index:n})=>m(l.filter((t=>t!==n)),t)<=.1))},clear:function(){p.forEach((n=>n.translate.clear()))},loop:function(){p.forEach((n=>{const{target:t,translate:e,slideLocation:r}=n,o=t();o!==r.get()&&(e.to(o),r.set(o))}))},loopPoints:p}}function F(n,t,r){let o,i=!1;return{init:function(c){r&&(o=new MutationObserver((n=>{i||(e(r)||r(c,n))&&function(n){for(const e of n)if("childList"===e.type){c.reInit(),t.emit("slidesChanged");break}}(n)})),o.observe(n,{childList:!0}))},destroy:function(){o&&o.disconnect(),i=!0}}}function T(n,t,e,r){const o={};let i,c=null,u=null,s=!1;return{init:function(){i=new IntersectionObserver((n=>{s||(n.forEach((n=>{const e=t.indexOf(n.target);o[e]=n})),c=null,u=null,e.emit("slidesInView"))}),{root:n.parentElement,threshold:r}),t.forEach((n=>i.observe(n)))},destroy:function(){i&&i.disconnect(),s=!0},get:function(n=!0){if(n&&c)return c;if(!n&&u)return u;const t=function(n){return f(o).reduce(((t,e)=>{const r=parseInt(e),{isIntersecting:i}=o[r];return(n&&i||!n&&!i)&&t.push(r),t}),[])}(n);return n&&(c=t),n||(u=t),t}}}function O(t,e,r,i,c,d,l,f,p){const{startEdge:m,endEdge:g,direction:h}=t,x=n(r);return{groupSlides:function(n){return x?function(n,t){return u(n).filter((n=>n%t==0)).map((e=>n.slice(e,e+t)))}(n,r):function(n){return n.length?u(n).reduce(((t,r,u)=>{const x=s(t)||0,y=0===x,v=r===a(n),b=c[m]-d[x][m],S=c[m]-d[r][g],w=!i&&y?h(l):0,E=o(S-(!i&&v?h(f):0)-(b+w));return u&&E>e+p&&t.push(r),v&&t.push(n.length),t}),[]).map(((t,e,r)=>{const o=Math.max(r[e-1]||0);return n.slice(o,t)})):[]}(n)}}}function P(n,e,r,f,p,m,P){const{align:z,axis:H,direction:k,startIndex:V,loop:B,duration:C,dragFree:N,dragThreshold:R,inViewThreshold:j,slidesToScroll:G,skipSnaps:q,containScroll:U,watchResize:W,watchSlides:$,watchDrag:Q,watchFocus:X}=m,Y={measure:function(n){const{offsetTop:t,offsetLeft:e,offsetWidth:r,offsetHeight:o}=n;return{top:t,right:e+r,bottom:t+o,left:e,width:r,height:o}}},J=Y.measure(e),K=r.map(Y.measure),Z=function(n,t){const e="rtl"===t,r="y"===n,o=!r&&e?-1:1;return{scroll:r?"y":"x",cross:r?"x":"y",startEdge:r?"top":e?"right":"left",endEdge:r?"bottom":e?"left":"right",measureSize:function(n){const{height:t,width:e}=n;return r?t:e},direction:function(n){return n*o}}}(H,k),_=Z.measureSize(J),nn=function(n){return{measure:function(t){return n*(t/100)}}}(_),tn=function(n,e){const r={start:function(){return 0},center:function(n){return o(n)/2},end:o};function o(n){return e-n}return{measure:function(o,i){return t(n)?r[n](o):n(e,o,i)}}}(z,_),en=!B&&!!U,rn=B||!!U,{slideSizes:on,slideSizesWithGaps:cn,startGap:un,endGap:sn}=function(n,t,e,r,i,c){const{measureSize:u,startEdge:a,endEdge:l}=n,f=e[0]&&i,p=function(){if(!f)return 0;const n=e[0];return o(t[a]-n[a])}(),m=function(){if(!f)return 0;const n=c.getComputedStyle(s(r));return parseFloat(n.getPropertyValue(`margin-${l}`))}(),g=e.map(u),h=e.map(((n,t,e)=>{const r=!t,o=d(e,t);return r?g[t]+p:o?g[t]+m:e[t+1][a]-n[a]})).map(o);return{slideSizes:g,slideSizesWithGaps:h,startGap:p,endGap:m}}(Z,J,K,r,rn,p),an=O(Z,_,G,B,J,K,un,sn,2),{snaps:dn,snapsAligned:ln}=function(n,t,e,r,i){const{startEdge:c,endEdge:u}=n,{groupSlides:a}=i,d=a(r).map((n=>s(n)[u]-n[0][c])).map(o).map(t.measure),l=r.map((n=>e[c]-n[c])).map((n=>-o(n))),f=a(l).map((n=>n[0])).map(((n,t)=>n+d[t]));return{snaps:l,snapsAligned:f}}(Z,tn,J,K,an),fn=-s(dn)+s(cn),{snapsContained:pn,scrollContainLimit:mn}=function(n,t,e,r,o){const i=x(-t+n,0),u=e.map(((n,t)=>{const{min:r,max:o}=i,c=i.constrain(n),u=!t,s=d(e,t);return u?o:s||l(r,c)?r:l(o,c)?o:c})).map((n=>parseFloat(n.toFixed(3)))),a=function(){const n=u[0],t=s(u);return x(u.lastIndexOf(n),u.indexOf(t)+1)}();function l(n,t){return c(n,t)<=1}return{snapsContained:function(){if(t<=n+o)return[i.max];if("keepSnaps"===r)return u;const{min:e,max:c}=a;return u.slice(e,c)}(),scrollContainLimit:a}}(_,fn,ln,U,2),gn=en?pn:ln,{limit:hn}=function(n,t,e){const r=t[0];return{limit:x(e?r-n:s(t),r)}}(fn,gn,B),xn=y(a(gn),V,B),yn=xn.clone(),vn=u(r),bn=h(f,p,(()=>(({dragHandler:n,scrollBody:t,scrollBounds:e,options:{loop:r}})=>{r||e.constrain(n.pointerDown()),t.seek()})(Hn)),(n=>(({scrollBody:n,translate:t,location:e,offsetLocation:r,previousLocation:o,scrollLooper:i,slideLooper:c,dragHandler:u,animation:s,eventHandler:a,scrollBounds:d,options:{loop:l}},f)=>{const p=n.settled(),m=!d.shouldConstrain(),g=l?p:p&&m,h=g&&!u.pointerDown();h&&s.stop();const x=e.get()*f+o.get()*(1-f);r.set(x),l&&(i.loop(n.direction()),c.loop()),t.to(r.get()),h&&a.emit("settle"),g||a.emit("scroll")})(Hn,n))),Sn=gn[xn.get()],wn=I(Sn),En=I(Sn),Ln=I(Sn),Dn=I(Sn),In=function(n,t,e,r,c,u){let s=0,a=0,d=c,l=u,f=n.get(),p=0;function m(n){return d=n,h}function g(n){return l=n,h}const h={direction:function(){return a},duration:function(){return d},velocity:function(){return s},seek:function(){const t=r.get()-n.get();let o=0;return d?(e.set(n),s+=t/d,s*=l,f+=s,n.add(s),o=f-p):(s=0,e.set(r),n.set(r),o=t),a=i(o),p=f,h},settled:function(){return o(r.get()-t.get())<.001},useBaseFriction:function(){return g(u)},useBaseDuration:function(){return m(c)},useFriction:g,useDuration:m};return h}(wn,Ln,En,Dn,C,.68),Mn=L(B,gn,fn,hn,Dn),An=function(n,t,e,r,o,i,c){function u(o){const u=o.distance,s=o.index!==t.get();i.add(u),u&&(r.duration()?n.start():(n.update(),n.render(1),n.update())),s&&(e.set(t.get()),t.set(o.index),c.emit("select"))}return{distance:function(n,t){u(o.byDistance(n,t))},index:function(n,e){const r=t.clone().set(n);u(o.byIndex(r.get(),e))}}}(bn,xn,yn,In,Mn,Dn,P),Fn=function(n){const{max:t,length:e}=n;return{get:function(n){return e?(n-t)/-e:0}}}(hn),Tn=g(),On=T(e,r,P,j),{slideRegistry:Pn}=function(n,t,e,r,o,i){const{groupSlides:c}=o,{min:u,max:f}=r;return{slideRegistry:function(){const r=c(i),o=!n||"keepSnaps"===t;return 1===e.length?[i]:o?r:r.slice(u,f).map(((n,t,e)=>{const r=!t,o=d(e,t);return r?l(s(e[0])+1):o?l(a(i)-s(e)[0]+1,s(e)[0]):n}))}()}}(en,U,gn,mn,an,vn),zn=D(n,r,Pn,An,In,Tn,P,X),Hn={ownerDocument:f,ownerWindow:p,eventHandler:P,containerRect:J,slideRects:K,animation:bn,axis:Z,dragHandler:v(Z,n,f,p,Dn,b(Z,p),wn,bn,An,In,Mn,xn,P,nn,N,R,q,.68,Q),eventStore:Tn,percentOfView:nn,index:xn,indexPrevious:yn,limit:hn,location:wn,offsetLocation:Ln,previousLocation:En,options:m,resizeHandler:S(e,P,p,r,Z,W,Y),scrollBody:In,scrollBounds:w(hn,Ln,Dn,In,nn),scrollLooper:E(fn,hn,Ln,[wn,Ln,En,Dn]),scrollProgress:Fn,scrollSnapList:gn.map(Fn.get),scrollSnaps:gn,scrollTarget:Mn,scrollTo:An,slideLooper:A(Z,_,fn,on,cn,dn,gn,Ln,r),slideFocus:zn,slidesHandler:F(e,P,$),slidesInView:On,slideIndexes:vn,slideRegistry:Pn,slidesToScroll:an,target:Dn,translate:M(Z,e)};return Hn}const z={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function H(n){function t(n,t){return p(n,t||{})}const e={mergeOptions:t,optionsAtMedia:function(e){const r=e.breakpoints||{},o=f(r).filter((t=>n.matchMedia(t).matches)).map((n=>r[n])).reduce(((n,e)=>t(n,e)),{});return t(e,o)},optionsMediaQueries:function(t){return t.map((n=>f(n.breakpoints||{}))).reduce(((n,t)=>n.concat(t)),[]).map(n.matchMedia)}};return e}function k(n,e,r){const o=n.ownerDocument,i=o.defaultView,c=H(i),u=function(n){let t=[];return{init:function(e,r){return t=r.filter((({options:t})=>!1!==n.optionsAtMedia(t).active)),t.forEach((t=>t.init(e,n))),r.reduce(((n,t)=>Object.assign(n,{[t.name]:t})),{})},destroy:function(){t=t.filter((n=>n.destroy()))}}}(c),s=g(),a=function(){let n,t={};function e(n){return t[n]||[]}const r={init:function(t){n=t},emit:function(t){return e(t).forEach((e=>e(n,t))),r},off:function(n,o){return t[n]=e(n).filter((n=>n!==o)),r},on:function(n,o){return t[n]=e(n).concat([o]),r},clear:function(){t={}}};return r}(),{mergeOptions:d,optionsAtMedia:l,optionsMediaQueries:f}=c,{on:p,off:m,emit:h}=a,x=A;let y,v,b,S,w=!1,E=d(z,k.globalOptions),L=d(E),D=[];function I(t){const e=P(n,b,S,o,i,t,a);if(t.loop&&!e.slideLooper.canLoop()){return I(Object.assign({},t,{loop:!1}))}return e}function M(e,r){w||(E=d(E,e),L=l(E),D=r||D,function(){const{container:e,slides:r}=L,o=t(e)?n.querySelector(e):e;b=o||n.children[0];const i=t(r)?b.querySelectorAll(r):r;S=[].slice.call(i||b.children)}(),y=I(L),f([E,...D.map((({options:n})=>n))]).forEach((n=>s.add(n,"change",A))),L.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(V),y.eventHandler.init(V),y.resizeHandler.init(V),y.slidesHandler.init(V),y.options.loop&&y.slideLooper.loop(),b.offsetParent&&S.length&&y.dragHandler.init(V),v=u.init(V,D)))}function A(n,t){const e=O();F(),M(d({startIndex:e},n),t),a.emit("reInit")}function F(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),u.destroy(),s.clear()}function T(n,t,e){L.active&&!w&&(y.scrollBody.useBaseFriction().useDuration(!0===t?0:L.duration),y.scrollTo.index(n,e||0))}function O(){return y.index.get()}const V={canScrollNext:function(){return y.index.add(1).get()!==O()},canScrollPrev:function(){return y.index.add(-1).get()!==O()},containerNode:function(){return b},internalEngine:function(){return y},destroy:function(){w||(w=!0,s.clear(),F(),a.emit("destroy"),a.clear())},off:m,on:p,emit:h,plugins:function(){return v},previousScrollSnap:function(){return y.indexPrevious.get()},reInit:x,rootNode:function(){return n},scrollNext:function(n){T(y.index.add(1).get(),n,-1)},scrollPrev:function(n){T(y.index.add(-1).get(),n,1)},scrollProgress:function(){return y.scrollProgress.get(y.offsetLocation.get())},scrollSnapList:function(){return y.scrollSnapList},scrollTo:T,selectedScrollSnap:O,slideNodes:function(){return S},slidesInView:function(){return y.slidesInView.get()},slidesNotInView:function(){return y.slidesInView.get(!1)}};return M(e,r),setTimeout((()=>a.emit("init")),0),V}return k.globalOptions=void 0,k})); diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts deleted file mode 100644 index 72f1015b7b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Alignment.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type AlignmentOptionType = 'start' | 'center' | 'end' | ((viewSize: number, snapSize: number, index: number) => number); -export type AlignmentType = { - measure: (n: number, index: number) => number; -}; -export declare function Alignment(align: AlignmentOptionType, viewSize: number): AlignmentType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts deleted file mode 100644 index 0e8046f964..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Animations.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EngineType } from './Engine.js'; -import { WindowType } from './utils.js'; -export type AnimationsUpdateType = (engine: EngineType) => void; -export type AnimationsRenderType = (engine: EngineType, alpha: number) => void; -export type AnimationsType = { - init: () => void; - destroy: () => void; - start: () => void; - stop: () => void; - update: () => void; - render: (alpha: number) => void; -}; -export declare function Animations(ownerDocument: Document, ownerWindow: WindowType, update: () => void, render: (alpha: number) => void): AnimationsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts deleted file mode 100644 index 6387883614..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Axis.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NodeRectType } from './NodeRects.js'; -export type AxisOptionType = 'x' | 'y'; -export type AxisDirectionOptionType = 'ltr' | 'rtl'; -type AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'; -export type AxisType = { - scroll: AxisOptionType; - cross: AxisOptionType; - startEdge: AxisEdgeType; - endEdge: AxisEdgeType; - measureSize: (nodeRect: NodeRectType) => number; - direction: (n: number) => number; -}; -export declare function Axis(axis: AxisOptionType, contentDirection: AxisDirectionOptionType): AxisType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts deleted file mode 100644 index 964a47d838..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Counter.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type CounterType = { - get: () => number; - set: (n: number) => CounterType; - add: (n: number) => CounterType; - clone: () => CounterType; -}; -export declare function Counter(max: number, start: number, loop: boolean): CounterType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts deleted file mode 100644 index 95ca6bc135..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragHandler.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel.js'; -import { AnimationsType } from './Animations.js'; -import { CounterType } from './Counter.js'; -import { DragTrackerType, PointerEventType } from './DragTracker.js'; -import { EventHandlerType } from './EventHandler.js'; -import { AxisType } from './Axis.js'; -import { ScrollBodyType } from './ScrollBody.js'; -import { ScrollTargetType } from './ScrollTarget.js'; -import { ScrollToType } from './ScrollTo.js'; -import { Vector1DType } from './Vector1d.js'; -import { PercentOfViewType } from './PercentOfView.js'; -import { WindowType } from './utils.js'; -type DragHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: PointerEventType) => boolean | void; -export type DragHandlerOptionType = boolean | DragHandlerCallbackType; -export type DragHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; - pointerDown: () => boolean; -}; -export declare function DragHandler(axis: AxisType, rootNode: HTMLElement, ownerDocument: Document, ownerWindow: WindowType, target: Vector1DType, dragTracker: DragTrackerType, location: Vector1DType, animation: AnimationsType, scrollTo: ScrollToType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, index: CounterType, eventHandler: EventHandlerType, percentOfView: PercentOfViewType, dragFree: boolean, dragThreshold: number, skipSnaps: boolean, baseFriction: number, watchDrag: DragHandlerOptionType): DragHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts deleted file mode 100644 index d51b688974..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/DragTracker.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AxisOptionType, AxisType } from './Axis.js'; -import { WindowType } from './utils.js'; -export type PointerEventType = TouchEvent | MouseEvent; -export type DragTrackerType = { - pointerDown: (evt: PointerEventType) => number; - pointerMove: (evt: PointerEventType) => number; - pointerUp: (evt: PointerEventType) => number; - readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number; -}; -export declare function DragTracker(axis: AxisType, ownerWindow: WindowType): DragTrackerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts deleted file mode 100644 index 192eb4c0e1..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EmblaCarousel.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { EngineType } from './Engine.js'; -import { EventHandlerType } from './EventHandler.js'; -import { EmblaOptionsType } from './Options.js'; -import { EmblaPluginsType, EmblaPluginType } from './Plugins.js'; -export type EmblaCarouselType = { - canScrollNext: () => boolean; - canScrollPrev: () => boolean; - containerNode: () => HTMLElement; - internalEngine: () => EngineType; - destroy: () => void; - off: EventHandlerType['off']; - on: EventHandlerType['on']; - emit: EventHandlerType['emit']; - plugins: () => EmblaPluginsType; - previousScrollSnap: () => number; - reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void; - rootNode: () => HTMLElement; - scrollNext: (jump?: boolean) => void; - scrollPrev: (jump?: boolean) => void; - scrollProgress: () => number; - scrollSnapList: () => number[]; - scrollTo: (index: number, jump?: boolean) => void; - selectedScrollSnap: () => number; - slideNodes: () => HTMLElement[]; - slidesInView: () => number[]; - slidesNotInView: () => number[]; -}; -declare function EmblaCarousel(root: HTMLElement, userOptions?: EmblaOptionsType, userPlugins?: EmblaPluginType[]): EmblaCarouselType; -declare namespace EmblaCarousel { - let globalOptions: EmblaOptionsType | undefined; -} -export default EmblaCarousel; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts deleted file mode 100644 index 4eb32043a4..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Engine.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { AnimationsType } from './Animations.js'; -import { AxisType } from './Axis.js'; -import { CounterType } from './Counter.js'; -import { DragHandlerType } from './DragHandler.js'; -import { EventHandlerType } from './EventHandler.js'; -import { EventStoreType } from './EventStore.js'; -import { LimitType } from './Limit.js'; -import { NodeRectType } from './NodeRects.js'; -import { OptionsType } from './Options.js'; -import { PercentOfViewType } from './PercentOfView.js'; -import { ResizeHandlerType } from './ResizeHandler.js'; -import { ScrollBodyType } from './ScrollBody.js'; -import { ScrollBoundsType } from './ScrollBounds.js'; -import { ScrollLooperType } from './ScrollLooper.js'; -import { ScrollProgressType } from './ScrollProgress.js'; -import { SlideRegistryType } from './SlideRegistry.js'; -import { ScrollTargetType } from './ScrollTarget.js'; -import { ScrollToType } from './ScrollTo.js'; -import { SlideFocusType } from './SlideFocus.js'; -import { SlideLooperType } from './SlideLooper.js'; -import { SlidesHandlerType } from './SlidesHandler.js'; -import { SlidesInViewType } from './SlidesInView.js'; -import { SlidesToScrollType } from './SlidesToScroll.js'; -import { TranslateType } from './Translate.js'; -import { WindowType } from './utils.js'; -import { Vector1DType } from './Vector1d.js'; -export type EngineType = { - ownerDocument: Document; - ownerWindow: WindowType; - eventHandler: EventHandlerType; - axis: AxisType; - animation: AnimationsType; - scrollBounds: ScrollBoundsType; - scrollLooper: ScrollLooperType; - scrollProgress: ScrollProgressType; - index: CounterType; - indexPrevious: CounterType; - limit: LimitType; - location: Vector1DType; - offsetLocation: Vector1DType; - previousLocation: Vector1DType; - options: OptionsType; - percentOfView: PercentOfViewType; - scrollBody: ScrollBodyType; - dragHandler: DragHandlerType; - eventStore: EventStoreType; - slideLooper: SlideLooperType; - slidesInView: SlidesInViewType; - slidesToScroll: SlidesToScrollType; - target: Vector1DType; - translate: TranslateType; - resizeHandler: ResizeHandlerType; - slidesHandler: SlidesHandlerType; - scrollTo: ScrollToType; - scrollTarget: ScrollTargetType; - scrollSnapList: number[]; - scrollSnaps: number[]; - slideIndexes: number[]; - slideFocus: SlideFocusType; - slideRegistry: SlideRegistryType['slideRegistry']; - containerRect: NodeRectType; - slideRects: NodeRectType[]; -}; -export declare function Engine(root: HTMLElement, container: HTMLElement, slides: HTMLElement[], ownerDocument: Document, ownerWindow: WindowType, options: OptionsType, eventHandler: EventHandlerType): EngineType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts deleted file mode 100644 index 9b6bddde44..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventHandler.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel.js'; -type CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void; -export type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]; -export interface EmblaEventListType { - init: 'init'; - pointerDown: 'pointerDown'; - pointerUp: 'pointerUp'; - slidesChanged: 'slidesChanged'; - slidesInView: 'slidesInView'; - scroll: 'scroll'; - select: 'select'; - settle: 'settle'; - destroy: 'destroy'; - reInit: 'reInit'; - resize: 'resize'; - slideFocusStart: 'slideFocusStart'; - slideFocus: 'slideFocus'; -} -export type EventHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - emit: (evt: EmblaEventType) => EventHandlerType; - on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; - off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType; - clear: () => void; -}; -export declare function EventHandler(): EventHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts deleted file mode 100644 index 8b0f89ed6a..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/EventStore.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -type EventNameType = keyof DocumentEventMap | keyof WindowEventMap; -type EventHandlerType = (evt: any) => void; -type EventOptionsType = boolean | AddEventListenerOptions | undefined; -export type EventStoreType = { - add: (node: EventTarget, type: EventNameType, handler: EventHandlerType, options?: EventOptionsType) => EventStoreType; - clear: () => void; -}; -export declare function EventStore(): EventStoreType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts deleted file mode 100644 index b6499b04a8..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Limit.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type LimitType = { - min: number; - max: number; - length: number; - constrain: (n: number) => number; - reachedAny: (n: number) => boolean; - reachedMax: (n: number) => boolean; - reachedMin: (n: number) => boolean; - removeOffset: (n: number) => number; -}; -export declare function Limit(min?: number, max?: number): LimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts deleted file mode 100644 index c76623b8e7..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/NodeRects.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type NodeRectType = { - top: number; - right: number; - bottom: number; - left: number; - width: number; - height: number; -}; -export type NodeRectsType = { - measure: (node: HTMLElement) => NodeRectType; -}; -export declare function NodeRects(): NodeRectsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts deleted file mode 100644 index e61de6fc1c..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Options.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { AlignmentOptionType } from './Alignment.js'; -import { AxisDirectionOptionType, AxisOptionType } from './Axis.js'; -import { SlidesToScrollOptionType } from './SlidesToScroll.js'; -import { ScrollContainOptionType } from './ScrollContain.js'; -import { DragHandlerOptionType } from './DragHandler.js'; -import { ResizeHandlerOptionType } from './ResizeHandler.js'; -import { SlidesHandlerOptionType } from './SlidesHandler.js'; -import { SlidesInViewOptionsType } from './SlidesInView.js'; -import { FocusHandlerOptionType } from './SlideFocus.js'; -export type LooseOptionsType = { - [key: string]: unknown; -}; -export type CreateOptionsType = Type & { - active: boolean; - breakpoints: { - [key: string]: Omit>, 'breakpoints'>; - }; -}; -export type OptionsType = CreateOptionsType<{ - align: AlignmentOptionType; - axis: AxisOptionType; - container: string | HTMLElement | null; - slides: string | HTMLElement[] | NodeListOf | null; - containScroll: ScrollContainOptionType; - direction: AxisDirectionOptionType; - slidesToScroll: SlidesToScrollOptionType; - dragFree: boolean; - dragThreshold: number; - inViewThreshold: SlidesInViewOptionsType; - loop: boolean; - skipSnaps: boolean; - duration: number; - startIndex: number; - watchDrag: DragHandlerOptionType; - watchResize: ResizeHandlerOptionType; - watchSlides: SlidesHandlerOptionType; - watchFocus: FocusHandlerOptionType; -}>; -export declare const defaultOptions: OptionsType; -export type EmblaOptionsType = Partial; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts deleted file mode 100644 index fa5fe21389..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/OptionsHandler.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LooseOptionsType, CreateOptionsType } from './Options.js'; -import { WindowType } from './utils.js'; -type OptionsType = Partial>; -export type OptionsHandlerType = { - mergeOptions: (optionsA: TypeA, optionsB?: TypeB) => TypeA; - optionsAtMedia: (options: Type) => Type; - optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]; -}; -export declare function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts deleted file mode 100644 index b51b35a13b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PercentOfView.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type PercentOfViewType = { - measure: (n: number) => number; -}; -export declare function PercentOfView(viewSize: number): PercentOfViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts deleted file mode 100644 index 6807d1b372..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Plugins.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { CreateOptionsType, LooseOptionsType } from './Options.js'; -import { EmblaCarouselType } from './EmblaCarousel.js'; -import { OptionsHandlerType } from './OptionsHandler.js'; -export type LoosePluginType = { - [key: string]: unknown; -}; -export type CreatePluginType = TypeA & { - name: string; - options: Partial>; - init: (embla: EmblaCarouselType, OptionsHandler: OptionsHandlerType) => void; - destroy: () => void; -}; -export interface EmblaPluginsType { - [key: string]: CreatePluginType; -} -export type EmblaPluginType = EmblaPluginsType[keyof EmblaPluginsType]; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts deleted file mode 100644 index 5065388fcb..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/PluginsHandler.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel.js'; -import { OptionsHandlerType } from './OptionsHandler.js'; -import { EmblaPluginsType, EmblaPluginType } from './Plugins.js'; -export type PluginsHandlerType = { - init: (emblaApi: EmblaCarouselType, plugins: EmblaPluginType[]) => EmblaPluginsType; - destroy: () => void; -}; -export declare function PluginsHandler(optionsHandler: OptionsHandlerType): PluginsHandlerType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts deleted file mode 100644 index 5536cd66da..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ResizeHandler.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { AxisType } from './Axis.js'; -import { EmblaCarouselType } from './EmblaCarousel.js'; -import { EventHandlerType } from './EventHandler.js'; -import { NodeRectsType } from './NodeRects.js'; -import { WindowType } from './utils.js'; -type ResizeHandlerCallbackType = (emblaApi: EmblaCarouselType, entries: ResizeObserverEntry[]) => boolean | void; -export type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType; -export type ResizeHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; -}; -export declare function ResizeHandler(container: HTMLElement, eventHandler: EventHandlerType, ownerWindow: WindowType, slides: HTMLElement[], axis: AxisType, watchResize: ResizeHandlerOptionType, nodeRects: NodeRectsType): ResizeHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts deleted file mode 100644 index 1d669d8e4d..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBody.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Vector1DType } from './Vector1d.js'; -export type ScrollBodyType = { - direction: () => number; - duration: () => number; - velocity: () => number; - seek: () => ScrollBodyType; - settled: () => boolean; - useBaseFriction: () => ScrollBodyType; - useBaseDuration: () => ScrollBodyType; - useFriction: (n: number) => ScrollBodyType; - useDuration: (n: number) => ScrollBodyType; -}; -export declare function ScrollBody(location: Vector1DType, offsetLocation: Vector1DType, previousLocation: Vector1DType, target: Vector1DType, baseDuration: number, baseFriction: number): ScrollBodyType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts deleted file mode 100644 index 89e28e64fc..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollBounds.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LimitType } from './Limit.js'; -import { ScrollBodyType } from './ScrollBody.js'; -import { Vector1DType } from './Vector1d.js'; -import { PercentOfViewType } from './PercentOfView.js'; -export type ScrollBoundsType = { - shouldConstrain: () => boolean; - constrain: (pointerDown: boolean) => void; - toggleActive: (active: boolean) => void; -}; -export declare function ScrollBounds(limit: LimitType, location: Vector1DType, target: Vector1DType, scrollBody: ScrollBodyType, percentOfView: PercentOfViewType): ScrollBoundsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts deleted file mode 100644 index e0b6cd3d02..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollContain.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LimitType } from './Limit.js'; -export type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'; -export type ScrollContainType = { - snapsContained: number[]; - scrollContainLimit: LimitType; -}; -export declare function ScrollContain(viewSize: number, contentSize: number, snapsAligned: number[], containScroll: ScrollContainOptionType, pixelTolerance: number): ScrollContainType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts deleted file mode 100644 index fbf0c96bf6..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLimit.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LimitType } from './Limit.js'; -export type ScrollLimitType = { - limit: LimitType; -}; -export declare function ScrollLimit(contentSize: number, scrollSnaps: number[], loop: boolean): ScrollLimitType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts deleted file mode 100644 index c4dd39bb42..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollLooper.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { LimitType } from './Limit.js'; -import { Vector1DType } from './Vector1d.js'; -export type ScrollLooperType = { - loop: (direction: number) => void; -}; -export declare function ScrollLooper(contentSize: number, limit: LimitType, location: Vector1DType, vectors: Vector1DType[]): ScrollLooperType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts deleted file mode 100644 index 8c59e31b7d..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollProgress.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LimitType } from './Limit.js'; -export type ScrollProgressType = { - get: (n: number) => number; -}; -export declare function ScrollProgress(limit: LimitType): ScrollProgressType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts deleted file mode 100644 index 01754a1a73..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollSnaps.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AlignmentType } from './Alignment.js'; -import { AxisType } from './Axis.js'; -import { NodeRectType } from './NodeRects.js'; -import { SlidesToScrollType } from './SlidesToScroll.js'; -export type ScrollSnapsType = { - snaps: number[]; - snapsAligned: number[]; -}; -export declare function ScrollSnaps(axis: AxisType, alignment: AlignmentType, containerRect: NodeRectType, slideRects: NodeRectType[], slidesToScroll: SlidesToScrollType): ScrollSnapsType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts deleted file mode 100644 index 5ab5188bf2..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTarget.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { LimitType } from './Limit.js'; -import { Vector1DType } from './Vector1d.js'; -export type TargetType = { - distance: number; - index: number; -}; -export type ScrollTargetType = { - byIndex: (target: number, direction: number) => TargetType; - byDistance: (force: number, snap: boolean) => TargetType; - shortcut: (target: number, direction: number) => number; -}; -export declare function ScrollTarget(loop: boolean, scrollSnaps: number[], contentSize: number, limit: LimitType, targetVector: Vector1DType): ScrollTargetType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts deleted file mode 100644 index 115603c2db..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/ScrollTo.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { AnimationsType } from './Animations.js'; -import { CounterType } from './Counter.js'; -import { EventHandlerType } from './EventHandler.js'; -import { ScrollBodyType } from './ScrollBody.js'; -import { ScrollTargetType } from './ScrollTarget.js'; -import { Vector1DType } from './Vector1d.js'; -export type ScrollToType = { - distance: (n: number, snap: boolean) => void; - index: (n: number, direction: number) => void; -}; -export declare function ScrollTo(animation: AnimationsType, indexCurrent: CounterType, indexPrevious: CounterType, scrollBody: ScrollBodyType, scrollTarget: ScrollTargetType, targetVector: Vector1DType, eventHandler: EventHandlerType): ScrollToType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts deleted file mode 100644 index 508a3bf745..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideFocus.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel.js'; -import { EventHandlerType } from './EventHandler.js'; -import { EventStoreType } from './EventStore.js'; -import { ScrollBodyType } from './ScrollBody.js'; -import { ScrollToType } from './ScrollTo.js'; -import { SlideRegistryType } from './SlideRegistry.js'; -type FocusHandlerCallbackType = (emblaApi: EmblaCarouselType, evt: FocusEvent) => boolean | void; -export type FocusHandlerOptionType = boolean | FocusHandlerCallbackType; -export type SlideFocusType = { - init: (emblaApi: EmblaCarouselType) => void; -}; -export declare function SlideFocus(root: HTMLElement, slides: HTMLElement[], slideRegistry: SlideRegistryType['slideRegistry'], scrollTo: ScrollToType, scrollBody: ScrollBodyType, eventStore: EventStoreType, eventHandler: EventHandlerType, watchFocus: FocusHandlerOptionType): SlideFocusType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts deleted file mode 100644 index d44fe20758..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideLooper.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AxisType } from './Axis.js'; -import { Vector1DType } from './Vector1d.js'; -import { TranslateType } from './Translate.js'; -type LoopPointType = { - loopPoint: number; - index: number; - translate: TranslateType; - slideLocation: Vector1DType; - target: () => number; -}; -export type SlideLooperType = { - canLoop: () => boolean; - clear: () => void; - loop: () => void; - loopPoints: LoopPointType[]; -}; -export declare function SlideLooper(axis: AxisType, viewSize: number, contentSize: number, slideSizes: number[], slideSizesWithGaps: number[], snaps: number[], scrollSnaps: number[], location: Vector1DType, slides: HTMLElement[]): SlideLooperType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts deleted file mode 100644 index a2cba13562..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideRegistry.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LimitType } from './Limit.js'; -import { ScrollContainOptionType } from './ScrollContain.js'; -import { SlidesToScrollType } from './SlidesToScroll.js'; -export type SlideRegistryType = { - slideRegistry: number[][]; -}; -export declare function SlideRegistry(containSnaps: boolean, containScroll: ScrollContainOptionType, scrollSnaps: number[], scrollContainLimit: LimitType, slidesToScroll: SlidesToScrollType, slideIndexes: number[]): SlideRegistryType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts deleted file mode 100644 index 07184d8707..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlideSizes.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AxisType } from './Axis.js'; -import { NodeRectType } from './NodeRects.js'; -import { WindowType } from './utils.js'; -export type SlideSizesType = { - slideSizes: number[]; - slideSizesWithGaps: number[]; - startGap: number; - endGap: number; -}; -export declare function SlideSizes(axis: AxisType, containerRect: NodeRectType, slideRects: NodeRectType[], slides: HTMLElement[], readEdgeGap: boolean, ownerWindow: WindowType): SlideSizesType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts deleted file mode 100644 index 81d625b0dd..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesHandler.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { EmblaCarouselType } from './EmblaCarousel.js'; -import { EventHandlerType } from './EventHandler.js'; -type SlidesHandlerCallbackType = (emblaApi: EmblaCarouselType, mutations: MutationRecord[]) => boolean | void; -export type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType; -export type SlidesHandlerType = { - init: (emblaApi: EmblaCarouselType) => void; - destroy: () => void; -}; -export declare function SlidesHandler(container: HTMLElement, eventHandler: EventHandlerType, watchSlides: SlidesHandlerOptionType): SlidesHandlerType; -export {}; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts deleted file mode 100644 index 0eca739360..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesInView.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { EventHandlerType } from './EventHandler.js'; -export type SlidesInViewOptionsType = IntersectionObserverInit['threshold']; -export type SlidesInViewType = { - init: () => void; - destroy: () => void; - get: (inView?: boolean) => number[]; -}; -export declare function SlidesInView(container: HTMLElement, slides: HTMLElement[], eventHandler: EventHandlerType, threshold: SlidesInViewOptionsType): SlidesInViewType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts deleted file mode 100644 index fd2cafc003..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/SlidesToScroll.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AxisType } from './Axis.js'; -import { NodeRectType } from './NodeRects.js'; -export type SlidesToScrollOptionType = 'auto' | number; -export type SlidesToScrollType = { - groupSlides: (array: Type[]) => Type[][]; -}; -export declare function SlidesToScroll(axis: AxisType, viewSize: number, slidesToScroll: SlidesToScrollOptionType, loop: boolean, containerRect: NodeRectType, slideRects: NodeRectType[], startGap: number, endGap: number, pixelTolerance: number): SlidesToScrollType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts deleted file mode 100644 index 5807eae5fd..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Translate.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AxisType } from './Axis.js'; -export type TranslateType = { - clear: () => void; - to: (target: number) => void; - toggleActive: (active: boolean) => void; -}; -export declare function Translate(axis: AxisType, container: HTMLElement): TranslateType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts deleted file mode 100644 index 9ff303c96b..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/Vector1d.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Vector1DType = { - get: () => number; - set: (n: Vector1DType | number) => void; - add: (n: Vector1DType | number) => void; - subtract: (n: Vector1DType | number) => void; -}; -export declare function Vector1D(initialValue: number): Vector1DType; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts deleted file mode 100644 index 554062f72e..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/components/utils.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { PointerEventType } from './DragTracker.js'; -export type WindowType = Window & typeof globalThis; -export declare function isNumber(subject: unknown): subject is number; -export declare function isString(subject: unknown): subject is string; -export declare function isBoolean(subject: unknown): subject is boolean; -export declare function isObject(subject: unknown): subject is Record; -export declare function mathAbs(n: number): number; -export declare function mathSign(n: number): number; -export declare function deltaAbs(valueB: number, valueA: number): number; -export declare function factorAbs(valueB: number, valueA: number): number; -export declare function roundToTwoDecimals(num: number): number; -export declare function arrayKeys(array: Type[]): number[]; -export declare function arrayLast(array: Type[]): Type; -export declare function arrayLastIndex(array: Type[]): number; -export declare function arrayIsLastIndex(array: Type[], index: number): boolean; -export declare function arrayFromNumber(n: number, startAt?: number): number[]; -export declare function objectKeys(object: Type): string[]; -export declare function objectsMergeDeep(objectA: Record, objectB: Record): Record; -export declare function isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js deleted file mode 100644 index 5b0cee64a0..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js +++ /dev/null @@ -1,1670 +0,0 @@ -function isNumber(subject) { - return typeof subject === 'number'; -} -function isString(subject) { - return typeof subject === 'string'; -} -function isBoolean(subject) { - return typeof subject === 'boolean'; -} -function isObject(subject) { - return Object.prototype.toString.call(subject) === '[object Object]'; -} -function mathAbs(n) { - return Math.abs(n); -} -function mathSign(n) { - return Math.sign(n); -} -function deltaAbs(valueB, valueA) { - return mathAbs(valueB - valueA); -} -function factorAbs(valueB, valueA) { - if (valueB === 0 || valueA === 0) return 0; - if (mathAbs(valueB) <= mathAbs(valueA)) return 0; - const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA)); - return mathAbs(diff / valueB); -} -function roundToTwoDecimals(num) { - return Math.round(num * 100) / 100; -} -function arrayKeys(array) { - return objectKeys(array).map(Number); -} -function arrayLast(array) { - return array[arrayLastIndex(array)]; -} -function arrayLastIndex(array) { - return Math.max(0, array.length - 1); -} -function arrayIsLastIndex(array, index) { - return index === arrayLastIndex(array); -} -function arrayFromNumber(n, startAt = 0) { - return Array.from(Array(n), (_, i) => startAt + i); -} -function objectKeys(object) { - return Object.keys(object); -} -function objectsMergeDeep(objectA, objectB) { - return [objectA, objectB].reduce((mergedObjects, currentObject) => { - objectKeys(currentObject).forEach(key => { - const valueA = mergedObjects[key]; - const valueB = currentObject[key]; - const areObjects = isObject(valueA) && isObject(valueB); - mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB; - }); - return mergedObjects; - }, {}); -} -function isMouseEvent(evt, ownerWindow) { - return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent; -} - -function Alignment(align, viewSize) { - const predefined = { - start, - center, - end - }; - function start() { - return 0; - } - function center(n) { - return end(n) / 2; - } - function end(n) { - return viewSize - n; - } - function measure(n, index) { - if (isString(align)) return predefined[align](n); - return align(viewSize, n, index); - } - const self = { - measure - }; - return self; -} - -function EventStore() { - let listeners = []; - function add(node, type, handler, options = { - passive: true - }) { - let removeListener; - if ('addEventListener' in node) { - node.addEventListener(type, handler, options); - removeListener = () => node.removeEventListener(type, handler, options); - } else { - const legacyMediaQueryList = node; - legacyMediaQueryList.addListener(handler); - removeListener = () => legacyMediaQueryList.removeListener(handler); - } - listeners.push(removeListener); - return self; - } - function clear() { - listeners = listeners.filter(remove => remove()); - } - const self = { - add, - clear - }; - return self; -} - -function Animations(ownerDocument, ownerWindow, update, render) { - const documentVisibleHandler = EventStore(); - const fixedTimeStep = 1000 / 60; - let lastTimeStamp = null; - let accumulatedTime = 0; - let animationId = 0; - function init() { - documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => { - if (ownerDocument.hidden) reset(); - }); - } - function destroy() { - stop(); - documentVisibleHandler.clear(); - } - function animate(timeStamp) { - if (!animationId) return; - if (!lastTimeStamp) { - lastTimeStamp = timeStamp; - update(); - update(); - } - const timeElapsed = timeStamp - lastTimeStamp; - lastTimeStamp = timeStamp; - accumulatedTime += timeElapsed; - while (accumulatedTime >= fixedTimeStep) { - update(); - accumulatedTime -= fixedTimeStep; - } - const alpha = accumulatedTime / fixedTimeStep; - render(alpha); - if (animationId) { - animationId = ownerWindow.requestAnimationFrame(animate); - } - } - function start() { - if (animationId) return; - animationId = ownerWindow.requestAnimationFrame(animate); - } - function stop() { - ownerWindow.cancelAnimationFrame(animationId); - lastTimeStamp = null; - accumulatedTime = 0; - animationId = 0; - } - function reset() { - lastTimeStamp = null; - accumulatedTime = 0; - } - const self = { - init, - destroy, - start, - stop, - update, - render - }; - return self; -} - -function Axis(axis, contentDirection) { - const isRightToLeft = contentDirection === 'rtl'; - const isVertical = axis === 'y'; - const scroll = isVertical ? 'y' : 'x'; - const cross = isVertical ? 'x' : 'y'; - const sign = !isVertical && isRightToLeft ? -1 : 1; - const startEdge = getStartEdge(); - const endEdge = getEndEdge(); - function measureSize(nodeRect) { - const { - height, - width - } = nodeRect; - return isVertical ? height : width; - } - function getStartEdge() { - if (isVertical) return 'top'; - return isRightToLeft ? 'right' : 'left'; - } - function getEndEdge() { - if (isVertical) return 'bottom'; - return isRightToLeft ? 'left' : 'right'; - } - function direction(n) { - return n * sign; - } - const self = { - scroll, - cross, - startEdge, - endEdge, - measureSize, - direction - }; - return self; -} - -function Limit(min = 0, max = 0) { - const length = mathAbs(min - max); - function reachedMin(n) { - return n < min; - } - function reachedMax(n) { - return n > max; - } - function reachedAny(n) { - return reachedMin(n) || reachedMax(n); - } - function constrain(n) { - if (!reachedAny(n)) return n; - return reachedMin(n) ? min : max; - } - function removeOffset(n) { - if (!length) return n; - return n - length * Math.ceil((n - max) / length); - } - const self = { - length, - max, - min, - constrain, - reachedAny, - reachedMax, - reachedMin, - removeOffset - }; - return self; -} - -function Counter(max, start, loop) { - const { - constrain - } = Limit(0, max); - const loopEnd = max + 1; - let counter = withinLimit(start); - function withinLimit(n) { - return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd); - } - function get() { - return counter; - } - function set(n) { - counter = withinLimit(n); - return self; - } - function add(n) { - return clone().set(get() + n); - } - function clone() { - return Counter(max, get(), loop); - } - const self = { - get, - set, - add, - clone - }; - return self; -} - -function DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) { - const { - cross: crossAxis, - direction - } = axis; - const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']; - const nonPassiveEvent = { - passive: false - }; - const initEvents = EventStore(); - const dragEvents = EventStore(); - const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20)); - const snapForceBoost = { - mouse: 300, - touch: 400 - }; - const freeForceBoost = { - mouse: 500, - touch: 600 - }; - const baseSpeed = dragFree ? 43 : 25; - let isMoving = false; - let startScroll = 0; - let startCross = 0; - let pointerIsDown = false; - let preventScroll = false; - let preventClick = false; - let isMouse = false; - function init(emblaApi) { - if (!watchDrag) return; - function downIfAllowed(evt) { - if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt); - } - const node = rootNode; - initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true); - } - function destroy() { - initEvents.clear(); - dragEvents.clear(); - } - function addDragEvents() { - const node = isMouse ? ownerDocument : rootNode; - dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up); - } - function isFocusNode(node) { - const nodeName = node.nodeName || ''; - return focusNodes.includes(nodeName); - } - function forceBoost() { - const boost = dragFree ? freeForceBoost : snapForceBoost; - const type = isMouse ? 'mouse' : 'touch'; - return boost[type]; - } - function allowedForce(force, targetChanged) { - const next = index.add(mathSign(force) * -1); - const baseForce = scrollTarget.byDistance(force, !dragFree).distance; - if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce; - if (skipSnaps && targetChanged) return baseForce * 0.5; - return scrollTarget.byIndex(next.get(), 0).distance; - } - function down(evt) { - const isMouseEvt = isMouseEvent(evt, ownerWindow); - isMouse = isMouseEvt; - preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving; - isMoving = deltaAbs(target.get(), location.get()) >= 2; - if (isMouseEvt && evt.button !== 0) return; - if (isFocusNode(evt.target)) return; - pointerIsDown = true; - dragTracker.pointerDown(evt); - scrollBody.useFriction(0).useDuration(0); - target.set(location); - addDragEvents(); - startScroll = dragTracker.readPoint(evt); - startCross = dragTracker.readPoint(evt, crossAxis); - eventHandler.emit('pointerDown'); - } - function move(evt) { - const isTouchEvt = !isMouseEvent(evt, ownerWindow); - if (isTouchEvt && evt.touches.length >= 2) return up(evt); - const lastScroll = dragTracker.readPoint(evt); - const lastCross = dragTracker.readPoint(evt, crossAxis); - const diffScroll = deltaAbs(lastScroll, startScroll); - const diffCross = deltaAbs(lastCross, startCross); - if (!preventScroll && !isMouse) { - if (!evt.cancelable) return up(evt); - preventScroll = diffScroll > diffCross; - if (!preventScroll) return up(evt); - } - const diff = dragTracker.pointerMove(evt); - if (diffScroll > dragThreshold) preventClick = true; - scrollBody.useFriction(0.3).useDuration(0.75); - animation.start(); - target.add(direction(diff)); - evt.preventDefault(); - } - function up(evt) { - const currentLocation = scrollTarget.byDistance(0, false); - const targetChanged = currentLocation.index !== index.get(); - const rawForce = dragTracker.pointerUp(evt) * forceBoost(); - const force = allowedForce(direction(rawForce), targetChanged); - const forceFactor = factorAbs(rawForce, force); - const speed = baseSpeed - 10 * forceFactor; - const friction = baseFriction + forceFactor / 50; - preventScroll = false; - pointerIsDown = false; - dragEvents.clear(); - scrollBody.useDuration(speed).useFriction(friction); - scrollTo.distance(force, !dragFree); - isMouse = false; - eventHandler.emit('pointerUp'); - } - function click(evt) { - if (preventClick) { - evt.stopPropagation(); - evt.preventDefault(); - preventClick = false; - } - } - function pointerDown() { - return pointerIsDown; - } - const self = { - init, - destroy, - pointerDown - }; - return self; -} - -function DragTracker(axis, ownerWindow) { - const logInterval = 170; - let startEvent; - let lastEvent; - function readTime(evt) { - return evt.timeStamp; - } - function readPoint(evt, evtAxis) { - const property = evtAxis || axis.scroll; - const coord = `client${property === 'x' ? 'X' : 'Y'}`; - return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]; - } - function pointerDown(evt) { - startEvent = evt; - lastEvent = evt; - return readPoint(evt); - } - function pointerMove(evt) { - const diff = readPoint(evt) - readPoint(lastEvent); - const expired = readTime(evt) - readTime(startEvent) > logInterval; - lastEvent = evt; - if (expired) startEvent = evt; - return diff; - } - function pointerUp(evt) { - if (!startEvent || !lastEvent) return 0; - const diffDrag = readPoint(lastEvent) - readPoint(startEvent); - const diffTime = readTime(evt) - readTime(startEvent); - const expired = readTime(evt) - readTime(lastEvent) > logInterval; - const force = diffDrag / diffTime; - const isFlick = diffTime && !expired && mathAbs(force) > 0.1; - return isFlick ? force : 0; - } - const self = { - pointerDown, - pointerMove, - pointerUp, - readPoint - }; - return self; -} - -function NodeRects() { - function measure(node) { - const { - offsetTop, - offsetLeft, - offsetWidth, - offsetHeight - } = node; - const offset = { - top: offsetTop, - right: offsetLeft + offsetWidth, - bottom: offsetTop + offsetHeight, - left: offsetLeft, - width: offsetWidth, - height: offsetHeight - }; - return offset; - } - const self = { - measure - }; - return self; -} - -function PercentOfView(viewSize) { - function measure(n) { - return viewSize * (n / 100); - } - const self = { - measure - }; - return self; -} - -function ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) { - const observeNodes = [container].concat(slides); - let resizeObserver; - let containerSize; - let slideSizes = []; - let destroyed = false; - function readSize(node) { - return axis.measureSize(nodeRects.measure(node)); - } - function init(emblaApi) { - if (!watchResize) return; - containerSize = readSize(container); - slideSizes = slides.map(readSize); - function defaultCallback(entries) { - for (const entry of entries) { - if (destroyed) return; - const isContainer = entry.target === container; - const slideIndex = slides.indexOf(entry.target); - const lastSize = isContainer ? containerSize : slideSizes[slideIndex]; - const newSize = readSize(isContainer ? container : slides[slideIndex]); - const diffSize = mathAbs(newSize - lastSize); - if (diffSize >= 0.5) { - emblaApi.reInit(); - eventHandler.emit('resize'); - break; - } - } - } - resizeObserver = new ResizeObserver(entries => { - if (isBoolean(watchResize) || watchResize(emblaApi, entries)) { - defaultCallback(entries); - } - }); - ownerWindow.requestAnimationFrame(() => { - observeNodes.forEach(node => resizeObserver.observe(node)); - }); - } - function destroy() { - destroyed = true; - if (resizeObserver) resizeObserver.disconnect(); - } - const self = { - init, - destroy - }; - return self; -} - -function ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) { - let scrollVelocity = 0; - let scrollDirection = 0; - let scrollDuration = baseDuration; - let scrollFriction = baseFriction; - let rawLocation = location.get(); - let rawLocationPrevious = 0; - function seek() { - const displacement = target.get() - location.get(); - const isInstant = !scrollDuration; - let scrollDistance = 0; - if (isInstant) { - scrollVelocity = 0; - previousLocation.set(target); - location.set(target); - scrollDistance = displacement; - } else { - previousLocation.set(location); - scrollVelocity += displacement / scrollDuration; - scrollVelocity *= scrollFriction; - rawLocation += scrollVelocity; - location.add(scrollVelocity); - scrollDistance = rawLocation - rawLocationPrevious; - } - scrollDirection = mathSign(scrollDistance); - rawLocationPrevious = rawLocation; - return self; - } - function settled() { - const diff = target.get() - offsetLocation.get(); - return mathAbs(diff) < 0.001; - } - function duration() { - return scrollDuration; - } - function direction() { - return scrollDirection; - } - function velocity() { - return scrollVelocity; - } - function useBaseDuration() { - return useDuration(baseDuration); - } - function useBaseFriction() { - return useFriction(baseFriction); - } - function useDuration(n) { - scrollDuration = n; - return self; - } - function useFriction(n) { - scrollFriction = n; - return self; - } - const self = { - direction, - duration, - velocity, - seek, - settled, - useBaseFriction, - useBaseDuration, - useFriction, - useDuration - }; - return self; -} - -function ScrollBounds(limit, location, target, scrollBody, percentOfView) { - const pullBackThreshold = percentOfView.measure(10); - const edgeOffsetTolerance = percentOfView.measure(50); - const frictionLimit = Limit(0.1, 0.99); - let disabled = false; - function shouldConstrain() { - if (disabled) return false; - if (!limit.reachedAny(target.get())) return false; - if (!limit.reachedAny(location.get())) return false; - return true; - } - function constrain(pointerDown) { - if (!shouldConstrain()) return; - const edge = limit.reachedMin(location.get()) ? 'min' : 'max'; - const diffToEdge = mathAbs(limit[edge] - location.get()); - const diffToTarget = target.get() - location.get(); - const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance); - target.subtract(diffToTarget * friction); - if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) { - target.set(limit.constrain(target.get())); - scrollBody.useDuration(25).useBaseFriction(); - } - } - function toggleActive(active) { - disabled = !active; - } - const self = { - shouldConstrain, - constrain, - toggleActive - }; - return self; -} - -function ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) { - const scrollBounds = Limit(-contentSize + viewSize, 0); - const snapsBounded = measureBounded(); - const scrollContainLimit = findScrollContainLimit(); - const snapsContained = measureContained(); - function usePixelTolerance(bound, snap) { - return deltaAbs(bound, snap) <= 1; - } - function findScrollContainLimit() { - const startSnap = snapsBounded[0]; - const endSnap = arrayLast(snapsBounded); - const min = snapsBounded.lastIndexOf(startSnap); - const max = snapsBounded.indexOf(endSnap) + 1; - return Limit(min, max); - } - function measureBounded() { - return snapsAligned.map((snapAligned, index) => { - const { - min, - max - } = scrollBounds; - const snap = scrollBounds.constrain(snapAligned); - const isFirst = !index; - const isLast = arrayIsLastIndex(snapsAligned, index); - if (isFirst) return max; - if (isLast) return min; - if (usePixelTolerance(min, snap)) return min; - if (usePixelTolerance(max, snap)) return max; - return snap; - }).map(scrollBound => parseFloat(scrollBound.toFixed(3))); - } - function measureContained() { - if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]; - if (containScroll === 'keepSnaps') return snapsBounded; - const { - min, - max - } = scrollContainLimit; - return snapsBounded.slice(min, max); - } - const self = { - snapsContained, - scrollContainLimit - }; - return self; -} - -function ScrollLimit(contentSize, scrollSnaps, loop) { - const max = scrollSnaps[0]; - const min = loop ? max - contentSize : arrayLast(scrollSnaps); - const limit = Limit(min, max); - const self = { - limit - }; - return self; -} - -function ScrollLooper(contentSize, limit, location, vectors) { - const jointSafety = 0.1; - const min = limit.min + jointSafety; - const max = limit.max + jointSafety; - const { - reachedMin, - reachedMax - } = Limit(min, max); - function shouldLoop(direction) { - if (direction === 1) return reachedMax(location.get()); - if (direction === -1) return reachedMin(location.get()); - return false; - } - function loop(direction) { - if (!shouldLoop(direction)) return; - const loopDistance = contentSize * (direction * -1); - vectors.forEach(v => v.add(loopDistance)); - } - const self = { - loop - }; - return self; -} - -function ScrollProgress(limit) { - const { - max, - length - } = limit; - function get(n) { - const currentLocation = n - max; - return length ? currentLocation / -length : 0; - } - const self = { - get - }; - return self; -} - -function ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) { - const { - startEdge, - endEdge - } = axis; - const { - groupSlides - } = slidesToScroll; - const alignments = measureSizes().map(alignment.measure); - const snaps = measureUnaligned(); - const snapsAligned = measureAligned(); - function measureSizes() { - return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs); - } - function measureUnaligned() { - return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap)); - } - function measureAligned() { - return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]); - } - const self = { - snaps, - snapsAligned - }; - return self; -} - -function SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) { - const { - groupSlides - } = slidesToScroll; - const { - min, - max - } = scrollContainLimit; - const slideRegistry = createSlideRegistry(); - function createSlideRegistry() { - const groupedSlideIndexes = groupSlides(slideIndexes); - const doNotContain = !containSnaps || containScroll === 'keepSnaps'; - if (scrollSnaps.length === 1) return [slideIndexes]; - if (doNotContain) return groupedSlideIndexes; - return groupedSlideIndexes.slice(min, max).map((group, index, groups) => { - const isFirst = !index; - const isLast = arrayIsLastIndex(groups, index); - if (isFirst) { - const range = arrayLast(groups[0]) + 1; - return arrayFromNumber(range); - } - if (isLast) { - const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1; - return arrayFromNumber(range, arrayLast(groups)[0]); - } - return group; - }); - } - const self = { - slideRegistry - }; - return self; -} - -function ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) { - const { - reachedAny, - removeOffset, - constrain - } = limit; - function minDistance(distances) { - return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]; - } - function findTargetSnap(target) { - const distance = loop ? removeOffset(target) : constrain(target); - const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({ - diff: shortcut(snap - distance, 0), - index - })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff)); - const { - index - } = ascDiffsToSnaps[0]; - return { - index, - distance - }; - } - function shortcut(target, direction) { - const targets = [target, target + contentSize, target - contentSize]; - if (!loop) return target; - if (!direction) return minDistance(targets); - const matchingTargets = targets.filter(t => mathSign(t) === direction); - if (matchingTargets.length) return minDistance(matchingTargets); - return arrayLast(targets) - contentSize; - } - function byIndex(index, direction) { - const diffToSnap = scrollSnaps[index] - targetVector.get(); - const distance = shortcut(diffToSnap, direction); - return { - index, - distance - }; - } - function byDistance(distance, snap) { - const target = targetVector.get() + distance; - const { - index, - distance: targetSnapDistance - } = findTargetSnap(target); - const reachedBound = !loop && reachedAny(target); - if (!snap || reachedBound) return { - index, - distance - }; - const diffToSnap = scrollSnaps[index] - targetSnapDistance; - const snapDistance = distance + shortcut(diffToSnap, 0); - return { - index, - distance: snapDistance - }; - } - const self = { - byDistance, - byIndex, - shortcut - }; - return self; -} - -function ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) { - function scrollTo(target) { - const distanceDiff = target.distance; - const indexDiff = target.index !== indexCurrent.get(); - targetVector.add(distanceDiff); - if (distanceDiff) { - if (scrollBody.duration()) { - animation.start(); - } else { - animation.update(); - animation.render(1); - animation.update(); - } - } - if (indexDiff) { - indexPrevious.set(indexCurrent.get()); - indexCurrent.set(target.index); - eventHandler.emit('select'); - } - } - function distance(n, snap) { - const target = scrollTarget.byDistance(n, snap); - scrollTo(target); - } - function index(n, direction) { - const targetIndex = indexCurrent.clone().set(n); - const target = scrollTarget.byIndex(targetIndex.get(), direction); - scrollTo(target); - } - const self = { - distance, - index - }; - return self; -} - -function SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) { - const focusListenerOptions = { - passive: true, - capture: true - }; - let lastTabPressTime = 0; - function init(emblaApi) { - if (!watchFocus) return; - function defaultCallback(index) { - const nowTime = new Date().getTime(); - const diffTime = nowTime - lastTabPressTime; - if (diffTime > 10) return; - eventHandler.emit('slideFocusStart'); - root.scrollLeft = 0; - const group = slideRegistry.findIndex(group => group.includes(index)); - if (!isNumber(group)) return; - scrollBody.useDuration(0); - scrollTo.index(group, 0); - eventHandler.emit('slideFocus'); - } - eventStore.add(document, 'keydown', registerTabPress, false); - slides.forEach((slide, slideIndex) => { - eventStore.add(slide, 'focus', evt => { - if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) { - defaultCallback(slideIndex); - } - }, focusListenerOptions); - }); - } - function registerTabPress(event) { - if (event.code === 'Tab') lastTabPressTime = new Date().getTime(); - } - const self = { - init - }; - return self; -} - -function Vector1D(initialValue) { - let value = initialValue; - function get() { - return value; - } - function set(n) { - value = normalizeInput(n); - } - function add(n) { - value += normalizeInput(n); - } - function subtract(n) { - value -= normalizeInput(n); - } - function normalizeInput(n) { - return isNumber(n) ? n : n.get(); - } - const self = { - get, - set, - add, - subtract - }; - return self; -} - -function Translate(axis, container) { - const translate = axis.scroll === 'x' ? x : y; - const containerStyle = container.style; - let previousTarget = null; - let disabled = false; - function x(n) { - return `translate3d(${n}px,0px,0px)`; - } - function y(n) { - return `translate3d(0px,${n}px,0px)`; - } - function to(target) { - if (disabled) return; - const newTarget = roundToTwoDecimals(axis.direction(target)); - if (newTarget === previousTarget) return; - containerStyle.transform = translate(newTarget); - previousTarget = newTarget; - } - function toggleActive(active) { - disabled = !active; - } - function clear() { - if (disabled) return; - containerStyle.transform = ''; - if (!container.getAttribute('style')) container.removeAttribute('style'); - } - const self = { - clear, - to, - toggleActive - }; - return self; -} - -function SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) { - const roundingSafety = 0.5; - const ascItems = arrayKeys(slideSizesWithGaps); - const descItems = arrayKeys(slideSizesWithGaps).reverse(); - const loopPoints = startPoints().concat(endPoints()); - function removeSlideSizes(indexes, from) { - return indexes.reduce((a, i) => { - return a - slideSizesWithGaps[i]; - }, from); - } - function slidesInGap(indexes, gap) { - return indexes.reduce((a, i) => { - const remainingGap = removeSlideSizes(a, gap); - return remainingGap > 0 ? a.concat([i]) : a; - }, []); - } - function findSlideBounds(offset) { - return snaps.map((snap, index) => ({ - start: snap - slideSizes[index] + roundingSafety + offset, - end: snap + viewSize - roundingSafety + offset - })); - } - function findLoopPoints(indexes, offset, isEndEdge) { - const slideBounds = findSlideBounds(offset); - return indexes.map(index => { - const initial = isEndEdge ? 0 : -contentSize; - const altered = isEndEdge ? contentSize : 0; - const boundEdge = isEndEdge ? 'end' : 'start'; - const loopPoint = slideBounds[index][boundEdge]; - return { - index, - loopPoint, - slideLocation: Vector1D(-1), - translate: Translate(axis, slides[index]), - target: () => location.get() > loopPoint ? initial : altered - }; - }); - } - function startPoints() { - const gap = scrollSnaps[0]; - const indexes = slidesInGap(descItems, gap); - return findLoopPoints(indexes, contentSize, false); - } - function endPoints() { - const gap = viewSize - scrollSnaps[0] - 1; - const indexes = slidesInGap(ascItems, gap); - return findLoopPoints(indexes, -contentSize, true); - } - function canLoop() { - return loopPoints.every(({ - index - }) => { - const otherIndexes = ascItems.filter(i => i !== index); - return removeSlideSizes(otherIndexes, viewSize) <= 0.1; - }); - } - function loop() { - loopPoints.forEach(loopPoint => { - const { - target, - translate, - slideLocation - } = loopPoint; - const shiftLocation = target(); - if (shiftLocation === slideLocation.get()) return; - translate.to(shiftLocation); - slideLocation.set(shiftLocation); - }); - } - function clear() { - loopPoints.forEach(loopPoint => loopPoint.translate.clear()); - } - const self = { - canLoop, - clear, - loop, - loopPoints - }; - return self; -} - -function SlidesHandler(container, eventHandler, watchSlides) { - let mutationObserver; - let destroyed = false; - function init(emblaApi) { - if (!watchSlides) return; - function defaultCallback(mutations) { - for (const mutation of mutations) { - if (mutation.type === 'childList') { - emblaApi.reInit(); - eventHandler.emit('slidesChanged'); - break; - } - } - } - mutationObserver = new MutationObserver(mutations => { - if (destroyed) return; - if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) { - defaultCallback(mutations); - } - }); - mutationObserver.observe(container, { - childList: true - }); - } - function destroy() { - if (mutationObserver) mutationObserver.disconnect(); - destroyed = true; - } - const self = { - init, - destroy - }; - return self; -} - -function SlidesInView(container, slides, eventHandler, threshold) { - const intersectionEntryMap = {}; - let inViewCache = null; - let notInViewCache = null; - let intersectionObserver; - let destroyed = false; - function init() { - intersectionObserver = new IntersectionObserver(entries => { - if (destroyed) return; - entries.forEach(entry => { - const index = slides.indexOf(entry.target); - intersectionEntryMap[index] = entry; - }); - inViewCache = null; - notInViewCache = null; - eventHandler.emit('slidesInView'); - }, { - root: container.parentElement, - threshold - }); - slides.forEach(slide => intersectionObserver.observe(slide)); - } - function destroy() { - if (intersectionObserver) intersectionObserver.disconnect(); - destroyed = true; - } - function createInViewList(inView) { - return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => { - const index = parseInt(slideIndex); - const { - isIntersecting - } = intersectionEntryMap[index]; - const inViewMatch = inView && isIntersecting; - const notInViewMatch = !inView && !isIntersecting; - if (inViewMatch || notInViewMatch) list.push(index); - return list; - }, []); - } - function get(inView = true) { - if (inView && inViewCache) return inViewCache; - if (!inView && notInViewCache) return notInViewCache; - const slideIndexes = createInViewList(inView); - if (inView) inViewCache = slideIndexes; - if (!inView) notInViewCache = slideIndexes; - return slideIndexes; - } - const self = { - init, - destroy, - get - }; - return self; -} - -function SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) { - const { - measureSize, - startEdge, - endEdge - } = axis; - const withEdgeGap = slideRects[0] && readEdgeGap; - const startGap = measureStartGap(); - const endGap = measureEndGap(); - const slideSizes = slideRects.map(measureSize); - const slideSizesWithGaps = measureWithGaps(); - function measureStartGap() { - if (!withEdgeGap) return 0; - const slideRect = slideRects[0]; - return mathAbs(containerRect[startEdge] - slideRect[startEdge]); - } - function measureEndGap() { - if (!withEdgeGap) return 0; - const style = ownerWindow.getComputedStyle(arrayLast(slides)); - return parseFloat(style.getPropertyValue(`margin-${endEdge}`)); - } - function measureWithGaps() { - return slideRects.map((rect, index, rects) => { - const isFirst = !index; - const isLast = arrayIsLastIndex(rects, index); - if (isFirst) return slideSizes[index] + startGap; - if (isLast) return slideSizes[index] + endGap; - return rects[index + 1][startEdge] - rect[startEdge]; - }).map(mathAbs); - } - const self = { - slideSizes, - slideSizesWithGaps, - startGap, - endGap - }; - return self; -} - -function SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) { - const { - startEdge, - endEdge, - direction - } = axis; - const groupByNumber = isNumber(slidesToScroll); - function byNumber(array, groupSize) { - return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize)); - } - function bySize(array) { - if (!array.length) return []; - return arrayKeys(array).reduce((groups, rectB, index) => { - const rectA = arrayLast(groups) || 0; - const isFirst = rectA === 0; - const isLast = rectB === arrayLastIndex(array); - const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]; - const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]; - const gapA = !loop && isFirst ? direction(startGap) : 0; - const gapB = !loop && isLast ? direction(endGap) : 0; - const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA)); - if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB); - if (isLast) groups.push(array.length); - return groups; - }, []).map((currentSize, index, groups) => { - const previousSize = Math.max(groups[index - 1] || 0); - return array.slice(previousSize, currentSize); - }); - } - function groupSlides(array) { - return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array); - } - const self = { - groupSlides - }; - return self; -} - -function Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) { - // Options - const { - align, - axis: scrollAxis, - direction, - startIndex, - loop, - duration, - dragFree, - dragThreshold, - inViewThreshold, - slidesToScroll: groupSlides, - skipSnaps, - containScroll, - watchResize, - watchSlides, - watchDrag, - watchFocus - } = options; - // Measurements - const pixelTolerance = 2; - const nodeRects = NodeRects(); - const containerRect = nodeRects.measure(container); - const slideRects = slides.map(nodeRects.measure); - const axis = Axis(scrollAxis, direction); - const viewSize = axis.measureSize(containerRect); - const percentOfView = PercentOfView(viewSize); - const alignment = Alignment(align, viewSize); - const containSnaps = !loop && !!containScroll; - const readEdgeGap = loop || !!containScroll; - const { - slideSizes, - slideSizesWithGaps, - startGap, - endGap - } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow); - const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance); - const { - snaps, - snapsAligned - } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll); - const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps); - const { - snapsContained, - scrollContainLimit - } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance); - const scrollSnaps = containSnaps ? snapsContained : snapsAligned; - const { - limit - } = ScrollLimit(contentSize, scrollSnaps, loop); - // Indexes - const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop); - const indexPrevious = index.clone(); - const slideIndexes = arrayKeys(slides); - // Animation - const update = ({ - dragHandler, - scrollBody, - scrollBounds, - options: { - loop - } - }) => { - if (!loop) scrollBounds.constrain(dragHandler.pointerDown()); - scrollBody.seek(); - }; - const render = ({ - scrollBody, - translate, - location, - offsetLocation, - previousLocation, - scrollLooper, - slideLooper, - dragHandler, - animation, - eventHandler, - scrollBounds, - options: { - loop - } - }, alpha) => { - const shouldSettle = scrollBody.settled(); - const withinBounds = !scrollBounds.shouldConstrain(); - const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds; - const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown(); - if (hasSettledAndIdle) animation.stop(); - const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha); - offsetLocation.set(interpolatedLocation); - if (loop) { - scrollLooper.loop(scrollBody.direction()); - slideLooper.loop(); - } - translate.to(offsetLocation.get()); - if (hasSettledAndIdle) eventHandler.emit('settle'); - if (!hasSettled) eventHandler.emit('scroll'); - }; - const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha)); - // Shared - const friction = 0.68; - const startLocation = scrollSnaps[index.get()]; - const location = Vector1D(startLocation); - const previousLocation = Vector1D(startLocation); - const offsetLocation = Vector1D(startLocation); - const target = Vector1D(startLocation); - const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction); - const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target); - const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler); - const scrollProgress = ScrollProgress(limit); - const eventStore = EventStore(); - const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold); - const { - slideRegistry - } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes); - const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus); - // Engine - const engine = { - ownerDocument, - ownerWindow, - eventHandler, - containerRect, - slideRects, - animation, - axis, - dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag), - eventStore, - percentOfView, - index, - indexPrevious, - limit, - location, - offsetLocation, - previousLocation, - options, - resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects), - scrollBody, - scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView), - scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]), - scrollProgress, - scrollSnapList: scrollSnaps.map(scrollProgress.get), - scrollSnaps, - scrollTarget, - scrollTo, - slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides), - slideFocus, - slidesHandler: SlidesHandler(container, eventHandler, watchSlides), - slidesInView, - slideIndexes, - slideRegistry, - slidesToScroll, - target, - translate: Translate(axis, container) - }; - return engine; -} - -function EventHandler() { - let listeners = {}; - let api; - function init(emblaApi) { - api = emblaApi; - } - function getListeners(evt) { - return listeners[evt] || []; - } - function emit(evt) { - getListeners(evt).forEach(e => e(api, evt)); - return self; - } - function on(evt, cb) { - listeners[evt] = getListeners(evt).concat([cb]); - return self; - } - function off(evt, cb) { - listeners[evt] = getListeners(evt).filter(e => e !== cb); - return self; - } - function clear() { - listeners = {}; - } - const self = { - init, - emit, - off, - on, - clear - }; - return self; -} - -const defaultOptions = { - align: 'center', - axis: 'x', - container: null, - slides: null, - containScroll: 'trimSnaps', - direction: 'ltr', - slidesToScroll: 1, - inViewThreshold: 0, - breakpoints: {}, - dragFree: false, - dragThreshold: 10, - loop: false, - skipSnaps: false, - duration: 25, - startIndex: 0, - active: true, - watchDrag: true, - watchResize: true, - watchSlides: true, - watchFocus: true -}; - -function OptionsHandler(ownerWindow) { - function mergeOptions(optionsA, optionsB) { - return objectsMergeDeep(optionsA, optionsB || {}); - } - function optionsAtMedia(options) { - const optionsAtMedia = options.breakpoints || {}; - const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {}); - return mergeOptions(options, matchedMediaOptions); - } - function optionsMediaQueries(optionsList) { - return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia); - } - const self = { - mergeOptions, - optionsAtMedia, - optionsMediaQueries - }; - return self; -} - -function PluginsHandler(optionsHandler) { - let activePlugins = []; - function init(emblaApi, plugins) { - activePlugins = plugins.filter(({ - options - }) => optionsHandler.optionsAtMedia(options).active !== false); - activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler)); - return plugins.reduce((map, plugin) => Object.assign(map, { - [plugin.name]: plugin - }), {}); - } - function destroy() { - activePlugins = activePlugins.filter(plugin => plugin.destroy()); - } - const self = { - init, - destroy - }; - return self; -} - -function EmblaCarousel(root, userOptions, userPlugins) { - const ownerDocument = root.ownerDocument; - const ownerWindow = ownerDocument.defaultView; - const optionsHandler = OptionsHandler(ownerWindow); - const pluginsHandler = PluginsHandler(optionsHandler); - const mediaHandlers = EventStore(); - const eventHandler = EventHandler(); - const { - mergeOptions, - optionsAtMedia, - optionsMediaQueries - } = optionsHandler; - const { - on, - off, - emit - } = eventHandler; - const reInit = reActivate; - let destroyed = false; - let engine; - let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions); - let options = mergeOptions(optionsBase); - let pluginList = []; - let pluginApis; - let container; - let slides; - function storeElements() { - const { - container: userContainer, - slides: userSlides - } = options; - const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer; - container = customContainer || root.children[0]; - const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides; - slides = [].slice.call(customSlides || container.children); - } - function createEngine(options) { - const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler); - if (options.loop && !engine.slideLooper.canLoop()) { - const optionsWithoutLoop = Object.assign({}, options, { - loop: false - }); - return createEngine(optionsWithoutLoop); - } - return engine; - } - function activate(withOptions, withPlugins) { - if (destroyed) return; - optionsBase = mergeOptions(optionsBase, withOptions); - options = optionsAtMedia(optionsBase); - pluginList = withPlugins || pluginList; - storeElements(); - engine = createEngine(options); - optionsMediaQueries([optionsBase, ...pluginList.map(({ - options - }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate)); - if (!options.active) return; - engine.translate.to(engine.location.get()); - engine.animation.init(); - engine.slidesInView.init(); - engine.slideFocus.init(self); - engine.eventHandler.init(self); - engine.resizeHandler.init(self); - engine.slidesHandler.init(self); - if (engine.options.loop) engine.slideLooper.loop(); - if (container.offsetParent && slides.length) engine.dragHandler.init(self); - pluginApis = pluginsHandler.init(self, pluginList); - } - function reActivate(withOptions, withPlugins) { - const startIndex = selectedScrollSnap(); - deActivate(); - activate(mergeOptions({ - startIndex - }, withOptions), withPlugins); - eventHandler.emit('reInit'); - } - function deActivate() { - engine.dragHandler.destroy(); - engine.eventStore.clear(); - engine.translate.clear(); - engine.slideLooper.clear(); - engine.resizeHandler.destroy(); - engine.slidesHandler.destroy(); - engine.slidesInView.destroy(); - engine.animation.destroy(); - pluginsHandler.destroy(); - mediaHandlers.clear(); - } - function destroy() { - if (destroyed) return; - destroyed = true; - mediaHandlers.clear(); - deActivate(); - eventHandler.emit('destroy'); - eventHandler.clear(); - } - function scrollTo(index, jump, direction) { - if (!options.active || destroyed) return; - engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration); - engine.scrollTo.index(index, direction || 0); - } - function scrollNext(jump) { - const next = engine.index.add(1).get(); - scrollTo(next, jump, -1); - } - function scrollPrev(jump) { - const prev = engine.index.add(-1).get(); - scrollTo(prev, jump, 1); - } - function canScrollNext() { - const next = engine.index.add(1).get(); - return next !== selectedScrollSnap(); - } - function canScrollPrev() { - const prev = engine.index.add(-1).get(); - return prev !== selectedScrollSnap(); - } - function scrollSnapList() { - return engine.scrollSnapList; - } - function scrollProgress() { - return engine.scrollProgress.get(engine.offsetLocation.get()); - } - function selectedScrollSnap() { - return engine.index.get(); - } - function previousScrollSnap() { - return engine.indexPrevious.get(); - } - function slidesInView() { - return engine.slidesInView.get(); - } - function slidesNotInView() { - return engine.slidesInView.get(false); - } - function plugins() { - return pluginApis; - } - function internalEngine() { - return engine; - } - function rootNode() { - return root; - } - function containerNode() { - return container; - } - function slideNodes() { - return slides; - } - const self = { - canScrollNext, - canScrollPrev, - containerNode, - internalEngine, - destroy, - off, - on, - emit, - plugins, - previousScrollSnap, - reInit, - rootNode, - scrollNext, - scrollPrev, - scrollProgress, - scrollSnapList, - scrollTo, - selectedScrollSnap, - slideNodes, - slidesInView, - slidesNotInView - }; - activate(userOptions, userPlugins); - setTimeout(() => eventHandler.emit('init'), 0); - return self; -} -EmblaCarousel.globalOptions = undefined; - -export { EmblaCarousel as default }; -//# sourceMappingURL=embla-carousel.esm.js.map diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map deleted file mode 100644 index de76d19cb2..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"embla-carousel.esm.js","sources":["../src/components/utils.ts","../src/components/Alignment.ts","../src/components/EventStore.ts","../src/components/Animations.ts","../src/components/Axis.ts","../src/components/Limit.ts","../src/components/Counter.ts","../src/components/DragHandler.ts","../src/components/DragTracker.ts","../src/components/NodeRects.ts","../src/components/PercentOfView.ts","../src/components/ResizeHandler.ts","../src/components/ScrollBody.ts","../src/components/ScrollBounds.ts","../src/components/ScrollContain.ts","../src/components/ScrollLimit.ts","../src/components/ScrollLooper.ts","../src/components/ScrollProgress.ts","../src/components/ScrollSnaps.ts","../src/components/SlideRegistry.ts","../src/components/ScrollTarget.ts","../src/components/ScrollTo.ts","../src/components/SlideFocus.ts","../src/components/Vector1d.ts","../src/components/Translate.ts","../src/components/SlideLooper.ts","../src/components/SlidesHandler.ts","../src/components/SlidesInView.ts","../src/components/SlideSizes.ts","../src/components/SlidesToScroll.ts","../src/components/Engine.ts","../src/components/EventHandler.ts","../src/components/Options.ts","../src/components/OptionsHandler.ts","../src/components/PluginsHandler.ts","../src/components/EmblaCarousel.ts"],"sourcesContent":["import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record,\n objectB: Record\n): Record {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n init: () => void\n destroy: () => void\n start: () => void\n stop: () => void\n update: () => void\n render: (alpha: number) => void\n}\n\nexport function Animations(\n ownerDocument: Document,\n ownerWindow: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const documentVisibleHandler = EventStore()\n const fixedTimeStep = 1000 / 60\n\n let lastTimeStamp: number | null = null\n let accumulatedTime = 0\n let animationId = 0\n\n function init(): void {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset()\n })\n }\n\n function destroy(): void {\n stop()\n documentVisibleHandler.clear()\n }\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!animationId) return\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp\n update()\n update()\n }\n\n const timeElapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n accumulatedTime += timeElapsed\n\n while (accumulatedTime >= fixedTimeStep) {\n update()\n accumulatedTime -= fixedTimeStep\n }\n\n const alpha = accumulatedTime / fixedTimeStep\n render(alpha)\n\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n }\n\n function start(): void {\n if (animationId) return\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(): void {\n ownerWindow.cancelAnimationFrame(animationId)\n lastTimeStamp = null\n accumulatedTime = 0\n animationId = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n accumulatedTime = 0\n }\n\n const self: AnimationsType = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n }\n return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n direction: (n: number) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n contentDirection: AxisDirectionOptionType\n): AxisType {\n const isRightToLeft = contentDirection === 'rtl'\n const isVertical = axis === 'y'\n const scroll = isVertical ? 'y' : 'x'\n const cross = isVertical ? 'x' : 'y'\n const sign = !isVertical && isRightToLeft ? -1 : 1\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { height, width } = nodeRect\n return isVertical ? height : width\n }\n\n function getStartEdge(): AxisEdgeType {\n if (isVertical) return 'top'\n return isRightToLeft ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (isVertical) return 'bottom'\n return isRightToLeft ? 'left' : 'right'\n }\n\n function direction(n: number): number {\n return n * sign\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n }\n return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationsType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis, direction } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(0.75)\n animation.start()\n target.add(direction(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n preventClick = false\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n destroy,\n pointerDown\n }\n return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n","export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n","export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n const observeNodes = [container].concat(slides)\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n if (destroyed) return\n\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n emblaApi.reInit()\n eventHandler.emit('resize')\n\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach((node) => resizeObserver.observe(node))\n })\n }\n\n function destroy(): void {\n destroyed = true\n if (resizeObserver) resizeObserver.disconnect()\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let scrollVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const displacement = target.get() - location.get()\n const isInstant = !scrollDuration\n let scrollDistance = 0\n\n if (isInstant) {\n scrollVelocity = 0\n previousLocation.set(target)\n location.set(target)\n\n scrollDistance = displacement\n } else {\n previousLocation.set(location)\n\n scrollVelocity += displacement / scrollDuration\n scrollVelocity *= scrollFriction\n rawLocation += scrollVelocity\n location.add(scrollVelocity)\n\n scrollDistance = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(scrollDistance)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return scrollVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n shouldConstrain: () => boolean\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n shouldConstrain,\n constrain,\n toggleActive\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType,\n pixelTolerance: number\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function usePixelTolerance(bound: number, snap: number): boolean {\n return deltaAbs(bound, snap) <= 1\n }\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const { min, max } = scrollBounds\n const snap = scrollBounds.constrain(snapAligned)\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return max\n if (isLast) return min\n if (usePixelTolerance(min, snap)) return min\n if (usePixelTolerance(max, snap)) return max\n return snap\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n location: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(location.get())\n if (direction === -1) return reachedMin(location.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollSnaps: number[],\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n if (scrollSnaps.length === 1) return [slideIndexes]\n if (doNotContain) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return target\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationsType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start()\n } else {\n animation.update()\n animation.render(1)\n animation.update()\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType,\n eventHandler: EventHandlerType,\n watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n const focusListenerOptions = { passive: true, capture: true }\n let lastTabPressTime = 0\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchFocus) return\n\n function defaultCallback(index: number): void {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n eventHandler.emit('slideFocusStart')\n root.scrollLeft = 0\n\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n\n eventHandler.emit('slideFocus')\n }\n\n eventStore.add(document, 'keydown', registerTabPress, false)\n\n slides.forEach((slide, slideIndex) => {\n eventStore.add(\n slide,\n 'focus',\n (evt: FocusEvent) => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex)\n }\n },\n focusListenerOptions\n )\n })\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let previousTarget: number | null = null\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n\n const newTarget = roundToTwoDecimals(axis.direction(target))\n if (newTarget === previousTarget) return\n\n containerStyle.transform = translate(newTarget)\n previousTarget = newTarget\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n location: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => (location.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: (array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number,\n pixelTolerance: number\n): SlidesToScrollType {\n const { startEdge, endEdge, direction } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB, index) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction(startGap) : 0\n const gapB = !loop && isLast ? direction(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n","import { Alignment } from './Alignment'\nimport {\n Animations,\n AnimationsType,\n AnimationsUpdateType,\n AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n animation: AnimationsType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n previousLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options\n\n // Measurements\n const pixelTolerance = 2\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const axis = Axis(scrollAxis, direction)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap,\n pixelTolerance\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll,\n pixelTolerance\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationsUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationsRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: { loop }\n },\n alpha\n ) => {\n const shouldSettle = scrollBody.settled()\n const withinBounds = !scrollBounds.shouldConstrain()\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n if (hasSettledAndIdle) animation.stop()\n\n const interpolatedLocation =\n location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n offsetLocation.set(interpolatedLocation)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n\n if (hasSettledAndIdle) eventHandler.emit('settle')\n if (!hasSettled) eventHandler.emit('scroll')\n }\n\n const animation = Animations(\n ownerDocument,\n ownerWindow,\n () => update(engine),\n (alpha: number) => render(engine, alpha)\n )\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const previousLocation = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n previousLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollBody,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n containSnaps,\n containScroll,\n scrollSnaps,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore,\n eventHandler,\n watchFocus\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(\n axis,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n offsetLocation,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n previousLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n }\n\n return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n slideFocusStart: 'slideFocusStart'\n slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n let listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n function clear(): void {\n listeners = {}\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on,\n clear\n }\n return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf | null\n containScroll: ScrollContainOptionType\n direction: AxisDirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial>\n\nexport type OptionsHandlerType = {\n mergeOptions: (\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: (options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const eventHandler = EventHandler()\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = (customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = [].slice.call(customSlides || container.children)\n }\n\n function createEngine(options: OptionsType): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.animation.init()\n engine.slidesInView.init()\n engine.slideFocus.init(self)\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n engine.animation.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n eventHandler.clear()\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody\n .useBaseFriction()\n .useDuration(jump === true ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.offsetLocation.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\ndeclare namespace EmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n"],"names":["isNumber","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","node","type","handler","options","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","isTouchEvt","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","currentLocation","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","logInterval","startEvent","lastEvent","readTime","evtAxis","property","coord","expired","diffDrag","diffTime","isFlick","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","offset","top","right","bottom","left","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","concat","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","diffSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","roundingSafety","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","remainingGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","every","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","inViewMatch","notInViewMatch","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts deleted file mode 100644 index 2cd562e075..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { EmblaOptionsType } from './components/Options.js'; -export { EmblaEventType } from './components/EventHandler.js'; -export { EmblaPluginType } from './components/Plugins.js'; -export { EmblaCarouselType } from './components/EmblaCarousel.js'; -export { default } from './components/EmblaCarousel.js'; -export { CreatePluginType, EmblaPluginsType } from './components/Plugins.js'; -export { CreateOptionsType } from './components/Options.js'; -export { OptionsHandlerType } from './components/OptionsHandler.js'; -export { EmblaEventListType } from './components/EventHandler.js'; -export { EngineType } from './components/Engine.js'; -export { ScrollBodyType } from './components/ScrollBody.js'; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json deleted file mode 100644 index 054c893547..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "embla-carousel", - "version": "8.6.0", - "author": "David Jerleke", - "description": "A lightweight carousel library with fluid motion and great swipe precision", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel*", - "components/**/*", - "index.d.ts" - ], - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "module": "embla-carousel.esm.js", - "type": "module" -} diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts deleted file mode 100644 index aab7131a9f..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/index.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { EmblaOptionsType } from './components/Options'; -export { EmblaEventType } from './components/EventHandler'; -export { EmblaPluginType } from './components/Plugins'; -export { EmblaCarouselType } from './components/EmblaCarousel'; -export { default } from './components/EmblaCarousel'; -export { CreatePluginType, EmblaPluginsType } from './components/Plugins'; -export { CreateOptionsType } from './components/Options'; -export { OptionsHandlerType } from './components/OptionsHandler'; -export { EmblaEventListType } from './components/EventHandler'; -export { EngineType } from './components/Engine'; -export { ScrollBodyType } from './components/ScrollBody'; diff --git a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json b/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json deleted file mode 100644 index bb53b31be4..0000000000 --- a/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "embla-carousel", - "version": "8.6.0", - "author": "David Jerleke", - "description": "A lightweight carousel library with fluid motion and great swipe precision", - "repository": { - "type": "git", - "url": "git+https://github.com/davidjerleke/embla-carousel" - }, - "bugs": { - "url": "https://github.com/davidjerleke/embla-carousel/issues" - }, - "homepage": "https://www.embla-carousel.com", - "license": "MIT", - "keywords": [ - "slider", - "carousel", - "slideshow", - "gallery", - "lightweight", - "touch", - "javascript", - "typescript", - "react", - "vue", - "svelte", - "solid" - ], - "main": "embla-carousel.umd.js", - "unpkg": "embla-carousel.umd.js", - "module": "./esm/embla-carousel.esm.js", - "types": "index.d.ts", - "sideEffects": false, - "files": [ - "embla-carousel*", - "components/**/*", - "index.d.ts", - "esm/**/*", - "cjs/**/*" - ], - "scripts": { - "test": "jest --config jest.config.js", - "build": "rollup --bundleConfigAsCjs -c", - "start": "rollup --bundleConfigAsCjs -c --watch --environment BUILD:development", - "eslint:report": "eslint \"src/**/*.{js,tsx,ts}\"" - }, - "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^4.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "prettier": "2.8.8", - "rollup": "^4.22.4", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./esm/index.d.ts", - "default": "./esm/embla-carousel.esm.js" - }, - "require": { - "types": "./cjs/index.d.ts", - "default": "./cjs/embla-carousel.cjs.js" - } - } - } -} \ No newline at end of file diff --git a/node_modules/.pnpm/lock.yaml b/node_modules/.pnpm/lock.yaml deleted file mode 100644 index 78670e94f8..0000000000 --- a/node_modules/.pnpm/lock.yaml +++ /dev/null @@ -1,60 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - embla-carousel-autoplay: - specifier: ^8.6.0 - version: 8.6.0(embla-carousel@8.6.0) - embla-carousel-react: - specifier: ^8.6.0 - version: 8.6.0(react@19.2.0) - -packages: - - embla-carousel-autoplay@8.6.0: - resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel-react@8.6.0: - resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} - - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} - engines: {node: '>=0.10.0'} - -snapshots: - - embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel-react@8.6.0(react@19.2.0): - dependencies: - embla-carousel: 8.6.0 - embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.2.0 - - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: {} - - react@19.2.0: {} diff --git a/node_modules/.pnpm/node_modules/embla-carousel b/node_modules/.pnpm/node_modules/embla-carousel deleted file mode 120000 index b2d64d5eff..0000000000 --- a/node_modules/.pnpm/node_modules/embla-carousel +++ /dev/null @@ -1 +0,0 @@ -../embla-carousel@8.6.0/node_modules/embla-carousel \ No newline at end of file diff --git a/node_modules/.pnpm/node_modules/embla-carousel-reactive-utils b/node_modules/.pnpm/node_modules/embla-carousel-reactive-utils deleted file mode 120000 index f7f6e184be..0000000000 --- a/node_modules/.pnpm/node_modules/embla-carousel-reactive-utils +++ /dev/null @@ -1 +0,0 @@ -../embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils \ No newline at end of file diff --git a/node_modules/.pnpm/node_modules/react b/node_modules/.pnpm/node_modules/react deleted file mode 120000 index 19ba4de13c..0000000000 --- a/node_modules/.pnpm/node_modules/react +++ /dev/null @@ -1 +0,0 @@ -../react@19.2.0/node_modules/react \ No newline at end of file diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE b/node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE deleted file mode 100644 index b93be90515..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Meta Platforms, Inc. and affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/README.md b/node_modules/.pnpm/react@19.2.0/node_modules/react/README.md deleted file mode 100644 index 20a855efd3..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# `react` - -React is a JavaScript library for creating user interfaces. - -The `react` package contains only the functionality necessary to define React components. It is typically used together with a React renderer like `react-dom` for the web, or `react-native` for the native environments. - -**Note:** by default, React will be in development mode. The development version includes extra warnings about common mistakes, whereas the production version includes extra performance optimizations and strips all error messages. Don't forget to use the [production build](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build) when deploying your application. - -## Usage - -```js -import { useState } from 'react'; -import { createRoot } from 'react-dom/client'; - -function Counter() { - const [count, setCount] = useState(0); - return ( - <> -

{count}

- - - ); -} - -const root = createRoot(document.getElementById('root')); -root.render(); -``` - -## Documentation - -See https://react.dev/ - -## API - -See https://react.dev/reference/react diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js deleted file mode 100644 index 84ceaac6f5..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.development.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @license React - * react-compiler-runtime.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - var ReactSharedInternals = - require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; - exports.c = function (size) { - var dispatcher = ReactSharedInternals.H; - null === dispatcher && - console.error( - "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." - ); - return dispatcher.useMemoCache(size); - }; - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js deleted file mode 100644 index 4d5ade38f0..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.production.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @license React - * react-compiler-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var ReactSharedInternals = - require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; -exports.c = function (size) { - return ReactSharedInternals.H.useMemoCache(size); -}; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js deleted file mode 100644 index 9b93257e37..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-compiler-runtime.profiling.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @license React - * react-compiler-runtime.profiling.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var ReactSharedInternals = - require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; -exports.c = function (size) { - return ReactSharedInternals.H.useMemoCache(size); -}; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js deleted file mode 100644 index 95f9877479..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js +++ /dev/null @@ -1,338 +0,0 @@ -/** - * @license React - * react-jsx-dev-runtime.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function testStringCoercion(value) { - return "" + value; - } - function checkKeyStringCoercion(value) { - try { - testStringCoercion(value); - var JSCompiler_inline_result = !1; - } catch (e) { - JSCompiler_inline_result = !0; - } - if (JSCompiler_inline_result) { - JSCompiler_inline_result = console; - var JSCompiler_temp_const = JSCompiler_inline_result.error; - var JSCompiler_inline_result$jscomp$0 = - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object"; - JSCompiler_temp_const.call( - JSCompiler_inline_result, - "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - JSCompiler_inline_result$jscomp$0 - ); - return testStringCoercion(value); - } - } - function getTaskName(type) { - if (type === REACT_FRAGMENT_TYPE) return "<>"; - if ( - "object" === typeof type && - null !== type && - type.$$typeof === REACT_LAZY_TYPE - ) - return "<...>"; - try { - var name = getComponentNameFromType(type); - return name ? "<" + name + ">" : "<...>"; - } catch (x) { - return "<...>"; - } - } - function getOwner() { - var dispatcher = ReactSharedInternals.A; - return null === dispatcher ? null : dispatcher.getOwner(); - } - function UnknownOwner() { - return Error("react-stack-top-frame"); - } - function hasValidKey(config) { - if (hasOwnProperty.call(config, "key")) { - var getter = Object.getOwnPropertyDescriptor(config, "key").get; - if (getter && getter.isReactWarning) return !1; - } - return void 0 !== config.key; - } - function defineKeyPropWarningGetter(props, displayName) { - function warnAboutAccessingKey() { - specialPropKeyWarningShown || - ((specialPropKeyWarningShown = !0), - console.error( - "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", - displayName - )); - } - warnAboutAccessingKey.isReactWarning = !0; - Object.defineProperty(props, "key", { - get: warnAboutAccessingKey, - configurable: !0 - }); - } - function elementRefGetterWithDeprecationWarning() { - var componentName = getComponentNameFromType(this.type); - didWarnAboutElementRef[componentName] || - ((didWarnAboutElementRef[componentName] = !0), - console.error( - "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." - )); - componentName = this.props.ref; - return void 0 !== componentName ? componentName : null; - } - function ReactElement(type, key, props, owner, debugStack, debugTask) { - var refProp = props.ref; - type = { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - props: props, - _owner: owner - }; - null !== (void 0 !== refProp ? refProp : null) - ? Object.defineProperty(type, "ref", { - enumerable: !1, - get: elementRefGetterWithDeprecationWarning - }) - : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); - type._store = {}; - Object.defineProperty(type._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: 0 - }); - Object.defineProperty(type, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(type, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugStack - }); - Object.defineProperty(type, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugTask - }); - Object.freeze && (Object.freeze(type.props), Object.freeze(type)); - return type; - } - function jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - debugStack, - debugTask - ) { - var children = config.children; - if (void 0 !== children) - if (isStaticChildren) - if (isArrayImpl(children)) { - for ( - isStaticChildren = 0; - isStaticChildren < children.length; - isStaticChildren++ - ) - validateChildKeys(children[isStaticChildren]); - Object.freeze && Object.freeze(children); - } else - console.error( - "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." - ); - else validateChildKeys(children); - if (hasOwnProperty.call(config, "key")) { - children = getComponentNameFromType(type); - var keys = Object.keys(config).filter(function (k) { - return "key" !== k; - }); - isStaticChildren = - 0 < keys.length - ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" - : "{key: someKey}"; - didWarnAboutKeySpread[children + isStaticChildren] || - ((keys = - 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), - console.error( - 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', - isStaticChildren, - children, - keys, - children - ), - (didWarnAboutKeySpread[children + isStaticChildren] = !0)); - } - children = null; - void 0 !== maybeKey && - (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (children = "" + config.key)); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - children && - defineKeyPropWarningGetter( - maybeKey, - "function" === typeof type - ? type.displayName || type.name || "Unknown" - : type - ); - return ReactElement( - type, - children, - maybeKey, - getOwner(), - debugStack, - debugTask - ); - } - function validateChildKeys(node) { - isValidElement(node) - ? node._store && (node._store.validated = 1) - : "object" === typeof node && - null !== node && - node.$$typeof === REACT_LAZY_TYPE && - ("fulfilled" === node._payload.status - ? isValidElement(node._payload.value) && - node._payload.value._store && - (node._payload.value._store.validated = 1) - : node._store && (node._store.validated = 1)); - } - function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); - } - var React = require("react"), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), - ReactSharedInternals = - React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, - hasOwnProperty = Object.prototype.hasOwnProperty, - isArrayImpl = Array.isArray, - createTask = console.createTask - ? console.createTask - : function () { - return null; - }; - React = { - react_stack_bottom_frame: function (callStackForError) { - return callStackForError(); - } - }; - var specialPropKeyWarningShown; - var didWarnAboutElementRef = {}; - var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( - React, - UnknownOwner - )(); - var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); - var didWarnAboutKeySpread = {}; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) { - var trackActualOwner = - 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js deleted file mode 100644 index 22ad88648e..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.production.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @license React - * react-jsx-dev-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsxDEV = void 0; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js deleted file mode 100644 index f9e8942f4d..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @license React - * react-jsx-dev-runtime.profiling.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsxDEV = void 0; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js deleted file mode 100644 index b79b7589bf..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js +++ /dev/null @@ -1,370 +0,0 @@ -/** - * @license React - * react-jsx-dev-runtime.react-server.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function testStringCoercion(value) { - return "" + value; - } - function checkKeyStringCoercion(value) { - try { - testStringCoercion(value); - var JSCompiler_inline_result = !1; - } catch (e) { - JSCompiler_inline_result = !0; - } - if (JSCompiler_inline_result) { - JSCompiler_inline_result = console; - var JSCompiler_temp_const = JSCompiler_inline_result.error; - var JSCompiler_inline_result$jscomp$0 = - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object"; - JSCompiler_temp_const.call( - JSCompiler_inline_result, - "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - JSCompiler_inline_result$jscomp$0 - ); - return testStringCoercion(value); - } - } - function getTaskName(type) { - if (type === REACT_FRAGMENT_TYPE) return "<>"; - if ( - "object" === typeof type && - null !== type && - type.$$typeof === REACT_LAZY_TYPE - ) - return "<...>"; - try { - var name = getComponentNameFromType(type); - return name ? "<" + name + ">" : "<...>"; - } catch (x) { - return "<...>"; - } - } - function getOwner() { - var dispatcher = ReactSharedInternalsServer.A; - return null === dispatcher ? null : dispatcher.getOwner(); - } - function UnknownOwner() { - return Error("react-stack-top-frame"); - } - function hasValidKey(config) { - if (hasOwnProperty.call(config, "key")) { - var getter = Object.getOwnPropertyDescriptor(config, "key").get; - if (getter && getter.isReactWarning) return !1; - } - return void 0 !== config.key; - } - function defineKeyPropWarningGetter(props, displayName) { - function warnAboutAccessingKey() { - specialPropKeyWarningShown || - ((specialPropKeyWarningShown = !0), - console.error( - "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", - displayName - )); - } - warnAboutAccessingKey.isReactWarning = !0; - Object.defineProperty(props, "key", { - get: warnAboutAccessingKey, - configurable: !0 - }); - } - function elementRefGetterWithDeprecationWarning() { - var componentName = getComponentNameFromType(this.type); - didWarnAboutElementRef[componentName] || - ((didWarnAboutElementRef[componentName] = !0), - console.error( - "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." - )); - componentName = this.props.ref; - return void 0 !== componentName ? componentName : null; - } - function ReactElement(type, key, props, owner, debugStack, debugTask) { - var refProp = props.ref; - type = { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - props: props, - _owner: owner - }; - null !== (void 0 !== refProp ? refProp : null) - ? Object.defineProperty(type, "ref", { - enumerable: !1, - get: elementRefGetterWithDeprecationWarning - }) - : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); - type._store = {}; - Object.defineProperty(type._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: 0 - }); - Object.defineProperty(type, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(type, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugStack - }); - Object.defineProperty(type, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugTask - }); - Object.freeze && (Object.freeze(type.props), Object.freeze(type)); - return type; - } - function jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - debugStack, - debugTask - ) { - var children = config.children; - if (void 0 !== children) - if (isStaticChildren) - if (isArrayImpl(children)) { - for ( - isStaticChildren = 0; - isStaticChildren < children.length; - isStaticChildren++ - ) - validateChildKeys(children[isStaticChildren]); - Object.freeze && Object.freeze(children); - } else - console.error( - "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." - ); - else validateChildKeys(children); - if (hasOwnProperty.call(config, "key")) { - children = getComponentNameFromType(type); - var keys = Object.keys(config).filter(function (k) { - return "key" !== k; - }); - isStaticChildren = - 0 < keys.length - ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" - : "{key: someKey}"; - didWarnAboutKeySpread[children + isStaticChildren] || - ((keys = - 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), - console.error( - 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', - isStaticChildren, - children, - keys, - children - ), - (didWarnAboutKeySpread[children + isStaticChildren] = !0)); - } - children = null; - void 0 !== maybeKey && - (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (children = "" + config.key)); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - children && - defineKeyPropWarningGetter( - maybeKey, - "function" === typeof type - ? type.displayName || type.name || "Unknown" - : type - ); - return ReactElement( - type, - children, - maybeKey, - getOwner(), - debugStack, - debugTask - ); - } - function validateChildKeys(node) { - isValidElement(node) - ? node._store && (node._store.validated = 1) - : "object" === typeof node && - null !== node && - node.$$typeof === REACT_LAZY_TYPE && - ("fulfilled" === node._payload.status - ? isValidElement(node._payload.value) && - node._payload.value._store && - (node._payload.value._store.validated = 1) - : node._store && (node._store.validated = 1)); - } - function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); - } - var React = require("react"), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), - ReactSharedInternalsServer = - React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; - if (!ReactSharedInternalsServer) - throw Error( - 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' - ); - var hasOwnProperty = Object.prototype.hasOwnProperty, - isArrayImpl = Array.isArray, - createTask = console.createTask - ? console.createTask - : function () { - return null; - }; - React = { - react_stack_bottom_frame: function (callStackForError) { - return callStackForError(); - } - }; - var specialPropKeyWarningShown; - var didWarnAboutElementRef = {}; - var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( - React, - UnknownOwner - )(); - var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); - var didWarnAboutKeySpread = {}; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.jsx = function (type, config, maybeKey) { - var trackActualOwner = - 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - !1, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) { - var trackActualOwner = - 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.jsxs = function (type, config, maybeKey) { - var trackActualOwner = - 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - !0, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js deleted file mode 100644 index 0664121996..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license React - * react-jsx-dev-runtime.react-server.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var React = require("react"), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) - throw Error( - 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' - ); -function jsxProd(type, config, maybeKey) { - var key = null; - void 0 !== maybeKey && (key = "" + maybeKey); - void 0 !== config.key && (key = "" + config.key); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - config = maybeKey.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== config ? config : null, - props: maybeKey - }; -} -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsx = jsxProd; -exports.jsxDEV = void 0; -exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js deleted file mode 100644 index 35331a3c5c..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js +++ /dev/null @@ -1,352 +0,0 @@ -/** - * @license React - * react-jsx-runtime.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function testStringCoercion(value) { - return "" + value; - } - function checkKeyStringCoercion(value) { - try { - testStringCoercion(value); - var JSCompiler_inline_result = !1; - } catch (e) { - JSCompiler_inline_result = !0; - } - if (JSCompiler_inline_result) { - JSCompiler_inline_result = console; - var JSCompiler_temp_const = JSCompiler_inline_result.error; - var JSCompiler_inline_result$jscomp$0 = - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object"; - JSCompiler_temp_const.call( - JSCompiler_inline_result, - "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - JSCompiler_inline_result$jscomp$0 - ); - return testStringCoercion(value); - } - } - function getTaskName(type) { - if (type === REACT_FRAGMENT_TYPE) return "<>"; - if ( - "object" === typeof type && - null !== type && - type.$$typeof === REACT_LAZY_TYPE - ) - return "<...>"; - try { - var name = getComponentNameFromType(type); - return name ? "<" + name + ">" : "<...>"; - } catch (x) { - return "<...>"; - } - } - function getOwner() { - var dispatcher = ReactSharedInternals.A; - return null === dispatcher ? null : dispatcher.getOwner(); - } - function UnknownOwner() { - return Error("react-stack-top-frame"); - } - function hasValidKey(config) { - if (hasOwnProperty.call(config, "key")) { - var getter = Object.getOwnPropertyDescriptor(config, "key").get; - if (getter && getter.isReactWarning) return !1; - } - return void 0 !== config.key; - } - function defineKeyPropWarningGetter(props, displayName) { - function warnAboutAccessingKey() { - specialPropKeyWarningShown || - ((specialPropKeyWarningShown = !0), - console.error( - "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", - displayName - )); - } - warnAboutAccessingKey.isReactWarning = !0; - Object.defineProperty(props, "key", { - get: warnAboutAccessingKey, - configurable: !0 - }); - } - function elementRefGetterWithDeprecationWarning() { - var componentName = getComponentNameFromType(this.type); - didWarnAboutElementRef[componentName] || - ((didWarnAboutElementRef[componentName] = !0), - console.error( - "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." - )); - componentName = this.props.ref; - return void 0 !== componentName ? componentName : null; - } - function ReactElement(type, key, props, owner, debugStack, debugTask) { - var refProp = props.ref; - type = { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - props: props, - _owner: owner - }; - null !== (void 0 !== refProp ? refProp : null) - ? Object.defineProperty(type, "ref", { - enumerable: !1, - get: elementRefGetterWithDeprecationWarning - }) - : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); - type._store = {}; - Object.defineProperty(type._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: 0 - }); - Object.defineProperty(type, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(type, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugStack - }); - Object.defineProperty(type, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugTask - }); - Object.freeze && (Object.freeze(type.props), Object.freeze(type)); - return type; - } - function jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - debugStack, - debugTask - ) { - var children = config.children; - if (void 0 !== children) - if (isStaticChildren) - if (isArrayImpl(children)) { - for ( - isStaticChildren = 0; - isStaticChildren < children.length; - isStaticChildren++ - ) - validateChildKeys(children[isStaticChildren]); - Object.freeze && Object.freeze(children); - } else - console.error( - "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." - ); - else validateChildKeys(children); - if (hasOwnProperty.call(config, "key")) { - children = getComponentNameFromType(type); - var keys = Object.keys(config).filter(function (k) { - return "key" !== k; - }); - isStaticChildren = - 0 < keys.length - ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" - : "{key: someKey}"; - didWarnAboutKeySpread[children + isStaticChildren] || - ((keys = - 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), - console.error( - 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', - isStaticChildren, - children, - keys, - children - ), - (didWarnAboutKeySpread[children + isStaticChildren] = !0)); - } - children = null; - void 0 !== maybeKey && - (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (children = "" + config.key)); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - children && - defineKeyPropWarningGetter( - maybeKey, - "function" === typeof type - ? type.displayName || type.name || "Unknown" - : type - ); - return ReactElement( - type, - children, - maybeKey, - getOwner(), - debugStack, - debugTask - ); - } - function validateChildKeys(node) { - isValidElement(node) - ? node._store && (node._store.validated = 1) - : "object" === typeof node && - null !== node && - node.$$typeof === REACT_LAZY_TYPE && - ("fulfilled" === node._payload.status - ? isValidElement(node._payload.value) && - node._payload.value._store && - (node._payload.value._store.validated = 1) - : node._store && (node._store.validated = 1)); - } - function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); - } - var React = require("react"), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), - ReactSharedInternals = - React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, - hasOwnProperty = Object.prototype.hasOwnProperty, - isArrayImpl = Array.isArray, - createTask = console.createTask - ? console.createTask - : function () { - return null; - }; - React = { - react_stack_bottom_frame: function (callStackForError) { - return callStackForError(); - } - }; - var specialPropKeyWarningShown; - var didWarnAboutElementRef = {}; - var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( - React, - UnknownOwner - )(); - var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); - var didWarnAboutKeySpread = {}; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.jsx = function (type, config, maybeKey) { - var trackActualOwner = - 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - !1, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.jsxs = function (type, config, maybeKey) { - var trackActualOwner = - 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - !0, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js deleted file mode 100644 index 12d60887f0..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -function jsxProd(type, config, maybeKey) { - var key = null; - void 0 !== maybeKey && (key = "" + maybeKey); - void 0 !== config.key && (key = "" + config.key); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - config = maybeKey.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== config ? config : null, - props: maybeKey - }; -} -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsx = jsxProd; -exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js deleted file mode 100644 index 68a28d6ad6..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.profiling.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @license React - * react-jsx-runtime.profiling.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -function jsxProd(type, config, maybeKey) { - var key = null; - void 0 !== maybeKey && (key = "" + maybeKey); - void 0 !== config.key && (key = "" + config.key); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - config = maybeKey.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== config ? config : null, - props: maybeKey - }; -} -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsx = jsxProd; -exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js deleted file mode 100644 index 59ee4be6d6..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.development.js +++ /dev/null @@ -1,370 +0,0 @@ -/** - * @license React - * react-jsx-runtime.react-server.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function testStringCoercion(value) { - return "" + value; - } - function checkKeyStringCoercion(value) { - try { - testStringCoercion(value); - var JSCompiler_inline_result = !1; - } catch (e) { - JSCompiler_inline_result = !0; - } - if (JSCompiler_inline_result) { - JSCompiler_inline_result = console; - var JSCompiler_temp_const = JSCompiler_inline_result.error; - var JSCompiler_inline_result$jscomp$0 = - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object"; - JSCompiler_temp_const.call( - JSCompiler_inline_result, - "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - JSCompiler_inline_result$jscomp$0 - ); - return testStringCoercion(value); - } - } - function getTaskName(type) { - if (type === REACT_FRAGMENT_TYPE) return "<>"; - if ( - "object" === typeof type && - null !== type && - type.$$typeof === REACT_LAZY_TYPE - ) - return "<...>"; - try { - var name = getComponentNameFromType(type); - return name ? "<" + name + ">" : "<...>"; - } catch (x) { - return "<...>"; - } - } - function getOwner() { - var dispatcher = ReactSharedInternalsServer.A; - return null === dispatcher ? null : dispatcher.getOwner(); - } - function UnknownOwner() { - return Error("react-stack-top-frame"); - } - function hasValidKey(config) { - if (hasOwnProperty.call(config, "key")) { - var getter = Object.getOwnPropertyDescriptor(config, "key").get; - if (getter && getter.isReactWarning) return !1; - } - return void 0 !== config.key; - } - function defineKeyPropWarningGetter(props, displayName) { - function warnAboutAccessingKey() { - specialPropKeyWarningShown || - ((specialPropKeyWarningShown = !0), - console.error( - "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", - displayName - )); - } - warnAboutAccessingKey.isReactWarning = !0; - Object.defineProperty(props, "key", { - get: warnAboutAccessingKey, - configurable: !0 - }); - } - function elementRefGetterWithDeprecationWarning() { - var componentName = getComponentNameFromType(this.type); - didWarnAboutElementRef[componentName] || - ((didWarnAboutElementRef[componentName] = !0), - console.error( - "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." - )); - componentName = this.props.ref; - return void 0 !== componentName ? componentName : null; - } - function ReactElement(type, key, props, owner, debugStack, debugTask) { - var refProp = props.ref; - type = { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - props: props, - _owner: owner - }; - null !== (void 0 !== refProp ? refProp : null) - ? Object.defineProperty(type, "ref", { - enumerable: !1, - get: elementRefGetterWithDeprecationWarning - }) - : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); - type._store = {}; - Object.defineProperty(type._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: 0 - }); - Object.defineProperty(type, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(type, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugStack - }); - Object.defineProperty(type, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugTask - }); - Object.freeze && (Object.freeze(type.props), Object.freeze(type)); - return type; - } - function jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - debugStack, - debugTask - ) { - var children = config.children; - if (void 0 !== children) - if (isStaticChildren) - if (isArrayImpl(children)) { - for ( - isStaticChildren = 0; - isStaticChildren < children.length; - isStaticChildren++ - ) - validateChildKeys(children[isStaticChildren]); - Object.freeze && Object.freeze(children); - } else - console.error( - "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead." - ); - else validateChildKeys(children); - if (hasOwnProperty.call(config, "key")) { - children = getComponentNameFromType(type); - var keys = Object.keys(config).filter(function (k) { - return "key" !== k; - }); - isStaticChildren = - 0 < keys.length - ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" - : "{key: someKey}"; - didWarnAboutKeySpread[children + isStaticChildren] || - ((keys = - 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"), - console.error( - 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', - isStaticChildren, - children, - keys, - children - ), - (didWarnAboutKeySpread[children + isStaticChildren] = !0)); - } - children = null; - void 0 !== maybeKey && - (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey)); - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (children = "" + config.key)); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - children && - defineKeyPropWarningGetter( - maybeKey, - "function" === typeof type - ? type.displayName || type.name || "Unknown" - : type - ); - return ReactElement( - type, - children, - maybeKey, - getOwner(), - debugStack, - debugTask - ); - } - function validateChildKeys(node) { - isValidElement(node) - ? node._store && (node._store.validated = 1) - : "object" === typeof node && - null !== node && - node.$$typeof === REACT_LAZY_TYPE && - ("fulfilled" === node._payload.status - ? isValidElement(node._payload.value) && - node._payload.value._store && - (node._payload.value._store.validated = 1) - : node._store && (node._store.validated = 1)); - } - function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); - } - var React = require("react"), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), - ReactSharedInternalsServer = - React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; - if (!ReactSharedInternalsServer) - throw Error( - 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' - ); - var hasOwnProperty = Object.prototype.hasOwnProperty, - isArrayImpl = Array.isArray, - createTask = console.createTask - ? console.createTask - : function () { - return null; - }; - React = { - react_stack_bottom_frame: function (callStackForError) { - return callStackForError(); - } - }; - var specialPropKeyWarningShown; - var didWarnAboutElementRef = {}; - var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind( - React, - UnknownOwner - )(); - var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); - var didWarnAboutKeySpread = {}; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.jsx = function (type, config, maybeKey) { - var trackActualOwner = - 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - !1, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) { - var trackActualOwner = - 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - isStaticChildren, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.jsxs = function (type, config, maybeKey) { - var trackActualOwner = - 1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++; - return jsxDEVImpl( - type, - config, - maybeKey, - !0, - trackActualOwner - ? Error("react-stack-top-frame") - : unknownOwnerDebugStack, - trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js deleted file mode 100644 index 486facb521..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.react-server.production.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license React - * react-jsx-runtime.react-server.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var React = require("react"), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) - throw Error( - 'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.' - ); -function jsxProd(type, config, maybeKey) { - var key = null; - void 0 !== maybeKey && (key = "" + maybeKey); - void 0 !== config.key && (key = "" + config.key); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - config = maybeKey.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== config ? config : null, - props: maybeKey - }; -} -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsx = jsxProd; -exports.jsxDEV = void 0; -exports.jsxs = jsxProd; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js deleted file mode 100644 index e7695c689b..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.development.js +++ /dev/null @@ -1,1284 +0,0 @@ -/** - * @license React - * react.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function defineDeprecationWarning(methodName, info) { - Object.defineProperty(Component.prototype, methodName, { - get: function () { - console.warn( - "%s(...) is deprecated in plain JavaScript React classes. %s", - info[0], - info[1] - ); - } - }); - } - function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) - return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; - } - function warnNoop(publicInstance, callerName) { - publicInstance = - ((publicInstance = publicInstance.constructor) && - (publicInstance.displayName || publicInstance.name)) || - "ReactClass"; - var warningKey = publicInstance + "." + callerName; - didWarnStateUpdateForUnmountedComponent[warningKey] || - (console.error( - "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", - callerName, - publicInstance - ), - (didWarnStateUpdateForUnmountedComponent[warningKey] = !0)); - } - function Component(props, context, updater) { - this.props = props; - this.context = context; - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; - } - function ComponentDummy() {} - function PureComponent(props, context, updater) { - this.props = props; - this.context = context; - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; - } - function noop() {} - function testStringCoercion(value) { - return "" + value; - } - function checkKeyStringCoercion(value) { - try { - testStringCoercion(value); - var JSCompiler_inline_result = !1; - } catch (e) { - JSCompiler_inline_result = !0; - } - if (JSCompiler_inline_result) { - JSCompiler_inline_result = console; - var JSCompiler_temp_const = JSCompiler_inline_result.error; - var JSCompiler_inline_result$jscomp$0 = - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object"; - JSCompiler_temp_const.call( - JSCompiler_inline_result, - "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - JSCompiler_inline_result$jscomp$0 - ); - return testStringCoercion(value); - } - } - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function getTaskName(type) { - if (type === REACT_FRAGMENT_TYPE) return "<>"; - if ( - "object" === typeof type && - null !== type && - type.$$typeof === REACT_LAZY_TYPE - ) - return "<...>"; - try { - var name = getComponentNameFromType(type); - return name ? "<" + name + ">" : "<...>"; - } catch (x) { - return "<...>"; - } - } - function getOwner() { - var dispatcher = ReactSharedInternals.A; - return null === dispatcher ? null : dispatcher.getOwner(); - } - function UnknownOwner() { - return Error("react-stack-top-frame"); - } - function hasValidKey(config) { - if (hasOwnProperty.call(config, "key")) { - var getter = Object.getOwnPropertyDescriptor(config, "key").get; - if (getter && getter.isReactWarning) return !1; - } - return void 0 !== config.key; - } - function defineKeyPropWarningGetter(props, displayName) { - function warnAboutAccessingKey() { - specialPropKeyWarningShown || - ((specialPropKeyWarningShown = !0), - console.error( - "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", - displayName - )); - } - warnAboutAccessingKey.isReactWarning = !0; - Object.defineProperty(props, "key", { - get: warnAboutAccessingKey, - configurable: !0 - }); - } - function elementRefGetterWithDeprecationWarning() { - var componentName = getComponentNameFromType(this.type); - didWarnAboutElementRef[componentName] || - ((didWarnAboutElementRef[componentName] = !0), - console.error( - "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." - )); - componentName = this.props.ref; - return void 0 !== componentName ? componentName : null; - } - function ReactElement(type, key, props, owner, debugStack, debugTask) { - var refProp = props.ref; - type = { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - props: props, - _owner: owner - }; - null !== (void 0 !== refProp ? refProp : null) - ? Object.defineProperty(type, "ref", { - enumerable: !1, - get: elementRefGetterWithDeprecationWarning - }) - : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); - type._store = {}; - Object.defineProperty(type._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: 0 - }); - Object.defineProperty(type, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(type, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugStack - }); - Object.defineProperty(type, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugTask - }); - Object.freeze && (Object.freeze(type.props), Object.freeze(type)); - return type; - } - function cloneAndReplaceKey(oldElement, newKey) { - newKey = ReactElement( - oldElement.type, - newKey, - oldElement.props, - oldElement._owner, - oldElement._debugStack, - oldElement._debugTask - ); - oldElement._store && - (newKey._store.validated = oldElement._store.validated); - return newKey; - } - function validateChildKeys(node) { - isValidElement(node) - ? node._store && (node._store.validated = 1) - : "object" === typeof node && - null !== node && - node.$$typeof === REACT_LAZY_TYPE && - ("fulfilled" === node._payload.status - ? isValidElement(node._payload.value) && - node._payload.value._store && - (node._payload.value._store.validated = 1) - : node._store && (node._store.validated = 1)); - } - function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); - } - function escape(key) { - var escaperLookup = { "=": "=0", ":": "=2" }; - return ( - "$" + - key.replace(/[=:]/g, function (match) { - return escaperLookup[match]; - }) - ); - } - function getElementKey(element, index) { - return "object" === typeof element && - null !== element && - null != element.key - ? (checkKeyStringCoercion(element.key), escape("" + element.key)) - : index.toString(36); - } - function resolveThenable(thenable) { - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - switch ( - ("string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenable.status = "pending"), - thenable.then( - function (fulfilledValue) { - "pending" === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = fulfilledValue)); - }, - function (error) { - "pending" === thenable.status && - ((thenable.status = "rejected"), - (thenable.reason = error)); - } - )), - thenable.status) - ) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - } - throw thenable; - } - function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - if ("undefined" === type || "boolean" === type) children = null; - var invokeCallback = !1; - if (null === children) invokeCallback = !0; - else - switch (type) { - case "bigint": - case "string": - case "number": - invokeCallback = !0; - break; - case "object": - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = !0; - break; - case REACT_LAZY_TYPE: - return ( - (invokeCallback = children._init), - mapIntoArray( - invokeCallback(children._payload), - array, - escapedPrefix, - nameSoFar, - callback - ) - ); - } - } - if (invokeCallback) { - invokeCallback = children; - callback = callback(invokeCallback); - var childKey = - "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; - isArrayImpl(callback) - ? ((escapedPrefix = ""), - null != childKey && - (escapedPrefix = - childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), - mapIntoArray(callback, array, escapedPrefix, "", function (c) { - return c; - })) - : null != callback && - (isValidElement(callback) && - (null != callback.key && - ((invokeCallback && invokeCallback.key === callback.key) || - checkKeyStringCoercion(callback.key)), - (escapedPrefix = cloneAndReplaceKey( - callback, - escapedPrefix + - (null == callback.key || - (invokeCallback && invokeCallback.key === callback.key) - ? "" - : ("" + callback.key).replace( - userProvidedKeyEscapeRegex, - "$&/" - ) + "/") + - childKey - )), - "" !== nameSoFar && - null != invokeCallback && - isValidElement(invokeCallback) && - null == invokeCallback.key && - invokeCallback._store && - !invokeCallback._store.validated && - (escapedPrefix._store.validated = 2), - (callback = escapedPrefix)), - array.push(callback)); - return 1; - } - invokeCallback = 0; - childKey = "" === nameSoFar ? "." : nameSoFar + ":"; - if (isArrayImpl(children)) - for (var i = 0; i < children.length; i++) - (nameSoFar = children[i]), - (type = childKey + getElementKey(nameSoFar, i)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if (((i = getIteratorFn(children)), "function" === typeof i)) - for ( - i === children.entries && - (didWarnAboutMaps || - console.warn( - "Using Maps as children is not supported. Use an array of keyed ReactElements instead." - ), - (didWarnAboutMaps = !0)), - children = i.call(children), - i = 0; - !(nameSoFar = children.next()).done; - - ) - (nameSoFar = nameSoFar.value), - (type = childKey + getElementKey(nameSoFar, i++)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if ("object" === type) { - if ("function" === typeof children.then) - return mapIntoArray( - resolveThenable(children), - array, - escapedPrefix, - nameSoFar, - callback - ); - array = String(children); - throw Error( - "Objects are not valid as a React child (found: " + - ("[object Object]" === array - ? "object with keys {" + Object.keys(children).join(", ") + "}" - : array) + - "). If you meant to render a collection of children, use an array instead." - ); - } - return invokeCallback; - } - function mapChildren(children, func, context) { - if (null == children) return children; - var result = [], - count = 0; - mapIntoArray(children, result, "", "", function (child) { - return func.call(context, child, count++); - }); - return result; - } - function lazyInitializer(payload) { - if (-1 === payload._status) { - var ioInfo = payload._ioInfo; - null != ioInfo && (ioInfo.start = ioInfo.end = performance.now()); - ioInfo = payload._result; - var thenable = ioInfo(); - thenable.then( - function (moduleObject) { - if (0 === payload._status || -1 === payload._status) { - payload._status = 1; - payload._result = moduleObject; - var _ioInfo = payload._ioInfo; - null != _ioInfo && (_ioInfo.end = performance.now()); - void 0 === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = moduleObject)); - } - }, - function (error) { - if (0 === payload._status || -1 === payload._status) { - payload._status = 2; - payload._result = error; - var _ioInfo2 = payload._ioInfo; - null != _ioInfo2 && (_ioInfo2.end = performance.now()); - void 0 === thenable.status && - ((thenable.status = "rejected"), (thenable.reason = error)); - } - } - ); - ioInfo = payload._ioInfo; - if (null != ioInfo) { - ioInfo.value = thenable; - var displayName = thenable.displayName; - "string" === typeof displayName && (ioInfo.name = displayName); - } - -1 === payload._status && - ((payload._status = 0), (payload._result = thenable)); - } - if (1 === payload._status) - return ( - (ioInfo = payload._result), - void 0 === ioInfo && - console.error( - "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", - ioInfo - ), - "default" in ioInfo || - console.error( - "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", - ioInfo - ), - ioInfo.default - ); - throw payload._result; - } - function resolveDispatcher() { - var dispatcher = ReactSharedInternals.H; - null === dispatcher && - console.error( - "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." - ); - return dispatcher; - } - function releaseAsyncTransition() { - ReactSharedInternals.asyncTransitions--; - } - function enqueueTask(task) { - if (null === enqueueTaskImpl) - try { - var requireString = ("require" + Math.random()).slice(0, 7); - enqueueTaskImpl = (module && module[requireString]).call( - module, - "timers" - ).setImmediate; - } catch (_err) { - enqueueTaskImpl = function (callback) { - !1 === didWarnAboutMessageChannel && - ((didWarnAboutMessageChannel = !0), - "undefined" === typeof MessageChannel && - console.error( - "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning." - )); - var channel = new MessageChannel(); - channel.port1.onmessage = callback; - channel.port2.postMessage(void 0); - }; - } - return enqueueTaskImpl(task); - } - function aggregateErrors(errors) { - return 1 < errors.length && "function" === typeof AggregateError - ? new AggregateError(errors) - : errors[0]; - } - function popActScope(prevActQueue, prevActScopeDepth) { - prevActScopeDepth !== actScopeDepth - 1 && - console.error( - "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. " - ); - actScopeDepth = prevActScopeDepth; - } - function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { - var queue = ReactSharedInternals.actQueue; - if (null !== queue) - if (0 !== queue.length) - try { - flushActQueue(queue); - enqueueTask(function () { - return recursivelyFlushAsyncActWork(returnValue, resolve, reject); - }); - return; - } catch (error) { - ReactSharedInternals.thrownErrors.push(error); - } - else ReactSharedInternals.actQueue = null; - 0 < ReactSharedInternals.thrownErrors.length - ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)), - (ReactSharedInternals.thrownErrors.length = 0), - reject(queue)) - : resolve(returnValue); - } - function flushActQueue(queue) { - if (!isFlushing) { - isFlushing = !0; - var i = 0; - try { - for (; i < queue.length; i++) { - var callback = queue[i]; - do { - ReactSharedInternals.didUsePromise = !1; - var continuation = callback(!1); - if (null !== continuation) { - if (ReactSharedInternals.didUsePromise) { - queue[i] = callback; - queue.splice(0, i); - return; - } - callback = continuation; - } else break; - } while (1); - } - queue.length = 0; - } catch (error) { - queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error); - } finally { - isFlushing = !1; - } - } - } - "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && - "function" === - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && - __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); - var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - MAYBE_ITERATOR_SYMBOL = Symbol.iterator, - didWarnStateUpdateForUnmountedComponent = {}, - ReactNoopUpdateQueue = { - isMounted: function () { - return !1; - }, - enqueueForceUpdate: function (publicInstance) { - warnNoop(publicInstance, "forceUpdate"); - }, - enqueueReplaceState: function (publicInstance) { - warnNoop(publicInstance, "replaceState"); - }, - enqueueSetState: function (publicInstance) { - warnNoop(publicInstance, "setState"); - } - }, - assign = Object.assign, - emptyObject = {}; - Object.freeze(emptyObject); - Component.prototype.isReactComponent = {}; - Component.prototype.setState = function (partialState, callback) { - if ( - "object" !== typeof partialState && - "function" !== typeof partialState && - null != partialState - ) - throw Error( - "takes an object of state variables to update or a function which returns an object of state variables." - ); - this.updater.enqueueSetState(this, partialState, callback, "setState"); - }; - Component.prototype.forceUpdate = function (callback) { - this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); - }; - var deprecatedAPIs = { - isMounted: [ - "isMounted", - "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks." - ], - replaceState: [ - "replaceState", - "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)." - ] - }; - for (fnName in deprecatedAPIs) - deprecatedAPIs.hasOwnProperty(fnName) && - defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); - ComponentDummy.prototype = Component.prototype; - deprecatedAPIs = PureComponent.prototype = new ComponentDummy(); - deprecatedAPIs.constructor = PureComponent; - assign(deprecatedAPIs, Component.prototype); - deprecatedAPIs.isPureReactComponent = !0; - var isArrayImpl = Array.isArray, - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), - ReactSharedInternals = { - H: null, - A: null, - T: null, - S: null, - actQueue: null, - asyncTransitions: 0, - isBatchingLegacy: !1, - didScheduleLegacyUpdate: !1, - didUsePromise: !1, - thrownErrors: [], - getCurrentStack: null, - recentlyCreatedOwnerStacks: 0 - }, - hasOwnProperty = Object.prototype.hasOwnProperty, - createTask = console.createTask - ? console.createTask - : function () { - return null; - }; - deprecatedAPIs = { - react_stack_bottom_frame: function (callStackForError) { - return callStackForError(); - } - }; - var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime; - var didWarnAboutElementRef = {}; - var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind( - deprecatedAPIs, - UnknownOwner - )(); - var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); - var didWarnAboutMaps = !1, - userProvidedKeyEscapeRegex = /\/+/g, - reportGlobalError = - "function" === typeof reportError - ? reportError - : function (error) { - if ( - "object" === typeof window && - "function" === typeof window.ErrorEvent - ) { - var event = new window.ErrorEvent("error", { - bubbles: !0, - cancelable: !0, - message: - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error), - error: error - }); - if (!window.dispatchEvent(event)) return; - } else if ( - "object" === typeof process && - "function" === typeof process.emit - ) { - process.emit("uncaughtException", error); - return; - } - console.error(error); - }, - didWarnAboutMessageChannel = !1, - enqueueTaskImpl = null, - actScopeDepth = 0, - didWarnNoAwaitAct = !1, - isFlushing = !1, - queueSeveralMicrotasks = - "function" === typeof queueMicrotask - ? function (callback) { - queueMicrotask(function () { - return queueMicrotask(callback); - }); - } - : enqueueTask; - deprecatedAPIs = Object.freeze({ - __proto__: null, - c: function (size) { - return resolveDispatcher().useMemoCache(size); - } - }); - var fnName = { - map: mapChildren, - forEach: function (children, forEachFunc, forEachContext) { - mapChildren( - children, - function () { - forEachFunc.apply(this, arguments); - }, - forEachContext - ); - }, - count: function (children) { - var n = 0; - mapChildren(children, function () { - n++; - }); - return n; - }, - toArray: function (children) { - return ( - mapChildren(children, function (child) { - return child; - }) || [] - ); - }, - only: function (children) { - if (!isValidElement(children)) - throw Error( - "React.Children.only expected to receive a single React element child." - ); - return children; - } - }; - exports.Activity = REACT_ACTIVITY_TYPE; - exports.Children = fnName; - exports.Component = Component; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.Profiler = REACT_PROFILER_TYPE; - exports.PureComponent = PureComponent; - exports.StrictMode = REACT_STRICT_MODE_TYPE; - exports.Suspense = REACT_SUSPENSE_TYPE; - exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = - ReactSharedInternals; - exports.__COMPILER_RUNTIME = deprecatedAPIs; - exports.act = function (callback) { - var prevActQueue = ReactSharedInternals.actQueue, - prevActScopeDepth = actScopeDepth; - actScopeDepth++; - var queue = (ReactSharedInternals.actQueue = - null !== prevActQueue ? prevActQueue : []), - didAwaitActCall = !1; - try { - var result = callback(); - } catch (error) { - ReactSharedInternals.thrownErrors.push(error); - } - if (0 < ReactSharedInternals.thrownErrors.length) - throw ( - (popActScope(prevActQueue, prevActScopeDepth), - (callback = aggregateErrors(ReactSharedInternals.thrownErrors)), - (ReactSharedInternals.thrownErrors.length = 0), - callback) - ); - if ( - null !== result && - "object" === typeof result && - "function" === typeof result.then - ) { - var thenable = result; - queueSeveralMicrotasks(function () { - didAwaitActCall || - didWarnNoAwaitAct || - ((didWarnNoAwaitAct = !0), - console.error( - "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);" - )); - }); - return { - then: function (resolve, reject) { - didAwaitActCall = !0; - thenable.then( - function (returnValue) { - popActScope(prevActQueue, prevActScopeDepth); - if (0 === prevActScopeDepth) { - try { - flushActQueue(queue), - enqueueTask(function () { - return recursivelyFlushAsyncActWork( - returnValue, - resolve, - reject - ); - }); - } catch (error$0) { - ReactSharedInternals.thrownErrors.push(error$0); - } - if (0 < ReactSharedInternals.thrownErrors.length) { - var _thrownError = aggregateErrors( - ReactSharedInternals.thrownErrors - ); - ReactSharedInternals.thrownErrors.length = 0; - reject(_thrownError); - } - } else resolve(returnValue); - }, - function (error) { - popActScope(prevActQueue, prevActScopeDepth); - 0 < ReactSharedInternals.thrownErrors.length - ? ((error = aggregateErrors( - ReactSharedInternals.thrownErrors - )), - (ReactSharedInternals.thrownErrors.length = 0), - reject(error)) - : reject(error); - } - ); - } - }; - } - var returnValue$jscomp$0 = result; - popActScope(prevActQueue, prevActScopeDepth); - 0 === prevActScopeDepth && - (flushActQueue(queue), - 0 !== queue.length && - queueSeveralMicrotasks(function () { - didAwaitActCall || - didWarnNoAwaitAct || - ((didWarnNoAwaitAct = !0), - console.error( - "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)" - )); - }), - (ReactSharedInternals.actQueue = null)); - if (0 < ReactSharedInternals.thrownErrors.length) - throw ( - ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)), - (ReactSharedInternals.thrownErrors.length = 0), - callback) - ); - return { - then: function (resolve, reject) { - didAwaitActCall = !0; - 0 === prevActScopeDepth - ? ((ReactSharedInternals.actQueue = queue), - enqueueTask(function () { - return recursivelyFlushAsyncActWork( - returnValue$jscomp$0, - resolve, - reject - ); - })) - : resolve(returnValue$jscomp$0); - } - }; - }; - exports.cache = function (fn) { - return function () { - return fn.apply(null, arguments); - }; - }; - exports.cacheSignal = function () { - return null; - }; - exports.captureOwnerStack = function () { - var getCurrentStack = ReactSharedInternals.getCurrentStack; - return null === getCurrentStack ? null : getCurrentStack(); - }; - exports.cloneElement = function (element, config, children) { - if (null === element || void 0 === element) - throw Error( - "The argument must be a React element, but you passed " + - element + - "." - ); - var props = assign({}, element.props), - key = element.key, - owner = element._owner; - if (null != config) { - var JSCompiler_inline_result; - a: { - if ( - hasOwnProperty.call(config, "ref") && - (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( - config, - "ref" - ).get) && - JSCompiler_inline_result.isReactWarning - ) { - JSCompiler_inline_result = !1; - break a; - } - JSCompiler_inline_result = void 0 !== config.ref; - } - JSCompiler_inline_result && (owner = getOwner()); - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (key = "" + config.key)); - for (propName in config) - !hasOwnProperty.call(config, propName) || - "key" === propName || - "__self" === propName || - "__source" === propName || - ("ref" === propName && void 0 === config.ref) || - (props[propName] = config[propName]); - } - var propName = arguments.length - 2; - if (1 === propName) props.children = children; - else if (1 < propName) { - JSCompiler_inline_result = Array(propName); - for (var i = 0; i < propName; i++) - JSCompiler_inline_result[i] = arguments[i + 2]; - props.children = JSCompiler_inline_result; - } - props = ReactElement( - element.type, - key, - props, - owner, - element._debugStack, - element._debugTask - ); - for (key = 2; key < arguments.length; key++) - validateChildKeys(arguments[key]); - return props; - }; - exports.createContext = function (defaultValue) { - defaultValue = { - $$typeof: REACT_CONTEXT_TYPE, - _currentValue: defaultValue, - _currentValue2: defaultValue, - _threadCount: 0, - Provider: null, - Consumer: null - }; - defaultValue.Provider = defaultValue; - defaultValue.Consumer = { - $$typeof: REACT_CONSUMER_TYPE, - _context: defaultValue - }; - defaultValue._currentRenderer = null; - defaultValue._currentRenderer2 = null; - return defaultValue; - }; - exports.createElement = function (type, config, children) { - for (var i = 2; i < arguments.length; i++) - validateChildKeys(arguments[i]); - i = {}; - var key = null; - if (null != config) - for (propName in (didWarnAboutOldJSXRuntime || - !("__self" in config) || - "key" in config || - ((didWarnAboutOldJSXRuntime = !0), - console.warn( - "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" - )), - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (key = "" + config.key)), - config)) - hasOwnProperty.call(config, propName) && - "key" !== propName && - "__self" !== propName && - "__source" !== propName && - (i[propName] = config[propName]); - var childrenLength = arguments.length - 2; - if (1 === childrenLength) i.children = children; - else if (1 < childrenLength) { - for ( - var childArray = Array(childrenLength), _i = 0; - _i < childrenLength; - _i++ - ) - childArray[_i] = arguments[_i + 2]; - Object.freeze && Object.freeze(childArray); - i.children = childArray; - } - if (type && type.defaultProps) - for (propName in ((childrenLength = type.defaultProps), childrenLength)) - void 0 === i[propName] && (i[propName] = childrenLength[propName]); - key && - defineKeyPropWarningGetter( - i, - "function" === typeof type - ? type.displayName || type.name || "Unknown" - : type - ); - var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; - return ReactElement( - type, - key, - i, - getOwner(), - propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, - propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.createRef = function () { - var refObject = { current: null }; - Object.seal(refObject); - return refObject; - }; - exports.forwardRef = function (render) { - null != render && render.$$typeof === REACT_MEMO_TYPE - ? console.error( - "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." - ) - : "function" !== typeof render - ? console.error( - "forwardRef requires a render function but was given %s.", - null === render ? "null" : typeof render - ) - : 0 !== render.length && - 2 !== render.length && - console.error( - "forwardRef render functions accept exactly two parameters: props and ref. %s", - 1 === render.length - ? "Did you forget to use the ref parameter?" - : "Any additional parameter will be undefined." - ); - null != render && - null != render.defaultProps && - console.error( - "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" - ); - var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render }, - ownName; - Object.defineProperty(elementType, "displayName", { - enumerable: !1, - configurable: !0, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; - render.name || - render.displayName || - (Object.defineProperty(render, "name", { value: name }), - (render.displayName = name)); - } - }); - return elementType; - }; - exports.isValidElement = isValidElement; - exports.lazy = function (ctor) { - ctor = { _status: -1, _result: ctor }; - var lazyType = { - $$typeof: REACT_LAZY_TYPE, - _payload: ctor, - _init: lazyInitializer - }, - ioInfo = { - name: "lazy", - start: -1, - end: -1, - value: null, - owner: null, - debugStack: Error("react-stack-top-frame"), - debugTask: console.createTask ? console.createTask("lazy()") : null - }; - ctor._ioInfo = ioInfo; - lazyType._debugInfo = [{ awaited: ioInfo }]; - return lazyType; - }; - exports.memo = function (type, compare) { - null == type && - console.error( - "memo: The first argument must be a component. Instead received: %s", - null === type ? "null" : typeof type - ); - compare = { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: void 0 === compare ? null : compare - }; - var ownName; - Object.defineProperty(compare, "displayName", { - enumerable: !1, - configurable: !0, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; - type.name || - type.displayName || - (Object.defineProperty(type, "name", { value: name }), - (type.displayName = name)); - } - }); - return compare; - }; - exports.startTransition = function (scope) { - var prevTransition = ReactSharedInternals.T, - currentTransition = {}; - currentTransition._updatedFibers = new Set(); - ReactSharedInternals.T = currentTransition; - try { - var returnValue = scope(), - onStartTransitionFinish = ReactSharedInternals.S; - null !== onStartTransitionFinish && - onStartTransitionFinish(currentTransition, returnValue); - "object" === typeof returnValue && - null !== returnValue && - "function" === typeof returnValue.then && - (ReactSharedInternals.asyncTransitions++, - returnValue.then(releaseAsyncTransition, releaseAsyncTransition), - returnValue.then(noop, reportGlobalError)); - } catch (error) { - reportGlobalError(error); - } finally { - null === prevTransition && - currentTransition._updatedFibers && - ((scope = currentTransition._updatedFibers.size), - currentTransition._updatedFibers.clear(), - 10 < scope && - console.warn( - "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." - )), - null !== prevTransition && - null !== currentTransition.types && - (null !== prevTransition.types && - prevTransition.types !== currentTransition.types && - console.error( - "We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React." - ), - (prevTransition.types = currentTransition.types)), - (ReactSharedInternals.T = prevTransition); - } - }; - exports.unstable_useCacheRefresh = function () { - return resolveDispatcher().useCacheRefresh(); - }; - exports.use = function (usable) { - return resolveDispatcher().use(usable); - }; - exports.useActionState = function (action, initialState, permalink) { - return resolveDispatcher().useActionState( - action, - initialState, - permalink - ); - }; - exports.useCallback = function (callback, deps) { - return resolveDispatcher().useCallback(callback, deps); - }; - exports.useContext = function (Context) { - var dispatcher = resolveDispatcher(); - Context.$$typeof === REACT_CONSUMER_TYPE && - console.error( - "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?" - ); - return dispatcher.useContext(Context); - }; - exports.useDebugValue = function (value, formatterFn) { - return resolveDispatcher().useDebugValue(value, formatterFn); - }; - exports.useDeferredValue = function (value, initialValue) { - return resolveDispatcher().useDeferredValue(value, initialValue); - }; - exports.useEffect = function (create, deps) { - null == create && - console.warn( - "React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?" - ); - return resolveDispatcher().useEffect(create, deps); - }; - exports.useEffectEvent = function (callback) { - return resolveDispatcher().useEffectEvent(callback); - }; - exports.useId = function () { - return resolveDispatcher().useId(); - }; - exports.useImperativeHandle = function (ref, create, deps) { - return resolveDispatcher().useImperativeHandle(ref, create, deps); - }; - exports.useInsertionEffect = function (create, deps) { - null == create && - console.warn( - "React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?" - ); - return resolveDispatcher().useInsertionEffect(create, deps); - }; - exports.useLayoutEffect = function (create, deps) { - null == create && - console.warn( - "React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?" - ); - return resolveDispatcher().useLayoutEffect(create, deps); - }; - exports.useMemo = function (create, deps) { - return resolveDispatcher().useMemo(create, deps); - }; - exports.useOptimistic = function (passthrough, reducer) { - return resolveDispatcher().useOptimistic(passthrough, reducer); - }; - exports.useReducer = function (reducer, initialArg, init) { - return resolveDispatcher().useReducer(reducer, initialArg, init); - }; - exports.useRef = function (initialValue) { - return resolveDispatcher().useRef(initialValue); - }; - exports.useState = function (initialState) { - return resolveDispatcher().useState(initialState); - }; - exports.useSyncExternalStore = function ( - subscribe, - getSnapshot, - getServerSnapshot - ) { - return resolveDispatcher().useSyncExternalStore( - subscribe, - getSnapshot, - getServerSnapshot - ); - }; - exports.useTransition = function () { - return resolveDispatcher().useTransition(); - }; - exports.version = "19.2.0"; - "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && - "function" === - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && - __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js deleted file mode 100644 index 0637a6ad47..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.production.js +++ /dev/null @@ -1,542 +0,0 @@ -/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - MAYBE_ITERATOR_SYMBOL = Symbol.iterator; -function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; -} -var ReactNoopUpdateQueue = { - isMounted: function () { - return !1; - }, - enqueueForceUpdate: function () {}, - enqueueReplaceState: function () {}, - enqueueSetState: function () {} - }, - assign = Object.assign, - emptyObject = {}; -function Component(props, context, updater) { - this.props = props; - this.context = context; - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; -} -Component.prototype.isReactComponent = {}; -Component.prototype.setState = function (partialState, callback) { - if ( - "object" !== typeof partialState && - "function" !== typeof partialState && - null != partialState - ) - throw Error( - "takes an object of state variables to update or a function which returns an object of state variables." - ); - this.updater.enqueueSetState(this, partialState, callback, "setState"); -}; -Component.prototype.forceUpdate = function (callback) { - this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); -}; -function ComponentDummy() {} -ComponentDummy.prototype = Component.prototype; -function PureComponent(props, context, updater) { - this.props = props; - this.context = context; - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; -} -var pureComponentPrototype = (PureComponent.prototype = new ComponentDummy()); -pureComponentPrototype.constructor = PureComponent; -assign(pureComponentPrototype, Component.prototype); -pureComponentPrototype.isPureReactComponent = !0; -var isArrayImpl = Array.isArray; -function noop() {} -var ReactSharedInternals = { H: null, A: null, T: null, S: null }, - hasOwnProperty = Object.prototype.hasOwnProperty; -function ReactElement(type, key, props) { - var refProp = props.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== refProp ? refProp : null, - props: props - }; -} -function cloneAndReplaceKey(oldElement, newKey) { - return ReactElement(oldElement.type, newKey, oldElement.props); -} -function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); -} -function escape(key) { - var escaperLookup = { "=": "=0", ":": "=2" }; - return ( - "$" + - key.replace(/[=:]/g, function (match) { - return escaperLookup[match]; - }) - ); -} -var userProvidedKeyEscapeRegex = /\/+/g; -function getElementKey(element, index) { - return "object" === typeof element && null !== element && null != element.key - ? escape("" + element.key) - : index.toString(36); -} -function resolveThenable(thenable) { - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - switch ( - ("string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenable.status = "pending"), - thenable.then( - function (fulfilledValue) { - "pending" === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = fulfilledValue)); - }, - function (error) { - "pending" === thenable.status && - ((thenable.status = "rejected"), (thenable.reason = error)); - } - )), - thenable.status) - ) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - } - throw thenable; -} -function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - if ("undefined" === type || "boolean" === type) children = null; - var invokeCallback = !1; - if (null === children) invokeCallback = !0; - else - switch (type) { - case "bigint": - case "string": - case "number": - invokeCallback = !0; - break; - case "object": - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = !0; - break; - case REACT_LAZY_TYPE: - return ( - (invokeCallback = children._init), - mapIntoArray( - invokeCallback(children._payload), - array, - escapedPrefix, - nameSoFar, - callback - ) - ); - } - } - if (invokeCallback) - return ( - (callback = callback(children)), - (invokeCallback = - "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), - isArrayImpl(callback) - ? ((escapedPrefix = ""), - null != invokeCallback && - (escapedPrefix = - invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), - mapIntoArray(callback, array, escapedPrefix, "", function (c) { - return c; - })) - : null != callback && - (isValidElement(callback) && - (callback = cloneAndReplaceKey( - callback, - escapedPrefix + - (null == callback.key || - (children && children.key === callback.key) - ? "" - : ("" + callback.key).replace( - userProvidedKeyEscapeRegex, - "$&/" - ) + "/") + - invokeCallback - )), - array.push(callback)), - 1 - ); - invokeCallback = 0; - var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; - if (isArrayImpl(children)) - for (var i = 0; i < children.length; i++) - (nameSoFar = children[i]), - (type = nextNamePrefix + getElementKey(nameSoFar, i)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if (((i = getIteratorFn(children)), "function" === typeof i)) - for ( - children = i.call(children), i = 0; - !(nameSoFar = children.next()).done; - - ) - (nameSoFar = nameSoFar.value), - (type = nextNamePrefix + getElementKey(nameSoFar, i++)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if ("object" === type) { - if ("function" === typeof children.then) - return mapIntoArray( - resolveThenable(children), - array, - escapedPrefix, - nameSoFar, - callback - ); - array = String(children); - throw Error( - "Objects are not valid as a React child (found: " + - ("[object Object]" === array - ? "object with keys {" + Object.keys(children).join(", ") + "}" - : array) + - "). If you meant to render a collection of children, use an array instead." - ); - } - return invokeCallback; -} -function mapChildren(children, func, context) { - if (null == children) return children; - var result = [], - count = 0; - mapIntoArray(children, result, "", "", function (child) { - return func.call(context, child, count++); - }); - return result; -} -function lazyInitializer(payload) { - if (-1 === payload._status) { - var ctor = payload._result; - ctor = ctor(); - ctor.then( - function (moduleObject) { - if (0 === payload._status || -1 === payload._status) - (payload._status = 1), (payload._result = moduleObject); - }, - function (error) { - if (0 === payload._status || -1 === payload._status) - (payload._status = 2), (payload._result = error); - } - ); - -1 === payload._status && ((payload._status = 0), (payload._result = ctor)); - } - if (1 === payload._status) return payload._result.default; - throw payload._result; -} -var reportGlobalError = - "function" === typeof reportError - ? reportError - : function (error) { - if ( - "object" === typeof window && - "function" === typeof window.ErrorEvent - ) { - var event = new window.ErrorEvent("error", { - bubbles: !0, - cancelable: !0, - message: - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error), - error: error - }); - if (!window.dispatchEvent(event)) return; - } else if ( - "object" === typeof process && - "function" === typeof process.emit - ) { - process.emit("uncaughtException", error); - return; - } - console.error(error); - }, - Children = { - map: mapChildren, - forEach: function (children, forEachFunc, forEachContext) { - mapChildren( - children, - function () { - forEachFunc.apply(this, arguments); - }, - forEachContext - ); - }, - count: function (children) { - var n = 0; - mapChildren(children, function () { - n++; - }); - return n; - }, - toArray: function (children) { - return ( - mapChildren(children, function (child) { - return child; - }) || [] - ); - }, - only: function (children) { - if (!isValidElement(children)) - throw Error( - "React.Children.only expected to receive a single React element child." - ); - return children; - } - }; -exports.Activity = REACT_ACTIVITY_TYPE; -exports.Children = Children; -exports.Component = Component; -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.Profiler = REACT_PROFILER_TYPE; -exports.PureComponent = PureComponent; -exports.StrictMode = REACT_STRICT_MODE_TYPE; -exports.Suspense = REACT_SUSPENSE_TYPE; -exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = - ReactSharedInternals; -exports.__COMPILER_RUNTIME = { - __proto__: null, - c: function (size) { - return ReactSharedInternals.H.useMemoCache(size); - } -}; -exports.cache = function (fn) { - return function () { - return fn.apply(null, arguments); - }; -}; -exports.cacheSignal = function () { - return null; -}; -exports.cloneElement = function (element, config, children) { - if (null === element || void 0 === element) - throw Error( - "The argument must be a React element, but you passed " + element + "." - ); - var props = assign({}, element.props), - key = element.key; - if (null != config) - for (propName in (void 0 !== config.key && (key = "" + config.key), config)) - !hasOwnProperty.call(config, propName) || - "key" === propName || - "__self" === propName || - "__source" === propName || - ("ref" === propName && void 0 === config.ref) || - (props[propName] = config[propName]); - var propName = arguments.length - 2; - if (1 === propName) props.children = children; - else if (1 < propName) { - for (var childArray = Array(propName), i = 0; i < propName; i++) - childArray[i] = arguments[i + 2]; - props.children = childArray; - } - return ReactElement(element.type, key, props); -}; -exports.createContext = function (defaultValue) { - defaultValue = { - $$typeof: REACT_CONTEXT_TYPE, - _currentValue: defaultValue, - _currentValue2: defaultValue, - _threadCount: 0, - Provider: null, - Consumer: null - }; - defaultValue.Provider = defaultValue; - defaultValue.Consumer = { - $$typeof: REACT_CONSUMER_TYPE, - _context: defaultValue - }; - return defaultValue; -}; -exports.createElement = function (type, config, children) { - var propName, - props = {}, - key = null; - if (null != config) - for (propName in (void 0 !== config.key && (key = "" + config.key), config)) - hasOwnProperty.call(config, propName) && - "key" !== propName && - "__self" !== propName && - "__source" !== propName && - (props[propName] = config[propName]); - var childrenLength = arguments.length - 2; - if (1 === childrenLength) props.children = children; - else if (1 < childrenLength) { - for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) - childArray[i] = arguments[i + 2]; - props.children = childArray; - } - if (type && type.defaultProps) - for (propName in ((childrenLength = type.defaultProps), childrenLength)) - void 0 === props[propName] && - (props[propName] = childrenLength[propName]); - return ReactElement(type, key, props); -}; -exports.createRef = function () { - return { current: null }; -}; -exports.forwardRef = function (render) { - return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; -}; -exports.isValidElement = isValidElement; -exports.lazy = function (ctor) { - return { - $$typeof: REACT_LAZY_TYPE, - _payload: { _status: -1, _result: ctor }, - _init: lazyInitializer - }; -}; -exports.memo = function (type, compare) { - return { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: void 0 === compare ? null : compare - }; -}; -exports.startTransition = function (scope) { - var prevTransition = ReactSharedInternals.T, - currentTransition = {}; - ReactSharedInternals.T = currentTransition; - try { - var returnValue = scope(), - onStartTransitionFinish = ReactSharedInternals.S; - null !== onStartTransitionFinish && - onStartTransitionFinish(currentTransition, returnValue); - "object" === typeof returnValue && - null !== returnValue && - "function" === typeof returnValue.then && - returnValue.then(noop, reportGlobalError); - } catch (error) { - reportGlobalError(error); - } finally { - null !== prevTransition && - null !== currentTransition.types && - (prevTransition.types = currentTransition.types), - (ReactSharedInternals.T = prevTransition); - } -}; -exports.unstable_useCacheRefresh = function () { - return ReactSharedInternals.H.useCacheRefresh(); -}; -exports.use = function (usable) { - return ReactSharedInternals.H.use(usable); -}; -exports.useActionState = function (action, initialState, permalink) { - return ReactSharedInternals.H.useActionState(action, initialState, permalink); -}; -exports.useCallback = function (callback, deps) { - return ReactSharedInternals.H.useCallback(callback, deps); -}; -exports.useContext = function (Context) { - return ReactSharedInternals.H.useContext(Context); -}; -exports.useDebugValue = function () {}; -exports.useDeferredValue = function (value, initialValue) { - return ReactSharedInternals.H.useDeferredValue(value, initialValue); -}; -exports.useEffect = function (create, deps) { - return ReactSharedInternals.H.useEffect(create, deps); -}; -exports.useEffectEvent = function (callback) { - return ReactSharedInternals.H.useEffectEvent(callback); -}; -exports.useId = function () { - return ReactSharedInternals.H.useId(); -}; -exports.useImperativeHandle = function (ref, create, deps) { - return ReactSharedInternals.H.useImperativeHandle(ref, create, deps); -}; -exports.useInsertionEffect = function (create, deps) { - return ReactSharedInternals.H.useInsertionEffect(create, deps); -}; -exports.useLayoutEffect = function (create, deps) { - return ReactSharedInternals.H.useLayoutEffect(create, deps); -}; -exports.useMemo = function (create, deps) { - return ReactSharedInternals.H.useMemo(create, deps); -}; -exports.useOptimistic = function (passthrough, reducer) { - return ReactSharedInternals.H.useOptimistic(passthrough, reducer); -}; -exports.useReducer = function (reducer, initialArg, init) { - return ReactSharedInternals.H.useReducer(reducer, initialArg, init); -}; -exports.useRef = function (initialValue) { - return ReactSharedInternals.H.useRef(initialValue); -}; -exports.useState = function (initialState) { - return ReactSharedInternals.H.useState(initialState); -}; -exports.useSyncExternalStore = function ( - subscribe, - getSnapshot, - getServerSnapshot -) { - return ReactSharedInternals.H.useSyncExternalStore( - subscribe, - getSnapshot, - getServerSnapshot - ); -}; -exports.useTransition = function () { - return ReactSharedInternals.H.useTransition(); -}; -exports.version = "19.2.0"; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js deleted file mode 100644 index 6d1588e9ac..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.development.js +++ /dev/null @@ -1,848 +0,0 @@ -/** - * @license React - * react.react-server.development.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -"production" !== process.env.NODE_ENV && - (function () { - function noop() {} - function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) - return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; - } - function testStringCoercion(value) { - return "" + value; - } - function checkKeyStringCoercion(value) { - try { - testStringCoercion(value); - var JSCompiler_inline_result = !1; - } catch (e) { - JSCompiler_inline_result = !0; - } - if (JSCompiler_inline_result) { - JSCompiler_inline_result = console; - var JSCompiler_temp_const = JSCompiler_inline_result.error; - var JSCompiler_inline_result$jscomp$0 = - ("function" === typeof Symbol && - Symbol.toStringTag && - value[Symbol.toStringTag]) || - value.constructor.name || - "Object"; - JSCompiler_temp_const.call( - JSCompiler_inline_result, - "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", - JSCompiler_inline_result$jscomp$0 - ); - return testStringCoercion(value); - } - } - function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch ( - ("number" === typeof type.tag && - console.error( - "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." - ), - type.$$typeof) - ) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; - } - function getTaskName(type) { - if (type === REACT_FRAGMENT_TYPE) return "<>"; - if ( - "object" === typeof type && - null !== type && - type.$$typeof === REACT_LAZY_TYPE - ) - return "<...>"; - try { - var name = getComponentNameFromType(type); - return name ? "<" + name + ">" : "<...>"; - } catch (x) { - return "<...>"; - } - } - function getOwner() { - var dispatcher = ReactSharedInternals.A; - return null === dispatcher ? null : dispatcher.getOwner(); - } - function UnknownOwner() { - return Error("react-stack-top-frame"); - } - function hasValidKey(config) { - if (hasOwnProperty.call(config, "key")) { - var getter = Object.getOwnPropertyDescriptor(config, "key").get; - if (getter && getter.isReactWarning) return !1; - } - return void 0 !== config.key; - } - function defineKeyPropWarningGetter(props, displayName) { - function warnAboutAccessingKey() { - specialPropKeyWarningShown || - ((specialPropKeyWarningShown = !0), - console.error( - "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", - displayName - )); - } - warnAboutAccessingKey.isReactWarning = !0; - Object.defineProperty(props, "key", { - get: warnAboutAccessingKey, - configurable: !0 - }); - } - function elementRefGetterWithDeprecationWarning() { - var componentName = getComponentNameFromType(this.type); - didWarnAboutElementRef[componentName] || - ((didWarnAboutElementRef[componentName] = !0), - console.error( - "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." - )); - componentName = this.props.ref; - return void 0 !== componentName ? componentName : null; - } - function ReactElement(type, key, props, owner, debugStack, debugTask) { - var refProp = props.ref; - type = { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - props: props, - _owner: owner - }; - null !== (void 0 !== refProp ? refProp : null) - ? Object.defineProperty(type, "ref", { - enumerable: !1, - get: elementRefGetterWithDeprecationWarning - }) - : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); - type._store = {}; - Object.defineProperty(type._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: 0 - }); - Object.defineProperty(type, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(type, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugStack - }); - Object.defineProperty(type, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: debugTask - }); - Object.freeze && (Object.freeze(type.props), Object.freeze(type)); - return type; - } - function cloneAndReplaceKey(oldElement, newKey) { - newKey = ReactElement( - oldElement.type, - newKey, - oldElement.props, - oldElement._owner, - oldElement._debugStack, - oldElement._debugTask - ); - oldElement._store && - (newKey._store.validated = oldElement._store.validated); - return newKey; - } - function validateChildKeys(node) { - isValidElement(node) - ? node._store && (node._store.validated = 1) - : "object" === typeof node && - null !== node && - node.$$typeof === REACT_LAZY_TYPE && - ("fulfilled" === node._payload.status - ? isValidElement(node._payload.value) && - node._payload.value._store && - (node._payload.value._store.validated = 1) - : node._store && (node._store.validated = 1)); - } - function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); - } - function escape(key) { - var escaperLookup = { "=": "=0", ":": "=2" }; - return ( - "$" + - key.replace(/[=:]/g, function (match) { - return escaperLookup[match]; - }) - ); - } - function getElementKey(element, index) { - return "object" === typeof element && - null !== element && - null != element.key - ? (checkKeyStringCoercion(element.key), escape("" + element.key)) - : index.toString(36); - } - function resolveThenable(thenable) { - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - switch ( - ("string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenable.status = "pending"), - thenable.then( - function (fulfilledValue) { - "pending" === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = fulfilledValue)); - }, - function (error) { - "pending" === thenable.status && - ((thenable.status = "rejected"), - (thenable.reason = error)); - } - )), - thenable.status) - ) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - } - throw thenable; - } - function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - if ("undefined" === type || "boolean" === type) children = null; - var invokeCallback = !1; - if (null === children) invokeCallback = !0; - else - switch (type) { - case "bigint": - case "string": - case "number": - invokeCallback = !0; - break; - case "object": - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = !0; - break; - case REACT_LAZY_TYPE: - return ( - (invokeCallback = children._init), - mapIntoArray( - invokeCallback(children._payload), - array, - escapedPrefix, - nameSoFar, - callback - ) - ); - } - } - if (invokeCallback) { - invokeCallback = children; - callback = callback(invokeCallback); - var childKey = - "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; - isArrayImpl(callback) - ? ((escapedPrefix = ""), - null != childKey && - (escapedPrefix = - childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), - mapIntoArray(callback, array, escapedPrefix, "", function (c) { - return c; - })) - : null != callback && - (isValidElement(callback) && - (null != callback.key && - ((invokeCallback && invokeCallback.key === callback.key) || - checkKeyStringCoercion(callback.key)), - (escapedPrefix = cloneAndReplaceKey( - callback, - escapedPrefix + - (null == callback.key || - (invokeCallback && invokeCallback.key === callback.key) - ? "" - : ("" + callback.key).replace( - userProvidedKeyEscapeRegex, - "$&/" - ) + "/") + - childKey - )), - "" !== nameSoFar && - null != invokeCallback && - isValidElement(invokeCallback) && - null == invokeCallback.key && - invokeCallback._store && - !invokeCallback._store.validated && - (escapedPrefix._store.validated = 2), - (callback = escapedPrefix)), - array.push(callback)); - return 1; - } - invokeCallback = 0; - childKey = "" === nameSoFar ? "." : nameSoFar + ":"; - if (isArrayImpl(children)) - for (var i = 0; i < children.length; i++) - (nameSoFar = children[i]), - (type = childKey + getElementKey(nameSoFar, i)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if (((i = getIteratorFn(children)), "function" === typeof i)) - for ( - i === children.entries && - (didWarnAboutMaps || - console.warn( - "Using Maps as children is not supported. Use an array of keyed ReactElements instead." - ), - (didWarnAboutMaps = !0)), - children = i.call(children), - i = 0; - !(nameSoFar = children.next()).done; - - ) - (nameSoFar = nameSoFar.value), - (type = childKey + getElementKey(nameSoFar, i++)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if ("object" === type) { - if ("function" === typeof children.then) - return mapIntoArray( - resolveThenable(children), - array, - escapedPrefix, - nameSoFar, - callback - ); - array = String(children); - throw Error( - "Objects are not valid as a React child (found: " + - ("[object Object]" === array - ? "object with keys {" + Object.keys(children).join(", ") + "}" - : array) + - "). If you meant to render a collection of children, use an array instead." - ); - } - return invokeCallback; - } - function mapChildren(children, func, context) { - if (null == children) return children; - var result = [], - count = 0; - mapIntoArray(children, result, "", "", function (child) { - return func.call(context, child, count++); - }); - return result; - } - function resolveDispatcher() { - var dispatcher = ReactSharedInternals.H; - null === dispatcher && - console.error( - "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." - ); - return dispatcher; - } - function lazyInitializer(payload) { - if (-1 === payload._status) { - var ioInfo = payload._ioInfo; - null != ioInfo && (ioInfo.start = ioInfo.end = performance.now()); - ioInfo = payload._result; - var thenable = ioInfo(); - thenable.then( - function (moduleObject) { - if (0 === payload._status || -1 === payload._status) { - payload._status = 1; - payload._result = moduleObject; - var _ioInfo = payload._ioInfo; - null != _ioInfo && (_ioInfo.end = performance.now()); - void 0 === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = moduleObject)); - } - }, - function (error) { - if (0 === payload._status || -1 === payload._status) { - payload._status = 2; - payload._result = error; - var _ioInfo2 = payload._ioInfo; - null != _ioInfo2 && (_ioInfo2.end = performance.now()); - void 0 === thenable.status && - ((thenable.status = "rejected"), (thenable.reason = error)); - } - } - ); - ioInfo = payload._ioInfo; - if (null != ioInfo) { - ioInfo.value = thenable; - var displayName = thenable.displayName; - "string" === typeof displayName && (ioInfo.name = displayName); - } - -1 === payload._status && - ((payload._status = 0), (payload._result = thenable)); - } - if (1 === payload._status) - return ( - (ioInfo = payload._result), - void 0 === ioInfo && - console.error( - "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", - ioInfo - ), - "default" in ioInfo || - console.error( - "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", - ioInfo - ), - ioInfo.default - ); - throw payload._result; - } - function createCacheRoot() { - return new WeakMap(); - } - function createCacheNode() { - return { s: 0, v: void 0, o: null, p: null }; - } - var ReactSharedInternals = { - H: null, - A: null, - getCurrentStack: null, - recentlyCreatedOwnerStacks: 0 - }, - isArrayImpl = Array.isArray, - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - MAYBE_ITERATOR_SYMBOL = Symbol.iterator, - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), - hasOwnProperty = Object.prototype.hasOwnProperty, - assign = Object.assign, - createTask = console.createTask - ? console.createTask - : function () { - return null; - }, - createFakeCallStack = { - react_stack_bottom_frame: function (callStackForError) { - return callStackForError(); - } - }, - specialPropKeyWarningShown, - didWarnAboutOldJSXRuntime; - var didWarnAboutElementRef = {}; - var unknownOwnerDebugStack = - createFakeCallStack.react_stack_bottom_frame.bind( - createFakeCallStack, - UnknownOwner - )(); - var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); - var didWarnAboutMaps = !1, - userProvidedKeyEscapeRegex = /\/+/g; - exports.Children = { - map: mapChildren, - forEach: function (children, forEachFunc, forEachContext) { - mapChildren( - children, - function () { - forEachFunc.apply(this, arguments); - }, - forEachContext - ); - }, - count: function (children) { - var n = 0; - mapChildren(children, function () { - n++; - }); - return n; - }, - toArray: function (children) { - return ( - mapChildren(children, function (child) { - return child; - }) || [] - ); - }, - only: function (children) { - if (!isValidElement(children)) - throw Error( - "React.Children.only expected to receive a single React element child." - ); - return children; - } - }; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.Profiler = REACT_PROFILER_TYPE; - exports.StrictMode = REACT_STRICT_MODE_TYPE; - exports.Suspense = REACT_SUSPENSE_TYPE; - exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = - ReactSharedInternals; - exports.cache = function (fn) { - return function () { - var dispatcher = ReactSharedInternals.A; - if (!dispatcher) return fn.apply(null, arguments); - var fnMap = dispatcher.getCacheForType(createCacheRoot); - dispatcher = fnMap.get(fn); - void 0 === dispatcher && - ((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher)); - fnMap = 0; - for (var l = arguments.length; fnMap < l; fnMap++) { - var arg = arguments[fnMap]; - if ( - "function" === typeof arg || - ("object" === typeof arg && null !== arg) - ) { - var objectCache = dispatcher.o; - null === objectCache && - (dispatcher.o = objectCache = new WeakMap()); - dispatcher = objectCache.get(arg); - void 0 === dispatcher && - ((dispatcher = createCacheNode()), - objectCache.set(arg, dispatcher)); - } else - (objectCache = dispatcher.p), - null === objectCache && (dispatcher.p = objectCache = new Map()), - (dispatcher = objectCache.get(arg)), - void 0 === dispatcher && - ((dispatcher = createCacheNode()), - objectCache.set(arg, dispatcher)); - } - if (1 === dispatcher.s) return dispatcher.v; - if (2 === dispatcher.s) throw dispatcher.v; - try { - var result = fn.apply(null, arguments); - fnMap = dispatcher; - fnMap.s = 1; - return (fnMap.v = result); - } catch (error) { - throw ( - ((result = dispatcher), (result.s = 2), (result.v = error), error) - ); - } - }; - }; - exports.cacheSignal = function () { - var dispatcher = ReactSharedInternals.A; - return dispatcher ? dispatcher.cacheSignal() : null; - }; - exports.captureOwnerStack = function () { - var getCurrentStack = ReactSharedInternals.getCurrentStack; - return null === getCurrentStack ? null : getCurrentStack(); - }; - exports.cloneElement = function (element, config, children) { - if (null === element || void 0 === element) - throw Error( - "The argument must be a React element, but you passed " + - element + - "." - ); - var props = assign({}, element.props), - key = element.key, - owner = element._owner; - if (null != config) { - var JSCompiler_inline_result; - a: { - if ( - hasOwnProperty.call(config, "ref") && - (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( - config, - "ref" - ).get) && - JSCompiler_inline_result.isReactWarning - ) { - JSCompiler_inline_result = !1; - break a; - } - JSCompiler_inline_result = void 0 !== config.ref; - } - JSCompiler_inline_result && (owner = getOwner()); - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (key = "" + config.key)); - for (propName in config) - !hasOwnProperty.call(config, propName) || - "key" === propName || - "__self" === propName || - "__source" === propName || - ("ref" === propName && void 0 === config.ref) || - (props[propName] = config[propName]); - } - var propName = arguments.length - 2; - if (1 === propName) props.children = children; - else if (1 < propName) { - JSCompiler_inline_result = Array(propName); - for (var i = 0; i < propName; i++) - JSCompiler_inline_result[i] = arguments[i + 2]; - props.children = JSCompiler_inline_result; - } - props = ReactElement( - element.type, - key, - props, - owner, - element._debugStack, - element._debugTask - ); - for (key = 2; key < arguments.length; key++) - validateChildKeys(arguments[key]); - return props; - }; - exports.createElement = function (type, config, children) { - for (var i = 2; i < arguments.length; i++) - validateChildKeys(arguments[i]); - i = {}; - var key = null; - if (null != config) - for (propName in (didWarnAboutOldJSXRuntime || - !("__self" in config) || - "key" in config || - ((didWarnAboutOldJSXRuntime = !0), - console.warn( - "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" - )), - hasValidKey(config) && - (checkKeyStringCoercion(config.key), (key = "" + config.key)), - config)) - hasOwnProperty.call(config, propName) && - "key" !== propName && - "__self" !== propName && - "__source" !== propName && - (i[propName] = config[propName]); - var childrenLength = arguments.length - 2; - if (1 === childrenLength) i.children = children; - else if (1 < childrenLength) { - for ( - var childArray = Array(childrenLength), _i = 0; - _i < childrenLength; - _i++ - ) - childArray[_i] = arguments[_i + 2]; - Object.freeze && Object.freeze(childArray); - i.children = childArray; - } - if (type && type.defaultProps) - for (propName in ((childrenLength = type.defaultProps), childrenLength)) - void 0 === i[propName] && (i[propName] = childrenLength[propName]); - key && - defineKeyPropWarningGetter( - i, - "function" === typeof type - ? type.displayName || type.name || "Unknown" - : type - ); - var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; - return ReactElement( - type, - key, - i, - getOwner(), - propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, - propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask - ); - }; - exports.createRef = function () { - var refObject = { current: null }; - Object.seal(refObject); - return refObject; - }; - exports.forwardRef = function (render) { - null != render && render.$$typeof === REACT_MEMO_TYPE - ? console.error( - "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." - ) - : "function" !== typeof render - ? console.error( - "forwardRef requires a render function but was given %s.", - null === render ? "null" : typeof render - ) - : 0 !== render.length && - 2 !== render.length && - console.error( - "forwardRef render functions accept exactly two parameters: props and ref. %s", - 1 === render.length - ? "Did you forget to use the ref parameter?" - : "Any additional parameter will be undefined." - ); - null != render && - null != render.defaultProps && - console.error( - "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" - ); - var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render }, - ownName; - Object.defineProperty(elementType, "displayName", { - enumerable: !1, - configurable: !0, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; - render.name || - render.displayName || - (Object.defineProperty(render, "name", { value: name }), - (render.displayName = name)); - } - }); - return elementType; - }; - exports.isValidElement = isValidElement; - exports.lazy = function (ctor) { - ctor = { _status: -1, _result: ctor }; - var lazyType = { - $$typeof: REACT_LAZY_TYPE, - _payload: ctor, - _init: lazyInitializer - }, - ioInfo = { - name: "lazy", - start: -1, - end: -1, - value: null, - owner: null, - debugStack: Error("react-stack-top-frame"), - debugTask: console.createTask ? console.createTask("lazy()") : null - }; - ctor._ioInfo = ioInfo; - lazyType._debugInfo = [{ awaited: ioInfo }]; - return lazyType; - }; - exports.memo = function (type, compare) { - null == type && - console.error( - "memo: The first argument must be a component. Instead received: %s", - null === type ? "null" : typeof type - ); - compare = { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: void 0 === compare ? null : compare - }; - var ownName; - Object.defineProperty(compare, "displayName", { - enumerable: !1, - configurable: !0, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; - type.name || - type.displayName || - (Object.defineProperty(type, "name", { value: name }), - (type.displayName = name)); - } - }); - return compare; - }; - exports.use = function (usable) { - return resolveDispatcher().use(usable); - }; - exports.useCallback = function (callback, deps) { - return resolveDispatcher().useCallback(callback, deps); - }; - exports.useDebugValue = function (value, formatterFn) { - return resolveDispatcher().useDebugValue(value, formatterFn); - }; - exports.useId = function () { - return resolveDispatcher().useId(); - }; - exports.useMemo = function (create, deps) { - return resolveDispatcher().useMemo(create, deps); - }; - exports.version = "19.2.0"; - })(); diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js deleted file mode 100644 index cb7b63b319..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react.react-server.production.js +++ /dev/null @@ -1,423 +0,0 @@ -/** - * @license React - * react.react-server.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -"use strict"; -var ReactSharedInternals = { H: null, A: null }; -function formatProdErrorMessage(code) { - var url = "https://react.dev/errors/" + code; - if (1 < arguments.length) { - url += "?args[]=" + encodeURIComponent(arguments[1]); - for (var i = 2; i < arguments.length; i++) - url += "&args[]=" + encodeURIComponent(arguments[i]); - } - return ( - "Minified React error #" + - code + - "; visit " + - url + - " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." - ); -} -var isArrayImpl = Array.isArray; -function noop() {} -var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - MAYBE_ITERATOR_SYMBOL = Symbol.iterator; -function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; -} -var hasOwnProperty = Object.prototype.hasOwnProperty, - assign = Object.assign; -function ReactElement(type, key, props) { - var refProp = props.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== refProp ? refProp : null, - props: props - }; -} -function cloneAndReplaceKey(oldElement, newKey) { - return ReactElement(oldElement.type, newKey, oldElement.props); -} -function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); -} -function escape(key) { - var escaperLookup = { "=": "=0", ":": "=2" }; - return ( - "$" + - key.replace(/[=:]/g, function (match) { - return escaperLookup[match]; - }) - ); -} -var userProvidedKeyEscapeRegex = /\/+/g; -function getElementKey(element, index) { - return "object" === typeof element && null !== element && null != element.key - ? escape("" + element.key) - : index.toString(36); -} -function resolveThenable(thenable) { - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - switch ( - ("string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenable.status = "pending"), - thenable.then( - function (fulfilledValue) { - "pending" === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = fulfilledValue)); - }, - function (error) { - "pending" === thenable.status && - ((thenable.status = "rejected"), (thenable.reason = error)); - } - )), - thenable.status) - ) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - } - throw thenable; -} -function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - if ("undefined" === type || "boolean" === type) children = null; - var invokeCallback = !1; - if (null === children) invokeCallback = !0; - else - switch (type) { - case "bigint": - case "string": - case "number": - invokeCallback = !0; - break; - case "object": - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = !0; - break; - case REACT_LAZY_TYPE: - return ( - (invokeCallback = children._init), - mapIntoArray( - invokeCallback(children._payload), - array, - escapedPrefix, - nameSoFar, - callback - ) - ); - } - } - if (invokeCallback) - return ( - (callback = callback(children)), - (invokeCallback = - "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), - isArrayImpl(callback) - ? ((escapedPrefix = ""), - null != invokeCallback && - (escapedPrefix = - invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), - mapIntoArray(callback, array, escapedPrefix, "", function (c) { - return c; - })) - : null != callback && - (isValidElement(callback) && - (callback = cloneAndReplaceKey( - callback, - escapedPrefix + - (null == callback.key || - (children && children.key === callback.key) - ? "" - : ("" + callback.key).replace( - userProvidedKeyEscapeRegex, - "$&/" - ) + "/") + - invokeCallback - )), - array.push(callback)), - 1 - ); - invokeCallback = 0; - var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; - if (isArrayImpl(children)) - for (var i = 0; i < children.length; i++) - (nameSoFar = children[i]), - (type = nextNamePrefix + getElementKey(nameSoFar, i)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if (((i = getIteratorFn(children)), "function" === typeof i)) - for ( - children = i.call(children), i = 0; - !(nameSoFar = children.next()).done; - - ) - (nameSoFar = nameSoFar.value), - (type = nextNamePrefix + getElementKey(nameSoFar, i++)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if ("object" === type) { - if ("function" === typeof children.then) - return mapIntoArray( - resolveThenable(children), - array, - escapedPrefix, - nameSoFar, - callback - ); - array = String(children); - throw Error( - formatProdErrorMessage( - 31, - "[object Object]" === array - ? "object with keys {" + Object.keys(children).join(", ") + "}" - : array - ) - ); - } - return invokeCallback; -} -function mapChildren(children, func, context) { - if (null == children) return children; - var result = [], - count = 0; - mapIntoArray(children, result, "", "", function (child) { - return func.call(context, child, count++); - }); - return result; -} -function lazyInitializer(payload) { - if (-1 === payload._status) { - var ctor = payload._result; - ctor = ctor(); - ctor.then( - function (moduleObject) { - if (0 === payload._status || -1 === payload._status) - (payload._status = 1), (payload._result = moduleObject); - }, - function (error) { - if (0 === payload._status || -1 === payload._status) - (payload._status = 2), (payload._result = error); - } - ); - -1 === payload._status && ((payload._status = 0), (payload._result = ctor)); - } - if (1 === payload._status) return payload._result.default; - throw payload._result; -} -function createCacheRoot() { - return new WeakMap(); -} -function createCacheNode() { - return { s: 0, v: void 0, o: null, p: null }; -} -exports.Children = { - map: mapChildren, - forEach: function (children, forEachFunc, forEachContext) { - mapChildren( - children, - function () { - forEachFunc.apply(this, arguments); - }, - forEachContext - ); - }, - count: function (children) { - var n = 0; - mapChildren(children, function () { - n++; - }); - return n; - }, - toArray: function (children) { - return ( - mapChildren(children, function (child) { - return child; - }) || [] - ); - }, - only: function (children) { - if (!isValidElement(children)) throw Error(formatProdErrorMessage(143)); - return children; - } -}; -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.Profiler = REACT_PROFILER_TYPE; -exports.StrictMode = REACT_STRICT_MODE_TYPE; -exports.Suspense = REACT_SUSPENSE_TYPE; -exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = - ReactSharedInternals; -exports.cache = function (fn) { - return function () { - var dispatcher = ReactSharedInternals.A; - if (!dispatcher) return fn.apply(null, arguments); - var fnMap = dispatcher.getCacheForType(createCacheRoot); - dispatcher = fnMap.get(fn); - void 0 === dispatcher && - ((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher)); - fnMap = 0; - for (var l = arguments.length; fnMap < l; fnMap++) { - var arg = arguments[fnMap]; - if ( - "function" === typeof arg || - ("object" === typeof arg && null !== arg) - ) { - var objectCache = dispatcher.o; - null === objectCache && (dispatcher.o = objectCache = new WeakMap()); - dispatcher = objectCache.get(arg); - void 0 === dispatcher && - ((dispatcher = createCacheNode()), objectCache.set(arg, dispatcher)); - } else - (objectCache = dispatcher.p), - null === objectCache && (dispatcher.p = objectCache = new Map()), - (dispatcher = objectCache.get(arg)), - void 0 === dispatcher && - ((dispatcher = createCacheNode()), - objectCache.set(arg, dispatcher)); - } - if (1 === dispatcher.s) return dispatcher.v; - if (2 === dispatcher.s) throw dispatcher.v; - try { - var result = fn.apply(null, arguments); - fnMap = dispatcher; - fnMap.s = 1; - return (fnMap.v = result); - } catch (error) { - throw ((result = dispatcher), (result.s = 2), (result.v = error), error); - } - }; -}; -exports.cacheSignal = function () { - var dispatcher = ReactSharedInternals.A; - return dispatcher ? dispatcher.cacheSignal() : null; -}; -exports.captureOwnerStack = function () { - return null; -}; -exports.cloneElement = function (element, config, children) { - if (null === element || void 0 === element) - throw Error(formatProdErrorMessage(267, element)); - var props = assign({}, element.props), - key = element.key; - if (null != config) - for (propName in (void 0 !== config.key && (key = "" + config.key), config)) - !hasOwnProperty.call(config, propName) || - "key" === propName || - "__self" === propName || - "__source" === propName || - ("ref" === propName && void 0 === config.ref) || - (props[propName] = config[propName]); - var propName = arguments.length - 2; - if (1 === propName) props.children = children; - else if (1 < propName) { - for (var childArray = Array(propName), i = 0; i < propName; i++) - childArray[i] = arguments[i + 2]; - props.children = childArray; - } - return ReactElement(element.type, key, props); -}; -exports.createElement = function (type, config, children) { - var propName, - props = {}, - key = null; - if (null != config) - for (propName in (void 0 !== config.key && (key = "" + config.key), config)) - hasOwnProperty.call(config, propName) && - "key" !== propName && - "__self" !== propName && - "__source" !== propName && - (props[propName] = config[propName]); - var childrenLength = arguments.length - 2; - if (1 === childrenLength) props.children = children; - else if (1 < childrenLength) { - for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) - childArray[i] = arguments[i + 2]; - props.children = childArray; - } - if (type && type.defaultProps) - for (propName in ((childrenLength = type.defaultProps), childrenLength)) - void 0 === props[propName] && - (props[propName] = childrenLength[propName]); - return ReactElement(type, key, props); -}; -exports.createRef = function () { - return { current: null }; -}; -exports.forwardRef = function (render) { - return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; -}; -exports.isValidElement = isValidElement; -exports.lazy = function (ctor) { - return { - $$typeof: REACT_LAZY_TYPE, - _payload: { _status: -1, _result: ctor }, - _init: lazyInitializer - }; -}; -exports.memo = function (type, compare) { - return { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: void 0 === compare ? null : compare - }; -}; -exports.use = function (usable) { - return ReactSharedInternals.H.use(usable); -}; -exports.useCallback = function (callback, deps) { - return ReactSharedInternals.H.useCallback(callback, deps); -}; -exports.useDebugValue = function () {}; -exports.useId = function () { - return ReactSharedInternals.H.useId(); -}; -exports.useMemo = function (create, deps) { - return ReactSharedInternals.H.useMemo(create, deps); -}; -exports.version = "19.2.0"; diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js deleted file mode 100644 index ab6aabb0a9..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/compiler-runtime.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react-compiler-runtime.production.js'); -} else { - module.exports = require('./cjs/react-compiler-runtime.development.js'); -} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/index.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/index.js deleted file mode 100644 index d830d7a2f9..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react.production.js'); -} else { - module.exports = require('./cjs/react.development.js'); -} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js deleted file mode 100644 index 0a80857d2d..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react-jsx-dev-runtime.production.js'); -} else { - module.exports = require('./cjs/react-jsx-dev-runtime.development.js'); -} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js deleted file mode 100644 index d11e6e82d0..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-dev-runtime.react-server.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react-jsx-dev-runtime.react-server.production.js'); -} else { - module.exports = require('./cjs/react-jsx-dev-runtime.react-server.development.js'); -} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js deleted file mode 100644 index 8679b72159..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react-jsx-runtime.production.js'); -} else { - module.exports = require('./cjs/react-jsx-runtime.development.js'); -} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js deleted file mode 100644 index 2d23c8c344..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.react-server.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react-jsx-runtime.react-server.production.js'); -} else { - module.exports = require('./cjs/react-jsx-runtime.react-server.development.js'); -} diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/package.json b/node_modules/.pnpm/react@19.2.0/node_modules/react/package.json deleted file mode 100644 index ece7bd3190..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "react", - "description": "React is a JavaScript library for building user interfaces.", - "keywords": [ - "react" - ], - "version": "19.2.0", - "homepage": "https://react.dev/", - "bugs": "https://github.com/facebook/react/issues", - "license": "MIT", - "files": [ - "LICENSE", - "README.md", - "index.js", - "cjs/", - "compiler-runtime.js", - "jsx-runtime.js", - "jsx-runtime.react-server.js", - "jsx-dev-runtime.js", - "jsx-dev-runtime.react-server.js", - "react.react-server.js" - ], - "main": "index.js", - "exports": { - ".": { - "react-server": "./react.react-server.js", - "default": "./index.js" - }, - "./package.json": "./package.json", - "./jsx-runtime": { - "react-server": "./jsx-runtime.react-server.js", - "default": "./jsx-runtime.js" - }, - "./jsx-dev-runtime": { - "react-server": "./jsx-dev-runtime.react-server.js", - "default": "./jsx-dev-runtime.js" - }, - "./compiler-runtime": { - "react-server": "./compiler-runtime.js", - "default": "./compiler-runtime.js" - } - }, - "repository": { - "type": "git", - "url": "https://github.com/facebook/react.git", - "directory": "packages/react" - }, - "engines": { - "node": ">=0.10.0" - } -} \ No newline at end of file diff --git a/node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js b/node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js deleted file mode 100644 index c66e3b7636..0000000000 --- a/node_modules/.pnpm/react@19.2.0/node_modules/react/react.react-server.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.env.NODE_ENV === 'production') { - module.exports = require('./cjs/react.react-server.production.js'); -} else { - module.exports = require('./cjs/react.react-server.development.js'); -} diff --git a/node_modules/embla-carousel-autoplay b/node_modules/embla-carousel-autoplay deleted file mode 120000 index a653f304af..0000000000 --- a/node_modules/embla-carousel-autoplay +++ /dev/null @@ -1 +0,0 @@ -.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay \ No newline at end of file diff --git a/node_modules/embla-carousel-react b/node_modules/embla-carousel-react deleted file mode 120000 index 7ae3795080..0000000000 --- a/node_modules/embla-carousel-react +++ /dev/null @@ -1 +0,0 @@ -.pnpm/embla-carousel-react@8.6.0_react@19.2.0/node_modules/embla-carousel-react \ No newline at end of file diff --git a/package.json b/package.json deleted file mode 100644 index 221aa2646b..0000000000 --- a/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dependencies": { - "embla-carousel-autoplay": "^8.6.0", - "embla-carousel-react": "^8.6.0" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 78670e94f8..0000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,60 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - embla-carousel-autoplay: - specifier: ^8.6.0 - version: 8.6.0(embla-carousel@8.6.0) - embla-carousel-react: - specifier: ^8.6.0 - version: 8.6.0(react@19.2.0) - -packages: - - embla-carousel-autoplay@8.6.0: - resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel-react@8.6.0: - resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} - - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} - engines: {node: '>=0.10.0'} - -snapshots: - - embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel-react@8.6.0(react@19.2.0): - dependencies: - embla-carousel: 8.6.0 - embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.2.0 - - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: {} - - react@19.2.0: {} diff --git a/web/app/components/explore/banner/banner.tsx b/web/app/components/explore/banner/banner.tsx index c917f64734..12616b73d9 100644 --- a/web/app/components/explore/banner/banner.tsx +++ b/web/app/components/explore/banner/banner.tsx @@ -11,14 +11,14 @@ const MIN_LOADING_HEIGHT = 168 const Banner: FC = () => { const { locale } = useI18N() - const { data: banners, isLoading } = useGetBanners(locale) + const { data: banners, isLoading, isError } = useGetBanners(locale) const enabledBanners = useMemo( () => banners?.filter((banner: BannerData) => banner.status === 'enabled') ?? [], [banners], ) - if (isLoading || !banners) { + if (isLoading) { return (
{ ) } - if (enabledBanners.length === 0) + if (isError || enabledBanners.length === 0) return null return ( diff --git a/web/package.json b/web/package.json index 366dc99e6f..7ac0f2956d 100644 --- a/web/package.json +++ b/web/package.json @@ -78,6 +78,8 @@ "echarts": "^5.5.1", "echarts-for-react": "^3.0.2", "elkjs": "^0.9.3", + "embla-carousel-autoplay": "^8.6.0", + "embla-carousel-react": "^8.6.0", "emoji-mart": "^5.5.2", "fast-deep-equal": "^3.1.3", "html-to-image": "1.11.11", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 28758f1142..dc29093422 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -154,6 +154,12 @@ importers: elkjs: specifier: ^0.9.3 version: 0.9.3 + embla-carousel-autoplay: + specifier: ^8.6.0 + version: 8.6.0(embla-carousel@8.6.0) + embla-carousel-react: + specifier: ^8.6.0 + version: 8.6.0(react@19.1.1) emoji-mart: specifier: ^5.5.2 version: 5.6.0 @@ -4872,6 +4878,24 @@ packages: elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + embla-carousel-autoplay@8.6.0: + resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0: + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + embla-carousel-reactive-utils@8.6.0: + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -13873,6 +13897,22 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel-react@8.6.0(react@19.1.1): + dependencies: + embla-carousel: 8.6.0 + embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) + react: 19.1.1 + + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: {} + emittery@0.13.1: {} emoji-mart@5.6.0: {} From 1539d86f7dc01c80a9aa22ed518ec855b7eff884 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 14 Oct 2025 17:28:49 +0800 Subject: [PATCH 36/85] chore: instruction and vars to readonly --- web/app/components/app/configuration/config/index.tsx | 7 ++++++- web/app/components/app/configuration/preview.tsx | 1 + web/context/debug-configuration.ts | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/web/app/components/app/configuration/config/index.tsx b/web/app/components/app/configuration/config/index.tsx index d0375c6de9..3e8b5f1caa 100644 --- a/web/app/components/app/configuration/config/index.tsx +++ b/web/app/components/app/configuration/config/index.tsx @@ -19,6 +19,7 @@ import { ModelModeType } from '@/types/app' const Config: FC = () => { const { + readonly, mode, isAdvancedMode, modelModeType, @@ -66,16 +67,20 @@ const Config: FC = () => { promptTemplate={promptTemplate} promptVariables={promptVariables} onChange={handlePromptChange} + readonly={readonly} /> {/* Variables */} {/* Dataset */} - + {/* Tools */} {isAgent && ( diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index cba81a7199..167019c60b 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -209,6 +209,7 @@ const Configuration: FC = ({
} const value = { + readonly: true, appId, isAPIKeySet: true, isTrailFinished: false, diff --git a/web/context/debug-configuration.ts b/web/context/debug-configuration.ts index bbf7be8099..1d4339f5e9 100644 --- a/web/context/debug-configuration.ts +++ b/web/context/debug-configuration.ts @@ -29,6 +29,7 @@ import type { Collection } from '@/app/components/tools/types' import { noop } from 'lodash-es' type IDebugConfiguration = { + readonly?: boolean appId: string isAPIKeySet: boolean isTrailFinished: boolean @@ -108,6 +109,7 @@ type IDebugConfiguration = { } const DebugConfigurationContext = createContext({ + readonly: false, appId: '', isAPIKeySet: false, isTrailFinished: false, From e1f8b4b387309853362041471e28687de7f34499 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 14 Oct 2025 18:31:42 +0800 Subject: [PATCH 37/85] feat: support show dataset in knowledge --- .../dataset-config/card-item/item.tsx | 16 +++++---- .../components/app/configuration/preview.tsx | 36 ++++++++++++++----- web/service/try-app.ts | 7 ++++ web/service/use-try-app.ts | 13 ++++++- 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/web/app/components/app/configuration/dataset-config/card-item/item.tsx b/web/app/components/app/configuration/dataset-config/card-item/item.tsx index 85d46122a3..b671d9c146 100644 --- a/web/app/components/app/configuration/dataset-config/card-item/item.tsx +++ b/web/app/components/app/configuration/dataset-config/card-item/item.tsx @@ -98,13 +98,15 @@ const Item: FC = ({ text={t('dataset.externalTag') as string} /> } - setShowSettingsModal(false)} footer={null} mask={isMobile} panelClassName='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'> - setShowSettingsModal(false)} - onSave={handleSave} - /> - + {showSettingsModal && ( + setShowSettingsModal(false)} footer={null} mask={isMobile} panelClassName='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'> + setShowSettingsModal(false)} + onSave={handleSave} + /> + + )}
) } diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index 167019c60b..eceb4972aa 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -21,7 +21,7 @@ import type { Features as FeaturesData, FileUpload } from '@/app/components/base import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' import { SupportUploadFileTypes } from '@/app/components/workflow/types' -import { useGetTryAppInfo } from '@/service/use-try-app' +import { useGetTryAppDataSets, useGetTryAppInfo } from '@/service/use-try-app' import { noop } from 'lodash' import { correctModelProvider } from '@/utils' import { userInputsFormToPromptVariables } from '@/utils/model-config' @@ -57,12 +57,36 @@ const Configuration: FC = ({ const media = useBreakpoints() const isMobile = media === MediaType.mobile - const { data: appDetail, isLoading } = useGetTryAppInfo(appId) + const { data: appDetail, isLoading: isLoadingAppDetail } = useGetTryAppInfo(appId) + const datasetIds = (() => { + if(isLoadingAppDetail) + return [] + const modelConfig = appDetail?.model_config + if(!modelConfig) + return [] + let datasets: any = null + + if (modelConfig.agent_mode?.tools?.find(({ dataset }: any) => dataset?.enabled)) + datasets = modelConfig.agent_mode?.tools.filter(({ dataset }: any) => dataset?.enabled) + // new dataset struct + else if (modelConfig.dataset_configs.datasets?.datasets?.length > 0) + datasets = modelConfig.dataset_configs?.datasets?.datasets + + if (datasets?.length && datasets?.length > 0) + return datasets.map(({ dataset }: any) => dataset.id) + + return [] + })() + const { data: dataSetData, isLoading: isLoadingDatasets } = useGetTryAppDataSets(appId, datasetIds) + const dataSets = dataSetData?.data || [] + const isLoading = isLoadingAppDetail || isLoadingDatasets + const modelConfig = ((modelConfig?: BackendModelConfig) => { if(isLoading || !modelConfig) return defaultModelConfig const model = modelConfig.model + const newModelConfig = { provider: correctModelProvider(model.provider), model_id: model.name, @@ -105,7 +129,7 @@ const Configuration: FC = ({ retriever_resource: modelConfig.retriever_resource, annotation_reply: modelConfig.annotation_reply, external_data_tools: modelConfig.external_data_tools, - dataSets: [], + dataSets, agentConfig: appDetail?.mode === 'agent-chat' ? { max_iteration: DEFAULT_AGENT_SETTING.max_iteration, ...modelConfig.agent_mode, @@ -143,12 +167,6 @@ const Configuration: FC = ({ // completion configuration const completionPromptConfig = modelConfig?.completion_prompt_config || clone(DEFAULT_COMPLETION_PROMPT_CONFIG) as any - // datasets - const dataSets = (() => { - return [] - })() - // const selectedIds = dataSets.map(item => item.id) - // prompt & model config const inputs = {} const query = '' diff --git a/web/service/try-app.ts b/web/service/try-app.ts index e174a6a35d..a6f7a12c91 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -6,6 +6,8 @@ import type { SiteInfo, } from '@/models/share' import type { ModelConfig } from '@/types/app' +import qs from 'qs' +import type { DataSetListResponse } from '@/models/datasets' type TryAppInfo = { name: string @@ -17,3 +19,8 @@ type TryAppInfo = { export const fetchTryAppInfo = async (appId: string) => { return get(`/trial-apps/${appId}`) as Promise } + +export const fetchTryAppDatasets = (appId: string, ids: string[]) => { + const urlParams = qs.stringify({ ids }, { indices: false }) + return get(`/trial-apps/${appId}/datasets?${urlParams}`) +} diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index 1d7ed2ca02..1245e628e1 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -1,6 +1,7 @@ import { useQuery } from '@tanstack/react-query' -import { fetchTryAppInfo } from './try-app' +import { fetchTryAppDatasets, fetchTryAppInfo } from './try-app' import { AppSourceType, fetchAppParams } from './share' +import type { DataSetListResponse } from '@/models/datasets' const NAME_SPACE = 'try-app' @@ -21,3 +22,13 @@ export const useGetTryAppParams = (appId: string) => { }, }) } + +export const useGetTryAppDataSets = (appId: string, ids: string[]) => { + return useQuery({ + queryKey: [NAME_SPACE, 'dataSets', ids], + queryFn: () => { + return fetchTryAppDatasets(appId, ids) + }, + enabled: ids.length > 0, + }) +} From 00b9bbff759dbc8efc3e81f6848e17feebf62d08 Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Tue, 14 Oct 2025 18:53:29 +0800 Subject: [PATCH 38/85] feat: enhance explore page banner functionality with state management and animation improvements --- .../components/explore/banner/banner-item.tsx | 28 ++++++++--- web/app/components/explore/banner/banner.tsx | 2 +- .../explore/banner/indicator-button.tsx | 46 ++++++++++++++----- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx index 65585ed316..8d57d761ec 100644 --- a/web/app/components/explore/banner/banner-item.tsx +++ b/web/app/components/explore/banner/banner-item.tsx @@ -1,5 +1,5 @@ import type { FC } from 'react' -import { useCallback, useMemo } from 'react' +import { useCallback, useEffect, useMemo, useState } from 'react' import { RiArrowRightLine } from '@remixicon/react' import { useCarousel } from '@/app/components/base/carousel' import { IndicatorButton } from './indicator-button' @@ -27,6 +27,7 @@ type BannerItemProps = { export const BannerItem: FC = ({ banner, autoplayDelay }) => { const { t } = useTranslation() const { api, selectedIndex } = useCarousel() + const [resetKey, setResetKey] = useState(0) const slideInfo = useMemo(() => { const slides = api?.slideNodes() ?? [] @@ -35,22 +36,33 @@ export const BannerItem: FC = ({ banner, autoplayDelay }) => { return { slides, totalSlides, nextIndex } }, [api, selectedIndex]) + // Reset progress when slide changes + useEffect(() => { + setResetKey(prev => prev + 1) + }, [selectedIndex]) + const handleClick = useCallback(() => { + setResetKey(prev => prev + 1) if (banner.link) window.open(banner.link, '_blank', 'noopener,noreferrer') }, [banner.link]) + const handleIndicatorClick = useCallback((index: number) => { + setResetKey(prev => prev + 1) + api?.scrollTo(index) + }, [api]) + return (
{/* Left content area */}
-
+
{/* Text section */}
{/* Title area */} @@ -89,20 +101,22 @@ export const BannerItem: FC = ({ banner, autoplayDelay }) => { selectedIndex={selectedIndex} isNextSlide={index === slideInfo.nextIndex} autoplayDelay={autoplayDelay} - onClick={() => api?.scrollTo(index)} + resetKey={resetKey} + onClick={() => handleIndicatorClick(index)} /> ))}
+
- {/* Right image area */} -
+
{banner.content.title}
diff --git a/web/app/components/explore/banner/banner.tsx b/web/app/components/explore/banner/banner.tsx index 12616b73d9..331f198683 100644 --- a/web/app/components/explore/banner/banner.tsx +++ b/web/app/components/explore/banner/banner.tsx @@ -38,7 +38,7 @@ const Banner: FC = () => { plugins={[ Carousel.Plugin.Autoplay({ delay: AUTOPLAY_DELAY, - stopOnInteraction: true, + stopOnInteraction: false, }), ]} className="rounded-2xl" diff --git a/web/app/components/explore/banner/indicator-button.tsx b/web/app/components/explore/banner/indicator-button.tsx index 1ecb541c33..0bc5fac668 100644 --- a/web/app/components/explore/banner/indicator-button.tsx +++ b/web/app/components/explore/banner/indicator-button.tsx @@ -7,6 +7,7 @@ type IndicatorButtonProps = { selectedIndex: number isNextSlide: boolean autoplayDelay: number + resetKey: number onClick: () => void } @@ -18,11 +19,26 @@ export const IndicatorButton: FC = ({ selectedIndex, isNextSlide, autoplayDelay, + resetKey, onClick, }) => { const [progress, setProgress] = useState(0) - const animationIdRef = useRef(0) + const [isPageVisible, setIsPageVisible] = useState(true) const frameIdRef = useRef(undefined) + const pausedTimeRef = useRef(0) + const startTimeRef = useRef(0) + + // Listen to page visibility changes + useEffect(() => { + const handleVisibilityChange = () => { + setIsPageVisible(!document.hidden) + } + setIsPageVisible(!document.hidden) + document.addEventListener('visibilitychange', handleVisibilityChange) + return () => { + document.removeEventListener('visibilitychange', handleVisibilityChange) + } + }, []) useEffect(() => { if (!isNextSlide) { @@ -35,26 +51,32 @@ export const IndicatorButton: FC = ({ // reset and start new animation setProgress(0) - animationIdRef.current += 1 - - const startTime = Date.now() + startTimeRef.current = Date.now() + pausedTimeRef.current = 0 const animate = () => { - const elapsed = Date.now() - startTime - const newProgress = Math.min((elapsed / autoplayDelay) * PROGRESS_MAX, PROGRESS_MAX) - setProgress(newProgress) + // Only continue animation when page is visible + if (!document.hidden) { + const now = Date.now() + const elapsed = now - startTimeRef.current - pausedTimeRef.current + const newProgress = Math.min((elapsed / autoplayDelay) * PROGRESS_MAX, PROGRESS_MAX) + setProgress(newProgress) - if (newProgress < PROGRESS_MAX) + if (newProgress < PROGRESS_MAX) + frameIdRef.current = requestAnimationFrame(animate) + } + else { frameIdRef.current = requestAnimationFrame(animate) + } } - - frameIdRef.current = requestAnimationFrame(animate) + if (!document.hidden) + frameIdRef.current = requestAnimationFrame(animate) return () => { if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) } - }, [isNextSlide, autoplayDelay]) + }, [isNextSlide, autoplayDelay, resetKey, isPageVisible]) const isActive = index === selectedIndex @@ -76,7 +98,7 @@ export const IndicatorButton: FC = ({ {/* progress border for next slide */} {isNextSlide && !isActive && ( Date: Wed, 15 Oct 2025 09:55:14 +0800 Subject: [PATCH 39/85] feat: enhance explore page banner functionality with state management and animation improvements --- web/app/components/explore/banner/banner-item.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx index 8d57d761ec..964ab95069 100644 --- a/web/app/components/explore/banner/banner-item.tsx +++ b/web/app/components/explore/banner/banner-item.tsx @@ -115,8 +115,7 @@ export const BannerItem: FC = ({ banner, autoplayDelay }) => { {banner.content.title}
From df76527f2934f0ccd0d28492927456324ec584c6 Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Wed, 15 Oct 2025 10:36:09 +0800 Subject: [PATCH 40/85] feat: add pause functionality to explore page banner for improved user interaction --- web/app/components/explore/banner/banner-item.tsx | 4 +++- web/app/components/explore/banner/banner.tsx | 8 ++++++-- .../components/explore/banner/indicator-button.tsx | 14 +++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx index 964ab95069..af2533325a 100644 --- a/web/app/components/explore/banner/banner-item.tsx +++ b/web/app/components/explore/banner/banner-item.tsx @@ -22,9 +22,10 @@ export type BannerData = { type BannerItemProps = { banner: BannerData autoplayDelay: number + isPaused?: boolean } -export const BannerItem: FC = ({ banner, autoplayDelay }) => { +export const BannerItem: FC = ({ banner, autoplayDelay, isPaused = false }) => { const { t } = useTranslation() const { api, selectedIndex } = useCarousel() const [resetKey, setResetKey] = useState(0) @@ -102,6 +103,7 @@ export const BannerItem: FC = ({ banner, autoplayDelay }) => { isNextSlide={index === slideInfo.nextIndex} autoplayDelay={autoplayDelay} resetKey={resetKey} + isPaused={isPaused} onClick={() => handleIndicatorClick(index)} /> ))} diff --git a/web/app/components/explore/banner/banner.tsx b/web/app/components/explore/banner/banner.tsx index 331f198683..e1623e59bc 100644 --- a/web/app/components/explore/banner/banner.tsx +++ b/web/app/components/explore/banner/banner.tsx @@ -1,5 +1,5 @@ import type { FC } from 'react' -import React, { useMemo } from 'react' +import React, { useMemo, useState } from 'react' import { Carousel } from '@/app/components/base/carousel' import { useGetBanners } from '@/service/use-explore' import Loading from '../../base/loading' @@ -12,6 +12,7 @@ const MIN_LOADING_HEIGHT = 168 const Banner: FC = () => { const { locale } = useI18N() const { data: banners, isLoading, isError } = useGetBanners(locale) + const [isHovered, setIsHovered] = useState(false) const enabledBanners = useMemo( () => banners?.filter((banner: BannerData) => banner.status === 'enabled') ?? [], @@ -39,14 +40,17 @@ const Banner: FC = () => { Carousel.Plugin.Autoplay({ delay: AUTOPLAY_DELAY, stopOnInteraction: false, + stopOnMouseEnter: true, }), ]} className="rounded-2xl" + onMouseEnter={() => setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} > {enabledBanners.map((banner: BannerData) => ( - + ))} diff --git a/web/app/components/explore/banner/indicator-button.tsx b/web/app/components/explore/banner/indicator-button.tsx index 0bc5fac668..84e52d32d9 100644 --- a/web/app/components/explore/banner/indicator-button.tsx +++ b/web/app/components/explore/banner/indicator-button.tsx @@ -8,6 +8,7 @@ type IndicatorButtonProps = { isNextSlide: boolean autoplayDelay: number resetKey: number + isPaused?: boolean onClick: () => void } @@ -20,12 +21,12 @@ export const IndicatorButton: FC = ({ isNextSlide, autoplayDelay, resetKey, + isPaused = false, onClick, }) => { const [progress, setProgress] = useState(0) const [isPageVisible, setIsPageVisible] = useState(true) const frameIdRef = useRef(undefined) - const pausedTimeRef = useRef(0) const startTimeRef = useRef(0) // Listen to page visibility changes @@ -52,13 +53,12 @@ export const IndicatorButton: FC = ({ // reset and start new animation setProgress(0) startTimeRef.current = Date.now() - pausedTimeRef.current = 0 const animate = () => { - // Only continue animation when page is visible - if (!document.hidden) { + // Only continue animation when page is visible and not paused + if (!document.hidden && !isPaused) { const now = Date.now() - const elapsed = now - startTimeRef.current - pausedTimeRef.current + const elapsed = now - startTimeRef.current const newProgress = Math.min((elapsed / autoplayDelay) * PROGRESS_MAX, PROGRESS_MAX) setProgress(newProgress) @@ -69,14 +69,14 @@ export const IndicatorButton: FC = ({ frameIdRef.current = requestAnimationFrame(animate) } } - if (!document.hidden) + if (!document.hidden && !isPaused) frameIdRef.current = requestAnimationFrame(animate) return () => { if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) } - }, [isNextSlide, autoplayDelay, resetKey, isPageVisible]) + }, [isNextSlide, autoplayDelay, resetKey, isPageVisible, isPaused]) const isActive = index === selectedIndex From 566cd208498b2e63564db7780c82a7ee268939d4 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 11:37:12 +0800 Subject: [PATCH 41/85] feat: dataset config support readonly --- .../app/configuration/config/index.tsx | 2 +- .../dataset-config/card-item/item.tsx | 23 +++++++++++-------- .../configuration/dataset-config/index.tsx | 12 ++++++---- .../components/app/configuration/preview.tsx | 2 +- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/web/app/components/app/configuration/config/index.tsx b/web/app/components/app/configuration/config/index.tsx index 3e8b5f1caa..adef93f541 100644 --- a/web/app/components/app/configuration/config/index.tsx +++ b/web/app/components/app/configuration/config/index.tsx @@ -79,7 +79,7 @@ const Config: FC = () => { {/* Dataset */} {/* Tools */} diff --git a/web/app/components/app/configuration/dataset-config/card-item/item.tsx b/web/app/components/app/configuration/dataset-config/card-item/item.tsx index b671d9c146..8d9155b0f0 100644 --- a/web/app/components/app/configuration/dataset-config/card-item/item.tsx +++ b/web/app/components/app/configuration/dataset-config/card-item/item.tsx @@ -29,6 +29,7 @@ const Item: FC = ({ config, onSave, onRemove, + readonly = false, editable = true, }) => { const media = useBreakpoints() @@ -68,7 +69,7 @@ const Item: FC = ({
{ - editable && { e.stopPropagation() setShowSettingsModal(true) @@ -77,14 +78,18 @@ const Item: FC = ({ } - onRemove(config.id)} - state={isDeleting ? ActionButtonState.Destructive : ActionButtonState.Default} - onMouseEnter={() => setIsDeleting(true)} - onMouseLeave={() => setIsDeleting(false)} - > - - + { + !readonly && ( + onRemove(config.id)} + state={isDeleting ? ActionButtonState.Destructive : ActionButtonState.Default} + onMouseEnter={() => setIsDeleting(true)} + onMouseLeave={() => setIsDeleting(false)} + > + + + ) + }
{ config.indexing_technique && { +type Props = { + readonly?: boolean +} +const DatasetConfig: FC = ({ readonly }) => { const { t } = useTranslation() const userProfile = useAppContextSelector(s => s.userProfile) const { @@ -254,10 +257,10 @@ const DatasetConfig: FC = () => { className='mt-2' title={t('appDebug.feature.dataSet.title')} headerRight={ -
+ !readonly && (
{!isAgent && } -
+
) } hasHeaderBottomBorder={!hasData} noBodySpacing @@ -271,7 +274,8 @@ const DatasetConfig: FC = () => { config={item} onRemove={onRemove} onSave={handleSave} - editable={item.editable} + editable={item.editable && !readonly} + readonly={readonly} /> ))}
diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index eceb4972aa..7679ee13b6 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -305,7 +305,7 @@ const Configuration: FC = ({ return ( -
+
From 3b64e118d08f3b190bbbf13d434e4cd25706b72a Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 11:39:41 +0800 Subject: [PATCH 42/85] chore: readonly ui --- web/app/components/app/configuration/config-var/var-item.tsx | 2 +- .../app/configuration/dataset-config/card-item/item.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/web/app/components/app/configuration/config-var/var-item.tsx b/web/app/components/app/configuration/config-var/var-item.tsx index 78ed4b1031..9b11d65589 100644 --- a/web/app/components/app/configuration/config-var/var-item.tsx +++ b/web/app/components/app/configuration/config-var/var-item.tsx @@ -33,7 +33,7 @@ const VarItem: FC = ({ const [isDeleting, setIsDeleting] = useState(false) return ( -
+
diff --git a/web/app/components/app/configuration/dataset-config/card-item/item.tsx b/web/app/components/app/configuration/dataset-config/card-item/item.tsx index 8d9155b0f0..60200c4a8d 100644 --- a/web/app/components/app/configuration/dataset-config/card-item/item.tsx +++ b/web/app/components/app/configuration/dataset-config/card-item/item.tsx @@ -56,6 +56,7 @@ const Item: FC = ({
Date: Wed, 15 Oct 2025 13:48:39 +0800 Subject: [PATCH 43/85] chore: user input readonly --- .../app/configuration/config/index.tsx | 1 + .../configuration/dataset-config/index.tsx | 43 ++++++++++--------- .../app/configuration/debug/index.tsx | 23 ++++++---- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/web/app/components/app/configuration/config/index.tsx b/web/app/components/app/configuration/config/index.tsx index adef93f541..79bae2bcd3 100644 --- a/web/app/components/app/configuration/config/index.tsx +++ b/web/app/components/app/configuration/config/index.tsx @@ -80,6 +80,7 @@ const Config: FC = () => { {/* Dataset */} {/* Tools */} diff --git a/web/app/components/app/configuration/dataset-config/index.tsx b/web/app/components/app/configuration/dataset-config/index.tsx index dc22f001c6..fa1103933c 100644 --- a/web/app/components/app/configuration/dataset-config/index.tsx +++ b/web/app/components/app/configuration/dataset-config/index.tsx @@ -39,8 +39,9 @@ import { type Props = { readonly?: boolean + hideMetadataFilter?: boolean } -const DatasetConfig: FC = ({ readonly }) => { +const DatasetConfig: FC = ({ readonly, hideMetadataFilter }) => { const { t } = useTranslation() const userProfile = useAppContextSelector(s => s.userProfile) const { @@ -286,25 +287,27 @@ const DatasetConfig: FC = ({ readonly }) => {
)} -
- item.type === MetadataFilteringVariableType.string || item.type === MetadataFilteringVariableType.select)} - availableCommonNumberVars={promptVariablesToSelect.filter(item => item.type === MetadataFilteringVariableType.number)} - /> -
+ {!hideMetadataFilter && ( +
+ item.type === MetadataFilteringVariableType.string || item.type === MetadataFilteringVariableType.select)} + availableCommonNumberVars={promptVariablesToSelect.filter(item => item.type === MetadataFilteringVariableType.number)} + /> +
+ )} {mode === AppType.completion && dataSet.length > 0 && ( = ({ }) => { const { t } = useTranslation() const { + readonly, appId, mode, modelModeType, @@ -413,19 +414,23 @@ const Debug: FC = ({ } {mode !== AppType.completion && ( <> - - - - - + {!readonly && ( + + + + + + + )} + {varList.length > 0 && (
- setExpanded(!expanded)}> + !readonly && setExpanded(!expanded)}> @@ -553,7 +558,7 @@ const Debug: FC = ({ onCancel={handleCancel} /> )} - {!isAPIKeySet && ()} + {!isAPIKeySet && !readonly && ()} ) } From a25e37a96d57064bb01a7dfaf74f7d1e2437d1aa Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Wed, 15 Oct 2025 14:36:27 +0800 Subject: [PATCH 44/85] feat: implement responsive design and resize handling for explore page banner --- .../components/explore/banner/banner-item.tsx | 84 +++++++++++++++---- web/app/components/explore/banner/banner.tsx | 56 ++++++++++--- .../explore/banner/indicator-button.tsx | 33 +++----- 3 files changed, 122 insertions(+), 51 deletions(-) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx index af2533325a..b956123d9e 100644 --- a/web/app/components/explore/banner/banner-item.tsx +++ b/web/app/components/explore/banner/banner-item.tsx @@ -1,5 +1,5 @@ import type { FC } from 'react' -import { useCallback, useEffect, useMemo, useState } from 'react' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { RiArrowRightLine } from '@remixicon/react' import { useCarousel } from '@/app/components/base/carousel' import { IndicatorButton } from './indicator-button' @@ -25,10 +25,15 @@ type BannerItemProps = { isPaused?: boolean } +const RESPONSIVE_BREAKPOINT = 1280 +const MAX_RESPONSIVE_WIDTH = 600 + export const BannerItem: FC = ({ banner, autoplayDelay, isPaused = false }) => { const { t } = useTranslation() const { api, selectedIndex } = useCarousel() const [resetKey, setResetKey] = useState(0) + const textAreaRef = useRef(null) + const [maxWidth, setMaxWidth] = useState(undefined) const slideInfo = useMemo(() => { const slides = api?.slideNodes() ?? [] @@ -37,27 +42,59 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause return { slides, totalSlides, nextIndex } }, [api, selectedIndex]) + const responsiveStyle = useMemo( + () => (maxWidth !== undefined ? { maxWidth: `${maxWidth}px` } : undefined), + [maxWidth], + ) + + const incrementResetKey = useCallback(() => setResetKey(prev => prev + 1), []) + + // Update max width based on text area width when screen < 1280px + useEffect(() => { + const updateMaxWidth = () => { + if (window.innerWidth < RESPONSIVE_BREAKPOINT && textAreaRef.current) { + const textAreaWidth = textAreaRef.current.offsetWidth + setMaxWidth(Math.min(textAreaWidth, MAX_RESPONSIVE_WIDTH)) + } + else { + setMaxWidth(undefined) + } + } + + updateMaxWidth() + + const resizeObserver = new ResizeObserver(updateMaxWidth) + if (textAreaRef.current) + resizeObserver.observe(textAreaRef.current) + + window.addEventListener('resize', updateMaxWidth) + + return () => { + resizeObserver.disconnect() + window.removeEventListener('resize', updateMaxWidth) + } + }, []) + // Reset progress when slide changes useEffect(() => { - setResetKey(prev => prev + 1) - }, [selectedIndex]) + incrementResetKey() + }, [selectedIndex, incrementResetKey]) const handleClick = useCallback(() => { - setResetKey(prev => prev + 1) + incrementResetKey() if (banner.link) window.open(banner.link, '_blank', 'noopener,noreferrer') - }, [banner.link]) + }, [banner.link, incrementResetKey]) const handleIndicatorClick = useCallback((index: number) => { - setResetKey(prev => prev + 1) + incrementResetKey() api?.scrollTo(index) - }, [api]) + }, [api, incrementResetKey]) return (
@@ -67,7 +104,11 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause {/* Text section */}
{/* Title area */} -
+

{banner.content.category}

@@ -76,15 +117,23 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause

{/* Description area */} -
- {banner.content.description} +
+

+ {banner.content.description} +

{/* Actions section */}
{/* View more button */} -
+
@@ -94,7 +143,10 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause
{/* Slide navigation indicators */} -
+
{slideInfo.slides.map((_: unknown, index: number) => ( = ({ banner, autoplayDelay, isPause /> ))}
-
+ {/* Right image area */}
{banner.content.title}
diff --git a/web/app/components/explore/banner/banner.tsx b/web/app/components/explore/banner/banner.tsx index e1623e59bc..bc81e4b213 100644 --- a/web/app/components/explore/banner/banner.tsx +++ b/web/app/components/explore/banner/banner.tsx @@ -1,5 +1,5 @@ import type { FC } from 'react' -import React, { useMemo, useState } from 'react' +import React, { useEffect, useMemo, useRef, useState } from 'react' import { Carousel } from '@/app/components/base/carousel' import { useGetBanners } from '@/service/use-explore' import Loading from '../../base/loading' @@ -8,27 +8,55 @@ import { useI18N } from '@/context/i18n' const AUTOPLAY_DELAY = 5000 const MIN_LOADING_HEIGHT = 168 +const RESIZE_DEBOUNCE_DELAY = 50 + +const LoadingState: FC = () => ( +
+ +
+) const Banner: FC = () => { const { locale } = useI18N() const { data: banners, isLoading, isError } = useGetBanners(locale) const [isHovered, setIsHovered] = useState(false) + const [isResizing, setIsResizing] = useState(false) + const resizeTimerRef = useRef(null) const enabledBanners = useMemo( () => banners?.filter((banner: BannerData) => banner.status === 'enabled') ?? [], [banners], ) - if (isLoading) { - return ( -
- -
- ) - } + const isPaused = isHovered || isResizing + + // Handle window resize to pause animation + useEffect(() => { + const handleResize = () => { + setIsResizing(true) + + if (resizeTimerRef.current) + clearTimeout(resizeTimerRef.current) + + resizeTimerRef.current = setTimeout(() => { + setIsResizing(false) + }, RESIZE_DEBOUNCE_DELAY) + } + + window.addEventListener('resize', handleResize) + + return () => { + window.removeEventListener('resize', handleResize) + if (resizeTimerRef.current) + clearTimeout(resizeTimerRef.current) + } + }, []) + + if (isLoading) + return if (isError || enabledBanners.length === 0) return null @@ -50,7 +78,11 @@ const Banner: FC = () => { {enabledBanners.map((banner: BannerData) => ( - + ))} diff --git a/web/app/components/explore/banner/indicator-button.tsx b/web/app/components/explore/banner/indicator-button.tsx index 84e52d32d9..5214fd7826 100644 --- a/web/app/components/explore/banner/indicator-button.tsx +++ b/web/app/components/explore/banner/indicator-button.tsx @@ -25,40 +25,26 @@ export const IndicatorButton: FC = ({ onClick, }) => { const [progress, setProgress] = useState(0) - const [isPageVisible, setIsPageVisible] = useState(true) const frameIdRef = useRef(undefined) const startTimeRef = useRef(0) - // Listen to page visibility changes - useEffect(() => { - const handleVisibilityChange = () => { - setIsPageVisible(!document.hidden) - } - setIsPageVisible(!document.hidden) - document.addEventListener('visibilitychange', handleVisibilityChange) - return () => { - document.removeEventListener('visibilitychange', handleVisibilityChange) - } - }, []) + const isActive = index === selectedIndex + const shouldAnimate = !document.hidden && !isPaused useEffect(() => { if (!isNextSlide) { setProgress(0) if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) - return } - // reset and start new animation setProgress(0) startTimeRef.current = Date.now() const animate = () => { - // Only continue animation when page is visible and not paused if (!document.hidden && !isPaused) { - const now = Date.now() - const elapsed = now - startTimeRef.current + const elapsed = Date.now() - startTimeRef.current const newProgress = Math.min((elapsed / autoplayDelay) * PROGRESS_MAX, PROGRESS_MAX) setProgress(newProgress) @@ -69,22 +55,23 @@ export const IndicatorButton: FC = ({ frameIdRef.current = requestAnimationFrame(animate) } } - if (!document.hidden && !isPaused) + + if (shouldAnimate) frameIdRef.current = requestAnimationFrame(animate) return () => { if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) } - }, [isNextSlide, autoplayDelay, resetKey, isPageVisible, isPaused]) - - const isActive = index === selectedIndex + }, [isNextSlide, autoplayDelay, resetKey, isPaused]) const handleClick = useCallback((e: React.MouseEvent) => { e.stopPropagation() onClick() }, [onClick]) + const progressDegrees = progress * DEGREES_PER_PERCENT + return (
{ @@ -232,7 +237,12 @@ const ChatInputArea = ({ ) }
- {showFeatureBar && } + {showFeatureBar && } ) } diff --git a/web/app/components/base/chat/chat/chat-input-area/operation.tsx b/web/app/components/base/chat/chat/chat-input-area/operation.tsx index 122dfcb6fb..b0e5aa3095 100644 --- a/web/app/components/base/chat/chat/chat-input-area/operation.tsx +++ b/web/app/components/base/chat/chat/chat-input-area/operation.tsx @@ -12,8 +12,10 @@ import ActionButton from '@/app/components/base/action-button' import { FileUploaderInChatInput } from '@/app/components/base/file-uploader' import type { FileUpload } from '@/app/components/base/features/types' import cn from '@/utils/classnames' +import { noop } from 'lodash' type OperationProps = { + readonly?: boolean fileConfig?: FileUpload speechToTextConfig?: EnableType onShowVoiceInput?: () => void @@ -22,6 +24,7 @@ type OperationProps = { } const Operation = ( { + readonly, ref, fileConfig, speechToTextConfig, @@ -43,12 +46,13 @@ const Operation = ( ref={ref} >
- {fileConfig?.enabled && } + {fileConfig?.enabled && } { speechToTextConfig?.enabled && ( @@ -58,7 +62,8 @@ const Operation = (
{t('appDebug.feature.bar.enableText')}
- + { + !hideEditEntrance && ( + + ) + }
)}
diff --git a/web/app/components/base/file-uploader/file-uploader-in-chat-input/index.tsx b/web/app/components/base/file-uploader/file-uploader-in-chat-input/index.tsx index 7e6e190ddb..91d6f22ef2 100644 --- a/web/app/components/base/file-uploader/file-uploader-in-chat-input/index.tsx +++ b/web/app/components/base/file-uploader/file-uploader-in-chat-input/index.tsx @@ -13,21 +13,27 @@ import { TransferMethod } from '@/types/app' type FileUploaderInChatInputProps = { fileConfig: FileUpload + readonly?: boolean } const FileUploaderInChatInput = ({ fileConfig, + readonly, }: FileUploaderInChatInputProps) => { const renderTrigger = useCallback((open: boolean) => { return ( ) }, []) + if(readonly) + return renderTrigger(false) + return ( Date: Wed, 15 Oct 2025 15:21:09 +0800 Subject: [PATCH 46/85] chore: vision readonly --- .../app/configuration/config-vision/index.tsx | 80 +++++++++++-------- .../components/app/configuration/preview.tsx | 15 ++-- web/i18n/ja-JP/common.ts | 1 + 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/web/app/components/app/configuration/config-vision/index.tsx b/web/app/components/app/configuration/config-vision/index.tsx index f0904b3fd8..8d97097fba 100644 --- a/web/app/components/app/configuration/config-vision/index.tsx +++ b/web/app/components/app/configuration/config-vision/index.tsx @@ -13,10 +13,14 @@ import ConfigContext from '@/context/debug-configuration' import { useFeatures, useFeaturesStore } from '@/app/components/base/features/hooks' import Switch from '@/app/components/base/switch' import { SupportUploadFileTypes } from '@/app/components/workflow/types' +import OptionCard from '@/app/components/workflow/nodes/_base/components/option-card' +import { Resolution } from '@/types/app' +import { noop } from 'lodash' +import cn from '@/utils/classnames' const ConfigVision: FC = () => { const { t } = useTranslation() - const { isShowVisionConfig, isAllowVideoUpload } = useContext(ConfigContext) + const { isShowVisionConfig, isAllowVideoUpload, readonly } = useContext(ConfigContext) const file = useFeatures(s => s.features.file) const featuresStore = useFeaturesStore() @@ -53,7 +57,7 @@ const ConfigVision: FC = () => { setFeatures(newFeatures) }, [featuresStore, isAllowVideoUpload]) - if (!isShowVisionConfig) + if (!isShowVisionConfig || (readonly && !isImageEnabled)) return null return ( @@ -74,37 +78,49 @@ const ConfigVision: FC = () => { />
- {/*
-
{t('appDebug.vision.visionSettings.resolution')}
- - {t('appDebug.vision.visionSettings.resolutionTooltip').split('\n').map(item => ( -
{item}
- ))} -
- } + {readonly ? (<> +
+
{t('appDebug.vision.visionSettings.resolution')}
+ + {t('appDebug.vision.visionSettings.resolutionTooltip').split('\n').map(item => ( +
{item}
+ ))} +
+ } + /> +
+
+ + +
+ ) : <> + +
+ -
*/} - {/*
- handleChange(Resolution.high)} - /> - handleChange(Resolution.low)} - /> -
*/} - -
- + } +
) diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index 7679ee13b6..92212ee515 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -25,6 +25,7 @@ import { useGetTryAppDataSets, useGetTryAppInfo } from '@/service/use-try-app' import { noop } from 'lodash' import { correctModelProvider } from '@/utils' import { userInputsFormToPromptVariables } from '@/utils/model-config' +import { useTextGenerationCurrentProviderAndModelAndModelList } from '../../header/account-setting/model-provider-page/hooks' type Props = { appId: string @@ -172,12 +173,14 @@ const Configuration: FC = ({ const query = '' const completionParams = useState({}) - // todo - const currModel: { - features: ModelFeatureEnum[] - } = { - features: [], - } + const { + currentModel: currModel, + } = useTextGenerationCurrentProviderAndModelAndModelList( + { + provider: modelConfig.provider, + model: modelConfig.model_id, + }, + ) const isShowVisionConfig = !!currModel?.features?.includes(ModelFeatureEnum.vision) const isShowDocumentConfig = !!currModel?.features?.includes(ModelFeatureEnum.document) diff --git a/web/i18n/ja-JP/common.ts b/web/i18n/ja-JP/common.ts index 52545c460b..45dbb2bd8d 100644 --- a/web/i18n/ja-JP/common.ts +++ b/web/i18n/ja-JP/common.ts @@ -654,6 +654,7 @@ const translation = { hitScore: '検索スコア:', }, inputPlaceholder: '{{botName}} と話す', + inputDisabledPlaceholder: 'プレビューのみ', thought: '思考', thinking: '考え中...', resend: '再送信してください', From 6f4518ebf72f4285021735e7d8efb2b14658c4d8 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 15:27:18 +0800 Subject: [PATCH 47/85] chore: document readonly --- .../configuration/config/config-document.tsx | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/web/app/components/app/configuration/config/config-document.tsx b/web/app/components/app/configuration/config/config-document.tsx index 9300bbc712..06f608c6f0 100644 --- a/web/app/components/app/configuration/config/config-document.tsx +++ b/web/app/components/app/configuration/config/config-document.tsx @@ -16,7 +16,7 @@ const ConfigDocument: FC = () => { const { t } = useTranslation() const file = useFeatures(s => s.features.file) const featuresStore = useFeaturesStore() - const { isShowDocumentConfig } = useContext(ConfigContext) + const { isShowDocumentConfig, readonly } = useContext(ConfigContext) const isDocumentEnabled = file?.allowed_file_types?.includes(SupportUploadFileTypes.document) ?? false @@ -64,14 +64,16 @@ const ConfigDocument: FC = () => { } />
-
-
- -
+ {!readonly && ( +
+
+ +
+ )}
) } From cad77ce0bf68caf5baa99b82435123e59a3cb4e3 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 15:29:09 +0800 Subject: [PATCH 48/85] chore: audio config readonly --- .../app/configuration/config/config-audio.tsx | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/web/app/components/app/configuration/config/config-audio.tsx b/web/app/components/app/configuration/config/config-audio.tsx index 5600f8cbb6..aed236bcc6 100644 --- a/web/app/components/app/configuration/config/config-audio.tsx +++ b/web/app/components/app/configuration/config/config-audio.tsx @@ -16,7 +16,7 @@ const ConfigAudio: FC = () => { const { t } = useTranslation() const file = useFeatures(s => s.features.file) const featuresStore = useFeaturesStore() - const { isShowAudioConfig } = useContext(ConfigContext) + const { isShowAudioConfig, readonly } = useContext(ConfigContext) const isAudioEnabled = file?.allowed_file_types?.includes(SupportUploadFileTypes.audio) ?? false @@ -64,14 +64,16 @@ const ConfigAudio: FC = () => { } />
-
-
- -
+ {!readonly && ( +
+
+ +
+ )}
) } From db9e5665c251ba1e6160012dfe6461e84ef64e7b Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 15:35:49 +0800 Subject: [PATCH 49/85] fix: docuemnt and aduio show condition in preview --- web/app/components/app/configuration/config/config-audio.tsx | 2 +- web/app/components/app/configuration/config/config-document.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/app/configuration/config/config-audio.tsx b/web/app/components/app/configuration/config/config-audio.tsx index aed236bcc6..1616ee4244 100644 --- a/web/app/components/app/configuration/config/config-audio.tsx +++ b/web/app/components/app/configuration/config/config-audio.tsx @@ -44,7 +44,7 @@ const ConfigAudio: FC = () => { setFeatures(newFeatures) }, [featuresStore]) - if (!isShowAudioConfig) + if (!isShowAudioConfig || (readonly && !isAudioEnabled)) return null return ( diff --git a/web/app/components/app/configuration/config/config-document.tsx b/web/app/components/app/configuration/config/config-document.tsx index 06f608c6f0..daec96eb1a 100644 --- a/web/app/components/app/configuration/config/config-document.tsx +++ b/web/app/components/app/configuration/config/config-document.tsx @@ -44,7 +44,7 @@ const ConfigDocument: FC = () => { setFeatures(newFeatures) }, [featuresStore]) - if (!isShowDocumentConfig) + if (!isShowDocumentConfig || (readonly && !isDocumentEnabled)) return null return ( From 9e3dd69277e8ec36e9053b96b239f03957f42cf3 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 15:51:18 +0800 Subject: [PATCH 50/85] fix: upload btn not sync right --- web/app/components/app/configuration/preview.tsx | 7 ++++--- web/models/debug.ts | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index 92212ee515..315cbd6bd0 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -11,6 +11,7 @@ import Config from '@/app/components/app/configuration/config' import Debug from '@/app/components/app/configuration/debug' import { ModelFeatureEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import { ModelModeType, Resolution, TransferMethod } from '@/types/app' +import type { ModelConfig } from '@/models/debug' import { PromptMode } from '@/models/debug' import { ANNOTATION_DEFAULT, DEFAULT_AGENT_SETTING, DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG } from '@/config' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' @@ -82,7 +83,7 @@ const Configuration: FC = ({ const dataSets = dataSetData?.data || [] const isLoading = isLoadingAppDetail || isLoadingDatasets - const modelConfig = ((modelConfig?: BackendModelConfig) => { + const modelConfig: ModelConfig = ((modelConfig?: BackendModelConfig) => { if(isLoading || !modelConfig) return defaultModelConfig @@ -139,7 +140,7 @@ const Configuration: FC = ({ tools: [], } : DEFAULT_AGENT_SETTING, } - return newModelConfig + return (newModelConfig as any) })(appDetail?.model_config) const mode = appDetail?.mode // const isChatApp = ['chat', 'advanced-chat', 'agent-chat'].includes(mode!) @@ -211,7 +212,7 @@ const Configuration: FC = ({ number_limits: modelConfig.file_upload?.image?.number_limits || 3, transfer_methods: modelConfig.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'], }, - enabled: true, + enabled: !!(modelConfig.file_upload?.enabled || modelConfig.file_upload?.image?.enabled), allowed_file_types: modelConfig.file_upload?.allowed_file_types || [], allowed_file_extensions: modelConfig.file_upload?.allowed_file_extensions || [...FILE_EXTS[SupportUploadFileTypes.image], ...FILE_EXTS[SupportUploadFileTypes.video]].map(ext => `.${ext}`), allowed_file_upload_methods: modelConfig.file_upload?.allowed_file_upload_methods || modelConfig.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'], diff --git a/web/models/debug.ts b/web/models/debug.ts index 630c48a970..7748e16856 100644 --- a/web/models/debug.ts +++ b/web/models/debug.ts @@ -132,6 +132,9 @@ export type ModelConfig = { provider: string // LLM Provider: for example "OPENAI" model_id: string mode: ModelModeType + prompt_type: PromptMode + chat_prompt_config: ChatPromptConfig | null + completion_prompt_config: CompletionPromptConfig | null configs: PromptConfig opening_statement: string | null more_like_this: MoreLikeThisConfig | null From b07c76655118b388e36aaf4f112f6ca5a701a9d9 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 16:00:14 +0800 Subject: [PATCH 51/85] chroe: fix ts problem --- web/models/debug.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/models/debug.ts b/web/models/debug.ts index 7748e16856..90995e72dc 100644 --- a/web/models/debug.ts +++ b/web/models/debug.ts @@ -132,9 +132,9 @@ export type ModelConfig = { provider: string // LLM Provider: for example "OPENAI" model_id: string mode: ModelModeType - prompt_type: PromptMode - chat_prompt_config: ChatPromptConfig | null - completion_prompt_config: CompletionPromptConfig | null + prompt_type?: PromptMode + chat_prompt_config?: ChatPromptConfig | null + completion_prompt_config?: CompletionPromptConfig | null configs: PromptConfig opening_statement: string | null more_like_this: MoreLikeThisConfig | null From 8e962d15d1ac975c19b778265328141ed112320b Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Wed, 15 Oct 2025 17:20:00 +0800 Subject: [PATCH 52/85] feat: improve explore page banner component with enhanced layout and responsive styles --- .../components/explore/banner/banner-item.tsx | 77 ++++++++++++------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx index b956123d9e..c5c95a4d36 100644 --- a/web/app/components/explore/banner/banner-item.tsx +++ b/web/app/components/explore/banner/banner-item.tsx @@ -27,10 +27,15 @@ type BannerItemProps = { const RESPONSIVE_BREAKPOINT = 1280 const MAX_RESPONSIVE_WIDTH = 600 +const INDICATOR_WIDTH = 20 +const INDICATOR_GAP = 8 +const MIN_VIEW_MORE_WIDTH = 480 export const BannerItem: FC = ({ banner, autoplayDelay, isPaused = false }) => { const { t } = useTranslation() const { api, selectedIndex } = useCarousel() + const { category, title, description, 'img-src': imgSrc } = banner.content + const [resetKey, setResetKey] = useState(0) const textAreaRef = useRef(null) const [maxWidth, setMaxWidth] = useState(undefined) @@ -42,6 +47,21 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause return { slides, totalSlides, nextIndex } }, [api, selectedIndex]) + const indicatorsWidth = useMemo(() => { + const count = slideInfo.totalSlides + if (count === 0) return 0 + // Calculate: indicator buttons + gaps + extra spacing (3 * 20px for divider and padding) + return (count + 2) * INDICATOR_WIDTH + (count - 1) * INDICATOR_GAP + }, [slideInfo.totalSlides]) + + const viewMoreStyle = useMemo(() => { + if (!maxWidth) return undefined + return { + maxWidth: `${maxWidth}px`, + minWidth: indicatorsWidth ? `${Math.min(maxWidth - indicatorsWidth, MIN_VIEW_MORE_WIDTH)}px` : undefined, + } + }, [maxWidth, indicatorsWidth]) + const responsiveStyle = useMemo( () => (maxWidth !== undefined ? { maxWidth: `${maxWidth}px` } : undefined), [maxWidth], @@ -49,7 +69,6 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause const incrementResetKey = useCallback(() => setResetKey(prev => prev + 1), []) - // Update max width based on text area width when screen < 1280px useEffect(() => { const updateMaxWidth = () => { if (window.innerWidth < RESPONSIVE_BREAKPOINT && textAreaRef.current) { @@ -75,12 +94,11 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause } }, []) - // Reset progress when slide changes useEffect(() => { incrementResetKey() }, [selectedIndex, incrementResetKey]) - const handleClick = useCallback(() => { + const handleBannerClick = useCallback(() => { incrementResetKey() if (banner.link) window.open(banner.link, '_blank', 'noopener,noreferrer') @@ -93,10 +111,8 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause return (
{/* Left content area */}
@@ -110,10 +126,10 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause style={responsiveStyle} >

- {banner.content.category} + {category}

- {banner.content.title} + {title}

{/* Description area */} @@ -122,17 +138,17 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause style={responsiveStyle} >

- {banner.content.description} + {description}

{/* Actions section */} -
+
{/* View more button */}
@@ -142,23 +158,26 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause
- {/* Slide navigation indicators */}
- {slideInfo.slides.map((_: unknown, index: number) => ( - handleIndicatorClick(index)} - /> - ))} + {/* Slide navigation indicators */} +
+ {slideInfo.slides.map((_: unknown, index: number) => ( + handleIndicatorClick(index)} + /> + ))} +
+
@@ -167,8 +186,8 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause {/* Right image area */}
{banner.content.title}
From d2379c38bdad8030c9e4c0ee1792de7947213116 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 16:45:13 +0800 Subject: [PATCH 53/85] chore: handle history panel and completion review crash --- web/app/components/app/configuration/config/index.tsx | 2 +- .../components/app/configuration/prompt-value-panel/index.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/app/components/app/configuration/config/index.tsx b/web/app/components/app/configuration/config/index.tsx index 79bae2bcd3..7ff534a20a 100644 --- a/web/app/components/app/configuration/config/index.tsx +++ b/web/app/components/app/configuration/config/index.tsx @@ -95,7 +95,7 @@ const Config: FC = () => { {/* Chat History */} - {isAdvancedMode && isChatApp && modelModeType === ModelModeType.completion && ( + {!readonly && isAdvancedMode && isChatApp && modelModeType === ModelModeType.completion && ( = ({ if (isAdvancedMode) { if (modelModeType === ModelModeType.chat) - return chatPromptConfig.prompt.every(({ text }) => !text) + return chatPromptConfig?.prompt.every(({ text }) => !text) return !completionPromptConfig.prompt?.text } else { return !modelConfig.configs.prompt_template } - }, [chatPromptConfig.prompt, completionPromptConfig.prompt?.text, isAdvancedMode, mode, modelConfig.configs.prompt_template, modelModeType]) + }, [chatPromptConfig?.prompt, completionPromptConfig.prompt?.text, isAdvancedMode, mode, modelConfig.configs.prompt_template, modelModeType]) const handleInputValueChange = (key: string, value: string | boolean) => { if (!(key in promptVariableObj)) From 440bd825d817d667cff4f584bcf98e9e91d1e49d Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 17:35:06 +0800 Subject: [PATCH 54/85] feat: can show tools in preview --- .../app/configuration/config/index.tsx | 27 ++++++++++-------- .../components/app/configuration/preview.tsx | 28 +++++++++++++++++-- web/service/try-app.ts | 1 + 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/web/app/components/app/configuration/config/index.tsx b/web/app/components/app/configuration/config/index.tsx index 7ff534a20a..b98d52c5d7 100644 --- a/web/app/components/app/configuration/config/index.tsx +++ b/web/app/components/app/configuration/config/index.tsx @@ -29,6 +29,7 @@ const Config: FC = () => { modelConfig, setModelConfig, setPrevPromptConfig, + dataSets, } = useContext(ConfigContext) const isChatApp = ['advanced-chat', 'agent-chat', 'chat'].includes(mode) const formattingChangedDispatcher = useFormattingChangedDispatcher() @@ -71,20 +72,24 @@ const Config: FC = () => { /> {/* Variables */} - + {!(readonly && promptVariables.length === 0) && ( + + )} {/* Dataset */} - - + {!(readonly && dataSets.length === 0) && ( + + ) + } {/* Tools */} - {isAgent && ( + {isAgent && !(readonly && modelConfig.agentConfig.tools.length === 0) && ( )} diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index 315cbd6bd0..138cd192ae 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -24,9 +24,11 @@ import { SupportUploadFileTypes } from '@/app/components/workflow/types' import { useGetTryAppDataSets, useGetTryAppInfo } from '@/service/use-try-app' import { noop } from 'lodash' -import { correctModelProvider } from '@/utils' +import { correctModelProvider, correctToolProvider } from '@/utils' import { userInputsFormToPromptVariables } from '@/utils/model-config' import { useTextGenerationCurrentProviderAndModelAndModelList } from '../../header/account-setting/model-provider-page/hooks' +import { useAllToolProviders } from '@/service/use-tools' +import { basePath } from '@/utils/var' type Props = { appId: string @@ -60,6 +62,13 @@ const Configuration: FC = ({ const isMobile = media === MediaType.mobile const { data: appDetail, isLoading: isLoadingAppDetail } = useGetTryAppInfo(appId) + const { data: collectionListFromServer, isLoading: isLoadingToolProviders } = useAllToolProviders() + const collectionList = collectionListFromServer?.map((item) => { + return { + ...item, + icon: basePath && typeof item.icon == 'string' && !item.icon.includes(basePath) ? `${basePath}${item.icon}` : item.icon, + } + }) const datasetIds = (() => { if(isLoadingAppDetail) return [] @@ -81,7 +90,7 @@ const Configuration: FC = ({ })() const { data: dataSetData, isLoading: isLoadingDatasets } = useGetTryAppDataSets(appId, datasetIds) const dataSets = dataSetData?.data || [] - const isLoading = isLoadingAppDetail || isLoadingDatasets + const isLoading = isLoadingAppDetail || isLoadingDatasets || isLoadingToolProviders const modelConfig: ModelConfig = ((modelConfig?: BackendModelConfig) => { if(isLoading || !modelConfig) @@ -137,7 +146,20 @@ const Configuration: FC = ({ ...modelConfig.agent_mode, // remove dataset enabled: true, // modelConfig.agent_mode?.enabled is not correct. old app: the value of app with dataset's is always true - tools: [], + tools: modelConfig.agent_mode?.tools.filter((tool: any) => { + return !tool.dataset + }).map((tool: any) => { + const toolInCollectionList = collectionList?.find(c => tool.provider_id === c.id) + return { + ...tool, + isDeleted: appDetail?.deleted_tools?.some((deletedTool: any) => deletedTool.id === tool.id && deletedTool.tool_name === tool.tool_name), + notAuthor: toolInCollectionList?.is_team_authorization === false, + ...(tool.provider_type === 'builtin' ? { + provider_id: correctToolProvider(tool.provider_name, !!toolInCollectionList), + provider_name: correctToolProvider(tool.provider_name, !!toolInCollectionList), + } : {}), + } + }), } : DEFAULT_AGENT_SETTING, } return (newModelConfig as any) diff --git a/web/service/try-app.ts b/web/service/try-app.ts index a6f7a12c91..0a523623b8 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -14,6 +14,7 @@ type TryAppInfo = { mode: AppMode site: SiteInfo model_config: ModelConfig + deleted_tools: any[] } export const fetchTryAppInfo = async (appId: string) => { From 4dd5580854243926499e8d9b096bb4cf7a2c1021 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 15 Oct 2025 18:16:57 +0800 Subject: [PATCH 55/85] chore: preview two cols in panel --- web/app/components/app/configuration/config-var/index.tsx | 3 ++- .../app/configuration/config/agent/agent-tools/index.tsx | 4 ++-- web/app/components/app/configuration/dataset-config/index.tsx | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/web/app/components/app/configuration/config-var/index.tsx b/web/app/components/app/configuration/config-var/index.tsx index 2ac68227e3..ec793d5e26 100644 --- a/web/app/components/app/configuration/config-var/index.tsx +++ b/web/app/components/app/configuration/config-var/index.tsx @@ -22,6 +22,7 @@ import { useModalContext } from '@/context/modal-context' import { useEventEmitterContextContext } from '@/context/event-emitter' import type { InputVar } from '@/app/components/workflow/types' import { InputVarType } from '@/app/components/workflow/types' +import cn from '@/utils/classnames' export const ADD_EXTERNAL_DATA_TOOL = 'ADD_EXTERNAL_DATA_TOOL' @@ -244,7 +245,7 @@ const ConfigVar: FC = ({ promptVariables, readonly, onPromptVar
)} {hasVar && ( -
+
{promptVariables.map(({ key, name, type, required, config, icon, icon_background }, index) => ( { const { t } = useTranslation() const [isShowChooseTool, setIsShowChooseTool] = useState(false) - const { modelConfig, setModelConfig } = useContext(ConfigContext) + const { readonly, modelConfig, setModelConfig } = useContext(ConfigContext) const { data: buildInTools } = useAllBuiltInTools() const { data: customTools } = useAllCustomTools() const { data: workflowTools } = useAllWorkflowTools() @@ -177,7 +177,7 @@ const AgentTools: FC = () => {
} > -
+
{tools.map((item: AgentTool & { icon: any; collection?: Collection }, index) => (
= ({ readonly, hideMetadataFilter }) => { > {hasData ? ( -
+
{formattedDataset.map(item => ( Date: Thu, 16 Oct 2025 10:36:36 +0800 Subject: [PATCH 56/85] chore: tools preview readonly --- .../configuration/config/agent/agent-tools/index.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/web/app/components/app/configuration/config/agent/agent-tools/index.tsx b/web/app/components/app/configuration/config/agent/agent-tools/index.tsx index 0031dcdde3..d537fa807f 100644 --- a/web/app/components/app/configuration/config/agent/agent-tools/index.tsx +++ b/web/app/components/app/configuration/config/agent/agent-tools/index.tsx @@ -158,7 +158,7 @@ const AgentTools: FC = () => { headerRight={
{tools.filter(item => !!item.enabled).length}/{tools.length} {t('appDebug.agent.tools.enabled')}
- {tools.length < MAX_TOOLS_NUM && ( + {tools.length < MAX_TOOLS_NUM && !readonly && ( <>
{ > {getProviderShowName(item)} {item.tool_label} - {!item.isDeleted && ( + {!item.isDeleted && !readonly && ( @@ -212,7 +212,7 @@ const AgentTools: FC = () => { } >
-
+
@@ -246,8 +246,8 @@ const AgentTools: FC = () => {
)} - {!item.isDeleted && ( -
+ {!item.isDeleted && !readonly && ( + diff --git a/web/app/components/workflow/nodes/_base/components/before-run-form/bool-input.tsx b/web/app/components/workflow/nodes/_base/components/before-run-form/bool-input.tsx index 73219a551b..29f6e13025 100644 --- a/web/app/components/workflow/nodes/_base/components/before-run-form/bool-input.tsx +++ b/web/app/components/workflow/nodes/_base/components/before-run-form/bool-input.tsx @@ -9,6 +9,7 @@ type Props = { value: boolean required?: boolean onChange: (value: boolean) => void + readonly?: boolean } const BoolInput: FC = ({ @@ -16,6 +17,7 @@ const BoolInput: FC = ({ onChange, name, required, + readonly, }) => { const { t } = useTranslation() const handleChange = useCallback(() => { @@ -27,6 +29,7 @@ const BoolInput: FC = ({ className='!h-4 !w-4' checked={!!value} onCheck={handleChange} + disabled={readonly} />
{name} From cc02b78acac04c619e2254ec30df58d4ab56d8b9 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 16 Oct 2025 11:27:58 +0800 Subject: [PATCH 58/85] feat: different app preview --- .../configuration/dataset-config/index.tsx | 2 +- .../basic-app-preview.tsx} | 6 ++--- .../preview/flow-app-preview.tsx | 18 +++++++++++++ .../app/configuration/preview/index.tsx | 26 +++++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) rename web/app/components/app/configuration/{preview.tsx => preview/basic-app-preview.tsx} (99%) create mode 100644 web/app/components/app/configuration/preview/flow-app-preview.tsx create mode 100644 web/app/components/app/configuration/preview/index.tsx diff --git a/web/app/components/app/configuration/dataset-config/index.tsx b/web/app/components/app/configuration/dataset-config/index.tsx index 081d1d5b69..6fcdc1a079 100644 --- a/web/app/components/app/configuration/dataset-config/index.tsx +++ b/web/app/components/app/configuration/dataset-config/index.tsx @@ -310,7 +310,7 @@ const DatasetConfig: FC = ({ readonly, hideMetadataFilter }) => {
)} - {mode === AppType.completion && dataSet.length > 0 && ( + {!readonly && mode === AppType.completion && dataSet.length > 0 && ( = ({ +const BasicAppPreview: FC = ({ appId, }) => { const media = useBreakpoints() @@ -358,4 +358,4 @@ const Configuration: FC = ({ ) } -export default React.memo(Configuration) +export default React.memo(BasicAppPreview) diff --git a/web/app/components/app/configuration/preview/flow-app-preview.tsx b/web/app/components/app/configuration/preview/flow-app-preview.tsx new file mode 100644 index 0000000000..f374f6a1d5 --- /dev/null +++ b/web/app/components/app/configuration/preview/flow-app-preview.tsx @@ -0,0 +1,18 @@ +'use client' +import type { FC } from 'react' +import React from 'react' + +type Props = { + appId: string +} + +const FlowAppPreview: FC = ({ + appId, +}) => { + return ( +
+ {appId} +
+ ) +} +export default React.memo(FlowAppPreview) diff --git a/web/app/components/app/configuration/preview/index.tsx b/web/app/components/app/configuration/preview/index.tsx new file mode 100644 index 0000000000..e1455f757a --- /dev/null +++ b/web/app/components/app/configuration/preview/index.tsx @@ -0,0 +1,26 @@ +'use client' +import type { FC } from 'react' +import React from 'react' +import { useGetTryAppInfo } from '@/service/use-try-app' +import BasicAppPreview from './basic-app-preview' +import FlowAppPreview from './flow-app-preview' +import Loading from '@/app/components/base/loading' + +type Props = { + appId: string +} + +const Preview: FC = ({ + appId, +}) => { + const { data: appDetail, isLoading } = useGetTryAppInfo(appId) + const isBasicApp = appDetail ? ['agent-chat', 'chat', 'completion'].includes(appDetail.mode) : false + if (isLoading) { + return
+ +
+ } + + return isBasicApp ? : +} +export default React.memo(Preview) From 337abc536b6b36a8414b5da087b287f343c709c4 Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Thu, 16 Oct 2025 13:47:38 +0800 Subject: [PATCH 59/85] fix: update responsive breakpoint and adjust divider visibility in banner component --- web/app/components/explore/banner/banner-item.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/explore/banner/banner-item.tsx b/web/app/components/explore/banner/banner-item.tsx index c5c95a4d36..9645a307b2 100644 --- a/web/app/components/explore/banner/banner-item.tsx +++ b/web/app/components/explore/banner/banner-item.tsx @@ -25,7 +25,7 @@ type BannerItemProps = { isPaused?: boolean } -const RESPONSIVE_BREAKPOINT = 1280 +const RESPONSIVE_BREAKPOINT = 1200 const MAX_RESPONSIVE_WIDTH = 600 const INDICATOR_WIDTH = 20 const INDICATOR_GAP = 8 @@ -177,7 +177,7 @@ export const BannerItem: FC = ({ banner, autoplayDelay, isPause /> ))}
-
+
From 4bea38042aa77020a034937a3138756b9cecc82b Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 16 Oct 2025 14:03:22 +0800 Subject: [PATCH 60/85] feat: text completion form preview --- .../prompt-value-panel/index.tsx | 19 ++++++++++++++----- .../text-generation-image-uploader.tsx | 6 ++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/web/app/components/app/configuration/prompt-value-panel/index.tsx b/web/app/components/app/configuration/prompt-value-panel/index.tsx index 71d9ceac57..9b9b5fd66e 100644 --- a/web/app/components/app/configuration/prompt-value-panel/index.tsx +++ b/web/app/components/app/configuration/prompt-value-panel/index.tsx @@ -40,7 +40,7 @@ const PromptValuePanel: FC = ({ onVisionFilesChange, }) => { const { t } = useTranslation() - const { modelModeType, modelConfig, setInputs, mode, isAdvancedMode, completionPromptConfig, chatPromptConfig } = useContext(ConfigContext) + const { readonly, modelModeType, modelConfig, setInputs, mode, isAdvancedMode, completionPromptConfig, chatPromptConfig } = useContext(ConfigContext) const [userInputFieldCollapse, setUserInputFieldCollapse] = useState(false) const promptVariables = modelConfig.configs.prompt_variables.filter(({ key, name }) => { return key && key?.trim() && name && name?.trim() @@ -124,6 +124,7 @@ const PromptValuePanel: FC = ({ placeholder={name} autoFocus={index === 0} maxLength={max_length || DEFAULT_VALUE_MAX_LEN} + readOnly={readonly} /> )} {type === 'paragraph' && ( @@ -132,6 +133,7 @@ const PromptValuePanel: FC = ({ placeholder={name} value={inputs[key] ? `${inputs[key]}` : ''} onChange={(e) => { handleInputValueChange(key, e.target.value) }} + readOnly={readonly} /> )} {type === 'select' && ( @@ -142,6 +144,7 @@ const PromptValuePanel: FC = ({ items={(options || []).map(i => ({ name: i, value: i }))} allowSearch={false} bgClassName='bg-gray-50' + disabled={readonly} /> )} {type === 'number' && ( @@ -152,6 +155,7 @@ const PromptValuePanel: FC = ({ placeholder={name} autoFocus={index === 0} maxLength={max_length || DEFAULT_VALUE_MAX_LEN} + readOnly={readonly} /> )} {type === 'checkbox' && ( @@ -160,6 +164,7 @@ const PromptValuePanel: FC = ({ value={!!inputs[key]} required={required} onChange={(value) => { handleInputValueChange(key, value) }} + readonly={readonly} /> )}
@@ -178,6 +183,7 @@ const PromptValuePanel: FC = ({ url: fileItem.url, upload_file_id: fileItem.fileId, })))} + disabled={readonly} />
@@ -186,12 +192,12 @@ const PromptValuePanel: FC = ({ )} {!userInputFieldCollapse && (
- + {canNotRun && (
) diff --git a/web/app/components/base/image-uploader/text-generation-image-uploader.tsx b/web/app/components/base/image-uploader/text-generation-image-uploader.tsx index 99aef56250..064d9a6b62 100644 --- a/web/app/components/base/image-uploader/text-generation-image-uploader.tsx +++ b/web/app/components/base/image-uploader/text-generation-image-uploader.tsx @@ -69,10 +69,12 @@ const PasteImageLinkButton: FC = ({ type TextGenerationImageUploaderProps = { settings: VisionSettings onFilesChange: (files: ImageFile[]) => void + disabled?: boolean } const TextGenerationImageUploader: FC = ({ settings, onFilesChange, + disabled, }) => { const { t } = useTranslation() @@ -92,7 +94,7 @@ const TextGenerationImageUploader: FC = ({ const localUpload = ( = settings.number_limits} + disabled={files.length >= settings.number_limits || disabled} limit={+settings.image_file_size_limit!} > { @@ -113,7 +115,7 @@ const TextGenerationImageUploader: FC = ({ const urlUpload = ( = settings.number_limits} + disabled={files.length >= settings.number_limits || disabled} /> ) From 61ebc756aab3d96acce28593da53cbcc50b758c1 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 16 Oct 2025 17:38:13 +0800 Subject: [PATCH 61/85] feat: workflow preview --- .../preview/flow-app-preview.tsx | 21 ++++++++++++++++++- .../app/configuration/preview/index.tsx | 2 +- .../workflow/workflow-preview/index.tsx | 7 +++++-- web/service/try-app.ts | 14 +++++++++++++ web/service/use-try-app.ts | 11 +++++++++- 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/web/app/components/app/configuration/preview/flow-app-preview.tsx b/web/app/components/app/configuration/preview/flow-app-preview.tsx index f374f6a1d5..44686dcc04 100644 --- a/web/app/components/app/configuration/preview/flow-app-preview.tsx +++ b/web/app/components/app/configuration/preview/flow-app-preview.tsx @@ -1,17 +1,36 @@ 'use client' +import Loading from '@/app/components/base/loading' +import { useGetTryAppFlowPreview } from '@/service/use-try-app' import type { FC } from 'react' import React from 'react' +import WorkflowPreview from '@/app/components/workflow/workflow-preview' +import cn from '@/utils/classnames' type Props = { appId: string + className?: string } const FlowAppPreview: FC = ({ appId, + className, }) => { + const { data, isLoading } = useGetTryAppFlowPreview(appId) + + if (isLoading) { + return
+ +
+ } + if(!data) + return null return (
- {appId} +
) } diff --git a/web/app/components/app/configuration/preview/index.tsx b/web/app/components/app/configuration/preview/index.tsx index e1455f757a..d8a9640fe0 100644 --- a/web/app/components/app/configuration/preview/index.tsx +++ b/web/app/components/app/configuration/preview/index.tsx @@ -21,6 +21,6 @@ const Preview: FC = ({
} - return isBasicApp ? : + return isBasicApp ? : } export default React.memo(Preview) diff --git a/web/app/components/workflow/workflow-preview/index.tsx b/web/app/components/workflow/workflow-preview/index.tsx index 5fd4b9097c..0a10a9d416 100644 --- a/web/app/components/workflow/workflow-preview/index.tsx +++ b/web/app/components/workflow/workflow-preview/index.tsx @@ -61,12 +61,14 @@ type WorkflowPreviewProps = { edges: Edge[] viewport: Viewport className?: string + miniMapToRight?: boolean } const WorkflowPreview = ({ nodes, edges, viewport, className, + miniMapToRight, }: WorkflowPreviewProps) => { const [nodesData, setNodesData] = useState(() => initialNodes(nodes, edges)) const [edgesData, setEdgesData] = useState(() => initialEdges(edges, nodes)) @@ -97,8 +99,9 @@ const WorkflowPreview = ({ height: 72, }} maskColor='var(--color-workflow-minimap-bg)' - className='!absolute !bottom-14 !left-4 z-[9] !m-0 !h-[72px] !w-[102px] !rounded-lg !border-[0.5px] - !border-divider-subtle !bg-background-default-subtle !shadow-md !shadow-shadow-shadow-5' + className={cn('!absolute !bottom-14 z-[9] !m-0 !h-[72px] !w-[102px] !rounded-lg !border-[0.5px] !border-divider-subtle !bg-background-default-subtle !shadow-md !shadow-shadow-shadow-5', + miniMapToRight ? '!right-4' : '!left-4', + )} />
diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 0a523623b8..9e8b0cfe99 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -8,6 +8,8 @@ import type { import type { ModelConfig } from '@/types/app' import qs from 'qs' import type { DataSetListResponse } from '@/models/datasets' +import type { Edge, Node } from '@/app/components/workflow/types' +import type { Viewport } from 'reactflow' type TryAppInfo = { name: string @@ -25,3 +27,15 @@ export const fetchTryAppDatasets = (appId: string, ids: string[]) => { const urlParams = qs.stringify({ ids }, { indices: false }) return get(`/trial-apps/${appId}/datasets?${urlParams}`) } + +type TryAppFlowPreview = { + graph: { + nodes: Node[] + edges: Edge[] + viewport: Viewport + } +} + +export const fetchTryAppFlowPreview = (appId: string) => { + return get(`/trial-apps/${appId}/workflows`) +} diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index 1245e628e1..d4c4fbcb5f 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query' -import { fetchTryAppDatasets, fetchTryAppInfo } from './try-app' +import { fetchTryAppDatasets, fetchTryAppFlowPreview, fetchTryAppInfo } from './try-app' import { AppSourceType, fetchAppParams } from './share' import type { DataSetListResponse } from '@/models/datasets' @@ -32,3 +32,12 @@ export const useGetTryAppDataSets = (appId: string, ids: string[]) => { enabled: ids.length > 0, }) } + +export const useGetTryAppFlowPreview = (appId: string) => { + return useQuery({ + queryKey: [NAME_SPACE, 'preview', appId], + queryFn: () => { + return fetchTryAppFlowPreview(appId) + }, + }) +} From b018f2b0a0b4b78ffb56dc85cdfe16e15b7c2078 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 14:17:43 +0800 Subject: [PATCH 62/85] feat: can show app detail modal --- web/app/components/explore/app-card/index.tsx | 22 ++++++++---- web/app/components/explore/app-list/index.tsx | 10 ++++++ web/app/components/explore/index.tsx | 14 ++++++++ web/app/components/explore/try-app/index.tsx | 32 +++++++++++++++++ web/app/components/explore/try-app/tab.tsx | 34 +++++++++++++++++++ web/context/explore-context.ts | 10 ++++++ 6 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 web/app/components/explore/try-app/index.tsx create mode 100644 web/app/components/explore/try-app/tab.tsx diff --git a/web/app/components/explore/app-card/index.tsx b/web/app/components/explore/app-card/index.tsx index 5b9d695947..a16a09f2c2 100644 --- a/web/app/components/explore/app-card/index.tsx +++ b/web/app/components/explore/app-card/index.tsx @@ -8,7 +8,10 @@ import AppIcon from '@/app/components/base/app-icon' import { AppTypeIcon } from '../../app/type-selector' import { useGlobalPublicStore } from '@/context/global-public-context' import { RiArrowRightUpLine } from '@remixicon/react' -import Link from 'next/link' +import { useCallback } from 'react' +import ExploreContext from '@/context/explore-context' +import { useContextSelector } from 'use-context-selector' + export type AppCardProps = { app: App canCreate: boolean @@ -26,6 +29,12 @@ const AppCard = ({ const { app: appBasicInfo } = app const { systemFeatures } = useGlobalPublicStore() const isTrialApp = app.can_trial && systemFeatures.enable_trial_app + const setShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.setShowTryAppPanel) + const showTryAPPPanel = useCallback((appId: string) => { + return () => { + setShowTryAppPanel?.(true, { appId }) + } + }, [setShowTryAppPanel]) return (
@@ -71,12 +80,11 @@ const AppCard = ({ )} {isTrialApp && ( - - - + // /try/app/${app.app_id} + )}
)} diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 58c850eb08..6292bc6aca 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -25,6 +25,8 @@ import DSLConfirmModal from '@/app/components/app/create-from-dsl-modal/dsl-conf import Banner from '@/app/components/explore/banner/banner' import { useGlobalPublicStore } from '@/context/global-public-context' import Button from '@/app/components/base/button' +import { useContextSelector } from 'use-context-selector' +import TryApp from '../try-app' type AppsProps = { onSuccess?: () => void @@ -141,6 +143,12 @@ const Apps = ({ }) }, [handleImportDSLConfirm, onSuccess]) + const isShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.isShowTryAppPanel) + const setShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.setShowTryAppPanel) + const hideTryAppPanel = useCallback(() => { + setShowTryAppPanel(false) + }, [setShowTryAppPanel]) + const appId = useContextSelector(ExploreContext, ctx => ctx.currentApp?.appId) as string if (!categories || categories.length === 0) { return (
@@ -235,6 +243,8 @@ const Apps = ({ /> ) } + + {isShowTryAppPanel && }
) } diff --git a/web/app/components/explore/index.tsx b/web/app/components/explore/index.tsx index e716de96f1..13b48b89dc 100644 --- a/web/app/components/explore/index.tsx +++ b/web/app/components/explore/index.tsx @@ -2,6 +2,7 @@ import type { FC } from 'react' import React, { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' +import type { CurrentTryAppParams } from '@/context/explore-context' import ExploreContext from '@/context/explore-context' import Sidebar from '@/app/components/explore/sidebar' import { useAppContext } from '@/context/app-context' @@ -42,6 +43,16 @@ const Explore: FC = ({ return router.replace('/datasets') }, [isCurrentWorkspaceDatasetOperator]) + const [currentTryAppParams, setCurrentTryAppParams] = useState({ appId: '47b94c61-5b0d-402b-b5bb-482ee406bc68' }) + const [isShowTryAppPanel, setIsShowTryAppPanel] = useState(true) + const setShowTryAppPanel = (showTryAppPanel: boolean, params?: CurrentTryAppParams) => { + if (showTryAppPanel) + setCurrentTryAppParams(params) + else + setCurrentTryAppParams(undefined) + setIsShowTryAppPanel(showTryAppPanel) + } + return (
= ({ setInstalledApps, isFetchingInstalledApps, setIsFetchingInstalledApps, + currentApp: currentTryAppParams, + isShowTryAppPanel, + setShowTryAppPanel, } } > diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx new file mode 100644 index 0000000000..80b6f52568 --- /dev/null +++ b/web/app/components/explore/try-app/index.tsx @@ -0,0 +1,32 @@ +'use client' +import type { FC } from 'react' +import React, { useState } from 'react' +import Modal from '@/app/components/base/modal/index' +import Tab, { TypeEnum } from './tab' + +type Props = { + appId: string + onClose: () => void +} + +const TryApp: FC = ({ + appId, + onClose, +}) => { + const [type, setType] = useState(TypeEnum.TRY) + + return ( + + + {appId} + + ) +} +export default React.memo(TryApp) diff --git a/web/app/components/explore/try-app/tab.tsx b/web/app/components/explore/try-app/tab.tsx new file mode 100644 index 0000000000..bba049dd84 --- /dev/null +++ b/web/app/components/explore/try-app/tab.tsx @@ -0,0 +1,34 @@ +'use client' +import type { FC } from 'react' +import React from 'react' +import TabHeader from '../../base/tab-header' + +export enum TypeEnum { + TRY = 'try', + DETAIL = 'detail', +} + +type Props = { + value: TypeEnum + onChange: (value: TypeEnum) => void +} + +const Tab: FC = ({ + value, + onChange, +}) => { + const tabs = [ + { id: TypeEnum.TRY, name: 'Try App' }, + { id: TypeEnum.DETAIL, name: 'App Details' }, + ] + return ( +
+ void} + /> +
+ ) +} +export default React.memo(Tab) diff --git a/web/context/explore-context.ts b/web/context/explore-context.ts index d8d64fb34c..b7e1f9e0cd 100644 --- a/web/context/explore-context.ts +++ b/web/context/explore-context.ts @@ -2,6 +2,10 @@ import { createContext } from 'use-context-selector' import type { InstalledApp } from '@/models/explore' import { noop } from 'lodash-es' +export type CurrentTryAppParams = { + appId: string +} + type IExplore = { controlUpdateInstalledApps: number setControlUpdateInstalledApps: (controlUpdateInstalledApps: number) => void @@ -10,6 +14,9 @@ type IExplore = { setInstalledApps: (installedApps: InstalledApp[]) => void isFetchingInstalledApps: boolean setIsFetchingInstalledApps: (isFetchingInstalledApps: boolean) => void + currentApp?: CurrentTryAppParams + isShowTryAppPanel: boolean + setShowTryAppPanel: (showTryAppPanel: boolean, params?: CurrentTryAppParams) => void } const ExploreContext = createContext({ @@ -20,6 +27,9 @@ const ExploreContext = createContext({ setInstalledApps: noop, isFetchingInstalledApps: false, setIsFetchingInstalledApps: noop, + isShowTryAppPanel: false, + setShowTryAppPanel: noop, + currentApp: undefined, }) export default ExploreContext From 8391884c4e65a362ed21cb634210eebfeb7a8612 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 14:45:08 +0800 Subject: [PATCH 63/85] chore: tab and close btn --- web/app/components/base/tab-header/index.tsx | 7 +++++- web/app/components/explore/try-app/index.tsx | 23 +++++++++++++++----- web/app/components/explore/try-app/tab.tsx | 21 ++++++++++-------- web/i18n/en-US/explore.ts | 6 +++++ web/i18n/zh-Hans/explore.ts | 6 +++++ 5 files changed, 48 insertions(+), 15 deletions(-) diff --git a/web/app/components/base/tab-header/index.tsx b/web/app/components/base/tab-header/index.tsx index 846277e5db..c208612d30 100644 --- a/web/app/components/base/tab-header/index.tsx +++ b/web/app/components/base/tab-header/index.tsx @@ -16,6 +16,8 @@ export type ITabHeaderProps = { items: Item[] value: string itemClassName?: string + itemWrapClassName?: string + activeItemClassName?: string onChange: (value: string) => void } @@ -23,6 +25,8 @@ const TabHeader: FC = ({ items, value, itemClassName, + itemWrapClassName, + activeItemClassName, onChange, }) => { const renderItem = ({ id, name, icon, extra, disabled }: Item) => ( @@ -30,8 +34,9 @@ const TabHeader: FC = ({ key={id} className={cn( 'system-md-semibold relative flex cursor-pointer items-center border-b-2 border-transparent pb-2 pt-2.5', - id === value ? 'border-components-tab-active text-text-primary' : 'text-text-tertiary', + id === value ? cn('border-components-tab-active text-text-primary', activeItemClassName) : 'text-text-tertiary', disabled && 'cursor-not-allowed opacity-30', + itemWrapClassName, )} onClick={() => !disabled && onChange(id)} > diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index 80b6f52568..42d33f77ee 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -3,6 +3,8 @@ import type { FC } from 'react' import React, { useState } from 'react' import Modal from '@/app/components/base/modal/index' import Tab, { TypeEnum } from './tab' +import Button from '../../base/button' +import { RiCloseLine } from '@remixicon/react' type Props = { appId: string @@ -19,12 +21,23 @@ const TryApp: FC = ({ - +
+ + +
+ {appId}
) diff --git a/web/app/components/explore/try-app/tab.tsx b/web/app/components/explore/try-app/tab.tsx index bba049dd84..030edec7bd 100644 --- a/web/app/components/explore/try-app/tab.tsx +++ b/web/app/components/explore/try-app/tab.tsx @@ -2,6 +2,7 @@ import type { FC } from 'react' import React from 'react' import TabHeader from '../../base/tab-header' +import { useTranslation } from 'react-i18next' export enum TypeEnum { TRY = 'try', @@ -17,18 +18,20 @@ const Tab: FC = ({ value, onChange, }) => { + const { t } = useTranslation() const tabs = [ - { id: TypeEnum.TRY, name: 'Try App' }, - { id: TypeEnum.DETAIL, name: 'App Details' }, + { id: TypeEnum.TRY, name: t('explore.tryApp.tabHeader.try') }, + { id: TypeEnum.DETAIL, name: t('explore.tryApp.tabHeader.detail') }, ] return ( -
- void} - /> -
+ void} + itemClassName='ml-0 system-md-semibold-uppercase' + itemWrapClassName='pt-2' + activeItemClassName='border-util-colors-blue-brand-blue-brand-500' + /> ) } export default React.memo(Tab) diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index bd016f9da9..7b9bdd5de5 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -30,6 +30,12 @@ const translation = { addToWorkspace: 'Use template', try: 'Details', }, + tryApp: { + tabHeader: { + try: 'Try it', + detail: 'Orchestration Details', + }, + }, appCustomize: { title: 'Create app from {{name}}', subTitle: 'App icon & name', diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index 3688c75063..c2f32b57b1 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -31,6 +31,12 @@ const translation = { try: '详情', customize: '自定义', }, + tryApp: { + tabHeader: { + try: '试用', + detail: '编排详情', + }, + }, appCustomize: { title: '从 {{name}} 创建应用程序', subTitle: '应用程序图标和名称', From 72282b6e8f9fd006fe1dc1a1de0cfd26adf7860b Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 14:58:17 +0800 Subject: [PATCH 64/85] feat: try app layout --- .../(commonLayout)/try/app/[appId]/page.tsx | 2 +- web/app/(commonLayout)/try/right/page.tsx | 9 ----- .../explore/try-app/app-info/index.tsx | 18 +++++++++ .../{try => explore/try-app}/app/chat.tsx | 2 +- .../{try => explore/try-app}/app/index.tsx | 7 +--- .../try-app}/app/text-generation.tsx | 10 ++--- web/app/components/explore/try-app/index.tsx | 37 +++++++++++-------- web/app/components/try/app/meta.tsx | 17 --------- 8 files changed, 49 insertions(+), 53 deletions(-) delete mode 100644 web/app/(commonLayout)/try/right/page.tsx create mode 100644 web/app/components/explore/try-app/app-info/index.tsx rename web/app/components/{try => explore/try-app}/app/chat.tsx (92%) rename web/app/components/{try => explore/try-app}/app/index.tsx (89%) rename web/app/components/{try => explore/try-app}/app/text-generation.tsx (97%) delete mode 100644 web/app/components/try/app/meta.tsx diff --git a/web/app/(commonLayout)/try/app/[appId]/page.tsx b/web/app/(commonLayout)/try/app/[appId]/page.tsx index 84a21b9049..26084a39ab 100644 --- a/web/app/(commonLayout)/try/app/[appId]/page.tsx +++ b/web/app/(commonLayout)/try/app/[appId]/page.tsx @@ -1,5 +1,5 @@ import React from 'react' -import Main from '@/app/components/try/app/index' +import Main from '@/app/components/explore/try-app/app/index' export type IInstalledAppProps = { params: { diff --git a/web/app/(commonLayout)/try/right/page.tsx b/web/app/(commonLayout)/try/right/page.tsx deleted file mode 100644 index 8ea68b5b3d..0000000000 --- a/web/app/(commonLayout)/try/right/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import Meta from '../../../components/try/app/meta' - -const Page = () => { - return ( - - ) -} - -export default Page diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx new file mode 100644 index 0000000000..1452c786cb --- /dev/null +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -0,0 +1,18 @@ +'use client' +import type { FC } from 'react' +import React from 'react' + +type Props = { + className?: string +} + +const AppInfo: FC = ({ + className, +}) => { + return ( +
+ AppInfo Info +
+ ) +} +export default React.memo(AppInfo) diff --git a/web/app/components/try/app/chat.tsx b/web/app/components/explore/try-app/app/chat.tsx similarity index 92% rename from web/app/components/try/app/chat.tsx rename to web/app/components/explore/try-app/app/chat.tsx index 56d00db099..2a12d9d8e4 100644 --- a/web/app/components/try/app/chat.tsx +++ b/web/app/components/explore/try-app/app/chat.tsx @@ -2,7 +2,7 @@ import type { FC } from 'react' import React from 'react' import ChatWrapper from '@/app/components/base/chat/embedded-chatbot/chat-wrapper' -import { useThemeContext } from '../../base/chat/embedded-chatbot/theme/theme-context' +import { useThemeContext } from '../../../base/chat/embedded-chatbot/theme/theme-context' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import { EmbeddedChatbotContext, diff --git a/web/app/components/try/app/index.tsx b/web/app/components/explore/try-app/app/index.tsx similarity index 89% rename from web/app/components/try/app/index.tsx rename to web/app/components/explore/try-app/app/index.tsx index 26c24fcaba..c4be1d48f9 100644 --- a/web/app/components/try/app/index.tsx +++ b/web/app/components/explore/try-app/app/index.tsx @@ -3,7 +3,7 @@ import type { FC } from 'react' import React from 'react' import Chat from './chat' import TextGeneration from './text-generation' -import Loading from '../../base/loading' +import Loading from '../../../base/loading' import { useGetTryAppInfo } from '@/service/use-try-app' import type { AppData } from '@/models/share' import useDocumentTitle from '@/hooks/use-document-title' @@ -30,7 +30,7 @@ const TryApp: FC = ({ ) } return ( -
+
{isChat && ( )} @@ -46,9 +46,6 @@ const TryApp: FC = ({ } as AppData} /> )} -
- Right panel -
) } diff --git a/web/app/components/try/app/text-generation.tsx b/web/app/components/explore/try-app/app/text-generation.tsx similarity index 97% rename from web/app/components/try/app/text-generation.tsx rename to web/app/components/explore/try-app/app/text-generation.tsx index 889606d700..866b935df4 100644 --- a/web/app/components/try/app/text-generation.tsx +++ b/web/app/components/explore/try-app/app/text-generation.tsx @@ -6,7 +6,7 @@ import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import AppIcon from '@/app/components/base/app-icon' import Loading from '@/app/components/base/loading' import { appDefaultIconBackground } from '@/config' -import RunOnce from '../../share/text-generation/run-once' +import RunOnce from '../../../share/text-generation/run-once' import { useWebAppStore } from '@/context/web-app-context' import type { AppData, SiteInfo } from '@/models/share' import { useGetTryAppParams } from '@/service/use-try-app' @@ -16,7 +16,7 @@ import type { VisionFile, VisionSettings } from '@/types/app' import { Resolution, TransferMethod } from '@/types/app' import { useBoolean } from 'ahooks' import { noop } from 'lodash' -import type { Task } from '../../share/text-generation/types' +import type { Task } from '../../../share/text-generation/types' import Res from '@/app/components/share/text-generation/result' import { AppSourceType } from '@/service/share' import { TaskStatus } from '@/app/components/share/text-generation/types' @@ -97,10 +97,10 @@ const TextGeneration: FC = ({ const { user_input_form, more_like_this, file_upload, text_to_speech }: any = appParams setVisionConfig({ - // legacy of image upload compatible + // legacy of image upload compatible ...file_upload, transfer_methods: file_upload?.allowed_file_upload_methods || file_upload?.allowed_upload_methods, - // legacy of image upload compatible + // legacy of image upload compatible image_file_size_limit: appParams?.system_parameters.image_file_size_limit, fileUploadConfig: appParams?.system_parameters, } as any) @@ -162,7 +162,7 @@ const TextGeneration: FC = ({
) - if(!siteInfo || !promptConfig) { + if (!siteInfo || !promptConfig) { return (
diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index 42d33f77ee..4fa29354cd 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -5,6 +5,8 @@ import Modal from '@/app/components/base/modal/index' import Tab, { TypeEnum } from './tab' import Button from '../../base/button' import { RiCloseLine } from '@remixicon/react' +import AppInfo from './app-info' +import App from './app' type Props = { appId: string @@ -23,22 +25,27 @@ const TryApp: FC = ({ onClose={onClose} className='h-[calc(100vh-32px)] max-w-[calc(100vw-32px)] p-2' > -
- - +
+
+ + +
+ {/* Main content */} +
+ + +
- - {appId} ) } diff --git a/web/app/components/try/app/meta.tsx b/web/app/components/try/app/meta.tsx deleted file mode 100644 index 9c19e40f83..0000000000 --- a/web/app/components/try/app/meta.tsx +++ /dev/null @@ -1,17 +0,0 @@ -'use client' -import type { FC } from 'react' -import React from 'react' - -type Props = { - -} - -const Meta: FC = ({ -}) => { - return ( -
- Meta Info -
- ) -} -export default React.memo(Meta) From 0360a0416b08fc8dffce9875a4d293f94fa64d59 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 15:23:50 +0800 Subject: [PATCH 65/85] feat: integration preview page --- web/app/(commonLayout)/try/app/[appId]/page.tsx | 17 ----------------- .../(commonLayout)/try/preview/[appId]/page.tsx | 17 ----------------- web/app/components/explore/try-app/index.tsx | 4 ++-- .../try-app}/preview/basic-app-preview.tsx | 0 .../try-app}/preview/flow-app-preview.tsx | 4 ++-- .../try-app}/preview/index.tsx | 0 web/service/use-try-app.ts | 6 +++--- 7 files changed, 7 insertions(+), 41 deletions(-) delete mode 100644 web/app/(commonLayout)/try/app/[appId]/page.tsx delete mode 100644 web/app/(commonLayout)/try/preview/[appId]/page.tsx rename web/app/components/{app/configuration => explore/try-app}/preview/basic-app-preview.tsx (100%) rename web/app/components/{app/configuration => explore/try-app}/preview/flow-app-preview.tsx (95%) rename web/app/components/{app/configuration => explore/try-app}/preview/index.tsx (100%) diff --git a/web/app/(commonLayout)/try/app/[appId]/page.tsx b/web/app/(commonLayout)/try/app/[appId]/page.tsx deleted file mode 100644 index 26084a39ab..0000000000 --- a/web/app/(commonLayout)/try/app/[appId]/page.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import Main from '@/app/components/explore/try-app/app/index' - -export type IInstalledAppProps = { - params: { - appId: string - } -} - -async function InstalledApp({ params }: IInstalledAppProps) { - const appId = (await params).appId - return ( -
- ) -} - -export default InstalledApp diff --git a/web/app/(commonLayout)/try/preview/[appId]/page.tsx b/web/app/(commonLayout)/try/preview/[appId]/page.tsx deleted file mode 100644 index bba616c3c0..0000000000 --- a/web/app/(commonLayout)/try/preview/[appId]/page.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import Main from '@/app/components/app/configuration/preview' - -export type IPreviewProps = { - params: { - appId: string - } -} - -async function Preview({ params }: IPreviewProps) { - const appId = (await params).appId - return ( -
- ) -} - -export default Preview diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index 4fa29354cd..6d19f5ce9b 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -7,6 +7,7 @@ import Button from '../../base/button' import { RiCloseLine } from '@remixicon/react' import AppInfo from './app-info' import App from './app' +import Preview from './preview' type Props = { appId: string @@ -18,7 +19,6 @@ const TryApp: FC = ({ onClose, }) => { const [type, setType] = useState(TypeEnum.TRY) - return ( = ({
{/* Main content */}
- + {type === TypeEnum.TRY ? : }
diff --git a/web/app/components/app/configuration/preview/basic-app-preview.tsx b/web/app/components/explore/try-app/preview/basic-app-preview.tsx similarity index 100% rename from web/app/components/app/configuration/preview/basic-app-preview.tsx rename to web/app/components/explore/try-app/preview/basic-app-preview.tsx diff --git a/web/app/components/app/configuration/preview/flow-app-preview.tsx b/web/app/components/explore/try-app/preview/flow-app-preview.tsx similarity index 95% rename from web/app/components/app/configuration/preview/flow-app-preview.tsx rename to web/app/components/explore/try-app/preview/flow-app-preview.tsx index 44686dcc04..c6cc4b33ad 100644 --- a/web/app/components/app/configuration/preview/flow-app-preview.tsx +++ b/web/app/components/explore/try-app/preview/flow-app-preview.tsx @@ -22,10 +22,10 @@ const FlowAppPreview: FC = ({
} - if(!data) + if (!data) return null return ( -
+
{ return useQuery({ - queryKey: [NAME_SPACE, 'appInfo'], + queryKey: [NAME_SPACE, 'appInfo', appId], queryFn: () => { return fetchTryAppInfo(appId) }, @@ -16,7 +16,7 @@ export const useGetTryAppInfo = (appId: string) => { export const useGetTryAppParams = (appId: string) => { return useQuery({ - queryKey: [NAME_SPACE, 'appParams'], + queryKey: [NAME_SPACE, 'appParams', appId], queryFn: () => { return fetchAppParams(AppSourceType.tryApp, appId) }, @@ -25,7 +25,7 @@ export const useGetTryAppParams = (appId: string) => { export const useGetTryAppDataSets = (appId: string, ids: string[]) => { return useQuery({ - queryKey: [NAME_SPACE, 'dataSets', ids], + queryKey: [NAME_SPACE, 'dataSets', appId, ids], queryFn: () => { return fetchTryAppDatasets(appId, ids) }, From 58d305dbed7d05ef687f6e23635ccc25fd9a6dcd Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 15:25:25 +0800 Subject: [PATCH 66/85] chore: tab header jp --- web/i18n/ja-JP/explore.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index d897c46d23..ecb4aa7a8b 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -31,6 +31,12 @@ const translation = { try: '詳細', customize: 'カスタマイズ', }, + tryApp: { + tabHeader: { + try: 'お試し', + detail: 'オーケストレーション詳細', + }, + }, appCustomize: { title: '{{name}}からアプリを作成', subTitle: 'アプリアイコンと名前', From 372b1c3db8b74c9b8e00ade22efbc7bee52b067f Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 15:28:12 +0800 Subject: [PATCH 67/85] chore: change detail icon --- web/app/components/explore/app-card/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/explore/app-card/index.tsx b/web/app/components/explore/app-card/index.tsx index a16a09f2c2..923c5000a2 100644 --- a/web/app/components/explore/app-card/index.tsx +++ b/web/app/components/explore/app-card/index.tsx @@ -7,7 +7,7 @@ import type { App } from '@/models/explore' import AppIcon from '@/app/components/base/app-icon' import { AppTypeIcon } from '../../app/type-selector' import { useGlobalPublicStore } from '@/context/global-public-context' -import { RiArrowRightUpLine } from '@remixicon/react' +import { RiInformation2Line } from '@remixicon/react' import { useCallback } from 'react' import ExploreContext from '@/context/explore-context' import { useContextSelector } from 'use-context-selector' @@ -82,8 +82,8 @@ const AppCard = ({ {isTrialApp && ( // /try/app/${app.app_id} )}
From 6e9f82491dd749e9ca5674ad8cff7e12c9e5401e Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 15:51:59 +0800 Subject: [PATCH 68/85] chore: reuse the app detail and right meta --- web/app/components/explore/app-card/index.tsx | 1 - .../explore/try-app/app-info/index.tsx | 38 ++++++++++++++- .../components/explore/try-app/app/index.tsx | 20 +++----- web/app/components/explore/try-app/index.tsx | 48 +++++++++++-------- .../explore/try-app/preview/index.tsx | 13 ++--- web/service/try-app.ts | 2 +- 6 files changed, 75 insertions(+), 47 deletions(-) diff --git a/web/app/components/explore/app-card/index.tsx b/web/app/components/explore/app-card/index.tsx index 923c5000a2..1f09575db3 100644 --- a/web/app/components/explore/app-card/index.tsx +++ b/web/app/components/explore/app-card/index.tsx @@ -80,7 +80,6 @@ const AppCard = ({ )} {isTrialApp && ( - // /try/app/${app.app_id} + {isLoading ? (
+ +
) : ( +
+
+ + +
+ {/* Main content */} +
+ {type === TypeEnum.TRY ? : } + +
- {/* Main content */} -
- {type === TypeEnum.TRY ? : } - -
-
+ )} ) } diff --git a/web/app/components/explore/try-app/preview/index.tsx b/web/app/components/explore/try-app/preview/index.tsx index d8a9640fe0..6c146f9a63 100644 --- a/web/app/components/explore/try-app/preview/index.tsx +++ b/web/app/components/explore/try-app/preview/index.tsx @@ -1,25 +1,20 @@ 'use client' import type { FC } from 'react' import React from 'react' -import { useGetTryAppInfo } from '@/service/use-try-app' import BasicAppPreview from './basic-app-preview' import FlowAppPreview from './flow-app-preview' -import Loading from '@/app/components/base/loading' +import type { TryAppInfo } from '@/service/try-app' type Props = { appId: string + appDetail: TryAppInfo } const Preview: FC = ({ appId, + appDetail, }) => { - const { data: appDetail, isLoading } = useGetTryAppInfo(appId) - const isBasicApp = appDetail ? ['agent-chat', 'chat', 'completion'].includes(appDetail.mode) : false - if (isLoading) { - return
- -
- } + const isBasicApp = ['agent-chat', 'chat', 'completion'].includes(appDetail.mode) return isBasicApp ? : } diff --git a/web/service/try-app.ts b/web/service/try-app.ts index 9e8b0cfe99..de00e0a6d7 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -11,7 +11,7 @@ import type { DataSetListResponse } from '@/models/datasets' import type { Edge, Node } from '@/app/components/workflow/types' import type { Viewport } from 'reactflow' -type TryAppInfo = { +export type TryAppInfo = { name: string mode: AppMode site: SiteInfo From 344844d3e0d2dd45b6fb8d72f0a03633f5fcce6e Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 16:53:10 +0800 Subject: [PATCH 69/85] chore: handle data is large --- .../explore/try-app/app-info/index.tsx | 34 +++++++++++++++++-- web/app/components/explore/try-app/index.tsx | 4 +-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx index 1e40bfe56c..9e26e687d4 100644 --- a/web/app/components/explore/try-app/app-info/index.tsx +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -6,12 +6,16 @@ import { AppTypeIcon } from '@/app/components/app/type-selector' import { useTranslation } from 'react-i18next' import type { TryAppInfo } from '@/service/try-app' import cn from '@/utils/classnames' +import Button from '@/app/components/base/button' +import { RiAddLine } from '@remixicon/react' type Props = { appDetail: TryAppInfo className?: string } +const headerClassName = 'system-sm-semibold-uppercase text-text-secondary mb-3' + const AppInfo: FC = ({ className, appDetail, @@ -19,9 +23,9 @@ const AppInfo: FC = ({ const { t } = useTranslation() const mode = appDetail?.mode return ( -
+
{/* name and icon */} -
+
= ({
+
+ A workflow designed to translate a full book up to 15000 tokens per run. Uses Code node to separate text into chunks +
+ + +
+
Category
+
AI Coding
+
+ +
+
Requirements
+
+
+
+
LLM Vision supported
+
+
+
+
xxx
+
+
+
) } diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index 10da61b772..e5dfd0ca76 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -48,9 +48,9 @@ const TryApp: FC = ({
{/* Main content */} -
+
{type === TypeEnum.TRY ? : } - +
)} From e085f39c1384c65e1c3c42fae7d7191661f2ddf4 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 17:29:32 +0800 Subject: [PATCH 70/85] chore: description and category --- web/app/components/explore/app-card/index.tsx | 4 ++-- web/app/components/explore/app-list/index.tsx | 9 +++++++-- .../explore/try-app/app-info/index.tsx | 18 +++++++++++------- web/app/components/explore/try-app/index.tsx | 4 +++- web/context/explore-context.ts | 1 + web/service/try-app.ts | 1 + 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/web/app/components/explore/app-card/index.tsx b/web/app/components/explore/app-card/index.tsx index 1f09575db3..0363fce32c 100644 --- a/web/app/components/explore/app-card/index.tsx +++ b/web/app/components/explore/app-card/index.tsx @@ -32,9 +32,9 @@ const AppCard = ({ const setShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.setShowTryAppPanel) const showTryAPPPanel = useCallback((appId: string) => { return () => { - setShowTryAppPanel?.(true, { appId }) + setShowTryAppPanel?.(true, { appId, category: app.category }) } - }, [setShowTryAppPanel]) + }, [setShowTryAppPanel, app.category]) return (
diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 6292bc6aca..02b3ae085d 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -148,7 +148,7 @@ const Apps = ({ const hideTryAppPanel = useCallback(() => { setShowTryAppPanel(false) }, [setShowTryAppPanel]) - const appId = useContextSelector(ExploreContext, ctx => ctx.currentApp?.appId) as string + const appParams = useContextSelector(ExploreContext, ctx => ctx.currentApp) if (!categories || categories.length === 0) { return (
@@ -244,7 +244,12 @@ const Apps = ({ ) } - {isShowTryAppPanel && } + {isShowTryAppPanel && ( + + )}
) } diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx index 9e26e687d4..4d17575466 100644 --- a/web/app/components/explore/try-app/app-info/index.tsx +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -11,6 +11,7 @@ import { RiAddLine } from '@remixicon/react' type Props = { appDetail: TryAppInfo + category?: string className?: string } @@ -18,6 +19,7 @@ const headerClassName = 'system-sm-semibold-uppercase text-text-secondary mb-3' const AppInfo: FC = ({ className, + category, appDetail, }) => { const { t } = useTranslation() @@ -50,18 +52,20 @@ const AppInfo: FC = ({
-
- A workflow designed to translate a full book up to 15000 tokens per run. Uses Code node to separate text into chunks -
+ {appDetail.description && ( +
{appDetail.description}
+ )} -
-
Category
-
AI Coding
-
+ {category && ( +
+
Category
+
{category}
+
+ )}
Requirements
diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index e5dfd0ca76..15102facdb 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -13,11 +13,13 @@ import Loading from '@/app/components/base/loading' type Props = { appId: string + category?: string onClose: () => void } const TryApp: FC = ({ appId, + category, onClose, }) => { const [type, setType] = useState(TypeEnum.TRY) @@ -50,7 +52,7 @@ const TryApp: FC = ({ {/* Main content */}
{type === TypeEnum.TRY ? : } - +
)} diff --git a/web/context/explore-context.ts b/web/context/explore-context.ts index b7e1f9e0cd..20ce516323 100644 --- a/web/context/explore-context.ts +++ b/web/context/explore-context.ts @@ -4,6 +4,7 @@ import { noop } from 'lodash-es' export type CurrentTryAppParams = { appId: string + category?: string } type IExplore = { diff --git a/web/service/try-app.ts b/web/service/try-app.ts index de00e0a6d7..17624c7a1c 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -13,6 +13,7 @@ import type { Viewport } from 'reactflow' export type TryAppInfo = { name: string + description: string mode: AppMode site: SiteInfo model_config: ModelConfig From bee07974013e1520c5a31f224a1870912d696fbd Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 17:45:54 +0800 Subject: [PATCH 71/85] feat: create from try app --- web/app/components/explore/app-card/index.tsx | 2 +- web/app/components/explore/app-list/index.tsx | 8 +++++++- web/app/components/explore/try-app/app-info/index.tsx | 4 +++- web/app/components/explore/try-app/index.tsx | 4 +++- web/context/explore-context.ts | 4 ++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/web/app/components/explore/app-card/index.tsx b/web/app/components/explore/app-card/index.tsx index 0363fce32c..dda12083c3 100644 --- a/web/app/components/explore/app-card/index.tsx +++ b/web/app/components/explore/app-card/index.tsx @@ -32,7 +32,7 @@ const AppCard = ({ const setShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.setShowTryAppPanel) const showTryAPPPanel = useCallback((appId: string) => { return () => { - setShowTryAppPanel?.(true, { appId, category: app.category }) + setShowTryAppPanel?.(true, { appId, app }) } }, [setShowTryAppPanel, app.category]) diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 02b3ae085d..429a40d38a 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -149,6 +149,11 @@ const Apps = ({ setShowTryAppPanel(false) }, [setShowTryAppPanel]) const appParams = useContextSelector(ExploreContext, ctx => ctx.currentApp) + const handleShowFromTryApp = useCallback(() => { + setCurrApp(appParams?.app || null) + setIsShowCreateModal(true) + }, [appParams?.app]) + if (!categories || categories.length === 0) { return (
@@ -246,8 +251,9 @@ const Apps = ({ {isShowTryAppPanel && ( )}
diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx index 4d17575466..69146a036e 100644 --- a/web/app/components/explore/try-app/app-info/index.tsx +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -13,6 +13,7 @@ type Props = { appDetail: TryAppInfo category?: string className?: string + onCreate: () => void } const headerClassName = 'system-sm-semibold-uppercase text-text-secondary mb-3' @@ -21,6 +22,7 @@ const AppInfo: FC = ({ className, category, appDetail, + onCreate, }) => { const { t } = useTranslation() const mode = appDetail?.mode @@ -55,7 +57,7 @@ const AppInfo: FC = ({ {appDetail.description && (
{appDetail.description}
)} - diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index 15102facdb..9446e2526e 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -15,12 +15,14 @@ type Props = { appId: string category?: string onClose: () => void + onCreate: () => void } const TryApp: FC = ({ appId, category, onClose, + onCreate, }) => { const [type, setType] = useState(TypeEnum.TRY) const { data: appDetail, isLoading } = useGetTryAppInfo(appId) @@ -52,7 +54,7 @@ const TryApp: FC = ({ {/* Main content */}
{type === TypeEnum.TRY ? : } - +
)} diff --git a/web/context/explore-context.ts b/web/context/explore-context.ts index 20ce516323..6d11a919b1 100644 --- a/web/context/explore-context.ts +++ b/web/context/explore-context.ts @@ -1,10 +1,10 @@ import { createContext } from 'use-context-selector' -import type { InstalledApp } from '@/models/explore' +import type { App, InstalledApp } from '@/models/explore' import { noop } from 'lodash-es' export type CurrentTryAppParams = { appId: string - category?: string + app: App } type IExplore = { From b6a15623573462ace0229c8dd1d0e0c99bfdf6ff Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 17:54:45 +0800 Subject: [PATCH 72/85] fix: handle create can not show --- web/app/components/explore/app-list/index.tsx | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/web/app/components/explore/app-list/index.tsx b/web/app/components/explore/app-list/index.tsx index 429a40d38a..6b66667486 100644 --- a/web/app/components/explore/app-list/index.tsx +++ b/web/app/components/explore/app-list/index.tsx @@ -108,6 +108,18 @@ const Apps = ({ isFetching, } = useImportDSL() const [showDSLConfirmModal, setShowDSLConfirmModal] = useState(false) + + const isShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.isShowTryAppPanel) + const setShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.setShowTryAppPanel) + const hideTryAppPanel = useCallback(() => { + setShowTryAppPanel(false) + }, [setShowTryAppPanel]) + const appParams = useContextSelector(ExploreContext, ctx => ctx.currentApp) + const handleShowFromTryApp = useCallback(() => { + setCurrApp(appParams?.app || null) + setIsShowCreateModal(true) + }, [appParams?.app]) + const onCreate: CreateAppModalProps['onConfirm'] = async ({ name, icon_type, @@ -115,6 +127,8 @@ const Apps = ({ icon_background, description, }) => { + hideTryAppPanel() + const { export_data } = await fetchAppDetail( currApp?.app.id as string, ) @@ -143,17 +157,6 @@ const Apps = ({ }) }, [handleImportDSLConfirm, onSuccess]) - const isShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.isShowTryAppPanel) - const setShowTryAppPanel = useContextSelector(ExploreContext, ctx => ctx.setShowTryAppPanel) - const hideTryAppPanel = useCallback(() => { - setShowTryAppPanel(false) - }, [setShowTryAppPanel]) - const appParams = useContextSelector(ExploreContext, ctx => ctx.currentApp) - const handleShowFromTryApp = useCallback(() => { - setCurrApp(appParams?.app || null) - setIsShowCreateModal(true) - }, [appParams?.app]) - if (!categories || categories.length === 0) { return (
From aa0841e2a8e2d77bbb535b3c4773bd990e2d1da4 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 18:05:34 +0800 Subject: [PATCH 73/85] chore: 18n --- web/app/components/explore/try-app/app-info/index.tsx | 6 +++--- web/i18n/en-US/explore.ts | 3 +++ web/i18n/ja-JP/explore.ts | 3 +++ web/i18n/zh-Hans/explore.ts | 3 +++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx index 69146a036e..86113eff53 100644 --- a/web/app/components/explore/try-app/app-info/index.tsx +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -59,18 +59,18 @@ const AppInfo: FC = ({ )} {category && (
-
Category
+
{t('explore.tryApp.category')}
{category}
)}
-
Requirements
+
{t('explore.tryApp.requirements')}
diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index 7b9bdd5de5..649b744b89 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -35,6 +35,9 @@ const translation = { try: 'Try it', detail: 'Orchestration Details', }, + createFromSampleApp: 'Create from this sample app', + category: 'Category', + requirements: 'Requirements', }, appCustomize: { title: 'Create app from {{name}}', diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index ecb4aa7a8b..d3f5bc421c 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -36,6 +36,9 @@ const translation = { try: 'お試し', detail: 'オーケストレーション詳細', }, + createFromSampleApp: 'テンプレートから作成', + category: 'カテゴリー', + requirements: '必要項目', }, appCustomize: { title: '{{name}}からアプリを作成', diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index c2f32b57b1..e8152e2067 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -36,6 +36,9 @@ const translation = { try: '试用', detail: '编排详情', }, + createFromSampleApp: '从此模板创建应用', + category: '分类', + requirements: '必须配置项', }, appCustomize: { title: '从 {{name}} 创建应用程序', From 1f513e3b43abaa88ed1ef33355b8d9c643c5bf97 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 23 Oct 2025 18:26:38 +0800 Subject: [PATCH 74/85] chore: remove debug code --- web/app/components/explore/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/components/explore/index.tsx b/web/app/components/explore/index.tsx index 13b48b89dc..beafc8b6d1 100644 --- a/web/app/components/explore/index.tsx +++ b/web/app/components/explore/index.tsx @@ -43,8 +43,8 @@ const Explore: FC = ({ return router.replace('/datasets') }, [isCurrentWorkspaceDatasetOperator]) - const [currentTryAppParams, setCurrentTryAppParams] = useState({ appId: '47b94c61-5b0d-402b-b5bb-482ee406bc68' }) - const [isShowTryAppPanel, setIsShowTryAppPanel] = useState(true) + const [currentTryAppParams, setCurrentTryAppParams] = useState(undefined) + const [isShowTryAppPanel, setIsShowTryAppPanel] = useState(false) const setShowTryAppPanel = (showTryAppPanel: boolean, params?: CurrentTryAppParams) => { if (showTryAppPanel) setCurrentTryAppParams(params) From 8e4f0640cc0577aaefe166c1775ec67c63991805 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 10:41:18 +0800 Subject: [PATCH 75/85] fix: variable readonly in basic app problem --- .../app/configuration/config-var/index.tsx | 4 ++-- .../explore/try-app/preview/basic-app-preview.tsx | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/app/components/app/configuration/config-var/index.tsx b/web/app/components/app/configuration/config-var/index.tsx index ef19984bfe..cad7262650 100644 --- a/web/app/components/app/configuration/config-var/index.tsx +++ b/web/app/components/app/configuration/config-var/index.tsx @@ -258,9 +258,9 @@ const ConfigVar: FC = ({ promptVariables, readonly, onPromptVar
)} {hasVar && ( -
+
{ onPromptVariablesChange?.(list.map(item => item.variable)) }} handle='.handle' diff --git a/web/app/components/explore/try-app/preview/basic-app-preview.tsx b/web/app/components/explore/try-app/preview/basic-app-preview.tsx index 67f4429ef1..16e9f4abd5 100644 --- a/web/app/components/explore/try-app/preview/basic-app-preview.tsx +++ b/web/app/components/explore/try-app/preview/basic-app-preview.tsx @@ -23,7 +23,7 @@ import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' import { SupportUploadFileTypes } from '@/app/components/workflow/types' import { useGetTryAppDataSets, useGetTryAppInfo } from '@/service/use-try-app' -import { noop } from 'lodash' +import { noop } from 'lodash-es' import { correctModelProvider, correctToolProvider } from '@/utils' import { userInputsFormToPromptVariables } from '@/utils/model-config' import { useTextGenerationCurrentProviderAndModelAndModelList } from '../../../header/account-setting/model-provider-page/hooks' @@ -70,10 +70,10 @@ const BasicAppPreview: FC = ({ } }) const datasetIds = (() => { - if(isLoadingAppDetail) + if (isLoadingAppDetail) return [] const modelConfig = appDetail?.model_config - if(!modelConfig) + if (!modelConfig) return [] let datasets: any = null @@ -93,7 +93,7 @@ const BasicAppPreview: FC = ({ const isLoading = isLoadingAppDetail || isLoadingDatasets || isLoadingToolProviders const modelConfig: ModelConfig = ((modelConfig?: BackendModelConfig) => { - if(isLoading || !modelConfig) + if (isLoading || !modelConfig) return defaultModelConfig const model = modelConfig.model @@ -144,7 +144,7 @@ const BasicAppPreview: FC = ({ agentConfig: appDetail?.mode === 'agent-chat' ? { max_iteration: DEFAULT_AGENT_SETTING.max_iteration, ...modelConfig.agent_mode, - // remove dataset + // remove dataset enabled: true, // modelConfig.agent_mode?.enabled is not correct. old app: the value of app with dataset's is always true tools: modelConfig.agent_mode?.tools.filter((tool: any) => { return !tool.dataset @@ -331,7 +331,7 @@ const BasicAppPreview: FC = ({ return ( -
+
From 0af0c94dde9c4c16172112374f923afee5ada6c0 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 10:52:05 +0800 Subject: [PATCH 76/85] fix: preview not full --- .../components/explore/try-app/preview/flow-app-preview.tsx | 2 +- web/app/components/explore/try-app/preview/index.tsx | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/web/app/components/explore/try-app/preview/flow-app-preview.tsx b/web/app/components/explore/try-app/preview/flow-app-preview.tsx index c6cc4b33ad..a1f682124f 100644 --- a/web/app/components/explore/try-app/preview/flow-app-preview.tsx +++ b/web/app/components/explore/try-app/preview/flow-app-preview.tsx @@ -25,7 +25,7 @@ const FlowAppPreview: FC = ({ if (!data) return null return ( -
+
= ({ }) => { const isBasicApp = ['agent-chat', 'chat', 'completion'].includes(appDetail.mode) - return isBasicApp ? : + return
+ {isBasicApp ? : } +
} export default React.memo(Preview) From 4c1f9b949b4926c7cf204f09be57c60f17eca7ee Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 11:24:19 +0800 Subject: [PATCH 77/85] feat: alert info and lodash to lodash-es --- .../app/configuration/config-vision/index.tsx | 2 +- web/app/components/base/alert.tsx | 59 +++++++++++++++++++ .../chat/chat/chat-input-area/operation.tsx | 2 +- .../explore/try-app/app/text-generation.tsx | 25 ++------ web/app/components/explore/try-app/index.tsx | 2 +- web/i18n-config/check-i18n-sync.js | 50 ++++++++-------- web/i18n-config/generate-i18n-types.js | 26 ++++---- 7 files changed, 106 insertions(+), 60 deletions(-) create mode 100644 web/app/components/base/alert.tsx diff --git a/web/app/components/app/configuration/config-vision/index.tsx b/web/app/components/app/configuration/config-vision/index.tsx index 50af0f7e9d..2057976a83 100644 --- a/web/app/components/app/configuration/config-vision/index.tsx +++ b/web/app/components/app/configuration/config-vision/index.tsx @@ -15,7 +15,7 @@ import Switch from '@/app/components/base/switch' import { SupportUploadFileTypes } from '@/app/components/workflow/types' import OptionCard from '@/app/components/workflow/nodes/_base/components/option-card' import { Resolution } from '@/types/app' -import { noop } from 'lodash' +import { noop } from 'lodash-es' import cn from '@/utils/classnames' const ConfigVision: FC = () => { diff --git a/web/app/components/base/alert.tsx b/web/app/components/base/alert.tsx new file mode 100644 index 0000000000..1ea329e380 --- /dev/null +++ b/web/app/components/base/alert.tsx @@ -0,0 +1,59 @@ +import { + memo, +} from 'react' +import { + RiCloseLine, + RiInformation2Fill, +} from '@remixicon/react' +import { cva } from 'class-variance-authority' +import cn from '@/utils/classnames' + +type Props = { + type?: 'info' + message: string + onHide: () => void + className?: string +} +const bgVariants = cva( + '', + { + variants: { + type: { + info: 'from-components-badge-status-light-normal-halo to-background-gradient-mask-transparent', + }, + }, + }, +) +const Alert: React.FC = ({ + type = 'info', + message, + onHide, + className, +}) => { + return ( +
+
+
+
+
+ +
+
+
+ {message} +
+
+
+ +
+
+
+ ) +} + +export default memo(Alert) diff --git a/web/app/components/base/chat/chat/chat-input-area/operation.tsx b/web/app/components/base/chat/chat/chat-input-area/operation.tsx index b13d23f7fa..f080157345 100644 --- a/web/app/components/base/chat/chat/chat-input-area/operation.tsx +++ b/web/app/components/base/chat/chat/chat-input-area/operation.tsx @@ -13,7 +13,7 @@ import ActionButton from '@/app/components/base/action-button' import { FileUploaderInChatInput } from '@/app/components/base/file-uploader' import type { FileUpload } from '@/app/components/base/features/types' import cn from '@/utils/classnames' -import { noop } from 'lodash' +import { noop } from 'lodash-es' type OperationProps = { readonly?: boolean diff --git a/web/app/components/explore/try-app/app/text-generation.tsx b/web/app/components/explore/try-app/app/text-generation.tsx index 866b935df4..a0e8ffa660 100644 --- a/web/app/components/explore/try-app/app/text-generation.tsx +++ b/web/app/components/explore/try-app/app/text-generation.tsx @@ -15,11 +15,12 @@ import { userInputsFormToPromptVariables } from '@/utils/model-config' import type { VisionFile, VisionSettings } from '@/types/app' import { Resolution, TransferMethod } from '@/types/app' import { useBoolean } from 'ahooks' -import { noop } from 'lodash' +import { noop } from 'lodash-es' import type { Task } from '../../../share/text-generation/types' import Res from '@/app/components/share/text-generation/result' import { AppSourceType } from '@/service/share' import { TaskStatus } from '@/app/components/share/text-generation/types' +import Alert from '@/app/components/base/alert' type Props = { appId: string @@ -144,19 +145,13 @@ const TextGeneration: FC = ({
+ {renderRes()}
@@ -220,15 +215,7 @@ const TextGeneration: FC = ({
{/* Result */} -
+
{!isPC && (
= ({ {isLoading ? (
diff --git a/web/i18n-config/check-i18n-sync.js b/web/i18n-config/check-i18n-sync.js index e67c567f49..8935e1d58b 100644 --- a/web/i18n-config/check-i18n-sync.js +++ b/web/i18n-config/check-i18n-sync.js @@ -2,19 +2,19 @@ const fs = require('fs') const path = require('path') -const { camelCase } = require('lodash') +const { camelCase } = require('lodash-es') // Import the NAMESPACES array from i18next-config.ts function getNamespacesFromConfig() { const configPath = path.join(__dirname, 'i18next-config.ts') const configContent = fs.readFileSync(configPath, 'utf8') - + // Extract NAMESPACES array using regex const namespacesMatch = configContent.match(/const NAMESPACES = \[([\s\S]*?)\]/) if (!namespacesMatch) { throw new Error('Could not find NAMESPACES array in i18next-config.ts') } - + // Parse the namespaces const namespacesStr = namespacesMatch[1] const namespaces = namespacesStr @@ -22,25 +22,25 @@ function getNamespacesFromConfig() { .map(line => line.trim()) .filter(line => line.startsWith("'") || line.startsWith('"')) .map(line => line.slice(1, -1)) // Remove quotes - + return namespaces } function getNamespacesFromTypes() { const typesPath = path.join(__dirname, '../types/i18n.d.ts') - + if (!fs.existsSync(typesPath)) { return null } - + const typesContent = fs.readFileSync(typesPath, 'utf8') - + // Extract namespaces from Messages type const messagesMatch = typesContent.match(/export type Messages = \{([\s\S]*?)\}/) if (!messagesMatch) { return null } - + // Parse the properties const propertiesStr = messagesMatch[1] const properties = propertiesStr @@ -49,66 +49,66 @@ function getNamespacesFromTypes() { .filter(line => line.includes(':')) .map(line => line.split(':')[0].trim()) .filter(prop => prop.length > 0) - + return properties } function main() { try { console.log('🔍 Checking i18n types synchronization...') - + // Get namespaces from config const configNamespaces = getNamespacesFromConfig() console.log(`📦 Found ${configNamespaces.length} namespaces in config`) - + // Convert to camelCase for comparison const configCamelCase = configNamespaces.map(ns => camelCase(ns)).sort() - + // Get namespaces from type definitions const typeNamespaces = getNamespacesFromTypes() - + if (!typeNamespaces) { console.error('❌ Type definitions file not found or invalid') console.error(' Run: pnpm run gen:i18n-types') process.exit(1) } - + console.log(`🔧 Found ${typeNamespaces.length} namespaces in types`) - + const typeCamelCase = typeNamespaces.sort() - + // Compare arrays const configSet = new Set(configCamelCase) const typeSet = new Set(typeCamelCase) - + // Find missing in types const missingInTypes = configCamelCase.filter(ns => !typeSet.has(ns)) - + // Find extra in types const extraInTypes = typeCamelCase.filter(ns => !configSet.has(ns)) - + let hasErrors = false - + if (missingInTypes.length > 0) { hasErrors = true console.error('❌ Missing in type definitions:') missingInTypes.forEach(ns => console.error(` - ${ns}`)) } - + if (extraInTypes.length > 0) { hasErrors = true console.error('❌ Extra in type definitions:') extraInTypes.forEach(ns => console.error(` - ${ns}`)) } - + if (hasErrors) { console.error('\n💡 To fix synchronization issues:') console.error(' Run: pnpm run gen:i18n-types') process.exit(1) } - + console.log('✅ i18n types are synchronized') - + } catch (error) { console.error('❌ Error:', error.message) process.exit(1) @@ -117,4 +117,4 @@ function main() { if (require.main === module) { main() -} \ No newline at end of file +} diff --git a/web/i18n-config/generate-i18n-types.js b/web/i18n-config/generate-i18n-types.js index ba34446962..c1ca0b59be 100644 --- a/web/i18n-config/generate-i18n-types.js +++ b/web/i18n-config/generate-i18n-types.js @@ -2,19 +2,19 @@ const fs = require('fs') const path = require('path') -const { camelCase } = require('lodash') +const { camelCase } = require('lodash-es') // Import the NAMESPACES array from i18next-config.ts function getNamespacesFromConfig() { const configPath = path.join(__dirname, 'i18next-config.ts') const configContent = fs.readFileSync(configPath, 'utf8') - + // Extract NAMESPACES array using regex const namespacesMatch = configContent.match(/const NAMESPACES = \[([\s\S]*?)\]/) if (!namespacesMatch) { throw new Error('Could not find NAMESPACES array in i18next-config.ts') } - + // Parse the namespaces const namespacesStr = namespacesMatch[1] const namespaces = namespacesStr @@ -22,7 +22,7 @@ function getNamespacesFromConfig() { .map(line => line.trim()) .filter(line => line.startsWith("'") || line.startsWith('"')) .map(line => line.slice(1, -1)) // Remove quotes - + return namespaces } @@ -90,40 +90,40 @@ declare module 'i18next' { function main() { const args = process.argv.slice(2) const checkMode = args.includes('--check') - + try { console.log('📦 Generating i18n type definitions...') - + // Get namespaces from config const namespaces = getNamespacesFromConfig() console.log(`✅ Found ${namespaces.length} namespaces`) - + // Generate type definitions const typeDefinitions = generateTypeDefinitions(namespaces) - + const outputPath = path.join(__dirname, '../types/i18n.d.ts') - + if (checkMode) { // Check mode: compare with existing file if (!fs.existsSync(outputPath)) { console.error('❌ Type definitions file does not exist') process.exit(1) } - + const existingContent = fs.readFileSync(outputPath, 'utf8') if (existingContent.trim() !== typeDefinitions.trim()) { console.error('❌ Type definitions are out of sync') console.error(' Run: pnpm run gen:i18n-types') process.exit(1) } - + console.log('✅ Type definitions are in sync') } else { // Generate mode: write file fs.writeFileSync(outputPath, typeDefinitions) console.log(`✅ Generated type definitions: ${outputPath}`) } - + } catch (error) { console.error('❌ Error:', error.message) process.exit(1) @@ -132,4 +132,4 @@ function main() { if (require.main === module) { main() -} \ No newline at end of file +} From 9735f55ca40cfeeb92cc962fb60f94ad15b8f40e Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 14:00:24 +0800 Subject: [PATCH 78/85] feat: try app alert and i18n --- web/app/components/base/alert.tsx | 4 +-- .../explore/try-app/app/text-generation.tsx | 26 +++++++++++++------ web/i18n/en-US/explore.ts | 1 + web/i18n/ja-JP/explore.ts | 1 + web/i18n/zh-Hans/explore.ts | 1 + 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/web/app/components/base/alert.tsx b/web/app/components/base/alert.tsx index 1ea329e380..53cb842567 100644 --- a/web/app/components/base/alert.tsx +++ b/web/app/components/base/alert.tsx @@ -31,9 +31,9 @@ const Alert: React.FC = ({ className, }) => { return ( -
+
diff --git a/web/app/components/explore/try-app/app/text-generation.tsx b/web/app/components/explore/try-app/app/text-generation.tsx index a0e8ffa660..1cb778ba52 100644 --- a/web/app/components/explore/try-app/app/text-generation.tsx +++ b/web/app/components/explore/try-app/app/text-generation.tsx @@ -21,6 +21,7 @@ import Res from '@/app/components/share/text-generation/result' import { AppSourceType } from '@/service/share' import { TaskStatus } from '@/app/components/share/text-generation/types' import Alert from '@/app/components/base/alert' +import { useTranslation } from 'react-i18next' type Props = { appId: string @@ -35,6 +36,7 @@ const TextGeneration: FC = ({ isWorkflow, appData, }) => { + const { t } = useTranslation() const media = useBreakpoints() const isPC = media === MediaType.pc @@ -115,7 +117,13 @@ const TextGeneration: FC = ({ })() }, [appData, appParams]) - const handleCompleted = noop + const [isCompleted, setIsCompleted] = useState(false) + const handleCompleted = useCallback(() => { + setIsCompleted(true) + }, []) + const [isHideTryNotice, { + setTrue: hideTryNotice, + }] = useBoolean(false) const renderRes = (task?: Task) => ( = ({
- + {isCompleted && !isHideTryNotice && ( + + )} {renderRes()}
@@ -167,7 +177,7 @@ const TextGeneration: FC = ({ return (
= ({ {/* Left */}
{/* Header */} -
+
= ({
{/* form */}
diff --git a/web/i18n/en-US/explore.ts b/web/i18n/en-US/explore.ts index 649b744b89..b1891f6d3e 100644 --- a/web/i18n/en-US/explore.ts +++ b/web/i18n/en-US/explore.ts @@ -38,6 +38,7 @@ const translation = { createFromSampleApp: 'Create from this sample app', category: 'Category', requirements: 'Requirements', + tryInfo: 'This is a sample app. You can try up to 5 messages. To keep using it, click "Create form this sample app" and set it up!', }, appCustomize: { title: 'Create app from {{name}}', diff --git a/web/i18n/ja-JP/explore.ts b/web/i18n/ja-JP/explore.ts index d3f5bc421c..2639bfc1dd 100644 --- a/web/i18n/ja-JP/explore.ts +++ b/web/i18n/ja-JP/explore.ts @@ -39,6 +39,7 @@ const translation = { createFromSampleApp: 'テンプレートから作成', category: 'カテゴリー', requirements: '必要項目', + tryInfo: 'これはサンプルアプリです。最大5件のメッセージまでお試しいただけます。引き続き利用するには、「テンプレートから作成」 をクリックして設定を行ってください。', }, appCustomize: { title: '{{name}}からアプリを作成', diff --git a/web/i18n/zh-Hans/explore.ts b/web/i18n/zh-Hans/explore.ts index e8152e2067..2080033904 100644 --- a/web/i18n/zh-Hans/explore.ts +++ b/web/i18n/zh-Hans/explore.ts @@ -39,6 +39,7 @@ const translation = { createFromSampleApp: '从此模板创建应用', category: '分类', requirements: '必须配置项', + tryInfo: '这是一个示例应用,您可以试用最多 5 条消息。如需继续使用,请点击 “从此模板创建应用” 并完成配置!', }, appCustomize: { title: '从 {{name}} 创建应用程序', From 7bafb7f959d7d8f0cf5b678ce8905353122fc856 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 14:54:06 +0800 Subject: [PATCH 79/85] feat: chat info --- web/app/components/base/alert.tsx | 2 +- web/app/components/base/chat/chat/index.tsx | 4 ++- .../chat/embedded-chatbot/chat-wrapper.tsx | 1 + .../base/chat/embedded-chatbot/hooks.tsx | 6 ++-- .../components/explore/try-app/app/chat.tsx | 32 +++++++++++++++++-- .../components/explore/try-app/app/index.tsx | 2 +- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/web/app/components/base/alert.tsx b/web/app/components/base/alert.tsx index 53cb842567..43e0b1d42e 100644 --- a/web/app/components/base/alert.tsx +++ b/web/app/components/base/alert.tsx @@ -31,7 +31,7 @@ const Alert: React.FC = ({ className, }) => { return ( -
+
diff --git a/web/app/components/base/chat/chat/index.tsx b/web/app/components/base/chat/chat/index.tsx index 2e004c1145..df94d61d3d 100644 --- a/web/app/components/base/chat/chat/index.tsx +++ b/web/app/components/base/chat/chat/index.tsx @@ -36,6 +36,7 @@ import { useStore as useAppStore } from '@/app/components/app/store' import type { AppData } from '@/models/share' export type ChatProps = { + isTryApp?: boolean readonly?: boolean appData?: AppData chatList: ChatItem[] @@ -78,6 +79,7 @@ export type ChatProps = { } const Chat: FC = ({ + isTryApp, readonly = false, appData, config, @@ -241,7 +243,7 @@ const Chat: FC = ({
{chatNode}
{ return ( () const [conversationId, setConversationId] = useState() useEffect(() => { - if(isTryApp) return + if (isTryApp) return getProcessedSystemVariablesFromUrlParams().then(({ user_id, conversation_id }) => { setUserId(user_id) setConversationId(conversation_id) @@ -86,7 +86,7 @@ export const useEmbeddedChatbot = (appSourceType: AppSourceType, tryAppId?: stri }, []) useEffect(() => { - if(isTryApp) return + if (isTryApp) return const setLanguageFromParams = async () => { // Check URL parameters for language override const urlParams = new URLSearchParams(window.location.search) @@ -251,7 +251,7 @@ export const useEmbeddedChatbot = (appSourceType: AppSourceType, tryAppId?: stri useEffect(() => { // init inputs from url params (async () => { - if(isTryApp) + if (isTryApp) return const inputs = await getProcessedInputsFromUrlParams() const userVariables = await getProcessedUserVariablesFromUrlParams() diff --git a/web/app/components/explore/try-app/app/chat.tsx b/web/app/components/explore/try-app/app/chat.tsx index 2a12d9d8e4..9d5cead2dc 100644 --- a/web/app/components/explore/try-app/app/chat.tsx +++ b/web/app/components/explore/try-app/app/chat.tsx @@ -12,20 +12,31 @@ import { } from '@/app/components/base/chat/embedded-chatbot/hooks' import cn from '@/utils/classnames' import { AppSourceType } from '@/service/share' +import Alert from '@/app/components/base/alert' +import { useTranslation } from 'react-i18next' +import { useBoolean } from 'ahooks' +import type { TryAppInfo } from '@/service/try-app' +import AppIcon from '@/app/components/base/app-icon' type Props = { appId: string + appDetail: TryAppInfo className: string } const TryApp: FC = ({ appId, + appDetail, className, }) => { + const { t } = useTranslation() const media = useBreakpoints() const isMobile = media === MediaType.mobile const themeBuilder = useThemeContext() const chatData = useEmbeddedChatbot(AppSourceType.tryApp, appId) + const [isHideTryNotice, { + setTrue: hideTryNotice, + }] = useBoolean(false) return ( = ({ isMobile, themeBuilder, } as any}> -
- +
+
+
+ +
{appDetail.name}
+
+
+
+ {!isHideTryNotice && ( + + )} + +
) diff --git a/web/app/components/explore/try-app/app/index.tsx b/web/app/components/explore/try-app/app/index.tsx index 5569715c64..db8c5cd764 100644 --- a/web/app/components/explore/try-app/app/index.tsx +++ b/web/app/components/explore/try-app/app/index.tsx @@ -24,7 +24,7 @@ const TryApp: FC = ({ return (
{isChat && ( - + )} {isCompletion && ( Date: Fri, 24 Oct 2025 15:30:53 +0800 Subject: [PATCH 80/85] fix: chat setup ui --- web/app/components/base/chat/chat/index.tsx | 4 ++-- .../base/chat/embedded-chatbot/inputs-form/index.tsx | 6 +++++- web/app/components/explore/try-app/app/chat.tsx | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/web/app/components/base/chat/chat/index.tsx b/web/app/components/base/chat/chat/index.tsx index df94d61d3d..27df7e558a 100644 --- a/web/app/components/base/chat/chat/index.tsx +++ b/web/app/components/base/chat/chat/index.tsx @@ -240,10 +240,10 @@ const Chat: FC = ({ disableFeedback={disableFeedback} onFeedback={onFeedback} > -
+
{chatNode}
{ const { t } = useTranslation() const { + appSourceType, isMobile, currentConversationId, themeBuilder, @@ -25,15 +27,17 @@ const InputsFormNode = ({ allInputsHidden, inputsForms, } = useEmbeddedChatbotContext() + const isTryApp = appSourceType === AppSourceType.tryApp if (allInputsHidden || inputsForms.length === 0) return null return ( -
+
= ({
{appDetail.name}
-
+
{!isHideTryNotice && ( )} From 0957ece92f6a5b480aac09be687b7ade6c1ceb9e Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 15:57:33 +0800 Subject: [PATCH 81/85] fix: the try app always use the curent conversation --- .../components/base/chat/embedded-chatbot/chat-wrapper.tsx | 5 +++-- web/app/components/base/chat/embedded-chatbot/hooks.tsx | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx index 0f2c4627e2..be0e36156e 100644 --- a/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx +++ b/web/app/components/base/chat/embedded-chatbot/chat-wrapper.tsx @@ -167,7 +167,8 @@ const ChatWrapper = () => { return chatList.filter(item => !item.isOpeningStatement) }, [chatList, currentConversationId]) - const [collapsed, setCollapsed] = useState(!!currentConversationId) + const isTryApp = appSourceType === AppSourceType.tryApp + const [collapsed, setCollapsed] = useState(!!currentConversationId && !isTryApp) // try app always use the new chat const chatNode = useMemo(() => { if (allInputsHidden || !inputsForms.length) @@ -240,7 +241,7 @@ const ChatWrapper = () => { return ( conversationIdInfo?.[appId || '']?.[userId || 'DEFAULT'] || conversationId || '', - [appId, conversationIdInfo, userId, conversationId]) + const currentConversationId = useMemo(() => isTryApp ? '' : conversationIdInfo?.[appId || '']?.[userId || 'DEFAULT'] || conversationId || '', + [isTryApp, appId, conversationIdInfo, userId, conversationId]) const handleConversationIdInfoChange = useCallback((changeConversationId: string) => { if (appId) { let prevValue = conversationIdInfo?.[appId || ''] From a7f2849e74eff1fb16b65d5b3915f81e6d923675 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 16:22:01 +0800 Subject: [PATCH 82/85] fix: try chatbot ui --- web/app/components/base/chat/chat/index.tsx | 4 ++-- .../base/chat/embedded-chatbot/inputs-form/index.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/app/components/base/chat/chat/index.tsx b/web/app/components/base/chat/chat/index.tsx index 27df7e558a..4afc434ee9 100644 --- a/web/app/components/base/chat/chat/index.tsx +++ b/web/app/components/base/chat/chat/index.tsx @@ -248,7 +248,7 @@ const Chat: FC = ({ {chatNode}
{ chatList.map((item, index) => { @@ -292,7 +292,7 @@ const Chat: FC = ({ >
{ !noStopResponding && isResponding && ( diff --git a/web/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx b/web/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx index bed37ec0cf..b13e066414 100644 --- a/web/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx +++ b/web/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx @@ -33,7 +33,7 @@ const InputsFormNode = ({ return null return ( -
+
Date: Fri, 24 Oct 2025 17:29:42 +0800 Subject: [PATCH 83/85] feat: basic app requirements --- .../explore/try-app/app-info/index.tsx | 28 ++++++----- .../try-app/app-info/use-get-requirements.ts | 50 +++++++++++++++++++ web/app/components/explore/try-app/index.tsx | 8 ++- 3 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 web/app/components/explore/try-app/app-info/use-get-requirements.ts diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx index 86113eff53..0240081cfc 100644 --- a/web/app/components/explore/try-app/app-info/index.tsx +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -8,8 +8,10 @@ import type { TryAppInfo } from '@/service/try-app' import cn from '@/utils/classnames' import Button from '@/app/components/base/button' import { RiAddLine } from '@remixicon/react' +import useGetRequirements from './use-get-requirements' type Props = { + appId: string appDetail: TryAppInfo category?: string className?: string @@ -19,6 +21,7 @@ type Props = { const headerClassName = 'system-sm-semibold-uppercase text-text-secondary mb-3' const AppInfo: FC = ({ + appId, className, category, appDetail, @@ -26,6 +29,7 @@ const AppInfo: FC = ({ }) => { const { t } = useTranslation() const mode = appDetail?.mode + const { requirements } = useGetRequirements({ appDetail, appId }) return (
{/* name and icon */} @@ -68,20 +72,20 @@ const AppInfo: FC = ({
{category}
)} - -
-
{t('explore.tryApp.requirements')}
-
-
-
-
LLM Vision supported
-
-
-
-
xxx
+ {requirements.length > 0 && ( +
+
{t('explore.tryApp.requirements')}
+
+ {requirements.map(item => ( +
+
+
{item.name}
+
+ ))}
-
+ )} +
) } diff --git a/web/app/components/explore/try-app/app-info/use-get-requirements.ts b/web/app/components/explore/try-app/app-info/use-get-requirements.ts new file mode 100644 index 0000000000..0b118697a1 --- /dev/null +++ b/web/app/components/explore/try-app/app-info/use-get-requirements.ts @@ -0,0 +1,50 @@ +import { MARKETPLACE_API_PREFIX } from '@/config' +import type { TryAppInfo } from '@/service/try-app' +import type { AgentTool } from '@/types/app' +import { uniqBy } from 'lodash-es' + +type Params = { + appDetail: TryAppInfo + appId: string +} + +type RequirementItem = { + name: string + iconUrl: string +} +const getIconUrl = (provider: string, tool: string) => { + return `${MARKETPLACE_API_PREFIX}/plugins/${provider}/${tool}/icon` +} + +const useGetRequirements = ({ appDetail, appId }: Params) => { + const isBasic = ['chat', 'completion', 'agent-chat'].includes(appDetail.mode) + const isAgent = appDetail.mode === 'agent-chat' + + const requirements: RequirementItem[] = [] + if(isBasic) { + const modelProviderAndName = appDetail.model_config.model.provider.split('/') + const name = appDetail.model_config.model.provider.split('/').pop() || '' + requirements.push({ + name, + iconUrl: getIconUrl(modelProviderAndName[0], modelProviderAndName[1]), + }) + } + if(isAgent) { + requirements.push(...appDetail.model_config.agent_mode.tools.filter(data => (data as AgentTool).enabled).map((data) => { + const tool = data as AgentTool + const modelProviderAndName = tool.provider_id.split('/') + return { + name: tool.tool_label, + iconUrl: getIconUrl(modelProviderAndName[0], modelProviderAndName[1]), + } + })) + } + + const uniqueRequirements = uniqBy(requirements, 'name') + + return { + requirements: uniqueRequirements, + } +} + +export default useGetRequirements diff --git a/web/app/components/explore/try-app/index.tsx b/web/app/components/explore/try-app/index.tsx index 5390bd97d8..47dd77932b 100644 --- a/web/app/components/explore/try-app/index.tsx +++ b/web/app/components/explore/try-app/index.tsx @@ -54,7 +54,13 @@ const TryApp: FC = ({ {/* Main content */}
{type === TypeEnum.TRY ? : } - +
)} From c264d9152f4fa52dd6dbfd21266a40a3f7df9130 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 17:42:38 +0800 Subject: [PATCH 84/85] chore: add advanced models --- .../explore/try-app/app-info/index.tsx | 2 +- .../try-app/app-info/use-get-requirements.ts | 17 +++++++++++++++++ web/service/use-try-app.ts | 3 ++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/web/app/components/explore/try-app/app-info/index.tsx b/web/app/components/explore/try-app/app-info/index.tsx index 0240081cfc..fa662b1920 100644 --- a/web/app/components/explore/try-app/app-info/index.tsx +++ b/web/app/components/explore/try-app/app-info/index.tsx @@ -77,7 +77,7 @@ const AppInfo: FC = ({
{t('explore.tryApp.requirements')}
{requirements.map(item => ( -
+
{item.name}
diff --git a/web/app/components/explore/try-app/app-info/use-get-requirements.ts b/web/app/components/explore/try-app/app-info/use-get-requirements.ts index 0b118697a1..85998b673f 100644 --- a/web/app/components/explore/try-app/app-info/use-get-requirements.ts +++ b/web/app/components/explore/try-app/app-info/use-get-requirements.ts @@ -1,5 +1,8 @@ +import type { LLMNodeType } from '@/app/components/workflow/nodes/llm/types' +import { BlockEnum } from '@/app/components/workflow/types' import { MARKETPLACE_API_PREFIX } from '@/config' import type { TryAppInfo } from '@/service/try-app' +import { useGetTryAppFlowPreview } from '@/service/use-try-app' import type { AgentTool } from '@/types/app' import { uniqBy } from 'lodash-es' @@ -19,6 +22,8 @@ const getIconUrl = (provider: string, tool: string) => { const useGetRequirements = ({ appDetail, appId }: Params) => { const isBasic = ['chat', 'completion', 'agent-chat'].includes(appDetail.mode) const isAgent = appDetail.mode === 'agent-chat' + const isAdvanced = !isBasic + const { data: flowData } = useGetTryAppFlowPreview(appId, isBasic) const requirements: RequirementItem[] = [] if(isBasic) { @@ -39,6 +44,18 @@ const useGetRequirements = ({ appDetail, appId }: Params) => { } })) } + if(isAdvanced && flowData && flowData?.graph?.nodes?.length > 0) { + const nodes = flowData.graph.nodes + const llmNodes = nodes.filter(node => node.data.type === BlockEnum.LLM) + requirements.push(...llmNodes.map((node) => { + const data = node.data as LLMNodeType + const modelProviderAndName = data.model.provider.split('/') + return { + name: data.model.name, + iconUrl: getIconUrl(modelProviderAndName[0], modelProviderAndName[1]), + } + })) + } const uniqueRequirements = uniqBy(requirements, 'name') diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index e69ee8457f..35fdad6526 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -33,9 +33,10 @@ export const useGetTryAppDataSets = (appId: string, ids: string[]) => { }) } -export const useGetTryAppFlowPreview = (appId: string) => { +export const useGetTryAppFlowPreview = (appId: string, disabled?: boolean) => { return useQuery({ queryKey: [NAME_SPACE, 'preview', appId], + enabled: !disabled, queryFn: () => { return fetchTryAppFlowPreview(appId) }, From 0a7b59f50058e91da63fbbcc19c586a6bf4be0c1 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 24 Oct 2025 17:49:29 +0800 Subject: [PATCH 85/85] feat: add tool requirements to flow --- .../explore/try-app/app-info/use-get-requirements.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/web/app/components/explore/try-app/app-info/use-get-requirements.ts b/web/app/components/explore/try-app/app-info/use-get-requirements.ts index 85998b673f..e9ef0c22f5 100644 --- a/web/app/components/explore/try-app/app-info/use-get-requirements.ts +++ b/web/app/components/explore/try-app/app-info/use-get-requirements.ts @@ -1,4 +1,5 @@ import type { LLMNodeType } from '@/app/components/workflow/nodes/llm/types' +import type { ToolNodeType } from '@/app/components/workflow/nodes/tool/types' import { BlockEnum } from '@/app/components/workflow/types' import { MARKETPLACE_API_PREFIX } from '@/config' import type { TryAppInfo } from '@/service/try-app' @@ -55,6 +56,16 @@ const useGetRequirements = ({ appDetail, appId }: Params) => { iconUrl: getIconUrl(modelProviderAndName[0], modelProviderAndName[1]), } })) + + const toolNodes = nodes.filter(node => node.data.type === BlockEnum.Tool) + requirements.push(...toolNodes.map((node) => { + const data = node.data as ToolNodeType + const toolProviderAndName = data.provider_id.split('/') + return { + name: data.tool_label, + iconUrl: getIconUrl(toolProviderAndName[0], toolProviderAndName[1]), + } + })) } const uniqueRequirements = uniqBy(requirements, 'name')