a tool for shared writing and social publishing

Update/delete leaflets (#238)

* unified leaflet option menus in published post and home

* unified leaflet option menus in published post and home

* streanlined shareButton, added archive data

* added buttons to archive and unarchive in leaflet options

* refactor to use a single Link element in the LeafletListItem

* added filters for archive on home, filtered archive out of default
leaflet list

* update nextjs and add pub drafts

* update for nextjs 16

* add pino to serverExternalPackages

* make archiving in pubs work

* update identity data on revalidate

* refresh page on delete, fix text color on publish page

* optimistically update leaflet lists on archive/etc

* don't include archived when filtering on docs

* handle logged out and non-pub owner cases

* don't filter out archived undefined posts

* fix titles for local docs

* support canvas titles on homepage

* fix sorts

* filter docs better

* remove template feature

But keep the backend route so existing links still work

---------

Co-authored-by: celine <celine@hyperlink.academy>

authored by awarm.space celine and committed by GitHub ea2f4fb3 cb9348fb

+71
actions/deleteLeaflet.ts
··· 1 1 "use server"; 2 + import { refresh } from "next/cache"; 2 3 3 4 import { drizzle } from "drizzle-orm/node-postgres"; 4 5 import { ··· 9 10 import { eq } from "drizzle-orm"; 10 11 import { PermissionToken } from "src/replicache"; 11 12 import { pool } from "supabase/pool"; 13 + import { getIdentityData } from "./getIdentityData"; 14 + import { supabaseServerClient } from "supabase/serverClient"; 12 15 13 16 export async function deleteLeaflet(permission_token: PermissionToken) { 14 17 const client = await pool.connect(); ··· 32 35 .where(eq(permission_tokens.id, permission_token.id)); 33 36 }); 34 37 client.release(); 38 + 39 + refresh(); 40 + return; 41 + } 42 + 43 + export async function archivePost(token: string) { 44 + let identity = await getIdentityData(); 45 + if (!identity) throw new Error("No Identity"); 46 + 47 + // Archive on homepage 48 + await supabaseServerClient 49 + .from("permission_token_on_homepage") 50 + .update({ archived: true }) 51 + .eq("token", token) 52 + .eq("identity", identity.id); 53 + 54 + // Check if leaflet is in any publications where user is the creator 55 + let { data: leafletInPubs } = await supabaseServerClient 56 + .from("leaflets_in_publications") 57 + .select("publication, publications!inner(identity_did)") 58 + .eq("leaflet", token); 59 + 60 + if (leafletInPubs) { 61 + for (let pub of leafletInPubs) { 62 + if (pub.publications.identity_did === identity.atp_did) { 63 + await supabaseServerClient 64 + .from("leaflets_in_publications") 65 + .update({ archived: true }) 66 + .eq("leaflet", token) 67 + .eq("publication", pub.publication); 68 + } 69 + } 70 + } 71 + 72 + refresh(); 73 + return; 74 + } 75 + 76 + export async function unarchivePost(token: string) { 77 + let identity = await getIdentityData(); 78 + if (!identity) throw new Error("No Identity"); 79 + 80 + // Unarchive on homepage 81 + await supabaseServerClient 82 + .from("permission_token_on_homepage") 83 + .update({ archived: false }) 84 + .eq("token", token) 85 + .eq("identity", identity.id); 86 + 87 + // Check if leaflet is in any publications where user is the creator 88 + let { data: leafletInPubs } = await supabaseServerClient 89 + .from("leaflets_in_publications") 90 + .select("publication, publications!inner(identity_did)") 91 + .eq("leaflet", token); 92 + 93 + if (leafletInPubs) { 94 + for (let pub of leafletInPubs) { 95 + if (pub.publications.identity_did === identity.atp_did) { 96 + await supabaseServerClient 97 + .from("leaflets_in_publications") 98 + .update({ archived: false }) 99 + .eq("leaflet", token) 100 + .eq("publication", pub.publication); 101 + } 102 + } 103 + } 104 + 105 + refresh(); 35 106 return; 36 107 }
+1
actions/getIdentityData.ts
··· 24 24 entity_sets(entities(facts(*))) 25 25 )), 26 26 permission_token_on_homepage( 27 + archived, 27 28 created_at, 28 29 permission_tokens!inner( 29 30 id,
+1 -1
actions/subscriptions/sendPostToSubscribers.ts
··· 57 57 ) { 58 58 return; 59 59 } 60 - let domain = getCurrentDeploymentDomain(); 60 + let domain = await getCurrentDeploymentDomain(); 61 61 let res = await fetch("https://api.postmarkapp.com/email/batch", { 62 62 method: "POST", 63 63 headers: {
-48
app/(home-pages)/home/Actions/CreateNewButton.tsx
··· 1 1 "use client"; 2 2 3 3 import { createNewLeaflet } from "actions/createNewLeaflet"; 4 - import { createNewLeafletFromTemplate } from "actions/createNewLeafletFromTemplate"; 5 4 import { ActionButton } from "components/ActionBar/ActionButton"; 6 5 import { AddTiny } from "components/Icons/AddTiny"; 7 6 import { BlockCanvasPageSmall } from "components/Icons/BlockCanvasPageSmall"; 8 7 import { BlockDocPageSmall } from "components/Icons/BlockDocPageSmall"; 9 - import { TemplateSmall } from "components/Icons/TemplateSmall"; 10 8 import { Menu, MenuItem } from "components/Layout"; 11 9 import { useIsMobile } from "src/hooks/isMobile"; 12 - import { create } from "zustand"; 13 - import { combine, createJSONStorage, persist } from "zustand/middleware"; 14 10 15 - export const useTemplateState = create( 16 - persist( 17 - combine( 18 - { 19 - templates: [] as { id: string; name: string }[], 20 - }, 21 - (set) => ({ 22 - removeTemplate: (template: { id: string }) => 23 - set((state) => { 24 - return { 25 - templates: state.templates.filter((t) => t.id !== template.id), 26 - }; 27 - }), 28 - addTemplate: (template: { id: string; name: string }) => 29 - set((state) => { 30 - if (state.templates.find((t) => t.id === template.id)) return state; 31 - return { templates: [...state.templates, template] }; 32 - }), 33 - }), 34 - ), 35 - { 36 - name: "home-templates", 37 - storage: createJSONStorage(() => localStorage), 38 - }, 39 - ), 40 - ); 41 11 export const CreateNewLeafletButton = (props: {}) => { 42 12 let isMobile = useIsMobile(); 43 - let templates = useTemplateState((s) => s.templates); 44 13 let openNewLeaflet = (id: string) => { 45 14 if (isMobile) { 46 15 window.location.href = `/${id}?focusFirstBlock`; ··· 96 65 </div> 97 66 </div> 98 67 </MenuItem> 99 - {templates.length > 0 && ( 100 - <hr className="border-border-light mx-2 mb-0.5" /> 101 - )} 102 - {templates.map((t) => { 103 - return ( 104 - <MenuItem 105 - key={t.id} 106 - onSelect={async () => { 107 - let id = await createNewLeafletFromTemplate(t.id, false); 108 - if (!id.error) openNewLeaflet(id.id); 109 - }} 110 - > 111 - <TemplateSmall /> 112 - New {t.name} 113 - </MenuItem> 114 - ); 115 - })} 116 68 </Menu> 117 69 ); 118 70 };
+44 -33
app/(home-pages)/home/HomeLayout.tsx
··· 21 21 } from "components/PageLayouts/DashboardLayout"; 22 22 import { Actions } from "./Actions/Actions"; 23 23 import { useCardBorderHidden } from "components/Pages/useCardBorderHidden"; 24 - import { useTemplateState } from "./Actions/CreateNewButton"; 25 24 import { GetLeafletDataReturnType } from "app/api/rpc/[command]/get_leaflet_data"; 26 25 import { useState } from "react"; 27 26 import { useDebouncedEffect } from "src/hooks/useDebouncedEffect"; ··· 33 32 34 33 type Leaflet = { 35 34 added_at: string; 35 + archived?: boolean | null; 36 36 token: PermissionToken & { 37 37 leaflets_in_publications?: Exclude< 38 38 GetLeafletDataReturnType["result"]["data"], ··· 68 68 let { identity } = useIdentityData(); 69 69 70 70 let hasPubs = !identity || identity.publications.length === 0 ? false : true; 71 - let hasTemplates = 72 - useTemplateState((s) => s.templates).length === 0 ? false : true; 71 + let hasArchived = 72 + identity && 73 + identity.permission_token_on_homepage.filter( 74 + (leaflet) => leaflet.archived === true, 75 + ).length > 0; 73 76 74 77 return ( 75 78 <DashboardLayout ··· 87 90 setSearchValueAction={setSearchValue} 88 91 hasBackgroundImage={hasBackgroundImage} 89 92 hasPubs={hasPubs} 90 - hasTemplates={hasTemplates} 93 + hasArchived={!!hasArchived} 91 94 /> 92 95 ), 93 96 content: ( ··· 147 150 ? identity.permission_token_on_homepage.map((ptoh) => ({ 148 151 added_at: ptoh.created_at, 149 152 token: ptoh.permission_tokens as PermissionToken, 153 + archived: ptoh.archived, 150 154 })) 151 155 : localLeaflets 152 156 .sort((a, b) => (a.added_at > b.added_at ? -1 : 1)) ··· 204 208 w-full 205 209 ${display === "grid" ? "grid auto-rows-max md:grid-cols-4 sm:grid-cols-3 grid-cols-2 gap-y-4 gap-x-4 sm:gap-x-6 sm:gap-y-5 grow" : "flex flex-col gap-2 pt-2"} `} 206 210 > 207 - {props.leaflets.map(({ token: leaflet, added_at }, index) => ( 211 + {props.leaflets.map(({ token: leaflet, added_at, archived }, index) => ( 208 212 <ReplicacheProvider 209 213 disablePull 210 214 initialFactsOnly={!!identity} ··· 223 227 }} 224 228 > 225 229 <LeafletListItem 226 - title={props?.titles?.[leaflet.root_entity] || "Untitled"} 230 + title={props?.titles?.[leaflet.root_entity]} 231 + archived={archived} 227 232 token={leaflet} 228 - draft={!!leaflet.leaflets_in_publications?.length} 233 + draftInPublication={ 234 + leaflet.leaflets_in_publications?.[0]?.publication 235 + } 229 236 published={!!leaflet.leaflets_in_publications?.find((l) => l.doc)} 230 237 publishedAt={ 231 238 leaflet.leaflets_in_publications?.find((l) => l.doc)?.documents 232 239 ?.indexed_at 240 + } 241 + document_uri={ 242 + leaflet.leaflets_in_publications?.find((l) => l.doc)?.documents 243 + ?.uri 233 244 } 234 245 leaflet_id={leaflet.root_entity} 235 246 loggedIn={!!identity} ··· 260 271 261 272 let sortedLeaflets = leaflets.sort((a, b) => { 262 273 if (sort === "alphabetical") { 263 - if (titles[a.token.root_entity] === titles[b.token.root_entity]) { 274 + let titleA = titles[a.token.root_entity] ?? "Untitled"; 275 + let titleB = titles[b.token.root_entity] ?? "Untitled"; 276 + 277 + if (titleA === titleB) { 264 278 return a.added_at > b.added_at ? -1 : 1; 265 279 } else { 266 - return titles[a.token.root_entity].toLocaleLowerCase() > 267 - titles[b.token.root_entity].toLocaleLowerCase() 268 - ? 1 269 - : -1; 280 + return titleA.toLocaleLowerCase() > titleB.toLocaleLowerCase() ? 1 : -1; 270 281 } 271 282 } else { 272 283 return a.added_at === b.added_at ··· 279 290 } 280 291 }); 281 292 282 - let allTemplates = useTemplateState((s) => s.templates); 283 - let filteredLeaflets = sortedLeaflets.filter(({ token: leaflet }) => { 284 - let published = !!leaflet.leaflets_in_publications?.find((l) => l.doc); 285 - let drafts = !!leaflet.leaflets_in_publications?.length && !published; 286 - let docs = !leaflet.leaflets_in_publications?.length; 287 - let templates = !!allTemplates.find((t) => t.id === leaflet.id); 288 - // If no filters are active, show all 289 - if ( 290 - !filter.drafts && 291 - !filter.published && 292 - !filter.docs && 293 - !filter.templates 294 - ) 295 - return true; 293 + let filteredLeaflets = sortedLeaflets.filter( 294 + ({ token: leaflet, archived: archived }) => { 295 + let published = !!leaflet.leaflets_in_publications?.find((l) => l.doc); 296 + let drafts = !!leaflet.leaflets_in_publications?.length && !published; 297 + let docs = !leaflet.leaflets_in_publications?.length && !archived; 298 + // If no filters are active, show all 299 + if ( 300 + !filter.drafts && 301 + !filter.published && 302 + !filter.docs && 303 + !filter.archived 304 + ) 305 + return archived === false || archived === null || archived == undefined; 296 306 297 - return ( 298 - (filter.drafts && drafts) || 299 - (filter.published && published) || 300 - (filter.docs && docs) || 301 - (filter.templates && templates) 302 - ); 303 - }); 307 + return ( 308 + (filter.drafts && drafts) || 309 + (filter.published && published) || 310 + (filter.docs && docs) || 311 + (filter.archived && archived) 312 + ); 313 + }, 314 + ); 304 315 if (searchValue === "") return filteredLeaflets; 305 316 let searchedLeaflets = filteredLeaflets.filter(({ token: leaflet }) => { 306 317 return titles[leaflet.root_entity]
+31 -45
app/(home-pages)/home/LeafletList/LeafletInfo.tsx
··· 1 1 "use client"; 2 - import { PermissionToken } from "src/replicache"; 2 + import { PermissionToken, useEntity } from "src/replicache"; 3 3 import { LeafletOptions } from "./LeafletOptions"; 4 4 import Link from "next/link"; 5 - import { useState } from "react"; 6 - import { theme } from "tailwind.config"; 7 - import { TemplateSmall } from "components/Icons/TemplateSmall"; 5 + import { use, useState } from "react"; 8 6 import { timeAgo } from "src/utils/timeAgo"; 7 + import { usePublishLink } from "components/ShareOptions"; 8 + import { Separator } from "components/Layout"; 9 + import { usePageTitle } from "components/utils/UpdateLeafletTitle"; 9 10 10 11 export const LeafletInfo = (props: { 11 12 title?: string; 12 - draft?: boolean; 13 + draftInPublication?: string; 13 14 published?: boolean; 14 15 token: PermissionToken; 15 16 leaflet_id: string; 16 17 loggedIn: boolean; 17 - isTemplate: boolean; 18 18 className?: string; 19 19 display: "grid" | "list"; 20 20 added_at: string; 21 21 publishedAt?: string; 22 + document_uri?: string; 23 + archived?: boolean | null; 22 24 }) => { 23 25 let [prefetch, setPrefetch] = useState(false); 24 26 let prettyCreatedAt = props.added_at ? timeAgo(props.added_at) : ""; 25 - 26 27 let prettyPublishedAt = props.publishedAt ? timeAgo(props.publishedAt) : ""; 27 28 29 + // Look up root page first, like UpdateLeafletTitle does 30 + let firstPage = useEntity(props.leaflet_id, "root/page")[0]; 31 + let entityID = firstPage?.data.value || props.leaflet_id; 32 + let titleFromDb = usePageTitle(entityID); 33 + 34 + let title = props.title ?? titleFromDb ?? "Untitled"; 35 + 28 36 return ( 29 37 <div 30 38 className={`leafletInfo w-full min-w-0 flex flex-col ${props.className}`} 31 39 > 32 40 <div className="flex justify-between items-center shrink-0 max-w-full gap-2 leading-tight overflow-hidden"> 33 - <Link 34 - onMouseEnter={() => setPrefetch(true)} 35 - onPointerDown={() => setPrefetch(true)} 36 - prefetch={prefetch} 37 - href={`/${props.token.id}`} 38 - className="no-underline sm:hover:no-underline text-primary grow min-w-0" 39 - > 40 - <h3 className="sm:text-lg text-base truncate w-full min-w-0"> 41 - {props.title} 42 - </h3> 43 - </Link> 41 + <h3 className="sm:text-lg text-base truncate w-full min-w-0"> 42 + {title} 43 + </h3> 44 44 <div className="flex gap-1 shrink-0"> 45 - {props.isTemplate && props.display === "list" ? ( 46 - <TemplateSmall 47 - fill={theme.colors["bg-page"]} 48 - className="text-tertiary" 49 - /> 50 - ) : null} 51 45 <LeafletOptions 52 46 leaflet={props.token} 53 - isTemplate={props.isTemplate} 47 + draftInPublication={props.draftInPublication} 48 + document_uri={props.document_uri} 49 + shareLink={`/${props.token.id}`} 50 + archived={props.archived} 54 51 loggedIn={props.loggedIn} 55 - added_at={props.added_at} 56 52 /> 57 53 </div> 58 54 </div> 59 - <Link 60 - onMouseEnter={() => setPrefetch(true)} 61 - onPointerDown={() => setPrefetch(true)} 62 - prefetch={prefetch} 63 - href={`/${props.token.id}`} 64 - className="no-underline sm:hover:no-underline text-primary w-full" 65 - > 66 - {props.draft || props.published ? ( 55 + <div className="flex gap-2 items-center"> 56 + {props.archived ? ( 57 + <div className="text-xs text-tertiary truncate">Archived</div> 58 + ) : props.draftInPublication || props.published ? ( 67 59 <div 68 - className={`text-xs ${props.published ? "font-bold text-tertiary" : "text-tertiary"}`} 60 + className={`text-xs w-max grow truncate ${props.published ? "font-bold text-tertiary" : "text-tertiary"}`} 69 61 > 70 62 {props.published 71 63 ? `Published ${prettyPublishedAt}` 72 64 : `Draft ${prettyCreatedAt}`} 73 65 </div> 74 66 ) : ( 75 - <div className="text-xs text-tertiary">{prettyCreatedAt}</div> 67 + <div className="text-xs text-tertiary grow w-max truncate"> 68 + {prettyCreatedAt} 69 + </div> 76 70 )} 77 - </Link> 78 - {props.isTemplate && props.display === "grid" ? ( 79 - <div className="absolute -top-2 right-1"> 80 - <TemplateSmall 81 - className="text-tertiary" 82 - fill={theme.colors["bg-page"]} 83 - /> 84 - </div> 85 - ) : null} 71 + </div> 86 72 </div> 87 73 ); 88 74 };
+30 -16
app/(home-pages)/home/LeafletList/LeafletListItem.tsx
··· 1 1 "use client"; 2 2 import { PermissionToken } from "src/replicache"; 3 - import { useTemplateState } from "../Actions/CreateNewButton"; 4 3 import { LeafletListPreview, LeafletGridPreview } from "./LeafletPreview"; 5 4 import { LeafletInfo } from "./LeafletInfo"; 6 5 import { useState, useRef, useEffect } from "react"; 6 + import { SpeedyLink } from "components/SpeedyLink"; 7 7 8 8 export const LeafletListItem = (props: { 9 9 token: PermissionToken; 10 + archived?: boolean | null; 10 11 leaflet_id: string; 11 12 loggedIn: boolean; 12 13 display: "list" | "grid"; 13 14 cardBorderHidden: boolean; 14 15 added_at: string; 15 - title: string; 16 - draft?: boolean; 16 + title?: string; 17 + draftInPublication?: string; 17 18 published?: boolean; 18 19 publishedAt?: string; 20 + document_uri?: string; 19 21 index: number; 20 22 isHidden: boolean; 21 23 showPreview?: boolean; 22 24 }) => { 23 - let isTemplate = useTemplateState( 24 - (s) => !!s.templates.find((t) => t.id === props.token.id), 25 - ); 26 - 27 25 let [isOnScreen, setIsOnScreen] = useState(props.index < 16 ? true : false); 28 26 let previewRef = useRef<HTMLDivElement | null>(null); 29 27 ··· 50 48 <> 51 49 <div 52 50 ref={previewRef} 53 - className={`gap-3 w-full ${props.cardBorderHidden ? "" : "px-2 py-1 block-border hover:outline-border"}`} 51 + className={`relative flex gap-3 w-full 52 + ${props.isHidden ? "hidden" : "flex"} 53 + ${props.cardBorderHidden ? "" : "px-2 py-1 block-border hover:outline-border relative"}`} 54 54 style={{ 55 55 backgroundColor: props.cardBorderHidden 56 56 ? "transparent" 57 57 : "rgba(var(--bg-page), var(--bg-page-alpha))", 58 - 59 - display: props.isHidden ? "none" : "flex", 60 58 }} 61 59 > 60 + <SpeedyLink 61 + href={`/${props.token.id}`} 62 + className={`absolute w-full h-full top-0 left-0 no-underline hover:no-underline! text-primary`} 63 + /> 62 64 {props.showPreview && ( 63 65 <LeafletListPreview isVisible={isOnScreen} {...props} /> 64 66 )} 65 - <LeafletInfo isTemplate={isTemplate} {...props} /> 67 + <LeafletInfo {...props} /> 66 68 </div> 67 69 {props.cardBorderHidden && ( 68 70 <hr ··· 77 79 return ( 78 80 <div 79 81 ref={previewRef} 80 - className={`leafletGridListItem relative 81 - flex flex-col gap-1 p-1 h-52 82 + className={` 83 + relative 84 + flex flex-col gap-1 p-1 h-52 w-full 82 85 block-border border-border! hover:outline-border 86 + ${props.isHidden ? "hidden" : "flex"} 83 87 `} 84 88 style={{ 85 89 backgroundColor: props.cardBorderHidden 86 90 ? "transparent" 87 91 : "rgba(var(--bg-page), var(--bg-page-alpha))", 88 - 89 - display: props.isHidden ? "none" : "flex", 90 92 }} 91 93 > 94 + <SpeedyLink 95 + href={`/${props.token.id}`} 96 + className={`absolute w-full h-full top-0 left-0 no-underline hover:no-underline! text-primary`} 97 + /> 92 98 <div className="grow"> 93 99 <LeafletGridPreview {...props} isVisible={isOnScreen} /> 94 100 </div> 95 101 <LeafletInfo 96 - isTemplate={isTemplate} 97 102 className="px-1 pb-0.5 shrink-0" 98 103 {...props} 99 104 /> 100 105 </div> 101 106 ); 102 107 }; 108 + 109 + const LeafletLink = (props: { id: string; className: string }) => { 110 + return ( 111 + <SpeedyLink 112 + href={`/${props.id}`} 113 + className={`no-underline hover:no-underline! text-primary ${props.className}`} 114 + /> 115 + ); 116 + };
+328 -163
app/(home-pages)/home/LeafletList/LeafletOptions.tsx
··· 1 1 "use client"; 2 2 3 3 import { Menu, MenuItem } from "components/Layout"; 4 - import { useReplicache, type PermissionToken } from "src/replicache"; 5 - import { hideDoc } from "../storage"; 6 4 import { useState } from "react"; 7 - import { ButtonPrimary } from "components/Buttons"; 8 - import { useTemplateState } from "../Actions/CreateNewButton"; 9 - import { useSmoker, useToaster } from "components/Toast"; 10 - import { removeLeafletFromHome } from "actions/removeLeafletFromHome"; 11 - import { useIdentityData } from "components/IdentityProvider"; 5 + import { ButtonPrimary, ButtonTertiary } from "components/Buttons"; 6 + import { useToaster } from "components/Toast"; 7 + import { MoreOptionsVerticalTiny } from "components/Icons/MoreOptionsVerticalTiny"; 8 + import { DeleteSmall } from "components/Icons/DeleteSmall"; 9 + import { 10 + archivePost, 11 + deleteLeaflet, 12 + unarchivePost, 13 + } from "actions/deleteLeaflet"; 14 + import { ArchiveSmall } from "components/Icons/ArchiveSmall"; 15 + import { UnpublishSmall } from "components/Icons/UnpublishSmall"; 16 + import { 17 + deletePost, 18 + unpublishPost, 19 + } from "app/lish/[did]/[publication]/dashboard/deletePost"; 20 + import { ShareButton } from "components/ShareOptions"; 21 + import { ShareSmall } from "components/Icons/ShareSmall"; 12 22 import { HideSmall } from "components/Icons/HideSmall"; 13 - import { MoreOptionsTiny } from "components/Icons/MoreOptionsTiny"; 14 - import { TemplateRemoveSmall } from "components/Icons/TemplateRemoveSmall"; 15 - import { TemplateSmall } from "components/Icons/TemplateSmall"; 16 - import { MoreOptionsVerticalTiny } from "components/Icons/MoreOptionsVerticalTiny"; 17 - import { addLeafletToHome } from "actions/addLeafletToHome"; 23 + import { hideDoc } from "../storage"; 24 + 25 + import { PermissionToken } from "src/replicache"; 26 + import { 27 + useIdentityData, 28 + mutateIdentityData, 29 + } from "components/IdentityProvider"; 30 + import { 31 + usePublicationData, 32 + mutatePublicationData, 33 + } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 18 34 19 35 export const LeafletOptions = (props: { 20 36 leaflet: PermissionToken; 21 - isTemplate: boolean; 22 - loggedIn: boolean; 23 - added_at: string; 37 + draftInPublication?: string; 38 + document_uri?: string; 39 + shareLink: string; 40 + archived?: boolean | null; 41 + loggedIn?: boolean; 24 42 }) => { 25 - let { mutate: mutateIdentity } = useIdentityData(); 26 - let [state, setState] = useState<"normal" | "template">("normal"); 43 + let [state, setState] = useState<"normal" | "areYouSure">( 44 + "normal", 45 + ); 27 46 let [open, setOpen] = useState(false); 28 - let smoker = useSmoker(); 29 - let toaster = useToaster(); 47 + let { identity } = useIdentityData(); 48 + let isPublicationOwner = 49 + !!identity?.atp_did && !!props.document_uri?.includes(identity.atp_did); 30 50 return ( 31 51 <> 32 52 <Menu ··· 38 58 }} 39 59 trigger={ 40 60 <div 41 - className="text-secondary shrink-0" 61 + className="text-secondary shrink-0 relative" 42 62 onClick={(e) => { 43 63 e.preventDefault; 44 64 e.stopPropagation; ··· 49 69 } 50 70 > 51 71 {state === "normal" ? ( 52 - <> 53 - {!props.isTemplate ? ( 54 - <MenuItem 55 - onSelect={(e) => { 56 - e.preventDefault(); 57 - setState("template"); 58 - }} 59 - > 60 - <TemplateSmall /> Add as Template 61 - </MenuItem> 62 - ) : ( 63 - <MenuItem 64 - onSelect={(e) => { 65 - useTemplateState.getState().removeTemplate(props.leaflet); 66 - let newLeafletButton = 67 - document.getElementById("new-leaflet-button"); 68 - if (!newLeafletButton) return; 69 - let rect = newLeafletButton.getBoundingClientRect(); 70 - smoker({ 71 - static: true, 72 - text: <strong>Removed template!</strong>, 73 - position: { 74 - y: rect.top, 75 - x: rect.right + 5, 76 - }, 77 - }); 78 - }} 79 - > 80 - <TemplateRemoveSmall /> Remove from Templates 81 - </MenuItem> 82 - )} 83 - <MenuItem 84 - onSelect={async () => { 85 - if (props.loggedIn) { 86 - mutateIdentity( 87 - (s) => { 88 - if (!s) return s; 89 - return { 90 - ...s, 91 - permission_token_on_homepage: 92 - s.permission_token_on_homepage.filter( 93 - (ptrh) => 94 - ptrh.permission_tokens.id !== props.leaflet.id, 95 - ), 96 - }; 97 - }, 98 - { revalidate: false }, 99 - ); 100 - await removeLeafletFromHome([props.leaflet.id]); 101 - mutateIdentity(); 102 - } else { 103 - hideDoc(props.leaflet); 104 - } 105 - toaster({ 106 - content: ( 107 - <div className="font-bold"> 108 - Doc removed!{" "} 109 - <UndoRemoveFromHomeButton 110 - leaflet={props.leaflet} 111 - added_at={props.added_at} 112 - /> 113 - </div> 114 - ), 115 - type: "success", 116 - }); 117 - }} 118 - > 119 - <HideSmall /> 120 - Remove from Home 121 - </MenuItem> 122 - </> 123 - ) : state === "template" ? ( 124 - <AddTemplateForm 72 + !props.loggedIn ? ( 73 + <LoggedOutOptions 74 + leaflet={props.leaflet} 75 + setState={setState} 76 + shareLink={props.shareLink} 77 + /> 78 + ) : props.document_uri && isPublicationOwner ? ( 79 + <PublishedPostOptions 80 + setState={setState} 81 + document_uri={props.document_uri} 82 + {...props} 83 + /> 84 + ) : ( 85 + <DefaultOptions 86 + setState={setState} 87 + {...props} 88 + /> 89 + ) 90 + ) : state === "areYouSure" ? ( 91 + <DeleteAreYouSureForm 92 + backToMenu={() => setState("normal")} 125 93 leaflet={props.leaflet} 126 - close={() => setOpen(false)} 94 + document_uri={props.document_uri} 95 + draft={!!props.draftInPublication} 127 96 /> 128 97 ) : null} 129 98 </Menu> ··· 131 100 ); 132 101 }; 133 102 134 - const UndoRemoveFromHomeButton = (props: { 103 + const DefaultOptions = (props: { 104 + setState: (s: "areYouSure") => void; 105 + draftInPublication?: string; 135 106 leaflet: PermissionToken; 136 - added_at: string | undefined; 107 + shareLink: string; 108 + archived?: boolean | null; 137 109 }) => { 138 110 let toaster = useToaster(); 139 - let { mutate } = useIdentityData(); 111 + let { mutate: mutatePub } = usePublicationData(); 112 + let { mutate: mutateIdentity } = useIdentityData(); 140 113 return ( 141 - <button 142 - onClick={async (e) => { 143 - await mutate( 144 - (identity) => { 145 - if (!identity) return; 146 - return { 147 - ...identity, 148 - permission_token_on_homepage: [ 149 - ...identity.permission_token_on_homepage, 150 - { 151 - created_at: props.added_at || new Date().toISOString(), 152 - permission_tokens: { 153 - ...props.leaflet, 154 - leaflets_in_publications: [], 155 - }, 156 - }, 157 - ], 158 - }; 159 - }, 160 - { revalidate: false }, 161 - ); 162 - await addLeafletToHome(props.leaflet.id); 163 - await mutate(); 114 + <> 115 + <ShareButton 116 + text={ 117 + <div className="flex gap-2"> 118 + <ShareSmall /> 119 + Copy Edit Link 120 + </div> 121 + } 122 + subtext="" 123 + smokerText="Link copied!" 124 + id="get-link" 125 + link={`/${props.shareLink}`} 126 + /> 127 + <hr className="border-border-light" /> 128 + <MenuItem 129 + onSelect={async () => { 130 + if (!props.archived) { 131 + mutateIdentityData(mutateIdentity, (data) => { 132 + let item = data.permission_token_on_homepage.find( 133 + (p) => p.permission_tokens?.id === props.leaflet.id, 134 + ); 135 + if (item) item.archived = true; 136 + }); 137 + mutatePublicationData(mutatePub, (data) => { 138 + let item = data.publication?.leaflets_in_publications.find( 139 + (l) => l.permission_tokens?.id === props.leaflet.id, 140 + ); 141 + if (item) item.archived = true; 142 + }); 143 + await archivePost(props.leaflet.id); 144 + toaster({ 145 + content: ( 146 + <div className="font-bold flex gap-2"> 147 + Archived{props.draftInPublication ? " Draft" : " Leaflet"}! 148 + <ButtonTertiary 149 + className="underline text-accent-2!" 150 + onClick={async () => { 151 + mutateIdentityData(mutateIdentity, (data) => { 152 + let item = data.permission_token_on_homepage.find( 153 + (p) => p.permission_tokens?.id === props.leaflet.id, 154 + ); 155 + if (item) item.archived = false; 156 + }); 157 + mutatePublicationData(mutatePub, (data) => { 158 + let item = 159 + data.publication?.leaflets_in_publications.find( 160 + (l) => l.permission_tokens?.id === props.leaflet.id, 161 + ); 162 + if (item) item.archived = false; 163 + }); 164 + await unarchivePost(props.leaflet.id); 165 + toaster({ 166 + content: ( 167 + <div className="font-bold flex gap-2"> 168 + Unarchived! 169 + </div> 170 + ), 171 + type: "success", 172 + }); 173 + }} 174 + > 175 + Undo? 176 + </ButtonTertiary> 177 + </div> 178 + ), 179 + type: "success", 180 + }); 181 + } else { 182 + mutateIdentityData(mutateIdentity, (data) => { 183 + let item = data.permission_token_on_homepage.find( 184 + (p) => p.permission_tokens?.id === props.leaflet.id, 185 + ); 186 + if (item) item.archived = false; 187 + }); 188 + mutatePublicationData(mutatePub, (data) => { 189 + let item = data.publication?.leaflets_in_publications.find( 190 + (l) => l.permission_tokens?.id === props.leaflet.id, 191 + ); 192 + if (item) item.archived = false; 193 + }); 194 + await unarchivePost(props.leaflet.id); 195 + toaster({ 196 + content: <div className="font-bold">Unarchived!</div>, 197 + type: "success", 198 + }); 199 + } 200 + }} 201 + > 202 + <ArchiveSmall /> 203 + {!props.archived ? " Archive" : "Unarchive"} 204 + {props.draftInPublication ? " Draft" : " Leaflet"} 205 + </MenuItem> 206 + <MenuItem 207 + onSelect={(e) => { 208 + e.preventDefault(); 209 + props.setState("areYouSure"); 210 + }} 211 + > 212 + <DeleteSmall /> 213 + Delete Forever 214 + </MenuItem> 215 + </> 216 + ); 217 + }; 164 218 165 - toaster({ 166 - content: <div className="font-bold">Recovered Doc!</div>, 167 - type: "success", 168 - }); 169 - }} 170 - className="underline" 171 - > 172 - Undo? 173 - </button> 219 + const LoggedOutOptions = (props: { 220 + leaflet: PermissionToken; 221 + setState: (s: "areYouSure") => void; 222 + shareLink: string; 223 + }) => { 224 + let toaster = useToaster(); 225 + return ( 226 + <> 227 + <ShareButton 228 + text={ 229 + <div className="flex gap-2"> 230 + <ShareSmall /> 231 + Copy Edit Link 232 + </div> 233 + } 234 + subtext="" 235 + smokerText="Link copied!" 236 + id="get-link" 237 + link={`/${props.shareLink}`} 238 + /> 239 + <hr className="border-border-light" /> 240 + <MenuItem 241 + onSelect={() => { 242 + hideDoc(props.leaflet); 243 + toaster({ 244 + content: <div className="font-bold">Removed from Home!</div>, 245 + type: "success", 246 + }); 247 + }} 248 + > 249 + <HideSmall /> 250 + Remove from Home 251 + </MenuItem> 252 + <MenuItem 253 + onSelect={(e) => { 254 + e.preventDefault(); 255 + props.setState("areYouSure"); 256 + }} 257 + > 258 + <DeleteSmall /> 259 + Delete Forever 260 + </MenuItem> 261 + </> 174 262 ); 175 263 }; 176 264 177 - const AddTemplateForm = (props: { 265 + const PublishedPostOptions = (props: { 266 + setState: (s: "areYouSure") => void; 267 + document_uri: string; 178 268 leaflet: PermissionToken; 179 - close: () => void; 269 + shareLink: string; 180 270 }) => { 181 - let [name, setName] = useState(""); 182 - let smoker = useSmoker(); 271 + let toaster = useToaster(); 183 272 return ( 184 - <div className="flex flex-col gap-2 px-3 py-1"> 185 - <label className="font-bold flex flex-col gap-1 text-secondary"> 186 - Template Name 187 - <input 188 - value={name} 189 - onChange={(e) => setName(e.target.value)} 190 - type="text" 191 - className=" text-primary font-normal border border-border rounded-md outline-hidden px-2 py-1 w-64" 192 - /> 193 - </label> 273 + <> 274 + <ShareButton 275 + text={ 276 + <div className="flex gap-2"> 277 + <ShareSmall /> 278 + Copy Post Link 279 + </div> 280 + } 281 + smokerText="Link copied!" 282 + id="get-link" 283 + link={`${props.shareLink}`} 284 + /> 194 285 195 - <ButtonPrimary 196 - onClick={() => { 197 - useTemplateState.getState().addTemplate({ 198 - name, 199 - id: props.leaflet.id, 286 + <hr className="border-border-light" /> 287 + <MenuItem 288 + onSelect={async () => { 289 + if (props.document_uri) { 290 + await unpublishPost(props.document_uri); 291 + } 292 + toaster({ 293 + content: <div className="font-bold">Unpublished Post!</div>, 294 + type: "success", 200 295 }); 201 - let newLeafletButton = document.getElementById("new-leaflet-button"); 202 - if (!newLeafletButton) return; 203 - let rect = newLeafletButton.getBoundingClientRect(); 204 - smoker({ 205 - static: true, 206 - text: <strong>Added {name}!</strong>, 207 - position: { 208 - y: rect.top, 209 - x: rect.right + 5, 210 - }, 211 - }); 212 - props.close(); 296 + }} 297 + > 298 + <UnpublishSmall /> 299 + <div className="flex flex-col"> 300 + Unpublish Post 301 + <div className="text-tertiary text-sm font-normal!"> 302 + Move this post back into drafts 303 + </div> 304 + </div> 305 + </MenuItem> 306 + <MenuItem 307 + onSelect={(e) => { 308 + e.preventDefault(); 309 + props.setState("areYouSure"); 213 310 }} 214 - className="place-self-end" 215 311 > 216 - Add Template 217 - </ButtonPrimary> 312 + <DeleteSmall /> 313 + <div className="flex flex-col"> 314 + Delete Post 315 + <div className="text-tertiary text-sm font-normal!"> 316 + Unpublish AND delete 317 + </div> 318 + </div> 319 + </MenuItem> 320 + </> 321 + ); 322 + }; 323 + 324 + const DeleteAreYouSureForm = (props: { 325 + backToMenu: () => void; 326 + document_uri?: string; 327 + leaflet: PermissionToken; 328 + draft?: boolean; 329 + }) => { 330 + let toaster = useToaster(); 331 + let { mutate: mutatePub } = usePublicationData(); 332 + let { mutate: mutateIdentity } = useIdentityData(); 333 + 334 + return ( 335 + <div className="flex flex-col justify-center p-2 text-center"> 336 + <div className="text-primary font-bold"> Are you sure?</div> 337 + <div className="text-sm text-secondary"> 338 + This will delete it forever for everyone! 339 + </div> 340 + <div className="flex gap-2 mx-auto items-center mt-2"> 341 + <ButtonTertiary onClick={() => props.backToMenu()}> 342 + Nevermind 343 + </ButtonTertiary> 344 + <ButtonPrimary 345 + onClick={async () => { 346 + mutateIdentityData(mutateIdentity, (data) => { 347 + data.permission_token_on_homepage = 348 + data.permission_token_on_homepage.filter( 349 + (p) => p.permission_tokens?.id !== props.leaflet.id, 350 + ); 351 + }); 352 + mutatePublicationData(mutatePub, (data) => { 353 + if (!data.publication) return; 354 + data.publication.leaflets_in_publications = 355 + data.publication.leaflets_in_publications.filter( 356 + (l) => l.permission_tokens?.id !== props.leaflet.id, 357 + ); 358 + }); 359 + if (props.document_uri) { 360 + await deletePost(props.document_uri); 361 + } 362 + deleteLeaflet(props.leaflet); 363 + 364 + toaster({ 365 + content: ( 366 + <div className="font-bold"> 367 + Deleted{" "} 368 + {props.document_uri 369 + ? "Post!" 370 + : props.draft 371 + ? "Draft" 372 + : "Leaflet!"} 373 + </div> 374 + ), 375 + type: "success", 376 + }); 377 + }} 378 + > 379 + Delete it! 380 + </ButtonPrimary> 381 + </div> 218 382 </div> 219 383 ); 220 384 }; 385 +
+3 -17
app/(home-pages)/home/LeafletList/LeafletPreview.tsx
··· 8 8 useEntity, 9 9 useReferenceToEntity, 10 10 } from "src/replicache"; 11 - import { useTemplateState } from "../Actions/CreateNewButton"; 12 11 import { useCardBorderHidden } from "components/Pages/useCardBorderHidden"; 13 12 import { LeafletContent } from "./LeafletContent"; 14 13 import { Tooltip } from "components/Tooltip"; 15 - import { useState } from "react"; 16 - import Link from "next/link"; 17 - import { SpeedyLink } from "components/SpeedyLink"; 18 14 19 15 export const LeafletListPreview = (props: { 20 16 draft?: boolean; ··· 137 133 ); 138 134 return ( 139 135 <ThemeProvider local entityID={root} className="w-full!"> 140 - <div className="border border-border-light rounded-md w-full h-full overflow-hidden relative"> 141 - <div className="relative w-full h-full"> 136 + <div className="border border-border-light rounded-md w-full h-full overflow-hidden "> 137 + <div className="w-full h-full"> 142 138 <ThemeBackgroundProvider entityID={root}> 143 139 <div 144 140 inert 145 - className="leafletPreview relative grow shrink-0 h-full w-full px-2 pt-2 sm:px-3 sm:pt-3 flex items-end pointer-events-none" 141 + className="leafletPreview grow shrink-0 h-full w-full px-2 pt-2 sm:px-3 sm:pt-3 flex items-end pointer-events-none" 146 142 > 147 143 <div 148 144 className={`leafletContentWrapper h-full sm:w-48 w-40 mx-auto overflow-clip ${!cardBorderHidden && "border border-border-light border-b-0 rounded-t-md"}`} ··· 174 170 </div> 175 171 </ThemeBackgroundProvider> 176 172 </div> 177 - <LeafletPreviewLink id={props.token.id} /> 178 173 </div> 179 174 </ThemeProvider> 180 175 ); 181 176 }; 182 - 183 - const LeafletPreviewLink = (props: { id: string }) => { 184 - return ( 185 - <SpeedyLink 186 - href={`/${props.id}`} 187 - className={`hello no-underline sm:hover:no-underline text-primary absolute inset-0 w-full h-full bg-bg-test`} 188 - /> 189 - ); 190 - };
+2 -3
app/[leaflet_id]/publish/PublishPost.tsx
··· 94 94 } 95 95 96 96 return ( 97 - <div className="flex flex-col gap-4 w-[640px] max-w-full sm:px-4 px-3"> 97 + <div className="flex flex-col gap-4 w-[640px] max-w-full sm:px-4 px-3 text-primary"> 98 98 <h3>Publish Options</h3> 99 99 <form 100 100 onSubmit={(e) => { ··· 161 161 /> 162 162 </div> 163 163 <div className="opaque-container overflow-hidden flex flex-col mt-4 w-full"> 164 - {/* <div className="h-[260px] w-full bg-test" /> */} 165 164 <div className="flex flex-col p-2"> 166 165 <div className="font-bold">{props.title}</div> 167 166 <div className="text-tertiary">{props.description}</div> ··· 209 208 return ( 210 209 <div className="container p-4 m-3 sm:m-4 flex flex-col gap-1 justify-center text-center w-fit h-fit mx-auto"> 211 210 <PublishIllustration posts_in_pub={props.posts_in_pub} /> 212 - <h2 className="pt-2">Published!</h2> 211 + <h2 className="pt-2 text-primary">Published!</h2> 213 212 <Link 214 213 className="hover:no-underline! font-bold place-self-center pt-2" 215 214 href={`/lish/${uri.host}/${encodeURIComponent(props.record?.name || "")}/dashboard`}
+33 -4
app/api/rpc/[command]/getFactsFromHomeLeaflets.ts
··· 4 4 import { makeRoute } from "../lib"; 5 5 import type { Env } from "./route"; 6 6 import { scanIndexLocal } from "src/replicache/utils"; 7 - import { getBlocksWithTypeLocal } from "src/hooks/queries/useBlocks"; 8 7 import * as base64 from "base64-js"; 9 8 import { YJSFragmentToString } from "components/Blocks/TextBlock/RenderYJSFragment"; 10 9 import { applyUpdate, Doc } from "yjs"; ··· 35 34 let scan = scanIndexLocal(facts[token]); 36 35 let [root] = scan.eav(token, "root/page"); 37 36 let rootEntity = root?.data.value || token; 38 - let [title] = getBlocksWithTypeLocal(facts[token], rootEntity).filter( 39 - (b) => b.type === "text" || b.type === "heading", 40 - ); 37 + 38 + // Check page type to determine which blocks to look up 39 + let [pageType] = scan.eav(rootEntity, "page/type"); 40 + let isCanvas = pageType?.data.value === "canvas"; 41 + 42 + // Get blocks and sort by position 43 + let rawBlocks = isCanvas 44 + ? scan.eav(rootEntity, "canvas/block").sort((a, b) => { 45 + if (a.data.position.y === b.data.position.y) 46 + return a.data.position.x - b.data.position.x; 47 + return a.data.position.y - b.data.position.y; 48 + }) 49 + : scan.eav(rootEntity, "card/block").sort((a, b) => { 50 + if (a.data.position === b.data.position) 51 + return a.id > b.id ? 1 : -1; 52 + return a.data.position > b.data.position ? 1 : -1; 53 + }); 54 + 55 + // Map to get type and filter for text/heading 56 + let blocks = rawBlocks 57 + .map((b) => { 58 + let type = scan.eav(b.data.value, "block/type")[0]; 59 + if ( 60 + !type || 61 + (type.data.value !== "text" && type.data.value !== "heading") 62 + ) 63 + return null; 64 + return b.data; 65 + }) 66 + .filter((b): b is NonNullable<typeof b> => b !== null); 67 + 68 + let title = blocks[0]; 69 + 41 70 if (!title) titles[token] = "Untitled"; 42 71 else { 43 72 let [content] = scan.eav(title.value, "block/text");
+3 -1
app/lish/[did]/[publication]/dashboard/DraftList.tsx
··· 26 26 cardBorderHidden={!props.showPageBackground} 27 27 leaflets={leaflets_in_publications 28 28 .filter((l) => !l.documents) 29 + .filter((l) => !l.archived) 29 30 .map((l) => { 30 31 return { 32 + archived: l.archived, 33 + added_at: "", 31 34 token: { 32 35 ...l.permission_tokens!, 33 36 leaflets_in_publications: [ ··· 39 42 }, 40 43 ], 41 44 }, 42 - added_at: "", 43 45 }; 44 46 })} 45 47 initialFacts={pub_data.leaflet_data.facts || {}}
+22 -2
app/lish/[did]/[publication]/dashboard/PublicationSWRProvider.tsx
··· 2 2 3 3 import type { GetPublicationDataReturnType } from "app/api/rpc/[command]/get_publication_data"; 4 4 import { callRPC } from "app/api/rpc/client"; 5 - import { createContext, useContext } from "react"; 6 - import useSWR, { SWRConfig } from "swr"; 5 + import { createContext, useContext, useEffect } from "react"; 6 + import useSWR, { SWRConfig, KeyedMutator, mutate } from "swr"; 7 + import { produce, Draft } from "immer"; 8 + 9 + export type PublicationData = GetPublicationDataReturnType["result"]; 7 10 8 11 const PublicationContext = createContext({ name: "", did: "" }); 9 12 export function PublicationSWRDataProvider(props: { ··· 13 16 children: React.ReactNode; 14 17 }) { 15 18 let key = `publication-data-${props.publication_did}-${props.publication_rkey}`; 19 + useEffect(() => { 20 + console.log("UPDATING"); 21 + mutate(key, props.publication_data); 22 + }, [props.publication_data]); 16 23 return ( 17 24 <PublicationContext 18 25 value={{ name: props.publication_rkey, did: props.publication_did }} ··· 41 48 ); 42 49 return { data, mutate }; 43 50 } 51 + 52 + export function mutatePublicationData( 53 + mutate: KeyedMutator<PublicationData>, 54 + recipe: (draft: Draft<NonNullable<PublicationData>>) => void, 55 + ) { 56 + mutate( 57 + (data) => { 58 + if (!data) return data; 59 + return produce(data, recipe); 60 + }, 61 + { revalidate: false }, 62 + ); 63 + }
+92 -106
app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx
··· 18 18 import { QuoteTiny } from "components/Icons/QuoteTiny"; 19 19 import { CommentTiny } from "components/Icons/CommentTiny"; 20 20 import { useLocalizedDate } from "src/hooks/useLocalizedDate"; 21 + import { LeafletOptions } from "app/(home-pages)/home/LeafletList/LeafletOptions"; 21 22 22 23 export function PublishedPostsList(props: { 23 24 searchValue: string; ··· 57 58 let quotes = doc.documents.document_mentions_in_bsky[0]?.count || 0; 58 59 let comments = doc.documents.comments_on_documents[0]?.count || 0; 59 60 61 + let postLink = data?.publication 62 + ? `${getPublicationURL(data?.publication)}/${new AtUri(doc.documents.uri).rkey}` 63 + : ""; 64 + 60 65 return ( 61 66 <Fragment key={doc.documents?.uri}> 62 67 <div className="flex gap-2 w-full "> ··· 80 85 </a> 81 86 <div className="flex justify-start align-top flex-row gap-1"> 82 87 {leaflet && ( 83 - <SpeedyLink 84 - className="pt-[6px]" 85 - href={`/${leaflet.leaflet}`} 86 - > 87 - <EditTiny /> 88 - </SpeedyLink> 88 + <> 89 + <SpeedyLink 90 + className="pt-[6px]" 91 + href={`/${leaflet.leaflet}`} 92 + > 93 + <EditTiny /> 94 + </SpeedyLink> 95 + 96 + <LeafletOptions 97 + leaflet={leaflet?.permission_tokens!} 98 + document_uri={doc.documents.uri} 99 + shareLink={postLink} 100 + loggedIn={true} 101 + /> 102 + </> 89 103 )} 90 - <Options document_uri={doc.documents.uri} /> 91 104 </div> 92 105 </div> 93 106 ··· 133 146 ); 134 147 } 135 148 136 - let Options = (props: { document_uri: string }) => { 137 - return ( 138 - <Menu 139 - align="end" 140 - alignOffset={20} 141 - asChild 142 - trigger={ 143 - <button className="text-secondary rounded-md selected-outline border-transparent! hover:border-border! h-min"> 144 - <MoreOptionsVerticalTiny /> 145 - </button> 146 - } 147 - > 148 - <> 149 - <OptionsMenu document_uri={props.document_uri} /> 150 - </> 151 - </Menu> 152 - ); 153 - }; 149 + // function OptionsMenu(props: { document_uri: string }) { 150 + // let { mutate, data } = usePublicationData(); 151 + // let [state, setState] = useState<"normal" | "confirm">("normal"); 154 152 155 - function OptionsMenu(props: { document_uri: string }) { 156 - let { mutate, data } = usePublicationData(); 157 - let [state, setState] = useState<"normal" | "confirm">("normal"); 158 - 159 - let postLink = data?.publication 160 - ? `${getPublicationURL(data?.publication)}/${new AtUri(props.document_uri).rkey}` 161 - : null; 153 + // if (state === "normal") { 154 + // return ( 155 + // <> 156 + // <ShareButton 157 + // className="justify-end" 158 + // text={ 159 + // <div className="flex gap-2"> 160 + // Share Post Link 161 + // <ShareSmall /> 162 + // </div> 163 + // } 164 + // subtext="" 165 + // smokerText="Post link copied!" 166 + // id="get-post-link" 167 + // fullLink={postLink?.includes("https") ? postLink : undefined} 168 + // link={postLink} 169 + // /> 162 170 163 - if (state === "normal") { 164 - return ( 165 - <> 166 - <ShareButton 167 - className="justify-end" 168 - text={ 169 - <div className="flex gap-2"> 170 - Share Post Link 171 - <ShareSmall /> 172 - </div> 173 - } 174 - subtext="" 175 - smokerText="Post link copied!" 176 - id="get-post-link" 177 - fullLink={postLink?.includes("https") ? postLink : undefined} 178 - link={postLink} 179 - /> 180 - 181 - <hr className="border-border-light" /> 182 - <MenuItem 183 - className="justify-end" 184 - onSelect={async (e) => { 185 - e.preventDefault(); 186 - setState("confirm"); 187 - return; 188 - }} 189 - > 190 - Delete Post 191 - <DeleteSmall /> 192 - </MenuItem> 193 - </> 194 - ); 195 - } 196 - if (state === "confirm") { 197 - return ( 198 - <div className="flex flex-col items-center font-bold text-secondary px-2 py-1"> 199 - Are you sure? 200 - <div className="text-sm text-tertiary font-normal"> 201 - This action cannot be undone! 202 - </div> 203 - <ButtonPrimary 204 - className="mt-2" 205 - onClick={async () => { 206 - await mutate((data) => { 207 - if (!data) return data; 208 - return { 209 - ...data, 210 - publication: { 211 - ...data.publication!, 212 - leaflets_in_publications: 213 - data.publication?.leaflets_in_publications.filter( 214 - (l) => l.doc !== props.document_uri, 215 - ) || [], 216 - documents_in_publications: 217 - data.publication?.documents_in_publications.filter( 218 - (d) => d.documents?.uri !== props.document_uri, 219 - ) || [], 220 - }, 221 - }; 222 - }, false); 223 - await deletePost(props.document_uri); 224 - }} 225 - > 226 - Delete 227 - </ButtonPrimary> 228 - </div> 229 - ); 230 - } 231 - } 171 + // <hr className="border-border-light" /> 172 + // <MenuItem 173 + // className="justify-end" 174 + // onSelect={async (e) => { 175 + // e.preventDefault(); 176 + // setState("confirm"); 177 + // return; 178 + // }} 179 + // > 180 + // Delete Post 181 + // <DeleteSmall /> 182 + // </MenuItem> 183 + // </> 184 + // ); 185 + // } 186 + // if (state === "confirm") { 187 + // return ( 188 + // <div className="flex flex-col items-center font-bold text-secondary px-2 py-1"> 189 + // Are you sure? 190 + // <div className="text-sm text-tertiary font-normal"> 191 + // This action cannot be undone! 192 + // </div> 193 + // <ButtonPrimary 194 + // className="mt-2" 195 + // onClick={async () => { 196 + // await mutate((data) => { 197 + // if (!data) return data; 198 + // return { 199 + // ...data, 200 + // publication: { 201 + // ...data.publication!, 202 + // leaflets_in_publications: 203 + // data.publication?.leaflets_in_publications.filter( 204 + // (l) => l.doc !== props.document_uri, 205 + // ) || [], 206 + // documents_in_publications: 207 + // data.publication?.documents_in_publications.filter( 208 + // (d) => d.documents?.uri !== props.document_uri, 209 + // ) || [], 210 + // }, 211 + // }; 212 + // }, false); 213 + // await deletePost(props.document_uri); 214 + // }} 215 + // > 216 + // Delete 217 + // </ButtonPrimary> 218 + // </div> 219 + // ); 220 + // } 221 + //} 232 222 233 223 function PublishedDate(props: { dateString: string }) { 234 224 const formattedDate = useLocalizedDate(props.dateString, { ··· 237 227 day: "2-digit", 238 228 }); 239 229 240 - return ( 241 - <p className="text-sm text-tertiary"> 242 - Published {formattedDate} 243 - </p> 244 - ); 230 + return <p className="text-sm text-tertiary">Published {formattedDate}</p>; 245 231 }
+23
app/lish/[did]/[publication]/dashboard/deletePost.ts
··· 30 30 .delete() 31 31 .eq("doc", document_uri), 32 32 ]); 33 + 34 + return revalidatePath("/lish/[did]/[publication]/dashboard", "layout"); 35 + } 36 + 37 + export async function unpublishPost(document_uri: string) { 38 + let identity = await getIdentityData(); 39 + if (!identity || !identity.atp_did) throw new Error("No Identity"); 40 + 41 + const oauthClient = await createOauthClient(); 42 + let credentialSession = await oauthClient.restore(identity.atp_did); 43 + let agent = new AtpBaseClient( 44 + credentialSession.fetchHandler.bind(credentialSession), 45 + ); 46 + let uri = new AtUri(document_uri); 47 + if (uri.host !== identity.atp_did) return; 48 + 49 + await Promise.all([ 50 + agent.pub.leaflet.document.delete({ 51 + repo: credentialSession.did, 52 + rkey: uri.rkey, 53 + }), 54 + supabaseServerClient.from("documents").delete().eq("uri", document_uri), 55 + ]); 33 56 return revalidatePath("/lish/[did]/[publication]/dashboard", "layout"); 34 57 }
-1
app/lish/createPub/UpdatePubForm.tsx
··· 66 66 if (!pubData) return; 67 67 e.preventDefault(); 68 68 props.setLoadingAction(true); 69 - console.log("step 1:update"); 70 69 let data = await updatePublication({ 71 70 uri: pubData.uri, 72 71 name: nameValue,
+1
app/lish/createPub/createPublication.ts
··· 101 101 await supabaseServerClient 102 102 .from("custom_domains") 103 103 .insert({ domain, confirmed: true, identity: null }); 104 + 104 105 await supabaseServerClient 105 106 .from("publication_domains") 106 107 .insert({ domain, publication: result.uri, identity: identity.atp_did });
-159
app/templates/TemplateList.tsx
··· 1 - "use client"; 2 - 3 - import { ButtonPrimary } from "components/Buttons"; 4 - import Image from "next/image"; 5 - import Link from "next/link"; 6 - import { createNewLeafletFromTemplate } from "actions/createNewLeafletFromTemplate"; 7 - import { AddTiny } from "components/Icons/AddTiny"; 8 - 9 - export function LeafletTemplate(props: { 10 - title: string; 11 - description?: string; 12 - image: string; 13 - alt: string; 14 - templateID: string; // readonly id for the leaflet that will be duplicated 15 - }) { 16 - return ( 17 - <div className="flex flex-col gap-4"> 18 - <div className="flex flex-col gap-2"> 19 - <div className="max-w-[274px] h-[154px] relative"> 20 - <Image 21 - className="absolute top-0 left-0 rounded-md w-full h-full object-cover" 22 - src={props.image} 23 - alt={props.alt} 24 - width={274} 25 - height={154} 26 - /> 27 - </div> 28 - </div> 29 - <div className={`flex flex-col ${props.description ? "gap-4" : "gap-2"}`}> 30 - <div className="gap-0"> 31 - <h3 className="font-bold text-center text-secondary"> 32 - {props.title} 33 - </h3> 34 - {props.description && ( 35 - <div className="text-tertiary text-sm font-normal text-center"> 36 - {props.description} 37 - </div> 38 - )} 39 - </div> 40 - <div className="flex sm:flex-row flex-col gap-2 justify-center items-center bottom-4"> 41 - <Link 42 - href={`https://leaflet.pub/` + props.templateID} 43 - target="_blank" 44 - className="no-underline hover:no-underline" 45 - > 46 - <ButtonPrimary className="bg-primary hover:outline-hidden! hover:scale-105 hover:rotate-3 transition-all"> 47 - Preview 48 - </ButtonPrimary> 49 - </Link> 50 - <ButtonPrimary 51 - className=" hover:outline-hidden! hover:scale-105 hover:-rotate-2 transition-all" 52 - onClick={async () => { 53 - let id = await createNewLeafletFromTemplate( 54 - props.templateID, 55 - false, 56 - ); 57 - window.open(`/${id}`, "_blank"); 58 - }} 59 - > 60 - Create 61 - <AddTiny /> 62 - </ButtonPrimary> 63 - </div> 64 - </div> 65 - </div> 66 - ); 67 - } 68 - 69 - export function TemplateList(props: { 70 - name: string; 71 - description?: string; 72 - children: React.ReactNode; 73 - }) { 74 - return ( 75 - <div className="templateLeafletGrid flex flex-col gap-6"> 76 - <div className="flex flex-col gap-0 text-center"> 77 - <h3 className="text-[24px]">{props.name}</h3> 78 - <p className="text-secondary">{props.description}</p> 79 - </div> 80 - <div className="grid auto-rows-max md:grid-cols-4 sm:grid-cols-3 grid-cols-2 gap-y-8 gap-x-6 sm:gap-6 grow pb-8"> 81 - {props.children} 82 - </div> 83 - </div> 84 - ); 85 - } 86 - 87 - export function TemplateListThemes() { 88 - return ( 89 - <> 90 - <TemplateList 91 - name="Themes" 92 - description="A small sampling of Leaflet's infinite theme possibilities!" 93 - > 94 - <LeafletTemplate 95 - title="Foliage" 96 - image="/templates/template-foliage-548x308.jpg" 97 - alt="preview image of Foliage theme, with lots of green and leafy bg" 98 - templateID="e4323c1d-15c1-407d-afaf-e5d772a35f0e" 99 - /> 100 - <LeafletTemplate 101 - title="Lunar" 102 - image="/templates/template-lunar-548x308.jpg" 103 - alt="preview image of Lunar theme, with dark grey, red, and moon bg" 104 - templateID="219d14ab-096c-4b48-83ee-36446e335c3e" 105 - /> 106 - <LeafletTemplate 107 - title="Paper" 108 - image="/templates/template-paper-548x308.jpg" 109 - alt="preview image of Paper theme, with red, gold, green and marbled paper bg" 110 - templateID="9b28ceea-0220-42ac-87e6-3976d156f653" 111 - /> 112 - <LeafletTemplate 113 - title="Oceanic" 114 - image="/templates/template-oceanic-548x308.jpg" 115 - alt="preview image of Oceanic theme, with dark and light blue and ocean bg" 116 - templateID="a65a56d7-713d-437e-9c42-f18bdc6fe2a7" 117 - /> 118 - </TemplateList> 119 - </> 120 - ); 121 - } 122 - 123 - export function TemplateListExamples() { 124 - return ( 125 - <TemplateList 126 - name="Examples" 127 - description="Creative documents you can make and share with Leaflet" 128 - > 129 - <LeafletTemplate 130 - title="Reading List" 131 - description="Make a list for your own reading, or share recs with friends!" 132 - image="/templates/template-reading-548x308.jpg" 133 - alt="preview image of Reading List template, with a few sections and example books as sub-pages" 134 - templateID="a5655b68-fe7a-4494-bda6-c9847523b2f6" 135 - /> 136 - <LeafletTemplate 137 - title="Travel Plan" 138 - description="Organize a trip — notes, logistics, itinerary, even a shared scrapbook" 139 - image="/templates/template-travel-548x308.jpg" 140 - alt="preview image of a Travel Plan template, with pages for itinerary, logistics, research, and a travel diary canvas" 141 - templateID="4d6f1392-dfd3-4015-925d-df55b7da5566" 142 - /> 143 - <LeafletTemplate 144 - title="Gift Guide" 145 - description="Share your favorite things — products, restaurants, movies…" 146 - image="/templates/template-gift-548x308.jpg" 147 - alt="preview image for a Gift Guide template, with three blank canvases for different categories" 148 - templateID="de73df29-35d9-4a43-a441-7ce45ad3b498" 149 - /> 150 - <LeafletTemplate 151 - title="Event Page" 152 - description="Host an event — from a single meetup, to a whole conference!" 153 - image="/templates/template-event-548x308.jpg" 154 - alt="preview image for an Event Page template, with an event info section and linked pages / canvases for more info" 155 - templateID="23d8a4ec-b2f6-438a-933d-726d2188974d" 156 - /> 157 - </TemplateList> 158 - ); 159 - }
-108
app/templates/icon.tsx
··· 1 - // NOTE: duplicated from home/icon.tsx 2 - // we could make it different so it's clear it's not your personal colors? 3 - 4 - import { ImageResponse } from "next/og"; 5 - import type { Fact } from "src/replicache"; 6 - import type { Attribute } from "src/replicache/attributes"; 7 - import { Database } from "../../supabase/database.types"; 8 - import { createServerClient } from "@supabase/ssr"; 9 - import { parseHSBToRGB } from "src/utils/parseHSB"; 10 - import { cookies } from "next/headers"; 11 - 12 - // Route segment config 13 - export const revalidate = 0; 14 - export const preferredRegion = ["sfo1"]; 15 - export const dynamic = "force-dynamic"; 16 - export const fetchCache = "force-no-store"; 17 - 18 - // Image metadata 19 - export const size = { 20 - width: 32, 21 - height: 32, 22 - }; 23 - export const contentType = "image/png"; 24 - 25 - // Image generation 26 - let supabase = createServerClient<Database>( 27 - process.env.NEXT_PUBLIC_SUPABASE_API_URL as string, 28 - process.env.SUPABASE_SERVICE_ROLE_KEY as string, 29 - { cookies: {} }, 30 - ); 31 - export default async function Icon() { 32 - let cookieStore = await cookies(); 33 - let identity = cookieStore.get("identity"); 34 - let rootEntity: string | null = null; 35 - if (identity) { 36 - let res = await supabase 37 - .from("identities") 38 - .select( 39 - `*, 40 - permission_tokens!identities_home_page_fkey(*, permission_token_rights(*)), 41 - permission_token_on_homepage( 42 - *, permission_tokens(*, permission_token_rights(*)) 43 - ) 44 - `, 45 - ) 46 - .eq("id", identity?.value) 47 - .single(); 48 - rootEntity = res.data?.permission_tokens?.root_entity || null; 49 - } 50 - let outlineColor, fillColor; 51 - if (rootEntity) { 52 - let { data } = await supabase.rpc("get_facts", { 53 - root: rootEntity, 54 - }); 55 - let initialFacts = (data as unknown as Fact<Attribute>[]) || []; 56 - let themePageBG = initialFacts.find( 57 - (f) => f.attribute === "theme/card-background", 58 - ) as Fact<"theme/card-background"> | undefined; 59 - 60 - let themePrimary = initialFacts.find( 61 - (f) => f.attribute === "theme/primary", 62 - ) as Fact<"theme/primary"> | undefined; 63 - 64 - outlineColor = parseHSBToRGB(`hsba(${themePageBG?.data.value})`); 65 - 66 - fillColor = parseHSBToRGB(`hsba(${themePrimary?.data.value})`); 67 - } 68 - 69 - return new ImageResponse( 70 - ( 71 - // ImageResponse JSX element 72 - <div style={{ display: "flex" }}> 73 - <svg 74 - width="32" 75 - height="32" 76 - viewBox="0 0 32 32" 77 - fill="none" 78 - xmlns="http://www.w3.org/2000/svg" 79 - > 80 - {/* outline */} 81 - <path 82 - fillRule="evenodd" 83 - clipRule="evenodd" 84 - d="M3.09628 21.8809C2.1044 23.5376 1.19806 25.3395 0.412496 27.2953C-0.200813 28.8223 0.539843 30.5573 2.06678 31.1706C3.59372 31.7839 5.32873 31.0433 5.94204 29.5163C6.09732 29.1297 6.24696 28.7489 6.39151 28.3811L6.39286 28.3777C6.94334 26.9769 7.41811 25.7783 7.99246 24.6987C8.63933 24.6636 9.37895 24.6582 10.2129 24.6535L10.3177 24.653C11.8387 24.6446 13.6711 24.6345 15.2513 24.3147C16.8324 23.9947 18.789 23.2382 19.654 21.2118C19.8881 20.6633 20.1256 19.8536 19.9176 19.0311C19.98 19.0311 20.044 19.031 20.1096 19.031C20.1447 19.031 20.1805 19.0311 20.2169 19.0311C21.0513 19.0316 22.2255 19.0324 23.2752 18.7469C24.5 18.4137 25.7878 17.6248 26.3528 15.9629C26.557 15.3624 26.5948 14.7318 26.4186 14.1358C26.4726 14.1262 26.528 14.1165 26.5848 14.1065C26.6121 14.1018 26.6398 14.0969 26.6679 14.092C27.3851 13.9667 28.3451 13.7989 29.1653 13.4921C29.963 13.1936 31.274 12.5268 31.6667 10.9987C31.8906 10.1277 31.8672 9.20568 31.3642 8.37294C31.1551 8.02669 30.889 7.75407 30.653 7.55302C30.8728 7.27791 31.1524 6.89517 31.345 6.47292C31.6791 5.74032 31.8513 4.66394 31.1679 3.61078C30.3923 2.4155 29.0623 2.2067 28.4044 2.1526C27.7203 2.09635 26.9849 2.15644 26.4564 2.2042C26.3846 2.02839 26.2858 1.84351 26.1492 1.66106C25.4155 0.681263 24.2775 0.598914 23.6369 0.61614C22.3428 0.650943 21.3306 1.22518 20.5989 1.82076C20.2149 2.13334 19.8688 2.48545 19.5698 2.81786C18.977 2.20421 18.1625 1.90193 17.3552 1.77751C15.7877 1.53594 14.5082 2.58853 13.6056 3.74374C12.4805 5.18375 11.7295 6.8566 10.7361 8.38059C10.3814 8.14984 9.83685 7.89945 9.16529 7.93065C8.05881 7.98204 7.26987 8.73225 6.79424 9.24551C5.96656 10.1387 5.46273 11.5208 5.10424 12.7289C4.71615 14.0368 4.38077 15.5845 4.06569 17.1171C3.87054 18.0664 3.82742 18.5183 4.01638 20.2489C3.43705 21.1826 3.54993 21.0505 3.09628 21.8809Z" 85 - fill={outlineColor ? outlineColor : "#FFFFFF"} 86 - /> 87 - 88 - {/* fill */} 89 - <path 90 - fillRule="evenodd" 91 - clipRule="evenodd" 92 - d="M9.86889 10.2435C10.1927 10.528 10.5723 10.8615 11.3911 10.5766C11.9265 10.3903 12.6184 9.17682 13.3904 7.82283C14.5188 5.84367 15.8184 3.56431 17.0505 3.7542C18.5368 3.98325 18.4453 4.80602 18.3749 5.43886C18.3255 5.88274 18.2866 6.23317 18.8098 6.21972C19.3427 6.20601 19.8613 5.57971 20.4632 4.8529C21.2945 3.84896 22.2847 2.65325 23.6906 2.61544C24.6819 2.58879 24.6663 3.01595 24.6504 3.44913C24.6403 3.72602 24.63 4.00537 24.8826 4.17024C25.1314 4.33266 25.7571 4.2759 26.4763 4.21065C27.6294 4.10605 29.023 3.97963 29.4902 4.6995C29.9008 5.33235 29.3776 5.96135 28.8762 6.56423C28.4514 7.07488 28.0422 7.56679 28.2293 8.02646C28.3819 8.40149 28.6952 8.61278 29.0024 8.81991C29.5047 9.15866 29.9905 9.48627 29.7297 10.5009C29.4539 11.5737 27.7949 11.8642 26.2398 12.1366C24.937 12.3647 23.7072 12.5801 23.4247 13.2319C23.2475 13.6407 23.5414 13.8311 23.8707 14.0444C24.2642 14.2992 24.7082 14.5869 24.4592 15.3191C23.8772 17.031 21.9336 17.031 20.1095 17.0311C18.5438 17.0311 17.0661 17.0311 16.6131 18.1137C16.3515 18.7387 16.7474 18.849 17.1818 18.9701C17.7135 19.1183 18.3029 19.2826 17.8145 20.4267C16.8799 22.6161 13.3934 22.6357 10.2017 22.6536C9.03136 22.6602 7.90071 22.6665 6.95003 22.7795C6.84152 22.7924 6.74527 22.8547 6.6884 22.948C5.81361 24.3834 5.19318 25.9622 4.53139 27.6462C4.38601 28.0162 4.23862 28.3912 4.08611 28.7709C3.88449 29.2729 3.31413 29.5163 2.81217 29.3147C2.31021 29.1131 2.06673 28.5427 2.26834 28.0408C3.01927 26.1712 3.88558 24.452 4.83285 22.8739C6.37878 20.027 9.42621 16.5342 12.6488 13.9103C15.5162 11.523 18.2544 9.73614 21.4413 8.38026C21.8402 8.21054 21.7218 7.74402 21.3053 7.86437C18.4789 8.68119 15.9802 10.3013 13.3904 11.9341C10.5735 13.71 8.21288 16.1115 6.76027 17.8575C6.50414 18.1653 5.94404 17.9122 6.02468 17.5199C6.65556 14.4512 7.30668 11.6349 8.26116 10.605C9.16734 9.62708 9.47742 9.8995 9.86889 10.2435Z" 93 - fill={fillColor ? fillColor : "#272727"} 94 - /> 95 - </svg> 96 - </div> 97 - ), 98 - // ImageResponse options 99 - { 100 - // For convenience, we can re-use the exported icons size metadata 101 - // config to also set the ImageResponse's width and height. 102 - ...size, 103 - headers: { 104 - "Cache-Control": "no-cache", 105 - }, 106 - }, 107 - ); 108 - }
-29
app/templates/page.tsx
··· 1 - import Link from "next/link"; 2 - import { TemplateListExamples, TemplateListThemes } from "./TemplateList"; 3 - import { ActionButton } from "components/ActionBar/ActionButton"; 4 - import { HomeSmall } from "components/Icons/HomeSmall"; 5 - 6 - export const metadata = { 7 - title: "Leaflet Templates", 8 - description: "example themes and documents you can use!", 9 - }; 10 - 11 - export default function Templates() { 12 - return ( 13 - <div className="flex h-full bg-bg-leaflet"> 14 - <div className="home relative max-w-(--breakpoint-lg) w-full h-full mx-auto flex sm:flex-row flex-col-reverse px-4 sm:px-6 "> 15 - <div className="homeOptions z-10 shrink-0 sm:static absolute bottom-0 place-self-end sm:place-self-start flex sm:flex-col flex-row-reverse gap-2 sm:w-fit w-full items-center pb-2 pt-1 sm:pt-7"> 16 - {/* NOT using <HomeButton /> b/c it does a permission check we don't need */} 17 - <Link href="/home"> 18 - <ActionButton icon={<HomeSmall />} label="Go Home" /> 19 - </Link> 20 - </div> 21 - <div className="flex flex-col gap-10 py-6 pt-3 sm:pt-6 sm:pb-12 sm:pl-6 grow w-full h-full overflow-y-scroll no-scrollbar"> 22 - <h1 className="text-center">Template Library</h1> 23 - <TemplateListThemes /> 24 - <TemplateListExamples /> 25 - </div> 26 - </div> 27 - </div> 28 - ); 29 - }
+1
components/ActionBar/Publications.tsx
··· 105 105 side="right" 106 106 align="start" 107 107 className="p-1! max-w-56" 108 + asChild 108 109 trigger={ 109 110 <ActionButton 110 111 label="Publish"
+1
components/HomeButton.tsx
··· 52 52 permission_token_on_homepage: [ 53 53 ...identity.permission_token_on_homepage, 54 54 { 55 + archived: null, 55 56 created_at: new Date().toISOString(), 56 57 permission_tokens: { 57 58 ...permission_token,
+21
components/Icons/ArchiveSmall.tsx
··· 1 + import { Props } from "./Props"; 2 + 3 + export const ArchiveSmall = (props: Props) => { 4 + return ( 5 + <svg 6 + width="24" 7 + height="24" 8 + viewBox="0 0 24 24" 9 + fill="none" 10 + xmlns="http://www.w3.org/2000/svg" 11 + {...props} 12 + > 13 + <path 14 + fillRule="evenodd" 15 + clipRule="evenodd" 16 + d="M14.3935 2.33729C14.4781 2.30741 14.5682 2.29611 14.6576 2.30415C14.7774 2.31514 14.897 2.32836 15.0165 2.34211C15.2401 2.36784 15.5571 2.40755 15.9337 2.46375C16.6844 2.57577 17.6834 2.755 18.6552 3.02334C20.043 3.40654 21.1623 4.08204 21.9307 4.65549C22.3161 4.94319 22.6172 5.20811 22.8237 5.40315C22.9788 5.5496 23.0813 5.6572 23.1271 5.70673C23.3287 5.92633 23.375 6.26081 23.1986 6.51162C23.0315 6.74906 22.723 6.84022 22.4537 6.73167C22.0456 6.56715 21.4938 6.48314 21.0486 6.65428C20.807 6.74717 20.531 6.94113 20.3218 7.3713L20.6009 7.19094C20.7969 7.06426 21.0472 7.05737 21.2499 7.17306C21.4527 7.28875 21.574 7.50775 21.5646 7.74096L21.2277 16.1284C21.2197 16.3285 21.1162 16.5127 20.9494 16.6237L11.9336 22.6232C11.7666 22.7343 11.5564 22.7585 11.3685 22.6883L2.23473 19.2743C2.00112 19.187 1.84179 18.9692 1.82933 18.7201L1.40252 10.1857C1.39041 9.94356 1.5194 9.71628 1.73347 9.60253L2.89319 8.98631C3.19801 8.82434 3.57642 8.94015 3.73838 9.24497C3.8855 9.52184 3.80344 9.85944 3.55872 10.0404L4.46834 10.3669C4.529 10.1684 4.63256 9.64884 4.57793 9.06783C4.51992 8.45086 4.29459 7.8533 3.74994 7.45779C3.09256 6.98978 2.55044 6.51789 2.315 6.27264C2.07596 6.02363 2.08403 5.62799 2.33304 5.38894C2.58204 5.14989 2.97769 5.15797 3.21674 5.40697C3.38499 5.58224 3.87255 6.01278 4.49863 6.45635C5.12762 6.90198 5.83958 7.31975 6.4589 7.5144C7.00579 7.68628 7.7553 7.62969 8.5369 7.43649C9.3015 7.24751 10.0054 6.95105 10.4074 6.74228C10.5756 6.65494 10.7743 6.64864 10.9477 6.72514C12.2233 7.28795 12.9191 8.50607 13.2891 9.66169C13.5067 10.3415 13.6259 11.0415 13.6803 11.6632L15.3414 10.5898C15.3412 10.5032 15.3407 10.4155 15.3403 10.3268C15.3336 9.034 15.3259 7.52674 16.0328 6.1972C15.7338 6.16682 15.3912 6.12949 15.0302 6.08539C13.9285 5.95083 12.5649 5.74352 11.7833 5.45362C11.0189 5.17008 10.3102 4.75223 9.80152 4.41446C9.6696 4.32685 9.54977 4.24371 9.4444 4.16843C9.26969 4.41598 9.11811 4.6909 8.99766 4.9675C8.79907 5.42358 8.71173 5.82238 8.71173 6.05267C8.71173 6.39784 8.43191 6.67767 8.08673 6.67767C7.74155 6.67767 7.46173 6.39784 7.46173 6.05267C7.46173 5.58769 7.61509 5.01162 7.8516 4.46846C8.09203 3.91632 8.44552 3.33542 8.89963 2.8725C9.12701 2.64071 9.4943 2.62192 9.74446 2.82883L9.74577 2.8299C9.80956 2.88191 9.87475 2.93223 9.94039 2.98188C10.0714 3.08094 10.2612 3.21923 10.493 3.37315C10.9612 3.68404 11.5799 4.04492 12.218 4.28164C12.8391 4.512 14.0548 4.70696 15.1817 4.84461C15.7313 4.91174 16.2384 4.96292 16.6084 4.99732C16.8076 5.01584 17.007 5.03362 17.2065 5.04896C17.4444 5.06698 17.6512 5.21883 17.7397 5.44036C17.8282 5.66191 17.7828 5.9145 17.6228 6.09143C16.7171 7.09276 16.6045 8.33681 16.5923 9.78143L18.8039 8.35222C18.7998 8.30706 18.8006 8.26075 18.8068 8.21391C19.0047 6.71062 19.6821 5.84043 20.6001 5.48753C20.6783 5.45746 20.7569 5.4317 20.8356 5.40989C20.1821 4.96625 19.3286 4.50604 18.3225 4.22826C17.4178 3.97844 16.4732 3.80809 15.7493 3.70006C15.3886 3.64625 15.0857 3.60832 14.8736 3.58392C14.8084 3.57642 14.7519 3.57021 14.705 3.56521C14.6894 3.57354 14.6728 3.58282 14.6556 3.59303C14.5489 3.65657 14.4711 3.72644 14.4347 3.7856C14.2538 4.07957 13.8688 4.17123 13.5749 3.99032C13.2809 3.80941 13.1892 3.42445 13.3701 3.13047C13.5575 2.82606 13.8293 2.63024 14.0162 2.51897C14.1352 2.44809 14.2601 2.38531 14.3906 2.33829L14.3921 2.33776L14.3935 2.33729ZM12.4675 12.447C12.4635 11.7846 12.3687 10.8866 12.0986 10.0428C11.8096 9.1402 11.353 8.39584 10.6886 7.99621C10.209 8.21933 9.54785 8.47423 8.83684 8.64998C7.98278 8.86108 6.96103 8.98249 6.08412 8.70689C5.98146 8.67463 5.87826 8.63824 5.77495 8.59834C5.79615 8.71819 5.81166 8.83611 5.82244 8.95081C5.89602 9.73333 5.75996 10.4455 5.64541 10.7895L11.68 12.9559L12.4675 12.447ZM4.77065 13.1487C4.60756 13.0891 4.43494 13.2099 4.43494 13.3835V14.9513C4.43494 15.1613 4.5662 15.3489 4.76351 15.421L8.55169 16.8036C8.71479 16.8631 8.88741 16.7423 8.88741 16.5687V15.001C8.88741 14.7909 8.75614 14.6033 8.55884 14.5313L4.77065 13.1487ZM2.69778 11.0594L11.1256 14.085L11.0552 17.5412C11.0482 17.8863 11.3222 18.1718 11.6673 18.1788C12.0124 18.1859 12.2979 17.9118 12.3049 17.5667L12.3778 13.9933L20.2673 8.89485L19.9915 15.7596L12.2366 20.9201L12.2469 20.4127C12.254 20.0676 11.9799 19.7821 11.6348 19.7751C11.2897 19.768 11.0042 20.0421 10.9972 20.3872L10.9804 21.2088L3.05725 18.2473L2.69778 11.0594Z" 17 + fill="currentColor" 18 + /> 19 + </svg> 20 + ); 21 + };
-21
components/Icons/TemplateRemoveSmall.tsx
··· 1 - import { Props } from "./Props"; 2 - 3 - export const TemplateRemoveSmall = (props: Props) => { 4 - return ( 5 - <svg 6 - width="24" 7 - height="24" 8 - viewBox="0 0 24 24" 9 - fill="none" 10 - xmlns="http://www.w3.org/2000/svg" 11 - {...props} 12 - > 13 - <path 14 - fillRule="evenodd" 15 - clipRule="evenodd" 16 - d="M21.6598 1.22969C22.0503 0.839167 22.6835 0.839167 23.074 1.22969C23.4646 1.62021 23.4646 2.25338 23.074 2.6439L21.9991 3.71887C22 3.72121 22.001 3.72355 22.002 3.7259L21.0348 4.69374C21.0347 4.69033 21.0345 4.68693 21.0344 4.68353L17.2882 8.42972L17.2977 8.43313L16.3813 9.35011L16.3714 9.34656L15.5955 10.1224L15.6058 10.1261L14.6894 11.0431L14.6787 11.0393L14.3959 11.3221L14.4067 11.326L13.4903 12.2429L13.479 12.2389L12.8919 12.8261L12.9034 12.8302L10.2156 15.5198L10.2028 15.5152L9.35969 16.3583C9.36255 16.3614 9.36541 16.3645 9.36826 16.3676L7.20585 18.5314C7.19871 18.5321 7.19159 18.5328 7.18448 18.5335L6.26611 19.4519C6.27069 19.4539 6.27528 19.4559 6.27989 19.4579L5.40679 20.3316C5.40244 20.3291 5.39809 20.3267 5.39376 20.3242L2.54817 23.1698C2.15765 23.5603 1.52448 23.5603 1.13396 23.1698C0.743434 22.7793 0.743433 22.1461 1.13396 21.7556L4.57518 18.3144C4.5862 18.296 4.59778 18.2779 4.6099 18.2599C4.72342 18.0917 4.86961 17.964 5.02393 17.8656L6.39488 16.4947C6.25376 16.4822 6.10989 16.4734 5.96441 16.4685C5.20904 16.4433 4.461 16.5264 3.88183 16.7201C3.2818 16.9207 2.99485 17.1912 2.91069 17.4452C2.80892 17.7525 2.47737 17.919 2.17013 17.8173C1.8629 17.7155 1.69634 17.3839 1.79811 17.0767C2.05627 16.2973 2.78206 15.852 3.51019 15.6085C4.2592 15.3581 5.15477 15.2689 6.00346 15.2972C6.48903 15.3133 6.97583 15.3686 7.42782 15.4617L8.11942 14.7701L7.89431 14.6896C7.7838 14.6501 7.69213 14.5705 7.63742 14.4667L5.91365 11.1952C5.86162 11.0964 5.84836 10.9944 5.86434 10.9002L5.85245 10.9196L5.11563 9.4308C4.96523 9.11293 5.04515 8.78343 5.24544 8.56361L5.25054 8.55806C5.25749 8.55058 5.26457 8.54323 5.2718 8.53601L6.43022 7.3457C6.6445 7.11834 6.97346 7.03892 7.26837 7.14439L9.80363 8.05107L12.9624 7.10485C13.1067 7.02062 13.2859 6.99834 13.4555 7.05901L14.4322 7.40831C14.7942 6.69891 14.93 5.89897 15.0777 5.02873L15.0777 5.02872L15.0958 4.9222C15.2586 3.96572 15.4529 2.86736 16.1798 2.04515C17.0056 1.11114 18.7307 0.837125 20.2663 1.83615C20.4285 1.94168 20.5821 2.05061 20.7266 2.16294L21.6598 1.22969ZM19.8899 2.99965C19.8075 2.93935 19.72 2.87895 19.6271 2.81856C18.4897 2.07854 17.4326 2.39759 17.0579 2.82147C16.5869 3.3541 16.4234 4.10723 16.2512 5.11887L16.2231 5.28522L16.2231 5.28523C16.1304 5.83581 16.0274 6.44661 15.8342 7.05527L19.8899 2.99965ZM14.288 8.60148L13.2682 8.23675L11.6654 8.71688L13.5122 9.37736L14.288 8.60148ZM12.5953 10.2942L9.59692 9.22187L9.58424 9.21734L7.10654 8.33124L6.82935 8.61605L12.3125 10.577L12.5953 10.2942ZM11.3957 11.4938L6.56005 9.76447L6.04788 10.6006C6.16458 10.5123 6.32269 10.4767 6.48628 10.5352L10.8085 12.081L11.3957 11.4938ZM17.0099 12.2569L16.2294 11.9778L15.313 12.8948L16.8798 13.4551L18.7426 16.9905L18.0747 17.8398L19.1912 18.2615C19.6607 18.4294 20.1033 18.1358 20.2179 17.728L20.7391 16.3648C20.824 16.1511 20.8112 15.9108 20.7039 15.7071L19.124 12.7086L18.8949 11.321L18.8931 11.3104L18.8904 11.2969C18.8874 11.234 18.8742 11.1705 18.8497 11.1087L18.3522 9.8537L16.5121 11.6949L16.5482 11.7078L16.5582 11.7115L17.1419 11.9202L17.0099 12.2569ZM12.0382 16.1716L14.7261 13.482L16.0553 13.9574C16.1658 13.9969 16.2575 14.0764 16.3122 14.1803L18.0359 17.4518C18.2352 17.83 17.8658 18.2557 17.4633 18.1118L12.0382 16.1716ZM8.44038 19.7717L7.26492 20.9479C7.80247 21.0274 8.35468 21.0252 8.82243 20.8811C9.24804 20.7499 9.52382 20.5096 9.73008 20.285C9.79978 20.2091 9.87046 20.1246 9.92979 20.0536L9.92981 20.0536L9.92999 20.0534L9.9306 20.0527C9.95072 20.0286 9.96953 20.0061 9.98653 19.9861C10.0618 19.8973 10.1248 19.8281 10.1905 19.7694C10.307 19.6651 10.4472 19.579 10.6908 19.5395C10.9182 19.5027 11.2529 19.5041 11.7567 19.6004C11.6943 19.6815 11.6359 19.764 11.5823 19.8476C11.3276 20.2439 11.1352 20.7322 11.2038 21.2293C11.3097 21.9955 11.8139 22.4463 12.3522 22.6544C12.8626 22.8518 13.4377 22.8513 13.8631 22.731C14.7279 22.4863 15.6213 21.724 15.4107 20.664C15.3105 20.1591 14.9656 19.7211 14.4516 19.3701C14.3677 19.3128 14.2783 19.2571 14.1833 19.203C14.5987 19.0436 14.9889 19.0051 15.2828 19.1025C15.59 19.2042 15.9215 19.0377 16.0233 18.7304C16.1251 18.4232 15.9585 18.0916 15.6513 17.9899C14.6724 17.6656 13.5751 18.0821 12.7766 18.6397C12.6141 18.5938 12.4436 18.5504 12.265 18.5097C11.5394 18.3444 10.9698 18.307 10.5035 18.3825C10.018 18.4612 9.67586 18.657 9.40877 18.8961C9.28262 19.009 9.17853 19.1268 9.09296 19.2277C9.06342 19.2625 9.03731 19.2937 9.0131 19.3227L9.01295 19.3228C8.9605 19.3856 8.91697 19.4377 8.86686 19.4922C8.73917 19.6313 8.63185 19.7134 8.47726 19.761C8.46519 19.7648 8.45289 19.7683 8.44038 19.7717ZM12.5683 20.4811C12.3863 20.7644 12.3505 20.965 12.3648 21.0689C12.4003 21.3259 12.5445 21.4722 12.7749 21.5613C13.0331 21.6611 13.3469 21.659 13.544 21.6032C14.1554 21.4302 14.2952 21.0637 14.2612 20.8923C14.2391 20.7814 14.1422 20.578 13.7907 20.338C13.6005 20.2082 13.347 20.076 13.0173 19.9508C12.8341 20.1242 12.681 20.3057 12.5683 20.4811Z" 17 - fill="currentColor" 18 - /> 19 - </svg> 20 - ); 21 - };
-25
components/Icons/TemplateSmall.tsx
··· 1 - import { Props } from "./Props"; 2 - 3 - export const TemplateSmall = (props: Props & { fill?: string }) => { 4 - return ( 5 - <svg 6 - width="24" 7 - height="24" 8 - viewBox="0 0 24 24" 9 - fill="none" 10 - xmlns="http://www.w3.org/2000/svg" 11 - {...props} 12 - > 13 - <path 14 - d="M14.1876 3.5073C14.3657 2.68428 14.8409 1.80449 15.1974 1.39941L15.2085 1.38682C15.5258 1.02605 16.1664 0.297788 17.7348 0.0551971C19.7272 -0.252968 22.338 1.22339 23.1781 3.53026C23.9464 5.63998 22.4863 7.65134 21.1778 8.49107C20.443 8.96256 19.8776 9.29865 19.5389 9.6655C19.6381 9.88024 19.8755 10.4623 19.9945 10.8588C20.1304 11.312 20.1356 11.8263 20.2444 12.3342C20.6412 13.1008 21.4615 14.6122 21.6483 14.9894C21.9441 15.5868 22.0637 16.0554 21.901 16.59C21.7793 16.99 21.3809 18.0037 21.2098 18.4064C21.1134 18.6333 20.6741 19.1794 20.165 19.3516C19.5207 19.5694 19.2 19.533 18.2867 19.1682C17.9231 19.3768 17.3068 19.3194 17.0874 19.2128C16.9902 19.5392 16.6234 19.8695 16.4353 20.0055C16.5008 20.1749 16.6684 20.619 16.5759 21.4191C16.4257 22.7176 14.6119 24.4819 12.2763 23.8544C10.5744 23.3971 10.2099 22.1002 10.0744 21.5462C8.16651 22.8209 5.74592 21.9772 4.43632 21.1133C3.44653 20.4603 3.16063 19.4467 3.2199 18.7888C2.57837 19.147 1.33433 19.2159 0.756062 17.9729C0.320217 17.036 0.838862 15.6535 2.49397 14.7706C3.56898 14.1971 5.01017 14.061 6.14456 14.136C5.47545 12.9417 4.17774 10.4051 3.97777 9.74456C3.72779 8.91889 3.94746 8.3129 4.30348 7.88113C4.6595 7.44936 5.21244 6.90396 5.75026 6.38129C6.28808 5.85862 7.06074 5.85862 7.7349 6.07072C8.27424 6.2404 9.36352 6.65146 9.84074 6.83578C10.5069 6.63086 11.9689 6.18102 12.4877 6.02101C13.0065 5.861 13.184 5.78543 13.7188 5.90996C13.8302 5.37643 14.0045 4.35336 14.1876 3.5073Z" 15 - fill={props.fill || "transparent"} 16 - /> 17 - <path 18 - fillRule="evenodd" 19 - clipRule="evenodd" 20 - d="M19.6271 2.81856C18.4896 2.07854 17.4326 2.39759 17.0578 2.82147C16.5869 3.3541 16.4234 4.10723 16.2512 5.11887L16.2231 5.28522L16.2231 5.28523C16.0919 6.06363 15.9405 6.96241 15.5423 7.80533L17.4557 8.48962C18.0778 7.71969 18.7304 7.28473 19.2974 6.92363L19.3687 6.87829C20.0258 6.46022 20.473 6.17579 20.7913 5.5972C21.0667 5.09643 21.0978 4.64884 20.9415 4.23092C20.7767 3.79045 20.3738 3.3044 19.6271 2.81856ZM15.0777 5.02873C14.9299 5.89897 14.7941 6.69891 14.4321 7.4083L13.4555 7.05901C13.2858 6.99834 13.1067 7.02061 12.9624 7.10485L9.80359 8.05107L7.26833 7.14438C6.97342 7.03892 6.64447 7.11834 6.43018 7.3457L5.27176 8.53601C5.26453 8.54323 5.25745 8.55058 5.2505 8.55806L5.2454 8.56361C5.04511 8.78343 4.9652 9.11292 5.1156 9.43079L5.85241 10.9196L5.8643 10.9002C5.84832 10.9944 5.86158 11.0964 5.91361 11.1952L7.63738 14.4667C7.6921 14.5705 7.78376 14.6501 7.89428 14.6896L17.4633 18.1118C17.8658 18.2557 18.2352 17.83 18.0359 17.4518L16.3121 14.1803C16.2574 14.0764 16.1657 13.9969 16.0552 13.9574L6.48624 10.5352C6.32266 10.4767 6.16454 10.5123 6.04784 10.6006L6.56002 9.76447L16.8798 13.4551L18.7426 16.9905L18.0747 17.8398L19.1912 18.2615C19.6606 18.4294 20.1033 18.1358 20.2179 17.728L20.7391 16.3648C20.8239 16.1511 20.8112 15.9108 20.7039 15.7071L19.124 12.7086L18.8949 11.321C18.8935 11.3129 18.892 11.3049 18.8904 11.2969C18.8874 11.234 18.8741 11.1705 18.8496 11.1087L18.1936 9.45372C18.7455 8.68856 19.3357 8.28878 19.927 7.9122C19.9681 7.88603 20.0096 7.85977 20.0514 7.83331C20.6663 7.44436 21.3511 7.01112 21.8182 6.16211C22.2345 5.40522 22.3314 4.60167 22.0392 3.82037C21.7555 3.06161 21.1334 2.40034 20.2662 1.83615C18.7307 0.837123 17.0056 1.11114 16.1798 2.04515C15.4528 2.86736 15.2586 3.96572 15.0958 4.92219L15.0777 5.02872L15.0777 5.02873ZM13.2681 8.23675L11.6653 8.71688L16.3567 10.3947L16.6254 9.4374L13.2681 8.23675ZM16.5481 11.7078L16.5582 11.7114L17.1419 11.9202L17.0098 12.2569L6.82932 8.61605L7.1065 8.33124L9.5842 9.21734L9.59688 9.22187L16.5481 11.7078ZM12.5683 20.4811C12.3863 20.7644 12.3505 20.965 12.3648 21.0689C12.4003 21.3259 12.5444 21.4722 12.7748 21.5613C13.0331 21.6611 13.3469 21.659 13.544 21.6032C14.1553 21.4302 14.2952 21.0637 14.2611 20.8923C14.2391 20.7814 14.1421 20.578 13.7906 20.338C13.6004 20.2082 13.3469 20.076 13.0173 19.9508C12.834 20.1242 12.681 20.3057 12.5683 20.4811ZM11.7567 19.6004C11.6942 19.6815 11.6359 19.764 11.5822 19.8476C11.3276 20.2439 11.1351 20.7322 11.2038 21.2293C11.3096 21.9955 11.8139 22.4463 12.3521 22.6544C12.8626 22.8518 13.4377 22.8513 13.863 22.731C14.7279 22.4863 15.6213 21.724 15.4107 20.664C15.3104 20.1591 14.9656 19.7211 14.4515 19.3701C14.3677 19.3128 14.2783 19.2571 14.1833 19.203C14.5987 19.0436 14.9889 19.0051 15.2827 19.1025C15.59 19.2042 15.9215 19.0377 16.0233 18.7304C16.125 18.4232 15.9585 18.0916 15.6513 17.9899C14.6724 17.6656 13.5751 18.0821 12.7766 18.6397C12.6141 18.5938 12.4436 18.5504 12.265 18.5097C11.5393 18.3444 10.9698 18.307 10.5034 18.3825C10.018 18.4612 9.67582 18.657 9.40873 18.8961C9.28258 19.009 9.17849 19.1268 9.09292 19.2277C9.06338 19.2625 9.03727 19.2937 9.01306 19.3227L9.01291 19.3228C8.96046 19.3856 8.91693 19.4377 8.86682 19.4922C8.73913 19.6313 8.63181 19.7134 8.47722 19.761C8.03942 19.896 7.30137 19.8237 6.60705 19.5851C6.27195 19.4699 5.98787 19.3293 5.79222 19.1916C5.64379 19.0871 5.59428 19.019 5.58047 19L5.58045 19C5.57827 18.997 5.57698 18.9952 5.57634 18.9947C5.57144 18.9579 5.57397 18.938 5.57539 18.9305C5.57674 18.9233 5.57829 18.9201 5.58128 18.9156C5.59031 18.9023 5.63142 18.8546 5.76375 18.7965C6.04383 18.6735 6.48291 18.6061 7.03421 18.5487C7.12534 18.5392 7.22003 18.5299 7.31675 18.5205L7.31734 18.5205L7.31774 18.5204C7.75337 18.478 8.22986 18.4315 8.60602 18.3399C8.83695 18.2837 9.10046 18.1956 9.31444 18.0333C9.55604 17.8501 9.73703 17.5659 9.72457 17.1949C9.71117 16.7955 9.50249 16.4807 9.2559 16.2553C9.01235 16.0327 8.69774 15.863 8.36729 15.7333C7.70363 15.4729 6.85166 15.3254 6.00343 15.2972C5.15473 15.2689 4.25916 15.3581 3.51015 15.6085C2.78202 15.852 2.05623 16.2973 1.79807 17.0767C1.6963 17.3839 1.86287 17.7155 2.1701 17.8173C2.47733 17.919 2.80889 17.7525 2.91065 17.4452C2.99481 17.1912 3.28176 16.9207 3.8818 16.7201C4.46096 16.5264 5.209 16.4433 5.96437 16.4685C6.7202 16.4937 7.43275 16.6256 7.93908 16.8243C8.19363 16.9243 8.36538 17.0292 8.46519 17.1204C8.4773 17.1315 8.4878 17.1419 8.49689 17.1515C8.45501 17.1668 8.39992 17.1838 8.3287 17.2012C8.04154 17.2711 7.67478 17.3072 7.24492 17.3496L7.24413 17.3497L7.24246 17.3498C7.13635 17.3603 7.02639 17.3711 6.91284 17.3829C6.38763 17.4376 5.76632 17.5153 5.29238 17.7234C5.0477 17.8309 4.78839 17.9954 4.60986 18.2599C4.42009 18.541 4.36482 18.8707 4.42432 19.213C4.49899 19.6426 4.83826 19.9534 5.11763 20.15C5.42736 20.368 5.81812 20.5533 6.22607 20.6935C7.01783 20.9656 8.03865 21.1226 8.82239 20.8811C9.248 20.7499 9.52379 20.5096 9.73004 20.285C9.79974 20.2091 9.87042 20.1246 9.92975 20.0536L9.92977 20.0536L9.92995 20.0534C9.9503 20.0291 9.96932 20.0063 9.98649 19.9861C10.0618 19.8973 10.1248 19.8281 10.1905 19.7694C10.3069 19.6651 10.4472 19.579 10.6908 19.5395C10.9181 19.5027 11.2529 19.5041 11.7567 19.6004Z" 21 - fill="currentColor" 22 - /> 23 - </svg> 24 - ); 25 - };
+19
components/Icons/UnpublishSmall.tsx
··· 1 + import { Props } from "./Props"; 2 + 3 + export const UnpublishSmall = (props: Props) => { 4 + return ( 5 + <svg 6 + width="24" 7 + height="24" 8 + viewBox="0 0 24 24" 9 + fill="none" 10 + xmlns="http://www.w3.org/2000/svg" 11 + {...props} 12 + > 13 + <path 14 + d="M15.5207 11.5526C15.9624 11.2211 16.5896 11.3101 16.9211 11.7518L18.9162 14.411L21.5754 12.4158C22.017 12.0845 22.6433 12.1735 22.9748 12.6151C23.306 13.0568 23.2172 13.684 22.7756 14.0155L20.1164 16.0106L22.1115 18.6698C22.4425 19.1114 22.3537 19.7378 21.9123 20.0692C21.4707 20.4006 20.8434 20.3114 20.5119 19.87L18.5168 17.2108L15.8576 19.2059C15.416 19.537 14.7897 19.4479 14.4582 19.0067C14.1267 18.565 14.2158 17.9378 14.6574 17.6063L17.3166 15.6112L15.3215 12.952C14.9902 12.5103 15.0792 11.8841 15.5207 11.5526ZM12.2062 4.29378C13.7932 3.59008 15.5128 3.49569 16.9767 4.29769C19.1391 5.48261 19.9471 8.15954 19.5314 10.8885C19.4793 11.2296 19.1606 11.4638 18.8195 11.4119C18.4786 11.3598 18.2444 11.042 18.2961 10.701C18.669 8.25384 17.8985 6.22855 16.3761 5.39436C15.5192 4.92484 14.4833 4.85746 13.4006 5.1805C13.3522 5.21491 13.3004 5.24633 13.2414 5.26644C13.0411 5.33451 12.8498 5.39707 12.6662 5.45686C12.6176 5.47894 12.5684 5.50065 12.5197 5.52425C11.1279 6.19898 9.77207 7.47892 8.81657 9.22249C7.86108 10.9662 7.51225 12.7985 7.69254 14.3348C7.87314 15.8723 8.57043 17.0593 9.65739 17.6551C10.3281 18.0226 11.1012 18.1431 11.9211 18.0272C12.2625 17.9791 12.5786 18.2161 12.6271 18.5575C12.6754 18.8992 12.4375 19.216 12.0959 19.2645C11.0448 19.4131 9.99397 19.2653 9.0568 18.7518C7.96346 18.1527 7.21589 17.1633 6.79801 15.9862C6.74111 15.914 6.69783 15.829 6.67692 15.7332C6.5875 15.3237 6.4571 14.8734 6.30387 14.4188C6.00205 14.7748 5.69607 15.0308 5.37419 15.1834C5.04355 15.3401 4.70719 15.3838 4.38102 15.327C4.06576 15.272 3.79527 15.129 3.57145 14.9696C2.96057 14.5342 2.36597 14.0627 1.89274 13.5487C1.4209 13.036 1.0333 12.4423 0.8986 11.7596C0.842171 11.4736 0.768809 11.1336 0.89274 10.5985C0.997303 10.1475 1.23987 9.57405 1.69059 8.73226L1.60758 8.66585C1.60246 8.66173 1.59696 8.65743 1.59196 8.65315C1.16612 8.2884 1.07023 7.69032 1.08708 7.21468C1.1054 6.69843 1.25893 6.12189 1.54411 5.6014C1.81576 5.10576 2.17253 4.65997 2.58903 4.35433C3.00424 4.04981 3.53772 3.84664 4.10661 3.97737C4.12165 3.98084 4.13775 3.98453 4.15251 3.98909L5.22575 4.3221C5.62556 4.21028 6.05447 4.1958 6.48747 4.32015L6.54801 4.34065L6.54997 4.34163C6.55156 4.34227 6.55431 4.34319 6.55778 4.34456C6.56529 4.34752 6.57742 4.35226 6.59294 4.35823C6.62402 4.3702 6.67024 4.3877 6.72868 4.40901C6.84618 4.45186 7.01173 4.50951 7.20133 4.56819C7.59399 4.6897 8.04168 4.79978 8.382 4.81624C9.99154 4.89405 10.8568 4.72942 12.2062 4.29378ZM12.5441 6.13655C13.7669 5.47408 15.1231 5.29219 16.256 5.91292C17.1747 6.41641 17.7296 7.33256 17.9572 8.39729C18.0148 8.66723 17.8433 8.93322 17.5734 8.99104C17.3035 9.04869 17.0375 8.8771 16.9797 8.60726C16.7956 7.74535 16.3745 7.11819 15.7756 6.78987C15.0408 6.38732 14.0621 6.45197 13.0216 7.01546C12.7704 7.15159 12.5186 7.31527 12.2716 7.50472C13.0464 8.19627 13.6187 8.92334 13.9347 9.64632C14.2881 10.4549 14.3328 11.2901 13.9328 12.0203C13.5333 12.7492 12.7922 13.1542 11.9211 13.2918C11.1394 13.4153 10.2177 13.3313 9.2277 13.0614C9.20118 13.3705 9.19947 13.6697 9.21989 13.9539C9.30483 15.1342 9.77626 15.9936 10.5109 16.3963C10.8983 16.6086 11.346 16.6898 11.8351 16.6405C12.1098 16.6128 12.3552 16.8131 12.383 17.0877C12.4107 17.3624 12.2103 17.6077 11.9357 17.6356C11.2725 17.7026 10.6177 17.5951 10.0304 17.2733C8.89778 16.6525 8.32161 15.4121 8.22184 14.0252C8.12182 12.6321 8.49018 11.0188 9.32243 9.49983C10.1548 7.98089 11.316 6.80199 12.5441 6.13655ZM2.67204 9.54866C2.32412 10.2204 2.17134 10.6184 2.11051 10.8807C2.04887 11.1469 2.07605 11.2695 2.12516 11.5184C2.19851 11.8898 2.4242 12.2809 2.81169 12.702C3.1981 13.1217 3.71082 13.5349 4.29606 13.952C4.42383 14.043 4.52152 14.0826 4.59489 14.0955C4.65746 14.1064 4.73234 14.1036 4.83805 14.0535C5.04286 13.9565 5.35376 13.6844 5.76383 13.035C5.42543 12.2826 5.08809 11.7185 4.84391 11.4735C4.57886 11.2075 4.20518 10.9304 3.87907 10.7108C3.71974 10.6035 3.57875 10.514 3.4777 10.452C3.42724 10.421 3.3866 10.3967 3.35954 10.3807C3.34614 10.3728 3.33581 10.366 3.32926 10.3621L3.32047 10.3582C3.29879 10.3457 3.278 10.3312 3.25797 10.3162C2.98299 10.1101 2.79521 9.83996 2.67204 9.54866ZM11.5216 8.17561C11.0336 8.67806 10.5807 9.28455 10.1994 9.9803C9.81804 10.6763 9.54956 11.3844 9.38883 12.0662C10.3261 12.3341 11.1364 12.4037 11.7648 12.3045C12.4323 12.1991 12.8487 11.9177 13.0558 11.5399C13.2683 11.1518 13.2832 10.6541 13.0177 10.0467C12.7657 9.47024 12.2702 8.82723 11.5216 8.17561ZM9.63883 6.07112C9.45477 6.07962 9.26355 6.08427 9.06266 6.08382C9.01613 6.11598 8.96536 6.1545 8.91032 6.20003C8.71163 6.36444 8.4977 6.58912 8.28434 6.84651C7.85781 7.36118 7.46925 7.96403 7.24626 8.37093C6.99703 8.82575 6.71681 9.39869 6.51969 9.97542C6.34987 10.4725 6.25688 10.9316 6.26969 11.3055C6.3691 11.4655 6.46736 11.6376 6.56266 11.8182C6.76355 10.7536 7.14751 9.66653 7.71989 8.6219C8.25537 7.64475 8.9105 6.78559 9.63883 6.07112ZM6.12516 5.51741C5.92665 5.46415 5.72213 5.47396 5.50895 5.54378C5.15736 5.78936 4.57147 6.28659 4.28727 6.81136C3.94853 7.43736 3.7629 8.31657 3.71598 8.67561C3.71568 8.67793 3.71436 8.68015 3.71403 8.68245C3.72929 8.72056 3.74152 8.76064 3.74919 8.80257C3.79805 9.07007 3.89591 9.222 3.99626 9.30354L3.99723 9.3055C4.02922 9.32447 4.07496 9.35213 4.13102 9.38655C4.24364 9.45571 4.40052 9.5546 4.57731 9.67366C4.82014 9.83722 5.11483 10.0498 5.39079 10.283C5.44136 10.068 5.50384 9.85578 5.5734 9.65218C5.79598 9.00089 6.10514 8.37255 6.3693 7.89046C6.61869 7.4354 7.0422 6.77704 7.51481 6.20686C7.57748 6.13127 7.64175 6.05648 7.70719 5.98323C7.39142 5.92263 7.08276 5.84103 6.83219 5.76351C6.61847 5.69737 6.43222 5.63106 6.29997 5.58284C6.23424 5.55887 6.1809 5.53953 6.14372 5.52522C6.13705 5.52265 6.1308 5.51963 6.12516 5.51741ZM3.81559 5.19319C3.71663 5.17448 3.55572 5.19609 3.32926 5.36214C3.09558 5.53353 2.84889 5.82236 2.64079 6.20198C2.4462 6.55708 2.34736 6.94361 2.3361 7.25862C2.3235 7.61435 2.42004 7.7163 2.40446 7.70296L2.81657 8.03304C2.92255 7.54286 3.11192 6.88062 3.40739 6.33479C3.61396 5.95324 3.91707 5.60514 4.21794 5.31722L3.81559 5.19319Z" 15 + fill="currentColor" 16 + /> 17 + </svg> 18 + ); 19 + };
+18 -1
components/IdentityProvider.tsx
··· 4 4 import useSWR, { KeyedMutator, mutate } from "swr"; 5 5 import { DashboardState } from "./PageLayouts/DashboardLayout"; 6 6 import { supabaseBrowserClient } from "supabase/browserClient"; 7 + import { produce, Draft } from "immer"; 7 8 8 9 export type InterfaceState = { 9 10 dashboards: { [id: string]: DashboardState | undefined }; 10 11 }; 11 - type Identity = Awaited<ReturnType<typeof getIdentityData>>; 12 + export type Identity = Awaited<ReturnType<typeof getIdentityData>>; 12 13 let IdentityContext = createContext({ 13 14 identity: null as Identity, 14 15 mutate: (() => {}) as KeyedMutator<Identity>, 15 16 }); 16 17 export const useIdentityData = () => useContext(IdentityContext); 18 + 19 + export function mutateIdentityData( 20 + mutate: KeyedMutator<Identity>, 21 + recipe: (draft: Draft<NonNullable<Identity>>) => void, 22 + ) { 23 + mutate( 24 + (data) => { 25 + if (!data) return data; 26 + return produce(data, recipe); 27 + }, 28 + { revalidate: false }, 29 + ); 30 + } 17 31 export function IdentityContextProvider(props: { 18 32 children: React.ReactNode; 19 33 initialValue: Identity; ··· 21 35 let { data: identity, mutate } = useSWR("identity", () => getIdentityData(), { 22 36 fallbackData: props.initialValue, 23 37 }); 38 + useEffect(() => { 39 + mutate(props.initialValue); 40 + }, [props.initialValue]); 24 41 useEffect(() => { 25 42 if (!identity?.atp_did) return; 26 43 let supabase = supabaseBrowserClient();
+1 -3
components/Layout.tsx
··· 6 6 import { useState } from "react"; 7 7 8 8 export const Separator = (props: { classname?: string }) => { 9 - return ( 10 - <div className={`min-h-full border-r border-border ${props.classname}`} /> 11 - ); 9 + return <div className={`h-full border-r border-border ${props.classname}`} />; 12 10 }; 13 11 14 12 export const Menu = (props: {
+27 -23
components/PageLayouts/DashboardLayout.tsx
··· 33 33 drafts: boolean; 34 34 published: boolean; 35 35 docs: boolean; 36 - templates: boolean; 36 + archived: boolean; 37 37 }; 38 38 }; 39 39 ··· 45 45 const defaultDashboardState: DashboardState = { 46 46 display: undefined, 47 47 sort: undefined, 48 - filter: { drafts: false, published: false, docs: false, templates: false }, 48 + filter: { 49 + drafts: false, 50 + published: false, 51 + docs: false, 52 + archived: false, 53 + }, 49 54 }; 50 55 51 56 export const useDashboardStore = create<DashboardStore>((set, get) => ({ ··· 255 260 hasBackgroundImage: boolean; 256 261 defaultDisplay: Exclude<DashboardState["display"], undefined>; 257 262 hasPubs: boolean; 258 - hasTemplates: boolean; 263 + hasArchived: boolean; 259 264 }) => { 260 265 let { display, sort } = useDashboardState(); 261 266 display = display || props.defaultDisplay; ··· 276 281 <DisplayToggle setState={setState} display={display} /> 277 282 <Separator classname="h-4 min-h-4!" /> 278 283 279 - {props.hasPubs || props.hasTemplates ? ( 284 + {props.hasPubs ? ( 280 285 <> 281 - {props.hasPubs} 282 - {props.hasTemplates} 283 286 <FilterOptions 284 287 hasPubs={props.hasPubs} 285 - hasTemplates={props.hasTemplates} 288 + hasArchived={props.hasArchived} 286 289 /> 287 290 <Separator classname="h-4 min-h-4!" />{" "} 288 291 </> ··· 369 372 ); 370 373 } 371 374 372 - const FilterOptions = (props: { hasPubs: boolean; hasTemplates: boolean }) => { 375 + const FilterOptions = (props: { 376 + hasPubs: boolean; 377 + hasArchived: boolean; 378 + }) => { 373 379 let { filter } = useDashboardState(); 374 380 let setState = useSetDashboardState(); 375 381 let filterCount = Object.values(filter).filter(Boolean).length; ··· 406 412 </> 407 413 )} 408 414 409 - {props.hasTemplates && ( 410 - <> 411 - <Checkbox 412 - small 413 - checked={filter.templates} 414 - onChange={(e) => 415 - setState({ 416 - filter: { ...filter, templates: !!e.target.checked }, 417 - }) 418 - } 419 - > 420 - Templates 421 - </Checkbox> 422 - </> 415 + {props.hasArchived && ( 416 + <Checkbox 417 + small 418 + checked={filter.archived} 419 + onChange={(e) => 420 + setState({ 421 + filter: { ...filter, archived: !!e.target.checked }, 422 + }) 423 + } 424 + > 425 + Archived 426 + </Checkbox> 423 427 )} 424 428 <Checkbox 425 429 small ··· 441 445 docs: false, 442 446 published: false, 443 447 drafts: false, 444 - templates: false, 448 + archived: false, 445 449 }, 446 450 }); 447 451 }}
+2 -4
components/Pages/PageShareMenu.tsx
··· 14 14 <div> 15 15 <ShareButton 16 16 text="Share Edit Link" 17 - subtext="" 18 - helptext="recipients can edit the full Leaflet" 17 + subtext="Recipients can edit the full Leaflet" 19 18 smokerText="Collab link copied!" 20 19 id="get-page-collab-link" 21 20 link={`${collabLink}?page=${props.entityID}`} 22 21 /> 23 22 <ShareButton 24 23 text="Share View Link" 25 - subtext="" 26 - helptext="recipients can view the full Leaflet" 24 + subtext="Recipients can view the full Leaflet" 27 25 smokerText="Publish link copied!" 28 26 id="get-page-publish-link" 29 27 fullLink={
+7 -35
components/ShareOptions/index.tsx
··· 6 6 import { Menu, MenuItem } from "components/Layout"; 7 7 import { ActionButton } from "components/ActionBar/ActionButton"; 8 8 import useSWR from "swr"; 9 - import { useTemplateState } from "app/(home-pages)/home/Actions/CreateNewButton"; 10 9 import LoginForm from "app/login/LoginForm"; 11 10 import { CustomDomainMenu } from "./DomainOptions"; 12 11 import { useIdentityData } from "components/IdentityProvider"; ··· 106 105 }, []); 107 106 let { data: domains } = useLeafletDomains(); 108 107 109 - let isTemplate = useTemplateState( 110 - (s) => !!s.templates.find((t) => t.id === permission_token.id), 111 - ); 112 - 113 108 return ( 114 109 <> 115 - {isTemplate && ( 116 - <> 117 - <ShareButton 118 - text="Share Template" 119 - subtext="Let others make new Leaflets as copies of this template" 120 - smokerText="Template link copied!" 121 - id="get-template-link" 122 - link={`template/${publishLink}` || ""} 123 - /> 124 - <hr className="border-border my-1" /> 125 - </> 126 - )} 127 - 128 110 <ShareButton 129 111 text={`Share ${postLink ? "Draft" : ""} Edit Link`} 130 112 subtext="" ··· 182 164 183 165 export const ShareButton = (props: { 184 166 text: React.ReactNode; 185 - subtext: React.ReactNode; 186 - helptext?: string; 167 + subtext?: React.ReactNode; 187 168 smokerText: string; 188 169 id: string; 189 170 link: null | string; ··· 214 195 } 215 196 }} 216 197 > 217 - <div className={`group/${props.id} ${props.className}`}> 218 - <div className={`group-hover/${props.id}:text-accent-contrast`}> 219 - {props.text} 220 - </div> 221 - <div 222 - className={`text-sm font-normal text-tertiary group-hover/${props.id}:text-accent-contrast`} 223 - > 224 - {props.subtext} 225 - </div> 226 - {/* optional help text */} 227 - {props.helptext && ( 228 - <div 229 - className={`text-sm italic font-normal text-tertiary group-hover/${props.id}:text-accent-contrast`} 230 - > 231 - {props.helptext} 198 + <div className={`group/${props.id} ${props.className} leading-snug`}> 199 + {props.text} 200 + 201 + {props.subtext && ( 202 + <div className={`text-sm font-normal text-tertiary`}> 203 + {props.subtext} 232 204 </div> 233 205 )} 234 206 </div>
+2 -2
next.config.js
··· 21 21 }, 22 22 ]; 23 23 }, 24 - serverExternalPackages: ["yjs"], 24 + serverExternalPackages: ["yjs", "pino"], 25 25 pageExtensions: ["js", "jsx", "ts", "tsx", "md", "mdx"], 26 26 images: { 27 27 loader: "custom", ··· 31 31 { protocol: "https", hostname: "bdefzwcumgzjwllsnaej.supabase.co" }, 32 32 ], 33 33 }, 34 + reactCompiler: true, 34 35 experimental: { 35 - reactCompiler: true, 36 36 serverActions: { 37 37 bodySizeLimit: "5mb", 38 38 },
+2330 -465
package-lock.json
··· 21 21 "@hono/node-server": "^1.14.3", 22 22 "@mdx-js/loader": "^3.1.0", 23 23 "@mdx-js/react": "^3.1.0", 24 - "@next/bundle-analyzer": "^15.3.2", 25 - "@next/mdx": "15.3.2", 24 + "@next/bundle-analyzer": "16.0.3", 25 + "@next/mdx": "16.0.3", 26 26 "@radix-ui/react-dialog": "^1.1.15", 27 27 "@radix-ui/react-dropdown-menu": "^2.1.16", 28 28 "@radix-ui/react-popover": "^1.1.15", ··· 51 51 "linkifyjs": "^4.2.0", 52 52 "luxon": "^3.7.2", 53 53 "multiformats": "^13.3.2", 54 - "next": "^15.5.3", 54 + "next": "16.0.3", 55 55 "pg": "^8.16.3", 56 56 "prosemirror-commands": "^1.5.2", 57 57 "prosemirror-inputrules": "^1.4.0", ··· 59 59 "prosemirror-model": "^1.21.0", 60 60 "prosemirror-schema-basic": "^1.2.2", 61 61 "prosemirror-state": "^1.4.3", 62 - "react": "^19.1.1", 62 + "react": "19.2.0", 63 63 "react-aria-components": "^1.8.0", 64 64 "react-day-picker": "^9.3.0", 65 - "react-dom": "^19.1.1", 65 + "react-dom": "19.2.0", 66 66 "react-use-measure": "^2.1.1", 67 67 "redlock": "^5.0.0-beta.2", 68 68 "rehype-parse": "^9.0.0", ··· 92 92 "@types/katex": "^0.16.7", 93 93 "@types/luxon": "^3.7.1", 94 94 "@types/node": "^22.15.17", 95 - "@types/react": "19.1.3", 96 - "@types/react-dom": "19.1.3", 95 + "@types/react": "19.2.6", 96 + "@types/react-dom": "19.2.3", 97 97 "@types/uuid": "^10.0.0", 98 98 "drizzle-kit": "^0.21.2", 99 99 "esbuild": "^0.25.4", 100 - "eslint": "8.57.0", 101 - "eslint-config-next": "^15.5.3", 100 + "eslint": "^9.39.1", 101 + "eslint-config-next": "16.0.3", 102 102 "postcss": "^8.4.38", 103 103 "prettier": "3.2.5", 104 104 "supabase": "^1.187.3", ··· 567 567 "node": ">=18.7.0" 568 568 } 569 569 }, 570 + "node_modules/@babel/code-frame": { 571 + "version": "7.27.1", 572 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", 573 + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 574 + "dev": true, 575 + "dependencies": { 576 + "@babel/helper-validator-identifier": "^7.27.1", 577 + "js-tokens": "^4.0.0", 578 + "picocolors": "^1.1.1" 579 + }, 580 + "engines": { 581 + "node": ">=6.9.0" 582 + } 583 + }, 584 + "node_modules/@babel/compat-data": { 585 + "version": "7.28.5", 586 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", 587 + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", 588 + "dev": true, 589 + "engines": { 590 + "node": ">=6.9.0" 591 + } 592 + }, 593 + "node_modules/@babel/core": { 594 + "version": "7.28.5", 595 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", 596 + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", 597 + "dev": true, 598 + "dependencies": { 599 + "@babel/code-frame": "^7.27.1", 600 + "@babel/generator": "^7.28.5", 601 + "@babel/helper-compilation-targets": "^7.27.2", 602 + "@babel/helper-module-transforms": "^7.28.3", 603 + "@babel/helpers": "^7.28.4", 604 + "@babel/parser": "^7.28.5", 605 + "@babel/template": "^7.27.2", 606 + "@babel/traverse": "^7.28.5", 607 + "@babel/types": "^7.28.5", 608 + "@jridgewell/remapping": "^2.3.5", 609 + "convert-source-map": "^2.0.0", 610 + "debug": "^4.1.0", 611 + "gensync": "^1.0.0-beta.2", 612 + "json5": "^2.2.3", 613 + "semver": "^6.3.1" 614 + }, 615 + "engines": { 616 + "node": ">=6.9.0" 617 + }, 618 + "funding": { 619 + "type": "opencollective", 620 + "url": "https://opencollective.com/babel" 621 + } 622 + }, 623 + "node_modules/@babel/core/node_modules/json5": { 624 + "version": "2.2.3", 625 + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 626 + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 627 + "dev": true, 628 + "bin": { 629 + "json5": "lib/cli.js" 630 + }, 631 + "engines": { 632 + "node": ">=6" 633 + } 634 + }, 635 + "node_modules/@babel/core/node_modules/semver": { 636 + "version": "6.3.1", 637 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 638 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 639 + "dev": true, 640 + "bin": { 641 + "semver": "bin/semver.js" 642 + } 643 + }, 644 + "node_modules/@babel/generator": { 645 + "version": "7.28.5", 646 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", 647 + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", 648 + "dev": true, 649 + "dependencies": { 650 + "@babel/parser": "^7.28.5", 651 + "@babel/types": "^7.28.5", 652 + "@jridgewell/gen-mapping": "^0.3.12", 653 + "@jridgewell/trace-mapping": "^0.3.28", 654 + "jsesc": "^3.0.2" 655 + }, 656 + "engines": { 657 + "node": ">=6.9.0" 658 + } 659 + }, 660 + "node_modules/@babel/helper-compilation-targets": { 661 + "version": "7.27.2", 662 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", 663 + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", 664 + "dev": true, 665 + "dependencies": { 666 + "@babel/compat-data": "^7.27.2", 667 + "@babel/helper-validator-option": "^7.27.1", 668 + "browserslist": "^4.24.0", 669 + "lru-cache": "^5.1.1", 670 + "semver": "^6.3.1" 671 + }, 672 + "engines": { 673 + "node": ">=6.9.0" 674 + } 675 + }, 676 + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { 677 + "version": "5.1.1", 678 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 679 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 680 + "dev": true, 681 + "dependencies": { 682 + "yallist": "^3.0.2" 683 + } 684 + }, 685 + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { 686 + "version": "6.3.1", 687 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 688 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 689 + "dev": true, 690 + "bin": { 691 + "semver": "bin/semver.js" 692 + } 693 + }, 694 + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { 695 + "version": "3.1.1", 696 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 697 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 698 + "dev": true 699 + }, 700 + "node_modules/@babel/helper-globals": { 701 + "version": "7.28.0", 702 + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", 703 + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", 704 + "dev": true, 705 + "engines": { 706 + "node": ">=6.9.0" 707 + } 708 + }, 709 + "node_modules/@babel/helper-module-imports": { 710 + "version": "7.27.1", 711 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", 712 + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 713 + "dev": true, 714 + "dependencies": { 715 + "@babel/traverse": "^7.27.1", 716 + "@babel/types": "^7.27.1" 717 + }, 718 + "engines": { 719 + "node": ">=6.9.0" 720 + } 721 + }, 722 + "node_modules/@babel/helper-module-transforms": { 723 + "version": "7.28.3", 724 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", 725 + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", 726 + "dev": true, 727 + "dependencies": { 728 + "@babel/helper-module-imports": "^7.27.1", 729 + "@babel/helper-validator-identifier": "^7.27.1", 730 + "@babel/traverse": "^7.28.3" 731 + }, 732 + "engines": { 733 + "node": ">=6.9.0" 734 + }, 735 + "peerDependencies": { 736 + "@babel/core": "^7.0.0" 737 + } 738 + }, 570 739 "node_modules/@babel/helper-string-parser": { 571 740 "version": "7.27.1", 572 741 "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", ··· 577 746 } 578 747 }, 579 748 "node_modules/@babel/helper-validator-identifier": { 749 + "version": "7.28.5", 750 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", 751 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", 752 + "engines": { 753 + "node": ">=6.9.0" 754 + } 755 + }, 756 + "node_modules/@babel/helper-validator-option": { 580 757 "version": "7.27.1", 581 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", 582 - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", 583 - "license": "MIT", 758 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", 759 + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", 760 + "dev": true, 761 + "engines": { 762 + "node": ">=6.9.0" 763 + } 764 + }, 765 + "node_modules/@babel/helpers": { 766 + "version": "7.28.4", 767 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", 768 + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", 769 + "dev": true, 770 + "dependencies": { 771 + "@babel/template": "^7.27.2", 772 + "@babel/types": "^7.28.4" 773 + }, 774 + "engines": { 775 + "node": ">=6.9.0" 776 + } 777 + }, 778 + "node_modules/@babel/parser": { 779 + "version": "7.28.5", 780 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", 781 + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", 782 + "dev": true, 783 + "dependencies": { 784 + "@babel/types": "^7.28.5" 785 + }, 786 + "bin": { 787 + "parser": "bin/babel-parser.js" 788 + }, 789 + "engines": { 790 + "node": ">=6.0.0" 791 + } 792 + }, 793 + "node_modules/@babel/template": { 794 + "version": "7.27.2", 795 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", 796 + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 797 + "dev": true, 798 + "dependencies": { 799 + "@babel/code-frame": "^7.27.1", 800 + "@babel/parser": "^7.27.2", 801 + "@babel/types": "^7.27.1" 802 + }, 803 + "engines": { 804 + "node": ">=6.9.0" 805 + } 806 + }, 807 + "node_modules/@babel/traverse": { 808 + "version": "7.28.5", 809 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", 810 + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", 811 + "dev": true, 812 + "dependencies": { 813 + "@babel/code-frame": "^7.27.1", 814 + "@babel/generator": "^7.28.5", 815 + "@babel/helper-globals": "^7.28.0", 816 + "@babel/parser": "^7.28.5", 817 + "@babel/template": "^7.27.2", 818 + "@babel/types": "^7.28.5", 819 + "debug": "^4.3.1" 820 + }, 584 821 "engines": { 585 822 "node": ">=6.9.0" 586 823 } 587 824 }, 588 825 "node_modules/@babel/types": { 589 - "version": "7.27.1", 590 - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", 591 - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", 592 - "license": "MIT", 826 + "version": "7.28.5", 827 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", 828 + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", 593 829 "dependencies": { 594 830 "@babel/helper-string-parser": "^7.27.1", 595 - "@babel/helper-validator-identifier": "^7.27.1" 831 + "@babel/helper-validator-identifier": "^7.28.5" 596 832 }, 597 833 "engines": { 598 834 "node": ">=6.9.0" ··· 714 950 "source-map-support": "^0.5.21" 715 951 } 716 952 }, 953 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { 954 + "version": "0.18.20", 955 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 956 + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 957 + "cpu": [ 958 + "arm" 959 + ], 960 + "dev": true, 961 + "optional": true, 962 + "os": [ 963 + "android" 964 + ], 965 + "engines": { 966 + "node": ">=12" 967 + } 968 + }, 969 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { 970 + "version": "0.18.20", 971 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 972 + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 973 + "cpu": [ 974 + "arm64" 975 + ], 976 + "dev": true, 977 + "optional": true, 978 + "os": [ 979 + "android" 980 + ], 981 + "engines": { 982 + "node": ">=12" 983 + } 984 + }, 985 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { 986 + "version": "0.18.20", 987 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 988 + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 989 + "cpu": [ 990 + "x64" 991 + ], 992 + "dev": true, 993 + "optional": true, 994 + "os": [ 995 + "android" 996 + ], 997 + "engines": { 998 + "node": ">=12" 999 + } 1000 + }, 1001 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { 1002 + "version": "0.18.20", 1003 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 1004 + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 1005 + "cpu": [ 1006 + "arm64" 1007 + ], 1008 + "dev": true, 1009 + "optional": true, 1010 + "os": [ 1011 + "darwin" 1012 + ], 1013 + "engines": { 1014 + "node": ">=12" 1015 + } 1016 + }, 1017 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { 1018 + "version": "0.18.20", 1019 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 1020 + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 1021 + "cpu": [ 1022 + "x64" 1023 + ], 1024 + "dev": true, 1025 + "optional": true, 1026 + "os": [ 1027 + "darwin" 1028 + ], 1029 + "engines": { 1030 + "node": ">=12" 1031 + } 1032 + }, 1033 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { 1034 + "version": "0.18.20", 1035 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 1036 + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 1037 + "cpu": [ 1038 + "arm64" 1039 + ], 1040 + "dev": true, 1041 + "optional": true, 1042 + "os": [ 1043 + "freebsd" 1044 + ], 1045 + "engines": { 1046 + "node": ">=12" 1047 + } 1048 + }, 1049 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { 1050 + "version": "0.18.20", 1051 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 1052 + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 1053 + "cpu": [ 1054 + "x64" 1055 + ], 1056 + "dev": true, 1057 + "optional": true, 1058 + "os": [ 1059 + "freebsd" 1060 + ], 1061 + "engines": { 1062 + "node": ">=12" 1063 + } 1064 + }, 1065 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { 1066 + "version": "0.18.20", 1067 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 1068 + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 1069 + "cpu": [ 1070 + "arm" 1071 + ], 1072 + "dev": true, 1073 + "optional": true, 1074 + "os": [ 1075 + "linux" 1076 + ], 1077 + "engines": { 1078 + "node": ">=12" 1079 + } 1080 + }, 1081 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { 1082 + "version": "0.18.20", 1083 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 1084 + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 1085 + "cpu": [ 1086 + "arm64" 1087 + ], 1088 + "dev": true, 1089 + "optional": true, 1090 + "os": [ 1091 + "linux" 1092 + ], 1093 + "engines": { 1094 + "node": ">=12" 1095 + } 1096 + }, 1097 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { 1098 + "version": "0.18.20", 1099 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 1100 + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 1101 + "cpu": [ 1102 + "ia32" 1103 + ], 1104 + "dev": true, 1105 + "optional": true, 1106 + "os": [ 1107 + "linux" 1108 + ], 1109 + "engines": { 1110 + "node": ">=12" 1111 + } 1112 + }, 1113 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { 1114 + "version": "0.18.20", 1115 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 1116 + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 1117 + "cpu": [ 1118 + "loong64" 1119 + ], 1120 + "dev": true, 1121 + "optional": true, 1122 + "os": [ 1123 + "linux" 1124 + ], 1125 + "engines": { 1126 + "node": ">=12" 1127 + } 1128 + }, 1129 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { 1130 + "version": "0.18.20", 1131 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 1132 + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 1133 + "cpu": [ 1134 + "mips64el" 1135 + ], 1136 + "dev": true, 1137 + "optional": true, 1138 + "os": [ 1139 + "linux" 1140 + ], 1141 + "engines": { 1142 + "node": ">=12" 1143 + } 1144 + }, 1145 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { 1146 + "version": "0.18.20", 1147 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 1148 + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 1149 + "cpu": [ 1150 + "ppc64" 1151 + ], 1152 + "dev": true, 1153 + "optional": true, 1154 + "os": [ 1155 + "linux" 1156 + ], 1157 + "engines": { 1158 + "node": ">=12" 1159 + } 1160 + }, 1161 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { 1162 + "version": "0.18.20", 1163 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 1164 + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 1165 + "cpu": [ 1166 + "riscv64" 1167 + ], 1168 + "dev": true, 1169 + "optional": true, 1170 + "os": [ 1171 + "linux" 1172 + ], 1173 + "engines": { 1174 + "node": ">=12" 1175 + } 1176 + }, 1177 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { 1178 + "version": "0.18.20", 1179 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 1180 + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 1181 + "cpu": [ 1182 + "s390x" 1183 + ], 1184 + "dev": true, 1185 + "optional": true, 1186 + "os": [ 1187 + "linux" 1188 + ], 1189 + "engines": { 1190 + "node": ">=12" 1191 + } 1192 + }, 717 1193 "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { 718 1194 "version": "0.18.20", 719 1195 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", ··· 730 1206 "node": ">=12" 731 1207 } 732 1208 }, 1209 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { 1210 + "version": "0.18.20", 1211 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 1212 + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 1213 + "cpu": [ 1214 + "x64" 1215 + ], 1216 + "dev": true, 1217 + "optional": true, 1218 + "os": [ 1219 + "netbsd" 1220 + ], 1221 + "engines": { 1222 + "node": ">=12" 1223 + } 1224 + }, 1225 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { 1226 + "version": "0.18.20", 1227 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 1228 + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 1229 + "cpu": [ 1230 + "x64" 1231 + ], 1232 + "dev": true, 1233 + "optional": true, 1234 + "os": [ 1235 + "openbsd" 1236 + ], 1237 + "engines": { 1238 + "node": ">=12" 1239 + } 1240 + }, 1241 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { 1242 + "version": "0.18.20", 1243 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 1244 + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 1245 + "cpu": [ 1246 + "x64" 1247 + ], 1248 + "dev": true, 1249 + "optional": true, 1250 + "os": [ 1251 + "sunos" 1252 + ], 1253 + "engines": { 1254 + "node": ">=12" 1255 + } 1256 + }, 1257 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { 1258 + "version": "0.18.20", 1259 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 1260 + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 1261 + "cpu": [ 1262 + "arm64" 1263 + ], 1264 + "dev": true, 1265 + "optional": true, 1266 + "os": [ 1267 + "win32" 1268 + ], 1269 + "engines": { 1270 + "node": ">=12" 1271 + } 1272 + }, 1273 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { 1274 + "version": "0.18.20", 1275 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 1276 + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 1277 + "cpu": [ 1278 + "ia32" 1279 + ], 1280 + "dev": true, 1281 + "optional": true, 1282 + "os": [ 1283 + "win32" 1284 + ], 1285 + "engines": { 1286 + "node": ">=12" 1287 + } 1288 + }, 1289 + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { 1290 + "version": "0.18.20", 1291 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 1292 + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 1293 + "cpu": [ 1294 + "x64" 1295 + ], 1296 + "dev": true, 1297 + "optional": true, 1298 + "os": [ 1299 + "win32" 1300 + ], 1301 + "engines": { 1302 + "node": ">=12" 1303 + } 1304 + }, 733 1305 "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { 734 1306 "version": "0.18.20", 735 1307 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", ··· 799 1371 "esbuild": "*" 800 1372 } 801 1373 }, 1374 + "node_modules/@esbuild/aix-ppc64": { 1375 + "version": "0.25.4", 1376 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", 1377 + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", 1378 + "cpu": [ 1379 + "ppc64" 1380 + ], 1381 + "dev": true, 1382 + "optional": true, 1383 + "os": [ 1384 + "aix" 1385 + ], 1386 + "engines": { 1387 + "node": ">=18" 1388 + } 1389 + }, 1390 + "node_modules/@esbuild/android-arm": { 1391 + "version": "0.25.4", 1392 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", 1393 + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", 1394 + "cpu": [ 1395 + "arm" 1396 + ], 1397 + "dev": true, 1398 + "optional": true, 1399 + "os": [ 1400 + "android" 1401 + ], 1402 + "engines": { 1403 + "node": ">=18" 1404 + } 1405 + }, 1406 + "node_modules/@esbuild/android-arm64": { 1407 + "version": "0.25.4", 1408 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", 1409 + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", 1410 + "cpu": [ 1411 + "arm64" 1412 + ], 1413 + "dev": true, 1414 + "optional": true, 1415 + "os": [ 1416 + "android" 1417 + ], 1418 + "engines": { 1419 + "node": ">=18" 1420 + } 1421 + }, 1422 + "node_modules/@esbuild/android-x64": { 1423 + "version": "0.25.4", 1424 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", 1425 + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", 1426 + "cpu": [ 1427 + "x64" 1428 + ], 1429 + "dev": true, 1430 + "optional": true, 1431 + "os": [ 1432 + "android" 1433 + ], 1434 + "engines": { 1435 + "node": ">=18" 1436 + } 1437 + }, 1438 + "node_modules/@esbuild/darwin-x64": { 1439 + "version": "0.25.4", 1440 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", 1441 + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", 1442 + "cpu": [ 1443 + "x64" 1444 + ], 1445 + "dev": true, 1446 + "optional": true, 1447 + "os": [ 1448 + "darwin" 1449 + ], 1450 + "engines": { 1451 + "node": ">=18" 1452 + } 1453 + }, 1454 + "node_modules/@esbuild/freebsd-arm64": { 1455 + "version": "0.25.4", 1456 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", 1457 + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", 1458 + "cpu": [ 1459 + "arm64" 1460 + ], 1461 + "dev": true, 1462 + "optional": true, 1463 + "os": [ 1464 + "freebsd" 1465 + ], 1466 + "engines": { 1467 + "node": ">=18" 1468 + } 1469 + }, 1470 + "node_modules/@esbuild/freebsd-x64": { 1471 + "version": "0.25.4", 1472 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", 1473 + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", 1474 + "cpu": [ 1475 + "x64" 1476 + ], 1477 + "dev": true, 1478 + "optional": true, 1479 + "os": [ 1480 + "freebsd" 1481 + ], 1482 + "engines": { 1483 + "node": ">=18" 1484 + } 1485 + }, 1486 + "node_modules/@esbuild/linux-arm": { 1487 + "version": "0.25.4", 1488 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", 1489 + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", 1490 + "cpu": [ 1491 + "arm" 1492 + ], 1493 + "dev": true, 1494 + "optional": true, 1495 + "os": [ 1496 + "linux" 1497 + ], 1498 + "engines": { 1499 + "node": ">=18" 1500 + } 1501 + }, 1502 + "node_modules/@esbuild/linux-arm64": { 1503 + "version": "0.25.4", 1504 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", 1505 + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", 1506 + "cpu": [ 1507 + "arm64" 1508 + ], 1509 + "dev": true, 1510 + "optional": true, 1511 + "os": [ 1512 + "linux" 1513 + ], 1514 + "engines": { 1515 + "node": ">=18" 1516 + } 1517 + }, 1518 + "node_modules/@esbuild/linux-ia32": { 1519 + "version": "0.25.4", 1520 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", 1521 + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", 1522 + "cpu": [ 1523 + "ia32" 1524 + ], 1525 + "dev": true, 1526 + "optional": true, 1527 + "os": [ 1528 + "linux" 1529 + ], 1530 + "engines": { 1531 + "node": ">=18" 1532 + } 1533 + }, 1534 + "node_modules/@esbuild/linux-loong64": { 1535 + "version": "0.25.4", 1536 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", 1537 + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", 1538 + "cpu": [ 1539 + "loong64" 1540 + ], 1541 + "dev": true, 1542 + "optional": true, 1543 + "os": [ 1544 + "linux" 1545 + ], 1546 + "engines": { 1547 + "node": ">=18" 1548 + } 1549 + }, 1550 + "node_modules/@esbuild/linux-mips64el": { 1551 + "version": "0.25.4", 1552 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", 1553 + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", 1554 + "cpu": [ 1555 + "mips64el" 1556 + ], 1557 + "dev": true, 1558 + "optional": true, 1559 + "os": [ 1560 + "linux" 1561 + ], 1562 + "engines": { 1563 + "node": ">=18" 1564 + } 1565 + }, 1566 + "node_modules/@esbuild/linux-ppc64": { 1567 + "version": "0.25.4", 1568 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", 1569 + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", 1570 + "cpu": [ 1571 + "ppc64" 1572 + ], 1573 + "dev": true, 1574 + "optional": true, 1575 + "os": [ 1576 + "linux" 1577 + ], 1578 + "engines": { 1579 + "node": ">=18" 1580 + } 1581 + }, 1582 + "node_modules/@esbuild/linux-riscv64": { 1583 + "version": "0.25.4", 1584 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", 1585 + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", 1586 + "cpu": [ 1587 + "riscv64" 1588 + ], 1589 + "dev": true, 1590 + "optional": true, 1591 + "os": [ 1592 + "linux" 1593 + ], 1594 + "engines": { 1595 + "node": ">=18" 1596 + } 1597 + }, 1598 + "node_modules/@esbuild/linux-s390x": { 1599 + "version": "0.25.4", 1600 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", 1601 + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", 1602 + "cpu": [ 1603 + "s390x" 1604 + ], 1605 + "dev": true, 1606 + "optional": true, 1607 + "os": [ 1608 + "linux" 1609 + ], 1610 + "engines": { 1611 + "node": ">=18" 1612 + } 1613 + }, 802 1614 "node_modules/@esbuild/linux-x64": { 803 1615 "version": "0.25.4", 804 1616 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", ··· 816 1628 "node": ">=18" 817 1629 } 818 1630 }, 1631 + "node_modules/@esbuild/netbsd-arm64": { 1632 + "version": "0.25.4", 1633 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", 1634 + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", 1635 + "cpu": [ 1636 + "arm64" 1637 + ], 1638 + "dev": true, 1639 + "optional": true, 1640 + "os": [ 1641 + "netbsd" 1642 + ], 1643 + "engines": { 1644 + "node": ">=18" 1645 + } 1646 + }, 1647 + "node_modules/@esbuild/netbsd-x64": { 1648 + "version": "0.25.4", 1649 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", 1650 + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", 1651 + "cpu": [ 1652 + "x64" 1653 + ], 1654 + "dev": true, 1655 + "optional": true, 1656 + "os": [ 1657 + "netbsd" 1658 + ], 1659 + "engines": { 1660 + "node": ">=18" 1661 + } 1662 + }, 1663 + "node_modules/@esbuild/openbsd-arm64": { 1664 + "version": "0.25.4", 1665 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", 1666 + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", 1667 + "cpu": [ 1668 + "arm64" 1669 + ], 1670 + "dev": true, 1671 + "optional": true, 1672 + "os": [ 1673 + "openbsd" 1674 + ], 1675 + "engines": { 1676 + "node": ">=18" 1677 + } 1678 + }, 1679 + "node_modules/@esbuild/openbsd-x64": { 1680 + "version": "0.25.4", 1681 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", 1682 + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", 1683 + "cpu": [ 1684 + "x64" 1685 + ], 1686 + "dev": true, 1687 + "optional": true, 1688 + "os": [ 1689 + "openbsd" 1690 + ], 1691 + "engines": { 1692 + "node": ">=18" 1693 + } 1694 + }, 1695 + "node_modules/@esbuild/sunos-x64": { 1696 + "version": "0.25.4", 1697 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", 1698 + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", 1699 + "cpu": [ 1700 + "x64" 1701 + ], 1702 + "dev": true, 1703 + "optional": true, 1704 + "os": [ 1705 + "sunos" 1706 + ], 1707 + "engines": { 1708 + "node": ">=18" 1709 + } 1710 + }, 1711 + "node_modules/@esbuild/win32-arm64": { 1712 + "version": "0.25.4", 1713 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", 1714 + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", 1715 + "cpu": [ 1716 + "arm64" 1717 + ], 1718 + "dev": true, 1719 + "optional": true, 1720 + "os": [ 1721 + "win32" 1722 + ], 1723 + "engines": { 1724 + "node": ">=18" 1725 + } 1726 + }, 1727 + "node_modules/@esbuild/win32-ia32": { 1728 + "version": "0.25.4", 1729 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", 1730 + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", 1731 + "cpu": [ 1732 + "ia32" 1733 + ], 1734 + "dev": true, 1735 + "optional": true, 1736 + "os": [ 1737 + "win32" 1738 + ], 1739 + "engines": { 1740 + "node": ">=18" 1741 + } 1742 + }, 1743 + "node_modules/@esbuild/win32-x64": { 1744 + "version": "0.25.4", 1745 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", 1746 + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", 1747 + "cpu": [ 1748 + "x64" 1749 + ], 1750 + "dev": true, 1751 + "optional": true, 1752 + "os": [ 1753 + "win32" 1754 + ], 1755 + "engines": { 1756 + "node": ">=18" 1757 + } 1758 + }, 819 1759 "node_modules/@eslint-community/eslint-utils": { 820 - "version": "4.7.0", 821 - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", 822 - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", 1760 + "version": "4.9.0", 1761 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", 1762 + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", 823 1763 "dev": true, 824 - "license": "MIT", 825 1764 "dependencies": { 826 1765 "eslint-visitor-keys": "^3.4.3" 827 1766 }, ··· 835 1774 "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 836 1775 } 837 1776 }, 1777 + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 1778 + "version": "3.4.3", 1779 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1780 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1781 + "dev": true, 1782 + "engines": { 1783 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1784 + }, 1785 + "funding": { 1786 + "url": "https://opencollective.com/eslint" 1787 + } 1788 + }, 838 1789 "node_modules/@eslint-community/regexpp": { 839 - "version": "4.10.0", 840 - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 841 - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 1790 + "version": "4.12.2", 1791 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", 1792 + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", 842 1793 "dev": true, 843 1794 "engines": { 844 1795 "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 845 1796 } 846 1797 }, 1798 + "node_modules/@eslint/config-array": { 1799 + "version": "0.21.1", 1800 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", 1801 + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", 1802 + "dev": true, 1803 + "dependencies": { 1804 + "@eslint/object-schema": "^2.1.7", 1805 + "debug": "^4.3.1", 1806 + "minimatch": "^3.1.2" 1807 + }, 1808 + "engines": { 1809 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1810 + } 1811 + }, 1812 + "node_modules/@eslint/config-helpers": { 1813 + "version": "0.4.2", 1814 + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", 1815 + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", 1816 + "dev": true, 1817 + "dependencies": { 1818 + "@eslint/core": "^0.17.0" 1819 + }, 1820 + "engines": { 1821 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1822 + } 1823 + }, 1824 + "node_modules/@eslint/core": { 1825 + "version": "0.17.0", 1826 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", 1827 + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", 1828 + "dev": true, 1829 + "dependencies": { 1830 + "@types/json-schema": "^7.0.15" 1831 + }, 1832 + "engines": { 1833 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1834 + } 1835 + }, 847 1836 "node_modules/@eslint/eslintrc": { 848 - "version": "2.1.4", 849 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 850 - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 1837 + "version": "3.3.1", 1838 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", 1839 + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", 851 1840 "dev": true, 852 1841 "dependencies": { 853 1842 "ajv": "^6.12.4", 854 1843 "debug": "^4.3.2", 855 - "espree": "^9.6.0", 856 - "globals": "^13.19.0", 1844 + "espree": "^10.0.1", 1845 + "globals": "^14.0.0", 857 1846 "ignore": "^5.2.0", 858 1847 "import-fresh": "^3.2.1", 859 1848 "js-yaml": "^4.1.0", ··· 861 1850 "strip-json-comments": "^3.1.1" 862 1851 }, 863 1852 "engines": { 864 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1853 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 865 1854 }, 866 1855 "funding": { 867 1856 "url": "https://opencollective.com/eslint" 868 1857 } 869 1858 }, 870 1859 "node_modules/@eslint/js": { 871 - "version": "8.57.0", 872 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", 873 - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", 1860 + "version": "9.39.1", 1861 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", 1862 + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", 1863 + "dev": true, 1864 + "engines": { 1865 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1866 + }, 1867 + "funding": { 1868 + "url": "https://eslint.org/donate" 1869 + } 1870 + }, 1871 + "node_modules/@eslint/object-schema": { 1872 + "version": "2.1.7", 1873 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", 1874 + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", 1875 + "dev": true, 1876 + "engines": { 1877 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1878 + } 1879 + }, 1880 + "node_modules/@eslint/plugin-kit": { 1881 + "version": "0.4.1", 1882 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", 1883 + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", 874 1884 "dev": true, 1885 + "dependencies": { 1886 + "@eslint/core": "^0.17.0", 1887 + "levn": "^0.4.1" 1888 + }, 875 1889 "engines": { 876 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1890 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 877 1891 } 878 1892 }, 879 1893 "node_modules/@fastify/busboy": { ··· 1017 2031 "hono": "^4" 1018 2032 } 1019 2033 }, 1020 - "node_modules/@humanwhocodes/config-array": { 1021 - "version": "0.11.14", 1022 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 1023 - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 2034 + "node_modules/@humanfs/core": { 2035 + "version": "0.19.1", 2036 + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 2037 + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 2038 + "dev": true, 2039 + "engines": { 2040 + "node": ">=18.18.0" 2041 + } 2042 + }, 2043 + "node_modules/@humanfs/node": { 2044 + "version": "0.16.7", 2045 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", 2046 + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", 1024 2047 "dev": true, 1025 2048 "dependencies": { 1026 - "@humanwhocodes/object-schema": "^2.0.2", 1027 - "debug": "^4.3.1", 1028 - "minimatch": "^3.0.5" 2049 + "@humanfs/core": "^0.19.1", 2050 + "@humanwhocodes/retry": "^0.4.0" 1029 2051 }, 1030 2052 "engines": { 1031 - "node": ">=10.10.0" 2053 + "node": ">=18.18.0" 1032 2054 } 1033 2055 }, 1034 2056 "node_modules/@humanwhocodes/module-importer": { ··· 1044 2066 "url": "https://github.com/sponsors/nzakas" 1045 2067 } 1046 2068 }, 1047 - "node_modules/@humanwhocodes/object-schema": { 1048 - "version": "2.0.3", 1049 - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", 1050 - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", 1051 - "dev": true 2069 + "node_modules/@humanwhocodes/retry": { 2070 + "version": "0.4.3", 2071 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", 2072 + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", 2073 + "dev": true, 2074 + "engines": { 2075 + "node": ">=18.18" 2076 + }, 2077 + "funding": { 2078 + "type": "github", 2079 + "url": "https://github.com/sponsors/nzakas" 2080 + } 1052 2081 }, 1053 2082 "node_modules/@img/colour": { 1054 2083 "version": "1.0.0", ··· 1697 2726 } 1698 2727 }, 1699 2728 "node_modules/@next/bundle-analyzer": { 1700 - "version": "15.3.2", 1701 - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.2.tgz", 1702 - "integrity": "sha512-zY5O1PNKNxWEjaFX8gKzm77z2oL0cnj+m5aiqNBgay9LPLCDO13Cf+FJONeNq/nJjeXptwHFT9EMmTecF9U4Iw==", 1703 - "license": "MIT", 2729 + "version": "16.0.3", 2730 + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-16.0.3.tgz", 2731 + "integrity": "sha512-6Xo8f8/ZXtASfTPa6TH1aUn+xDg9Pkyl1YHVxu+89cVdLH7MnYjxv3rPOfEJ9BwCZCU2q4Flyw5MwltfD2pGbA==", 1704 2732 "dependencies": { 1705 2733 "webpack-bundle-analyzer": "4.10.1" 1706 2734 } 1707 2735 }, 1708 2736 "node_modules/@next/env": { 1709 - "version": "15.5.3", 1710 - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.3.tgz", 1711 - "integrity": "sha512-RSEDTRqyihYXygx/OJXwvVupfr9m04+0vH8vyy0HfZ7keRto6VX9BbEk0J2PUk0VGy6YhklJUSrgForov5F9pw==", 1712 - "license": "MIT" 2737 + "version": "16.0.3", 2738 + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.3.tgz", 2739 + "integrity": "sha512-IqgtY5Vwsm14mm/nmQaRMmywCU+yyMIYfk3/MHZ2ZTJvwVbBn3usZnjMi1GacrMVzVcAxJShTCpZlPs26EdEjQ==" 1713 2740 }, 1714 2741 "node_modules/@next/eslint-plugin-next": { 1715 - "version": "15.5.3", 1716 - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.3.tgz", 1717 - "integrity": "sha512-SdhaKdko6dpsSr0DldkESItVrnPYB1NS2NpShCSX5lc7SSQmLZt5Mug6t2xbiuVWEVDLZSuIAoQyYVBYp0dR5g==", 2742 + "version": "16.0.3", 2743 + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.0.3.tgz", 2744 + "integrity": "sha512-6sPWmZetzFWMsz7Dhuxsdmbu3fK+/AxKRtj7OB0/3OZAI2MHB/v2FeYh271LZ9abvnM1WIwWc/5umYjx0jo5sQ==", 1718 2745 "dev": true, 1719 - "license": "MIT", 1720 2746 "dependencies": { 1721 2747 "fast-glob": "3.3.1" 1722 2748 } ··· 1726 2752 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1727 2753 "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1728 2754 "dev": true, 1729 - "license": "MIT", 1730 2755 "dependencies": { 1731 2756 "@nodelib/fs.stat": "^2.0.2", 1732 2757 "@nodelib/fs.walk": "^1.2.3", ··· 1743 2768 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1744 2769 "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1745 2770 "dev": true, 1746 - "license": "ISC", 1747 2771 "dependencies": { 1748 2772 "is-glob": "^4.0.1" 1749 2773 }, ··· 1752 2776 } 1753 2777 }, 1754 2778 "node_modules/@next/mdx": { 1755 - "version": "15.3.2", 1756 - "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-15.3.2.tgz", 1757 - "integrity": "sha512-D6lSSbVzn1EiPwrBKG5QzXClcgdqiNCL8a3/6oROinzgZnYSxbVmnfs0UrqygtGSOmgW7sdJJSEOy555DoAwvw==", 1758 - "license": "MIT", 2779 + "version": "16.0.3", 2780 + "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-16.0.3.tgz", 2781 + "integrity": "sha512-uVl2JSEGAjBV+EVnpt1cZN88SK3lJ2n7Fc+iqTsgVx2g9+Y6ru+P6nuUgXd38OHPUIwzL6k2V1u4iV3kwuTySQ==", 1759 2782 "dependencies": { 1760 2783 "source-map": "^0.7.0" 1761 2784 }, ··· 1781 2804 } 1782 2805 }, 1783 2806 "node_modules/@next/swc-darwin-arm64": { 1784 - "version": "15.5.3", 1785 - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.3.tgz", 1786 - "integrity": "sha512-nzbHQo69+au9wJkGKTU9lP7PXv0d1J5ljFpvb+LnEomLtSbJkbZyEs6sbF3plQmiOB2l9OBtN2tNSvCH1nQ9Jg==", 2807 + "version": "16.0.3", 2808 + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.3.tgz", 2809 + "integrity": "sha512-MOnbd92+OByu0p6QBAzq1ahVWzF6nyfiH07dQDez4/Nku7G249NjxDVyEfVhz8WkLiOEU+KFVnqtgcsfP2nLXg==", 1787 2810 "cpu": [ 1788 2811 "arm64" 1789 2812 ], 1790 - "license": "MIT", 1791 2813 "optional": true, 1792 2814 "os": [ 1793 2815 "darwin" ··· 1797 2819 } 1798 2820 }, 1799 2821 "node_modules/@next/swc-darwin-x64": { 1800 - "version": "15.5.3", 1801 - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.3.tgz", 1802 - "integrity": "sha512-w83w4SkOOhekJOcA5HBvHyGzgV1W/XvOfpkrxIse4uPWhYTTRwtGEM4v/jiXwNSJvfRvah0H8/uTLBKRXlef8g==", 2822 + "version": "16.0.3", 2823 + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.3.tgz", 2824 + "integrity": "sha512-i70C4O1VmbTivYdRlk+5lj9xRc2BlK3oUikt3yJeHT1unL4LsNtN7UiOhVanFdc7vDAgZn1tV/9mQwMkWOJvHg==", 1803 2825 "cpu": [ 1804 2826 "x64" 1805 2827 ], 1806 - "license": "MIT", 1807 2828 "optional": true, 1808 2829 "os": [ 1809 2830 "darwin" ··· 1813 2834 } 1814 2835 }, 1815 2836 "node_modules/@next/swc-linux-arm64-gnu": { 1816 - "version": "15.5.3", 1817 - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.3.tgz", 1818 - "integrity": "sha512-+m7pfIs0/yvgVu26ieaKrifV8C8yiLe7jVp9SpcIzg7XmyyNE7toC1fy5IOQozmr6kWl/JONC51osih2RyoXRw==", 2837 + "version": "16.0.3", 2838 + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.3.tgz", 2839 + "integrity": "sha512-O88gCZ95sScwD00mn/AtalyCoykhhlokxH/wi1huFK+rmiP5LAYVs/i2ruk7xST6SuXN4NI5y4Xf5vepb2jf6A==", 1819 2840 "cpu": [ 1820 2841 "arm64" 1821 2842 ], 1822 - "license": "MIT", 1823 2843 "optional": true, 1824 2844 "os": [ 1825 2845 "linux" ··· 1829 2849 } 1830 2850 }, 1831 2851 "node_modules/@next/swc-linux-arm64-musl": { 1832 - "version": "15.5.3", 1833 - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.3.tgz", 1834 - "integrity": "sha512-u3PEIzuguSenoZviZJahNLgCexGFhso5mxWCrrIMdvpZn6lkME5vc/ADZG8UUk5K1uWRy4hqSFECrON6UKQBbQ==", 2852 + "version": "16.0.3", 2853 + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.3.tgz", 2854 + "integrity": "sha512-CEErFt78S/zYXzFIiv18iQCbRbLgBluS8z1TNDQoyPi8/Jr5qhR3e8XHAIxVxPBjDbEMITprqELVc5KTfFj0gg==", 1835 2855 "cpu": [ 1836 2856 "arm64" 1837 2857 ], 1838 - "license": "MIT", 1839 2858 "optional": true, 1840 2859 "os": [ 1841 2860 "linux" ··· 1845 2864 } 1846 2865 }, 1847 2866 "node_modules/@next/swc-linux-x64-gnu": { 1848 - "version": "15.5.3", 1849 - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.3.tgz", 1850 - "integrity": "sha512-lDtOOScYDZxI2BENN9m0pfVPJDSuUkAD1YXSvlJF0DKwZt0WlA7T7o3wrcEr4Q+iHYGzEaVuZcsIbCps4K27sA==", 2867 + "version": "16.0.3", 2868 + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.3.tgz", 2869 + "integrity": "sha512-Tc3i+nwt6mQ+Dwzcri/WNDj56iWdycGVh5YwwklleClzPzz7UpfaMw1ci7bLl6GRYMXhWDBfe707EXNjKtiswQ==", 1851 2870 "cpu": [ 1852 2871 "x64" 1853 2872 ], 1854 - "license": "MIT", 1855 2873 "optional": true, 1856 2874 "os": [ 1857 2875 "linux" ··· 1861 2879 } 1862 2880 }, 1863 2881 "node_modules/@next/swc-linux-x64-musl": { 1864 - "version": "15.5.3", 1865 - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.3.tgz", 1866 - "integrity": "sha512-9vWVUnsx9PrY2NwdVRJ4dUURAQ8Su0sLRPqcCCxtX5zIQUBES12eRVHq6b70bbfaVaxIDGJN2afHui0eDm+cLg==", 2882 + "version": "16.0.3", 2883 + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.3.tgz", 2884 + "integrity": "sha512-zTh03Z/5PBBPdTurgEtr6nY0vI9KR9Ifp/jZCcHlODzwVOEKcKRBtQIGrkc7izFgOMuXDEJBmirwpGqdM/ZixA==", 1867 2885 "cpu": [ 1868 2886 "x64" 1869 2887 ], 1870 - "license": "MIT", 1871 2888 "optional": true, 1872 2889 "os": [ 1873 2890 "linux" ··· 1877 2894 } 1878 2895 }, 1879 2896 "node_modules/@next/swc-win32-arm64-msvc": { 1880 - "version": "15.5.3", 1881 - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.3.tgz", 1882 - "integrity": "sha512-1CU20FZzY9LFQigRi6jM45oJMU3KziA5/sSG+dXeVaTm661snQP6xu3ykGxxwU5sLG3sh14teO/IOEPVsQMRfA==", 2897 + "version": "16.0.3", 2898 + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.3.tgz", 2899 + "integrity": "sha512-Jc1EHxtZovcJcg5zU43X3tuqzl/sS+CmLgjRP28ZT4vk869Ncm2NoF8qSTaL99gh6uOzgM99Shct06pSO6kA6g==", 1883 2900 "cpu": [ 1884 2901 "arm64" 1885 2902 ], 1886 - "license": "MIT", 1887 2903 "optional": true, 1888 2904 "os": [ 1889 2905 "win32" ··· 1893 2909 } 1894 2910 }, 1895 2911 "node_modules/@next/swc-win32-x64-msvc": { 1896 - "version": "15.5.3", 1897 - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.3.tgz", 1898 - "integrity": "sha512-JMoLAq3n3y5tKXPQwCK5c+6tmwkuFDa2XAxz8Wm4+IVthdBZdZGh+lmiLUHg9f9IDwIQpUjp+ysd6OkYTyZRZw==", 2912 + "version": "16.0.3", 2913 + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.3.tgz", 2914 + "integrity": "sha512-N7EJ6zbxgIYpI/sWNzpVKRMbfEGgsWuOIvzkML7wxAAZhPk1Msxuo/JDu1PKjWGrAoOLaZcIX5s+/pF5LIbBBg==", 1899 2915 "cpu": [ 1900 2916 "x64" 1901 2917 ], 1902 - "license": "MIT", 1903 2918 "optional": true, 1904 2919 "os": [ 1905 2920 "win32" ··· 5997 7012 "dev": true, 5998 7013 "license": "MIT" 5999 7014 }, 6000 - "node_modules/@rushstack/eslint-patch": { 6001 - "version": "1.10.3", 6002 - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", 6003 - "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", 6004 - "dev": true 6005 - }, 6006 7015 "node_modules/@shikijs/core": { 6007 7016 "version": "3.8.1", 6008 7017 "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.8.1.tgz", ··· 6597 7606 "@types/unist": "*" 6598 7607 } 6599 7608 }, 7609 + "node_modules/@types/json-schema": { 7610 + "version": "7.0.15", 7611 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 7612 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 7613 + "dev": true 7614 + }, 6600 7615 "node_modules/@types/json5": { 6601 7616 "version": "0.0.29", 6602 7617 "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", ··· 6723 7738 "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" 6724 7739 }, 6725 7740 "node_modules/@types/react": { 6726 - "version": "19.1.3", 6727 - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.3.tgz", 6728 - "integrity": "sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==", 6729 - "license": "MIT", 7741 + "version": "19.2.6", 7742 + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.6.tgz", 7743 + "integrity": "sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==", 6730 7744 "dependencies": { 6731 - "csstype": "^3.0.2" 7745 + "csstype": "^3.2.2" 6732 7746 } 6733 7747 }, 6734 7748 "node_modules/@types/react-dom": { 6735 - "version": "19.1.3", 6736 - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.3.tgz", 6737 - "integrity": "sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==", 7749 + "version": "19.2.3", 7750 + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", 7751 + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", 6738 7752 "devOptional": true, 6739 - "license": "MIT", 6740 7753 "peerDependencies": { 6741 - "@types/react": "^19.0.0" 7754 + "@types/react": "^19.2.0" 6742 7755 } 6743 7756 }, 6744 7757 "node_modules/@types/shimmer": { ··· 6776 7789 } 6777 7790 }, 6778 7791 "node_modules/@typescript-eslint/eslint-plugin": { 6779 - "version": "8.32.0", 6780 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", 6781 - "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", 7792 + "version": "8.47.0", 7793 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz", 7794 + "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==", 6782 7795 "dev": true, 6783 - "license": "MIT", 6784 7796 "dependencies": { 6785 7797 "@eslint-community/regexpp": "^4.10.0", 6786 - "@typescript-eslint/scope-manager": "8.32.0", 6787 - "@typescript-eslint/type-utils": "8.32.0", 6788 - "@typescript-eslint/utils": "8.32.0", 6789 - "@typescript-eslint/visitor-keys": "8.32.0", 7798 + "@typescript-eslint/scope-manager": "8.47.0", 7799 + "@typescript-eslint/type-utils": "8.47.0", 7800 + "@typescript-eslint/utils": "8.47.0", 7801 + "@typescript-eslint/visitor-keys": "8.47.0", 6790 7802 "graphemer": "^1.4.0", 6791 - "ignore": "^5.3.1", 7803 + "ignore": "^7.0.0", 6792 7804 "natural-compare": "^1.4.0", 6793 7805 "ts-api-utils": "^2.1.0" 6794 7806 }, ··· 6800 7812 "url": "https://opencollective.com/typescript-eslint" 6801 7813 }, 6802 7814 "peerDependencies": { 6803 - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", 7815 + "@typescript-eslint/parser": "^8.47.0", 6804 7816 "eslint": "^8.57.0 || ^9.0.0", 6805 - "typescript": ">=4.8.4 <5.9.0" 7817 + "typescript": ">=4.8.4 <6.0.0" 7818 + } 7819 + }, 7820 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 7821 + "version": "7.0.5", 7822 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", 7823 + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", 7824 + "dev": true, 7825 + "engines": { 7826 + "node": ">= 4" 6806 7827 } 6807 7828 }, 6808 7829 "node_modules/@typescript-eslint/parser": { 6809 - "version": "8.32.0", 6810 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", 6811 - "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", 7830 + "version": "8.47.0", 7831 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz", 7832 + "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", 6812 7833 "dev": true, 6813 - "license": "MIT", 6814 7834 "dependencies": { 6815 - "@typescript-eslint/scope-manager": "8.32.0", 6816 - "@typescript-eslint/types": "8.32.0", 6817 - "@typescript-eslint/typescript-estree": "8.32.0", 6818 - "@typescript-eslint/visitor-keys": "8.32.0", 7835 + "@typescript-eslint/scope-manager": "8.47.0", 7836 + "@typescript-eslint/types": "8.47.0", 7837 + "@typescript-eslint/typescript-estree": "8.47.0", 7838 + "@typescript-eslint/visitor-keys": "8.47.0", 6819 7839 "debug": "^4.3.4" 6820 7840 }, 6821 7841 "engines": { ··· 6827 7847 }, 6828 7848 "peerDependencies": { 6829 7849 "eslint": "^8.57.0 || ^9.0.0", 6830 - "typescript": ">=4.8.4 <5.9.0" 7850 + "typescript": ">=4.8.4 <6.0.0" 7851 + } 7852 + }, 7853 + "node_modules/@typescript-eslint/project-service": { 7854 + "version": "8.47.0", 7855 + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", 7856 + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", 7857 + "dev": true, 7858 + "dependencies": { 7859 + "@typescript-eslint/tsconfig-utils": "^8.47.0", 7860 + "@typescript-eslint/types": "^8.47.0", 7861 + "debug": "^4.3.4" 7862 + }, 7863 + "engines": { 7864 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 7865 + }, 7866 + "funding": { 7867 + "type": "opencollective", 7868 + "url": "https://opencollective.com/typescript-eslint" 7869 + }, 7870 + "peerDependencies": { 7871 + "typescript": ">=4.8.4 <6.0.0" 6831 7872 } 6832 7873 }, 6833 7874 "node_modules/@typescript-eslint/scope-manager": { 6834 - "version": "8.32.0", 6835 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", 6836 - "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", 7875 + "version": "8.47.0", 7876 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", 7877 + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", 6837 7878 "dev": true, 6838 - "license": "MIT", 6839 7879 "dependencies": { 6840 - "@typescript-eslint/types": "8.32.0", 6841 - "@typescript-eslint/visitor-keys": "8.32.0" 7880 + "@typescript-eslint/types": "8.47.0", 7881 + "@typescript-eslint/visitor-keys": "8.47.0" 6842 7882 }, 6843 7883 "engines": { 6844 7884 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 6848 7888 "url": "https://opencollective.com/typescript-eslint" 6849 7889 } 6850 7890 }, 7891 + "node_modules/@typescript-eslint/tsconfig-utils": { 7892 + "version": "8.47.0", 7893 + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", 7894 + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", 7895 + "dev": true, 7896 + "engines": { 7897 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 7898 + }, 7899 + "funding": { 7900 + "type": "opencollective", 7901 + "url": "https://opencollective.com/typescript-eslint" 7902 + }, 7903 + "peerDependencies": { 7904 + "typescript": ">=4.8.4 <6.0.0" 7905 + } 7906 + }, 6851 7907 "node_modules/@typescript-eslint/type-utils": { 6852 - "version": "8.32.0", 6853 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", 6854 - "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", 7908 + "version": "8.47.0", 7909 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", 7910 + "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", 6855 7911 "dev": true, 6856 - "license": "MIT", 6857 7912 "dependencies": { 6858 - "@typescript-eslint/typescript-estree": "8.32.0", 6859 - "@typescript-eslint/utils": "8.32.0", 7913 + "@typescript-eslint/types": "8.47.0", 7914 + "@typescript-eslint/typescript-estree": "8.47.0", 7915 + "@typescript-eslint/utils": "8.47.0", 6860 7916 "debug": "^4.3.4", 6861 7917 "ts-api-utils": "^2.1.0" 6862 7918 }, ··· 6869 7925 }, 6870 7926 "peerDependencies": { 6871 7927 "eslint": "^8.57.0 || ^9.0.0", 6872 - "typescript": ">=4.8.4 <5.9.0" 7928 + "typescript": ">=4.8.4 <6.0.0" 6873 7929 } 6874 7930 }, 6875 7931 "node_modules/@typescript-eslint/types": { 6876 - "version": "8.32.0", 6877 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", 6878 - "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", 7932 + "version": "8.47.0", 7933 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", 7934 + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", 6879 7935 "dev": true, 6880 - "license": "MIT", 6881 7936 "engines": { 6882 7937 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 6883 7938 }, ··· 6887 7942 } 6888 7943 }, 6889 7944 "node_modules/@typescript-eslint/typescript-estree": { 6890 - "version": "8.32.0", 6891 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", 6892 - "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", 7945 + "version": "8.47.0", 7946 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", 7947 + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", 6893 7948 "dev": true, 6894 - "license": "MIT", 6895 7949 "dependencies": { 6896 - "@typescript-eslint/types": "8.32.0", 6897 - "@typescript-eslint/visitor-keys": "8.32.0", 7950 + "@typescript-eslint/project-service": "8.47.0", 7951 + "@typescript-eslint/tsconfig-utils": "8.47.0", 7952 + "@typescript-eslint/types": "8.47.0", 7953 + "@typescript-eslint/visitor-keys": "8.47.0", 6898 7954 "debug": "^4.3.4", 6899 7955 "fast-glob": "^3.3.2", 6900 7956 "is-glob": "^4.0.3", ··· 6910 7966 "url": "https://opencollective.com/typescript-eslint" 6911 7967 }, 6912 7968 "peerDependencies": { 6913 - "typescript": ">=4.8.4 <5.9.0" 7969 + "typescript": ">=4.8.4 <6.0.0" 6914 7970 } 6915 7971 }, 6916 7972 "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 6917 - "version": "2.0.1", 6918 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 6919 - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 7973 + "version": "2.0.2", 7974 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 7975 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 6920 7976 "dev": true, 6921 - "license": "MIT", 6922 7977 "dependencies": { 6923 7978 "balanced-match": "^1.0.0" 6924 7979 } ··· 6928 7983 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 6929 7984 "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 6930 7985 "dev": true, 6931 - "license": "ISC", 6932 7986 "dependencies": { 6933 7987 "brace-expansion": "^2.0.1" 6934 7988 }, ··· 6940 7994 } 6941 7995 }, 6942 7996 "node_modules/@typescript-eslint/utils": { 6943 - "version": "8.32.0", 6944 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", 6945 - "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", 7997 + "version": "8.47.0", 7998 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", 7999 + "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", 6946 8000 "dev": true, 6947 - "license": "MIT", 6948 8001 "dependencies": { 6949 8002 "@eslint-community/eslint-utils": "^4.7.0", 6950 - "@typescript-eslint/scope-manager": "8.32.0", 6951 - "@typescript-eslint/types": "8.32.0", 6952 - "@typescript-eslint/typescript-estree": "8.32.0" 8003 + "@typescript-eslint/scope-manager": "8.47.0", 8004 + "@typescript-eslint/types": "8.47.0", 8005 + "@typescript-eslint/typescript-estree": "8.47.0" 6953 8006 }, 6954 8007 "engines": { 6955 8008 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 6960 8013 }, 6961 8014 "peerDependencies": { 6962 8015 "eslint": "^8.57.0 || ^9.0.0", 6963 - "typescript": ">=4.8.4 <5.9.0" 8016 + "typescript": ">=4.8.4 <6.0.0" 6964 8017 } 6965 8018 }, 6966 8019 "node_modules/@typescript-eslint/visitor-keys": { 6967 - "version": "8.32.0", 6968 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", 6969 - "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", 8020 + "version": "8.47.0", 8021 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", 8022 + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", 6970 8023 "dev": true, 6971 - "license": "MIT", 6972 8024 "dependencies": { 6973 - "@typescript-eslint/types": "8.32.0", 6974 - "eslint-visitor-keys": "^4.2.0" 8025 + "@typescript-eslint/types": "8.47.0", 8026 + "eslint-visitor-keys": "^4.2.1" 6975 8027 }, 6976 8028 "engines": { 6977 8029 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" ··· 6979 8031 "funding": { 6980 8032 "type": "opencollective", 6981 8033 "url": "https://opencollective.com/typescript-eslint" 6982 - } 6983 - }, 6984 - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { 6985 - "version": "4.2.0", 6986 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 6987 - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 6988 - "dev": true, 6989 - "license": "Apache-2.0", 6990 - "engines": { 6991 - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 6992 - }, 6993 - "funding": { 6994 - "url": "https://opencollective.com/eslint" 6995 8034 } 6996 8035 }, 6997 8036 "node_modules/@ungap/structured-clone": { ··· 7167 8206 "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 7168 8207 "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 7169 8208 "dev": true, 7170 - "license": "MIT", 7171 8209 "dependencies": { 7172 8210 "fast-deep-equal": "^3.1.3", 7173 8211 "fast-uri": "^3.0.1", ··· 7264 8302 "license": "MIT" 7265 8303 }, 7266 8304 "node_modules/array-includes": { 7267 - "version": "3.1.8", 7268 - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", 7269 - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", 8305 + "version": "3.1.9", 8306 + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", 8307 + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", 7270 8308 "dev": true, 7271 8309 "dependencies": { 7272 - "call-bind": "^1.0.7", 8310 + "call-bind": "^1.0.8", 8311 + "call-bound": "^1.0.4", 7273 8312 "define-properties": "^1.2.1", 7274 - "es-abstract": "^1.23.2", 7275 - "es-object-atoms": "^1.0.0", 7276 - "get-intrinsic": "^1.2.4", 7277 - "is-string": "^1.0.7" 8313 + "es-abstract": "^1.24.0", 8314 + "es-object-atoms": "^1.1.1", 8315 + "get-intrinsic": "^1.3.0", 8316 + "is-string": "^1.1.1", 8317 + "math-intrinsics": "^1.1.0" 7278 8318 }, 7279 8319 "engines": { 7280 8320 "node": ">= 0.4" ··· 7305 8345 } 7306 8346 }, 7307 8347 "node_modules/array.prototype.findlastindex": { 7308 - "version": "1.2.5", 7309 - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", 7310 - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", 8348 + "version": "1.2.6", 8349 + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", 8350 + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", 7311 8351 "dev": true, 7312 8352 "dependencies": { 7313 - "call-bind": "^1.0.7", 8353 + "call-bind": "^1.0.8", 8354 + "call-bound": "^1.0.4", 7314 8355 "define-properties": "^1.2.1", 7315 - "es-abstract": "^1.23.2", 8356 + "es-abstract": "^1.23.9", 7316 8357 "es-errors": "^1.3.0", 7317 - "es-object-atoms": "^1.0.0", 7318 - "es-shim-unscopables": "^1.0.2" 8358 + "es-object-atoms": "^1.1.1", 8359 + "es-shim-unscopables": "^1.1.0" 7319 8360 }, 7320 8361 "engines": { 7321 8362 "node": ">= 0.4" ··· 7325 8366 } 7326 8367 }, 7327 8368 "node_modules/array.prototype.flat": { 7328 - "version": "1.3.2", 7329 - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", 7330 - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", 8369 + "version": "1.3.3", 8370 + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", 8371 + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", 7331 8372 "dev": true, 7332 8373 "dependencies": { 7333 - "call-bind": "^1.0.2", 7334 - "define-properties": "^1.2.0", 7335 - "es-abstract": "^1.22.1", 7336 - "es-shim-unscopables": "^1.0.0" 8374 + "call-bind": "^1.0.8", 8375 + "define-properties": "^1.2.1", 8376 + "es-abstract": "^1.23.5", 8377 + "es-shim-unscopables": "^1.0.2" 7337 8378 }, 7338 8379 "engines": { 7339 8380 "node": ">= 0.4" ··· 7544 8585 } 7545 8586 ] 7546 8587 }, 8588 + "node_modules/baseline-browser-mapping": { 8589 + "version": "2.8.30", 8590 + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", 8591 + "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", 8592 + "dev": true, 8593 + "bin": { 8594 + "baseline-browser-mapping": "dist/cli.js" 8595 + } 8596 + }, 7547 8597 "node_modules/bignumber.js": { 7548 8598 "version": "9.3.1", 7549 8599 "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", ··· 7662 8712 "node": ">=8" 7663 8713 } 7664 8714 }, 8715 + "node_modules/browserslist": { 8716 + "version": "4.28.0", 8717 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", 8718 + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", 8719 + "dev": true, 8720 + "funding": [ 8721 + { 8722 + "type": "opencollective", 8723 + "url": "https://opencollective.com/browserslist" 8724 + }, 8725 + { 8726 + "type": "tidelift", 8727 + "url": "https://tidelift.com/funding/github/npm/browserslist" 8728 + }, 8729 + { 8730 + "type": "github", 8731 + "url": "https://github.com/sponsors/ai" 8732 + } 8733 + ], 8734 + "dependencies": { 8735 + "baseline-browser-mapping": "^2.8.25", 8736 + "caniuse-lite": "^1.0.30001754", 8737 + "electron-to-chromium": "^1.5.249", 8738 + "node-releases": "^2.0.27", 8739 + "update-browserslist-db": "^1.1.4" 8740 + }, 8741 + "bin": { 8742 + "browserslist": "cli.js" 8743 + }, 8744 + "engines": { 8745 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 8746 + } 8747 + }, 7665 8748 "node_modules/buffer": { 7666 8749 "version": "6.0.3", 7667 8750 "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", ··· 7765 8848 } 7766 8849 }, 7767 8850 "node_modules/caniuse-lite": { 7768 - "version": "1.0.30001717", 7769 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", 7770 - "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", 8851 + "version": "1.0.30001756", 8852 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", 8853 + "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", 7771 8854 "funding": [ 7772 8855 { 7773 8856 "type": "opencollective", ··· 7781 8864 "type": "github", 7782 8865 "url": "https://github.com/sponsors/ai" 7783 8866 } 7784 - ], 7785 - "license": "CC-BY-4.0" 8867 + ] 7786 8868 }, 7787 8869 "node_modules/canonicalize": { 7788 8870 "version": "1.0.8", ··· 8105 9187 "node": ">= 0.6" 8106 9188 } 8107 9189 }, 9190 + "node_modules/convert-source-map": { 9191 + "version": "2.0.0", 9192 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 9193 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 9194 + "dev": true 9195 + }, 8108 9196 "node_modules/cookie": { 8109 9197 "version": "0.5.0", 8110 9198 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", ··· 8156 9244 } 8157 9245 }, 8158 9246 "node_modules/cross-spawn": { 8159 - "version": "7.0.3", 8160 - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 8161 - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 9247 + "version": "7.0.6", 9248 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 9249 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 8162 9250 "dev": true, 8163 9251 "dependencies": { 8164 9252 "path-key": "^3.1.0", ··· 8170 9258 } 8171 9259 }, 8172 9260 "node_modules/csstype": { 8173 - "version": "3.1.3", 8174 - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 8175 - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 9261 + "version": "3.2.3", 9262 + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", 9263 + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" 8176 9264 }, 8177 9265 "node_modules/d": { 8178 9266 "version": "1.0.2", ··· 8434 9522 "node": "*" 8435 9523 } 8436 9524 }, 8437 - "node_modules/doctrine": { 8438 - "version": "3.0.0", 8439 - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 8440 - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 8441 - "dev": true, 8442 - "dependencies": { 8443 - "esutils": "^2.0.2" 8444 - }, 8445 - "engines": { 8446 - "node": ">=6.0.0" 8447 - } 8448 - }, 8449 9525 "node_modules/dreamopt": { 8450 9526 "version": "0.8.0", 8451 9527 "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz", ··· 8478 9554 "drizzle-kit": "bin.cjs" 8479 9555 } 8480 9556 }, 9557 + "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": { 9558 + "version": "0.19.12", 9559 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 9560 + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 9561 + "cpu": [ 9562 + "ppc64" 9563 + ], 9564 + "dev": true, 9565 + "optional": true, 9566 + "os": [ 9567 + "aix" 9568 + ], 9569 + "engines": { 9570 + "node": ">=12" 9571 + } 9572 + }, 9573 + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": { 9574 + "version": "0.19.12", 9575 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 9576 + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 9577 + "cpu": [ 9578 + "arm" 9579 + ], 9580 + "dev": true, 9581 + "optional": true, 9582 + "os": [ 9583 + "android" 9584 + ], 9585 + "engines": { 9586 + "node": ">=12" 9587 + } 9588 + }, 9589 + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": { 9590 + "version": "0.19.12", 9591 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 9592 + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 9593 + "cpu": [ 9594 + "arm64" 9595 + ], 9596 + "dev": true, 9597 + "optional": true, 9598 + "os": [ 9599 + "android" 9600 + ], 9601 + "engines": { 9602 + "node": ">=12" 9603 + } 9604 + }, 9605 + "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": { 9606 + "version": "0.19.12", 9607 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 9608 + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 9609 + "cpu": [ 9610 + "x64" 9611 + ], 9612 + "dev": true, 9613 + "optional": true, 9614 + "os": [ 9615 + "android" 9616 + ], 9617 + "engines": { 9618 + "node": ">=12" 9619 + } 9620 + }, 9621 + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": { 9622 + "version": "0.19.12", 9623 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 9624 + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 9625 + "cpu": [ 9626 + "arm64" 9627 + ], 9628 + "dev": true, 9629 + "optional": true, 9630 + "os": [ 9631 + "darwin" 9632 + ], 9633 + "engines": { 9634 + "node": ">=12" 9635 + } 9636 + }, 9637 + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": { 9638 + "version": "0.19.12", 9639 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 9640 + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 9641 + "cpu": [ 9642 + "x64" 9643 + ], 9644 + "dev": true, 9645 + "optional": true, 9646 + "os": [ 9647 + "darwin" 9648 + ], 9649 + "engines": { 9650 + "node": ">=12" 9651 + } 9652 + }, 9653 + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": { 9654 + "version": "0.19.12", 9655 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 9656 + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 9657 + "cpu": [ 9658 + "arm64" 9659 + ], 9660 + "dev": true, 9661 + "optional": true, 9662 + "os": [ 9663 + "freebsd" 9664 + ], 9665 + "engines": { 9666 + "node": ">=12" 9667 + } 9668 + }, 9669 + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": { 9670 + "version": "0.19.12", 9671 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 9672 + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 9673 + "cpu": [ 9674 + "x64" 9675 + ], 9676 + "dev": true, 9677 + "optional": true, 9678 + "os": [ 9679 + "freebsd" 9680 + ], 9681 + "engines": { 9682 + "node": ">=12" 9683 + } 9684 + }, 9685 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": { 9686 + "version": "0.19.12", 9687 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 9688 + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 9689 + "cpu": [ 9690 + "arm" 9691 + ], 9692 + "dev": true, 9693 + "optional": true, 9694 + "os": [ 9695 + "linux" 9696 + ], 9697 + "engines": { 9698 + "node": ">=12" 9699 + } 9700 + }, 9701 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": { 9702 + "version": "0.19.12", 9703 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 9704 + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 9705 + "cpu": [ 9706 + "arm64" 9707 + ], 9708 + "dev": true, 9709 + "optional": true, 9710 + "os": [ 9711 + "linux" 9712 + ], 9713 + "engines": { 9714 + "node": ">=12" 9715 + } 9716 + }, 9717 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": { 9718 + "version": "0.19.12", 9719 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 9720 + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 9721 + "cpu": [ 9722 + "ia32" 9723 + ], 9724 + "dev": true, 9725 + "optional": true, 9726 + "os": [ 9727 + "linux" 9728 + ], 9729 + "engines": { 9730 + "node": ">=12" 9731 + } 9732 + }, 9733 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": { 9734 + "version": "0.19.12", 9735 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 9736 + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 9737 + "cpu": [ 9738 + "loong64" 9739 + ], 9740 + "dev": true, 9741 + "optional": true, 9742 + "os": [ 9743 + "linux" 9744 + ], 9745 + "engines": { 9746 + "node": ">=12" 9747 + } 9748 + }, 9749 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": { 9750 + "version": "0.19.12", 9751 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 9752 + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 9753 + "cpu": [ 9754 + "mips64el" 9755 + ], 9756 + "dev": true, 9757 + "optional": true, 9758 + "os": [ 9759 + "linux" 9760 + ], 9761 + "engines": { 9762 + "node": ">=12" 9763 + } 9764 + }, 9765 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": { 9766 + "version": "0.19.12", 9767 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 9768 + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 9769 + "cpu": [ 9770 + "ppc64" 9771 + ], 9772 + "dev": true, 9773 + "optional": true, 9774 + "os": [ 9775 + "linux" 9776 + ], 9777 + "engines": { 9778 + "node": ">=12" 9779 + } 9780 + }, 9781 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": { 9782 + "version": "0.19.12", 9783 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 9784 + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 9785 + "cpu": [ 9786 + "riscv64" 9787 + ], 9788 + "dev": true, 9789 + "optional": true, 9790 + "os": [ 9791 + "linux" 9792 + ], 9793 + "engines": { 9794 + "node": ">=12" 9795 + } 9796 + }, 9797 + "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": { 9798 + "version": "0.19.12", 9799 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 9800 + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 9801 + "cpu": [ 9802 + "s390x" 9803 + ], 9804 + "dev": true, 9805 + "optional": true, 9806 + "os": [ 9807 + "linux" 9808 + ], 9809 + "engines": { 9810 + "node": ">=12" 9811 + } 9812 + }, 8481 9813 "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": { 8482 9814 "version": "0.19.12", 8483 9815 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", ··· 8495 9827 "node": ">=12" 8496 9828 } 8497 9829 }, 9830 + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": { 9831 + "version": "0.19.12", 9832 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 9833 + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 9834 + "cpu": [ 9835 + "x64" 9836 + ], 9837 + "dev": true, 9838 + "optional": true, 9839 + "os": [ 9840 + "netbsd" 9841 + ], 9842 + "engines": { 9843 + "node": ">=12" 9844 + } 9845 + }, 9846 + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": { 9847 + "version": "0.19.12", 9848 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 9849 + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 9850 + "cpu": [ 9851 + "x64" 9852 + ], 9853 + "dev": true, 9854 + "optional": true, 9855 + "os": [ 9856 + "openbsd" 9857 + ], 9858 + "engines": { 9859 + "node": ">=12" 9860 + } 9861 + }, 9862 + "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": { 9863 + "version": "0.19.12", 9864 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 9865 + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 9866 + "cpu": [ 9867 + "x64" 9868 + ], 9869 + "dev": true, 9870 + "optional": true, 9871 + "os": [ 9872 + "sunos" 9873 + ], 9874 + "engines": { 9875 + "node": ">=12" 9876 + } 9877 + }, 9878 + "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": { 9879 + "version": "0.19.12", 9880 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 9881 + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 9882 + "cpu": [ 9883 + "arm64" 9884 + ], 9885 + "dev": true, 9886 + "optional": true, 9887 + "os": [ 9888 + "win32" 9889 + ], 9890 + "engines": { 9891 + "node": ">=12" 9892 + } 9893 + }, 9894 + "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": { 9895 + "version": "0.19.12", 9896 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 9897 + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 9898 + "cpu": [ 9899 + "ia32" 9900 + ], 9901 + "dev": true, 9902 + "optional": true, 9903 + "os": [ 9904 + "win32" 9905 + ], 9906 + "engines": { 9907 + "node": ">=12" 9908 + } 9909 + }, 9910 + "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": { 9911 + "version": "0.19.12", 9912 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 9913 + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 9914 + "cpu": [ 9915 + "x64" 9916 + ], 9917 + "dev": true, 9918 + "optional": true, 9919 + "os": [ 9920 + "win32" 9921 + ], 9922 + "engines": { 9923 + "node": ">=12" 9924 + } 9925 + }, 8498 9926 "node_modules/drizzle-kit/node_modules/esbuild": { 8499 9927 "version": "0.19.12", 8500 9928 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", ··· 8678 10106 "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 8679 10107 "license": "MIT" 8680 10108 }, 10109 + "node_modules/electron-to-chromium": { 10110 + "version": "1.5.258", 10111 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.258.tgz", 10112 + "integrity": "sha512-rHUggNV5jKQ0sSdWwlaRDkFc3/rRJIVnOSe9yR4zrR07m3ZxhP4N27Hlg8VeJGGYgFTxK5NqDmWI4DSH72vIJg==", 10113 + "dev": true 10114 + }, 8681 10115 "node_modules/emoji-regex": { 8682 10116 "version": "9.2.2", 8683 10117 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", ··· 8731 10165 } 8732 10166 }, 8733 10167 "node_modules/es-abstract": { 8734 - "version": "1.23.9", 8735 - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", 8736 - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", 10168 + "version": "1.24.0", 10169 + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", 10170 + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", 8737 10171 "dev": true, 8738 - "license": "MIT", 8739 10172 "dependencies": { 8740 10173 "array-buffer-byte-length": "^1.0.2", 8741 10174 "arraybuffer.prototype.slice": "^1.0.4", 8742 10175 "available-typed-arrays": "^1.0.7", 8743 10176 "call-bind": "^1.0.8", 8744 - "call-bound": "^1.0.3", 10177 + "call-bound": "^1.0.4", 8745 10178 "data-view-buffer": "^1.0.2", 8746 10179 "data-view-byte-length": "^1.0.2", 8747 10180 "data-view-byte-offset": "^1.0.1", 8748 10181 "es-define-property": "^1.0.1", 8749 10182 "es-errors": "^1.3.0", 8750 - "es-object-atoms": "^1.0.0", 10183 + "es-object-atoms": "^1.1.1", 8751 10184 "es-set-tostringtag": "^2.1.0", 8752 10185 "es-to-primitive": "^1.3.0", 8753 10186 "function.prototype.name": "^1.1.8", 8754 - "get-intrinsic": "^1.2.7", 8755 - "get-proto": "^1.0.0", 10187 + "get-intrinsic": "^1.3.0", 10188 + "get-proto": "^1.0.1", 8756 10189 "get-symbol-description": "^1.1.0", 8757 10190 "globalthis": "^1.0.4", 8758 10191 "gopd": "^1.2.0", ··· 8764 10197 "is-array-buffer": "^3.0.5", 8765 10198 "is-callable": "^1.2.7", 8766 10199 "is-data-view": "^1.0.2", 10200 + "is-negative-zero": "^2.0.3", 8767 10201 "is-regex": "^1.2.1", 10202 + "is-set": "^2.0.3", 8768 10203 "is-shared-array-buffer": "^1.0.4", 8769 10204 "is-string": "^1.1.1", 8770 10205 "is-typed-array": "^1.1.15", 8771 - "is-weakref": "^1.1.0", 10206 + "is-weakref": "^1.1.1", 8772 10207 "math-intrinsics": "^1.1.0", 8773 - "object-inspect": "^1.13.3", 10208 + "object-inspect": "^1.13.4", 8774 10209 "object-keys": "^1.1.1", 8775 10210 "object.assign": "^4.1.7", 8776 10211 "own-keys": "^1.0.1", 8777 - "regexp.prototype.flags": "^1.5.3", 10212 + "regexp.prototype.flags": "^1.5.4", 8778 10213 "safe-array-concat": "^1.1.3", 8779 10214 "safe-push-apply": "^1.0.0", 8780 10215 "safe-regex-test": "^1.1.0", 8781 10216 "set-proto": "^1.0.0", 10217 + "stop-iteration-iterator": "^1.1.0", 8782 10218 "string.prototype.trim": "^1.2.10", 8783 10219 "string.prototype.trimend": "^1.0.9", 8784 10220 "string.prototype.trimstart": "^1.0.8", ··· 8787 10223 "typed-array-byte-offset": "^1.0.4", 8788 10224 "typed-array-length": "^1.0.7", 8789 10225 "unbox-primitive": "^1.1.0", 8790 - "which-typed-array": "^1.1.18" 10226 + "which-typed-array": "^1.1.19" 8791 10227 }, 8792 10228 "engines": { 8793 10229 "node": ">= 0.4" ··· 8870 10306 } 8871 10307 }, 8872 10308 "node_modules/es-shim-unscopables": { 8873 - "version": "1.0.2", 8874 - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", 8875 - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", 10309 + "version": "1.1.0", 10310 + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", 10311 + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", 8876 10312 "dev": true, 8877 10313 "dependencies": { 8878 - "hasown": "^2.0.0" 10314 + "hasown": "^2.0.2" 10315 + }, 10316 + "engines": { 10317 + "node": ">= 0.4" 8879 10318 } 8880 10319 }, 8881 10320 "node_modules/es-to-primitive": { ··· 9031 10470 "esbuild": ">=0.12 <1" 9032 10471 } 9033 10472 }, 10473 + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { 10474 + "version": "0.25.4", 10475 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", 10476 + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", 10477 + "cpu": [ 10478 + "arm64" 10479 + ], 10480 + "dev": true, 10481 + "optional": true, 10482 + "os": [ 10483 + "darwin" 10484 + ], 10485 + "engines": { 10486 + "node": ">=18" 10487 + } 10488 + }, 9034 10489 "node_modules/escalade": { 9035 - "version": "3.1.2", 9036 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 9037 - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 10490 + "version": "3.2.0", 10491 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 10492 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 9038 10493 "engines": { 9039 10494 "node": ">=6" 9040 10495 } ··· 9057 10512 } 9058 10513 }, 9059 10514 "node_modules/eslint": { 9060 - "version": "8.57.0", 9061 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", 9062 - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", 10515 + "version": "9.39.1", 10516 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", 10517 + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", 9063 10518 "dev": true, 9064 10519 "dependencies": { 9065 - "@eslint-community/eslint-utils": "^4.2.0", 9066 - "@eslint-community/regexpp": "^4.6.1", 9067 - "@eslint/eslintrc": "^2.1.4", 9068 - "@eslint/js": "8.57.0", 9069 - "@humanwhocodes/config-array": "^0.11.14", 10520 + "@eslint-community/eslint-utils": "^4.8.0", 10521 + "@eslint-community/regexpp": "^4.12.1", 10522 + "@eslint/config-array": "^0.21.1", 10523 + "@eslint/config-helpers": "^0.4.2", 10524 + "@eslint/core": "^0.17.0", 10525 + "@eslint/eslintrc": "^3.3.1", 10526 + "@eslint/js": "9.39.1", 10527 + "@eslint/plugin-kit": "^0.4.1", 10528 + "@humanfs/node": "^0.16.6", 9070 10529 "@humanwhocodes/module-importer": "^1.0.1", 9071 - "@nodelib/fs.walk": "^1.2.8", 9072 - "@ungap/structured-clone": "^1.2.0", 10530 + "@humanwhocodes/retry": "^0.4.2", 10531 + "@types/estree": "^1.0.6", 9073 10532 "ajv": "^6.12.4", 9074 10533 "chalk": "^4.0.0", 9075 - "cross-spawn": "^7.0.2", 10534 + "cross-spawn": "^7.0.6", 9076 10535 "debug": "^4.3.2", 9077 - "doctrine": "^3.0.0", 9078 10536 "escape-string-regexp": "^4.0.0", 9079 - "eslint-scope": "^7.2.2", 9080 - "eslint-visitor-keys": "^3.4.3", 9081 - "espree": "^9.6.1", 9082 - "esquery": "^1.4.2", 10537 + "eslint-scope": "^8.4.0", 10538 + "eslint-visitor-keys": "^4.2.1", 10539 + "espree": "^10.4.0", 10540 + "esquery": "^1.5.0", 9083 10541 "esutils": "^2.0.2", 9084 10542 "fast-deep-equal": "^3.1.3", 9085 - "file-entry-cache": "^6.0.1", 10543 + "file-entry-cache": "^8.0.0", 9086 10544 "find-up": "^5.0.0", 9087 10545 "glob-parent": "^6.0.2", 9088 - "globals": "^13.19.0", 9089 - "graphemer": "^1.4.0", 9090 10546 "ignore": "^5.2.0", 9091 10547 "imurmurhash": "^0.1.4", 9092 10548 "is-glob": "^4.0.0", 9093 - "is-path-inside": "^3.0.3", 9094 - "js-yaml": "^4.1.0", 9095 10549 "json-stable-stringify-without-jsonify": "^1.0.1", 9096 - "levn": "^0.4.1", 9097 10550 "lodash.merge": "^4.6.2", 9098 10551 "minimatch": "^3.1.2", 9099 10552 "natural-compare": "^1.4.0", 9100 - "optionator": "^0.9.3", 9101 - "strip-ansi": "^6.0.1", 9102 - "text-table": "^0.2.0" 10553 + "optionator": "^0.9.3" 9103 10554 }, 9104 10555 "bin": { 9105 10556 "eslint": "bin/eslint.js" 9106 10557 }, 9107 10558 "engines": { 9108 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 10559 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 9109 10560 }, 9110 10561 "funding": { 9111 - "url": "https://opencollective.com/eslint" 10562 + "url": "https://eslint.org/donate" 10563 + }, 10564 + "peerDependencies": { 10565 + "jiti": "*" 10566 + }, 10567 + "peerDependenciesMeta": { 10568 + "jiti": { 10569 + "optional": true 10570 + } 9112 10571 } 9113 10572 }, 9114 10573 "node_modules/eslint-config-next": { 9115 - "version": "15.5.3", 9116 - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.3.tgz", 9117 - "integrity": "sha512-e6j+QhQFOr5pfsc8VJbuTD9xTXJaRvMHYjEeLPA2pFkheNlgPLCkxdvhxhfuM4KGcqSZj2qEnpHisdTVs3BxuQ==", 10574 + "version": "16.0.3", 10575 + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.0.3.tgz", 10576 + "integrity": "sha512-5F6qDjcZldf0Y0ZbqvWvap9xzYUxyDf7/of37aeyhvkrQokj/4bT1JYWZdlWUr283aeVa+s52mPq9ogmGg+5dw==", 9118 10577 "dev": true, 9119 - "license": "MIT", 9120 10578 "dependencies": { 9121 - "@next/eslint-plugin-next": "15.5.3", 9122 - "@rushstack/eslint-patch": "^1.10.3", 9123 - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", 9124 - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", 10579 + "@next/eslint-plugin-next": "16.0.3", 9125 10580 "eslint-import-resolver-node": "^0.3.6", 9126 10581 "eslint-import-resolver-typescript": "^3.5.2", 9127 - "eslint-plugin-import": "^2.31.0", 10582 + "eslint-plugin-import": "^2.32.0", 9128 10583 "eslint-plugin-jsx-a11y": "^6.10.0", 9129 10584 "eslint-plugin-react": "^7.37.0", 9130 - "eslint-plugin-react-hooks": "^5.0.0" 10585 + "eslint-plugin-react-hooks": "^7.0.0", 10586 + "globals": "16.4.0", 10587 + "typescript-eslint": "^8.46.0" 9131 10588 }, 9132 10589 "peerDependencies": { 9133 - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", 10590 + "eslint": ">=9.0.0", 9134 10591 "typescript": ">=3.3.1" 9135 10592 }, 9136 10593 "peerDependenciesMeta": { 9137 10594 "typescript": { 9138 10595 "optional": true 9139 10596 } 10597 + } 10598 + }, 10599 + "node_modules/eslint-config-next/node_modules/globals": { 10600 + "version": "16.4.0", 10601 + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", 10602 + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", 10603 + "dev": true, 10604 + "engines": { 10605 + "node": ">=18" 10606 + }, 10607 + "funding": { 10608 + "url": "https://github.com/sponsors/sindresorhus" 9140 10609 } 9141 10610 }, 9142 10611 "node_modules/eslint-import-resolver-node": { ··· 9185 10654 } 9186 10655 }, 9187 10656 "node_modules/eslint-module-utils": { 9188 - "version": "2.12.0", 9189 - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", 9190 - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", 10657 + "version": "2.12.1", 10658 + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", 10659 + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", 9191 10660 "dev": true, 9192 - "license": "MIT", 9193 10661 "dependencies": { 9194 10662 "debug": "^3.2.7" 9195 10663 }, ··· 9212 10680 } 9213 10681 }, 9214 10682 "node_modules/eslint-plugin-import": { 9215 - "version": "2.31.0", 9216 - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", 9217 - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", 10683 + "version": "2.32.0", 10684 + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", 10685 + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", 9218 10686 "dev": true, 9219 - "license": "MIT", 9220 10687 "dependencies": { 9221 10688 "@rtsao/scc": "^1.1.0", 9222 - "array-includes": "^3.1.8", 9223 - "array.prototype.findlastindex": "^1.2.5", 9224 - "array.prototype.flat": "^1.3.2", 9225 - "array.prototype.flatmap": "^1.3.2", 10689 + "array-includes": "^3.1.9", 10690 + "array.prototype.findlastindex": "^1.2.6", 10691 + "array.prototype.flat": "^1.3.3", 10692 + "array.prototype.flatmap": "^1.3.3", 9226 10693 "debug": "^3.2.7", 9227 10694 "doctrine": "^2.1.0", 9228 10695 "eslint-import-resolver-node": "^0.3.9", 9229 - "eslint-module-utils": "^2.12.0", 10696 + "eslint-module-utils": "^2.12.1", 9230 10697 "hasown": "^2.0.2", 9231 - "is-core-module": "^2.15.1", 10698 + "is-core-module": "^2.16.1", 9232 10699 "is-glob": "^4.0.3", 9233 10700 "minimatch": "^3.1.2", 9234 10701 "object.fromentries": "^2.0.8", 9235 10702 "object.groupby": "^1.0.3", 9236 - "object.values": "^1.2.0", 10703 + "object.values": "^1.2.1", 9237 10704 "semver": "^6.3.1", 9238 - "string.prototype.trimend": "^1.0.8", 10705 + "string.prototype.trimend": "^1.0.9", 9239 10706 "tsconfig-paths": "^3.15.0" 9240 10707 }, 9241 10708 "engines": { ··· 9339 10806 } 9340 10807 }, 9341 10808 "node_modules/eslint-plugin-react-hooks": { 9342 - "version": "5.2.0", 9343 - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", 9344 - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", 10809 + "version": "7.0.1", 10810 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", 10811 + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", 9345 10812 "dev": true, 9346 - "license": "MIT", 10813 + "dependencies": { 10814 + "@babel/core": "^7.24.4", 10815 + "@babel/parser": "^7.24.4", 10816 + "hermes-parser": "^0.25.1", 10817 + "zod": "^3.25.0 || ^4.0.0", 10818 + "zod-validation-error": "^3.5.0 || ^4.0.0" 10819 + }, 9347 10820 "engines": { 9348 - "node": ">=10" 10821 + "node": ">=18" 9349 10822 }, 9350 10823 "peerDependencies": { 9351 10824 "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 9352 10825 } 9353 10826 }, 10827 + "node_modules/eslint-plugin-react-hooks/node_modules/zod": { 10828 + "version": "4.1.12", 10829 + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", 10830 + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", 10831 + "dev": true, 10832 + "funding": { 10833 + "url": "https://github.com/sponsors/colinhacks" 10834 + } 10835 + }, 10836 + "node_modules/eslint-plugin-react-hooks/node_modules/zod-validation-error": { 10837 + "version": "4.0.2", 10838 + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", 10839 + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", 10840 + "dev": true, 10841 + "engines": { 10842 + "node": ">=18.0.0" 10843 + }, 10844 + "peerDependencies": { 10845 + "zod": "^3.25.0 || ^4.0.0" 10846 + } 10847 + }, 9354 10848 "node_modules/eslint-plugin-react/node_modules/doctrine": { 9355 10849 "version": "2.1.0", 9356 10850 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", ··· 9393 10887 } 9394 10888 }, 9395 10889 "node_modules/eslint-scope": { 9396 - "version": "7.2.2", 9397 - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 9398 - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 10890 + "version": "8.4.0", 10891 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", 10892 + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", 9399 10893 "dev": true, 9400 10894 "dependencies": { 9401 10895 "esrecurse": "^4.3.0", 9402 10896 "estraverse": "^5.2.0" 9403 10897 }, 9404 10898 "engines": { 9405 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 10899 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 9406 10900 }, 9407 10901 "funding": { 9408 10902 "url": "https://opencollective.com/eslint" 9409 10903 } 9410 10904 }, 9411 10905 "node_modules/eslint-visitor-keys": { 9412 - "version": "3.4.3", 9413 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 9414 - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 10906 + "version": "4.2.1", 10907 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", 10908 + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", 9415 10909 "dev": true, 9416 10910 "engines": { 9417 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 10911 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 9418 10912 }, 9419 10913 "funding": { 9420 10914 "url": "https://opencollective.com/eslint" ··· 9436 10930 } 9437 10931 }, 9438 10932 "node_modules/espree": { 9439 - "version": "9.6.1", 9440 - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 9441 - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 10933 + "version": "10.4.0", 10934 + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", 10935 + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", 9442 10936 "dev": true, 9443 10937 "dependencies": { 9444 - "acorn": "^8.9.0", 10938 + "acorn": "^8.15.0", 9445 10939 "acorn-jsx": "^5.3.2", 9446 - "eslint-visitor-keys": "^3.4.1" 10940 + "eslint-visitor-keys": "^4.2.1" 9447 10941 }, 9448 10942 "engines": { 9449 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 10943 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 9450 10944 }, 9451 10945 "funding": { 9452 10946 "url": "https://opencollective.com/eslint" ··· 9802 11296 } 9803 11297 }, 9804 11298 "node_modules/fast-uri": { 9805 - "version": "3.0.5", 9806 - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", 9807 - "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", 11299 + "version": "3.1.0", 11300 + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", 11301 + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", 9808 11302 "dev": true, 9809 11303 "funding": [ 9810 11304 { ··· 9815 11309 "type": "opencollective", 9816 11310 "url": "https://opencollective.com/fastify" 9817 11311 } 9818 - ], 9819 - "license": "BSD-3-Clause" 11312 + ] 9820 11313 }, 9821 11314 "node_modules/fastq": { 9822 11315 "version": "1.17.1", ··· 9864 11357 } 9865 11358 }, 9866 11359 "node_modules/file-entry-cache": { 9867 - "version": "6.0.1", 9868 - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 9869 - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 11360 + "version": "8.0.0", 11361 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 11362 + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 9870 11363 "dev": true, 9871 11364 "dependencies": { 9872 - "flat-cache": "^3.0.4" 11365 + "flat-cache": "^4.0.0" 9873 11366 }, 9874 11367 "engines": { 9875 - "node": "^10.12.0 || >=12.0.0" 11368 + "node": ">=16.0.0" 9876 11369 } 9877 11370 }, 9878 11371 "node_modules/fill-range": { ··· 9937 11430 } 9938 11431 }, 9939 11432 "node_modules/flat-cache": { 9940 - "version": "3.2.0", 9941 - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", 9942 - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 11433 + "version": "4.0.1", 11434 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 11435 + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 9943 11436 "dev": true, 9944 11437 "dependencies": { 9945 11438 "flatted": "^3.2.9", 9946 - "keyv": "^4.5.3", 9947 - "rimraf": "^3.0.2" 11439 + "keyv": "^4.5.4" 9948 11440 }, 9949 11441 "engines": { 9950 - "node": "^10.12.0 || >=12.0.0" 11442 + "node": ">=16" 9951 11443 } 9952 11444 }, 9953 11445 "node_modules/flatted": { 9954 - "version": "3.3.1", 9955 - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 9956 - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 11446 + "version": "3.3.3", 11447 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 11448 + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 9957 11449 "dev": true 9958 11450 }, 9959 11451 "node_modules/follow-redirects": { ··· 10155 11647 "node": ">=14" 10156 11648 } 10157 11649 }, 11650 + "node_modules/gensync": { 11651 + "version": "1.0.0-beta.2", 11652 + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 11653 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 11654 + "dev": true, 11655 + "engines": { 11656 + "node": ">=6.9.0" 11657 + } 11658 + }, 10158 11659 "node_modules/get-caller-file": { 10159 11660 "version": "2.0.5", 10160 11661 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", ··· 10316 11817 } 10317 11818 }, 10318 11819 "node_modules/globals": { 10319 - "version": "13.24.0", 10320 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 10321 - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 11820 + "version": "14.0.0", 11821 + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 11822 + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 10322 11823 "dev": true, 10323 - "dependencies": { 10324 - "type-fest": "^0.20.2" 10325 - }, 10326 11824 "engines": { 10327 - "node": ">=8" 11825 + "node": ">=18" 10328 11826 }, 10329 11827 "funding": { 10330 11828 "url": "https://github.com/sponsors/sindresorhus" ··· 10784 12282 "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", 10785 12283 "dev": true 10786 12284 }, 12285 + "node_modules/hermes-estree": { 12286 + "version": "0.25.1", 12287 + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", 12288 + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", 12289 + "dev": true 12290 + }, 12291 + "node_modules/hermes-parser": { 12292 + "version": "0.25.1", 12293 + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", 12294 + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", 12295 + "dev": true, 12296 + "dependencies": { 12297 + "hermes-estree": "0.25.1" 12298 + } 12299 + }, 10787 12300 "node_modules/hono": { 10788 12301 "version": "4.7.11", 10789 12302 "resolved": "https://registry.npmjs.org/hono/-/hono-4.7.11.tgz", ··· 10888 12401 } 10889 12402 }, 10890 12403 "node_modules/import-fresh": { 10891 - "version": "3.3.0", 10892 - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 10893 - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 12404 + "version": "3.3.1", 12405 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 12406 + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 10894 12407 "dev": true, 10895 12408 "dependencies": { 10896 12409 "parent-module": "^1.0.0", ··· 11375 12888 "url": "https://github.com/sponsors/ljharb" 11376 12889 } 11377 12890 }, 12891 + "node_modules/is-negative-zero": { 12892 + "version": "2.0.3", 12893 + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", 12894 + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", 12895 + "dev": true, 12896 + "engines": { 12897 + "node": ">= 0.4" 12898 + }, 12899 + "funding": { 12900 + "url": "https://github.com/sponsors/ljharb" 12901 + } 12902 + }, 11378 12903 "node_modules/is-number": { 11379 12904 "version": "7.0.0", 11380 12905 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", ··· 11399 12924 }, 11400 12925 "funding": { 11401 12926 "url": "https://github.com/sponsors/ljharb" 11402 - } 11403 - }, 11404 - "node_modules/is-path-inside": { 11405 - "version": "3.0.3", 11406 - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 11407 - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 11408 - "dev": true, 11409 - "engines": { 11410 - "node": ">=8" 11411 12927 } 11412 12928 }, 11413 12929 "node_modules/is-plain-obj": { ··· 11666 13182 "license": "MIT" 11667 13183 }, 11668 13184 "node_modules/js-yaml": { 11669 - "version": "4.1.0", 11670 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 11671 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 13185 + "version": "4.1.1", 13186 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", 13187 + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", 11672 13188 "dev": true, 11673 13189 "dependencies": { 11674 13190 "argparse": "^2.0.1" 11675 13191 }, 11676 13192 "bin": { 11677 13193 "js-yaml": "bin/js-yaml.js" 13194 + } 13195 + }, 13196 + "node_modules/jsesc": { 13197 + "version": "3.1.0", 13198 + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 13199 + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 13200 + "dev": true, 13201 + "bin": { 13202 + "jsesc": "bin/jsesc" 13203 + }, 13204 + "engines": { 13205 + "node": ">=6" 11678 13206 } 11679 13207 }, 11680 13208 "node_modules/json-bigint": { ··· 11713 13241 "version": "1.0.0", 11714 13242 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 11715 13243 "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 11716 - "dev": true, 11717 - "license": "MIT" 13244 + "dev": true 11718 13245 }, 11719 13246 "node_modules/json-stable-stringify-without-jsonify": { 11720 13247 "version": "1.0.1", ··· 13581 15108 } 13582 15109 }, 13583 15110 "node_modules/next": { 13584 - "version": "15.5.3", 13585 - "resolved": "https://registry.npmjs.org/next/-/next-15.5.3.tgz", 13586 - "integrity": "sha512-r/liNAx16SQj4D+XH/oI1dlpv9tdKJ6cONYPwwcCC46f2NjpaRWY+EKCzULfgQYV6YKXjHBchff2IZBSlZmJNw==", 13587 - "license": "MIT", 15111 + "version": "16.0.3", 15112 + "resolved": "https://registry.npmjs.org/next/-/next-16.0.3.tgz", 15113 + "integrity": "sha512-Ka0/iNBblPFcIubTA1Jjh6gvwqfjrGq1Y2MTI5lbjeLIAfmC+p5bQmojpRZqgHHVu5cG4+qdIiwXiBSm/8lZ3w==", 13588 15114 "dependencies": { 13589 - "@next/env": "15.5.3", 15115 + "@next/env": "16.0.3", 13590 15116 "@swc/helpers": "0.5.15", 13591 15117 "caniuse-lite": "^1.0.30001579", 13592 15118 "postcss": "8.4.31", ··· 13596 15122 "next": "dist/bin/next" 13597 15123 }, 13598 15124 "engines": { 13599 - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" 15125 + "node": ">=20.9.0" 13600 15126 }, 13601 15127 "optionalDependencies": { 13602 - "@next/swc-darwin-arm64": "15.5.3", 13603 - "@next/swc-darwin-x64": "15.5.3", 13604 - "@next/swc-linux-arm64-gnu": "15.5.3", 13605 - "@next/swc-linux-arm64-musl": "15.5.3", 13606 - "@next/swc-linux-x64-gnu": "15.5.3", 13607 - "@next/swc-linux-x64-musl": "15.5.3", 13608 - "@next/swc-win32-arm64-msvc": "15.5.3", 13609 - "@next/swc-win32-x64-msvc": "15.5.3", 13610 - "sharp": "^0.34.3" 15128 + "@next/swc-darwin-arm64": "16.0.3", 15129 + "@next/swc-darwin-x64": "16.0.3", 15130 + "@next/swc-linux-arm64-gnu": "16.0.3", 15131 + "@next/swc-linux-arm64-musl": "16.0.3", 15132 + "@next/swc-linux-x64-gnu": "16.0.3", 15133 + "@next/swc-linux-x64-musl": "16.0.3", 15134 + "@next/swc-win32-arm64-msvc": "16.0.3", 15135 + "@next/swc-win32-x64-msvc": "16.0.3", 15136 + "sharp": "^0.34.4" 13611 15137 }, 13612 15138 "peerDependencies": { 13613 15139 "@opentelemetry/api": "^1.1.0", ··· 13731 15257 "node-gyp-build-optional-packages-optional": "optional.js", 13732 15258 "node-gyp-build-optional-packages-test": "build-test.js" 13733 15259 } 15260 + }, 15261 + "node_modules/node-releases": { 15262 + "version": "2.0.27", 15263 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", 15264 + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", 15265 + "dev": true 13734 15266 }, 13735 15267 "node_modules/normalize-path": { 13736 15268 "version": "3.0.0", ··· 14099 15631 "dev": true, 14100 15632 "engines": { 14101 15633 "node": ">=8" 14102 - } 14103 - }, 14104 - "node_modules/path-is-absolute": { 14105 - "version": "1.0.1", 14106 - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 14107 - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 14108 - "dev": true, 14109 - "engines": { 14110 - "node": ">=0.10.0" 14111 15634 } 14112 15635 }, 14113 15636 "node_modules/path-key": { ··· 14798 16321 } 14799 16322 }, 14800 16323 "node_modules/react": { 14801 - "version": "19.1.1", 14802 - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", 14803 - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", 14804 - "license": "MIT", 16324 + "version": "19.2.0", 16325 + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", 16326 + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", 14805 16327 "engines": { 14806 16328 "node": ">=0.10.0" 14807 16329 } ··· 14920 16442 } 14921 16443 }, 14922 16444 "node_modules/react-dom": { 14923 - "version": "19.1.1", 14924 - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", 14925 - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", 14926 - "license": "MIT", 16445 + "version": "19.2.0", 16446 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", 16447 + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", 14927 16448 "dependencies": { 14928 - "scheduler": "^0.26.0" 16449 + "scheduler": "^0.27.0" 14929 16450 }, 14930 16451 "peerDependencies": { 14931 - "react": "^19.1.1" 16452 + "react": "^19.2.0" 14932 16453 } 14933 16454 }, 14934 16455 "node_modules/react-is": { ··· 15441 16962 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 15442 16963 "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 15443 16964 "dev": true, 15444 - "license": "MIT", 15445 16965 "engines": { 15446 16966 "node": ">=0.10.0" 15447 16967 } ··· 15513 17033 "node": ">=0.10.0" 15514 17034 } 15515 17035 }, 15516 - "node_modules/rimraf": { 15517 - "version": "3.0.2", 15518 - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 15519 - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 15520 - "deprecated": "Rimraf versions prior to v4 are no longer supported", 15521 - "dev": true, 15522 - "dependencies": { 15523 - "glob": "^7.1.3" 15524 - }, 15525 - "bin": { 15526 - "rimraf": "bin.js" 15527 - }, 15528 - "funding": { 15529 - "url": "https://github.com/sponsors/isaacs" 15530 - } 15531 - }, 15532 - "node_modules/rimraf/node_modules/glob": { 15533 - "version": "7.2.3", 15534 - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 15535 - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 15536 - "deprecated": "Glob versions prior to v9 are no longer supported", 15537 - "dev": true, 15538 - "dependencies": { 15539 - "fs.realpath": "^1.0.0", 15540 - "inflight": "^1.0.4", 15541 - "inherits": "2", 15542 - "minimatch": "^3.1.1", 15543 - "once": "^1.3.0", 15544 - "path-is-absolute": "^1.0.0" 15545 - }, 15546 - "engines": { 15547 - "node": "*" 15548 - }, 15549 - "funding": { 15550 - "url": "https://github.com/sponsors/isaacs" 15551 - } 15552 - }, 15553 17036 "node_modules/rollup-plugin-inject": { 15554 17037 "version": "3.0.2", 15555 17038 "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", ··· 15707 17190 "license": "ISC" 15708 17191 }, 15709 17192 "node_modules/scheduler": { 15710 - "version": "0.26.0", 15711 - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", 15712 - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", 15713 - "license": "MIT" 17193 + "version": "0.27.0", 17194 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", 17195 + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==" 15714 17196 }, 15715 17197 "node_modules/scmp": { 15716 17198 "version": "2.1.0", ··· 16155 17637 "node": ">= 0.8" 16156 17638 } 16157 17639 }, 17640 + "node_modules/stop-iteration-iterator": { 17641 + "version": "1.1.0", 17642 + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", 17643 + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", 17644 + "dev": true, 17645 + "dependencies": { 17646 + "es-errors": "^1.3.0", 17647 + "internal-slot": "^1.1.0" 17648 + }, 17649 + "engines": { 17650 + "node": ">= 0.4" 17651 + } 17652 + }, 16158 17653 "node_modules/stoppable": { 16159 17654 "version": "1.1.0", 16160 17655 "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", ··· 16482 17977 "integrity": "sha512-lDMFv4nKQrSjlkHKAlHVqKrBG4DyFfa9F74cmBZ3Iy3ed8yvWnlWSIdi4IKfSqwmazAohBNwiN64qGx4y5Q3IQ==", 16483 17978 "license": "ISC" 16484 17979 }, 16485 - "node_modules/text-table": { 16486 - "version": "0.2.0", 16487 - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 16488 - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 16489 - "dev": true 16490 - }, 16491 17980 "node_modules/thread-stream": { 16492 17981 "version": "2.7.0", 16493 17982 "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", ··· 16643 18132 "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 16644 18133 "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", 16645 18134 "dev": true, 16646 - "license": "MIT", 16647 18135 "engines": { 16648 18136 "node": ">=18.12" 16649 18137 }, ··· 16761 18249 "node": ">= 0.8.0" 16762 18250 } 16763 18251 }, 16764 - "node_modules/type-fest": { 16765 - "version": "0.20.2", 16766 - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 16767 - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 16768 - "dev": true, 16769 - "engines": { 16770 - "node": ">=10" 16771 - }, 16772 - "funding": { 16773 - "url": "https://github.com/sponsors/sindresorhus" 16774 - } 16775 - }, 16776 18252 "node_modules/type-is": { 16777 18253 "version": "1.6.18", 16778 18254 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", ··· 16875 18351 }, 16876 18352 "engines": { 16877 18353 "node": ">=14.17" 18354 + } 18355 + }, 18356 + "node_modules/typescript-eslint": { 18357 + "version": "8.47.0", 18358 + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.47.0.tgz", 18359 + "integrity": "sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==", 18360 + "dev": true, 18361 + "dependencies": { 18362 + "@typescript-eslint/eslint-plugin": "8.47.0", 18363 + "@typescript-eslint/parser": "8.47.0", 18364 + "@typescript-eslint/typescript-estree": "8.47.0", 18365 + "@typescript-eslint/utils": "8.47.0" 18366 + }, 18367 + "engines": { 18368 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 18369 + }, 18370 + "funding": { 18371 + "type": "opencollective", 18372 + "url": "https://opencollective.com/typescript-eslint" 18373 + }, 18374 + "peerDependencies": { 18375 + "eslint": "^8.57.0 || ^9.0.0", 18376 + "typescript": ">=4.8.4 <6.0.0" 16878 18377 } 16879 18378 }, 16880 18379 "node_modules/uc.micro": { ··· 17048 18547 "node": ">= 0.8" 17049 18548 } 17050 18549 }, 18550 + "node_modules/update-browserslist-db": { 18551 + "version": "1.1.4", 18552 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", 18553 + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 18554 + "dev": true, 18555 + "funding": [ 18556 + { 18557 + "type": "opencollective", 18558 + "url": "https://opencollective.com/browserslist" 18559 + }, 18560 + { 18561 + "type": "tidelift", 18562 + "url": "https://tidelift.com/funding/github/npm/browserslist" 18563 + }, 18564 + { 18565 + "type": "github", 18566 + "url": "https://github.com/sponsors/ai" 18567 + } 18568 + ], 18569 + "dependencies": { 18570 + "escalade": "^3.2.0", 18571 + "picocolors": "^1.1.1" 18572 + }, 18573 + "bin": { 18574 + "update-browserslist-db": "cli.js" 18575 + }, 18576 + "peerDependencies": { 18577 + "browserslist": ">= 4.21.0" 18578 + } 18579 + }, 17051 18580 "node_modules/use-callback-ref": { 17052 18581 "version": "1.3.3", 17053 18582 "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", ··· 17457 18986 } 17458 18987 } 17459 18988 }, 18989 + "node_modules/wrangler/node_modules/@esbuild/android-arm": { 18990 + "version": "0.17.19", 18991 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 18992 + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 18993 + "cpu": [ 18994 + "arm" 18995 + ], 18996 + "dev": true, 18997 + "optional": true, 18998 + "os": [ 18999 + "android" 19000 + ], 19001 + "engines": { 19002 + "node": ">=12" 19003 + } 19004 + }, 19005 + "node_modules/wrangler/node_modules/@esbuild/android-arm64": { 19006 + "version": "0.17.19", 19007 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 19008 + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 19009 + "cpu": [ 19010 + "arm64" 19011 + ], 19012 + "dev": true, 19013 + "optional": true, 19014 + "os": [ 19015 + "android" 19016 + ], 19017 + "engines": { 19018 + "node": ">=12" 19019 + } 19020 + }, 19021 + "node_modules/wrangler/node_modules/@esbuild/android-x64": { 19022 + "version": "0.17.19", 19023 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 19024 + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 19025 + "cpu": [ 19026 + "x64" 19027 + ], 19028 + "dev": true, 19029 + "optional": true, 19030 + "os": [ 19031 + "android" 19032 + ], 19033 + "engines": { 19034 + "node": ">=12" 19035 + } 19036 + }, 19037 + "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { 19038 + "version": "0.17.19", 19039 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 19040 + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 19041 + "cpu": [ 19042 + "arm64" 19043 + ], 19044 + "dev": true, 19045 + "optional": true, 19046 + "os": [ 19047 + "darwin" 19048 + ], 19049 + "engines": { 19050 + "node": ">=12" 19051 + } 19052 + }, 19053 + "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { 19054 + "version": "0.17.19", 19055 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 19056 + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 19057 + "cpu": [ 19058 + "x64" 19059 + ], 19060 + "dev": true, 19061 + "optional": true, 19062 + "os": [ 19063 + "darwin" 19064 + ], 19065 + "engines": { 19066 + "node": ">=12" 19067 + } 19068 + }, 19069 + "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { 19070 + "version": "0.17.19", 19071 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 19072 + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 19073 + "cpu": [ 19074 + "arm64" 19075 + ], 19076 + "dev": true, 19077 + "optional": true, 19078 + "os": [ 19079 + "freebsd" 19080 + ], 19081 + "engines": { 19082 + "node": ">=12" 19083 + } 19084 + }, 19085 + "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { 19086 + "version": "0.17.19", 19087 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 19088 + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 19089 + "cpu": [ 19090 + "x64" 19091 + ], 19092 + "dev": true, 19093 + "optional": true, 19094 + "os": [ 19095 + "freebsd" 19096 + ], 19097 + "engines": { 19098 + "node": ">=12" 19099 + } 19100 + }, 19101 + "node_modules/wrangler/node_modules/@esbuild/linux-arm": { 19102 + "version": "0.17.19", 19103 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 19104 + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 19105 + "cpu": [ 19106 + "arm" 19107 + ], 19108 + "dev": true, 19109 + "optional": true, 19110 + "os": [ 19111 + "linux" 19112 + ], 19113 + "engines": { 19114 + "node": ">=12" 19115 + } 19116 + }, 19117 + "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { 19118 + "version": "0.17.19", 19119 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 19120 + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 19121 + "cpu": [ 19122 + "arm64" 19123 + ], 19124 + "dev": true, 19125 + "optional": true, 19126 + "os": [ 19127 + "linux" 19128 + ], 19129 + "engines": { 19130 + "node": ">=12" 19131 + } 19132 + }, 19133 + "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { 19134 + "version": "0.17.19", 19135 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 19136 + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 19137 + "cpu": [ 19138 + "ia32" 19139 + ], 19140 + "dev": true, 19141 + "optional": true, 19142 + "os": [ 19143 + "linux" 19144 + ], 19145 + "engines": { 19146 + "node": ">=12" 19147 + } 19148 + }, 19149 + "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { 19150 + "version": "0.17.19", 19151 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 19152 + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 19153 + "cpu": [ 19154 + "loong64" 19155 + ], 19156 + "dev": true, 19157 + "optional": true, 19158 + "os": [ 19159 + "linux" 19160 + ], 19161 + "engines": { 19162 + "node": ">=12" 19163 + } 19164 + }, 19165 + "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { 19166 + "version": "0.17.19", 19167 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 19168 + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 19169 + "cpu": [ 19170 + "mips64el" 19171 + ], 19172 + "dev": true, 19173 + "optional": true, 19174 + "os": [ 19175 + "linux" 19176 + ], 19177 + "engines": { 19178 + "node": ">=12" 19179 + } 19180 + }, 19181 + "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { 19182 + "version": "0.17.19", 19183 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 19184 + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 19185 + "cpu": [ 19186 + "ppc64" 19187 + ], 19188 + "dev": true, 19189 + "optional": true, 19190 + "os": [ 19191 + "linux" 19192 + ], 19193 + "engines": { 19194 + "node": ">=12" 19195 + } 19196 + }, 19197 + "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { 19198 + "version": "0.17.19", 19199 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 19200 + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 19201 + "cpu": [ 19202 + "riscv64" 19203 + ], 19204 + "dev": true, 19205 + "optional": true, 19206 + "os": [ 19207 + "linux" 19208 + ], 19209 + "engines": { 19210 + "node": ">=12" 19211 + } 19212 + }, 19213 + "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { 19214 + "version": "0.17.19", 19215 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 19216 + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 19217 + "cpu": [ 19218 + "s390x" 19219 + ], 19220 + "dev": true, 19221 + "optional": true, 19222 + "os": [ 19223 + "linux" 19224 + ], 19225 + "engines": { 19226 + "node": ">=12" 19227 + } 19228 + }, 17460 19229 "node_modules/wrangler/node_modules/@esbuild/linux-x64": { 17461 19230 "version": "0.17.19", 17462 19231 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", ··· 17468 19237 "optional": true, 17469 19238 "os": [ 17470 19239 "linux" 19240 + ], 19241 + "engines": { 19242 + "node": ">=12" 19243 + } 19244 + }, 19245 + "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { 19246 + "version": "0.17.19", 19247 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 19248 + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 19249 + "cpu": [ 19250 + "x64" 19251 + ], 19252 + "dev": true, 19253 + "optional": true, 19254 + "os": [ 19255 + "netbsd" 19256 + ], 19257 + "engines": { 19258 + "node": ">=12" 19259 + } 19260 + }, 19261 + "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { 19262 + "version": "0.17.19", 19263 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 19264 + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 19265 + "cpu": [ 19266 + "x64" 19267 + ], 19268 + "dev": true, 19269 + "optional": true, 19270 + "os": [ 19271 + "openbsd" 19272 + ], 19273 + "engines": { 19274 + "node": ">=12" 19275 + } 19276 + }, 19277 + "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { 19278 + "version": "0.17.19", 19279 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 19280 + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 19281 + "cpu": [ 19282 + "x64" 19283 + ], 19284 + "dev": true, 19285 + "optional": true, 19286 + "os": [ 19287 + "sunos" 19288 + ], 19289 + "engines": { 19290 + "node": ">=12" 19291 + } 19292 + }, 19293 + "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { 19294 + "version": "0.17.19", 19295 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 19296 + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 19297 + "cpu": [ 19298 + "arm64" 19299 + ], 19300 + "dev": true, 19301 + "optional": true, 19302 + "os": [ 19303 + "win32" 19304 + ], 19305 + "engines": { 19306 + "node": ">=12" 19307 + } 19308 + }, 19309 + "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { 19310 + "version": "0.17.19", 19311 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 19312 + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 19313 + "cpu": [ 19314 + "ia32" 19315 + ], 19316 + "dev": true, 19317 + "optional": true, 19318 + "os": [ 19319 + "win32" 19320 + ], 19321 + "engines": { 19322 + "node": ">=12" 19323 + } 19324 + }, 19325 + "node_modules/wrangler/node_modules/@esbuild/win32-x64": { 19326 + "version": "0.17.19", 19327 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 19328 + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 19329 + "cpu": [ 19330 + "x64" 19331 + ], 19332 + "dev": true, 19333 + "optional": true, 19334 + "os": [ 19335 + "win32" 17471 19336 ], 17472 19337 "engines": { 17473 19338 "node": ">=12"
+11 -11
package.json
··· 31 31 "@hono/node-server": "^1.14.3", 32 32 "@mdx-js/loader": "^3.1.0", 33 33 "@mdx-js/react": "^3.1.0", 34 - "@next/bundle-analyzer": "^15.3.2", 35 - "@next/mdx": "15.3.2", 34 + "@next/bundle-analyzer": "16.0.3", 35 + "@next/mdx": "16.0.3", 36 36 "@radix-ui/react-dialog": "^1.1.15", 37 37 "@radix-ui/react-dropdown-menu": "^2.1.16", 38 38 "@radix-ui/react-popover": "^1.1.15", ··· 61 61 "linkifyjs": "^4.2.0", 62 62 "luxon": "^3.7.2", 63 63 "multiformats": "^13.3.2", 64 - "next": "^15.5.3", 64 + "next": "16.0.3", 65 65 "pg": "^8.16.3", 66 66 "prosemirror-commands": "^1.5.2", 67 67 "prosemirror-inputrules": "^1.4.0", ··· 69 69 "prosemirror-model": "^1.21.0", 70 70 "prosemirror-schema-basic": "^1.2.2", 71 71 "prosemirror-state": "^1.4.3", 72 - "react": "^19.1.1", 72 + "react": "19.2.0", 73 73 "react-aria-components": "^1.8.0", 74 74 "react-day-picker": "^9.3.0", 75 - "react-dom": "^19.1.1", 75 + "react-dom": "19.2.0", 76 76 "react-use-measure": "^2.1.1", 77 77 "redlock": "^5.0.0-beta.2", 78 78 "rehype-parse": "^9.0.0", ··· 102 102 "@types/katex": "^0.16.7", 103 103 "@types/luxon": "^3.7.1", 104 104 "@types/node": "^22.15.17", 105 - "@types/react": "19.1.3", 106 - "@types/react-dom": "19.1.3", 105 + "@types/react": "19.2.6", 106 + "@types/react-dom": "19.2.3", 107 107 "@types/uuid": "^10.0.0", 108 108 "drizzle-kit": "^0.21.2", 109 109 "esbuild": "^0.25.4", 110 - "eslint": "8.57.0", 111 - "eslint-config-next": "^15.5.3", 110 + "eslint": "^9.39.1", 111 + "eslint-config-next": "16.0.3", 112 112 "postcss": "^8.4.38", 113 113 "prettier": "3.2.5", 114 114 "supabase": "^1.187.3", ··· 120 120 "overrides": { 121 121 "ajv": "^8.17.1", 122 122 "whatwg-url": "^14.0.0", 123 - "@types/react": "19.1.3", 124 - "@types/react-dom": "19.1.3" 123 + "@types/react": "19.2.6", 124 + "@types/react-dom": "19.2.3" 125 125 } 126 126 }
+3 -3
src/utils/getCurrentDeploymentDomain.ts
··· 1 - import { headers, type UnsafeUnwrappedHeaders } from "next/headers"; 2 - export function getCurrentDeploymentDomain() { 3 - const headersList = (headers() as unknown as UnsafeUnwrappedHeaders); 1 + import { headers } from "next/headers"; 2 + export async function getCurrentDeploymentDomain() { 3 + const headersList = await headers(); 4 4 const hostname = headersList.get("x-forwarded-host"); 5 5 let protocol = headersList.get("x-forwarded-proto"); 6 6 return `${protocol}://${hostname}/`;
-16
src/utils/isBot.ts
··· 1 - import { cookies, headers, type UnsafeUnwrappedHeaders } from "next/headers"; 2 - export function getIsBot() { 3 - const userAgent = 4 - (headers() as unknown as UnsafeUnwrappedHeaders).get("user-agent") || ""; 5 - const botPatterns = [ 6 - /bot/i, 7 - /crawler/i, 8 - /spider/i, 9 - /googlebot/i, 10 - /bingbot/i, 11 - /yahoo/i, 12 - // Add more patterns as needed 13 - ]; 14 - 15 - return botPatterns.some((pattern) => pattern.test(userAgent)); 16 - }
+13 -4
tsconfig.json
··· 1 1 { 2 2 "compilerOptions": { 3 - "lib": ["dom", "dom.iterable", "esnext"], 4 - "types": ["@cloudflare/workers-types"], 3 + "lib": [ 4 + "dom", 5 + "dom.iterable", 6 + "esnext" 7 + ], 8 + "types": [ 9 + "@cloudflare/workers-types" 10 + ], 5 11 "baseUrl": ".", 6 12 "allowJs": true, 7 13 "skipLibCheck": true, ··· 30 36 "**/*.js", 31 37 "**/*.ts", 32 38 "**/*.tsx", 33 - "**/*.mdx" 39 + "**/*.mdx", 40 + ".next/dev/types/**/*.ts" 34 41 ], 35 - "exclude": ["node_modules"] 42 + "exclude": [ 43 + "node_modules" 44 + ] 36 45 }