+
{props.children}
diff --git a/src/components/_shared/ShowOnlyOnClient.tsx b/src/components/_shared/ShowOnlyOnClient.tsx new file mode 100644 index 00000000..a1d3d6fe --- /dev/null +++ b/src/components/_shared/ShowOnlyOnClient.tsx @@ -0,0 +1,12 @@ +import type { JSX } from 'solid-js' +import { createSignal, onMount, Show } from 'solid-js' + +const [isClient, setIsClient] = createSignal(false) + +// show children only on client side +// usage of isServer causing hydration errors +export const ShowOnlyOnClient = (props: { children: JSX.Element }) => { + onMount(() => setIsClient(true)) + + return {props.children} +} diff --git a/src/graphql/query/articles-load-by.ts b/src/graphql/query/articles-load-by.ts index a2d0891a..a006f1a7 100644 --- a/src/graphql/query/articles-load-by.ts +++ b/src/graphql/query/articles-load-by.ts @@ -1,8 +1,8 @@ import { gql } from '@urql/core' export default gql` - query LoadShoutsByQuery($by: ShoutsBy, $limit: Int!, $offset: Int!) { - loadShoutsBy(by: $by, limit: $limit, offset: $offset) { + query LoadShoutsQuery($options: LoadShoutsOptions) { + loadShouts(options: $options) { _id: slug title subtitle diff --git a/src/graphql/query/articles-load.ts b/src/graphql/query/articles-load.ts new file mode 100644 index 00000000..276ef97e --- /dev/null +++ b/src/graphql/query/articles-load.ts @@ -0,0 +1,42 @@ +import { gql } from '@urql/core' + +export default gql` + query LoadShoutQuery($slug: String!) { + loadShout(slug: $slug) { + _id: slug + title + subtitle + slug + layout + cover + body + # community + mainTopic + topics { + title + body + slug + stat { + _id: shouts + shouts + authors + followers + } + } + authors { + _id: slug + name + slug + userpic + } + createdAt + publishedAt + stat { + _id: viewed + viewed + reacted + rating + } + } + } +` diff --git a/src/graphql/query/author-by-slug.ts b/src/graphql/query/author-by-slug.ts index bf35df61..d25ae0ab 100644 --- a/src/graphql/query/author-by-slug.ts +++ b/src/graphql/query/author-by-slug.ts @@ -12,11 +12,11 @@ export default gql` links createdAt lastSeen - ratings { - _id: rater - rater - value - } + # ratings { + # _id: rater + # rater + # value + # } } } ` diff --git a/src/graphql/query/authors-load-by.ts b/src/graphql/query/authors-load-by.ts index 6463c488..a76bf102 100644 --- a/src/graphql/query/authors-load-by.ts +++ b/src/graphql/query/authors-load-by.ts @@ -8,15 +8,15 @@ export default gql` name bio userpic - communities + # communities links - createdAt + # createdAt lastSeen - ratings { - _id: rater - rater - value - } + # ratings { + # _id: rater + # rater + # value + # } } } ` diff --git a/src/graphql/query/reactions-load-by.ts b/src/graphql/query/reactions-load-by.ts index 70990f49..914dc98d 100644 --- a/src/graphql/query/reactions-load-by.ts +++ b/src/graphql/query/reactions-load-by.ts @@ -1,7 +1,7 @@ import { gql } from '@urql/core' export default gql` - query LoadReactionsByQuery($by: ReactionsBy, $limit: Int!, $offset: Int!) { + query LoadReactionsByQuery($by: ReactionBy!, $limit: Int!, $offset: Int!) { loadReactionsBy(by: $by, limit: $limit, offset: $offset) { id createdBy { diff --git a/src/graphql/types.gen.ts b/src/graphql/types.gen.ts index a19975b9..a3bc45d2 100644 --- a/src/graphql/types.gen.ts +++ b/src/graphql/types.gen.ts @@ -80,6 +80,14 @@ export type ChatMember = { userpic?: Maybe } +export type ChatUser = { + id: Scalars['Int'] + lastSeen?: Maybe + name: Scalars['String'] + slug: Scalars['String'] + userpic?: Maybe +} + export type Collab = { authors: Array> body?: Maybe @@ -116,6 +124,25 @@ export enum FollowingEntity { Topic = 'TOPIC' } +export type LoadShoutsFilters = { + author?: InputMaybe + body?: InputMaybe + days?: InputMaybe + layout?: InputMaybe + reacted?: InputMaybe + title?: InputMaybe + topic?: InputMaybe + visibility?: InputMaybe +} + +export type LoadShoutsOptions = { + filters?: InputMaybe + limit: Scalars['Int'] + offset?: InputMaybe + order_by?: InputMaybe + order_by_desc?: InputMaybe +} + export type Message = { author: Scalars['String'] body: Scalars['String'] @@ -183,7 +210,7 @@ export type MutationCreateChatArgs = { export type MutationCreateMessageArgs = { body: Scalars['String'] - chatId: Scalars['String'] + chat: Scalars['String'] replyTo?: InputMaybe } @@ -317,15 +344,17 @@ export type ProfileInput = { export type Query = { authorsAll: Array> - getAuthor: User + chatUsersAll: Array> + getAuthor?: Maybe getCollabs: Array> - getTopic: Topic + getTopic?: Maybe isEmailUsed: Scalars['Boolean'] loadAuthorsBy: Array> loadChats: Result loadMessagesBy: Result loadReactionsBy: Array> - loadShoutsBy: Array> + loadShout?: Maybe + loadShouts: Array> markdownBody: Scalars['String'] searchUsers: Result signIn: AuthResult @@ -352,8 +381,8 @@ export type QueryIsEmailUsedArgs = { } export type QueryLoadAuthorsByArgs = { - limit?: InputMaybe by?: InputMaybe + limit?: InputMaybe offset?: InputMaybe } @@ -363,21 +392,23 @@ export type QueryLoadChatsArgs = { } export type QueryLoadMessagesByArgs = { - limit?: InputMaybe by: MessagesBy + limit?: InputMaybe offset?: InputMaybe } export type QueryLoadReactionsByArgs = { - offset?: InputMaybe by: ReactionBy limit?: InputMaybe + offset?: InputMaybe } -export type QueryLoadShoutsByArgs = { - limit?: InputMaybe - by?: InputMaybe - offset?: InputMaybe +export type QueryLoadShoutArgs = { + slug: Scalars['String'] +} + +export type QueryLoadShoutsArgs = { + options?: InputMaybe } export type QueryMarkdownBodyArgs = { @@ -563,12 +594,12 @@ export type ShoutInput = { visibleForUsers?: InputMaybe>> } -export type ShoutsBy = { +export type ShoutsFilterBy = { author?: InputMaybe + authors?: InputMaybe>> body?: InputMaybe days?: InputMaybe layout?: InputMaybe - order?: InputMaybe slug?: InputMaybe stat?: InputMaybe title?: InputMaybe diff --git a/src/locales/ru.json b/src/locales/ru.json index 568e555b..b71cdec3 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -4,6 +4,7 @@ "All": "Все", "All posts": "Все публикации", "All topics": "Все темы", + "All authors": "Все авторы", "Authors": "Авторы", "Back to mainpage": "Вернуться на главную", "Become an author": "Стать автором", @@ -175,5 +176,6 @@ "Video": "Видео", "Literature": "Литература", "We can't find you, check email or": "Не можем вас найти, проверьте адрес электронной почты или", - "register": "зарегистрируйтесь" + "register": "зарегистрируйтесь", + "Enter text": "Введите текст" } diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index 0e0e13c0..1fd64acd 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -9,7 +9,7 @@ if (slug.endsWith('.map')) { return Astro.redirect('/404') } -const article = await apiClient.loadShoutsBy({ by: { slug }, limit: 1}) +const article = await apiClient.getShout(slug) if (!article) { return Astro.redirect('/404') } @@ -21,5 +21,5 @@ Astro.response.headers.set('Cache-Control', 's-maxage=1, stale-while-revalidate' --- - + diff --git a/src/pages/author/[slug]/index.astro b/src/pages/author/[slug]/index.astro index 8340e51d..97153431 100644 --- a/src/pages/author/[slug]/index.astro +++ b/src/pages/author/[slug]/index.astro @@ -6,8 +6,8 @@ import { initRouter } from '../../../stores/router' import { PRERENDERED_ARTICLES_COUNT } from '../../../components/Views/Author' const slug = Astro.params.slug.toString() -const shouts = await apiClient.loadShoutsBy({ by: { authors: [slug] } , limit: PRERENDERED_ARTICLES_COUNT }) -const author = await apiClient.loadAuthorsBy({ by: { slug } }) +const shouts = await apiClient.getShouts({ filters: { author: slug }, limit: PRERENDERED_ARTICLES_COUNT }) +const author = await apiClient.getAuthorsBy({ by: { slug } }) const { pathname, search } = Astro.url initRouter(pathname, search) diff --git a/src/pages/expo/[...layout].astro b/src/pages/expo/[...layout].astro index 858bbf01..c6f5201d 100644 --- a/src/pages/expo/[...layout].astro +++ b/src/pages/expo/[...layout].astro @@ -4,13 +4,12 @@ import Prerendered from '../../main.astro' import { apiClient } from '../../utils/apiClient' import { initRouter } from '../../stores/router' import type { LayoutType } from '../../stores/zine/layouts' -import { Layout } from '../../components/EditorExample/components/Layout' const layout = (Astro.params.layout?.toString() || 'article') as LayoutType if (!layout || layout.endsWith('.map')) { return Astro.redirect('/404') } -const shouts = await apiClient.loadShoutsBy({ by: { layout } }) +const shouts = await apiClient.getShouts({ filters: { layout }, limit: 50 }) const { pathname, search } = Astro.url initRouter(pathname, search) --- diff --git a/src/pages/inbox.astro b/src/pages/inbox.astro index e613673f..41af9430 100644 --- a/src/pages/inbox.astro +++ b/src/pages/inbox.astro @@ -1,7 +1,6 @@ --- import Prerendered from '../main.astro' import { Root } from '../components/Root' -import { apiClient } from '../utils/apiClient' import { initRouter } from '../stores/router' const { pathname, search } = Astro.url diff --git a/src/pages/index.astro b/src/pages/index.astro index 2bf6b0bd..929af43a 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -6,8 +6,8 @@ import { initRouter } from '../stores/router' import { PRERENDERED_ARTICLES_COUNT } from '../components/Views/Home' const randomTopics = await apiClient.getRandomTopics({ amount: 12 }) -const articles = await apiClient.loadShoutsBy( - { by: { visibility: "public" }, limit: PRERENDERED_ARTICLES_COUNT, offset: 0 }) +const articles = await apiClient.getShouts( + { filters: { visibility: "public" }, limit: PRERENDERED_ARTICLES_COUNT }) const { pathname, search } = Astro.url initRouter(pathname, search) diff --git a/src/pages/search.astro b/src/pages/search.astro index 21dd5fad..dd027bc4 100644 --- a/src/pages/search.astro +++ b/src/pages/search.astro @@ -6,7 +6,7 @@ import { initRouter } from '../stores/router' const params: URLSearchParams = Astro.url.searchParams const q = params.get('q') -const searchResults = await apiClient.loadShoutsBy({ by: { title: q, body: q }, limit: 50 }) +const searchResults = await apiClient.getShouts({ filters: { title: q, body: q }, limit: 50 }) const { pathname, search } = Astro.url initRouter(pathname, search) diff --git a/src/pages/topic/[slug].astro b/src/pages/topic/[slug].astro index 4b43c5c0..3fa5c183 100644 --- a/src/pages/topic/[slug].astro +++ b/src/pages/topic/[slug].astro @@ -5,7 +5,7 @@ import { apiClient } from '../../utils/apiClient' import { PRERENDERED_ARTICLES_COUNT } from '../../components/Views/Topic' const slug = Astro.params.slug?.toString() || '' -const shouts = await apiClient.loadShoutsBy({ by: { topics: [slug] }, limit: PRERENDERED_ARTICLES_COUNT }) +const shouts = await apiClient.getShouts({ filters: { topic: slug }, limit: PRERENDERED_ARTICLES_COUNT }) const topic = await apiClient.getTopic({ slug }) import { initRouter } from '../../stores/router' diff --git a/src/stores/router.ts b/src/stores/router.ts index 01fb8a37..67358486 100644 --- a/src/stores/router.ts +++ b/src/stores/router.ts @@ -63,7 +63,7 @@ const routerStore = createRouter( export const router = routerStore -export const handleClientRouteLinkClick = (event) => { +const handleClientRouteLinkClick = (event) => { const link = event.target.closest('a') if ( link && @@ -96,6 +96,10 @@ export const initRouter = (pathname: string, search: string) => { routerStore.open(pathname) const params = Object.fromEntries(new URLSearchParams(search)) searchParamsStore.open(params) + + if (!isServer) { + document.addEventListener('click', handleClientRouteLinkClick) + } } if (!isServer) { @@ -125,6 +129,7 @@ export const useRouter = = Record< return { page, searchParams, - changeSearchParam + changeSearchParam, + handleClientRouteLinkClick } } diff --git a/src/stores/zine/articles.ts b/src/stores/zine/articles.ts index 9638d803..54fc1a28 100644 --- a/src/stores/zine/articles.ts +++ b/src/stores/zine/articles.ts @@ -1,4 +1,4 @@ -import type { Author, Shout, ShoutInput, ShoutsBy, Topic } from '../../graphql/types.gen' +import type { Author, Shout, ShoutInput, Topic, LoadShoutsOptions } from '../../graphql/types.gen' import { apiClient } from '../../utils/apiClient' import { addAuthorsByTopic } from './authors' import { addTopicsByAuthor } from './topics' @@ -123,22 +123,18 @@ const addSortedArticles = (articles: Shout[]) => { setSortedArticles((prevSortedArticles) => [...prevSortedArticles, ...articles]) } -export const loadShoutsBy = async ({ - by, - limit, - offset = 0 -}: { - by: ShoutsBy - limit: number - offset?: number -}): Promise<{ hasMore: boolean }> => { - const newArticles = await apiClient.loadShoutsBy({ - by, - limit: limit + 1, - offset +export const loadShout = async (slug: string): Promise => { + const newArticle = await apiClient.getShout(slug) + addArticles([newArticle]) +} + +export const loadShouts = async (options: LoadShoutsOptions): Promise<{ hasMore: boolean }> => { + const newArticles = await apiClient.getShouts({ + ...options, + limit: options.limit + 1 }) - const hasMore = newArticles.length === limit + 1 + const hasMore = newArticles.length === options.limit + 1 if (hasMore) { newArticles.splice(-1) @@ -176,7 +172,6 @@ export const useArticlesStore = (initialState: InitialState = {}) => { return { articleEntities, sortedArticles, - loadShoutsBy, articlesByAuthor, articlesByLayout, articlesByTopic, diff --git a/src/stores/zine/authors.ts b/src/stores/zine/authors.ts index 527ae5e5..49d8b53c 100644 --- a/src/stores/zine/authors.ts +++ b/src/stores/zine/authors.ts @@ -38,7 +38,7 @@ const sortedAuthors = createLazyMemo(() => { }) const addAuthors = (authors: Author[]) => { - const newAuthorEntities = authors.reduce((acc, author) => { + const newAuthorEntities = authors.filter(Boolean).reduce((acc, author) => { acc[author.slug] = author return acc }, {} as Record) diff --git a/src/stores/zine/layouts.ts b/src/stores/zine/layouts.ts index 9ff3d4a0..b96ea96c 100644 --- a/src/stores/zine/layouts.ts +++ b/src/stores/zine/layouts.ts @@ -1,6 +1,5 @@ -import type { Shout, ShoutsBy } from '../../graphql/types.gen' +import type { Shout, LoadShoutsOptions } from '../../graphql/types.gen' import { apiClient } from '../../utils/apiClient' -import { useArticlesStore } from './articles' import { createSignal } from 'solid-js' export type LayoutType = 'article' | 'audio' | 'video' | 'image' | 'literature' @@ -22,27 +21,18 @@ export const resetSortedLayoutShouts = () => { setSortedLayoutShouts(new Map()) } -export const loadLayoutShoutsBy = async ({ - by, - limit, - offset -}: { - by: ShoutsBy - limit?: number - offset?: number -}): Promise<{ hasMore: boolean }> => { - const newLayoutShouts = await apiClient.loadShoutsBy({ - by, - limit: limit + 1, - offset +export const loadLayoutShoutsBy = async (options: LoadShoutsOptions): Promise<{ hasMore: boolean }> => { + const newLayoutShouts = await apiClient.getShouts({ + ...options, + limit: options.limit + 1 }) - const hasMore = newLayoutShouts.length === limit + 1 + const hasMore = newLayoutShouts.length === options.limit + 1 if (hasMore) { newLayoutShouts.splice(-1) } - addLayoutShouts(by.layout as LayoutType, newLayoutShouts) + addLayoutShouts(options.filters.layout as LayoutType, newLayoutShouts) return { hasMore } } diff --git a/src/stores/zine/reactions.ts b/src/stores/zine/reactions.ts index d46db96a..784136fa 100644 --- a/src/stores/zine/reactions.ts +++ b/src/stores/zine/reactions.ts @@ -16,7 +16,7 @@ export const loadReactionsBy = async ({ limit?: number offset?: number }): Promise<{ hasMore: boolean }> => { - const data = await apiClient.loadReactionsBy({ by, limit: limit + 1, offset }) + const data = await apiClient.getReactionsBy({ by, limit: limit + 1, offset }) const hasMore = data.length === limit + 1 if (hasMore) data.splice(-1) // TODO: const [data, provider] = roomConnect(articleSlug, username, "reactions") diff --git a/src/stores/zine/topics.ts b/src/stores/zine/topics.ts index 12e3abf3..beaee83e 100644 --- a/src/stores/zine/topics.ts +++ b/src/stores/zine/topics.ts @@ -53,7 +53,7 @@ const topTopics = createMemo(() => { }) const addTopics = (...args: Topic[][]) => { - const allTopics = args.flatMap((topics) => topics || []) + const allTopics = args.flatMap((topics) => (topics || []).filter(Boolean)) const newTopicEntities = allTopics.reduce((acc, topic) => { acc[topic.slug] = topic diff --git a/src/styles/AllTopics.module.scss b/src/styles/AllTopics.module.scss index 4129e8f2..da4a4bb2 100644 --- a/src/styles/AllTopics.module.scss +++ b/src/styles/AllTopics.module.scss @@ -27,6 +27,11 @@ .container { width: auto; + + .search-input { + display: inline-block; + width: 100px !important; + } } } @@ -39,7 +44,7 @@ text-align: center; .loadMoreButton { - padding: 0.6em 5em; + padding: 0.6em 3em; width: 100%; @include media-breakpoint-up(sm) { diff --git a/src/styles/_imports.scss b/src/styles/_imports.scss index 3224dcdf..f44faa83 100644 --- a/src/styles/_imports.scss +++ b/src/styles/_imports.scss @@ -2,6 +2,7 @@ @import 'globals'; @import 'bootstrap/scss/functions'; @import 'bootstrap/scss/variables'; +@import 'bootstrap/scss/maps'; @import 'bootstrap/scss/vendor/rfs'; @import 'bootstrap/scss/mixins/breakpoints'; @import 'bootstrap/scss/mixins/grid'; diff --git a/src/styles/app.scss b/src/styles/app.scss index fa894ebc..79ba81cb 100644 --- a/src/styles/app.scss +++ b/src/styles/app.scss @@ -232,7 +232,6 @@ button { font-weight: 400; height: auto; - margin-top: 0.6rem; padding: 0.6rem 1.2rem 0.6rem 1rem; } @@ -641,7 +640,7 @@ astro-island { .main-content { flex: 1 100%; min-height: 300px; - padding-top: 100px; + padding-top: 120px; position: relative; } diff --git a/src/utils/apiClient.ts b/src/utils/apiClient.ts index 7357d2fb..af5ef3c7 100644 --- a/src/utils/apiClient.ts +++ b/src/utils/apiClient.ts @@ -1,4 +1,11 @@ -import type { FollowingEntity, AuthResult, ShoutInput, Topic, Author } from '../graphql/types.gen' +import type { + FollowingEntity, + AuthResult, + ShoutInput, + Topic, + Author, + LoadShoutsOptions +} from '../graphql/types.gen' import { publicGraphQLClient } from '../graphql/publicGraphQLClient' import { getToken, privateGraphQLClient } from '../graphql/privateGraphQLClient' import topicsAll from '../graphql/query/topics-all' @@ -26,8 +33,7 @@ import reactionsLoadBy from '../graphql/query/reactions-load-by' import { REACTIONS_AMOUNT_PER_PAGE } from '../stores/zine/reactions' import authorsLoadBy from '../graphql/query/authors-load-by' import shoutsLoadBy from '../graphql/query/articles-load-by' - -const FEED_SIZE = 50 +import shoutLoad from '../graphql/query/articles-load' type ApiErrorCode = | 'unknown' @@ -195,6 +201,7 @@ export const apiClient = { }, getAuthor: async ({ slug }: { slug: string }): Promise => { const response = await publicGraphQLClient.query(authorBySlug, { slug }).toPromise() + console.error('getAuthor', response) return response.data.getAuthor }, getTopic: async ({ slug }: { slug: string }): Promise => { @@ -230,20 +237,33 @@ export const apiClient = { return response.data.deleteReaction }, - // LOAD BY - - loadAuthorsBy: async ({ by, limit = 50, offset = 0 }) => { + getAuthorsBy: async ({ by, limit = 50, offset = 0 }) => { const resp = await publicGraphQLClient.query(authorsLoadBy, { by, limit, offset }).toPromise() console.debug(resp) - return resp.data.loadShoutsBy + return resp.data.loadAuthorsBy }, - loadShoutsBy: async ({ by, limit = 50, offset = 0 }) => { - const resp = await publicGraphQLClient.query(shoutsLoadBy, { by, limit, offset }).toPromise() - console.debug(resp) - return resp.data.loadShoutsBy + getShout: async (slug: string) => { + const resp = await publicGraphQLClient + .query(shoutLoad, { + slug + }) + .toPromise() + return resp.data.loadShout }, - loadReactionsBy: async ({ by, limit = REACTIONS_AMOUNT_PER_PAGE, offset = 0 }) => { + getShouts: async (options: LoadShoutsOptions) => { + const resp = await publicGraphQLClient + .query(shoutsLoadBy, { + options + }) + .toPromise() + // console.debug(resp) + return resp.data.loadShouts + }, + getReactionsBy: async ({ by, limit = REACTIONS_AMOUNT_PER_PAGE, offset = 0 }) => { const resp = await publicGraphQLClient.query(reactionsLoadBy, { by, limit, offset }).toPromise() + + console.log('resactions response', resp) + return resp.data.loadReactionsBy }, diff --git a/src/utils/config.ts b/src/utils/config.ts index d04d25d6..b9c77afe 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,7 +1,6 @@ export const isDev = import.meta.env.MODE === 'development' -//export const apiBaseUrl = 'https://v2.discours.io' -// export const apiBaseUrl = 'https://testapi.discours.io' +// export const apiBaseUrl = 'https://v2.discours.io' // export const apiBaseUrl = 'https://newapi.discours.io' // testapi.discours.io export const apiBaseUrl = 'http://localhost:8080' diff --git a/yarn.lock b/yarn.lock index 94853bac..d100e685 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,9 +41,9 @@ node-fetch "^2.6.1" "@astrojs/compiler@^0.27.0 || ^0.28.0 || ^0.29.0", "@astrojs/compiler@^0.29.15", "@astrojs/compiler@^0.29.3": - version "0.29.16" - resolved "https://registry.yarnpkg.com/@astrojs/compiler/-/compiler-0.29.16.tgz#453d7f4da6c2d0935743f4b7075141f619ac0a05" - integrity sha512-1CCf+dktc8IQCdmsNNSIor3rcJE5OIirFnFtQWp1VUxqCacefqRRlsl9lH7JcKKpRvz1taL43yHYJP8dxNfVww== + version "0.29.17" + resolved "https://registry.yarnpkg.com/@astrojs/compiler/-/compiler-0.29.17.tgz#5c65e18fd5dde9620dcc1794a858609b66408215" + integrity sha512-6ZbRGVunUMHxROD9Cleqkrfrj/kM9o43nLVwycdxCexCB5G372evy2ZM46LhaG/k5B5yC0PByNHTaGny0ll3iQ== "@astrojs/language-server@^0.28.3": version "0.28.3" @@ -138,12 +138,13 @@ which-pm-runs "^1.1.0" "@astrojs/vercel@^2.3.3": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@astrojs/vercel/-/vercel-2.3.3.tgz#354aebd3e504d57d9e7794a7e8c5229885d92928" - integrity sha512-gdYf98Oii8MEfRHyX6Uwsbvx/rjimZV75qPSMbcGPFUCteshENFvtUAk5jMJvJNrDh/Cxjt4akTd4/llbvWBeQ== + version "2.3.4" + resolved "https://registry.yarnpkg.com/@astrojs/vercel/-/vercel-2.3.4.tgz#79e3658786bebfa57d1c0efdec1b4db35ee3f4c4" + integrity sha512-1mrPdlb68Y+DPtDpOfuRlene9F2t+wICXDLoG+bII9ryURxTYCReV5JQ1uwlKQ3yizQLIKIzm0rs5yp+K5FWbw== dependencies: "@astrojs/webapi" "^1.1.1" "@vercel/nft" "^0.22.1" + fast-glob "^3.2.11" "@astrojs/webapi@^1.1.1": version "1.1.1" @@ -1765,9 +1766,9 @@ integrity sha512-1eZA1/HYOhmlZ9LrrGot+LUi/ypO2NXqfB+9F1WY98dGNDMz9pG9k+X7kg2YDJTUHDGbzY7WrsBRyAE8LurE7Q== "@solid-primitives/resize-observer@^2.0.5": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@solid-primitives/resize-observer/-/resize-observer-2.0.6.tgz#2086c92d3a5f82512ecbc47fceff02eac272bd2c" - integrity sha512-PbYmBFJBx1/WcrTZepcr6fABOrUP6CeXxehy2AKPCJInX3LKQ/elHLsM1g6KwVbvqpZ0aQ3a/3I7sRYk6BSrpw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@solid-primitives/resize-observer/-/resize-observer-2.0.7.tgz#0f909ed58d5fd7ec59b2fee15ddafdd28fdce4c8" + integrity sha512-/RtCTs61ACdsCKJodNTgnKA05CI09dkg7usAb5jg14L6mzwTNWWdZbXtbYsUlD+kh1/1j+BKxp6VtkbpgJE5yQ== dependencies: "@solid-primitives/event-listener" "^2.2.4" "@solid-primitives/rootless" "^1.2.1" @@ -2579,9 +2580,9 @@ astro-eslint-parser@^0.9.0: espree "^9.0.0" astro@^1.6.8: - version "1.6.8" - resolved "https://registry.yarnpkg.com/astro/-/astro-1.6.8.tgz#46ab77d8e968088faf8bcc2e77d2856cb1fe0bdd" - integrity sha512-+kOj8s2fguCFCim9he6fl9iugIHrmAl7BmfNXdTdC9zU30VYV162HF5eRJyMlY5hGuDn3GvAoaNSzCMnybVsFQ== + version "1.6.9" + resolved "https://registry.yarnpkg.com/astro/-/astro-1.6.9.tgz#08d7aed72168f8f45fc46e3ac47dd1a8ac0e2bbc" + integrity sha512-KXFKXobe8MIYl4gduUPLcAazMz+thox6N1pOv3F3QMbJS5rMRXkWloVK/6XebBO7p3DYkOfOGB4qA9ijTc4ftA== dependencies: "@astrojs/compiler" "^0.29.15" "@astrojs/language-server" "^0.28.3" @@ -2640,8 +2641,8 @@ astro@^1.6.8: typescript "*" unist-util-visit "^4.1.0" vfile "^5.3.2" - vite "~3.2.1" - vitefu "^0.2.0" + vite "~3.2.4" + vitefu "^0.2.1" yargs-parser "^21.0.1" zod "^3.17.3" @@ -2875,10 +2876,10 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== -bootstrap@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34" - integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q== +bootstrap@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0" + integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ== boxen@^6.2.1: version "6.2.1" @@ -9703,7 +9704,7 @@ vfile@^5.0.0, vfile@^5.3.2: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" -vite@^3.2.4, vite@~3.2.1: +vite@^3.2.4, vite@~3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.4.tgz#d8c7892dd4268064e04fffbe7d866207dd24166e" integrity sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw== @@ -9715,7 +9716,7 @@ vite@^3.2.4, vite@~3.2.1: optionalDependencies: fsevents "~2.3.2" -vitefu@^0.2.0: +vitefu@^0.2.0, vitefu@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.1.tgz#9dcd78737c77b366206706dac2403a751903907d" integrity sha512-clkvXTAeUf+XQKm3bhWUhT4pye+3acm6YCTGaWhxxIvZZ/QjnA3JA8Zud+z/mO5y5XYvJJhevs5Sjkv/FI8nRw==