From 24691c913689efc64f389208bc60a8a86373f3d4 Mon Sep 17 00:00:00 2001 From: tomholford Date: Fri, 19 May 2023 13:18:33 -0700 Subject: [PATCH 01/14] gear: import from @urbit/api - copied lib and types from @urbit/api repo to gear/ - migrated webterm types (see: urbit/webterm#3) - rename S3 --> Storage --- gear/contacts/index.ts | 2 + gear/contacts/lib.ts | 109 ++++++ gear/contacts/types.ts | 82 +++++ gear/deps.d.ts | 8 + gear/docket/index.ts | 2 + gear/docket/lib.ts | 65 ++++ gear/docket/types.ts | 135 ++++++++ gear/graph/index.ts | 2 + gear/graph/lib.ts | 534 ++++++++++++++++++++++++++++++ gear/graph/types.ts | 94 ++++++ gear/groups/index.ts | 2 + gear/groups/lib.ts | 226 +++++++++++++ gear/groups/types.ts | 2 + gear/groups/update.ts | 175 ++++++++++ gear/groups/view.ts | 30 ++ gear/hark/index.ts | 2 + gear/hark/lib.ts | 163 +++++++++ gear/hark/types.ts | 58 ++++ gear/hood/index.ts | 2 + gear/hood/lib.ts | 127 +++++++ gear/hood/types.ts | 208 ++++++++++++ gear/index.ts | 28 ++ gear/invite/index.ts | 2 + gear/invite/lib.ts | 28 ++ gear/invite/types.ts | 75 +++++ gear/lib/BigIntArrayOrderedMap.ts | 152 +++++++++ gear/lib/BigIntOrderedMap.ts | 117 +++++++ gear/lib/index.ts | 2 + gear/lib/lib.ts | 259 +++++++++++++++ gear/lib/types.ts | 67 ++++ gear/metadata/index.ts | 2 + gear/metadata/lib.ts | 99 ++++++ gear/metadata/types.ts | 101 ++++++ gear/settings/index.ts | 2 + gear/settings/lib.ts | 78 +++++ gear/settings/types.ts | 64 ++++ gear/storage/index.ts | 2 + gear/storage/lib.ts | 47 +++ gear/storage/types.ts | 60 ++++ 39 files changed, 3213 insertions(+) create mode 100644 gear/contacts/index.ts create mode 100644 gear/contacts/lib.ts create mode 100644 gear/contacts/types.ts create mode 100644 gear/deps.d.ts create mode 100644 gear/docket/index.ts create mode 100644 gear/docket/lib.ts create mode 100644 gear/docket/types.ts create mode 100644 gear/graph/index.ts create mode 100644 gear/graph/lib.ts create mode 100644 gear/graph/types.ts create mode 100644 gear/groups/index.ts create mode 100644 gear/groups/lib.ts create mode 100644 gear/groups/types.ts create mode 100644 gear/groups/update.ts create mode 100644 gear/groups/view.ts create mode 100644 gear/hark/index.ts create mode 100644 gear/hark/lib.ts create mode 100644 gear/hark/types.ts create mode 100644 gear/hood/index.ts create mode 100644 gear/hood/lib.ts create mode 100644 gear/hood/types.ts create mode 100644 gear/index.ts create mode 100644 gear/invite/index.ts create mode 100644 gear/invite/lib.ts create mode 100644 gear/invite/types.ts create mode 100644 gear/lib/BigIntArrayOrderedMap.ts create mode 100644 gear/lib/BigIntOrderedMap.ts create mode 100644 gear/lib/index.ts create mode 100644 gear/lib/lib.ts create mode 100644 gear/lib/types.ts create mode 100644 gear/metadata/index.ts create mode 100644 gear/metadata/lib.ts create mode 100644 gear/metadata/types.ts create mode 100644 gear/settings/index.ts create mode 100644 gear/settings/lib.ts create mode 100644 gear/settings/types.ts create mode 100644 gear/storage/index.ts create mode 100644 gear/storage/lib.ts create mode 100644 gear/storage/types.ts diff --git a/gear/contacts/index.ts b/gear/contacts/index.ts new file mode 100644 index 00000000..341e8171 --- /dev/null +++ b/gear/contacts/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './lib'; \ No newline at end of file diff --git a/gear/contacts/lib.ts b/gear/contacts/lib.ts new file mode 100644 index 00000000..26b08c6b --- /dev/null +++ b/gear/contacts/lib.ts @@ -0,0 +1,109 @@ + +import { Patp, Poke, Scry } from '../lib'; +import { + Contact, + ContactUpdateAdd, + ContactUpdateEdit, + ContactUpdateRemove, + ContactEditField, + ContactShare, + ContactUpdate, + ContactUpdateAllowShips, + ContactUpdateAllowGroup, + ContactUpdateSetPublic +} from './types'; + +export const CONTACT_UPDATE_VERSION = 0; + +const storeAction = (data: T, version: number = CONTACT_UPDATE_VERSION): Poke => ({ + app: 'contact-store', + mark: `contact-update-${version}`, + json: data +}); + +export { storeAction as contactStoreAction }; + +export const addContact = (ship: Patp, contact: Contact): Poke => { + contact['last-updated'] = Date.now(); + + return storeAction({ + add: { ship, contact } + }); +}; + +export const removeContact = (ship: Patp): Poke => + storeAction({ + remove: { ship } + }); + +export const share = (recipient: Patp, version: number = CONTACT_UPDATE_VERSION): Poke => ({ + app: 'contact-push-hook', + mark: 'contact-share', + json: { share: recipient } +}); + +export const editContact = ( + ship: Patp, + editField: ContactEditField +): Poke => + storeAction({ + edit: { + ship, + 'edit-field': editField, + timestamp: Date.now() + } + }); + +export const allowShips = ( + ships: Patp[] +): Poke => storeAction({ + allow: { + ships + } +}); + +export const allowGroup = ( + ship: string, + name: string +): Poke => storeAction({ + allow: { + group: { ship, name } + } +}); + +export const setPublic = ( + setPublic: any +): Poke => { + return storeAction({ + 'set-public': setPublic + }); +}; + +export const retrieve = ( + ship: string +) => { + const resource = { ship, name: '' }; + return { + app: 'contact-pull-hook', + mark: 'pull-hook-action', + json: { + add: { + resource, + ship + } + } + }; +}; + +export const fetchIsAllowed = ( + entity: string, + name: string, + ship: string, + personal: boolean +): Scry => { + const isPersonal = personal ? 'true' : 'false'; + return { + app: 'contact-store', + path: `/is-allowed/${entity}/${name}/${ship}/${isPersonal}` + }; +}; diff --git a/gear/contacts/types.ts b/gear/contacts/types.ts new file mode 100644 index 00000000..201aa243 --- /dev/null +++ b/gear/contacts/types.ts @@ -0,0 +1,82 @@ +import { Path, Patp } from '../lib'; +import { Resource } from '../groups'; + +export type ContactUpdate = + | ContactUpdateAdd + | ContactUpdateRemove + | ContactUpdateEdit + | ContactUpdateInitial + | ContactUpdateAllowGroup + | ContactUpdateAllowShips + | ContactUpdateSetPublic; + + export interface ContactUpdateAdd { + add: { + ship: Patp; + contact: Contact; + }; +} + +export interface ContactUpdateRemove { + remove: { + ship: Patp; + }; +} + +export interface ContactUpdateEdit { + edit: { + ship: Patp; + 'edit-field': ContactEditField; + timestamp: number; + }; +} + +export interface ContactUpdateAllowShips { + allow: { + ships: Patp[]; + } +} + +export interface ContactUpdateAllowGroup { + allow: { + group: Resource; + } +} + +export interface ContactUpdateSetPublic { + 'set-public': boolean; +} + +export interface ContactShare { + share: Patp; +} + +export interface ContactUpdateInitial { + initial: Rolodex; +} + +export type Rolodex = { + [p in Patp]: Contact; +}; + +export type Contacts = Rolodex; + +export interface Contact { + nickname: string; + bio: string; + status: string; + color: string; + avatar: string | null; + cover: string | null; + groups: Path[]; + 'last-updated': number; +} + +type ContactKeys = keyof Contact; + +export type ContactEditFieldPrim = Exclude; + +export type ContactEditField = Partial> & { + 'add-group'?: Resource; + 'remove-group'?: Resource; +}; diff --git a/gear/deps.d.ts b/gear/deps.d.ts new file mode 100644 index 00000000..0099f33f --- /dev/null +++ b/gear/deps.d.ts @@ -0,0 +1,8 @@ + +declare module 'urbit-ob' { + + /** + * Convert a @p-encoded string to a decimal-encoded string. + */ + function patp2dec(name: string): string +} diff --git a/gear/docket/index.ts b/gear/docket/index.ts new file mode 100644 index 00000000..e06143cf --- /dev/null +++ b/gear/docket/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; diff --git a/gear/docket/lib.ts b/gear/docket/lib.ts new file mode 100644 index 00000000..f5c3e255 --- /dev/null +++ b/gear/docket/lib.ts @@ -0,0 +1,65 @@ +import { Poke, Scry } from '../lib'; +import { Chad } from './types'; + +export function chadIsRunning(chad: Chad) { + return 'glob' in chad || 'site' in chad; +} + +export const scryCharges: Scry = { + app: 'docket', + path: '/charges' +}; + +export const scryDockets: Scry = { + app: 'docket', + path: '/dockets' +}; + +export const scryTreaties: Scry = { + app: 'treaty', + path: '/treaties' +}; + +export const scryDefaultAlly: Scry = { + app: 'treaty', + path: '/default-ally' +}; + +export const scryAllies: Scry = { + app: 'treaty', + path: '/allies' +}; + +export const scryAllyTreaties = (ship: string): Scry => ({ + app: 'treaty', + path: `/treaties/${ship}` +}); + +/** + * Uninstall a desk, and remove docket + */ +export function docketUninstall(desk: string): Poke { + return { + app: 'docket', + mark: 'docket-uninstall', + json: desk + }; +} + +export function docketInstall(ship: string, desk: string): Poke { + return { + app: 'docket', + mark: 'docket-install', + json: `${ship}/${desk}` + }; +} + +export function allyShip(ship: string): Poke { + return { + app: 'treaty', + mark: 'ally-update-0', + json: { + add: ship + } + }; +} diff --git a/gear/docket/types.ts b/gear/docket/types.ts new file mode 100644 index 00000000..c35399b5 --- /dev/null +++ b/gear/docket/types.ts @@ -0,0 +1,135 @@ +import { Cass } from '../hood'; +export type DeskStatus = 'active' | 'suspended'; + +export type DocketHref = DocketHrefSite | DocketHrefGlob; + +export interface DocketHrefGlob { + glob: { + base: string; + + } +} + +export interface DocketHrefSite { + site: string; +} + +export interface Docket { + title: string; + info?: string; + color: string; + href: DocketHref; + website: string; + license: string; + version: string; + image?: string; +} + +export interface Charge extends Docket { + chad: Chad; +} + +export type Chad = HungChad | GlobChad | SiteChad | InstallChad | SuspendChad; + +export interface HungChad { + hung: string; +} + +export interface GlobChad { + glob: null; +} +export interface SiteChad { + site: null; +} +export interface InstallChad { + install: null; + +} +export interface SuspendChad { + suspend: null; +} + +export interface Treaty extends Docket { + ship: string; + desk: string; + cass: Cass; + hash: string; +} + +export interface Charges { + [desk: string]: Charge; +} + +export interface Treaties { + [ref: string]: Treaty; +} + +export type Charter = string[]; + +export interface Allies { + [ship: string]: Charter; +} + +export interface Provider { + shipName: string; + nickname?: string; + status?: string; +} + +export type ChargeUpdate = ChargeUpdateInitial | ChargeUpdateAdd | ChargeUpdateDel; + +export interface ChargeUpdateInitial { + initial: { + [desk: string]: Charge; + } +} + +export interface ChargeUpdateAdd { + 'add-charge': { + desk: string; + charge: Charge; + } +} + +export interface ChargeUpdateDel { + 'del-charge': string; +} + +export type AllyUpdate = AllyUpdateIni | AllyUpdateAdd | AllyUpdateDel | AllyUpdateNew; + +export interface AllyUpdateIni { + ini: { + [ship: string]: string[]; + } +} + +export interface AllyUpdateAdd { + add: string; +} + +export interface AllyUpdateDel { + del: string; +} + +export interface AllyUpdateNew { + new: { + ship: string; + alliance: string[]; + } +} + +export type TreatyUpdate = TreatyUpdateIni | TreatyUpdateAdd | TreatyUpdateDel; + +export interface TreatyUpdateIni { + ini: { + [foreignDesk: string]: Treaty; + } +} + +export interface TreatyUpdateAdd { + add: Treaty; +} + +export interface TreatyUpdateDel { + del: string; +} diff --git a/gear/graph/index.ts b/gear/graph/index.ts new file mode 100644 index 00000000..4fed660f --- /dev/null +++ b/gear/graph/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; \ No newline at end of file diff --git a/gear/graph/lib.ts b/gear/graph/lib.ts new file mode 100644 index 00000000..ce187df6 --- /dev/null +++ b/gear/graph/lib.ts @@ -0,0 +1,534 @@ +import { GroupPolicy, makeResource, Resource, resourceFromPath } from '../groups'; + +import { decToUd, deSig, unixToDa, Scry } from '../lib'; +import { Enc, Path, Patp, PatpNoSig, Poke, Thread } from '../lib/types'; +import { Content, GraphChildrenPoke, GraphNode, GraphNodePoke, Post } from './types'; +import { patp2dec } from 'urbit-ob'; + +export const GRAPH_UPDATE_VERSION = 3; + +export const createBlankNodeWithChildPost = ( + ship: PatpNoSig, + parentIndex = '', + childIndex = '', + contents: Content[] +): GraphNodePoke => { + const date = unixToDa(Date.now()).toString(); + const nodeIndex = parentIndex + '/' + date; + + const childGraph: GraphChildrenPoke = {}; + childGraph[childIndex] = { + post: { + author: `~${ship}`, + index: nodeIndex + '/' + childIndex, + 'time-sent': Date.now(), + contents, + hash: null, + signatures: [] + }, + children: null + }; + + return { + post: { + author: `~${ship}`, + index: nodeIndex, + 'time-sent': Date.now(), + contents: [], + hash: null, + signatures: [] + }, + children: childGraph + }; +}; + +export const markPending = (nodes: any): any => { + Object.keys(nodes).forEach((key) => { + nodes[key].post.author = deSig(nodes[key].post.author); + nodes[key].post.pending = true; + if (nodes[key].children) { + nodes[key].children = markPending(nodes[key].children); + } + }); + return nodes; +}; + +export const createPost = ( + ship: PatpNoSig, + contents: Content[], + parentIndex = '', + childIndex = 'DATE_PLACEHOLDER' +): Post => { + if (childIndex === 'DATE_PLACEHOLDER') { + childIndex = unixToDa(Date.now()).toString(); + } + return { + author: `~${ship}`, + index: parentIndex + '/' + childIndex, + 'time-sent': Date.now(), + contents, + hash: null, + signatures: [] + }; +}; + +function moduleToMark(mod: string): string | undefined { + if(mod === 'link') { + return 'graph-validator-link'; + } + if(mod === 'publish') { + return 'graph-validator-publish'; + } + if(mod === 'chat') { + return 'graph-validator-chat'; + } + return undefined; +} + +const storeAction = (data: T, version: number = GRAPH_UPDATE_VERSION): Poke => ({ + app: 'graph-store', + mark: `graph-update-${version}`, + json: data +}); + +export { storeAction as graphStoreAction }; + +const viewAction = (threadName: string, action: T): Thread => ({ + inputMark: 'graph-view-action', + outputMark: 'json', + threadName, + body: action +}); + +export { viewAction as graphViewAction }; + +const hookAction = (data: T, version: number = GRAPH_UPDATE_VERSION): Poke => ({ + app: 'graph-push-hook', + mark: `graph-update-${version}`, + json: data +}); + +const dmAction = (data: T): Poke => ({ + app: 'dm-hook', + mark: 'dm-hook-action', + json: data +}); + +export { hookAction as graphHookAction }; + +export const createManagedGraph = ( + ship: PatpNoSig, + name: string, + title: string, + description: string, + group: Path, + mod: string +): Thread => { + const associated = { group: resourceFromPath(group) }; + const resource = makeResource(`~${ship}`, name); + + return viewAction('graph-create', { + create: { + resource, + title, + description, + associated, + module: mod, + mark: moduleToMark(mod) + } + }); +}; + +export const createUnmanagedGraph = ( + ship: PatpNoSig, + name: string, + title: string, + description: string, + policy: Enc, + mod: string +): Thread => viewAction('graph-create', { + create: { + resource: makeResource(`~${ship}`, name), + title, + description, + associated: { policy }, + module: mod, + mark: moduleToMark(mod) + } +}); + +export const joinGraph = ( + ship: Patp, + name: string +): Thread => viewAction('graph-join', { + join: { + resource: makeResource(ship, name), + ship + } +}); + +export const deleteGraph = ( + ship: PatpNoSig, + name: string +): Thread => viewAction('graph-delete', { + 'delete': { + resource: makeResource(`~${ship}`, name) + } +}); + +export const leaveGraph = ( + ship: Patp, + name: string +): Thread => viewAction('graph-leave', { + 'leave': { + resource: makeResource(ship, name) + } +}); + +export const groupifyGraph = ( + ship: Patp, + name: string, + toPath?: string +): Thread => { + const resource = makeResource(ship, name); + const to = toPath && resourceFromPath(toPath); + + return viewAction('graph-groupify', { + groupify: { + resource, + to + } + }); +}; + +export const evalCord = ( + cord: string +): Thread => { + return ({ + inputMark: 'graph-view-action', + outputMark: 'tang', + threadName: 'graph-eval', + body: { + eval: cord + } + }); +}; + +export const addGraph = ( + ship: Patp, + name: string, + graph: any, + mark: any +): Poke => { + return storeAction({ + 'add-graph': { + resource: { ship, name }, + graph, + mark + } + }); +}; + +export const addNodes = ( + ship: Patp, + name: string, + nodes: Object +): Thread => ({ + inputMark: `graph-update-${GRAPH_UPDATE_VERSION}`, + outputMark: 'graph-view-action', + threadName: 'graph-add-nodes', + body: { + 'add-nodes': { + resource: { ship, name }, + nodes + } + } +}); + +export const addPost = ( + ship: Patp, + name: string, + post: Post +): Thread => { + const nodes: Record = {}; + nodes[post.index] = { + post, + children: null + }; + return addNodes(ship, name, nodes); +}; + +export const addNode = ( + ship: Patp, + name: string, + node: GraphNodePoke +): Thread => { + const nodes: Record = {}; + nodes[node.post.index] = node; + + return addNodes(ship, name, nodes); +}; + +export const createGroupFeed = ( + group: Resource, + vip: any = '' +): Thread => ({ + inputMark: 'graph-view-action', + outputMark: 'resource', + threadName: 'graph-create-group-feed', + body: { + 'create-group-feed': { + resource: group, + vip + } + } +}); + +export const disableGroupFeed = ( + group: Resource +): Thread => ({ + inputMark: 'graph-view-action', + outputMark: 'json', + threadName: 'graph-disable-group-feed', + body: { + 'disable-group-feed': { + resource: group + } + } +}); + +/** + * Set dm-hook to screen new DMs or not + * + */ +export const setScreen = (screen: boolean): Poke => dmAction({ screen }); + +/** + * Accept a pending DM request + * + * @param ship the ship to accept + */ +export const acceptDm = (ship: string) => dmAction({ + accept: ship +}); + +/** + * Decline a pending DM request + * + * @param ship the ship to accept + */ +export const declineDm = (ship: string) => dmAction({ + decline: ship +}); + +/** + * Remove posts from a set of indices + * + */ +export const removePosts = ( + ship: Patp, + name: string, + indices: string[] +): Poke => hookAction({ + 'remove-posts': { + resource: { ship, name }, + indices + } +}); + +/** + * Remove a DM message from our inbox + * + * @remarks + * This does not remove the message from the recipients inbox + */ +export const removeDmMessage = ( + our: Patp, + index: string +): Poke => ({ + app: 'graph-store', + mark: `graph-update-${GRAPH_UPDATE_VERSION}`, + json: { + 'remove-posts': { + resource: { ship: our, name: 'dm-inbox' }, + indices: [index] + } + } +}); + +/** + * Send a DM to a ship + * + * @param our sender + * @param ship recipient + * @param contents contents of message + */ +export const addDmMessage = (our: PatpNoSig, ship: Patp, contents: Content[]): Poke => { + const post = createPost(our, contents, `/${patp2dec(ship)}`); + const node: GraphNode = { + post, + children: null + }; + return { + app: 'dm-hook', + mark: `graph-update-${GRAPH_UPDATE_VERSION}`, + json: { + 'add-nodes': { + resource: { ship: `~${our}`, name: 'dm-inbox' }, + nodes: { + [post.index]: node + } + } + } + }; +}; + +const encodeIndex = (idx: string) => idx.split('/').map(decToUd).join('/'); + +/** + * Fetch all graph keys + */ +export const getKeys = (): Scry => ({ + app: 'graph-store', + path: '/keys' +}); + +/** + * Fetch newest (larger keys) nodes in a graph under some index + * + * @param ship ship of graph + * @param name name of graph + * @param count number of nodes to load + * @param index index to query + */ +export const getNewest = ( + ship: string, + name: string, + count: number, + index = '' +): Scry => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/siblings` + + `/newest/lone/${count}${encodeIndex(index)}` +}); + +/** + * Fetch nodes in a graph that are older (key is smaller) and direct + * siblings of some index + * + * @param ship ship of graph + * @param name name of graph + * @param count number of nodes to load + * @param index index to query + */ +export const getOlderSiblings = ( + ship: string, + name: string, + count: number, + index: string +): Scry => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/siblings/older/lone/${count}${encodeIndex(index)}` +}); + +/** + * Fetch nodes in a graph that are younger (key is larger) and direct + * siblings of some index + * + * @param ship ship of graph + * @param name name of graph + * @param count number of nodes to load + * @param index index to query + */ +export const getYoungerSiblings = ( + ship: string, + name: string, + count: number, + index: string +): Scry => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/siblings/newer/lone/${count}${encodeIndex(index)}` +}); + +/** + * Fetch all nodes in a graph under some index, without loading children + * + * @param ship ship of graph + * @param name name of graph + * @param index index to query + */ +export const getShallowChildren = (ship: string, name: string, index = '') => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/children/lone/~/~${encodeIndex(index)}` +}); + +/** + * Fetch newest nodes in a graph as a flat map, including children, + * optionally starting at a specified key + * + * @param ship ship of graph + * @param name name of graph + * @param count number of nodes to load + * @param start key to start at + * + */ +export const getDeepOlderThan = ( + ship: string, + name: string, + count: number, + start = '' +) => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/siblings` + + `/${start.length > 0 ? 'older' : 'newest'}` + + `/kith/${count}${encodeIndex(start)}` +}); + +/** + * Fetch a flat map of a nodes ancestors and firstborn children + * + * @param ship ship of graph + * @param name name of graph + * @param index index to query + * + */ +export const getFirstborn = ( + ship: string, + name: string, + index: string +): Scry => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/firstborn${encodeIndex(index)}` +}); + +/** + * Fetch a single node, and all it's children + * + * @param ship ship of graph + * @param name name of graph + * @param index index to query + * + */ +export const getNode = ( + ship: string, + name: string, + index: string +): Scry => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}/node/index/kith${encodeIndex(index)}` +}); + +/** + * Fetch entire graph + * + * @param ship ship of graph + * @param name name of graph + * + */ +export const getGraph = ( + ship: string, + name: string +): Scry => ({ + app: 'graph-store', + path: `/graph/${ship}/${name}` +}); diff --git a/gear/graph/types.ts b/gear/graph/types.ts new file mode 100644 index 00000000..2e8816a3 --- /dev/null +++ b/gear/graph/types.ts @@ -0,0 +1,94 @@ +import { Patp } from '../lib'; +import { BigIntOrderedMap } from '../lib/BigIntOrderedMap'; +import { BigIntArrayOrderedMap } from '../lib/BigIntArrayOrderedMap'; + +export interface TextContent { + text: string; +} +export interface UrlContent { + url: string; +} +export interface CodeContent { + code: { + expression: string; + output: string[] | undefined; + } +} + +export interface ReferenceContent { + reference: AppReference | GraphReference | GroupReference; +} + +export interface GraphReference { + graph: { + graph: string; + group: string; + index: string; + } +} + +export interface GroupReference { + group: string; +} + +export interface AppReference { + app: { + ship: string; + desk: string; + path: string; + } +} + +export interface MentionContent { + mention: string; + emphasis?: 'bold' | 'italic'; +} +export type Content = + | TextContent + | UrlContent + | CodeContent + | ReferenceContent + | MentionContent; + +export interface Post { + author: Patp; + contents: Content[]; + hash: string | null; + index: string; + pending?: boolean; + signatures: string[]; + 'time-sent': number; +} + +export interface GraphNodePoke { + post: Post; + children: GraphChildrenPoke | null; +} + +export interface GraphChildrenPoke { + [k: string]: GraphNodePoke; +} + +export interface GraphNode { + children: Graph | null; + post: Post; +} + +export interface FlatGraphNode { + children: null; + post: Post; +} + +export type Graph = BigIntOrderedMap; + +export type Graphs = { [rid: string]: Graph }; + +export type FlatGraph = BigIntArrayOrderedMap; + +export type FlatGraphs = { [rid: string]: FlatGraph }; + +export type ThreadGraphs = { + [rid: string]: { + [index: string]: FlatGraph; + } +}; diff --git a/gear/groups/index.ts b/gear/groups/index.ts new file mode 100644 index 00000000..341e8171 --- /dev/null +++ b/gear/groups/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './lib'; \ No newline at end of file diff --git a/gear/groups/lib.ts b/gear/groups/lib.ts new file mode 100644 index 00000000..7e93ad3a --- /dev/null +++ b/gear/groups/lib.ts @@ -0,0 +1,226 @@ +import { deSig } from '../index'; +import { Enc, Path, Patp, PatpNoSig, Poke, Thread } from '../lib/types'; +import { Group, GroupPolicy, GroupPolicyDiff, GroupUpdateAddMembers, GroupUpdateAddTag, GroupUpdateChangePolicy, GroupUpdateRemoveGroup, GroupUpdateRemoveMembers, GroupUpdateRemoveTag, Resource, RoleTags, Tag } from './types'; +import { GroupUpdate } from './update'; + +export const GROUP_UPDATE_VERSION = 0; + +export const proxyAction = (data: T, version: number = GROUP_UPDATE_VERSION): Poke => ({ + app: 'group-push-hook', + mark: `group-update-${version}`, + json: data +}); + +const storeAction = (data: T, version: number = GROUP_UPDATE_VERSION): Poke => ({ + app: 'group-store', + mark: `group-update-${version}`, + json: data +}); + +export { storeAction as groupStoreAction }; + +const viewAction = (data: T): Poke => ({ + app: 'group-view', + mark: 'group-view-action', + json: data +}); + +export { viewAction as groupViewAction }; + +export const viewThread = (thread: string, action: T): Thread => ({ + inputMark: 'group-view-action', + outputMark: 'json', + threadName: thread, + body: action +}); + +export const removeMembers = ( + resource: Resource, + ships: PatpNoSig[] +): Poke => proxyAction({ + removeMembers: { + resource, + ships + } +}); + +export const addTag = ( + resource: Resource, + tag: Tag, + ships: Patp[] +): Poke => proxyAction({ + addTag: { + resource, + tag, + ships + } +}); + +export const removeTag = ( + tag: Tag, + resource: Resource, + ships: PatpNoSig[] +): Poke => proxyAction({ + removeTag: { + tag, + resource, + ships + } +}); + +export const addMembers = ( + resource: Resource, + ships: PatpNoSig[] +): Poke => proxyAction({ + addMembers: { + resource, + ships + } +}); + +export const removeGroup = ( + resource: Resource +): Poke => storeAction({ + removeGroup: { + resource + } +}); + +export const changePolicy = ( + resource: Resource, + diff: Enc +): Poke> => proxyAction({ + changePolicy: { + resource, + diff + } +}); + +export const join = ( + ship: string, + name: string, + app: "groups" | "graph", + autojoin: boolean, + share: boolean +): Poke => viewAction({ + join: { + resource: makeResource(ship, name), + ship, + shareContact: share || false, + app, + autojoin + } +}); + +export const createGroup = ( + name: string, + policy: Enc, + title: string, + description: string +): Thread => viewThread('group-create', { + create: { + name, + policy, + title, + description + } +}); + +export const deleteGroup = ( + ship: string, + name: string +): Thread => viewThread('group-delete', { + remove: makeResource(ship, name) +}); + +export const leaveGroup = ( + ship: string, + name: string +): Thread => viewThread('group-leave', { + leave: makeResource(ship, name) +}); + +export const invite = ( + ship: string, + name: string, + ships: Patp[], + description: string +): Thread => viewThread('group-invite', { + invite: { + resource: makeResource(ship, name), + ships, + description + } +}); + +export const abortJoin = ( + resource: string +): Poke => viewAction({ + abort: resource +}); + +export const roleTags = ['janitor', 'moderator', 'admin']; +// TODO make this type better? + +export const groupBunts = { + group: (): Group => ({ members: [], tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), + policy: (): GroupPolicy => ({ open: { banned: [], banRanks: [] } }) +}; + +export const joinError = ['no-perms', 'strange', 'abort'] as const; +export const joinResult = ['done', ...joinError] as const; +export const joinLoad = ['start', 'added', 'metadata'] as const; +export const joinProgress = [...joinLoad, ...joinResult] as const; + +export function roleForShip( + group: Group, + ship: PatpNoSig +): RoleTags | undefined { + return roleTags.reduce((currRole, role) => { + const roleShips = group?.tags?.role?.[role]; + return roleShips && roleShips.includes(ship) ? role : currRole; + }, undefined as RoleTags | undefined); +}; + +export function resourceFromPath(path: Path): Resource { + const [, , ship, name] = path.split('/'); + return { ship, name }; +} + +export function makeResource(ship: string, name: string) { + return { ship, name }; +} + +export const isWriter = (group: Group, resource: string, ship: string) => { + const graph = group?.tags?.graph; + const writers: string[] | undefined = graph && (graph[resource] as any)?.writers; + const admins = group?.tags?.role?.admin ?? []; + if (typeof writers === 'undefined') { + return true; + } else { + return [...writers].includes(ship) || admins.includes(ship); + } +}; + +export function isChannelAdmin( + group: Group, + resource: string, + ship: string +): boolean { + const role = roleForShip(group, deSig(ship)); + + return ( + isHost(resource, ship) || + role === 'admin' || + role === 'moderator' + ); +} + +export function isHost( + resource: string, + ship: string +): boolean { + const [, , host] = resource.split('/'); + + return ship === host; +} diff --git a/gear/groups/types.ts b/gear/groups/types.ts new file mode 100644 index 00000000..6197c4f9 --- /dev/null +++ b/gear/groups/types.ts @@ -0,0 +1,2 @@ +export * from './update'; +export * from './view'; \ No newline at end of file diff --git a/gear/groups/update.ts b/gear/groups/update.ts new file mode 100644 index 00000000..a25c9a63 --- /dev/null +++ b/gear/groups/update.ts @@ -0,0 +1,175 @@ +import { PatpNoSig, Path, ShipRank, Enc } from '../lib'; +import { roleTags } from './index'; + +export type RoleTags = typeof roleTags[number]; +interface RoleTag { + tag: 'admin' | 'moderator' | 'janitor'; +} + +interface AppTag { + app: string; + resource: string; + tag: string; +} + +export type Tag = AppTag | RoleTag; + +export interface InvitePolicy { + invite: { + pending: PatpNoSig[]; + }; +} + +export interface OpenPolicy { + open: { + banned: PatpNoSig[]; + banRanks: ShipRank[]; + }; +} + +export interface Resource { + name: string; + ship: PatpNoSig; +} + +export type OpenPolicyDiff = + | AllowRanksDiff + | BanRanksDiff + | AllowShipsDiff + | BanShipsDiff; + +export interface AllowRanksDiff { + allowRanks: ShipRank[]; +} + +export interface BanRanksDiff { + banRanks: ShipRank[]; +} + +export interface AllowShipsDiff { + allowShips: PatpNoSig[]; +} + +export interface BanShipsDiff { + banShips: PatpNoSig[]; +} + +export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; + +export interface AddInvitesDiff { + addInvites: PatpNoSig[]; +} + +export interface RemoveInvitesDiff { + removeInvites: PatpNoSig[]; +} + +export interface ReplacePolicyDiff { + replace: GroupPolicy; +} + +export type GroupPolicyDiff = + | { open: OpenPolicyDiff } + | { invite: InvitePolicyDiff } + | ReplacePolicyDiff; + +export type GroupPolicy = OpenPolicy | InvitePolicy; + +export interface TaggedShips { + [tag: string]: PatpNoSig[]; +} + +export interface Tags { + role: TaggedShips; + [app: string]: TaggedShips; +} + +export interface Group { + members: PatpNoSig[]; + tags: Tags; + policy: GroupPolicy; + hidden: boolean; +} + +export type Groups = { + [p in Path]: Group; +}; + +export interface GroupUpdateInitial { + initial: Enc; +} + +export interface GroupUpdateAddGroup { + addGroup: { + resource: Resource; + policy: Enc; + hidden: boolean; + }; +} + +export interface GroupUpdateAddMembers { + addMembers: { + ships: PatpNoSig[]; + resource: Resource; + }; +} + +export interface GroupUpdateRemoveMembers { + removeMembers: { + ships: PatpNoSig[]; + resource: Resource; + }; +} + +export interface GroupUpdateAddTag { + addTag: { + tag: Tag; + resource: Resource; + ships: PatpNoSig[]; + }; +} + +export interface GroupUpdateRemoveTag { + removeTag: { + tag: Tag; + resource: Resource; + ships: PatpNoSig[]; + }; +} + +export interface GroupUpdateChangePolicy { + changePolicy: { resource: Resource; diff: GroupPolicyDiff }; +} + +export interface GroupUpdateRemoveGroup { + removeGroup: { + resource: Resource; + }; +} + +export interface GroupUpdateExpose { + expose: { + resource: Resource; + }; +} + +export interface GroupUpdateInitialGroup { + initialGroup: { + resource: Resource; + group: Enc; + }; +} + +export type GroupUpdate = + | GroupUpdateInitial + | GroupUpdateAddGroup + | GroupUpdateAddMembers + | GroupUpdateRemoveMembers + | GroupUpdateAddTag + | GroupUpdateRemoveTag + | GroupUpdateChangePolicy + | GroupUpdateRemoveGroup + | GroupUpdateExpose + | GroupUpdateInitialGroup; + +export type GroupAction = Omit; diff --git a/gear/groups/view.ts b/gear/groups/view.ts new file mode 100644 index 00000000..c6e432b2 --- /dev/null +++ b/gear/groups/view.ts @@ -0,0 +1,30 @@ +import { joinError, joinProgress, joinResult } from "."; +import {Patp} from "../lib"; + +export type JoinError = typeof joinError[number]; + +export type JoinResult = typeof joinResult[number]; + + +export type JoinProgress = typeof joinProgress[number]; + +export interface JoinRequest { + /** + * Whether to display the join request or not + */ + hidden: boolean; + /** + * Timestamp of when the request started + */ + started: number; + ship: Patp; + progress: JoinProgress; + shareContact: boolean; + autojoin: boolean; + app: 'graph' | 'groups'; + invite: string[]; +} + +export interface JoinRequests { + [rid: string]: JoinRequest; +} diff --git a/gear/hark/index.ts b/gear/hark/index.ts new file mode 100644 index 00000000..341e8171 --- /dev/null +++ b/gear/hark/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './lib'; \ No newline at end of file diff --git a/gear/hark/lib.ts b/gear/hark/lib.ts new file mode 100644 index 00000000..a470c671 --- /dev/null +++ b/gear/hark/lib.ts @@ -0,0 +1,163 @@ +import { BigInteger } from 'big-integer'; + +import { Poke } from '../lib/types'; +import { + HarkBin, + HarkBinId, + HarkBody, + HarkLid, + HarkPlace +} from './types'; +import { decToUd } from '../lib'; + +export const harkAction = (data: T): Poke => ({ + app: 'hark-store', + mark: 'hark-action', + json: data +}); + +const graphHookAction = (data: T): Poke => ({ + app: 'hark-graph-hook', + mark: 'hark-graph-hook-action', + json: data +}); + +export { graphHookAction as harkGraphHookAction }; + +const groupHookAction = (data: T): Poke => ({ + app: 'hark-group-hook', + mark: 'hark-group-hook-action', + json: data +}); + +export { groupHookAction as harkGroupHookAction }; + +export const actOnNotification = ( + frond: string, + intTime: BigInteger, + bin: HarkBin +): Poke => + harkAction({ + [frond]: { + time: decToUd(intTime.toString()), + bin + } + }); + +export const setMentions = (mentions: boolean): Poke => + graphHookAction({ + 'set-mentions': mentions + }); + +export const setWatchOnSelf = (watchSelf: boolean): Poke => + graphHookAction({ + 'set-watch-on-self': watchSelf + }); + +export const setDoNotDisturb = (dnd: boolean): Poke => + harkAction({ + 'set-dnd': dnd + }); + +export const addNote = (bin: HarkBin, body: HarkBody) => + harkAction({ + 'add-note': { + bin, + body + } + }); + +export const archive = (bin: HarkBin, lid: HarkLid): Poke => + harkAction({ + archive: { + lid, + bin + } + }); + +export const opened = harkAction({ + opened: null +}); + +export const markCountAsRead = (place: HarkPlace): Poke => + harkAction({ + 'read-count': place + }); + +export const markEachAsRead = ( + place: HarkPlace, + path: string +): Poke => + harkAction({ + 'read-each': { + place, + path + } + }); + +export const seen = () => harkAction({ seen: null }); + +export const readAll = harkAction({ 'read-all': null }); +export const archiveAll = harkAction({ 'archive-all': null }); + +export const ignoreGroup = (group: string): Poke => + groupHookAction({ + ignore: group + }); + +export const ignoreGraph = (graph: string, index: string): Poke => + graphHookAction({ + ignore: { + graph, + index + } + }); + +export const listenGroup = (group: string): Poke => + groupHookAction({ + listen: group + }); + +export const listenGraph = (graph: string, index: string): Poke => + graphHookAction({ + listen: { + graph, + index + } + }); + +/** + * Read all graphs belonging to a particular group + */ +export const readGroup = (group: string) => + harkAction({ + 'read-group': group + }); + +/** + * Read all unreads in a graph + */ +export const readGraph = (graph: string) => + harkAction({ + 'read-graph': graph + }); + +export function harkBinToId(bin: HarkBin): HarkBinId { + const { place, path } = bin; + return `${place.desk}${place.path}${path}`; +} + +export function harkBinEq(a: HarkBin, b: HarkBin): boolean { + return ( + a.place.path === b.place.path && + a.place.desk === b.place.desk && + a.path === b.path + ); +} + +export function harkLidToId(lid: HarkLid): string { + if('time' in lid) { + return `archive-${lid.time}`; + } + return Object.keys(lid)[0]; +} diff --git a/gear/hark/types.ts b/gear/hark/types.ts new file mode 100644 index 00000000..e52912cb --- /dev/null +++ b/gear/hark/types.ts @@ -0,0 +1,58 @@ + +export interface HarkStats { + count: number; + each: string[]; + last: number; +} + +export interface Timebox { + [binId: string]: Notification; +} + +export type HarkContent = { ship: string; } | { text: string; }; + +export interface HarkBody { + title: HarkContent[]; + time: number; + content: HarkContent[]; + link: string; + binned: string; +} + +export interface HarkPlace { + desk: string; + path: string; +} + +export interface HarkBin { + path: string; + place: HarkPlace; +} + +export type HarkLid = + { unseen: null; } +| { seen: null; } +| { time: string; }; + +export type HarkBinId = string; +export interface Notification { + bin: HarkBin; + time: number; + body: HarkBody[]; +} + +export interface NotificationGraphConfig { + watchOnSelf: boolean; + mentions: boolean; + watching: WatchedIndex[] +} + +export interface Unreads { + [path: string]: HarkStats; +} + +interface WatchedIndex { + graph: string; + index: string; +} +export type GroupNotificationsConfig = string[]; diff --git a/gear/hood/index.ts b/gear/hood/index.ts new file mode 100644 index 00000000..e06143cf --- /dev/null +++ b/gear/hood/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; diff --git a/gear/hood/lib.ts b/gear/hood/lib.ts new file mode 100644 index 00000000..02d86868 --- /dev/null +++ b/gear/hood/lib.ts @@ -0,0 +1,127 @@ +import { Poke, Scry } from '../lib'; +import { Pike } from './types'; + +export const getPikes: Scry = { + app: 'hood', + path: '/kiln/pikes' +}; + +/** + * Install a foreign desk + */ +export function kilnInstall( + ship: string, + desk: string, + local?: string +): Poke { + return { + app: 'hood', + mark: 'kiln-install', + json: { + ship, + desk, + local: local || desk + } + }; +} + +/** + * Sync with a foreign desk + */ +export function kilnSync( + ship: string, + desk: string, + local?: string +): Poke { + return { + app: 'hood', + mark: 'kiln-sync', + json: { + ship, + desk, + local: local || desk + } + }; +} + +/** + * Unsync with a foreign desk + */ +export function kilnUnsync( + ship: string, + desk: string, + local?: string +): Poke { + return { + app: 'hood', + mark: 'kiln-unsync', + json: { + ship, + desk, + local: local || desk + } + }; +} + +/** + * Uninstall a desk + */ +export function kilnUninstall( + desk: string +): Poke { + return { + app: 'hood', + mark: 'kiln-uninstall', + json: desk + }; +} + +export function kilnSuspend( + desk: string +): Poke { + return { + app: 'hood', + mark: 'kiln-suspend', + json: desk + }; +} + +export function kilnRevive( + desk: string +): Poke { + return { + app: 'hood', + mark: 'kiln-revive', + json: desk + }; +} + +export function kilnBump(): Poke { + return { + app: 'hood', + mark: 'kiln-bump', + json: null, + }; +} + +export function kilnPause(desk: string) { + return { + app: 'hood', + mark: 'kiln-pause', + json: desk + }; +} + +export function kilnResume(desk: string) { + return { + app: 'hood', + mark: 'kiln-resume', + json: desk + }; +} + +export const scryLag: Scry = ({ app: 'hood', path: '/kiln/lag' }); + +export function getPikePublisher(pike: Pike) { + return pike.sync?.ship; +} diff --git a/gear/hood/types.ts b/gear/hood/types.ts new file mode 100644 index 00000000..17676b47 --- /dev/null +++ b/gear/hood/types.ts @@ -0,0 +1,208 @@ + +/** + * A pending commit, awaiting a future kelvin version + */ +interface Woof { + aeon: number; + weft: Weft; +} + +interface Rein { + /** + * Agents not in manifest that should be running + */ + add: string[]; + /** + * Agents in manifest that should not be running + */ + sub: string[]; +} + +export interface Rail { + /** + * Original publisher of desk, if available + */ + publisher: string | null; + /** + * Ship of foreign vat + */ + ship: string; + /** + * Desk of foreign vat + */ + desk: string; + /** + * Aeon (version number) that we currently have synced + */ + aeon: number; + next: Woof[]; + paused: boolean; +} + +/** + * A tracker of a foreign {@link Vat} + * + */ +export interface Arak { + rein: Rein; + rail: Rail | null; +} + +/** + * A component's kelvin version + */ +export interface Weft { + /** + * Name of the component + * + * @remarks + * Usually %zuse, %hoon, or %lull + */ + name: string; + /** + * Kelvin version + * + */ + kelvin: number; +} + +export interface KilnDiffBlock { + block: { + desk: string; + arak: Arak; + weft: Weft; + blockers: string[]; + }; +} + +export interface KilnDiffReset { + reset: { + desk: string; + arak: Arak; + }; +} + +export interface KilnDiffMerge { + merge: { + desk: string; + arak: Arak; + }; +} + +export interface KilnDiffMergeSunk { + 'merge-sunk': { + desk: string; + arak: Arak; + tang: string; + }; +} + +export interface KilnDiffMergeFail { + 'merge-fail': { + desk: string; + arak: Arak; + tang: string; + }; +} + +export type KilnDiff = + | KilnDiffBlock + | KilnDiffReset + | KilnDiffMerge + | KilnDiffMergeSunk + | KilnDiffMergeFail; + +/** + * Cases for revision + * + */ +export interface Cass { + /** + * Revision number + */ + ud: number; + /** + * Timestamp of revision, as stringifed `@da` + * + * @remarks + * If \@da is outside valid positive unix timestamp, value will be zero + */ + da: string; +} + +/** + * A local desk installation + */ +export interface Vat { + /** + * Desk that this Vat describes + */ + desk: string; + /** + * Hash of the desk, rendered as `@uv` + * + * @remarks + * Equivalent to + * ```hoon + * .^(@uv %cz /=desk=) + * ``` + */ + hash: string; + /** + * Current revision + */ + cass: Cass; + /** + * Foreign sync + */ + arak: Arak; +} + +export interface Vats { + [desk: string]: Vat; +} +/** + * TODO: crisp one-liner describing a Pike + */ +export interface Pike { + /** + * Hash of the desk, rendered as `@uv` + * + * @remarks + * Equivalent to + * ```hoon + * .^(@uv %cz /=desk=) + * ``` + */ + hash: string; + sync: { + /** + * Source desk for this Pike + */ + desk: string; + /** + * Source ship for this Pike + */ + ship: string; + } | null; + /** + * {@link Weft}s associated with this Pike + */ + wefts: Weft[]; + /** + * how live is this pike? + * + * live - app is running + * held - app is not running, but is trying to run. this state can be entered + * in two main ways: + * - when installing an app but it hasn't finished downloading (or it did + * but failed to install for some reason) + * - when user forced a kelvin upgrade by suspending desks. + * dead - app is not running + */ + zest: "live" | "dead" | "held"; +} + +export interface Pikes { + [desk: string]: Pike; +} diff --git a/gear/index.ts b/gear/index.ts new file mode 100644 index 00000000..d3f28beb --- /dev/null +++ b/gear/index.ts @@ -0,0 +1,28 @@ +export * from './contacts'; +export * as contacts from './contacts'; +export * from './graph'; +export * as graph from './graph'; +export * from './groups'; +export * as groups from './groups'; +export * from './hark'; +export * as hark from './hark'; +export * from './invite'; +// this conflicts with /groups/lib invite +// export * as invite from './invite'; +export * from './metadata'; +export * as metadata from './metadata'; +export * from './settings'; +export * as settings from './settings'; +export * from './s3'; +export * as s3 from './s3'; +export * from './lib'; +export * from './lib/BigIntOrderedMap'; +export * from './lib/BigIntArrayOrderedMap'; +export * as hood from './hood'; +export * from './hood'; +export * as docket from './docket'; +export * from './docket'; + +// TODO: Userspace Permissions +// export * from './permissions'; +// export * as permissions from './permissions'; diff --git a/gear/invite/index.ts b/gear/invite/index.ts new file mode 100644 index 00000000..341e8171 --- /dev/null +++ b/gear/invite/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './lib'; \ No newline at end of file diff --git a/gear/invite/lib.ts b/gear/invite/lib.ts new file mode 100644 index 00000000..a5a5ca94 --- /dev/null +++ b/gear/invite/lib.ts @@ -0,0 +1,28 @@ +import { Poke, Serial } from "../lib"; +import { InviteUpdate, InviteUpdateAccept, InviteUpdateDecline } from "./types"; + +export const inviteAction = (data: T): Poke => ({ + app: 'invite-store', + mark: 'invite-action', + json: data +}); + +export const accept = ( + app: string, + uid: Serial +): Poke => inviteAction({ + accept: { + term: app, + uid + } +}); + +export const decline = ( + app: string, + uid: Serial +): Poke => inviteAction({ + decline: { + term: app, + uid + } +}); diff --git a/gear/invite/types.ts b/gear/invite/types.ts new file mode 100644 index 00000000..b3515bb4 --- /dev/null +++ b/gear/invite/types.ts @@ -0,0 +1,75 @@ +import { Serial, PatpNoSig, Path } from '../lib'; +import { Resource } from "../groups"; + +export type InviteUpdate = + InviteUpdateInitial +| InviteUpdateCreate +| InviteUpdateDelete +| InviteUpdateInvite +| InviteUpdateAccept +| InviteUpdateAccepted +| InviteUpdateDecline; + +export interface InviteUpdateAccept { + accept: { + term: string; + uid: Serial; + } +} + +export interface InviteUpdateInitial { + initial: Invites; +} + +export interface InviteUpdateCreate { + create: { + term: string; + }; +} + +export interface InviteUpdateDelete { + delete: { + term: string; + }; +} + +export interface InviteUpdateInvite { + invite: { + term: string; + uid: Serial; + invite: Invite; + }; +} + +export interface InviteUpdateAccepted { + accepted: { + term: string; + uid: Serial; + }; +} + +export interface InviteUpdateDecline { + decline: { + term: string; + uid: Serial; + }; +} + +// actual datastructures + + +export type Invites = { + [p in Path]: AppInvites; +}; + +export type AppInvites = { + [s in Serial]: Invite; +}; + +export interface Invite { + app: string; + recipient: PatpNoSig; + resource: Resource; + ship: PatpNoSig; + text: string; +} diff --git a/gear/lib/BigIntArrayOrderedMap.ts b/gear/lib/BigIntArrayOrderedMap.ts new file mode 100644 index 00000000..79e998c5 --- /dev/null +++ b/gear/lib/BigIntArrayOrderedMap.ts @@ -0,0 +1,152 @@ +import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; +import bigInt, { BigInteger } from 'big-integer'; + +setAutoFreeze(false); + +enablePatches(); + +export function stringToArr(str: string) { + return str.split('/').slice(1).map((ind) => { + return bigInt(ind); + }); +} + +export function arrToString(arr: BigInteger[]) { + let string = ''; + arr.forEach((key) => { + string = string + `/${key.toString()}`; + }); + return string; +} + +function sorted(a: BigInteger[], b: BigInteger[], reversed = false) { + const getSort = sortBigIntArr(a, b); + if (reversed) { + return getSort * -1; + } else { + return getSort; + } +} + +export function sortBigIntArr(a: BigInteger[], b: BigInteger[]) { + const aLen = a.length; + const bLen = b.length; + + const aCop = a.slice(0); + const bCop = b.slice(0); + aCop.reverse(); + bCop.reverse(); + + let i = 0; + while (i < aLen && i < bLen) { + if (aCop[i].lt(bCop[i])) { + return 1; + } else if (aCop[i].gt(bCop[i])) { + return -1; + } else { + i++; + } + } + + return bLen - aLen; +} + +export class BigIntArrayOrderedMap implements Iterable<[BigInteger[], V]> { + root: Record = {} + cachedIter: [BigInteger[], V][] | null = null; + [immerable] = true; + reversed = false; + + constructor(items: [BigInteger[], V][] = [], reversed = false) { + items.forEach(([key, val]) => { + this.set(key, val); + }); + this.reversed = reversed; + } + + get size() { + return Object.keys(this.root).length; + } + + get(key: BigInteger[]) { + return this.root[arrToString(key)] ?? null; + } + + gas(items: [BigInteger[], V][]) { + return produce(this, (draft) => { + items.forEach(([key, value]) => { + draft.root[arrToString(key)] = castDraft(value); + }); + draft.generateCachedIter(); + }, + (patches) => { + // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); + }); + } + + set(key: BigInteger[], value: V) { + return produce(this, (draft) => { + draft.root[arrToString(key)] = castDraft(value); + draft.cachedIter = null; + }); + } + + clear() { + return produce(this, (draft) => { + draft.cachedIter = []; + draft.root = {}; + }); + } + + has(key: BigInteger[]) { + return arrToString(key) in this.root; + } + + delete(key: BigInteger[]) { + const result = produce(this, (draft) => { + delete draft.root[arrToString(key)]; + draft.cachedIter = null; + }); + return result; + } + + [Symbol.iterator](): IterableIterator<[BigInteger[], V]> { + let idx = 0; + const result = this.generateCachedIter(); + return { + [Symbol.iterator]: this[Symbol.iterator], + next: (): IteratorResult<[BigInteger[], V]> => { + if (idx < result.length) { + return { value: result[idx++], done: false }; + } + return { done: true, value: null }; + } + }; + } + + peekLargest() { + const sorted = Array.from(this); + return sorted[0] as [BigInteger[], V] | null; + } + + peekSmallest() { + const sorted = Array.from(this); + return sorted[sorted.length - 1] as [BigInteger[], V] | null; + } + + keys() { + return Array.from(this).map(([k,v]) => k); + } + + generateCachedIter() { + if(this.cachedIter) { + return [...this.cachedIter]; + } + const result = Object.keys(this.root).map((key) => { + return [stringToArr(key), this.root[key]] as [BigInteger[], V]; + }).sort(([a], [b]) => sorted(a, b, this.reversed)); + this.cachedIter = result; + return [...result]; + } +} + diff --git a/gear/lib/BigIntOrderedMap.ts b/gear/lib/BigIntOrderedMap.ts new file mode 100644 index 00000000..5e3661d1 --- /dev/null +++ b/gear/lib/BigIntOrderedMap.ts @@ -0,0 +1,117 @@ +import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; +import bigInt, { BigInteger } from 'big-integer'; + +setAutoFreeze(false); + +enablePatches(); + +function sortBigInt(a: BigInteger, b: BigInteger) { + if (a.lt(b)) { + return 1; + } else if (a.eq(b)) { + return 0; + } else { + return -1; + } +} +export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { + root: Record = {} + cachedIter: [BigInteger, V][] | null = null; + [immerable] = true; + + constructor(items: [BigInteger, V][] = []) { + items.forEach(([key, val]) => { + this.set(key, val); + }); + } + + get size() { + if(this.cachedIter) { + return this.cachedIter.length; + } + return this.generateCachedIter().length; + } + + get(key: BigInteger) { + return this.root[key.toString()] ?? null; + } + + gas(items: [BigInteger, V][]) { + return produce(this, (draft) => { + items.forEach(([key, value]) => { + draft.root[key.toString()] = castDraft(value); + }); + draft.cachedIter = null; + }, + (patches) => { + // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); + }); + } + + set(key: BigInteger, value: V) { + return produce(this, (draft) => { + draft.root[key.toString()] = castDraft(value); + draft.cachedIter = null; + }); + } + + clear() { + return produce(this, (draft) => { + draft.cachedIter = []; + draft.root = {}; + }); + } + + has(key: BigInteger) { + return key.toString() in this.root; + } + + delete(key: BigInteger) { + const result = produce(this, (draft) => { + delete draft.root[key.toString()]; + draft.cachedIter = null; + }); + return result; + } + + [Symbol.iterator](): IterableIterator<[BigInteger, V]> { + let idx = 0; + const result = this.generateCachedIter(); + return { + [Symbol.iterator]: this[Symbol.iterator], + next: (): IteratorResult<[BigInteger, V]> => { + if (idx < result.length) { + return { value: result[idx++], done: false }; + } + return { done: true, value: null }; + } + }; + } + + peekLargest() { + const sorted = Array.from(this); + return sorted[0] as [BigInteger, V] | null; + } + + peekSmallest() { + const sorted = Array.from(this); + return sorted[sorted.length - 1] as [BigInteger, V] | null; + } + + keys() { + return Array.from(this).map(([k,v]) => k); + } + + generateCachedIter() { + if(this.cachedIter) { + return [...this.cachedIter]; + } + const result = Object.keys(this.root).map((key) => { + const num = bigInt(key); + return [num, this.root[key]] as [BigInteger, V]; + }).sort(([a], [b]) => sortBigInt(a,b)); + this.cachedIter = result; + return [...result]; + } +} + diff --git a/gear/lib/index.ts b/gear/lib/index.ts new file mode 100644 index 00000000..4fed660f --- /dev/null +++ b/gear/lib/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; \ No newline at end of file diff --git a/gear/lib/lib.ts b/gear/lib/lib.ts new file mode 100644 index 00000000..c57d0a25 --- /dev/null +++ b/gear/lib/lib.ts @@ -0,0 +1,259 @@ +import bigInt, { BigInteger } from "big-integer"; + +import { Resource } from "../groups/types"; +import { Post, GraphNode } from "../graph/types"; + +const DA_UNIX_EPOCH = bigInt("170141184475152167957503069145530368000"); // `@ud` ~1970.1.1 + +const DA_SECOND = bigInt("18446744073709551616"); // `@ud` ~s1 + +function chunk(arr: T[], size: number): T[][] { + let chunk: T[] = []; + let newArray = [chunk]; + + for (let i = 0;i < arr.length;i++) { + if (chunk.length < size) { + chunk.push(arr[i]) + } else { + chunk = [arr[i]] + newArray.push(chunk) + } + } + + return newArray; +} + +function dropWhile(arr: T[], pred: (x: T) => boolean): T[] { + const newArray = arr.slice(); + + for (const item of arr) { + if (pred(item)) { + newArray.shift(); + } else { + return newArray; + } + } + + return newArray; +} + +/** + * Given a bigint representing an urbit date, returns a unix timestamp. + * + * @param {BigInteger} da The urbit date + * + * @return {number} The unix timestamp + */ +export function daToUnix(da: BigInteger): number { + // ported from +time:enjs:format in hoon.hoon + const offset = DA_SECOND.divide(bigInt(2000)); + const epochAdjusted = offset.add(da.subtract(DA_UNIX_EPOCH)); + + return Math.round( + epochAdjusted.multiply(bigInt(1000)).divide(DA_SECOND).toJSNumber() + ); +} + +/** + * Given a unix timestamp, returns a bigint representing an urbit date + * + * @param {number} unix The unix timestamp + * + * @return {BigInteger} The urbit date + */ +export function unixToDa(unix: number): BigInteger { + const timeSinceEpoch = bigInt(unix).multiply(DA_SECOND).divide(bigInt(1000)); + return DA_UNIX_EPOCH.add(timeSinceEpoch); +} + + +export function makePatDa(patda: string): BigInteger { + return bigInt(udToDec(patda)); +} + +export function udToDec(ud: string): string { + return ud.replace(/\./g, ""); +} + +export function decToUd(str: string): string { + const transform = chunk(str.split('').reverse(), 3) + .map(group => group.reverse().join('')) + .reverse() + .join('.') + return transform.replace(/^[0\.]+/g, ''); +} + +export function resourceAsPath(resource: Resource): string { + const { name, ship } = resource; + return `/ship/~${ship}/${name}`; +} + +export function uuid(): string { + let str = "0v"; + str += Math.ceil(Math.random() * 8) + "."; + for (let i = 0; i < 5; i++) { + let _str = Math.ceil(Math.random() * 10000000).toString(32); + _str = ("00000" + _str).substr(-5, 5); + str += _str + "."; + } + + return str.slice(0, -1); +} + +/* + Goes from: + ~2018.7.17..23.15.09..5be5 // urbit @da + To: + (javascript Date object) +*/ +export function daToDate(st: string): Date { + const dub = function (n: string) { + return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); + }; + const da = st.split(".."); + const bigEnd = da[0].split("."); + const lilEnd = da[1].split("."); + const ds = `${bigEnd[0].slice(1)}-${dub(bigEnd[1])}-${dub(bigEnd[2])}T${dub( + lilEnd[0] + )}:${dub(lilEnd[1])}:${dub(lilEnd[2])}Z`; + return new Date(ds); +} + +/* + Goes from: + (javascript Date object) + To: + ~2018.7.17..23.15.09..5be5 // urbit @da +*/ + +export function dateToDa(d: Date, mil: boolean = false): string { + const fil = function (n: number) { + return n >= 10 ? n : "0" + n; + }; + return ( + `~${d.getUTCFullYear()}.` + + `${d.getUTCMonth() + 1}.` + + `${fil(d.getUTCDate())}..` + + `${fil(d.getUTCHours())}.` + + `${fil(d.getUTCMinutes())}.` + + `${fil(d.getUTCSeconds())}` + + `${mil ? "..0000" : ""}` + ); +} + +export function preSig(ship: string): string { + if (!ship) { + return ''; + } + + if (ship.trim().startsWith('~')) { + return ship.trim(); + } + + return '~'.concat(ship.trim()); +} + +export function deSig(ship: string): string | null { + if (!ship) { + return null; + } + return ship.replace("~", ""); +} + +// trim patps to match dojo, chat-cli +export function cite(ship: string) { + let patp = ship, + shortened = ''; + if (patp === null || patp === '') { + return null; + } + if (patp.startsWith('~')) { + patp = patp.substr(1); + } + // comet + if (patp.length === 56) { + shortened = '~' + patp.slice(0, 6) + '_' + patp.slice(50, 56); + return shortened; + } + // moon + if (patp.length === 27) { + shortened = '~' + patp.slice(14, 20) + '^' + patp.slice(21, 27); + return shortened; + } + return `~${patp}`; +} + + +export function uxToHex(ux: string) { + if (ux.length > 2 && ux.substr(0, 2) === '0x') { + const value = ux.substr(2).replace('.', '').padStart(6, '0'); + return value; + } + + const value = ux.replace('.', '').padStart(6, '0'); + return value; +} + +export const hexToUx = (hex: string): string => { + const nonZeroChars = dropWhile(hex.split(''), y => y === '0'); + const ux = chunk(nonZeroChars.reverse(), 4).map(x => { + return x.reverse().join(''); + }).reverse().join('.') || '0'; + + return `0x${ux}`; +}; + + +// encode the string into @ta-safe format, using logic from +wood. +// for example, 'some Chars!' becomes '~.some.~43.hars~21.' +// +export function stringToTa(str: string): string { + let out = ""; + for (let i = 0; i < str.length; i++) { + const char = str[i]; + let add = ""; + switch (char) { + case " ": + add = "."; + break; + case ".": + add = "~."; + break; + case "~": + add = "~~"; + break; + default: + const charCode = str.charCodeAt(i); + if ( + (charCode >= 97 && charCode <= 122) || // a-z + (charCode >= 48 && charCode <= 57) || // 0-9 + char === "-" + ) { + add = char; + } else { + // TODO behavior for unicode doesn't match +wood's, + // but we can probably get away with that for now. + add = "~" + charCode.toString(16) + "."; + } + } + out = out + add; + } + return "~." + out; +} + +export const buntPost = (): Post => ({ + author: '', + contents: [], + hash: null, + index: '', + signatures: [], + 'time-sent': 0 +}); + +export function makeNodeMap(posts: Post[]): Record { + const nodes: Record = {}; + posts.forEach((p: Post) => { + nodes[String(p.index)] = { children: null, post: p }; + }); + return nodes; +} diff --git a/gear/lib/types.ts b/gear/lib/types.ts new file mode 100644 index 00000000..4c701ea9 --- /dev/null +++ b/gear/lib/types.ts @@ -0,0 +1,67 @@ +/** + * Martian embassy + */ + +import { BigIntOrderedMap } from "./BigIntOrderedMap"; + +// an urbit style path rendered as string +export type Path = string; + +// patp including leading sig +export type Patp = string; + +// patp excluding leading sig +export type PatpNoSig = string; + +// @uvH encoded string +export type Serial = string; + +// jug from hoon +export type Jug = Map>; + +// name of app +export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph' | 'groups'; + +export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; + +export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; + + +export type SetElement = S extends Set<(infer T)> ? T : never; +export type MapKey = M extends Map<(infer K), any> ? K : never; +export type MapValue = M extends Map ? V : never; + +/** + * Turns sets into arrays and maps into objects so we can send them over the wire + */ +export type Enc = + S extends Set ? + Enc>[] : + S extends Map ? + { [s: string]: Enc> } : + S extends object ? + { [K in keyof S]: Enc } : + S extends BigIntOrderedMap ? + { [index: string]: T } : + S; + +export type Mark = string; + +export interface Poke { + ship?: string; // This should be handled by the http library, but is part of the spec + app: string; + mark: Mark; + json: Action; +} + +export interface Scry { + app: string; + path: string; +} + +export interface Thread { + inputMark: string; + outputMark: string; + threadName: string; + body: Action; +} diff --git a/gear/metadata/index.ts b/gear/metadata/index.ts new file mode 100644 index 00000000..341e8171 --- /dev/null +++ b/gear/metadata/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './lib'; \ No newline at end of file diff --git a/gear/metadata/lib.ts b/gear/metadata/lib.ts new file mode 100644 index 00000000..ace81e8a --- /dev/null +++ b/gear/metadata/lib.ts @@ -0,0 +1,99 @@ +import { Path, Poke, uxToHex, PatpNoSig } from '../lib'; +import { MdAppName, Association, Metadata, MetadataUpdate, MetadataUpdateAdd, MetadataUpdateRemove, MetadataEditField, MetadataUpdateEdit } from './types'; + +export const METADATA_UPDATE_VERSION = 2; + +export const metadataAction = (data: T, version: number = METADATA_UPDATE_VERSION): Poke => ({ + app: 'metadata-push-hook', + mark: `metadata-update-${version}`, + json: data +}); + +export const add = ( + ship: PatpNoSig, + appName: MdAppName, + resource: Path, + group: Path, + title: string, + description: string, + dateCreated: string, + color: string, + moduleName: string +): Poke => metadataAction({ + add: { + group, + resource: { + resource, + 'app-name': appName + }, + metadata: { + title, + description, + color, + 'date-created': dateCreated, + creator: `~${ship}`, + config: { graph: moduleName }, + picture: '', + hidden: false, + preview: false, + vip: '' + } + } +}); + +export { add as metadataAdd }; + +export const remove = ( + appName: MdAppName, + resource: string, + group: string +): Poke => metadataAction({ + remove: { + group, + resource: { + resource, + 'app-name': appName + } + } +}); + +export { remove as metadataRemove }; + +export const edit = ( + association: Association, + edit: MetadataEditField +): Poke => metadataAction({ + edit: { + group: association.group, + resource: { + resource: association.resource, + 'app-name': association['app-name'] + }, + edit + } +}); + +export { edit as metadataEdit }; + +/** + * @deprecated use {@link edit} instead + */ +export const update = ( + association: Association, + newMetadata: Partial +): Poke => { + const metadata = { ...association.metadata, ...newMetadata }; + metadata.color = uxToHex(metadata.color); + return metadataAction({ + add: { + group: association.group, + resource: { + resource: association.resource, + 'app-name': association['app-name'] + }, + metadata + } + }); +}; + +export { update as metadataUpdate }; diff --git a/gear/metadata/types.ts b/gear/metadata/types.ts new file mode 100644 index 00000000..828c83b1 --- /dev/null +++ b/gear/metadata/types.ts @@ -0,0 +1,101 @@ +import { Path, Patp } from '../lib'; + +export type MdAppName = 'groups' | 'graph'; + +export type MetadataUpdate = + MetadataUpdateInitial +| MetadataUpdateAdd +| MetadataUpdateUpdate +| MetadataUpdateRemove +| MetadataUpdateEdit; + +export interface MetadataUpdateInitial { + associations: ResourceAssociations; +} + +export type ResourceAssociations = { + [p in Path]: Association; +} + +export type MetadataUpdateAdd = { + add: AssociationPoke; +} + +export type MetadataUpdateUpdate = { + update: AssociationPoke; +} + +export interface MetadataUpdateEdit { + edit: { + resource: MdResource; + group: string; + edit: MetadataEditField; + } +} + +export type MetadataEditField = Partial>; + +export type MetadataUpdateRemove = { + remove: { + resource: MdResource; + group: string; + } +} + +export interface MdResource { + resource: string; + 'app-name': MdAppName; +} + +export interface MetadataUpdatePreview { + group: string; + channels: Associations; + 'channel-count': number; + members: number; + metadata: Metadata; +} + +export type Associations = { + groups: AppAssociations + graph: AppAssociations; +} + +export type AppAssociations = { + [p in Path]: Association; +} + +export type Association = MdResource & { + group: Path; + metadata: Metadata; +}; + +export interface AssociationPoke { + group: Path; + resource: MdResource; + metadata: Metadata; +} + +export interface Metadata { + color: string; + creator: Patp; + 'date-created': string; + description: string; + title: string; + config: C; + hidden: boolean; + picture: string; + preview: boolean; + vip: PermVariation; +} + +export type MetadataConfig = GroupConfig | GraphConfig; + +export interface GraphConfig { + graph: string; +} + +export interface GroupConfig { + group: undefined | {} | MdResource; +} + +export type PermVariation = '' | ' ' | 'reader-comments' | 'member-metadata' | 'host-feed' | 'admin-feed'; diff --git a/gear/settings/index.ts b/gear/settings/index.ts new file mode 100644 index 00000000..341e8171 --- /dev/null +++ b/gear/settings/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './lib'; \ No newline at end of file diff --git a/gear/settings/lib.ts b/gear/settings/lib.ts new file mode 100644 index 00000000..94fca9d5 --- /dev/null +++ b/gear/settings/lib.ts @@ -0,0 +1,78 @@ +import { Poke, Scry } from '../lib'; +import { PutBucket, Key, Bucket, DelBucket, Value, PutEntry, DelEntry, SettingsUpdate } from './types'; + +export const action = (data: T): Poke => ({ + app: 'settings-store', + mark: 'settings-event', + json: data +}); + +export const putBucket = ( + desk: string, + key: Key, + bucket: Bucket +): Poke => action({ + 'put-bucket': { + desk, + 'bucket-key': key, + 'bucket': bucket + } +}); + +export const delBucket = ( + desk: string, + key: Key +): Poke => action({ + 'del-bucket': { + desk, + 'bucket-key': key + } +}); + +export const putEntry = ( + desk: string, + bucket: Key, + key: Key, + value: Value +): Poke => action({ + 'put-entry': { + desk, + 'bucket-key': bucket, + 'entry-key': key, + value: value + } +}); + +export const delEntry = ( + desk: string, + bucket: Key, + key: Key +): Poke => action({ + 'del-entry': { + desk, + 'bucket-key': bucket, + 'entry-key': key + } +}); + +export const getAll: Scry = { + app: 'settings-store', + path: '/all' +}; + +export const getBucket = (desk: string, bucket: string) => ({ + app: 'settings-store', + path: `/bucket/${bucket}` +}); + +export const getEntry = (desk: string, bucket: string, entry: string) => ({ + app: 'settings-store', + path: `/entry/${desk}/${bucket}/${entry}` +}); + +export const getDeskSettings = (desk: string) => ({ + app: 'settings-store', + path: `/desk/${desk}` +}); + +export * from './types'; diff --git a/gear/settings/types.ts b/gear/settings/types.ts new file mode 100644 index 00000000..af02c70b --- /dev/null +++ b/gear/settings/types.ts @@ -0,0 +1,64 @@ +export type Key = string; +export type Value = string | string[] | boolean | number; +export type Bucket = { [key: string]: Value; }; +export type DeskSettings = { [bucket: string]: Bucket; }; +export type Settings = { [desk: string]: Settings; } + +export interface PutBucket { + 'put-bucket': { + desk: string; + 'bucket-key': Key; + 'bucket': Bucket; + }; +} + +export interface DelBucket { + 'del-bucket': { + desk: string; + 'bucket-key': Key; + }; +} + +export interface PutEntry { + 'put-entry': { + 'bucket-key': Key; + 'entry-key': Key; + 'value'?: Value; + }; +} + +export interface DelEntry { + 'del-entry': { + desk: string; + 'bucket-key': Key; + 'entry-key': Key; + }; +} + +export interface AllData { + 'all': Settings; +} + +export interface DeskData { + desk: DeskSettings; +} + +export interface BucketData { + 'bucket': Bucket; +} + +export interface EntryData { + 'entry': Value; +} + +export type SettingsUpdate = + | PutBucket + | DelBucket + | PutEntry + | DelEntry; + +export type SettingsData = + | AllData + | BucketData + | EntryData + | DeskData; diff --git a/gear/storage/index.ts b/gear/storage/index.ts new file mode 100644 index 00000000..4fed660f --- /dev/null +++ b/gear/storage/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; \ No newline at end of file diff --git a/gear/storage/lib.ts b/gear/storage/lib.ts new file mode 100644 index 00000000..165789ea --- /dev/null +++ b/gear/storage/lib.ts @@ -0,0 +1,47 @@ +import { Poke } from '../lib/types'; +import { StorageUpdate, StorageUpdateCurrentBucket, StorageUpdateAddBucket, StorageUpdateRemoveBucket, StorageUpdateEndpoint, StorageUpdateAccessKeyId, StorageUpdateSecretAccessKey } from './types'; + +const s3Action = ( + data: any +): Poke => ({ + app: 's3-store', + mark: 's3-action', + json: data +}); + +export const setCurrentBucket = ( + bucket: string +): Poke => s3Action({ + 'set-current-bucket': bucket +}); + +export const addBucket = ( + bucket: string +): Poke => s3Action({ + 'add-bucket': bucket +}); + +export const removeBucket = ( + bucket: string +): Poke => s3Action({ + 'remove-bucket': bucket +}); + +export const setEndpoint = ( + endpoint: string +): Poke => s3Action({ + 'set-endpoint': endpoint +}); + +export const setAccessKeyId = ( + accessKeyId: string +): Poke => s3Action({ + 'set-access-key-id': accessKeyId +}); + +export const setSecretAccessKey = ( + secretAccessKey: string +): Poke => s3Action({ + 'set-secret-access-key': secretAccessKey +}); + diff --git a/gear/storage/types.ts b/gear/storage/types.ts new file mode 100644 index 00000000..6c5cb93e --- /dev/null +++ b/gear/storage/types.ts @@ -0,0 +1,60 @@ +export interface StorageCredentials { + endpoint: string; + accessKeyId: string; + secretAccessKey: string; +} + +export interface StorageConfiguration { + buckets: Set; + currentBucket: string; +} + +export interface StorageState { + configuration: StorageConfiguration; + credentials: StorageCredentials | null; +} + +export interface StorageUpdateCredentials { + credentials: StorageCredentials; +} + +export interface StorageUpdateConfiguration { + configuration: { + buckets: string[]; + currentBucket: string; + } +} + +export interface StorageUpdateCurrentBucket { + setCurrentBucket: string; +} + +export interface StorageUpdateAddBucket { + addBucket: string; +} + +export interface StorageUpdateRemoveBucket { + removeBucket: string; +} + +export interface StorageUpdateEndpoint { + setEndpoint: string; +} + +export interface StorageUpdateAccessKeyId { + setAccessKeyId: string; +} + +export interface StorageUpdateSecretAccessKey { + setSecretAccessKey: string; +} + +export type StorageUpdate = + StorageUpdateCredentials +| StorageUpdateConfiguration +| StorageUpdateCurrentBucket +| StorageUpdateAddBucket +| StorageUpdateRemoveBucket +| StorageUpdateEndpoint +| StorageUpdateAccessKeyId +| StorageUpdateSecretAccessKey; From 62833d42eef80bf5572098c3be51e82468207aa5 Mon Sep 17 00:00:00 2001 From: tomholford Date: Fri, 19 May 2023 14:30:06 -0700 Subject: [PATCH 02/14] devex: move to ui/, remove graph and lib also uninstall @urbit/api --- gear/graph/lib.ts | 534 ----------------------- gear/graph/types.ts | 94 ---- gear/lib/BigIntArrayOrderedMap.ts | 152 ------- gear/lib/BigIntOrderedMap.ts | 117 ----- gear/lib/index.ts | 2 - gear/lib/lib.ts | 259 ----------- gear/lib/types.ts | 67 --- gear/storage/index.ts | 2 - {gear => ui/gear}/contacts/index.ts | 0 {gear => ui/gear}/contacts/lib.ts | 0 {gear => ui/gear}/contacts/types.ts | 0 {gear => ui/gear}/deps.d.ts | 0 {gear => ui/gear}/docket/index.ts | 0 {gear => ui/gear}/docket/lib.ts | 0 {gear => ui/gear}/docket/types.ts | 0 {gear => ui/gear}/groups/index.ts | 0 {gear => ui/gear}/groups/lib.ts | 0 {gear => ui/gear}/groups/types.ts | 0 {gear => ui/gear}/groups/update.ts | 0 {gear => ui/gear}/groups/view.ts | 0 {gear => ui/gear}/hark/index.ts | 0 {gear => ui/gear}/hark/lib.ts | 0 {gear => ui/gear}/hark/types.ts | 0 {gear => ui/gear}/hood/index.ts | 0 {gear => ui/gear}/hood/lib.ts | 0 {gear => ui/gear}/hood/types.ts | 0 {gear => ui/gear}/index.ts | 6 +- {gear => ui/gear}/invite/index.ts | 0 {gear => ui/gear}/invite/lib.ts | 0 {gear => ui/gear}/invite/types.ts | 0 {gear => ui/gear}/metadata/index.ts | 0 {gear => ui/gear}/metadata/lib.ts | 0 {gear => ui/gear}/metadata/types.ts | 0 {gear => ui/gear}/settings/index.ts | 0 {gear => ui/gear}/settings/lib.ts | 0 {gear => ui/gear}/settings/types.ts | 0 {gear/graph => ui/gear/storage}/index.ts | 0 {gear => ui/gear}/storage/lib.ts | 0 {gear => ui/gear}/storage/types.ts | 0 ui/package-lock.json | 25 -- ui/package.json | 1 - ui/src/state/storage/index.ts | 4 +- 42 files changed, 4 insertions(+), 1259 deletions(-) delete mode 100644 gear/graph/lib.ts delete mode 100644 gear/graph/types.ts delete mode 100644 gear/lib/BigIntArrayOrderedMap.ts delete mode 100644 gear/lib/BigIntOrderedMap.ts delete mode 100644 gear/lib/index.ts delete mode 100644 gear/lib/lib.ts delete mode 100644 gear/lib/types.ts delete mode 100644 gear/storage/index.ts rename {gear => ui/gear}/contacts/index.ts (100%) rename {gear => ui/gear}/contacts/lib.ts (100%) rename {gear => ui/gear}/contacts/types.ts (100%) rename {gear => ui/gear}/deps.d.ts (100%) rename {gear => ui/gear}/docket/index.ts (100%) rename {gear => ui/gear}/docket/lib.ts (100%) rename {gear => ui/gear}/docket/types.ts (100%) rename {gear => ui/gear}/groups/index.ts (100%) rename {gear => ui/gear}/groups/lib.ts (100%) rename {gear => ui/gear}/groups/types.ts (100%) rename {gear => ui/gear}/groups/update.ts (100%) rename {gear => ui/gear}/groups/view.ts (100%) rename {gear => ui/gear}/hark/index.ts (100%) rename {gear => ui/gear}/hark/lib.ts (100%) rename {gear => ui/gear}/hark/types.ts (100%) rename {gear => ui/gear}/hood/index.ts (100%) rename {gear => ui/gear}/hood/lib.ts (100%) rename {gear => ui/gear}/hood/types.ts (100%) rename {gear => ui/gear}/index.ts (87%) rename {gear => ui/gear}/invite/index.ts (100%) rename {gear => ui/gear}/invite/lib.ts (100%) rename {gear => ui/gear}/invite/types.ts (100%) rename {gear => ui/gear}/metadata/index.ts (100%) rename {gear => ui/gear}/metadata/lib.ts (100%) rename {gear => ui/gear}/metadata/types.ts (100%) rename {gear => ui/gear}/settings/index.ts (100%) rename {gear => ui/gear}/settings/lib.ts (100%) rename {gear => ui/gear}/settings/types.ts (100%) rename {gear/graph => ui/gear/storage}/index.ts (100%) rename {gear => ui/gear}/storage/lib.ts (100%) rename {gear => ui/gear}/storage/types.ts (100%) diff --git a/gear/graph/lib.ts b/gear/graph/lib.ts deleted file mode 100644 index ce187df6..00000000 --- a/gear/graph/lib.ts +++ /dev/null @@ -1,534 +0,0 @@ -import { GroupPolicy, makeResource, Resource, resourceFromPath } from '../groups'; - -import { decToUd, deSig, unixToDa, Scry } from '../lib'; -import { Enc, Path, Patp, PatpNoSig, Poke, Thread } from '../lib/types'; -import { Content, GraphChildrenPoke, GraphNode, GraphNodePoke, Post } from './types'; -import { patp2dec } from 'urbit-ob'; - -export const GRAPH_UPDATE_VERSION = 3; - -export const createBlankNodeWithChildPost = ( - ship: PatpNoSig, - parentIndex = '', - childIndex = '', - contents: Content[] -): GraphNodePoke => { - const date = unixToDa(Date.now()).toString(); - const nodeIndex = parentIndex + '/' + date; - - const childGraph: GraphChildrenPoke = {}; - childGraph[childIndex] = { - post: { - author: `~${ship}`, - index: nodeIndex + '/' + childIndex, - 'time-sent': Date.now(), - contents, - hash: null, - signatures: [] - }, - children: null - }; - - return { - post: { - author: `~${ship}`, - index: nodeIndex, - 'time-sent': Date.now(), - contents: [], - hash: null, - signatures: [] - }, - children: childGraph - }; -}; - -export const markPending = (nodes: any): any => { - Object.keys(nodes).forEach((key) => { - nodes[key].post.author = deSig(nodes[key].post.author); - nodes[key].post.pending = true; - if (nodes[key].children) { - nodes[key].children = markPending(nodes[key].children); - } - }); - return nodes; -}; - -export const createPost = ( - ship: PatpNoSig, - contents: Content[], - parentIndex = '', - childIndex = 'DATE_PLACEHOLDER' -): Post => { - if (childIndex === 'DATE_PLACEHOLDER') { - childIndex = unixToDa(Date.now()).toString(); - } - return { - author: `~${ship}`, - index: parentIndex + '/' + childIndex, - 'time-sent': Date.now(), - contents, - hash: null, - signatures: [] - }; -}; - -function moduleToMark(mod: string): string | undefined { - if(mod === 'link') { - return 'graph-validator-link'; - } - if(mod === 'publish') { - return 'graph-validator-publish'; - } - if(mod === 'chat') { - return 'graph-validator-chat'; - } - return undefined; -} - -const storeAction = (data: T, version: number = GRAPH_UPDATE_VERSION): Poke => ({ - app: 'graph-store', - mark: `graph-update-${version}`, - json: data -}); - -export { storeAction as graphStoreAction }; - -const viewAction = (threadName: string, action: T): Thread => ({ - inputMark: 'graph-view-action', - outputMark: 'json', - threadName, - body: action -}); - -export { viewAction as graphViewAction }; - -const hookAction = (data: T, version: number = GRAPH_UPDATE_VERSION): Poke => ({ - app: 'graph-push-hook', - mark: `graph-update-${version}`, - json: data -}); - -const dmAction = (data: T): Poke => ({ - app: 'dm-hook', - mark: 'dm-hook-action', - json: data -}); - -export { hookAction as graphHookAction }; - -export const createManagedGraph = ( - ship: PatpNoSig, - name: string, - title: string, - description: string, - group: Path, - mod: string -): Thread => { - const associated = { group: resourceFromPath(group) }; - const resource = makeResource(`~${ship}`, name); - - return viewAction('graph-create', { - create: { - resource, - title, - description, - associated, - module: mod, - mark: moduleToMark(mod) - } - }); -}; - -export const createUnmanagedGraph = ( - ship: PatpNoSig, - name: string, - title: string, - description: string, - policy: Enc, - mod: string -): Thread => viewAction('graph-create', { - create: { - resource: makeResource(`~${ship}`, name), - title, - description, - associated: { policy }, - module: mod, - mark: moduleToMark(mod) - } -}); - -export const joinGraph = ( - ship: Patp, - name: string -): Thread => viewAction('graph-join', { - join: { - resource: makeResource(ship, name), - ship - } -}); - -export const deleteGraph = ( - ship: PatpNoSig, - name: string -): Thread => viewAction('graph-delete', { - 'delete': { - resource: makeResource(`~${ship}`, name) - } -}); - -export const leaveGraph = ( - ship: Patp, - name: string -): Thread => viewAction('graph-leave', { - 'leave': { - resource: makeResource(ship, name) - } -}); - -export const groupifyGraph = ( - ship: Patp, - name: string, - toPath?: string -): Thread => { - const resource = makeResource(ship, name); - const to = toPath && resourceFromPath(toPath); - - return viewAction('graph-groupify', { - groupify: { - resource, - to - } - }); -}; - -export const evalCord = ( - cord: string -): Thread => { - return ({ - inputMark: 'graph-view-action', - outputMark: 'tang', - threadName: 'graph-eval', - body: { - eval: cord - } - }); -}; - -export const addGraph = ( - ship: Patp, - name: string, - graph: any, - mark: any -): Poke => { - return storeAction({ - 'add-graph': { - resource: { ship, name }, - graph, - mark - } - }); -}; - -export const addNodes = ( - ship: Patp, - name: string, - nodes: Object -): Thread => ({ - inputMark: `graph-update-${GRAPH_UPDATE_VERSION}`, - outputMark: 'graph-view-action', - threadName: 'graph-add-nodes', - body: { - 'add-nodes': { - resource: { ship, name }, - nodes - } - } -}); - -export const addPost = ( - ship: Patp, - name: string, - post: Post -): Thread => { - const nodes: Record = {}; - nodes[post.index] = { - post, - children: null - }; - return addNodes(ship, name, nodes); -}; - -export const addNode = ( - ship: Patp, - name: string, - node: GraphNodePoke -): Thread => { - const nodes: Record = {}; - nodes[node.post.index] = node; - - return addNodes(ship, name, nodes); -}; - -export const createGroupFeed = ( - group: Resource, - vip: any = '' -): Thread => ({ - inputMark: 'graph-view-action', - outputMark: 'resource', - threadName: 'graph-create-group-feed', - body: { - 'create-group-feed': { - resource: group, - vip - } - } -}); - -export const disableGroupFeed = ( - group: Resource -): Thread => ({ - inputMark: 'graph-view-action', - outputMark: 'json', - threadName: 'graph-disable-group-feed', - body: { - 'disable-group-feed': { - resource: group - } - } -}); - -/** - * Set dm-hook to screen new DMs or not - * - */ -export const setScreen = (screen: boolean): Poke => dmAction({ screen }); - -/** - * Accept a pending DM request - * - * @param ship the ship to accept - */ -export const acceptDm = (ship: string) => dmAction({ - accept: ship -}); - -/** - * Decline a pending DM request - * - * @param ship the ship to accept - */ -export const declineDm = (ship: string) => dmAction({ - decline: ship -}); - -/** - * Remove posts from a set of indices - * - */ -export const removePosts = ( - ship: Patp, - name: string, - indices: string[] -): Poke => hookAction({ - 'remove-posts': { - resource: { ship, name }, - indices - } -}); - -/** - * Remove a DM message from our inbox - * - * @remarks - * This does not remove the message from the recipients inbox - */ -export const removeDmMessage = ( - our: Patp, - index: string -): Poke => ({ - app: 'graph-store', - mark: `graph-update-${GRAPH_UPDATE_VERSION}`, - json: { - 'remove-posts': { - resource: { ship: our, name: 'dm-inbox' }, - indices: [index] - } - } -}); - -/** - * Send a DM to a ship - * - * @param our sender - * @param ship recipient - * @param contents contents of message - */ -export const addDmMessage = (our: PatpNoSig, ship: Patp, contents: Content[]): Poke => { - const post = createPost(our, contents, `/${patp2dec(ship)}`); - const node: GraphNode = { - post, - children: null - }; - return { - app: 'dm-hook', - mark: `graph-update-${GRAPH_UPDATE_VERSION}`, - json: { - 'add-nodes': { - resource: { ship: `~${our}`, name: 'dm-inbox' }, - nodes: { - [post.index]: node - } - } - } - }; -}; - -const encodeIndex = (idx: string) => idx.split('/').map(decToUd).join('/'); - -/** - * Fetch all graph keys - */ -export const getKeys = (): Scry => ({ - app: 'graph-store', - path: '/keys' -}); - -/** - * Fetch newest (larger keys) nodes in a graph under some index - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param index index to query - */ -export const getNewest = ( - ship: string, - name: string, - count: number, - index = '' -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings` + - `/newest/lone/${count}${encodeIndex(index)}` -}); - -/** - * Fetch nodes in a graph that are older (key is smaller) and direct - * siblings of some index - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param index index to query - */ -export const getOlderSiblings = ( - ship: string, - name: string, - count: number, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings/older/lone/${count}${encodeIndex(index)}` -}); - -/** - * Fetch nodes in a graph that are younger (key is larger) and direct - * siblings of some index - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param index index to query - */ -export const getYoungerSiblings = ( - ship: string, - name: string, - count: number, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings/newer/lone/${count}${encodeIndex(index)}` -}); - -/** - * Fetch all nodes in a graph under some index, without loading children - * - * @param ship ship of graph - * @param name name of graph - * @param index index to query - */ -export const getShallowChildren = (ship: string, name: string, index = '') => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/children/lone/~/~${encodeIndex(index)}` -}); - -/** - * Fetch newest nodes in a graph as a flat map, including children, - * optionally starting at a specified key - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param start key to start at - * - */ -export const getDeepOlderThan = ( - ship: string, - name: string, - count: number, - start = '' -) => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings` + - `/${start.length > 0 ? 'older' : 'newest'}` + - `/kith/${count}${encodeIndex(start)}` -}); - -/** - * Fetch a flat map of a nodes ancestors and firstborn children - * - * @param ship ship of graph - * @param name name of graph - * @param index index to query - * - */ -export const getFirstborn = ( - ship: string, - name: string, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/firstborn${encodeIndex(index)}` -}); - -/** - * Fetch a single node, and all it's children - * - * @param ship ship of graph - * @param name name of graph - * @param index index to query - * - */ -export const getNode = ( - ship: string, - name: string, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/index/kith${encodeIndex(index)}` -}); - -/** - * Fetch entire graph - * - * @param ship ship of graph - * @param name name of graph - * - */ -export const getGraph = ( - ship: string, - name: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}` -}); diff --git a/gear/graph/types.ts b/gear/graph/types.ts deleted file mode 100644 index 2e8816a3..00000000 --- a/gear/graph/types.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Patp } from '../lib'; -import { BigIntOrderedMap } from '../lib/BigIntOrderedMap'; -import { BigIntArrayOrderedMap } from '../lib/BigIntArrayOrderedMap'; - -export interface TextContent { - text: string; -} -export interface UrlContent { - url: string; -} -export interface CodeContent { - code: { - expression: string; - output: string[] | undefined; - } -} - -export interface ReferenceContent { - reference: AppReference | GraphReference | GroupReference; -} - -export interface GraphReference { - graph: { - graph: string; - group: string; - index: string; - } -} - -export interface GroupReference { - group: string; -} - -export interface AppReference { - app: { - ship: string; - desk: string; - path: string; - } -} - -export interface MentionContent { - mention: string; - emphasis?: 'bold' | 'italic'; -} -export type Content = - | TextContent - | UrlContent - | CodeContent - | ReferenceContent - | MentionContent; - -export interface Post { - author: Patp; - contents: Content[]; - hash: string | null; - index: string; - pending?: boolean; - signatures: string[]; - 'time-sent': number; -} - -export interface GraphNodePoke { - post: Post; - children: GraphChildrenPoke | null; -} - -export interface GraphChildrenPoke { - [k: string]: GraphNodePoke; -} - -export interface GraphNode { - children: Graph | null; - post: Post; -} - -export interface FlatGraphNode { - children: null; - post: Post; -} - -export type Graph = BigIntOrderedMap; - -export type Graphs = { [rid: string]: Graph }; - -export type FlatGraph = BigIntArrayOrderedMap; - -export type FlatGraphs = { [rid: string]: FlatGraph }; - -export type ThreadGraphs = { - [rid: string]: { - [index: string]: FlatGraph; - } -}; diff --git a/gear/lib/BigIntArrayOrderedMap.ts b/gear/lib/BigIntArrayOrderedMap.ts deleted file mode 100644 index 79e998c5..00000000 --- a/gear/lib/BigIntArrayOrderedMap.ts +++ /dev/null @@ -1,152 +0,0 @@ -import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; -import bigInt, { BigInteger } from 'big-integer'; - -setAutoFreeze(false); - -enablePatches(); - -export function stringToArr(str: string) { - return str.split('/').slice(1).map((ind) => { - return bigInt(ind); - }); -} - -export function arrToString(arr: BigInteger[]) { - let string = ''; - arr.forEach((key) => { - string = string + `/${key.toString()}`; - }); - return string; -} - -function sorted(a: BigInteger[], b: BigInteger[], reversed = false) { - const getSort = sortBigIntArr(a, b); - if (reversed) { - return getSort * -1; - } else { - return getSort; - } -} - -export function sortBigIntArr(a: BigInteger[], b: BigInteger[]) { - const aLen = a.length; - const bLen = b.length; - - const aCop = a.slice(0); - const bCop = b.slice(0); - aCop.reverse(); - bCop.reverse(); - - let i = 0; - while (i < aLen && i < bLen) { - if (aCop[i].lt(bCop[i])) { - return 1; - } else if (aCop[i].gt(bCop[i])) { - return -1; - } else { - i++; - } - } - - return bLen - aLen; -} - -export class BigIntArrayOrderedMap implements Iterable<[BigInteger[], V]> { - root: Record = {} - cachedIter: [BigInteger[], V][] | null = null; - [immerable] = true; - reversed = false; - - constructor(items: [BigInteger[], V][] = [], reversed = false) { - items.forEach(([key, val]) => { - this.set(key, val); - }); - this.reversed = reversed; - } - - get size() { - return Object.keys(this.root).length; - } - - get(key: BigInteger[]) { - return this.root[arrToString(key)] ?? null; - } - - gas(items: [BigInteger[], V][]) { - return produce(this, (draft) => { - items.forEach(([key, value]) => { - draft.root[arrToString(key)] = castDraft(value); - }); - draft.generateCachedIter(); - }, - (patches) => { - // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); - }); - } - - set(key: BigInteger[], value: V) { - return produce(this, (draft) => { - draft.root[arrToString(key)] = castDraft(value); - draft.cachedIter = null; - }); - } - - clear() { - return produce(this, (draft) => { - draft.cachedIter = []; - draft.root = {}; - }); - } - - has(key: BigInteger[]) { - return arrToString(key) in this.root; - } - - delete(key: BigInteger[]) { - const result = produce(this, (draft) => { - delete draft.root[arrToString(key)]; - draft.cachedIter = null; - }); - return result; - } - - [Symbol.iterator](): IterableIterator<[BigInteger[], V]> { - let idx = 0; - const result = this.generateCachedIter(); - return { - [Symbol.iterator]: this[Symbol.iterator], - next: (): IteratorResult<[BigInteger[], V]> => { - if (idx < result.length) { - return { value: result[idx++], done: false }; - } - return { done: true, value: null }; - } - }; - } - - peekLargest() { - const sorted = Array.from(this); - return sorted[0] as [BigInteger[], V] | null; - } - - peekSmallest() { - const sorted = Array.from(this); - return sorted[sorted.length - 1] as [BigInteger[], V] | null; - } - - keys() { - return Array.from(this).map(([k,v]) => k); - } - - generateCachedIter() { - if(this.cachedIter) { - return [...this.cachedIter]; - } - const result = Object.keys(this.root).map((key) => { - return [stringToArr(key), this.root[key]] as [BigInteger[], V]; - }).sort(([a], [b]) => sorted(a, b, this.reversed)); - this.cachedIter = result; - return [...result]; - } -} - diff --git a/gear/lib/BigIntOrderedMap.ts b/gear/lib/BigIntOrderedMap.ts deleted file mode 100644 index 5e3661d1..00000000 --- a/gear/lib/BigIntOrderedMap.ts +++ /dev/null @@ -1,117 +0,0 @@ -import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; -import bigInt, { BigInteger } from 'big-integer'; - -setAutoFreeze(false); - -enablePatches(); - -function sortBigInt(a: BigInteger, b: BigInteger) { - if (a.lt(b)) { - return 1; - } else if (a.eq(b)) { - return 0; - } else { - return -1; - } -} -export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { - root: Record = {} - cachedIter: [BigInteger, V][] | null = null; - [immerable] = true; - - constructor(items: [BigInteger, V][] = []) { - items.forEach(([key, val]) => { - this.set(key, val); - }); - } - - get size() { - if(this.cachedIter) { - return this.cachedIter.length; - } - return this.generateCachedIter().length; - } - - get(key: BigInteger) { - return this.root[key.toString()] ?? null; - } - - gas(items: [BigInteger, V][]) { - return produce(this, (draft) => { - items.forEach(([key, value]) => { - draft.root[key.toString()] = castDraft(value); - }); - draft.cachedIter = null; - }, - (patches) => { - // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); - }); - } - - set(key: BigInteger, value: V) { - return produce(this, (draft) => { - draft.root[key.toString()] = castDraft(value); - draft.cachedIter = null; - }); - } - - clear() { - return produce(this, (draft) => { - draft.cachedIter = []; - draft.root = {}; - }); - } - - has(key: BigInteger) { - return key.toString() in this.root; - } - - delete(key: BigInteger) { - const result = produce(this, (draft) => { - delete draft.root[key.toString()]; - draft.cachedIter = null; - }); - return result; - } - - [Symbol.iterator](): IterableIterator<[BigInteger, V]> { - let idx = 0; - const result = this.generateCachedIter(); - return { - [Symbol.iterator]: this[Symbol.iterator], - next: (): IteratorResult<[BigInteger, V]> => { - if (idx < result.length) { - return { value: result[idx++], done: false }; - } - return { done: true, value: null }; - } - }; - } - - peekLargest() { - const sorted = Array.from(this); - return sorted[0] as [BigInteger, V] | null; - } - - peekSmallest() { - const sorted = Array.from(this); - return sorted[sorted.length - 1] as [BigInteger, V] | null; - } - - keys() { - return Array.from(this).map(([k,v]) => k); - } - - generateCachedIter() { - if(this.cachedIter) { - return [...this.cachedIter]; - } - const result = Object.keys(this.root).map((key) => { - const num = bigInt(key); - return [num, this.root[key]] as [BigInteger, V]; - }).sort(([a], [b]) => sortBigInt(a,b)); - this.cachedIter = result; - return [...result]; - } -} - diff --git a/gear/lib/index.ts b/gear/lib/index.ts deleted file mode 100644 index 4fed660f..00000000 --- a/gear/lib/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; \ No newline at end of file diff --git a/gear/lib/lib.ts b/gear/lib/lib.ts deleted file mode 100644 index c57d0a25..00000000 --- a/gear/lib/lib.ts +++ /dev/null @@ -1,259 +0,0 @@ -import bigInt, { BigInteger } from "big-integer"; - -import { Resource } from "../groups/types"; -import { Post, GraphNode } from "../graph/types"; - -const DA_UNIX_EPOCH = bigInt("170141184475152167957503069145530368000"); // `@ud` ~1970.1.1 - -const DA_SECOND = bigInt("18446744073709551616"); // `@ud` ~s1 - -function chunk(arr: T[], size: number): T[][] { - let chunk: T[] = []; - let newArray = [chunk]; - - for (let i = 0;i < arr.length;i++) { - if (chunk.length < size) { - chunk.push(arr[i]) - } else { - chunk = [arr[i]] - newArray.push(chunk) - } - } - - return newArray; -} - -function dropWhile(arr: T[], pred: (x: T) => boolean): T[] { - const newArray = arr.slice(); - - for (const item of arr) { - if (pred(item)) { - newArray.shift(); - } else { - return newArray; - } - } - - return newArray; -} - -/** - * Given a bigint representing an urbit date, returns a unix timestamp. - * - * @param {BigInteger} da The urbit date - * - * @return {number} The unix timestamp - */ -export function daToUnix(da: BigInteger): number { - // ported from +time:enjs:format in hoon.hoon - const offset = DA_SECOND.divide(bigInt(2000)); - const epochAdjusted = offset.add(da.subtract(DA_UNIX_EPOCH)); - - return Math.round( - epochAdjusted.multiply(bigInt(1000)).divide(DA_SECOND).toJSNumber() - ); -} - -/** - * Given a unix timestamp, returns a bigint representing an urbit date - * - * @param {number} unix The unix timestamp - * - * @return {BigInteger} The urbit date - */ -export function unixToDa(unix: number): BigInteger { - const timeSinceEpoch = bigInt(unix).multiply(DA_SECOND).divide(bigInt(1000)); - return DA_UNIX_EPOCH.add(timeSinceEpoch); -} - - -export function makePatDa(patda: string): BigInteger { - return bigInt(udToDec(patda)); -} - -export function udToDec(ud: string): string { - return ud.replace(/\./g, ""); -} - -export function decToUd(str: string): string { - const transform = chunk(str.split('').reverse(), 3) - .map(group => group.reverse().join('')) - .reverse() - .join('.') - return transform.replace(/^[0\.]+/g, ''); -} - -export function resourceAsPath(resource: Resource): string { - const { name, ship } = resource; - return `/ship/~${ship}/${name}`; -} - -export function uuid(): string { - let str = "0v"; - str += Math.ceil(Math.random() * 8) + "."; - for (let i = 0; i < 5; i++) { - let _str = Math.ceil(Math.random() * 10000000).toString(32); - _str = ("00000" + _str).substr(-5, 5); - str += _str + "."; - } - - return str.slice(0, -1); -} - -/* - Goes from: - ~2018.7.17..23.15.09..5be5 // urbit @da - To: - (javascript Date object) -*/ -export function daToDate(st: string): Date { - const dub = function (n: string) { - return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); - }; - const da = st.split(".."); - const bigEnd = da[0].split("."); - const lilEnd = da[1].split("."); - const ds = `${bigEnd[0].slice(1)}-${dub(bigEnd[1])}-${dub(bigEnd[2])}T${dub( - lilEnd[0] - )}:${dub(lilEnd[1])}:${dub(lilEnd[2])}Z`; - return new Date(ds); -} - -/* - Goes from: - (javascript Date object) - To: - ~2018.7.17..23.15.09..5be5 // urbit @da -*/ - -export function dateToDa(d: Date, mil: boolean = false): string { - const fil = function (n: number) { - return n >= 10 ? n : "0" + n; - }; - return ( - `~${d.getUTCFullYear()}.` + - `${d.getUTCMonth() + 1}.` + - `${fil(d.getUTCDate())}..` + - `${fil(d.getUTCHours())}.` + - `${fil(d.getUTCMinutes())}.` + - `${fil(d.getUTCSeconds())}` + - `${mil ? "..0000" : ""}` - ); -} - -export function preSig(ship: string): string { - if (!ship) { - return ''; - } - - if (ship.trim().startsWith('~')) { - return ship.trim(); - } - - return '~'.concat(ship.trim()); -} - -export function deSig(ship: string): string | null { - if (!ship) { - return null; - } - return ship.replace("~", ""); -} - -// trim patps to match dojo, chat-cli -export function cite(ship: string) { - let patp = ship, - shortened = ''; - if (patp === null || patp === '') { - return null; - } - if (patp.startsWith('~')) { - patp = patp.substr(1); - } - // comet - if (patp.length === 56) { - shortened = '~' + patp.slice(0, 6) + '_' + patp.slice(50, 56); - return shortened; - } - // moon - if (patp.length === 27) { - shortened = '~' + patp.slice(14, 20) + '^' + patp.slice(21, 27); - return shortened; - } - return `~${patp}`; -} - - -export function uxToHex(ux: string) { - if (ux.length > 2 && ux.substr(0, 2) === '0x') { - const value = ux.substr(2).replace('.', '').padStart(6, '0'); - return value; - } - - const value = ux.replace('.', '').padStart(6, '0'); - return value; -} - -export const hexToUx = (hex: string): string => { - const nonZeroChars = dropWhile(hex.split(''), y => y === '0'); - const ux = chunk(nonZeroChars.reverse(), 4).map(x => { - return x.reverse().join(''); - }).reverse().join('.') || '0'; - - return `0x${ux}`; -}; - - -// encode the string into @ta-safe format, using logic from +wood. -// for example, 'some Chars!' becomes '~.some.~43.hars~21.' -// -export function stringToTa(str: string): string { - let out = ""; - for (let i = 0; i < str.length; i++) { - const char = str[i]; - let add = ""; - switch (char) { - case " ": - add = "."; - break; - case ".": - add = "~."; - break; - case "~": - add = "~~"; - break; - default: - const charCode = str.charCodeAt(i); - if ( - (charCode >= 97 && charCode <= 122) || // a-z - (charCode >= 48 && charCode <= 57) || // 0-9 - char === "-" - ) { - add = char; - } else { - // TODO behavior for unicode doesn't match +wood's, - // but we can probably get away with that for now. - add = "~" + charCode.toString(16) + "."; - } - } - out = out + add; - } - return "~." + out; -} - -export const buntPost = (): Post => ({ - author: '', - contents: [], - hash: null, - index: '', - signatures: [], - 'time-sent': 0 -}); - -export function makeNodeMap(posts: Post[]): Record { - const nodes: Record = {}; - posts.forEach((p: Post) => { - nodes[String(p.index)] = { children: null, post: p }; - }); - return nodes; -} diff --git a/gear/lib/types.ts b/gear/lib/types.ts deleted file mode 100644 index 4c701ea9..00000000 --- a/gear/lib/types.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Martian embassy - */ - -import { BigIntOrderedMap } from "./BigIntOrderedMap"; - -// an urbit style path rendered as string -export type Path = string; - -// patp including leading sig -export type Patp = string; - -// patp excluding leading sig -export type PatpNoSig = string; - -// @uvH encoded string -export type Serial = string; - -// jug from hoon -export type Jug = Map>; - -// name of app -export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph' | 'groups'; - -export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; - -export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; - - -export type SetElement = S extends Set<(infer T)> ? T : never; -export type MapKey = M extends Map<(infer K), any> ? K : never; -export type MapValue = M extends Map ? V : never; - -/** - * Turns sets into arrays and maps into objects so we can send them over the wire - */ -export type Enc = - S extends Set ? - Enc>[] : - S extends Map ? - { [s: string]: Enc> } : - S extends object ? - { [K in keyof S]: Enc } : - S extends BigIntOrderedMap ? - { [index: string]: T } : - S; - -export type Mark = string; - -export interface Poke { - ship?: string; // This should be handled by the http library, but is part of the spec - app: string; - mark: Mark; - json: Action; -} - -export interface Scry { - app: string; - path: string; -} - -export interface Thread { - inputMark: string; - outputMark: string; - threadName: string; - body: Action; -} diff --git a/gear/storage/index.ts b/gear/storage/index.ts deleted file mode 100644 index 4fed660f..00000000 --- a/gear/storage/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; \ No newline at end of file diff --git a/gear/contacts/index.ts b/ui/gear/contacts/index.ts similarity index 100% rename from gear/contacts/index.ts rename to ui/gear/contacts/index.ts diff --git a/gear/contacts/lib.ts b/ui/gear/contacts/lib.ts similarity index 100% rename from gear/contacts/lib.ts rename to ui/gear/contacts/lib.ts diff --git a/gear/contacts/types.ts b/ui/gear/contacts/types.ts similarity index 100% rename from gear/contacts/types.ts rename to ui/gear/contacts/types.ts diff --git a/gear/deps.d.ts b/ui/gear/deps.d.ts similarity index 100% rename from gear/deps.d.ts rename to ui/gear/deps.d.ts diff --git a/gear/docket/index.ts b/ui/gear/docket/index.ts similarity index 100% rename from gear/docket/index.ts rename to ui/gear/docket/index.ts diff --git a/gear/docket/lib.ts b/ui/gear/docket/lib.ts similarity index 100% rename from gear/docket/lib.ts rename to ui/gear/docket/lib.ts diff --git a/gear/docket/types.ts b/ui/gear/docket/types.ts similarity index 100% rename from gear/docket/types.ts rename to ui/gear/docket/types.ts diff --git a/gear/groups/index.ts b/ui/gear/groups/index.ts similarity index 100% rename from gear/groups/index.ts rename to ui/gear/groups/index.ts diff --git a/gear/groups/lib.ts b/ui/gear/groups/lib.ts similarity index 100% rename from gear/groups/lib.ts rename to ui/gear/groups/lib.ts diff --git a/gear/groups/types.ts b/ui/gear/groups/types.ts similarity index 100% rename from gear/groups/types.ts rename to ui/gear/groups/types.ts diff --git a/gear/groups/update.ts b/ui/gear/groups/update.ts similarity index 100% rename from gear/groups/update.ts rename to ui/gear/groups/update.ts diff --git a/gear/groups/view.ts b/ui/gear/groups/view.ts similarity index 100% rename from gear/groups/view.ts rename to ui/gear/groups/view.ts diff --git a/gear/hark/index.ts b/ui/gear/hark/index.ts similarity index 100% rename from gear/hark/index.ts rename to ui/gear/hark/index.ts diff --git a/gear/hark/lib.ts b/ui/gear/hark/lib.ts similarity index 100% rename from gear/hark/lib.ts rename to ui/gear/hark/lib.ts diff --git a/gear/hark/types.ts b/ui/gear/hark/types.ts similarity index 100% rename from gear/hark/types.ts rename to ui/gear/hark/types.ts diff --git a/gear/hood/index.ts b/ui/gear/hood/index.ts similarity index 100% rename from gear/hood/index.ts rename to ui/gear/hood/index.ts diff --git a/gear/hood/lib.ts b/ui/gear/hood/lib.ts similarity index 100% rename from gear/hood/lib.ts rename to ui/gear/hood/lib.ts diff --git a/gear/hood/types.ts b/ui/gear/hood/types.ts similarity index 100% rename from gear/hood/types.ts rename to ui/gear/hood/types.ts diff --git a/gear/index.ts b/ui/gear/index.ts similarity index 87% rename from gear/index.ts rename to ui/gear/index.ts index d3f28beb..6111e0c8 100644 --- a/gear/index.ts +++ b/ui/gear/index.ts @@ -1,7 +1,5 @@ export * from './contacts'; export * as contacts from './contacts'; -export * from './graph'; -export * as graph from './graph'; export * from './groups'; export * as groups from './groups'; export * from './hark'; @@ -13,8 +11,8 @@ export * from './metadata'; export * as metadata from './metadata'; export * from './settings'; export * as settings from './settings'; -export * from './s3'; -export * as s3 from './s3'; +export * from './storage'; +export * as storage from './storage'; export * from './lib'; export * from './lib/BigIntOrderedMap'; export * from './lib/BigIntArrayOrderedMap'; diff --git a/gear/invite/index.ts b/ui/gear/invite/index.ts similarity index 100% rename from gear/invite/index.ts rename to ui/gear/invite/index.ts diff --git a/gear/invite/lib.ts b/ui/gear/invite/lib.ts similarity index 100% rename from gear/invite/lib.ts rename to ui/gear/invite/lib.ts diff --git a/gear/invite/types.ts b/ui/gear/invite/types.ts similarity index 100% rename from gear/invite/types.ts rename to ui/gear/invite/types.ts diff --git a/gear/metadata/index.ts b/ui/gear/metadata/index.ts similarity index 100% rename from gear/metadata/index.ts rename to ui/gear/metadata/index.ts diff --git a/gear/metadata/lib.ts b/ui/gear/metadata/lib.ts similarity index 100% rename from gear/metadata/lib.ts rename to ui/gear/metadata/lib.ts diff --git a/gear/metadata/types.ts b/ui/gear/metadata/types.ts similarity index 100% rename from gear/metadata/types.ts rename to ui/gear/metadata/types.ts diff --git a/gear/settings/index.ts b/ui/gear/settings/index.ts similarity index 100% rename from gear/settings/index.ts rename to ui/gear/settings/index.ts diff --git a/gear/settings/lib.ts b/ui/gear/settings/lib.ts similarity index 100% rename from gear/settings/lib.ts rename to ui/gear/settings/lib.ts diff --git a/gear/settings/types.ts b/ui/gear/settings/types.ts similarity index 100% rename from gear/settings/types.ts rename to ui/gear/settings/types.ts diff --git a/gear/graph/index.ts b/ui/gear/storage/index.ts similarity index 100% rename from gear/graph/index.ts rename to ui/gear/storage/index.ts diff --git a/gear/storage/lib.ts b/ui/gear/storage/lib.ts similarity index 100% rename from gear/storage/lib.ts rename to ui/gear/storage/lib.ts diff --git a/gear/storage/types.ts b/ui/gear/storage/types.ts similarity index 100% rename from gear/storage/types.ts rename to ui/gear/storage/types.ts diff --git a/ui/package-lock.json b/ui/package-lock.json index c51524a3..5fbc4d42 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -25,7 +25,6 @@ "@tlon/sigil-js": "^1.4.4", "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", - "@urbit/api": "^2.2.0", "@urbit/http-api": "^2.4.5-debug", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", @@ -2922,18 +2921,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@urbit/api": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@urbit/api/-/api-2.2.0.tgz", - "integrity": "sha512-W8kP9OT6yOK62n+4yCPO3i9QqU5xriLvZQ9WYW4SAV7ktbSrGuf2kmYbnoqfA/NybIs9Q/MbFkPewrz4XJ96Ag==", - "dependencies": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - } - }, "node_modules/@urbit/http-api": { "version": "2.4.5-debug", "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.4.5-debug.tgz", @@ -11349,18 +11336,6 @@ "eslint-visitor-keys": "^2.0.0" } }, - "@urbit/api": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@urbit/api/-/api-2.2.0.tgz", - "integrity": "sha512-W8kP9OT6yOK62n+4yCPO3i9QqU5xriLvZQ9WYW4SAV7ktbSrGuf2kmYbnoqfA/NybIs9Q/MbFkPewrz4XJ96Ag==", - "requires": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - } - }, "@urbit/http-api": { "version": "2.4.5-debug", "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.4.5-debug.tgz", diff --git a/ui/package.json b/ui/package.json index 4979156a..ed00745b 100644 --- a/ui/package.json +++ b/ui/package.json @@ -35,7 +35,6 @@ "@tlon/sigil-js": "^1.4.4", "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", - "@urbit/api": "^2.2.0", "@urbit/http-api": "^2.4.5-debug", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", diff --git a/ui/src/state/storage/index.ts b/ui/src/state/storage/index.ts index 430ee8ce..8d649d28 100644 --- a/ui/src/state/storage/index.ts +++ b/ui/src/state/storage/index.ts @@ -7,7 +7,7 @@ import { reduceStateN, BaseState, } from '../base'; -import { S3Credentials } from '@urbit/api'; +import { StorageCredentials } from '../../../'; enableMapSet(); @@ -22,7 +22,7 @@ export interface BaseStorageState { currentBucket: string; region: string; }; - credentials: S3Credentials | null; + credentials: StorageCredentials | null; }; [ref: string]: unknown; } From 2f7f3fa4d46f71f5392de3c5fbf8697c03cddec2 Mon Sep 17 00:00:00 2001 From: tomholford Date: Mon, 22 May 2023 18:45:01 -0700 Subject: [PATCH 03/14] gear: move to src/ --- ui/{ => src}/gear/contacts/index.ts | 0 ui/{ => src}/gear/contacts/lib.ts | 0 ui/{ => src}/gear/contacts/types.ts | 0 ui/{ => src}/gear/deps.d.ts | 0 ui/{ => src}/gear/docket/index.ts | 0 ui/{ => src}/gear/docket/lib.ts | 0 ui/{ => src}/gear/docket/types.ts | 0 ui/{ => src}/gear/groups/index.ts | 0 ui/{ => src}/gear/groups/lib.ts | 0 ui/{ => src}/gear/groups/types.ts | 0 ui/{ => src}/gear/groups/update.ts | 0 ui/{ => src}/gear/groups/view.ts | 0 ui/{ => src}/gear/hark/index.ts | 0 ui/{ => src}/gear/hark/lib.ts | 0 ui/{ => src}/gear/hark/types.ts | 0 ui/{ => src}/gear/hood/index.ts | 0 ui/{ => src}/gear/hood/lib.ts | 0 ui/{ => src}/gear/hood/types.ts | 0 ui/{ => src}/gear/index.ts | 3 --- ui/{ => src}/gear/invite/index.ts | 0 ui/{ => src}/gear/invite/lib.ts | 0 ui/{ => src}/gear/invite/types.ts | 0 ui/{ => src}/gear/metadata/index.ts | 0 ui/{ => src}/gear/metadata/lib.ts | 0 ui/{ => src}/gear/metadata/types.ts | 0 ui/{ => src}/gear/settings/index.ts | 0 ui/{ => src}/gear/settings/lib.ts | 0 ui/{ => src}/gear/settings/types.ts | 0 ui/{ => src}/gear/storage/index.ts | 0 ui/{ => src}/gear/storage/lib.ts | 2 +- ui/{ => src}/gear/storage/types.ts | 0 ui/src/state/storage/index.ts | 2 +- 32 files changed, 2 insertions(+), 5 deletions(-) rename ui/{ => src}/gear/contacts/index.ts (100%) rename ui/{ => src}/gear/contacts/lib.ts (100%) rename ui/{ => src}/gear/contacts/types.ts (100%) rename ui/{ => src}/gear/deps.d.ts (100%) rename ui/{ => src}/gear/docket/index.ts (100%) rename ui/{ => src}/gear/docket/lib.ts (100%) rename ui/{ => src}/gear/docket/types.ts (100%) rename ui/{ => src}/gear/groups/index.ts (100%) rename ui/{ => src}/gear/groups/lib.ts (100%) rename ui/{ => src}/gear/groups/types.ts (100%) rename ui/{ => src}/gear/groups/update.ts (100%) rename ui/{ => src}/gear/groups/view.ts (100%) rename ui/{ => src}/gear/hark/index.ts (100%) rename ui/{ => src}/gear/hark/lib.ts (100%) rename ui/{ => src}/gear/hark/types.ts (100%) rename ui/{ => src}/gear/hood/index.ts (100%) rename ui/{ => src}/gear/hood/lib.ts (100%) rename ui/{ => src}/gear/hood/types.ts (100%) rename ui/{ => src}/gear/index.ts (87%) rename ui/{ => src}/gear/invite/index.ts (100%) rename ui/{ => src}/gear/invite/lib.ts (100%) rename ui/{ => src}/gear/invite/types.ts (100%) rename ui/{ => src}/gear/metadata/index.ts (100%) rename ui/{ => src}/gear/metadata/lib.ts (100%) rename ui/{ => src}/gear/metadata/types.ts (100%) rename ui/{ => src}/gear/settings/index.ts (100%) rename ui/{ => src}/gear/settings/lib.ts (100%) rename ui/{ => src}/gear/settings/types.ts (100%) rename ui/{ => src}/gear/storage/index.ts (100%) rename ui/{ => src}/gear/storage/lib.ts (96%) rename ui/{ => src}/gear/storage/types.ts (100%) diff --git a/ui/gear/contacts/index.ts b/ui/src/gear/contacts/index.ts similarity index 100% rename from ui/gear/contacts/index.ts rename to ui/src/gear/contacts/index.ts diff --git a/ui/gear/contacts/lib.ts b/ui/src/gear/contacts/lib.ts similarity index 100% rename from ui/gear/contacts/lib.ts rename to ui/src/gear/contacts/lib.ts diff --git a/ui/gear/contacts/types.ts b/ui/src/gear/contacts/types.ts similarity index 100% rename from ui/gear/contacts/types.ts rename to ui/src/gear/contacts/types.ts diff --git a/ui/gear/deps.d.ts b/ui/src/gear/deps.d.ts similarity index 100% rename from ui/gear/deps.d.ts rename to ui/src/gear/deps.d.ts diff --git a/ui/gear/docket/index.ts b/ui/src/gear/docket/index.ts similarity index 100% rename from ui/gear/docket/index.ts rename to ui/src/gear/docket/index.ts diff --git a/ui/gear/docket/lib.ts b/ui/src/gear/docket/lib.ts similarity index 100% rename from ui/gear/docket/lib.ts rename to ui/src/gear/docket/lib.ts diff --git a/ui/gear/docket/types.ts b/ui/src/gear/docket/types.ts similarity index 100% rename from ui/gear/docket/types.ts rename to ui/src/gear/docket/types.ts diff --git a/ui/gear/groups/index.ts b/ui/src/gear/groups/index.ts similarity index 100% rename from ui/gear/groups/index.ts rename to ui/src/gear/groups/index.ts diff --git a/ui/gear/groups/lib.ts b/ui/src/gear/groups/lib.ts similarity index 100% rename from ui/gear/groups/lib.ts rename to ui/src/gear/groups/lib.ts diff --git a/ui/gear/groups/types.ts b/ui/src/gear/groups/types.ts similarity index 100% rename from ui/gear/groups/types.ts rename to ui/src/gear/groups/types.ts diff --git a/ui/gear/groups/update.ts b/ui/src/gear/groups/update.ts similarity index 100% rename from ui/gear/groups/update.ts rename to ui/src/gear/groups/update.ts diff --git a/ui/gear/groups/view.ts b/ui/src/gear/groups/view.ts similarity index 100% rename from ui/gear/groups/view.ts rename to ui/src/gear/groups/view.ts diff --git a/ui/gear/hark/index.ts b/ui/src/gear/hark/index.ts similarity index 100% rename from ui/gear/hark/index.ts rename to ui/src/gear/hark/index.ts diff --git a/ui/gear/hark/lib.ts b/ui/src/gear/hark/lib.ts similarity index 100% rename from ui/gear/hark/lib.ts rename to ui/src/gear/hark/lib.ts diff --git a/ui/gear/hark/types.ts b/ui/src/gear/hark/types.ts similarity index 100% rename from ui/gear/hark/types.ts rename to ui/src/gear/hark/types.ts diff --git a/ui/gear/hood/index.ts b/ui/src/gear/hood/index.ts similarity index 100% rename from ui/gear/hood/index.ts rename to ui/src/gear/hood/index.ts diff --git a/ui/gear/hood/lib.ts b/ui/src/gear/hood/lib.ts similarity index 100% rename from ui/gear/hood/lib.ts rename to ui/src/gear/hood/lib.ts diff --git a/ui/gear/hood/types.ts b/ui/src/gear/hood/types.ts similarity index 100% rename from ui/gear/hood/types.ts rename to ui/src/gear/hood/types.ts diff --git a/ui/gear/index.ts b/ui/src/gear/index.ts similarity index 87% rename from ui/gear/index.ts rename to ui/src/gear/index.ts index 6111e0c8..9ea47738 100644 --- a/ui/gear/index.ts +++ b/ui/src/gear/index.ts @@ -13,9 +13,6 @@ export * from './settings'; export * as settings from './settings'; export * from './storage'; export * as storage from './storage'; -export * from './lib'; -export * from './lib/BigIntOrderedMap'; -export * from './lib/BigIntArrayOrderedMap'; export * as hood from './hood'; export * from './hood'; export * as docket from './docket'; diff --git a/ui/gear/invite/index.ts b/ui/src/gear/invite/index.ts similarity index 100% rename from ui/gear/invite/index.ts rename to ui/src/gear/invite/index.ts diff --git a/ui/gear/invite/lib.ts b/ui/src/gear/invite/lib.ts similarity index 100% rename from ui/gear/invite/lib.ts rename to ui/src/gear/invite/lib.ts diff --git a/ui/gear/invite/types.ts b/ui/src/gear/invite/types.ts similarity index 100% rename from ui/gear/invite/types.ts rename to ui/src/gear/invite/types.ts diff --git a/ui/gear/metadata/index.ts b/ui/src/gear/metadata/index.ts similarity index 100% rename from ui/gear/metadata/index.ts rename to ui/src/gear/metadata/index.ts diff --git a/ui/gear/metadata/lib.ts b/ui/src/gear/metadata/lib.ts similarity index 100% rename from ui/gear/metadata/lib.ts rename to ui/src/gear/metadata/lib.ts diff --git a/ui/gear/metadata/types.ts b/ui/src/gear/metadata/types.ts similarity index 100% rename from ui/gear/metadata/types.ts rename to ui/src/gear/metadata/types.ts diff --git a/ui/gear/settings/index.ts b/ui/src/gear/settings/index.ts similarity index 100% rename from ui/gear/settings/index.ts rename to ui/src/gear/settings/index.ts diff --git a/ui/gear/settings/lib.ts b/ui/src/gear/settings/lib.ts similarity index 100% rename from ui/gear/settings/lib.ts rename to ui/src/gear/settings/lib.ts diff --git a/ui/gear/settings/types.ts b/ui/src/gear/settings/types.ts similarity index 100% rename from ui/gear/settings/types.ts rename to ui/src/gear/settings/types.ts diff --git a/ui/gear/storage/index.ts b/ui/src/gear/storage/index.ts similarity index 100% rename from ui/gear/storage/index.ts rename to ui/src/gear/storage/index.ts diff --git a/ui/gear/storage/lib.ts b/ui/src/gear/storage/lib.ts similarity index 96% rename from ui/gear/storage/lib.ts rename to ui/src/gear/storage/lib.ts index 165789ea..0a11d8db 100644 --- a/ui/gear/storage/lib.ts +++ b/ui/src/gear/storage/lib.ts @@ -1,4 +1,4 @@ -import { Poke } from '../lib/types'; +import { Poke } from '@urbit/http-api'; import { StorageUpdate, StorageUpdateCurrentBucket, StorageUpdateAddBucket, StorageUpdateRemoveBucket, StorageUpdateEndpoint, StorageUpdateAccessKeyId, StorageUpdateSecretAccessKey } from './types'; const s3Action = ( diff --git a/ui/gear/storage/types.ts b/ui/src/gear/storage/types.ts similarity index 100% rename from ui/gear/storage/types.ts rename to ui/src/gear/storage/types.ts diff --git a/ui/src/state/storage/index.ts b/ui/src/state/storage/index.ts index 8d649d28..6f714fc6 100644 --- a/ui/src/state/storage/index.ts +++ b/ui/src/state/storage/index.ts @@ -7,7 +7,7 @@ import { reduceStateN, BaseState, } from '../base'; -import { StorageCredentials } from '../../../'; +import { StorageCredentials } from '@/gear'; enableMapSet(); From 935ac654e1d18e388b6eee156b9c50f25ab3d3d0 Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 24 May 2023 20:57:43 -0700 Subject: [PATCH 04/14] meta: deprecated old pkgs; add new - remove @urbit/api - remove @urbit/http-api - remove urbit-ob - add @urbit/aura - add urbit/js-http-api (via github repo) - remove all references to @urbit/api - replace with references to @/gear for most types, @urbit/aura for helpers, and js-http-api for network types (via the github repo; replace with npm package when published) --- ui/package-lock.json | 85 ++++------ ui/package.json | 4 +- ui/src/api.ts | 2 +- ui/src/components/AppInfo.tsx | 2 +- ui/src/components/Avatar.tsx | 2 +- ui/src/components/DocketImage.tsx | 2 +- ui/src/components/PikeMeta.tsx | 2 +- ui/src/components/ProviderLink.tsx | 2 +- ui/src/components/ProviderList.tsx | 2 +- ui/src/components/ShipName.tsx | 2 +- ui/src/components/TreatyMeta.tsx | 5 +- ui/src/gear/contacts/lib.ts | 2 +- ui/src/gear/contacts/types.ts | 2 +- ui/src/gear/deps.d.ts | 8 - ui/src/gear/docket/lib.ts | 2 +- ui/src/gear/groups/lib.ts | 5 +- ui/src/gear/groups/update.ts | 3 +- ui/src/gear/groups/view.ts | 2 +- ui/src/gear/hark/lib.ts | 6 +- ui/src/gear/hood/lib.ts | 2 +- ui/src/gear/index.ts | 2 + ui/src/gear/invite/lib.ts | 3 +- ui/src/gear/invite/types.ts | 3 +- ui/src/gear/metadata/lib.ts | 5 +- ui/src/gear/metadata/types.ts | 2 +- ui/src/gear/settings/lib.ts | 2 +- ui/src/gear/storage/lib.ts | 2 +- ui/src/gear/utils/BigIntArrayOrderedMap.ts | 151 ++++++++++++++++++ ui/src/gear/utils/BigIntOrderedMap.ts | 116 ++++++++++++++ ui/src/gear/utils/index.ts | 2 + ui/src/gear/utils/lib.ts | 1 + ui/src/gear/utils/types.ts | 25 +++ ui/src/global.d.ts | 4 - ui/src/logic/useSystemUpdate.tsx | 2 +- ui/src/logic/utils.ts | 9 +- ui/src/main.tsx | 2 +- ui/src/mocks/mockContacts.ts | 2 +- ui/src/nav/SystemMenu.tsx | 2 +- ui/src/nav/notifications/Notification.tsx | 2 +- ui/src/nav/search/Apps.tsx | 2 +- ui/src/nav/search/Providers.tsx | 12 +- ui/src/pages/PermalinkRoutes.tsx | 2 +- ui/src/preferences/StoragePrefs.tsx | 2 +- .../preferences/about-system/AboutSystem.tsx | 2 +- .../about-system/UpdatePreferences.tsx | 1 - ui/src/state/base.ts | 3 +- ui/src/state/contact.ts | 3 +- ui/src/state/docket.ts | 2 +- ui/src/state/kiln.ts | 2 +- ui/src/state/mock-data.ts | 4 +- ui/src/state/settings.ts | 4 +- ui/src/state/storage/reducer.ts | 20 +-- ui/src/tiles/Tile.tsx | 2 +- ui/src/tiles/TileMenu.tsx | 2 +- 54 files changed, 404 insertions(+), 138 deletions(-) create mode 100644 ui/src/gear/utils/BigIntArrayOrderedMap.ts create mode 100644 ui/src/gear/utils/BigIntOrderedMap.ts create mode 100644 ui/src/gear/utils/index.ts create mode 100644 ui/src/gear/utils/lib.ts create mode 100644 ui/src/gear/utils/types.ts diff --git a/ui/package-lock.json b/ui/package-lock.json index 5fbc4d42..46a4796a 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -25,7 +25,8 @@ "@tlon/sigil-js": "^1.4.4", "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", - "@urbit/http-api": "^2.4.5-debug", + "@urbit/aura": "^1.0.0", + "@urbit/js-http-api": "git+https://github.com/urbit/js-http-api", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", "classnames": "^2.3.1", @@ -50,7 +51,6 @@ "react-hook-form": "^7.38.0", "react-router-dom": "^5.2.0", "slugify": "^1.6.0", - "urbit-ob": "^5.0.1", "zustand": "^3.7.2" }, "devDependencies": { @@ -2921,10 +2921,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@urbit/http-api": { - "version": "2.4.5-debug", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.4.5-debug.tgz", - "integrity": "sha512-kMzQwNlrObEz4tEg90nlPRW69Tf+9rD3iIK/JgvsG3423x9oa4rFXobnFKBphXR/5bqd5vR41RoMFN7mqEfDgQ==", + "node_modules/@urbit/aura": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@urbit/aura/-/aura-1.0.0.tgz", + "integrity": "sha512-IeP3uoDzZ0Rpn345auXK0y/BCcXTmpgAlOPbgf7n4eD35h56OnSoit1kuXKA21sWE19gFjK/wqZcz5ULjz2ADg==", + "engines": { + "node": ">=16", + "npm": ">=8" + }, + "peerDependencies": { + "big-integer": "^1.6.51" + } + }, + "node_modules/@urbit/js-http-api": { + "name": "@urbit/http-api", + "version": "3.0.0", + "resolved": "git+ssh://git@github.com/urbit/js-http-api.git#25c3f8f73bd8d6edfd4d5b9feffcfe27585e1ddf", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "browser-or-node": "^1.3.0", @@ -3402,8 +3415,9 @@ "license": "MIT" }, "node_modules/big-integer": { - "version": "1.6.49", - "license": "Unlicense", + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "engines": { "node": ">=0.6" } @@ -3416,10 +3430,6 @@ "node": ">=8" } }, - "node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -6639,19 +6649,11 @@ "version": "4.17.21", "license": "MIT" }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "license": "MIT" - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "dev": true, "license": "MIT" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "dev": true, @@ -8998,15 +9000,6 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "node_modules/urbit-ob": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "dev": true, @@ -11336,10 +11329,15 @@ "eslint-visitor-keys": "^2.0.0" } }, - "@urbit/http-api": { - "version": "2.4.5-debug", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.4.5-debug.tgz", - "integrity": "sha512-kMzQwNlrObEz4tEg90nlPRW69Tf+9rD3iIK/JgvsG3423x9oa4rFXobnFKBphXR/5bqd5vR41RoMFN7mqEfDgQ==", + "@urbit/aura": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@urbit/aura/-/aura-1.0.0.tgz", + "integrity": "sha512-IeP3uoDzZ0Rpn345auXK0y/BCcXTmpgAlOPbgf7n4eD35h56OnSoit1kuXKA21sWE19gFjK/wqZcz5ULjz2ADg==", + "requires": {} + }, + "@urbit/js-http-api": { + "version": "git+ssh://git@github.com/urbit/js-http-api.git#25c3f8f73bd8d6edfd4d5b9feffcfe27585e1ddf", + "from": "@urbit/js-http-api@git+https://github.com/urbit/js-http-api", "requires": { "@babel/runtime": "^7.12.5", "browser-or-node": "^1.3.0", @@ -11639,15 +11637,14 @@ "dev": true }, "big-integer": { - "version": "1.6.49" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "binary-extensions": { "version": "2.2.0", "dev": true }, - "bn.js": { - "version": "4.12.0" - }, "brace-expansion": { "version": "1.1.11", "dev": true, @@ -13727,16 +13724,10 @@ "lodash": { "version": "4.17.21" }, - "lodash.chunk": { - "version": "4.2.0" - }, "lodash.clonedeep": { "version": "4.5.0", "dev": true }, - "lodash.isequal": { - "version": "4.5.0" - }, "lodash.merge": { "version": "4.6.2", "dev": true @@ -15180,14 +15171,6 @@ } } }, - "urbit-ob": { - "version": "5.0.1", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, "uri-js": { "version": "4.4.1", "dev": true, diff --git a/ui/package.json b/ui/package.json index ed00745b..f7a6f958 100644 --- a/ui/package.json +++ b/ui/package.json @@ -35,7 +35,8 @@ "@tlon/sigil-js": "^1.4.4", "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", - "@urbit/http-api": "^2.4.5-debug", + "@urbit/aura": "^1.0.0", + "@urbit/js-http-api": "git+https://github.com/urbit/js-http-api", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", "classnames": "^2.3.1", @@ -60,7 +61,6 @@ "react-hook-form": "^7.38.0", "react-router-dom": "^5.2.0", "slugify": "^1.6.0", - "urbit-ob": "^5.0.1", "zustand": "^3.7.2" }, "devDependencies": { diff --git a/ui/src/api.ts b/ui/src/api.ts index bc7815f4..381d819d 100644 --- a/ui/src/api.ts +++ b/ui/src/api.ts @@ -6,7 +6,7 @@ import Urbit, { Thread, UrbitHttpApiEvent, UrbitHttpApiEventType, -} from '@urbit/http-api'; +} from '@urbit/js-http-api'; import _ from 'lodash'; import { useLocalState } from '@/state/local'; import useSchedulerStore from './state/scheduler'; diff --git a/ui/src/components/AppInfo.tsx b/ui/src/components/AppInfo.tsx index b0003299..ad3a9c84 100644 --- a/ui/src/components/AppInfo.tsx +++ b/ui/src/components/AppInfo.tsx @@ -1,4 +1,4 @@ -import { chadIsRunning, Pike, Treaty } from '@urbit/api'; +import { chadIsRunning, Pike, Treaty } from '@/gear'; import clipboardCopy from 'clipboard-copy'; import React, { FC, useCallback, useState } from 'react'; import cn from 'classnames'; diff --git a/ui/src/components/Avatar.tsx b/ui/src/components/Avatar.tsx index 35e7174e..dbea5e1b 100644 --- a/ui/src/components/Avatar.tsx +++ b/ui/src/components/Avatar.tsx @@ -1,7 +1,7 @@ import classNames from 'classnames'; import React, { useMemo } from 'react'; import { sigil, reactRenderer } from '@tlon/sigil-js'; -import { deSig } from '@urbit/api'; +import { deSig } from '@urbit/aura'; import { darken, lighten, parseToHsla } from 'color2k'; import { useCurrentTheme } from '../state/local'; import { normalizeUrbitColor } from '@/logic/utils'; diff --git a/ui/src/components/DocketImage.tsx b/ui/src/components/DocketImage.tsx index 68212342..8ee86237 100644 --- a/ui/src/components/DocketImage.tsx +++ b/ui/src/components/DocketImage.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { Docket } from '@urbit/api'; +import { Docket } from '@/gear'; import cn from 'classnames'; import { useTileColor } from '../tiles/useTileColor'; diff --git a/ui/src/components/PikeMeta.tsx b/ui/src/components/PikeMeta.tsx index 5877fbfa..4e3d9a54 100644 --- a/ui/src/components/PikeMeta.tsx +++ b/ui/src/components/PikeMeta.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Pike } from '@urbit/api'; +import { Pike } from '@/gear'; import { Attribute } from './Attribute'; diff --git a/ui/src/components/ProviderLink.tsx b/ui/src/components/ProviderLink.tsx index 702ff7a4..2e2a179f 100644 --- a/ui/src/components/ProviderLink.tsx +++ b/ui/src/components/ProviderLink.tsx @@ -1,7 +1,7 @@ import classNames from 'classnames'; import React from 'react'; import { Link, LinkProps } from 'react-router-dom'; -import { Provider } from '@urbit/api'; +import { Provider } from '@/gear'; import { ShipName } from './ShipName'; import { Avatar, AvatarSizes } from './Avatar'; import { Contact } from '@/types/contact'; diff --git a/ui/src/components/ProviderList.tsx b/ui/src/components/ProviderList.tsx index 61674b13..abd5e29b 100644 --- a/ui/src/components/ProviderList.tsx +++ b/ui/src/components/ProviderList.tsx @@ -1,5 +1,5 @@ import React, { MouseEvent, useCallback } from 'react'; -import { Provider } from '@urbit/api'; +import { Provider } from '@/gear'; import classNames from 'classnames'; import { MatchItem } from '../nav/Nav'; import { useRecentsStore } from '../nav/search/Home'; diff --git a/ui/src/components/ShipName.tsx b/ui/src/components/ShipName.tsx index 0342508a..b767c69a 100644 --- a/ui/src/components/ShipName.tsx +++ b/ui/src/components/ShipName.tsx @@ -1,4 +1,4 @@ -import { cite } from '@urbit/api'; +import { cite } from '@urbit/aura'; import React, { HTMLAttributes } from 'react'; import { useCalm } from '../state/settings'; import { useContact } from '../state/contact'; diff --git a/ui/src/components/TreatyMeta.tsx b/ui/src/components/TreatyMeta.tsx index 00974bb7..36185d3a 100644 --- a/ui/src/components/TreatyMeta.tsx +++ b/ui/src/components/TreatyMeta.tsx @@ -1,5 +1,6 @@ import React from 'react'; -import { daToDate, Treaty } from '@urbit/api'; +import { daToUnix, parseDa } from '@urbit/aura' +import { Treaty } from '@/gear'; import moment from 'moment'; import { Attribute } from './Attribute'; @@ -15,7 +16,7 @@ export function TreatyMeta(props: { treaty: Treaty }) { {ship}/{desk} - {moment(daToDate(cass.da)).format('YYYY.MM.DD')} + {moment(daToUnix(parseDa(cass.da))).format('YYYY.MM.DD')} {meta.map((d) => ( diff --git a/ui/src/gear/contacts/lib.ts b/ui/src/gear/contacts/lib.ts index 26b08c6b..7c024a2c 100644 --- a/ui/src/gear/contacts/lib.ts +++ b/ui/src/gear/contacts/lib.ts @@ -1,5 +1,5 @@ -import { Patp, Poke, Scry } from '../lib'; +import { Patp, Poke, Scry } from '@urbit/js-http-api'; import { Contact, ContactUpdateAdd, diff --git a/ui/src/gear/contacts/types.ts b/ui/src/gear/contacts/types.ts index 201aa243..75aa943c 100644 --- a/ui/src/gear/contacts/types.ts +++ b/ui/src/gear/contacts/types.ts @@ -1,4 +1,4 @@ -import { Path, Patp } from '../lib'; +import { Path, Patp } from '@urbit/js-http-api'; import { Resource } from '../groups'; export type ContactUpdate = diff --git a/ui/src/gear/deps.d.ts b/ui/src/gear/deps.d.ts index 0099f33f..e69de29b 100644 --- a/ui/src/gear/deps.d.ts +++ b/ui/src/gear/deps.d.ts @@ -1,8 +0,0 @@ - -declare module 'urbit-ob' { - - /** - * Convert a @p-encoded string to a decimal-encoded string. - */ - function patp2dec(name: string): string -} diff --git a/ui/src/gear/docket/lib.ts b/ui/src/gear/docket/lib.ts index f5c3e255..ebdce211 100644 --- a/ui/src/gear/docket/lib.ts +++ b/ui/src/gear/docket/lib.ts @@ -1,4 +1,4 @@ -import { Poke, Scry } from '../lib'; +import { Poke, Scry } from '@urbit/js-http-api'; import { Chad } from './types'; export function chadIsRunning(chad: Chad) { diff --git a/ui/src/gear/groups/lib.ts b/ui/src/gear/groups/lib.ts index 7e93ad3a..2d5d2d50 100644 --- a/ui/src/gear/groups/lib.ts +++ b/ui/src/gear/groups/lib.ts @@ -1,5 +1,6 @@ -import { deSig } from '../index'; -import { Enc, Path, Patp, PatpNoSig, Poke, Thread } from '../lib/types'; +import { deSig } from '@urbit/aura'; +import { Path, Patp, PatpNoSig, Poke, Thread } from '@urbit/js-http-api'; +import { Enc } from '@/gear'; import { Group, GroupPolicy, GroupPolicyDiff, GroupUpdateAddMembers, GroupUpdateAddTag, GroupUpdateChangePolicy, GroupUpdateRemoveGroup, GroupUpdateRemoveMembers, GroupUpdateRemoveTag, Resource, RoleTags, Tag } from './types'; import { GroupUpdate } from './update'; diff --git a/ui/src/gear/groups/update.ts b/ui/src/gear/groups/update.ts index a25c9a63..a5f025a1 100644 --- a/ui/src/gear/groups/update.ts +++ b/ui/src/gear/groups/update.ts @@ -1,4 +1,5 @@ -import { PatpNoSig, Path, ShipRank, Enc } from '../lib'; +import { PatpNoSig, Path } from '@urbit/js-http-api'; +import { ShipRank, Enc } from '@/gear'; import { roleTags } from './index'; export type RoleTags = typeof roleTags[number]; diff --git a/ui/src/gear/groups/view.ts b/ui/src/gear/groups/view.ts index c6e432b2..dced81d1 100644 --- a/ui/src/gear/groups/view.ts +++ b/ui/src/gear/groups/view.ts @@ -1,5 +1,5 @@ import { joinError, joinProgress, joinResult } from "."; -import {Patp} from "../lib"; +import { Patp } from '@urbit/js-http-api'; export type JoinError = typeof joinError[number]; diff --git a/ui/src/gear/hark/lib.ts b/ui/src/gear/hark/lib.ts index a470c671..e7f081db 100644 --- a/ui/src/gear/hark/lib.ts +++ b/ui/src/gear/hark/lib.ts @@ -1,6 +1,6 @@ import { BigInteger } from 'big-integer'; -import { Poke } from '../lib/types'; +import { Poke } from '@urbit/js-http-api'; import { HarkBin, HarkBinId, @@ -8,7 +8,7 @@ import { HarkLid, HarkPlace } from './types'; -import { decToUd } from '../lib'; +import { parseUd } from '@urbit/aura'; export const harkAction = (data: T): Poke => ({ app: 'hark-store', @@ -39,7 +39,7 @@ export const actOnNotification = ( ): Poke => harkAction({ [frond]: { - time: decToUd(intTime.toString()), + time: parseUd(intTime.toString()), bin } }); diff --git a/ui/src/gear/hood/lib.ts b/ui/src/gear/hood/lib.ts index 02d86868..346980a6 100644 --- a/ui/src/gear/hood/lib.ts +++ b/ui/src/gear/hood/lib.ts @@ -1,4 +1,4 @@ -import { Poke, Scry } from '../lib'; +import { Poke, Scry } from '@urbit/js-http-api'; import { Pike } from './types'; export const getPikes: Scry = { diff --git a/ui/src/gear/index.ts b/ui/src/gear/index.ts index 9ea47738..50825f78 100644 --- a/ui/src/gear/index.ts +++ b/ui/src/gear/index.ts @@ -17,6 +17,8 @@ export * as hood from './hood'; export * from './hood'; export * as docket from './docket'; export * from './docket'; +export * as utils from './utils'; +export * from './utils'; // TODO: Userspace Permissions // export * from './permissions'; diff --git a/ui/src/gear/invite/lib.ts b/ui/src/gear/invite/lib.ts index a5a5ca94..885ef787 100644 --- a/ui/src/gear/invite/lib.ts +++ b/ui/src/gear/invite/lib.ts @@ -1,4 +1,5 @@ -import { Poke, Serial } from "../lib"; +import { Poke } from '@urbit/js-http-api'; +import { Serial } from '@/gear'; import { InviteUpdate, InviteUpdateAccept, InviteUpdateDecline } from "./types"; export const inviteAction = (data: T): Poke => ({ diff --git a/ui/src/gear/invite/types.ts b/ui/src/gear/invite/types.ts index b3515bb4..e0e95745 100644 --- a/ui/src/gear/invite/types.ts +++ b/ui/src/gear/invite/types.ts @@ -1,4 +1,5 @@ -import { Serial, PatpNoSig, Path } from '../lib'; +import { PatpNoSig, Path } from '@urbit/js-http-api'; +import { Serial } from '@/gear'; import { Resource } from "../groups"; export type InviteUpdate = diff --git a/ui/src/gear/metadata/lib.ts b/ui/src/gear/metadata/lib.ts index ace81e8a..64b91fc7 100644 --- a/ui/src/gear/metadata/lib.ts +++ b/ui/src/gear/metadata/lib.ts @@ -1,4 +1,5 @@ -import { Path, Poke, uxToHex, PatpNoSig } from '../lib'; +import { parseUx } from '@urbit/aura'; +import { Path, Poke, PatpNoSig } from '@urbit/js-http-api'; import { MdAppName, Association, Metadata, MetadataUpdate, MetadataUpdateAdd, MetadataUpdateRemove, MetadataEditField, MetadataUpdateEdit } from './types'; export const METADATA_UPDATE_VERSION = 2; @@ -83,7 +84,7 @@ export const update = ( newMetadata: Partial ): Poke => { const metadata = { ...association.metadata, ...newMetadata }; - metadata.color = uxToHex(metadata.color); + metadata.color = parseUx(metadata.color); return metadataAction({ add: { group: association.group, diff --git a/ui/src/gear/metadata/types.ts b/ui/src/gear/metadata/types.ts index 828c83b1..0d83135c 100644 --- a/ui/src/gear/metadata/types.ts +++ b/ui/src/gear/metadata/types.ts @@ -1,4 +1,4 @@ -import { Path, Patp } from '../lib'; +import { Path, Patp } from '@urbit/js-http-api'; export type MdAppName = 'groups' | 'graph'; diff --git a/ui/src/gear/settings/lib.ts b/ui/src/gear/settings/lib.ts index 94fca9d5..7a868ec2 100644 --- a/ui/src/gear/settings/lib.ts +++ b/ui/src/gear/settings/lib.ts @@ -1,4 +1,4 @@ -import { Poke, Scry } from '../lib'; +import { Poke, Scry } from '@urbit/js-http-api'; import { PutBucket, Key, Bucket, DelBucket, Value, PutEntry, DelEntry, SettingsUpdate } from './types'; export const action = (data: T): Poke => ({ diff --git a/ui/src/gear/storage/lib.ts b/ui/src/gear/storage/lib.ts index 0a11d8db..dd8106b9 100644 --- a/ui/src/gear/storage/lib.ts +++ b/ui/src/gear/storage/lib.ts @@ -1,4 +1,4 @@ -import { Poke } from '@urbit/http-api'; +import { Poke } from '@urbit/js-http-api'; import { StorageUpdate, StorageUpdateCurrentBucket, StorageUpdateAddBucket, StorageUpdateRemoveBucket, StorageUpdateEndpoint, StorageUpdateAccessKeyId, StorageUpdateSecretAccessKey } from './types'; const s3Action = ( diff --git a/ui/src/gear/utils/BigIntArrayOrderedMap.ts b/ui/src/gear/utils/BigIntArrayOrderedMap.ts new file mode 100644 index 00000000..dcd1ec37 --- /dev/null +++ b/ui/src/gear/utils/BigIntArrayOrderedMap.ts @@ -0,0 +1,151 @@ +import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; +import bigInt, { BigInteger } from 'big-integer'; + +setAutoFreeze(false); + +enablePatches(); + +export function stringToArr(str: string) { + return str.split('/').slice(1).map((ind) => { + return bigInt(ind); + }); +} + +export function arrToString(arr: BigInteger[]) { + let string = ''; + arr.forEach((key) => { + string = string + `/${key.toString()}`; + }); + return string; +} + +function sorted(a: BigInteger[], b: BigInteger[], reversed = false) { + const getSort = sortBigIntArr(a, b); + if (reversed) { + return getSort * -1; + } else { + return getSort; + } +} + +export function sortBigIntArr(a: BigInteger[], b: BigInteger[]) { + const aLen = a.length; + const bLen = b.length; + + const aCop = a.slice(0); + const bCop = b.slice(0); + aCop.reverse(); + bCop.reverse(); + + let i = 0; + while (i < aLen && i < bLen) { + if (aCop[i].lt(bCop[i])) { + return 1; + } else if (aCop[i].gt(bCop[i])) { + return -1; + } else { + i++; + } + } + + return bLen - aLen; +} + +export class BigIntArrayOrderedMap implements Iterable<[BigInteger[], V]> { + root: Record = {} + cachedIter: [BigInteger[], V][] | null = null; + [immerable] = true; + reversed = false; + + constructor(items: [BigInteger[], V][] = [], reversed = false) { + items.forEach(([key, val]) => { + this.set(key, val); + }); + this.reversed = reversed; + } + + get size() { + return Object.keys(this.root).length; + } + + get(key: BigInteger[]) { + return this.root[arrToString(key)] ?? null; + } + + gas(items: [BigInteger[], V][]) { + return produce(this, (draft) => { + items.forEach(([key, value]) => { + draft.root[arrToString(key)] = castDraft(value); + }); + draft.generateCachedIter(); + }, + (patches) => { + // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); + }); + } + + set(key: BigInteger[], value: V) { + return produce(this, (draft) => { + draft.root[arrToString(key)] = castDraft(value); + draft.cachedIter = null; + }); + } + + clear() { + return produce(this, (draft) => { + draft.cachedIter = []; + draft.root = {}; + }); + } + + has(key: BigInteger[]) { + return arrToString(key) in this.root; + } + + delete(key: BigInteger[]) { + const result = produce(this, (draft) => { + delete draft.root[arrToString(key)]; + draft.cachedIter = null; + }); + return result; + } + + [Symbol.iterator](): IterableIterator<[BigInteger[], V]> { + let idx = 0; + const result = this.generateCachedIter(); + return { + [Symbol.iterator]: this[Symbol.iterator], + next: (): IteratorResult<[BigInteger[], V]> => { + if (idx < result.length) { + return { value: result[idx++], done: false }; + } + return { done: true, value: null }; + } + }; + } + + peekLargest() { + const sorted = Array.from(this); + return sorted[0] as [BigInteger[], V] | null; + } + + peekSmallest() { + const sorted = Array.from(this); + return sorted[sorted.length - 1] as [BigInteger[], V] | null; + } + + keys() { + return Array.from(this).map(([k,v]) => k); + } + + generateCachedIter() { + if(this.cachedIter) { + return [...this.cachedIter]; + } + const result = Object.keys(this.root).map((key) => { + return [stringToArr(key), this.root[key]] as [BigInteger[], V]; + }).sort(([a], [b]) => sorted(a, b, this.reversed)); + this.cachedIter = result; + return [...result]; + } +} diff --git a/ui/src/gear/utils/BigIntOrderedMap.ts b/ui/src/gear/utils/BigIntOrderedMap.ts new file mode 100644 index 00000000..621c2e11 --- /dev/null +++ b/ui/src/gear/utils/BigIntOrderedMap.ts @@ -0,0 +1,116 @@ +import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; +import bigInt, { BigInteger } from 'big-integer'; + +setAutoFreeze(false); + +enablePatches(); + +function sortBigInt(a: BigInteger, b: BigInteger) { + if (a.lt(b)) { + return 1; + } else if (a.eq(b)) { + return 0; + } else { + return -1; + } +} +export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { + root: Record = {} + cachedIter: [BigInteger, V][] | null = null; + [immerable] = true; + + constructor(items: [BigInteger, V][] = []) { + items.forEach(([key, val]) => { + this.set(key, val); + }); + } + + get size() { + if(this.cachedIter) { + return this.cachedIter.length; + } + return this.generateCachedIter().length; + } + + get(key: BigInteger) { + return this.root[key.toString()] ?? null; + } + + gas(items: [BigInteger, V][]) { + return produce(this, (draft) => { + items.forEach(([key, value]) => { + draft.root[key.toString()] = castDraft(value); + }); + draft.cachedIter = null; + }, + (patches) => { + // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); + }); + } + + set(key: BigInteger, value: V) { + return produce(this, (draft) => { + draft.root[key.toString()] = castDraft(value); + draft.cachedIter = null; + }); + } + + clear() { + return produce(this, (draft) => { + draft.cachedIter = []; + draft.root = {}; + }); + } + + has(key: BigInteger) { + return key.toString() in this.root; + } + + delete(key: BigInteger) { + const result = produce(this, (draft) => { + delete draft.root[key.toString()]; + draft.cachedIter = null; + }); + return result; + } + + [Symbol.iterator](): IterableIterator<[BigInteger, V]> { + let idx = 0; + const result = this.generateCachedIter(); + return { + [Symbol.iterator]: this[Symbol.iterator], + next: (): IteratorResult<[BigInteger, V]> => { + if (idx < result.length) { + return { value: result[idx++], done: false }; + } + return { done: true, value: null }; + } + }; + } + + peekLargest() { + const sorted = Array.from(this); + return sorted[0] as [BigInteger, V] | null; + } + + peekSmallest() { + const sorted = Array.from(this); + return sorted[sorted.length - 1] as [BigInteger, V] | null; + } + + keys() { + return Array.from(this).map(([k,v]) => k); + } + + generateCachedIter() { + if(this.cachedIter) { + return [...this.cachedIter]; + } + const result = Object.keys(this.root).map((key) => { + const num = bigInt(key); + return [num, this.root[key]] as [BigInteger, V]; + }).sort(([a], [b]) => sortBigInt(a,b)); + this.cachedIter = result; + return [...result]; + } +} diff --git a/ui/src/gear/utils/index.ts b/ui/src/gear/utils/index.ts new file mode 100644 index 00000000..4fed660f --- /dev/null +++ b/ui/src/gear/utils/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; \ No newline at end of file diff --git a/ui/src/gear/utils/lib.ts b/ui/src/gear/utils/lib.ts new file mode 100644 index 00000000..693da49f --- /dev/null +++ b/ui/src/gear/utils/lib.ts @@ -0,0 +1 @@ +export {} \ No newline at end of file diff --git a/ui/src/gear/utils/types.ts b/ui/src/gear/utils/types.ts new file mode 100644 index 00000000..84116f36 --- /dev/null +++ b/ui/src/gear/utils/types.ts @@ -0,0 +1,25 @@ +import { BigIntOrderedMap } from "./BigIntOrderedMap"; + +export type SetElement = S extends Set<(infer T)> ? T : never; +export type MapKey = M extends Map<(infer K), any> ? K : never; +export type MapValue = M extends Map ? V : never; + +/** + * Turns sets into arrays and maps into objects so we can send them over the wire + */ +export type Enc = + S extends Set ? + Enc>[] : + S extends Map ? + { [s: string]: Enc> } : + S extends object ? + { [K in keyof S]: Enc } : + S extends BigIntOrderedMap ? + { [index: string]: T } : + S; + + +export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; + +// @uvH encoded string +export type Serial = string; diff --git a/ui/src/global.d.ts b/ui/src/global.d.ts index ce5215a8..ecefe09c 100644 --- a/ui/src/global.d.ts +++ b/ui/src/global.d.ts @@ -1,7 +1,3 @@ -declare module 'urbit-ob' { - export function isValidPatp(patp: string): boolean; -} - type Stringified = string & { [P in keyof T]: { '_ value': T[P] }; diff --git a/ui/src/logic/useSystemUpdate.tsx b/ui/src/logic/useSystemUpdate.tsx index 223f78b2..3ebad797 100644 --- a/ui/src/logic/useSystemUpdate.tsx +++ b/ui/src/logic/useSystemUpdate.tsx @@ -1,4 +1,4 @@ -import { kilnBump, Pike } from '@urbit/api'; +import { kilnBump, Pike } from '@/gear'; import { partition, pick } from 'lodash'; import { useCallback } from 'react'; import { useHistory } from 'react-router-dom'; diff --git a/ui/src/logic/utils.ts b/ui/src/logic/utils.ts index 6138b104..7db872ff 100644 --- a/ui/src/logic/utils.ts +++ b/ui/src/logic/utils.ts @@ -1,6 +1,6 @@ import { Yarn, isYarnEmph, isYarnShip } from '@/types/hark'; import { findLast } from 'lodash'; -import { Docket, DocketHref, Treaty } from '@urbit/api'; +import { Docket, DocketHref, Treaty } from '@/gear'; import { hsla, parseToHsla, parseToRgba } from 'color2k'; import _ from 'lodash'; import { differenceInDays, endOfToday, format } from 'date-fns'; @@ -44,13 +44,6 @@ export function handleDropdownLink( }; } -export function deSig(ship: string): string { - if (!ship) { - return ''; - } - return ship.replace('~', ''); -} - export function normalizeUrbitColor(color: string): string { if (color.startsWith('#')) { return color; diff --git a/ui/src/main.tsx b/ui/src/main.tsx index 736b6dad..8444e279 100644 --- a/ui/src/main.tsx +++ b/ui/src/main.tsx @@ -1,4 +1,4 @@ -import { preSig } from '@urbit/api'; +import { preSig } from '@urbit/aura'; import cookies from 'browser-cookies'; import React from 'react'; import ReactDOM from 'react-dom'; diff --git a/ui/src/mocks/mockContacts.ts b/ui/src/mocks/mockContacts.ts index d4a93607..3270acfe 100644 --- a/ui/src/mocks/mockContacts.ts +++ b/ui/src/mocks/mockContacts.ts @@ -1,4 +1,4 @@ -import { Rolodex } from '@urbit/api'; +import { Rolodex } from '@/gear'; const mockContacts: Rolodex = { '~finned-palmer': { diff --git a/ui/src/nav/SystemMenu.tsx b/ui/src/nav/SystemMenu.tsx index 5dd8259a..0884f762 100644 --- a/ui/src/nav/SystemMenu.tsx +++ b/ui/src/nav/SystemMenu.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames'; import clipboardCopy from 'clipboard-copy'; import React, { HTMLAttributes, useCallback, useState } from 'react'; import { Link, Route, useHistory } from 'react-router-dom'; -import { Pike } from '@urbit/api'; +import { Pike } from '@/gear'; import { Adjust } from '../components/icons/Adjust'; import { usePike } from '../state/kiln'; import { disableDefault, handleDropdownLink } from '@/logic/utils'; diff --git a/ui/src/nav/notifications/Notification.tsx b/ui/src/nav/notifications/Notification.tsx index 5ca82433..98691933 100644 --- a/ui/src/nav/notifications/Notification.tsx +++ b/ui/src/nav/notifications/Notification.tsx @@ -12,7 +12,7 @@ import { ShipName } from '../../components/ShipName'; import { DeskLink } from '../../components/DeskLink'; import { DocketImage } from '../../components/DocketImage'; import GroupAvatar from '../../components/GroupAvatar'; -import { Charge } from '@urbit/api'; +import { Charge } from '@/gear'; import { useSawRopeMutation } from '@/state/hark'; interface NotificationProps { diff --git a/ui/src/nav/search/Apps.tsx b/ui/src/nav/search/Apps.tsx index 7bcb7d64..5b255bf7 100644 --- a/ui/src/nav/search/Apps.tsx +++ b/ui/src/nav/search/Apps.tsx @@ -1,7 +1,7 @@ import React, { useCallback, useEffect, useMemo } from 'react'; import { RouteComponentProps } from 'react-router-dom'; import fuzzy from 'fuzzy'; -import { Treaty } from '@urbit/api'; +import { Treaty } from '@/gear'; import { ShipName } from '../../components/ShipName'; import { useAllyTreaties } from '../../state/docket'; import { useAppSearchStore } from '../Nav'; diff --git a/ui/src/nav/search/Providers.tsx b/ui/src/nav/search/Providers.tsx index f861844c..39748166 100644 --- a/ui/src/nav/search/Providers.tsx +++ b/ui/src/nav/search/Providers.tsx @@ -1,8 +1,8 @@ import React, { useEffect, useMemo } from 'react'; import { RouteComponentProps } from 'react-router-dom'; import fuzzy from 'fuzzy'; -import { Provider, deSig } from '@urbit/api'; -import * as ob from 'urbit-ob'; +import { deSig, isValidPatp } from '@urbit/aura'; +import { Provider } from '@/gear'; import { MatchItem, useAppSearchStore } from '../Nav'; import { useAllies, useCharges } from '../../state/docket'; import { ProviderList } from '../../components/ProviderList'; @@ -59,14 +59,14 @@ export const Providers = ({ match }: ProvidersProps) => { ); const patp = `~${deSig(search) || ''}`; - const isValidPatp = ob.isValidPatp(patp); + const isValid = isValidPatp(patp); const results = useMemo(() => { if (!allies) { return []; } const exact = - isValidPatp && !Object.keys(allies).includes(patp) + isValid && !Object.keys(allies).includes(patp) ? [ { shipName: patp, @@ -109,7 +109,7 @@ export const Providers = ({ match }: ProvidersProps) => { })) : []; - const newProviderMatches = isValidPatp + const newProviderMatches = isValid ? [ { url: `/search/${patp}/apps`, @@ -128,7 +128,7 @@ export const Providers = ({ match }: ProvidersProps) => { ), }); } - }, [results, patp, isValidPatp]); + }, [results, patp, isValid]); return (
; -const credentials = (json: S3Update, state: StorageState): StorageState => { +const credentials = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'credentials', false); if (data) { state.s3.credentials = data; @@ -13,7 +13,7 @@ const credentials = (json: S3Update, state: StorageState): StorageState => { return state; }; -const configuration = (json: S3Update, state: StorageState): StorageState => { +const configuration = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'configuration', false); if (data) { state.s3.configuration = { @@ -25,7 +25,7 @@ const configuration = (json: S3Update, state: StorageState): StorageState => { return state; }; -const currentBucket = (json: S3Update, state: StorageState): StorageState => { +const currentBucket = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'setCurrentBucket', false); if (data && state.s3) { state.s3.configuration.currentBucket = data; @@ -33,7 +33,7 @@ const currentBucket = (json: S3Update, state: StorageState): StorageState => { return state; }; -const region = (json: S3Update, state: StorageState): StorageState => { +const region = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'setRegion', false); if (data && state.s3) { state.s3.configuration.region = data; @@ -41,7 +41,7 @@ const region = (json: S3Update, state: StorageState): StorageState => { return state; }; -const addBucket = (json: S3Update, state: StorageState): StorageState => { +const addBucket = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'addBucket', false); if (data) { state.s3.configuration.buckets = state.s3.configuration.buckets.add(data); @@ -49,7 +49,7 @@ const addBucket = (json: S3Update, state: StorageState): StorageState => { return state; }; -const removeBucket = (json: S3Update, state: StorageState): StorageState => { +const removeBucket = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'removeBucket', false); if (data) { state.s3.configuration.buckets.delete(data); @@ -57,7 +57,7 @@ const removeBucket = (json: S3Update, state: StorageState): StorageState => { return state; }; -const endpoint = (json: S3Update, state: StorageState): StorageState => { +const endpoint = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'setEndpoint', false); if (data && state.s3.credentials) { state.s3.credentials.endpoint = data; @@ -65,7 +65,7 @@ const endpoint = (json: S3Update, state: StorageState): StorageState => { return state; }; -const accessKeyId = (json: S3Update, state: StorageState): StorageState => { +const accessKeyId = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'setAccessKeyId', false); if (data && state.s3.credentials) { state.s3.credentials.accessKeyId = data; @@ -73,7 +73,7 @@ const accessKeyId = (json: S3Update, state: StorageState): StorageState => { return state; }; -const secretAccessKey = (json: S3Update, state: StorageState): StorageState => { +const secretAccessKey = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'setSecretAccessKey', false); if (data && state.s3.credentials) { state.s3.credentials.secretAccessKey = data; diff --git a/ui/src/tiles/Tile.tsx b/ui/src/tiles/Tile.tsx index 3211dbaa..8ce3bbfa 100644 --- a/ui/src/tiles/Tile.tsx +++ b/ui/src/tiles/Tile.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames'; import React, { FunctionComponent } from 'react'; import { useDrag } from 'react-dnd'; import * as Tooltip from '@radix-ui/react-tooltip'; -import { chadIsRunning } from '@urbit/api'; +import { chadIsRunning } from '@/gear'; import { TileMenu } from './TileMenu'; import { Spinner } from '../components/Spinner'; import { getAppHref } from '@/logic/utils'; diff --git a/ui/src/tiles/TileMenu.tsx b/ui/src/tiles/TileMenu.tsx index bd6d1f90..2df238aa 100644 --- a/ui/src/tiles/TileMenu.tsx +++ b/ui/src/tiles/TileMenu.tsx @@ -2,7 +2,7 @@ import React, { ReactElement, useCallback, useState } from 'react'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import classNames from 'classnames'; import { Link } from 'react-router-dom'; -import { Chad, chadIsRunning } from '@urbit/api'; +import { Chad, chadIsRunning } from '@/gear'; import useDocketState from '../state/docket'; import { disableDefault, handleDropdownLink } from '@/logic/utils'; import { useMedia } from '../logic/useMedia'; From 50ffc4c12f9ec549528c5a5bf6a5bc936bbd30b0 Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 24 May 2023 23:17:27 -0700 Subject: [PATCH 05/14] meta: remove unused gear pkgs --- ui/src/gear/index.ts | 5 -- ui/src/gear/invite/index.ts | 2 - ui/src/gear/invite/lib.ts | 29 ---------- ui/src/gear/invite/types.ts | 76 ------------------------- ui/src/gear/metadata/index.ts | 2 - ui/src/gear/metadata/lib.ts | 100 --------------------------------- ui/src/gear/metadata/types.ts | 101 ---------------------------------- 7 files changed, 315 deletions(-) delete mode 100644 ui/src/gear/invite/index.ts delete mode 100644 ui/src/gear/invite/lib.ts delete mode 100644 ui/src/gear/invite/types.ts delete mode 100644 ui/src/gear/metadata/index.ts delete mode 100644 ui/src/gear/metadata/lib.ts delete mode 100644 ui/src/gear/metadata/types.ts diff --git a/ui/src/gear/index.ts b/ui/src/gear/index.ts index 50825f78..d3b8aea0 100644 --- a/ui/src/gear/index.ts +++ b/ui/src/gear/index.ts @@ -4,11 +4,6 @@ export * from './groups'; export * as groups from './groups'; export * from './hark'; export * as hark from './hark'; -export * from './invite'; -// this conflicts with /groups/lib invite -// export * as invite from './invite'; -export * from './metadata'; -export * as metadata from './metadata'; export * from './settings'; export * as settings from './settings'; export * from './storage'; diff --git a/ui/src/gear/invite/index.ts b/ui/src/gear/invite/index.ts deleted file mode 100644 index 341e8171..00000000 --- a/ui/src/gear/invite/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/ui/src/gear/invite/lib.ts b/ui/src/gear/invite/lib.ts deleted file mode 100644 index 885ef787..00000000 --- a/ui/src/gear/invite/lib.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Poke } from '@urbit/js-http-api'; -import { Serial } from '@/gear'; -import { InviteUpdate, InviteUpdateAccept, InviteUpdateDecline } from "./types"; - -export const inviteAction = (data: T): Poke => ({ - app: 'invite-store', - mark: 'invite-action', - json: data -}); - -export const accept = ( - app: string, - uid: Serial -): Poke => inviteAction({ - accept: { - term: app, - uid - } -}); - -export const decline = ( - app: string, - uid: Serial -): Poke => inviteAction({ - decline: { - term: app, - uid - } -}); diff --git a/ui/src/gear/invite/types.ts b/ui/src/gear/invite/types.ts deleted file mode 100644 index e0e95745..00000000 --- a/ui/src/gear/invite/types.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { PatpNoSig, Path } from '@urbit/js-http-api'; -import { Serial } from '@/gear'; -import { Resource } from "../groups"; - -export type InviteUpdate = - InviteUpdateInitial -| InviteUpdateCreate -| InviteUpdateDelete -| InviteUpdateInvite -| InviteUpdateAccept -| InviteUpdateAccepted -| InviteUpdateDecline; - -export interface InviteUpdateAccept { - accept: { - term: string; - uid: Serial; - } -} - -export interface InviteUpdateInitial { - initial: Invites; -} - -export interface InviteUpdateCreate { - create: { - term: string; - }; -} - -export interface InviteUpdateDelete { - delete: { - term: string; - }; -} - -export interface InviteUpdateInvite { - invite: { - term: string; - uid: Serial; - invite: Invite; - }; -} - -export interface InviteUpdateAccepted { - accepted: { - term: string; - uid: Serial; - }; -} - -export interface InviteUpdateDecline { - decline: { - term: string; - uid: Serial; - }; -} - -// actual datastructures - - -export type Invites = { - [p in Path]: AppInvites; -}; - -export type AppInvites = { - [s in Serial]: Invite; -}; - -export interface Invite { - app: string; - recipient: PatpNoSig; - resource: Resource; - ship: PatpNoSig; - text: string; -} diff --git a/ui/src/gear/metadata/index.ts b/ui/src/gear/metadata/index.ts deleted file mode 100644 index 341e8171..00000000 --- a/ui/src/gear/metadata/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/ui/src/gear/metadata/lib.ts b/ui/src/gear/metadata/lib.ts deleted file mode 100644 index 64b91fc7..00000000 --- a/ui/src/gear/metadata/lib.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { parseUx } from '@urbit/aura'; -import { Path, Poke, PatpNoSig } from '@urbit/js-http-api'; -import { MdAppName, Association, Metadata, MetadataUpdate, MetadataUpdateAdd, MetadataUpdateRemove, MetadataEditField, MetadataUpdateEdit } from './types'; - -export const METADATA_UPDATE_VERSION = 2; - -export const metadataAction = (data: T, version: number = METADATA_UPDATE_VERSION): Poke => ({ - app: 'metadata-push-hook', - mark: `metadata-update-${version}`, - json: data -}); - -export const add = ( - ship: PatpNoSig, - appName: MdAppName, - resource: Path, - group: Path, - title: string, - description: string, - dateCreated: string, - color: string, - moduleName: string -): Poke => metadataAction({ - add: { - group, - resource: { - resource, - 'app-name': appName - }, - metadata: { - title, - description, - color, - 'date-created': dateCreated, - creator: `~${ship}`, - config: { graph: moduleName }, - picture: '', - hidden: false, - preview: false, - vip: '' - } - } -}); - -export { add as metadataAdd }; - -export const remove = ( - appName: MdAppName, - resource: string, - group: string -): Poke => metadataAction({ - remove: { - group, - resource: { - resource, - 'app-name': appName - } - } -}); - -export { remove as metadataRemove }; - -export const edit = ( - association: Association, - edit: MetadataEditField -): Poke => metadataAction({ - edit: { - group: association.group, - resource: { - resource: association.resource, - 'app-name': association['app-name'] - }, - edit - } -}); - -export { edit as metadataEdit }; - -/** - * @deprecated use {@link edit} instead - */ -export const update = ( - association: Association, - newMetadata: Partial -): Poke => { - const metadata = { ...association.metadata, ...newMetadata }; - metadata.color = parseUx(metadata.color); - return metadataAction({ - add: { - group: association.group, - resource: { - resource: association.resource, - 'app-name': association['app-name'] - }, - metadata - } - }); -}; - -export { update as metadataUpdate }; diff --git a/ui/src/gear/metadata/types.ts b/ui/src/gear/metadata/types.ts deleted file mode 100644 index 0d83135c..00000000 --- a/ui/src/gear/metadata/types.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Path, Patp } from '@urbit/js-http-api'; - -export type MdAppName = 'groups' | 'graph'; - -export type MetadataUpdate = - MetadataUpdateInitial -| MetadataUpdateAdd -| MetadataUpdateUpdate -| MetadataUpdateRemove -| MetadataUpdateEdit; - -export interface MetadataUpdateInitial { - associations: ResourceAssociations; -} - -export type ResourceAssociations = { - [p in Path]: Association; -} - -export type MetadataUpdateAdd = { - add: AssociationPoke; -} - -export type MetadataUpdateUpdate = { - update: AssociationPoke; -} - -export interface MetadataUpdateEdit { - edit: { - resource: MdResource; - group: string; - edit: MetadataEditField; - } -} - -export type MetadataEditField = Partial>; - -export type MetadataUpdateRemove = { - remove: { - resource: MdResource; - group: string; - } -} - -export interface MdResource { - resource: string; - 'app-name': MdAppName; -} - -export interface MetadataUpdatePreview { - group: string; - channels: Associations; - 'channel-count': number; - members: number; - metadata: Metadata; -} - -export type Associations = { - groups: AppAssociations - graph: AppAssociations; -} - -export type AppAssociations = { - [p in Path]: Association; -} - -export type Association = MdResource & { - group: Path; - metadata: Metadata; -}; - -export interface AssociationPoke { - group: Path; - resource: MdResource; - metadata: Metadata; -} - -export interface Metadata { - color: string; - creator: Patp; - 'date-created': string; - description: string; - title: string; - config: C; - hidden: boolean; - picture: string; - preview: boolean; - vip: PermVariation; -} - -export type MetadataConfig = GroupConfig | GraphConfig; - -export interface GraphConfig { - graph: string; -} - -export interface GroupConfig { - group: undefined | {} | MdResource; -} - -export type PermVariation = '' | ' ' | 'reader-comments' | 'member-metadata' | 'host-feed' | 'admin-feed'; From c62c62466d09a30f843ec5deeb4417ef198d39dc Mon Sep 17 00:00:00 2001 From: tomholford Date: Tue, 6 Jun 2023 19:59:44 -0700 Subject: [PATCH 06/14] meta: use @urbit/http-api Addresses PR Feedback: restore usage of @urbit/http-api (instead of the new @urbit/js-http-api) for now --- ui/package-lock.json | 20 +++++++++++--------- ui/package.json | 2 +- ui/src/api.ts | 2 +- ui/src/gear/contacts/lib.ts | 2 +- ui/src/gear/contacts/types.ts | 2 +- ui/src/gear/docket/lib.ts | 2 +- ui/src/gear/groups/lib.ts | 2 +- ui/src/gear/groups/update.ts | 2 +- ui/src/gear/groups/view.ts | 2 +- ui/src/gear/hark/lib.ts | 2 +- ui/src/gear/hood/lib.ts | 2 +- ui/src/gear/settings/lib.ts | 2 +- ui/src/gear/storage/lib.ts | 2 +- ui/src/preferences/StoragePrefs.tsx | 2 +- ui/src/state/base.ts | 2 +- ui/src/state/contact.ts | 2 +- 16 files changed, 26 insertions(+), 24 deletions(-) diff --git a/ui/package-lock.json b/ui/package-lock.json index 46a4796a..d7edcb27 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -26,7 +26,7 @@ "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", "@urbit/aura": "^1.0.0", - "@urbit/js-http-api": "git+https://github.com/urbit/js-http-api", + "@urbit/http-api": "^2.3.0", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", "classnames": "^2.3.1", @@ -2933,13 +2933,13 @@ "big-integer": "^1.6.51" } }, - "node_modules/@urbit/js-http-api": { - "name": "@urbit/http-api", - "version": "3.0.0", - "resolved": "git+ssh://git@github.com/urbit/js-http-api.git#25c3f8f73bd8d6edfd4d5b9feffcfe27585e1ddf", - "license": "MIT", + "node_modules/@urbit/http-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.3.0.tgz", + "integrity": "sha512-3cKSdbBVcpoHqZLvoV23UK+nkqK0nFEBFKbaEwfBQE/NpkWf/7iP+mT7ldXTk7Uv/5bzDEBPqPB2fJNwdMQwcA==", "dependencies": { "@babel/runtime": "^7.12.5", + "@microsoft/fetch-event-source": "^2.0.0", "browser-or-node": "^1.3.0", "core-js": "^3.19.1" } @@ -11335,11 +11335,13 @@ "integrity": "sha512-IeP3uoDzZ0Rpn345auXK0y/BCcXTmpgAlOPbgf7n4eD35h56OnSoit1kuXKA21sWE19gFjK/wqZcz5ULjz2ADg==", "requires": {} }, - "@urbit/js-http-api": { - "version": "git+ssh://git@github.com/urbit/js-http-api.git#25c3f8f73bd8d6edfd4d5b9feffcfe27585e1ddf", - "from": "@urbit/js-http-api@git+https://github.com/urbit/js-http-api", + "@urbit/http-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.3.0.tgz", + "integrity": "sha512-3cKSdbBVcpoHqZLvoV23UK+nkqK0nFEBFKbaEwfBQE/NpkWf/7iP+mT7ldXTk7Uv/5bzDEBPqPB2fJNwdMQwcA==", "requires": { "@babel/runtime": "^7.12.5", + "@microsoft/fetch-event-source": "^2.0.0", "browser-or-node": "^1.3.0", "core-js": "^3.19.1" } diff --git a/ui/package.json b/ui/package.json index f7a6f958..36f79bd2 100644 --- a/ui/package.json +++ b/ui/package.json @@ -36,7 +36,7 @@ "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", "@urbit/aura": "^1.0.0", - "@urbit/js-http-api": "git+https://github.com/urbit/js-http-api", + "@urbit/http-api": "^2.3.0", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", "classnames": "^2.3.1", diff --git a/ui/src/api.ts b/ui/src/api.ts index 381d819d..bc7815f4 100644 --- a/ui/src/api.ts +++ b/ui/src/api.ts @@ -6,7 +6,7 @@ import Urbit, { Thread, UrbitHttpApiEvent, UrbitHttpApiEventType, -} from '@urbit/js-http-api'; +} from '@urbit/http-api'; import _ from 'lodash'; import { useLocalState } from '@/state/local'; import useSchedulerStore from './state/scheduler'; diff --git a/ui/src/gear/contacts/lib.ts b/ui/src/gear/contacts/lib.ts index 7c024a2c..86e040fc 100644 --- a/ui/src/gear/contacts/lib.ts +++ b/ui/src/gear/contacts/lib.ts @@ -1,5 +1,5 @@ -import { Patp, Poke, Scry } from '@urbit/js-http-api'; +import { Patp, Poke, Scry } from '@urbit/http-api'; import { Contact, ContactUpdateAdd, diff --git a/ui/src/gear/contacts/types.ts b/ui/src/gear/contacts/types.ts index 75aa943c..3087fb82 100644 --- a/ui/src/gear/contacts/types.ts +++ b/ui/src/gear/contacts/types.ts @@ -1,4 +1,4 @@ -import { Path, Patp } from '@urbit/js-http-api'; +import { Path, Patp } from '@urbit/http-api'; import { Resource } from '../groups'; export type ContactUpdate = diff --git a/ui/src/gear/docket/lib.ts b/ui/src/gear/docket/lib.ts index ebdce211..5f445644 100644 --- a/ui/src/gear/docket/lib.ts +++ b/ui/src/gear/docket/lib.ts @@ -1,4 +1,4 @@ -import { Poke, Scry } from '@urbit/js-http-api'; +import { Poke, Scry } from '@urbit/http-api'; import { Chad } from './types'; export function chadIsRunning(chad: Chad) { diff --git a/ui/src/gear/groups/lib.ts b/ui/src/gear/groups/lib.ts index 2d5d2d50..7966371e 100644 --- a/ui/src/gear/groups/lib.ts +++ b/ui/src/gear/groups/lib.ts @@ -1,5 +1,5 @@ import { deSig } from '@urbit/aura'; -import { Path, Patp, PatpNoSig, Poke, Thread } from '@urbit/js-http-api'; +import { Path, Patp, PatpNoSig, Poke, Thread } from '@urbit/http-api'; import { Enc } from '@/gear'; import { Group, GroupPolicy, GroupPolicyDiff, GroupUpdateAddMembers, GroupUpdateAddTag, GroupUpdateChangePolicy, GroupUpdateRemoveGroup, GroupUpdateRemoveMembers, GroupUpdateRemoveTag, Resource, RoleTags, Tag } from './types'; import { GroupUpdate } from './update'; diff --git a/ui/src/gear/groups/update.ts b/ui/src/gear/groups/update.ts index a5f025a1..99976b65 100644 --- a/ui/src/gear/groups/update.ts +++ b/ui/src/gear/groups/update.ts @@ -1,4 +1,4 @@ -import { PatpNoSig, Path } from '@urbit/js-http-api'; +import { PatpNoSig, Path } from '@urbit/http-api'; import { ShipRank, Enc } from '@/gear'; import { roleTags } from './index'; diff --git a/ui/src/gear/groups/view.ts b/ui/src/gear/groups/view.ts index dced81d1..0fa48a3c 100644 --- a/ui/src/gear/groups/view.ts +++ b/ui/src/gear/groups/view.ts @@ -1,5 +1,5 @@ import { joinError, joinProgress, joinResult } from "."; -import { Patp } from '@urbit/js-http-api'; +import { Patp } from '@urbit/http-api'; export type JoinError = typeof joinError[number]; diff --git a/ui/src/gear/hark/lib.ts b/ui/src/gear/hark/lib.ts index e7f081db..6bd9c318 100644 --- a/ui/src/gear/hark/lib.ts +++ b/ui/src/gear/hark/lib.ts @@ -1,6 +1,6 @@ import { BigInteger } from 'big-integer'; -import { Poke } from '@urbit/js-http-api'; +import { Poke } from '@urbit/http-api'; import { HarkBin, HarkBinId, diff --git a/ui/src/gear/hood/lib.ts b/ui/src/gear/hood/lib.ts index 346980a6..1dc7f787 100644 --- a/ui/src/gear/hood/lib.ts +++ b/ui/src/gear/hood/lib.ts @@ -1,4 +1,4 @@ -import { Poke, Scry } from '@urbit/js-http-api'; +import { Poke, Scry } from '@urbit/http-api'; import { Pike } from './types'; export const getPikes: Scry = { diff --git a/ui/src/gear/settings/lib.ts b/ui/src/gear/settings/lib.ts index 7a868ec2..4d054b4d 100644 --- a/ui/src/gear/settings/lib.ts +++ b/ui/src/gear/settings/lib.ts @@ -1,4 +1,4 @@ -import { Poke, Scry } from '@urbit/js-http-api'; +import { Poke, Scry } from '@urbit/http-api'; import { PutBucket, Key, Bucket, DelBucket, Value, PutEntry, DelEntry, SettingsUpdate } from './types'; export const action = (data: T): Poke => ({ diff --git a/ui/src/gear/storage/lib.ts b/ui/src/gear/storage/lib.ts index dd8106b9..0a11d8db 100644 --- a/ui/src/gear/storage/lib.ts +++ b/ui/src/gear/storage/lib.ts @@ -1,4 +1,4 @@ -import { Poke } from '@urbit/js-http-api'; +import { Poke } from '@urbit/http-api'; import { StorageUpdate, StorageUpdateCurrentBucket, StorageUpdateAddBucket, StorageUpdateRemoveBucket, StorageUpdateEndpoint, StorageUpdateAccessKeyId, StorageUpdateSecretAccessKey } from './types'; const s3Action = ( diff --git a/ui/src/preferences/StoragePrefs.tsx b/ui/src/preferences/StoragePrefs.tsx index fe9c7478..beacf061 100644 --- a/ui/src/preferences/StoragePrefs.tsx +++ b/ui/src/preferences/StoragePrefs.tsx @@ -6,7 +6,7 @@ import { useAsyncCall } from '../logic/useAsyncCall'; import { useStorage } from '../state/storage'; import { Button } from '../components/Button'; import { Spinner } from '../components/Spinner'; -import { Urbit } from '@urbit/js-http-api'; +import { Urbit } from '@urbit/http-api'; interface CredentialsSubmit { endpoint: string; diff --git a/ui/src/state/base.ts b/ui/src/state/base.ts index d9efd21f..51144d18 100644 --- a/ui/src/state/base.ts +++ b/ui/src/state/base.ts @@ -10,7 +10,7 @@ import { compose } from 'lodash/fp'; import _ from 'lodash'; import create, { GetState, SetState, UseStore } from 'zustand'; import { PersistOptions, persist } from 'zustand/middleware'; -import Urbit, { Poke, SubscriptionRequestInterface } from '@urbit/js-http-api'; +import Urbit, { Poke, SubscriptionRequestInterface } from '@urbit/http-api'; import UrbitMock from '@tloncorp/mock-http-api'; import api from '../api'; import { diff --git a/ui/src/state/contact.ts b/ui/src/state/contact.ts index ead8b16d..015096d8 100644 --- a/ui/src/state/contact.ts +++ b/ui/src/state/contact.ts @@ -12,7 +12,7 @@ import { ContactNews, ContactRolodex, } from '@/types/contact'; -import { Patp } from '@urbit/js-http-api'; +import { Patp } from '@urbit/http-api'; import produce from 'immer'; export interface BaseContactState { From 2257fce41f45d8add6fed5cbd5fedee6c2b369df Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 7 Jun 2023 14:39:16 -0700 Subject: [PATCH 07/14] gear: use landscape-apps contacts interface - also update @urbit/http-api to latest --- ui/package-lock.json | 16 +- ui/package.json | 2 +- ui/src/components/Avatar.tsx | 2 +- ui/src/components/ProviderLink.tsx | 2 +- ui/src/components/ProviderList.tsx | 2 +- ui/src/{types => gear/contacts}/contact.ts | 2 +- ui/src/gear/contacts/lib.ts | 205 ++++++++++--------- ui/src/gear/contacts/types.ts | 98 +++------ ui/src/gear/groups/index.ts | 2 - ui/src/gear/groups/lib.ts | 227 --------------------- ui/src/gear/groups/types.ts | 2 - ui/src/gear/groups/update.ts | 176 ---------------- ui/src/gear/groups/view.ts | 30 --- ui/src/gear/index.ts | 2 - ui/src/mocks/mockContacts.ts | 12 +- ui/src/state/contact.ts | 2 +- ui/src/state/mock-data.ts | 5 +- 17 files changed, 160 insertions(+), 627 deletions(-) rename ui/src/{types => gear/contacts}/contact.ts (96%) delete mode 100644 ui/src/gear/groups/index.ts delete mode 100644 ui/src/gear/groups/lib.ts delete mode 100644 ui/src/gear/groups/types.ts delete mode 100644 ui/src/gear/groups/update.ts delete mode 100644 ui/src/gear/groups/view.ts diff --git a/ui/package-lock.json b/ui/package-lock.json index d7edcb27..75009a27 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -26,7 +26,7 @@ "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", "@urbit/aura": "^1.0.0", - "@urbit/http-api": "^2.3.0", + "@urbit/http-api": "^2.4.5-debug", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", "classnames": "^2.3.1", @@ -2934,12 +2934,11 @@ } }, "node_modules/@urbit/http-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.3.0.tgz", - "integrity": "sha512-3cKSdbBVcpoHqZLvoV23UK+nkqK0nFEBFKbaEwfBQE/NpkWf/7iP+mT7ldXTk7Uv/5bzDEBPqPB2fJNwdMQwcA==", + "version": "2.4.5-debug", + "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.4.5-debug.tgz", + "integrity": "sha512-kMzQwNlrObEz4tEg90nlPRW69Tf+9rD3iIK/JgvsG3423x9oa4rFXobnFKBphXR/5bqd5vR41RoMFN7mqEfDgQ==", "dependencies": { "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", "browser-or-node": "^1.3.0", "core-js": "^3.19.1" } @@ -11336,12 +11335,11 @@ "requires": {} }, "@urbit/http-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.3.0.tgz", - "integrity": "sha512-3cKSdbBVcpoHqZLvoV23UK+nkqK0nFEBFKbaEwfBQE/NpkWf/7iP+mT7ldXTk7Uv/5bzDEBPqPB2fJNwdMQwcA==", + "version": "2.4.5-debug", + "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.4.5-debug.tgz", + "integrity": "sha512-kMzQwNlrObEz4tEg90nlPRW69Tf+9rD3iIK/JgvsG3423x9oa4rFXobnFKBphXR/5bqd5vR41RoMFN7mqEfDgQ==", "requires": { "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", "browser-or-node": "^1.3.0", "core-js": "^3.19.1" } diff --git a/ui/package.json b/ui/package.json index 36f79bd2..0f9add05 100644 --- a/ui/package.json +++ b/ui/package.json @@ -36,7 +36,7 @@ "@tloncorp/mock-http-api": "^1.2.0", "@types/lodash": "^4.14.172", "@urbit/aura": "^1.0.0", - "@urbit/http-api": "^2.3.0", + "@urbit/http-api": "^2.4.5-debug", "big-integer": "^1.6.48", "browser-cookies": "^1.2.0", "classnames": "^2.3.1", diff --git a/ui/src/components/Avatar.tsx b/ui/src/components/Avatar.tsx index dbea5e1b..618946e5 100644 --- a/ui/src/components/Avatar.tsx +++ b/ui/src/components/Avatar.tsx @@ -6,7 +6,7 @@ import { darken, lighten, parseToHsla } from 'color2k'; import { useCurrentTheme } from '../state/local'; import { normalizeUrbitColor } from '@/logic/utils'; import { useContact } from '../state/contact'; -import { Contact } from '@/types/contact'; +import { Contact } from '@/gear'; export type AvatarSizes = 'xs' | 'small' | 'nav' | 'default'; diff --git a/ui/src/components/ProviderLink.tsx b/ui/src/components/ProviderLink.tsx index 2e2a179f..5114e2dc 100644 --- a/ui/src/components/ProviderLink.tsx +++ b/ui/src/components/ProviderLink.tsx @@ -4,7 +4,7 @@ import { Link, LinkProps } from 'react-router-dom'; import { Provider } from '@/gear'; import { ShipName } from './ShipName'; import { Avatar, AvatarSizes } from './Avatar'; -import { Contact } from '@/types/contact'; +import { Contact } from '@/gear'; export type ProviderLinkProps = Omit & { provider: { shipName: string } & Contact; diff --git a/ui/src/components/ProviderList.tsx b/ui/src/components/ProviderList.tsx index abd5e29b..5f804667 100644 --- a/ui/src/components/ProviderList.tsx +++ b/ui/src/components/ProviderList.tsx @@ -4,7 +4,7 @@ import classNames from 'classnames'; import { MatchItem } from '../nav/Nav'; import { useRecentsStore } from '../nav/search/Home'; import { ProviderLink, ProviderLinkProps } from './ProviderLink'; -import { Contact } from '@/types/contact'; +import { Contact } from '@/gear'; export type ProviderListProps = { providers: ({ shipName: string } & Contact)[]; diff --git a/ui/src/types/contact.ts b/ui/src/gear/contacts/contact.ts similarity index 96% rename from ui/src/types/contact.ts rename to ui/src/gear/contacts/contact.ts index 3a3ba8f2..71d1c693 100644 --- a/ui/src/types/contact.ts +++ b/ui/src/gear/contacts/contact.ts @@ -1,4 +1,4 @@ -import { Flag } from './hark'; +import { Flag } from "@/types/hark"; export interface Contact { nickname: string; diff --git a/ui/src/gear/contacts/lib.ts b/ui/src/gear/contacts/lib.ts index 86e040fc..4abbdc3c 100644 --- a/ui/src/gear/contacts/lib.ts +++ b/ui/src/gear/contacts/lib.ts @@ -1,109 +1,124 @@ - -import { Patp, Poke, Scry } from '@urbit/http-api'; +import { useCallback, useMemo } from 'react'; +import _ from 'lodash'; +import api from '@/api'; +import { BaseState, createState } from '@/state/base'; import { - Contact, - ContactUpdateAdd, - ContactUpdateEdit, - ContactUpdateRemove, + ContactAnon, + ContactEdit, ContactEditField, - ContactShare, - ContactUpdate, - ContactUpdateAllowShips, - ContactUpdateAllowGroup, - ContactUpdateSetPublic -} from './types'; + ContactHeed, + ContactNews, + ContactRolodex, +} from '@/gear'; +import { Patp } from '@urbit/http-api'; +import { preSig } from '@urbit/aura'; +import produce from 'immer'; -export const CONTACT_UPDATE_VERSION = 0; +export interface BaseContactState { + contacts: ContactRolodex; + nackedContacts: Set; + edit: (fields: ContactEditField[]) => Promise; + /** removes our profile */ + anon: () => Promise; + /** subscribes to profile updates */ + heed: (ships: string[]) => Promise; + fetchAll: () => Promise; + start: () => void; + [ref: string]: unknown; +} -const storeAction = (data: T, version: number = CONTACT_UPDATE_VERSION): Poke => ({ - app: 'contact-store', - mark: `contact-update-${version}`, - json: data -}); +type ContactState = BaseContactState & BaseState; -export { storeAction as contactStoreAction }; +function contactAction(data: T) { + return { + app: 'contacts', + mark: 'contact-action', + json: data, + }; +} -export const addContact = (ship: Patp, contact: Contact): Poke => { - contact['last-updated'] = Date.now(); +const useContactState = createState( + 'Contact', + (set, get) => ({ + contacts: {}, + nackedContacts: new Set(), + fetchAll: async () => { + const contacts = await api.scry({ + app: 'contacts', + path: '/all', + }); - return storeAction({ - add: { ship, contact } - }); -}; + set( + produce((draft: BaseContactState) => { + draft.contacts = { + ...draft.contacts, + ...contacts, + }; + }) + ); + }, + edit: async (contactFields) => { + await api.poke(contactAction({ edit: contactFields })); + }, + anon: async () => { + await api.poke(contactAction({ anon: null })); + }, + heed: async (ships) => { + await api.poke(contactAction({ heed: ships })); + }, + start: () => { + get().fetchAll(); -export const removeContact = (ship: Patp): Poke => - storeAction({ - remove: { ship } - }); + api.subscribe({ + app: 'contacts', + path: '/news', + event: (event: ContactNews) => { + set( + produce((draft: ContactState) => { + if (event.con) { + draft.contacts[event.who] = event.con; + } else { + delete draft.contacts[event.who]; + } + }) + ); + }, + }); + }, + }), + { + partialize: ({ contacts }) => ({ contacts }), + }, + [] +); -export const share = (recipient: Patp, version: number = CONTACT_UPDATE_VERSION): Poke => ({ - app: 'contact-push-hook', - mark: 'contact-share', - json: { share: recipient } -}); +export const emptyContact = { + nickname: '', + bio: '', + status: '', + color: '0x0', + avatar: null, + cover: null, + groups: [] as string[], +}; -export const editContact = ( - ship: Patp, - editField: ContactEditField -): Poke => - storeAction({ - edit: { - ship, - 'edit-field': editField, - timestamp: Date.now() - } - }); +const selContacts = (s: ContactState) => s.contacts; +export function useContacts() { + return useContactState(selContacts); +} -export const allowShips = ( - ships: Patp[] -): Poke => storeAction({ - allow: { - ships - } -}); +export function useMemoizedContacts() { + return useMemo(() => useContactState.getState().contacts, []); +} -export const allowGroup = ( - ship: string, - name: string -): Poke => storeAction({ - allow: { - group: { ship, name } - } -}); +export function useContact(ship: string) { + return useContactState( + useCallback((s) => s.contacts[preSig(ship)] || emptyContact, [ship]) + ); +} -export const setPublic = ( - setPublic: any -): Poke => { - return storeAction({ - 'set-public': setPublic - }); -}; +export function useOurContact() { + return useContact(window.our); +} -export const retrieve = ( - ship: string -) => { - const resource = { ship, name: '' }; - return { - app: 'contact-pull-hook', - mark: 'pull-hook-action', - json: { - add: { - resource, - ship - } - } - }; -}; - -export const fetchIsAllowed = ( - entity: string, - name: string, - ship: string, - personal: boolean -): Scry => { - const isPersonal = personal ? 'true' : 'false'; - return { - app: 'contact-store', - path: `/is-allowed/${entity}/${name}/${ship}/${isPersonal}` - }; -}; +export default useContactState; diff --git a/ui/src/gear/contacts/types.ts b/ui/src/gear/contacts/types.ts index 3087fb82..71d1c693 100644 --- a/ui/src/gear/contacts/types.ts +++ b/ui/src/gear/contacts/types.ts @@ -1,82 +1,50 @@ -import { Path, Patp } from '@urbit/http-api'; -import { Resource } from '../groups'; +import { Flag } from "@/types/hark"; -export type ContactUpdate = - | ContactUpdateAdd - | ContactUpdateRemove - | ContactUpdateEdit - | ContactUpdateInitial - | ContactUpdateAllowGroup - | ContactUpdateAllowShips - | ContactUpdateSetPublic; - - export interface ContactUpdateAdd { - add: { - ship: Patp; - contact: Contact; - }; +export interface Contact { + nickname: string; + bio: string; + status: string; + color: string; + avatar: string | null; + cover: string | null; + groups: string[]; } -export interface ContactUpdateRemove { - remove: { - ship: Patp; - }; +export interface ContactAddGroup { + 'add-group': Flag; } -export interface ContactUpdateEdit { - edit: { - ship: Patp; - 'edit-field': ContactEditField; - timestamp: number; - }; +export interface ContactDelGroup { + 'del-group': Flag; } -export interface ContactUpdateAllowShips { - allow: { - ships: Patp[]; - } -} +export type ContactEditField = + | Pick + | Pick + | Pick + | Pick + | Pick + | Pick + | ContactAddGroup + | ContactDelGroup; -export interface ContactUpdateAllowGroup { - allow: { - group: Resource; - } -} +export type ContactsAction = ContactAnon | ContactEdit | ContactHeed; -export interface ContactUpdateSetPublic { - 'set-public': boolean; +export interface ContactAnon { + anon: null; } -export interface ContactShare { - share: Patp; +export interface ContactEdit { + edit: ContactEditField[]; } -export interface ContactUpdateInitial { - initial: Rolodex; +export interface ContactHeed { + heed: string[]; } -export type Rolodex = { - [p in Patp]: Contact; -}; - -export type Contacts = Rolodex; +export type ContactRolodex = Record; -export interface Contact { - nickname: string; - bio: string; - status: string; - color: string; - avatar: string | null; - cover: string | null; - groups: Path[]; - 'last-updated': number; +export interface ContactNews { + who: string; + con: Contact | null; } - -type ContactKeys = keyof Contact; - -export type ContactEditFieldPrim = Exclude; - -export type ContactEditField = Partial> & { - 'add-group'?: Resource; - 'remove-group'?: Resource; -}; diff --git a/ui/src/gear/groups/index.ts b/ui/src/gear/groups/index.ts deleted file mode 100644 index 341e8171..00000000 --- a/ui/src/gear/groups/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/ui/src/gear/groups/lib.ts b/ui/src/gear/groups/lib.ts deleted file mode 100644 index 7966371e..00000000 --- a/ui/src/gear/groups/lib.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { deSig } from '@urbit/aura'; -import { Path, Patp, PatpNoSig, Poke, Thread } from '@urbit/http-api'; -import { Enc } from '@/gear'; -import { Group, GroupPolicy, GroupPolicyDiff, GroupUpdateAddMembers, GroupUpdateAddTag, GroupUpdateChangePolicy, GroupUpdateRemoveGroup, GroupUpdateRemoveMembers, GroupUpdateRemoveTag, Resource, RoleTags, Tag } from './types'; -import { GroupUpdate } from './update'; - -export const GROUP_UPDATE_VERSION = 0; - -export const proxyAction = (data: T, version: number = GROUP_UPDATE_VERSION): Poke => ({ - app: 'group-push-hook', - mark: `group-update-${version}`, - json: data -}); - -const storeAction = (data: T, version: number = GROUP_UPDATE_VERSION): Poke => ({ - app: 'group-store', - mark: `group-update-${version}`, - json: data -}); - -export { storeAction as groupStoreAction }; - -const viewAction = (data: T): Poke => ({ - app: 'group-view', - mark: 'group-view-action', - json: data -}); - -export { viewAction as groupViewAction }; - -export const viewThread = (thread: string, action: T): Thread => ({ - inputMark: 'group-view-action', - outputMark: 'json', - threadName: thread, - body: action -}); - -export const removeMembers = ( - resource: Resource, - ships: PatpNoSig[] -): Poke => proxyAction({ - removeMembers: { - resource, - ships - } -}); - -export const addTag = ( - resource: Resource, - tag: Tag, - ships: Patp[] -): Poke => proxyAction({ - addTag: { - resource, - tag, - ships - } -}); - -export const removeTag = ( - tag: Tag, - resource: Resource, - ships: PatpNoSig[] -): Poke => proxyAction({ - removeTag: { - tag, - resource, - ships - } -}); - -export const addMembers = ( - resource: Resource, - ships: PatpNoSig[] -): Poke => proxyAction({ - addMembers: { - resource, - ships - } -}); - -export const removeGroup = ( - resource: Resource -): Poke => storeAction({ - removeGroup: { - resource - } -}); - -export const changePolicy = ( - resource: Resource, - diff: Enc -): Poke> => proxyAction({ - changePolicy: { - resource, - diff - } -}); - -export const join = ( - ship: string, - name: string, - app: "groups" | "graph", - autojoin: boolean, - share: boolean -): Poke => viewAction({ - join: { - resource: makeResource(ship, name), - ship, - shareContact: share || false, - app, - autojoin - } -}); - -export const createGroup = ( - name: string, - policy: Enc, - title: string, - description: string -): Thread => viewThread('group-create', { - create: { - name, - policy, - title, - description - } -}); - -export const deleteGroup = ( - ship: string, - name: string -): Thread => viewThread('group-delete', { - remove: makeResource(ship, name) -}); - -export const leaveGroup = ( - ship: string, - name: string -): Thread => viewThread('group-leave', { - leave: makeResource(ship, name) -}); - -export const invite = ( - ship: string, - name: string, - ships: Patp[], - description: string -): Thread => viewThread('group-invite', { - invite: { - resource: makeResource(ship, name), - ships, - description - } -}); - -export const abortJoin = ( - resource: string -): Poke => viewAction({ - abort: resource -}); - -export const roleTags = ['janitor', 'moderator', 'admin']; -// TODO make this type better? - -export const groupBunts = { - group: (): Group => ({ members: [], tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), - policy: (): GroupPolicy => ({ open: { banned: [], banRanks: [] } }) -}; - -export const joinError = ['no-perms', 'strange', 'abort'] as const; -export const joinResult = ['done', ...joinError] as const; -export const joinLoad = ['start', 'added', 'metadata'] as const; -export const joinProgress = [...joinLoad, ...joinResult] as const; - -export function roleForShip( - group: Group, - ship: PatpNoSig -): RoleTags | undefined { - return roleTags.reduce((currRole, role) => { - const roleShips = group?.tags?.role?.[role]; - return roleShips && roleShips.includes(ship) ? role : currRole; - }, undefined as RoleTags | undefined); -}; - -export function resourceFromPath(path: Path): Resource { - const [, , ship, name] = path.split('/'); - return { ship, name }; -} - -export function makeResource(ship: string, name: string) { - return { ship, name }; -} - -export const isWriter = (group: Group, resource: string, ship: string) => { - const graph = group?.tags?.graph; - const writers: string[] | undefined = graph && (graph[resource] as any)?.writers; - const admins = group?.tags?.role?.admin ?? []; - if (typeof writers === 'undefined') { - return true; - } else { - return [...writers].includes(ship) || admins.includes(ship); - } -}; - -export function isChannelAdmin( - group: Group, - resource: string, - ship: string -): boolean { - const role = roleForShip(group, deSig(ship)); - - return ( - isHost(resource, ship) || - role === 'admin' || - role === 'moderator' - ); -} - -export function isHost( - resource: string, - ship: string -): boolean { - const [, , host] = resource.split('/'); - - return ship === host; -} diff --git a/ui/src/gear/groups/types.ts b/ui/src/gear/groups/types.ts deleted file mode 100644 index 6197c4f9..00000000 --- a/ui/src/gear/groups/types.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './update'; -export * from './view'; \ No newline at end of file diff --git a/ui/src/gear/groups/update.ts b/ui/src/gear/groups/update.ts deleted file mode 100644 index 99976b65..00000000 --- a/ui/src/gear/groups/update.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { PatpNoSig, Path } from '@urbit/http-api'; -import { ShipRank, Enc } from '@/gear'; -import { roleTags } from './index'; - -export type RoleTags = typeof roleTags[number]; -interface RoleTag { - tag: 'admin' | 'moderator' | 'janitor'; -} - -interface AppTag { - app: string; - resource: string; - tag: string; -} - -export type Tag = AppTag | RoleTag; - -export interface InvitePolicy { - invite: { - pending: PatpNoSig[]; - }; -} - -export interface OpenPolicy { - open: { - banned: PatpNoSig[]; - banRanks: ShipRank[]; - }; -} - -export interface Resource { - name: string; - ship: PatpNoSig; -} - -export type OpenPolicyDiff = - | AllowRanksDiff - | BanRanksDiff - | AllowShipsDiff - | BanShipsDiff; - -export interface AllowRanksDiff { - allowRanks: ShipRank[]; -} - -export interface BanRanksDiff { - banRanks: ShipRank[]; -} - -export interface AllowShipsDiff { - allowShips: PatpNoSig[]; -} - -export interface BanShipsDiff { - banShips: PatpNoSig[]; -} - -export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; - -export interface AddInvitesDiff { - addInvites: PatpNoSig[]; -} - -export interface RemoveInvitesDiff { - removeInvites: PatpNoSig[]; -} - -export interface ReplacePolicyDiff { - replace: GroupPolicy; -} - -export type GroupPolicyDiff = - | { open: OpenPolicyDiff } - | { invite: InvitePolicyDiff } - | ReplacePolicyDiff; - -export type GroupPolicy = OpenPolicy | InvitePolicy; - -export interface TaggedShips { - [tag: string]: PatpNoSig[]; -} - -export interface Tags { - role: TaggedShips; - [app: string]: TaggedShips; -} - -export interface Group { - members: PatpNoSig[]; - tags: Tags; - policy: GroupPolicy; - hidden: boolean; -} - -export type Groups = { - [p in Path]: Group; -}; - -export interface GroupUpdateInitial { - initial: Enc; -} - -export interface GroupUpdateAddGroup { - addGroup: { - resource: Resource; - policy: Enc; - hidden: boolean; - }; -} - -export interface GroupUpdateAddMembers { - addMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -export interface GroupUpdateRemoveMembers { - removeMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -export interface GroupUpdateAddTag { - addTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -export interface GroupUpdateRemoveTag { - removeTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -export interface GroupUpdateChangePolicy { - changePolicy: { resource: Resource; diff: GroupPolicyDiff }; -} - -export interface GroupUpdateRemoveGroup { - removeGroup: { - resource: Resource; - }; -} - -export interface GroupUpdateExpose { - expose: { - resource: Resource; - }; -} - -export interface GroupUpdateInitialGroup { - initialGroup: { - resource: Resource; - group: Enc; - }; -} - -export type GroupUpdate = - | GroupUpdateInitial - | GroupUpdateAddGroup - | GroupUpdateAddMembers - | GroupUpdateRemoveMembers - | GroupUpdateAddTag - | GroupUpdateRemoveTag - | GroupUpdateChangePolicy - | GroupUpdateRemoveGroup - | GroupUpdateExpose - | GroupUpdateInitialGroup; - -export type GroupAction = Omit; diff --git a/ui/src/gear/groups/view.ts b/ui/src/gear/groups/view.ts deleted file mode 100644 index 0fa48a3c..00000000 --- a/ui/src/gear/groups/view.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { joinError, joinProgress, joinResult } from "."; -import { Patp } from '@urbit/http-api'; - -export type JoinError = typeof joinError[number]; - -export type JoinResult = typeof joinResult[number]; - - -export type JoinProgress = typeof joinProgress[number]; - -export interface JoinRequest { - /** - * Whether to display the join request or not - */ - hidden: boolean; - /** - * Timestamp of when the request started - */ - started: number; - ship: Patp; - progress: JoinProgress; - shareContact: boolean; - autojoin: boolean; - app: 'graph' | 'groups'; - invite: string[]; -} - -export interface JoinRequests { - [rid: string]: JoinRequest; -} diff --git a/ui/src/gear/index.ts b/ui/src/gear/index.ts index d3b8aea0..9e87d9af 100644 --- a/ui/src/gear/index.ts +++ b/ui/src/gear/index.ts @@ -1,7 +1,5 @@ export * from './contacts'; export * as contacts from './contacts'; -export * from './groups'; -export * as groups from './groups'; export * from './hark'; export * as hark from './hark'; export * from './settings'; diff --git a/ui/src/mocks/mockContacts.ts b/ui/src/mocks/mockContacts.ts index 3270acfe..9ded6704 100644 --- a/ui/src/mocks/mockContacts.ts +++ b/ui/src/mocks/mockContacts.ts @@ -1,9 +1,8 @@ -import { Rolodex } from '@/gear'; +import { ContactRolodex } from '@/gear'; -const mockContacts: Rolodex = { +const mockContacts: ContactRolodex = { '~finned-palmer': { status: '', - 'last-updated': 1628685243041, avatar: null, cover: null, bio: '', @@ -13,7 +12,6 @@ const mockContacts: Rolodex = { }, '~nocsyx-lassul': { status: 'technomancing an electron wrapper for urbit', - 'last-updated': 1652879509836, avatar: null, cover: 'https://i.pinimg.com/originals/20/62/59/2062590a440f717a2ae1065ad8e8a4c7.gif', bio: 'Technomancer. Gaining clarity on reality daily, building calm, maintainable, and resilient systems.', @@ -27,7 +25,6 @@ const mockContacts: Rolodex = { }, '~hastuc-dibtux': { status: 'Network Spirituality', - 'last-updated': 1649439191889, avatar: 'https://lh3.googleusercontent.com/M1kx277EWn0x1PR_kMb3hSJLj086mhasqkm3WkdUFLV4lhHJ6mZWFMaPBERn3A2iFubegTHe8dDDcx20iuJSK0o0bmu_UiwKXhNj=s0', cover: @@ -39,7 +36,6 @@ const mockContacts: Rolodex = { }, '~datder-sonnet': { status: 'in ~zod we trust', - 'last-updated': 1647446196001, avatar: null, cover: 'https://pbs.twimg.com/profile_banners/922197314579697666/1508704898/1500x500', bio: 'High-Functioning Urbit Maximalist\n\nFrontend @ Tlon\n\nhttps://tholf.org', @@ -49,7 +45,6 @@ const mockContacts: Rolodex = { }, '~fallyn-balfus': { status: '', - 'last-updated': 1635790731403, avatar: '', cover: 'https://fallyn-balfus.sfo2.digitaloceanspaces.com/fallyn-balfus/2021.6.07..21.46.55-Screen%20Shot%202021-06-07%20at%202%2C46%2C32%20PM.png', @@ -64,7 +59,6 @@ const mockContacts: Rolodex = { }, '~fabled-faster': { status: 'Build-a-Bear', - 'last-updated': 1652722355452, avatar: '', cover: '', bio: 'thaumaturge at tlon\n\ned@tlon.io\n\nbc1qa256ysm78ss0k66ul8fd0g68m2zdmg8m3rncy4', @@ -79,7 +73,6 @@ const mockContacts: Rolodex = { }, '~rilfun-lidlen': { status: '', - 'last-updated': 1652915627705, avatar: '', cover: 'http://inapcache.boston.com/universal/site_graphics/blogs/bigpicture/msh30_05_18/m19_mboe0016.jpg', @@ -90,7 +83,6 @@ const mockContacts: Rolodex = { }, '~riprud-tidmel': { status: '', - 'last-updated': 1652722355452, avatar: '', cover: '', bio: '', diff --git a/ui/src/state/contact.ts b/ui/src/state/contact.ts index 015096d8..db6a841e 100644 --- a/ui/src/state/contact.ts +++ b/ui/src/state/contact.ts @@ -11,7 +11,7 @@ import { ContactHeed, ContactNews, ContactRolodex, -} from '@/types/contact'; +} from '@/gear'; import { Patp } from '@urbit/http-api'; import produce from 'immer'; diff --git a/ui/src/state/mock-data.ts b/ui/src/state/mock-data.ts index d3b3be2b..32397098 100644 --- a/ui/src/state/mock-data.ts +++ b/ui/src/state/mock-data.ts @@ -9,7 +9,7 @@ import { HarkContent, HarkBody, Contact, - Contacts, + ContactRolodex, Timebox, harkBinToId, Pikes @@ -301,10 +301,9 @@ const contact: Contact = { avatar: null, cover: null, groups: [], - 'last-updated': 0 }; -export const mockContacts: Contacts = { +export const mockContactRolodex: ContactRolodex = { '~zod': { ...contact, nickname: 'Tlon Corporation' From 0384c2778b855aedfbaca79f2b6815225db5efb2 Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 7 Jun 2023 15:19:56 -0700 Subject: [PATCH 08/14] gear: replace hark types from landscape-apps --- ui/src/gear/hark/types.ts | 121 +++++++++++++------ ui/src/logic/utils.ts | 2 +- ui/src/nav/notifications/Notification.tsx | 2 +- ui/src/nav/notifications/useNotifications.ts | 2 +- ui/src/types/hark.ts | 105 ---------------- 5 files changed, 87 insertions(+), 145 deletions(-) delete mode 100644 ui/src/types/hark.ts diff --git a/ui/src/gear/hark/types.ts b/ui/src/gear/hark/types.ts index e52912cb..47f46e87 100644 --- a/ui/src/gear/hark/types.ts +++ b/ui/src/gear/hark/types.ts @@ -1,58 +1,105 @@ +export type Flag = string; // ~{ship}/{name} +export type Id = string; // @uvH -export interface HarkStats { - count: number; - each: string[]; - last: number; +export type Thread = Id[]; + +export interface Threads { + [time: string]: Thread; // time is @da } -export interface Timebox { - [binId: string]: Notification; +export interface Yarn { + id: Id; + rope: Rope; + time: number; + con: YarnContent[]; + wer: string; + but: YarnButton | null; } -export type HarkContent = { ship: string; } | { text: string; }; +export interface YarnButton { + title: string; + handler: string; +} -export interface HarkBody { - title: HarkContent[]; - time: number; - content: HarkContent[]; - link: string; - binned: string; +interface YarnContentShip { + ship: string; +} + +interface YarnContentEmphasis { + emph: string; +} + +export type YarnContent = string | YarnContentShip | YarnContentEmphasis; + +export function isYarnShip(obj: YarnContent): obj is YarnContentShip { + return !!obj && typeof obj !== 'string' && 'ship' in obj; +} + +export function isYarnEmph(obj: YarnContent): obj is YarnContentEmphasis { + return !!obj && typeof obj !== 'string' && 'emph' in obj; } -export interface HarkPlace { +export interface Rope { + group: Flag | null; + channel: Flag | null; desk: string; - path: string; + thread: string; } -export interface HarkBin { - path: string; - place: HarkPlace; +export type Seam = { group: Flag } | { desk: string } | { all: null }; + +export interface Yarns { + [id: Id]: Yarn; } -export type HarkLid = - { unseen: null; } -| { seen: null; } -| { time: string; }; +export interface Cable { + rope: Rope; + thread: Thread; +} -export type HarkBinId = string; -export interface Notification { - bin: HarkBin; - time: number; - body: HarkBody[]; +export interface Carpet { + seam: Seam; + yarns: Yarns; + cable: Cable[]; + stitch: number; +} + +export interface Blanket { + seam: Seam; + yarns: Yarns; + quilt: { + [key: number]: Thread; + }; +} + +export interface HarkAddYarn { + 'add-yarn': { + all: boolean; + desk: boolean; + yarn: Yarn; + }; +} + +export interface HarkSawSeam { + 'saw-seam': Seam; } -export interface NotificationGraphConfig { - watchOnSelf: boolean; - mentions: boolean; - watching: WatchedIndex[] +export interface HarkSawRope { + 'saw-rope': Rope; } -export interface Unreads { - [path: string]: HarkStats; +export type HarkAction = HarkAddYarn | HarkSawSeam | HarkSawRope; + +export interface HarkUpdate { + yarns: Yarns; + seam: Seam; + threads: Threads; } -interface WatchedIndex { - graph: string; - index: string; +export interface Skein { + time: number; + count: number; + shipCount: number; + top: Yarn; + unread: boolean; } -export type GroupNotificationsConfig = string[]; diff --git a/ui/src/logic/utils.ts b/ui/src/logic/utils.ts index 7db872ff..2d60dc2b 100644 --- a/ui/src/logic/utils.ts +++ b/ui/src/logic/utils.ts @@ -1,4 +1,4 @@ -import { Yarn, isYarnEmph, isYarnShip } from '@/types/hark'; +import { Yarn, isYarnEmph, isYarnShip } from '@/gear'; import { findLast } from 'lodash'; import { Docket, DocketHref, Treaty } from '@/gear'; import { hsla, parseToHsla, parseToRgba } from 'color2k'; diff --git a/ui/src/nav/notifications/Notification.tsx b/ui/src/nav/notifications/Notification.tsx index 98691933..df254a75 100644 --- a/ui/src/nav/notifications/Notification.tsx +++ b/ui/src/nav/notifications/Notification.tsx @@ -3,7 +3,7 @@ import cn from 'classnames'; import { format } from 'date-fns'; import _ from 'lodash'; import { pluralize, getAppName } from '@/logic/utils'; -import { isYarnShip, Rope, Skein, YarnContent } from '@/types/hark'; +import { isYarnShip, Rope, Skein, YarnContent } from '@/gear'; import { useCharge } from '../../state/docket'; import { Groups } from './groups'; import { Button } from '../../components/Button'; diff --git a/ui/src/nav/notifications/useNotifications.ts b/ui/src/nav/notifications/useNotifications.ts index bd614cde..5ccb2398 100644 --- a/ui/src/nav/notifications/useNotifications.ts +++ b/ui/src/nav/notifications/useNotifications.ts @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import { useSkeins } from '@/state/hark'; import _ from 'lodash'; -import { Skein, Yarn } from '@/types/hark'; +import { Skein, Yarn } from '@/gear'; import { makePrettyDay } from '@/logic/utils'; export interface DayGrouping { diff --git a/ui/src/types/hark.ts b/ui/src/types/hark.ts deleted file mode 100644 index 47f46e87..00000000 --- a/ui/src/types/hark.ts +++ /dev/null @@ -1,105 +0,0 @@ -export type Flag = string; // ~{ship}/{name} -export type Id = string; // @uvH - -export type Thread = Id[]; - -export interface Threads { - [time: string]: Thread; // time is @da -} - -export interface Yarn { - id: Id; - rope: Rope; - time: number; - con: YarnContent[]; - wer: string; - but: YarnButton | null; -} - -export interface YarnButton { - title: string; - handler: string; -} - -interface YarnContentShip { - ship: string; -} - -interface YarnContentEmphasis { - emph: string; -} - -export type YarnContent = string | YarnContentShip | YarnContentEmphasis; - -export function isYarnShip(obj: YarnContent): obj is YarnContentShip { - return !!obj && typeof obj !== 'string' && 'ship' in obj; -} - -export function isYarnEmph(obj: YarnContent): obj is YarnContentEmphasis { - return !!obj && typeof obj !== 'string' && 'emph' in obj; -} - -export interface Rope { - group: Flag | null; - channel: Flag | null; - desk: string; - thread: string; -} - -export type Seam = { group: Flag } | { desk: string } | { all: null }; - -export interface Yarns { - [id: Id]: Yarn; -} - -export interface Cable { - rope: Rope; - thread: Thread; -} - -export interface Carpet { - seam: Seam; - yarns: Yarns; - cable: Cable[]; - stitch: number; -} - -export interface Blanket { - seam: Seam; - yarns: Yarns; - quilt: { - [key: number]: Thread; - }; -} - -export interface HarkAddYarn { - 'add-yarn': { - all: boolean; - desk: boolean; - yarn: Yarn; - }; -} - -export interface HarkSawSeam { - 'saw-seam': Seam; -} - -export interface HarkSawRope { - 'saw-rope': Rope; -} - -export type HarkAction = HarkAddYarn | HarkSawSeam | HarkSawRope; - -export interface HarkUpdate { - yarns: Yarns; - seam: Seam; - threads: Threads; -} - -export interface Skein { - time: number; - count: number; - shipCount: number; - top: Yarn; - unread: boolean; -} From e0c2ad6b7a59a9aaaa35d64343791858f5279115 Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 7 Jun 2023 21:08:09 -0700 Subject: [PATCH 09/14] gear: import Storage from Groups - rename s3 stragglers --> storage - also fix Hark tsc issues - install missing deps --- ui/package-lock.json | 8562 ++++++++++++++++++++++--------- ui/package.json | 3 + ui/src/gear/contacts/contact.ts | 2 +- ui/src/gear/contacts/types.ts | 2 +- ui/src/gear/hark/lib.ts | 256 +- ui/src/gear/storage/lib.ts | 25 +- ui/src/gear/storage/types.ts | 124 +- ui/src/state/hark.ts | 2 +- ui/src/state/mock-data.ts | 191 +- ui/src/state/storage/index.ts | 62 +- ui/src/state/storage/reducer.ts | 25 +- ui/src/state/storage/storage.ts | 46 + ui/src/state/storage/upload.ts | 231 + 13 files changed, 6616 insertions(+), 2915 deletions(-) create mode 100644 ui/src/state/storage/storage.ts create mode 100644 ui/src/state/storage/upload.ts diff --git a/ui/package-lock.json b/ui/package-lock.json index 75009a27..9d90cc5b 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -8,6 +8,8 @@ "name": "landscape", "version": "0.0.0", "dependencies": { + "@aws-sdk/client-s3": "^3.348.0", + "@aws-sdk/s3-request-presigner": "^3.348.0", "@fingerprintjs/fingerprintjs": "^3.3.3", "@radix-ui/react-checkbox": "^0.1.5", "@radix-ui/react-dialog": "^1.0.2", @@ -49,6 +51,7 @@ "react-dom": "^17.0.2", "react-error-boundary": "^3.1.3", "react-hook-form": "^7.38.0", + "react-image-size": "^2.0.2", "react-router-dom": "^5.2.0", "slugify": "^1.6.0", "zustand": "^3.7.2" @@ -109,1516 +112,2350 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" } }, - "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" } }, - "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dev": true, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/abort-controller": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.347.0.tgz", + "integrity": "sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/abort-controller/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/chunked-blob-reader": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", + "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/chunked-blob-reader/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.348.0.tgz", + "integrity": "sha512-19ShUJL/Kqol4pW2S6axD85oL2JIh91ctUgqPEuu5BzGyEgq5s+HP/DDNzcdsTKl7gfCfaIULf01yWU6RwY1EA==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.348.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/credential-provider-node": "3.348.0", + "@aws-sdk/eventstream-serde-browser": "3.347.0", + "@aws-sdk/eventstream-serde-config-resolver": "3.347.0", + "@aws-sdk/eventstream-serde-node": "3.347.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-blob-browser": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/hash-stream-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/md5-js": "3.347.0", + "@aws-sdk/middleware-bucket-endpoint": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-expect-continue": "3.347.0", + "@aws-sdk/middleware-flexible-checksums": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-location-constraint": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-sdk-s3": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-signing": "3.347.0", + "@aws-sdk/middleware-ssec": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/signature-v4-multi-region": "3.347.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-stream-browser": "3.347.0", + "@aws-sdk/util-stream-node": "3.348.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/util-waiter": "3.347.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "fast-xml-parser": "4.2.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.348.0.tgz", + "integrity": "sha512-5S23gVKBl0fhZ96RD8LdPhMKeh8E5fmebyZxMNZuWliSXz++Q9ZCrwPwQbkks3duPOTcKKobs3IoqP82HoXMvQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.348.0.tgz", + "integrity": "sha512-tvHpcycx4EALvk38I9rAOdPeHvBDezqIB4lrE7AvnOJljlvCcdQ2gXa9GDrwrM7zuYBIZMBRE/njTMrCwoOdAA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.348.0.tgz", + "integrity": "sha512-4iaQlWAOHMEF4xjR/FB/ws3aUjXjJHwbsIcqbdYAxsKijDYYTZYCPc/gM0NE1yi28qlNYNhMzHipe5xTYbU2Eg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/credential-provider-node": "3.348.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-sdk-sts": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-signing": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "fast-xml-parser": "4.2.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/config-resolver": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.347.0.tgz", + "integrity": "sha512-2ja+Sf/VnUO7IQ3nKbDQ5aumYKKJUaTm/BuVJ29wNho8wYHfuf7wHZV0pDTkB8RF5SH7IpHap7zpZAj39Iq+EA==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-config-provider": "3.310.0", + "@aws-sdk/util-middleware": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.347.0.tgz", + "integrity": "sha512-UnEM+LKGpXKzw/1WvYEQsC6Wj9PupYZdQOE+e2Dgy2dqk/pVFy4WueRtFXYDT2B41ppv3drdXUuKZRIDVqIgNQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.347.0.tgz", + "integrity": "sha512-7scCy/DCDRLIhlqTxff97LQWDnRwRXji3bxxMg+xWOTTaJe7PWx+etGSbBWaL42vsBHFShQjSLvJryEgoBktpw==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-imds/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.348.0.tgz", + "integrity": "sha512-0IEH5mH/cz2iLyr/+pSa3sCsQcGADiLSEn6yivsXdfz1zDqBiv+ffDoL0+Pvnp+TKf8sA6OlX8PgoMoEBvBdKw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.347.0", + "@aws-sdk/credential-provider-imds": "3.347.0", + "@aws-sdk/credential-provider-process": "3.347.0", + "@aws-sdk/credential-provider-sso": "3.348.0", + "@aws-sdk/credential-provider-web-identity": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=14.0.0" } }, - "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.348.0.tgz", + "integrity": "sha512-ngRWphm9e36i58KqVi7Z8WOub+k0cSl+JZaAmgfFm0+dsfBG5uheo598OeiwWV0DqlilvaQZFaMVQgG2SX/tHg==", "dependencies": { - "@babel/types": "^7.21.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@aws-sdk/credential-provider-env": "3.347.0", + "@aws-sdk/credential-provider-imds": "3.347.0", + "@aws-sdk/credential-provider-ini": "3.348.0", + "@aws-sdk/credential-provider-process": "3.347.0", + "@aws-sdk/credential-provider-sso": "3.348.0", + "@aws-sdk/credential-provider-web-identity": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.347.0.tgz", + "integrity": "sha512-yl1z4MsaBdXd4GQ2halIvYds23S67kElyOwz7g8kaQ4kHj+UoYWxz3JVW/DGusM6XmQ9/F67utBrUVA0uhQYyw==", "dependencies": { - "@babel/types": "^7.18.6" + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.348.0.tgz", + "integrity": "sha512-5cQao705376KgGkLv9xgkQ3T5H7KdNddWuyoH2wDcrHd1BA2Lnrell3Yyh7R6jQeV7uCQE/z0ugUOKhDqNKIqQ==", "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "@aws-sdk/client-sso": "3.348.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/token-providers": "3.348.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.347.0.tgz", + "integrity": "sha512-DxoTlVK8lXjS1zVphtz/Ab+jkN/IZor9d6pP2GjJHNoAIIzXfRwwj5C8vr4eTayx/5VJ7GRP91J8GJ2cKly8Qw==", "dependencies": { - "yallist": "^3.0.2" + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@aws-sdk/eventstream-codec": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.347.0.tgz", + "integrity": "sha512-61q+SyspjsaQ4sdgjizMyRgVph2CiW4aAtfpoH69EJFJfTxTR/OqnZ9Jx/3YiYi0ksrvDenJddYodfWWJqD8/w==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-hex-encoding": "3.310.0", + "tslib": "^2.5.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, + "node_modules/@aws-sdk/eventstream-codec/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/eventstream-serde-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.347.0.tgz", + "integrity": "sha512-9BLVTHWgpiTo/hl+k7qt7E9iYu43zVwJN+4TEwA9ZZB3p12068t1Hay6HgCcgJC3+LWMtw/OhvypV6vQAG4UBg==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@aws-sdk/eventstream-serde-universal": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, + "node_modules/@aws-sdk/eventstream-serde-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.347.0.tgz", + "integrity": "sha512-RcXQbNVq0PFmDqfn6+MnjCUWbbobcYVxpimaF6pMDav04o6Mcle+G2Hrefp5NlFr/lZbHW2eUKYsp1sXPaxVlQ==", "dependencies": { - "@babel/types": "^7.18.6" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, + "node_modules/@aws-sdk/eventstream-serde-config-resolver/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/eventstream-serde-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.347.0.tgz", + "integrity": "sha512-pgQCWH0PkHjcHs04JE7FoGAD3Ww45ffV8Op0MSLUhg9OpGa6EDoO3EOpWi9l/TALtH4f0KRV35PVyUyHJ/wEkA==", "dependencies": { - "@babel/types": "^7.21.4" + "@aws-sdk/eventstream-serde-universal": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", - "dev": true, + "node_modules/@aws-sdk/eventstream-serde-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/eventstream-serde-universal": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.347.0.tgz", + "integrity": "sha512-4wWj6bz6lOyDIO/dCCjwaLwRz648xzQQnf89R29sLoEqvAPP5XOB7HL+uFaQ/f5tPNh49gL6huNFSVwDm62n4Q==", "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@aws-sdk/eventstream-codec": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@aws-sdk/eventstream-serde-universal/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.347.0.tgz", + "integrity": "sha512-sQ5P7ivY8//7wdxfA76LT1sF6V2Tyyz1qF6xXf9sihPN5Q1Y65c+SKpMzXyFSPqWZ82+SQQuDliYZouVyS6kQQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/querystring-builder": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "tslib": "^2.5.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", - "dev": true, + "node_modules/@aws-sdk/fetch-http-handler/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/hash-blob-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.347.0.tgz", + "integrity": "sha512-RxgstIldLsdJKN5UHUwSI9PMiatr0xKmKxS4+tnWZ1/OOg6wuWqqpDpWdNOVSJSpxpUaP6kRrvG5Yo5ZevoTXw==", "dependencies": { - "@babel/types": "^7.21.5" + "@aws-sdk/chunked-blob-reader": "3.310.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/hash-blob-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/hash-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.347.0.tgz", + "integrity": "sha512-96+ml/4EaUaVpzBdOLGOxdoXOjkPgkoJp/0i1fxOJEvl8wdAQSwc3IugVK9wZkCxy2DlENtgOe6DfIOhfffm/g==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-buffer-from": "3.310.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, + "node_modules/@aws-sdk/hash-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/hash-stream-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.347.0.tgz", + "integrity": "sha512-tOBfcvELyt1GVuAlQ4d0mvm3QxoSSmvhH15SWIubM9RP4JWytBVzaFAn/aC02DBAWyvp0acMZ5J+47mxrWJElg==", "dependencies": { - "@babel/types": "^7.18.6" + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@aws-sdk/hash-stream-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/invalid-dependency": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.347.0.tgz", + "integrity": "sha512-8imQcwLwqZ/wTJXZqzXT9pGLIksTRckhGLZaXT60tiBOPKuerTsus2L59UstLs5LP8TKaVZKFFSsjRIn9dQdmQ==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, + "node_modules/@aws-sdk/invalid-dependency/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", + "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "dependencies": { + "tslib": "^2.5.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@aws-sdk/is-array-buffer/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/md5-js": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.347.0.tgz", + "integrity": "sha512-mChE+7DByTY9H4cQ6fnWp2x5jf8e6OZN+AdLp6WQ+W99z35zBeqBxVmgm8ziJwkMIrkSTv9j3Y7T9Ve3RIcSfg==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" } }, - "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", - "dev": true, + "node_modules/@aws-sdk/md5-js/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.347.0.tgz", + "integrity": "sha512-i9n4ylkGmGvizVcTfN4L+oN10OCL2DKvyMa4cCAVE1TJrsnaE0g7IOOyJGUS8p5KJYQrKVR7kcsa2L1S0VeEcA==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@aws-sdk/util-config-provider": "3.310.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-content-length": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.347.0.tgz", + "integrity": "sha512-i4qtWTDImMaDUtwKQPbaZpXsReiwiBomM1cWymCU4bhz81HL01oIxOxOBuiM+3NlDoCSPr3KI6txZSz/8cqXCQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "node_modules/@aws-sdk/middleware-content-length/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-endpoint": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.347.0.tgz", + "integrity": "sha512-unF0c6dMaUL1ffU+37Ugty43DgMnzPWXr/Jup/8GbK5fzzWT5NQq6dj9KHPubMbWeEjQbmczvhv25JuJdK8gNQ==", + "dependencies": { + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-middleware": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-endpoint/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.347.0.tgz", + "integrity": "sha512-95M1unD1ENL0tx35dfyenSfx0QuXBSKtOi/qJja6LfX5771C5fm5ZTOrsrzPFJvRg/wj8pCOVWRZk+d5+jvfOQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz", - "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==", - "dev": true, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.347.0.tgz", + "integrity": "sha512-Pda7VMAIyeHw9nMp29rxdFft3EF4KP/tz/vLB6bqVoBNbLujo5rxn3SGOgStgIz7fuMLQQfoWIsmvxUm+Fp+Dw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/types": "^7.21.5" + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/is-array-buffer": "3.310.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.347.0.tgz", + "integrity": "sha512-kpKmR9OvMlnReqp5sKcJkozbj1wmlblbVSbnQAIkzeQj2xD5dnVR3Nn2ogQKxSmU1Fv7dEroBtrruJ1o3fY38A==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", - "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", - "dev": true, + "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.347.0.tgz", + "integrity": "sha512-x5fcEV7q8fQ0OmUO+cLhN5iPqGoLWtC3+aKHIfRRb2BpOO1khyc1FKzsIAdeQz2hfktq4j+WsrmcPvFKv51pSg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.347.0.tgz", + "integrity": "sha512-NYC+Id5UCkVn+3P1t/YtmHt75uED06vwaKyxDy0UmB2K66PZLVtwWbLpVWrhbroaw1bvUHYcRyQ9NIfnVcXQjA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.17.2", - "license": "MIT", + "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.347.0.tgz", + "integrity": "sha512-qfnSvkFKCAMjMHR31NdsT0gv5Sq/ZHTUD4yQsSLpbVQ6iYAS834lrzXt41iyEHt57Y514uG7F/Xfvude3u4icQ==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.15.3", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-retry": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.347.0.tgz", + "integrity": "sha512-CpdM+8dCSbX96agy4FCzOfzDmhNnGBM/pxrgIVLm5nkYTLuXp/d7ubpFEUHULr+4hCd5wakHotMt7yO29NFaVw==", "dependencies": { - "core-js-pure": "^3.16.0", - "regenerator-runtime": "^0.13.4" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/service-error-classification": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-middleware": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, + "node_modules/@aws-sdk/middleware-retry/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.347.0.tgz", + "integrity": "sha512-TLr92+HMvamrhJJ0VDhA/PiUh4rTNQz38B9dB9ikohTaRgm+duP+mRiIv16tNPZPGl8v82Thn7Ogk2qPByNDtg==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.347.0.tgz", + "integrity": "sha512-38LJ0bkIoVF3W97x6Jyyou72YV9Cfbml4OaDEdnrCOo0EssNZM5d7RhjMvQDwww7/3OBY/BzeOcZKfJlkYUXGw==", "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@aws-sdk/middleware-signing": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-serde": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.347.0.tgz", + "integrity": "sha512-x5Foi7jRbVJXDu9bHfyCbhYDH5pKK+31MmsSJ3k8rY8keXLBxm2XEEg/AIoV9/TUF9EeVvZ7F1/RmMpJnWQsEg==", "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@ctrl/tinycolor": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } + "node_modules/@aws-sdk/middleware-serde/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.347.0.tgz", + "integrity": "sha512-zVBF/4MGKnvhAE/J+oAL/VAehiyv+trs2dqSQXwHou9j8eA8Vm8HS2NdOwpkZQchIxTuwFlqSusDuPEdYFbvGw==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/signature-v4": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-middleware": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=14.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.11.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-signing/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.347.0.tgz", + "integrity": "sha512-467VEi2elPmUGcHAgTmzhguZ3lwTpwK+3s+pk312uZtVsS9rP1MAknYhpS3ZvssiqBUVPx8m29cLcC6Tx5nOJg==", "dependencies": { - "type-fest": "^0.20.2" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@aws-sdk/middleware-ssec/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@fingerprintjs/fingerprintjs": { - "version": "3.3.3", - "license": "MIT", + "node_modules/@aws-sdk/middleware-stack": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.347.0.tgz", + "integrity": "sha512-Izidg4rqtYMcKuvn2UzgEpPLSmyd8ub9+LQ2oIzG3mpIzCBITq7wp40jN1iNkMg+X6KEnX9vdMJIYZsPYMCYuQ==", "dependencies": { - "tslib": "^2.0.1" + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@fingerprintjs/fingerprintjs/node_modules/tslib": { - "version": "2.3.1", - "license": "0BSD" - }, - "node_modules/@floating-ui/core": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", - "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" + "node_modules/@aws-sdk/middleware-stack/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@floating-ui/dom": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", - "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.347.0.tgz", + "integrity": "sha512-wJbGN3OE1/daVCrwk49whhIr9E0j1N4gWwN/wi4WuyYIA+5lMUfVp0aGIOvZR+878DxuFz2hQ4XcZVT4K2WvQw==", "dependencies": { - "@floating-ui/core": "^0.7.3" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@floating-ui/react-dom": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", - "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/node-config-provider": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.347.0.tgz", + "integrity": "sha512-faU93d3+5uTTUcotGgMXF+sJVFjrKh+ufW+CzYKT4yUHammyaIab/IbTPWy2hIolcEGtuPeVoxXw8TXbkh/tuw==", "dependencies": { - "@floating-ui/dom": "^0.5.3", - "use-isomorphic-layout-effect": "^1.1.1" + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/node-config-provider/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/node-http-handler": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.348.0.tgz", + "integrity": "sha512-wxdgc4tO5F6lN4wHr0CZ4TyIjDW/ORp4SJZdWYNs2L5J7+/SwqgJY2lxRlGi0i7Md+apAdE3sT3ukVQ/9pVfPg==", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@aws-sdk/abort-controller": "3.347.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/querystring-builder": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=14.0.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/@aws-sdk/node-http-handler/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, + "node_modules/@aws-sdk/property-provider": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.347.0.tgz", + "integrity": "sha512-t3nJ8CYPLKAF2v9nIHOHOlF0CviQbTvbFc2L4a+A+EVd/rM4PzL3+3n8ZJsr0h7f6uD04+b5YRFgKgnaqLXlEg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, + "node_modules/@aws-sdk/property-provider/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.347.0.tgz", + "integrity": "sha512-2YdBhc02Wvy03YjhGwUxF0UQgrPWEy8Iq75pfS42N+/0B/+eWX1aQgfjFxIpLg7YSjT5eKtYOQGlYd4MFTgj9g==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, + "node_modules/@aws-sdk/protocol-http/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/querystring-builder": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.347.0.tgz", + "integrity": "sha512-phtKTe6FXoV02MoPkIVV6owXI8Mwr5IBN3bPoxhcPvJG2AjEmnetSIrhb8kwc4oNhlwfZwH6Jo5ARW/VEWbZtg==", + "dependencies": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-uri-escape": "3.310.0", + "tslib": "^2.5.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "node_modules/@aws-sdk/querystring-builder/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, + "node_modules/@aws-sdk/querystring-parser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.347.0.tgz", + "integrity": "sha512-5VXOhfZz78T2W7SuXf2avfjKglx1VZgZgp9Zfhrt/Rq+MTu2D+PZc5zmJHhYigD7x83jLSLogpuInQpFMA9LgA==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" + "node_modules/@aws-sdk/querystring-parser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.348.0.tgz", + "integrity": "sha512-mldyh97l7RKG+wgK2cAgqO42WkAmXhU7rkFt6IKUO0OERGvLH3kjctAN9tL7esKzYmslnaGD7r+dnP67ElQWWg==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/signature-v4-multi-region": "3.347.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-format-url": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/s3-request-presigner/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/service-error-classification": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.347.0.tgz", + "integrity": "sha512-xZ3MqSY81Oy2gh5g0fCtooAbahqh9VhsF8vcKjVX8+XPbGC8y+kej82+MsMg4gYL8gRFB9u4hgYbNgIS6JTAvg==", "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.347.0.tgz", + "integrity": "sha512-Xw+zAZQVLb+xMNHChXQ29tzzLqm3AEHsD8JJnlkeFjeMnWQtXdUfOARl5s8NzAppcKQNlVe2gPzjaKjoy2jz1Q==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/primitive": { - "version": "0.0.5", - "license": "MIT", + "node_modules/@aws-sdk/shared-ini-file-loader/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/signature-v4": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.347.0.tgz", + "integrity": "sha512-58Uq1do+VsTHYkP11dTK+DF53fguoNNJL9rHRWhzP+OcYv3/mBMLoS2WPz/x9FO5mBg4ESFsug0I6mXbd36tjw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@aws-sdk/eventstream-codec": "3.347.0", + "@aws-sdk/is-array-buffer": "3.310.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-hex-encoding": "3.310.0", + "@aws-sdk/util-middleware": "3.347.0", + "@aws-sdk/util-uri-escape": "3.310.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", - "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.347.0.tgz", + "integrity": "sha512-838h7pbRCVYWlTl8W+r5+Z5ld7uoBObgAn7/RB1MQ4JjlkfLdN7emiITG6ueVL+7gWZNZc/4dXR/FJSzCgrkxQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.1" + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/signature-v4": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } } }, - "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/signature-v4/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/smithy-client": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.347.0.tgz", + "integrity": "sha512-PaGTDsJLGK0sTjA6YdYQzILRlPRN3uVFyqeBUkfltXssvUzkm8z2t1lz2H4VyJLAhwnG5ZuZTNEV/2mcWrU7JQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-0.1.5.tgz", - "integrity": "sha512-M8Y4dSXsKSbF+FryG5VvZKr/1MukMVG7swq9p5s7wYb8Rvn0UM0rQ5w8BWmSWSV4BL/gbJdhwVCznwXXlgZRZg==", + "node_modules/@aws-sdk/smithy-client/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.348.0.tgz", + "integrity": "sha512-nTjoJkUsJUrJTZuqaeMD9PW2//Rdg2HgfDjiyC4jmAXtayWYCi11mqauurMaUHJ3p5qJ8f5xzxm6vBTbrftPag==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-label": "0.1.5", - "@radix-ui/react-presence": "0.1.2", - "@radix-ui/react-primitive": "0.1.4", - "@radix-ui/react-use-controllable-state": "0.1.0", - "@radix-ui/react-use-previous": "0.1.1", - "@radix-ui/react-use-size": "0.1.1" + "@aws-sdk/client-sso-oidc": "3.348.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/primitive": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-0.1.0.tgz", - "integrity": "sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA==", + "node_modules/@aws-sdk/token-providers/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/types": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.347.0.tgz", + "integrity": "sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-compose-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", - "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", + "node_modules/@aws-sdk/types/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/url-parser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.347.0.tgz", + "integrity": "sha512-lhrnVjxdV7hl+yCnJfDZOaVLSqKjxN20MIOiijRiqaWGLGEAiSqBreMhL89X1WKCifxAs4zZf9YB9SbdziRpAA==", "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "@aws-sdk/querystring-parser": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-context": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", - "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", + "node_modules/@aws-sdk/url-parser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-presence": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-0.1.2.tgz", - "integrity": "sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw==", + "node_modules/@aws-sdk/util-arn-parser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-base64": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", + "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": ">=16.8" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", - "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", + "node_modules/@aws-sdk/util-base64/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", + "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "tslib": "^2.5.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", - "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", + "node_modules/@aws-sdk/util-body-length-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-body-length-node": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", + "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-callback-ref": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz", - "integrity": "sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw==", + "node_modules/@aws-sdk/util-body-length-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", + "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@aws-sdk/is-array-buffer": "3.310.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-controllable-state": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz", - "integrity": "sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg==", + "node_modules/@aws-sdk/util-buffer-from/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-config-provider": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", + "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", - "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", + "node_modules/@aws-sdk/util-config-provider/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-defaults-mode-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.347.0.tgz", + "integrity": "sha512-+JHFA4reWnW/nMWwrLKqL2Lm/biw/Dzi/Ix54DAkRZ08C462jMKVnUlzAI+TfxQE3YLm99EIa0G7jiEA+p81Qw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz", - "integrity": "sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA==", + "node_modules/@aws-sdk/util-defaults-mode-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-defaults-mode-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.347.0.tgz", + "integrity": "sha512-A8BzIVhAAZE5WEukoAN2kYebzTc99ZgncbwOmgCCbvdaYlk5tzguR/s+uoT4G0JgQGol/4hAMuJEl7elNgU6RQ==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/credential-provider-imds": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.1.tgz", - "integrity": "sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==", + "node_modules/@aws-sdk/util-defaults-mode-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.347.0.tgz", + "integrity": "sha512-/WUkirizeNAqwVj0zkcrqdQ9pUm1HY5kU+qy7xTR0OebkuJauglkmSTMD+56L1JPunWqHhlwCMVRaz5eaJdSEQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-slot": "1.0.1" + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.347.0.tgz", + "integrity": "sha512-y9UUEmWu0IBoMZ25NVjCCOwvAEa+xJ54WfiCsgwKeFyTHWYY2wZqJfARJtme/ezqrRa8neOcBJSVxjfJJegW+w==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@aws-sdk/querystring-builder": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", - "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "node_modules/@aws-sdk/util-format-url/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", + "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-context": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", - "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "node_modules/@aws-sdk/util-hex-encoding/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.2.tgz", - "integrity": "sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==", + "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-middleware": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.347.0.tgz", + "integrity": "sha512-8owqUA3ePufeYTUvlzdJ7Z0miLorTwx+rNol5lourGQZ9JXsVMo23+yGA7nOlFuXSGkoKpMOtn6S0BT2bcfeiw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.2", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.1", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-portal": "1.0.1", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-slot": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "node_modules/@aws-sdk/util-middleware/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-retry": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.347.0.tgz", + "integrity": "sha512-NxnQA0/FHFxriQAeEgBonA43Q9/VPFQa8cfJDuT2A1YZruMasgjcltoZszi1dvoIRWSZsFTW42eY2gdOd0nffQ==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@aws-sdk/service-error-classification": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", - "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", + "node_modules/@aws-sdk/util-retry/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-stream-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.347.0.tgz", + "integrity": "sha512-pIbmzIJfyX26qG622uIESOmJSMGuBkhmNU7I98bzhYCet5ctC0ow9L5FZw9ljOE46P/HkEcsOhh+qTHyCXlCEQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-hex-encoding": "3.310.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@aws-sdk/util-stream-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-stream-node": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.348.0.tgz", + "integrity": "sha512-MFXyMUWA2oD0smBZf+sdnuyxLw8nCqyMEgYbos+6grvF1Szxn5+zbYTZrEBYiICqD1xJRLbWTzFLJU7oYm6pUg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "node_modules/@aws-sdk/util-stream-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-uri-escape": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", + "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", - "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "node_modules/@aws-sdk/util-uri-escape/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.347.0.tgz", + "integrity": "sha512-ydxtsKVtQefgbk1Dku1q7pMkjDYThauG9/8mQkZUAVik55OUZw71Zzr3XO8J8RKvQG8lmhPXuAQ0FKAyycc0RA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "@aws-sdk/types": "3.347.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", - "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.347.0.tgz", + "integrity": "sha512-6X0b9qGsbD1s80PmbaB6v1/ZtLfSx6fjRX8caM7NN0y/ObuLoX8LhYnW6WlB2f1+xb4EjaCNgpP/zCf98MXosw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.2.tgz", - "integrity": "sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-utf8": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", + "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-escape-keydown": "1.0.2" + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.3.1" } }, - "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-utf8/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/util-waiter": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.347.0.tgz", + "integrity": "sha512-3ze/0PkwkzUzLncukx93tZgGL0JX9NaP8DxTi6WzflnL/TEul5Z63PCruRNK0om17iZYAWKrf8q2mFoHYb4grA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@aws-sdk/abort-controller": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "node_modules/@aws-sdk/util-waiter/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "tslib": "^2.5.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.1.tgz", - "integrity": "sha512-WDZqmwsNuxdBMkvgB85UeSPAT0wSBd+ojxtzX7lU7uYYh47gacCj6Spo0l9+X4TMe3JA1BBMN9c7OhIMaQeKbg==", + "node_modules/@aws-sdk/xml-builder/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-menu": "2.0.1", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.0" + "@babel/highlight": "^7.18.6" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", - "dependencies": { - "@babel/runtime": "^7.13.10" + "node_modules/@babel/compat-data": { + "version": "7.21.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", + "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "dev": true, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@babel/core": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "node_modules/@babel/generator": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", + "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/types": "^7.21.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", - "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" + "@babel/types": "^7.18.6" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", - "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", + "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/compat-data": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "@babel/core": "^7.0.0" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.1.tgz", - "integrity": "sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "yallist": "^3.0.2" } }, - "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", + "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/types": "^7.18.6" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-icons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.1.0.tgz", - "integrity": "sha512-nhctV9YKN8G4HfkS3p03ml+osTBDMGKImaAJTm666hymtaWEgIPiqL7F53ivDqIO4A+20ERwUiiKJ8h3XK7uAg==", - "peerDependencies": { - "react": "^16.x || ^17.x" + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", - "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", + "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.0" + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-id/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", - "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", + "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", + "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/types": "^7.21.5" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-label": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-0.1.5.tgz", - "integrity": "sha512-Au9+n4/DhvjR0IHhvZ1LPdx/OW+3CGDie30ZyCkbSHIuLp4/CV4oPPGBwJ1vY99Jog3zyQhsGww9MXj8O9Aj/A==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-id": "0.1.5", - "@radix-ui/react-primitive": "0.1.4" + "@babel/types": "^7.18.6" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-compose-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", - "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", + "node_modules/@babel/helper-string-parser": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", + "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-context": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", - "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-id": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.1.5.tgz", - "integrity": "sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.1.0" + "node_modules/@babel/parser": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", + "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" }, - "peerDependencies": { - "react": "^16.8 || ^17.0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", - "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.2" + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-slot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", - "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz", + "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", - "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.1.tgz", - "integrity": "sha512-I5FFZQxCl2fHoJ7R0m5/oWA9EX8/ttH4AbgneoCH7DAXQioFeb0XMAYnOVSp1GgJZ1Nx/mohxNQSeTMcaF1YPw==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", + "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-collection": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.2", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.1", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-popper": "1.0.1", - "@radix-ui/react-portal": "1.0.1", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-roving-focus": "1.0.1", - "@radix-ui/react-slot": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", - "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.1" + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@babel/runtime": { + "version": "7.17.2", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "regenerator-runtime": "^0.13.4" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "node_modules/@babel/runtime-corejs3": { + "version": "7.15.3", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-polymorphic": { - "version": "0.0.13", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17.0" + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-popover": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.3.tgz", - "integrity": "sha512-YwedSukfWsyJs3/yP3yXUq44k4/JBe3jqU63Z8v2i19qZZ3dsx32oma17ztgclWPNuqp3A+Xa9UiDlZHyVX8Vg==", + "node_modules/@babel/traverse": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", + "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.2", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.1", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-popper": "1.1.0", - "@radix-ui/react-portal": "1.0.1", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-slot": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.5", + "@babel/types": "^7.21.5", + "debug": "^4.1.0", + "globals": "^11.1.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "node_modules/@babel/types": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/helper-string-parser": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.0.tgz", - "integrity": "sha512-07U7jpI0dZcLRAxT7L9qs6HecSoPhDSJybF7mEGHJDBDv+ZoGCvIlva0s+WxMXwJEav+ckX3hAlXBtnHmuvlCQ==", + "node_modules/@ctrl/tinycolor": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "0.7.2", - "@radix-ui/react-arrow": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0", - "@radix-ui/react-use-rect": "1.0.0", - "@radix-ui/react-use-size": "1.0.0", - "@radix-ui/rect": "1.0.0" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-portal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", - "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.11.0", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.1" + "type-fest": "^0.20.2" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "node_modules/@fingerprintjs/fingerprintjs": { + "version": "3.3.3", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "tslib": "^2.0.1" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", - "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "node_modules/@fingerprintjs/fingerprintjs/node_modules/tslib": { + "version": "2.3.1", + "license": "0BSD" + }, + "node_modules/@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" + }, + "node_modules/@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "@floating-ui/core": "^0.7.3" } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", - "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "node_modules/@floating-ui/react-dom": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", + "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@floating-ui/dom": "^0.5.3", + "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.1.tgz", - "integrity": "sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "0.7.2", - "@radix-ui/react-arrow": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.0", - "@radix-ui/react-use-rect": "1.0.0", - "@radix-ui/react-use-size": "1.0.0", - "@radix-ui/rect": "1.0.0" + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", - "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.1" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", - "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@radix-ui/react-portal": { - "version": "0.0.15", + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@microsoft/fetch-event-source": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", + "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-layout-effect": "0.0.5" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", - "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "engines": { + "node": ">= 8" } }, - "node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", - "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "node_modules/@radix-ui/primitive": { + "version": "0.0.5", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "0.0.15", - "license": "MIT", + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13" + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-radio-group": { + "node_modules/@radix-ui/react-checkbox": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-0.1.5.tgz", - "integrity": "sha512-ybgHsmh/V2crKvK6xZ56dpPul7b+vyxcq7obWqHbr5W6Ca11wdm0E7lS0i/Y6pgfIKYOWIARmZYDpRMEeRCPOw==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-0.1.5.tgz", + "integrity": "sha512-M8Y4dSXsKSbF+FryG5VvZKr/1MukMVG7swq9p5s7wYb8Rvn0UM0rQ5w8BWmSWSV4BL/gbJdhwVCznwXXlgZRZg==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/primitive": "0.1.0", @@ -1627,7 +2464,6 @@ "@radix-ui/react-label": "0.1.5", "@radix-ui/react-presence": "0.1.2", "@radix-ui/react-primitive": "0.1.4", - "@radix-ui/react-roving-focus": "0.1.5", "@radix-ui/react-use-controllable-state": "0.1.0", "@radix-ui/react-use-previous": "0.1.1", "@radix-ui/react-use-size": "0.1.1" @@ -1636,7 +2472,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/primitive": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/primitive": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-0.1.0.tgz", "integrity": "sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA==", @@ -1644,22 +2480,7 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-collection": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-0.1.4.tgz", - "integrity": "sha512-3muGI15IdgaDFjOcO7xX8a35HQRBRF6LH9pS6UCeZeRmbslkVeHyJRQr2rzICBUoX7zgIA0kXyMDbpQnJGyJTA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-primitive": "0.1.4", - "@radix-ui/react-slot": "0.1.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-compose-refs": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-compose-refs": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", @@ -1670,7 +2491,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-context": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-context": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", @@ -1681,19 +2502,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-id": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.1.5.tgz", - "integrity": "sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-presence": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-presence": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-0.1.2.tgz", "integrity": "sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw==", @@ -1706,7 +2515,7 @@ "react": ">=16.8" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-primitive": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", @@ -1718,26 +2527,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-roving-focus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-0.1.5.tgz", - "integrity": "sha512-ClwKPS5JZE+PaHCoW7eu1onvE61pDv4kO8W4t5Ra3qMFQiTJLZMdpBQUhksN//DaVygoLirz4Samdr5Y1x1FSA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-collection": "0.1.4", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-id": "0.1.5", - "@radix-ui/react-primitive": "0.1.4", - "@radix-ui/react-use-callback-ref": "0.1.0", - "@radix-ui/react-use-controllable-state": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", @@ -1749,7 +2539,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-callback-ref": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-callback-ref": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz", "integrity": "sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw==", @@ -1760,7 +2550,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-controllable-state": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-controllable-state": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz", "integrity": "sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg==", @@ -1772,7 +2562,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-layout-effect": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-layout-effect": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", @@ -1783,7 +2573,7 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-size": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-size": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz", "integrity": "sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA==", @@ -1794,28 +2584,84 @@ "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-roving-focus": { + "node_modules/@radix-ui/react-collection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.1.tgz", - "integrity": "sha512-TB76u5TIxKpqMpUAuYH2VqMhHYKa+4Vs1NHygo/llLvlffN6mLVsFhz0AnSFlSBAvTBYVHYAkHAyEt7x1gPJOA==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.1.tgz", + "integrity": "sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-collection": "1.0.1", "@radix-ui/react-compose-refs": "1.0.0", "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-direction": "1.0.0", - "@radix-ui/react-id": "1.0.0", "@radix-ui/react-primitive": "1.0.1", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-controllable-state": "1.0.0" + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/primitive": { + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.2.tgz", + "integrity": "sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", @@ -1823,7 +2669,20 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", + "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", @@ -1836,7 +2695,7 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-callback-ref": { + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-callback-ref": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", @@ -1847,7 +2706,7 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-controllable-state": { + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-controllable-state": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", @@ -1859,525 +2718,483 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", - "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "node_modules/@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-toggle": { - "version": "0.0.10", - "license": "MIT", + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.2.tgz", + "integrity": "sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-controllable-state": "0.0.6" + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.6.tgz", - "integrity": "sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==", + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.2", - "@radix-ui/react-portal": "1.0.3", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@floating-ui/core": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", - "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==" - }, - "node_modules/@radix-ui/react-tooltip/node_modules/@floating-ui/dom": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.9.tgz", - "integrity": "sha512-sosQxsqgxMNkV3C+3UqTS6LxP7isRLwX8WMepp843Rb3/b0Wz8+MdUkxJksByip3C2WwLugLHN1b4ibn//zKwQ==", + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", "dependencies": { - "@floating-ui/core": "^1.2.6" + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@floating-ui/react-dom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.0.tgz", - "integrity": "sha512-Ke0oU3SeuABC2C4OFu2mSAwHIP5WUiV98O9YWoHV4Q5aT6E9k06DV0Khi5uYspR8xmmBk08t8ZDcz3TR3ARkEg==", + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.1.tgz", + "integrity": "sha512-WDZqmwsNuxdBMkvgB85UeSPAT0wSBd+ojxtzX7lU7uYYh47gacCj6Spo0l9+X4TMe3JA1BBMN9c7OhIMaQeKbg==", "dependencies": { - "@floating-ui/dom": "^1.2.7" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "2.0.1", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", "dependencies": { "@babel/runtime": "^7.13.10" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.1.tgz", + "integrity": "sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-id": { + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", - "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", - "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", + "node_modules/@radix-ui/react-icons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.1.0.tgz", + "integrity": "sha512-nhctV9YKN8G4HfkS3p03ml+osTBDMGKImaAJTm666hymtaWEgIPiqL7F53ivDqIO4A+20ERwUiiKJ8h3XK7uAg==", + "peerDependencies": { + "react": "^16.x || ^17.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-use-layout-effect": "1.0.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "node_modules/@radix-ui/react-id/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "node_modules/@radix-ui/react-label": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-0.1.5.tgz", + "integrity": "sha512-Au9+n4/DhvjR0IHhvZ1LPdx/OW+3CGDie30ZyCkbSHIuLp4/CV4oPPGBwJ1vY99Jog3zyQhsGww9MXj8O9Aj/A==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-context": "0.1.1", + "@radix-ui/react-id": "0.1.5", + "@radix-ui/react-primitive": "0.1.4" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-compose-refs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", + "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-context": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", + "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-id": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.1.5.tgz", + "integrity": "sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-layout-effect": "0.1.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", + "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-slot": "0.1.2" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-slot": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", + "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-use-layout-effect": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", + "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "node_modules/@radix-ui/react-menu": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.1.tgz", + "integrity": "sha512-I5FFZQxCl2fHoJ7R0m5/oWA9EX8/ttH4AbgneoCH7DAXQioFeb0XMAYnOVSp1GgJZ1Nx/mohxNQSeTMcaF1YPw==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.1", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-roving-focus": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-size": { + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", + "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-primitive": "1.0.1" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/rect": { + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "0.0.5", - "license": "MIT", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "0.0.6", + "node_modules/@radix-ui/react-polymorphic": { + "version": "0.0.13", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.0.5" - }, "peerDependencies": { "react": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", - "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", + "node_modules/@radix-ui/react-popover": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.3.tgz", + "integrity": "sha512-YwedSukfWsyJs3/yP3yXUq44k4/JBe3jqU63Z8v2i19qZZ3dsx32oma17ztgclWPNuqp3A+Xa9UiDlZHyVX8Vg==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-escape-keydown/node_modules/@radix-ui/react-use-callback-ref": { + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/primitive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", "dependencies": { "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.0.tgz", + "integrity": "sha512-07U7jpI0dZcLRAxT7L9qs6HecSoPhDSJybF7mEGHJDBDv+ZoGCvIlva0s+WxMXwJEav+ckX3hAlXBtnHmuvlCQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.0.5", - "license": "MIT", + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-portal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", + "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz", - "integrity": "sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==", + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { - "react": "^16.8 || ^17.0" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-rect": { + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-callback-ref": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", - "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.0" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-size": { + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-controllable-state": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", - "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.0" + "@radix-ui/react-use-callback-ref": "1.0.0" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-use-size/node_modules/@radix-ui/react-use-layout-effect": { + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-layout-effect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", @@ -2388,251 +3205,1152 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "node_modules/@radix-ui/react-popper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.1.tgz", + "integrity": "sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } } }, - "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-compose-refs": { + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, - "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "node_modules/@radix-ui/react-portal": { + "version": "0.0.15", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-polymorphic": "0.0.13", + "@radix-ui/react-primitive": "0.0.15", + "@radix-ui/react-use-layout-effect": "0.0.5" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8 || ^17.0", + "react-dom": "^16.8 || ^17.0" } }, - "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@radix-ui/rect": { + "node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-use-layout-effect": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", - "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", "dependencies": { "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/@react-dnd/asap": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/@react-dnd/invariant": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@react-dnd/shallowequal": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, + "node_modules/@radix-ui/react-primitive": { + "version": "0.0.15", "license": "MIT", "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-polymorphic": "0.0.13" }, - "engines": { - "node": ">= 8.0.0" + "peerDependencies": { + "react": "^16.8 || ^17.0" } }, - "node_modules/@tailwindcss/aspect-ratio": { - "version": "0.2.1", - "dev": true, - "license": "MIT", + "node_modules/@radix-ui/react-radio-group": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-0.1.5.tgz", + "integrity": "sha512-ybgHsmh/V2crKvK6xZ56dpPul7b+vyxcq7obWqHbr5W6Ca11wdm0E7lS0i/Y6pgfIKYOWIARmZYDpRMEeRCPOw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.1.0", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-context": "0.1.1", + "@radix-ui/react-label": "0.1.5", + "@radix-ui/react-presence": "0.1.2", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-roving-focus": "0.1.5", + "@radix-ui/react-use-controllable-state": "0.1.0", + "@radix-ui/react-use-previous": "0.1.1", + "@radix-ui/react-use-size": "0.1.1" + }, "peerDependencies": { - "tailwindcss": ">=2.0.0" + "react": "^16.8 || ^17.0" } }, - "node_modules/@tailwindcss/line-clamp": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz", - "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==", - "dev": true, - "peerDependencies": { - "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/primitive": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-0.1.0.tgz", + "integrity": "sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA==", + "dependencies": { + "@babel/runtime": "^7.13.10" } }, - "node_modules/@tanstack/match-sorter-utils": { - "version": "8.8.4", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz", - "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-collection": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-0.1.4.tgz", + "integrity": "sha512-3muGI15IdgaDFjOcO7xX8a35HQRBRF6LH9pS6UCeZeRmbslkVeHyJRQr2rzICBUoX7zgIA0kXyMDbpQnJGyJTA==", "dependencies": { - "remove-accents": "0.4.2" - }, - "engines": { - "node": ">=12" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-context": "0.1.1", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-slot": "0.1.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kentcdodds" + "peerDependencies": { + "react": "^16.8 || ^17.0" } }, - "node_modules/@tanstack/query-core": { - "version": "4.29.11", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.11.tgz", - "integrity": "sha512-8C+hF6SFAb/TlFZyS9FItgNwrw4PMa7YeX+KQYe2ZAiEz6uzg6yIr+QBzPkUwZ/L0bXvGd1sufTm3wotoz+GwQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-compose-refs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", + "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" } }, - "node_modules/@tanstack/query-persist-client-core": { - "version": "4.29.11", - "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-4.29.11.tgz", - "integrity": "sha512-CSmMZchr+446r79NJ/pjD2yfjqNqFV7k8BnqOq4yTZvXsaQLEIn3tsaU45IsPgs4N7g9OBfPUPDdapSQvck2WQ==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-context": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", + "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", "dependencies": { - "@tanstack/query-core": "4.29.11" + "@babel/runtime": "^7.13.10" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "peerDependencies": { + "react": "^16.8 || ^17.0" } }, - "node_modules/@tanstack/react-query": { - "version": "4.29.12", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.12.tgz", - "integrity": "sha512-zhcN6+zF6cxprxhTHQajHGlvxgK8npnp9uLe9yaWhGc6sYcPWXzyO4raL4HomUzQOPzu3jLvkriJQ7BOrDM8vA==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-id": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.1.5.tgz", + "integrity": "sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==", "dependencies": { - "@tanstack/query-core": "4.29.11", - "use-sync-external-store": "^1.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "0.1.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-native": "*" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "react": "^16.8 || ^17.0" } }, - "node_modules/@tanstack/react-query-devtools": { - "version": "4.29.12", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.12.tgz", - "integrity": "sha512-ug4YGQhMhh6QI8/sWJhjXxuvdeehxf1cyxpTifGMH5qreQ5ECHT6vzqG/aKvADQDzqLBGrF0q4wTDnRRYvvtrA==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-presence": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-0.1.2.tgz", + "integrity": "sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw==", "dependencies": { - "@tanstack/match-sorter-utils": "^8.7.0", - "superjson": "^1.10.0", - "use-sync-external-store": "^1.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-use-layout-effect": "0.1.0" }, "peerDependencies": { - "@tanstack/react-query": "4.29.12", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": ">=16.8" } }, - "node_modules/@tanstack/react-query-persist-client": { - "version": "4.29.12", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-4.29.12.tgz", - "integrity": "sha512-rh6zZJB+3j8lr+YsEkVadnqmUELmqNFZQzGGsHS5col/YOjYsMe9ppqaUjIMJ2aXnFXye50sbe4KxHhSGoaNVw==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-primitive": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", + "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", "dependencies": { - "@tanstack/query-persist-client-core": "4.29.11" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "0.1.2" }, "peerDependencies": { - "@tanstack/react-query": "4.29.12" + "react": "^16.8 || ^17.0" } }, - "node_modules/@tlon/sigil-js": { - "version": "1.4.4", - "license": "MIT", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-roving-focus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-0.1.5.tgz", + "integrity": "sha512-ClwKPS5JZE+PaHCoW7eu1onvE61pDv4kO8W4t5Ra3qMFQiTJLZMdpBQUhksN//DaVygoLirz4Samdr5Y1x1FSA==", "dependencies": { - "invariant": "^2.2.4", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.1.0", + "@radix-ui/react-collection": "0.1.4", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-context": "0.1.1", + "@radix-ui/react-id": "0.1.5", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-callback-ref": "0.1.0", + "@radix-ui/react-use-controllable-state": "0.1.0" }, "peerDependencies": { - "react": "^17" + "react": "^16.8 || ^17.0" } }, - "node_modules/@tloncorp/eslint-config": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@tloncorp/eslint-config/-/eslint-config-0.0.6.tgz", - "integrity": "sha512-yWCjGaArE+hLukZYzfS2mVyKBxawiWeiKg8xtchBflLB4sqy6Cf+ir7V2OEshsQECbkFBgmB6ST2tTCNOdNnbQ==", - "dev": true, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-slot": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", + "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0" + }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "*", + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-callback-ref": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz", + "integrity": "sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-controllable-state": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz", + "integrity": "sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-layout-effect": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", + "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-size": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz", + "integrity": "sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.1.tgz", + "integrity": "sha512-TB76u5TIxKpqMpUAuYH2VqMhHYKa+4Vs1NHygo/llLvlffN6mLVsFhz0AnSFlSBAvTBYVHYAkHAyEt7x1gPJOA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "0.0.10", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.0.5", + "@radix-ui/react-polymorphic": "0.0.13", + "@radix-ui/react-primitive": "0.0.15", + "@radix-ui/react-use-controllable-state": "0.0.6" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.6.tgz", + "integrity": "sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@floating-ui/core": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", + "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==" + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@floating-ui/dom": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.9.tgz", + "integrity": "sha512-sosQxsqgxMNkV3C+3UqTS6LxP7isRLwX8WMepp843Rb3/b0Wz8+MdUkxJksByip3C2WwLugLHN1b4ibn//zKwQ==", + "dependencies": { + "@floating-ui/core": "^1.2.6" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@floating-ui/react-dom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.0.tgz", + "integrity": "sha512-Ke0oU3SeuABC2C4OFu2mSAwHIP5WUiV98O9YWoHV4Q5aT6E9k06DV0Khi5uYspR8xmmBk08t8ZDcz3TR3ARkEg==", + "dependencies": { + "@floating-ui/dom": "^1.2.7" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", + "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", + "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", + "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "0.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "0.0.6", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "0.0.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", + "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-escape-keydown/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "0.0.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz", + "integrity": "sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", + "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", + "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-size/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", + "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@react-dnd/asap": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/@react-dnd/invariant": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.0.1.tgz", + "integrity": "sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==", + "dependencies": { + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@smithy/types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.0.0.tgz", + "integrity": "sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/@tailwindcss/aspect-ratio": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=2.0.0" + } + }, + "node_modules/@tailwindcss/line-clamp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz", + "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==", + "dev": true, + "peerDependencies": { + "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" + } + }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.8.4", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz", + "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==", + "dependencies": { + "remove-accents": "0.4.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kentcdodds" + } + }, + "node_modules/@tanstack/query-core": { + "version": "4.29.11", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.11.tgz", + "integrity": "sha512-8C+hF6SFAb/TlFZyS9FItgNwrw4PMa7YeX+KQYe2ZAiEz6uzg6yIr+QBzPkUwZ/L0bXvGd1sufTm3wotoz+GwQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-persist-client-core": { + "version": "4.29.11", + "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-4.29.11.tgz", + "integrity": "sha512-CSmMZchr+446r79NJ/pjD2yfjqNqFV7k8BnqOq4yTZvXsaQLEIn3tsaU45IsPgs4N7g9OBfPUPDdapSQvck2WQ==", + "dependencies": { + "@tanstack/query-core": "4.29.11" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.29.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.12.tgz", + "integrity": "sha512-zhcN6+zF6cxprxhTHQajHGlvxgK8npnp9uLe9yaWhGc6sYcPWXzyO4raL4HomUzQOPzu3jLvkriJQ7BOrDM8vA==", + "dependencies": { + "@tanstack/query-core": "4.29.11", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "4.29.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.12.tgz", + "integrity": "sha512-ug4YGQhMhh6QI8/sWJhjXxuvdeehxf1cyxpTifGMH5qreQ5ECHT6vzqG/aKvADQDzqLBGrF0q4wTDnRRYvvtrA==", + "dependencies": { + "@tanstack/match-sorter-utils": "^8.7.0", + "superjson": "^1.10.0", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "4.29.12", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tanstack/react-query-persist-client": { + "version": "4.29.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-4.29.12.tgz", + "integrity": "sha512-rh6zZJB+3j8lr+YsEkVadnqmUELmqNFZQzGGsHS5col/YOjYsMe9ppqaUjIMJ2aXnFXye50sbe4KxHhSGoaNVw==", + "dependencies": { + "@tanstack/query-persist-client-core": "4.29.11" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "4.29.12" + } + }, + "node_modules/@tlon/sigil-js": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4", + "svgson": "^4.0.0", + "transformation-matrix": "2.1.1" + }, + "peerDependencies": { + "react": "^17" + } + }, + "node_modules/@tloncorp/eslint-config": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@tloncorp/eslint-config/-/eslint-config-0.0.6.tgz", + "integrity": "sha512-yWCjGaArE+hLukZYzfS2mVyKBxawiWeiKg8xtchBflLB4sqy6Cf+ir7V2OEshsQECbkFBgmB6ST2tTCNOdNnbQ==", + "dev": true, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "*", "@typescript-eslint/parser": "*", "eslint": "*", "eslint-config-airbnb": "*", @@ -3429,6 +5147,11 @@ "node": ">=8" } }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -5390,6 +7113,27 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-xml-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz", + "integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.11.1", "dev": true, @@ -7766,6 +9510,15 @@ "react": "^16.8.0 || ^17 || ^18" } }, + "node_modules/react-image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-image-size/-/react-image-size-2.0.2.tgz", + "integrity": "sha512-j2ZhFsY5n8HAU43ZrhvDOkGBhAY0IJX2DjajmwF+TdXuZ/lGHuhmqj5/88o1M+yL8Un5oNSLjBRH5XikWiiHlA==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "license": "MIT" @@ -7852,337 +9605,580 @@ "react": ">=15" } }, - "node_modules/react-router-dom": { - "version": "5.2.0", + "node_modules/react-router-dom": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/redux": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "node_modules/rename-keys": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "bin": { + "resolve": "bin/resolve" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-style-singleton/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/read-cache": { - "version": "1.0.0", + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "pify": "^2.3.0" + "engines": { + "node": ">=4" } }, - "node_modules/read-pkg": { + "node_modules/resolve-pathname": { "version": "3.0.0", + "license": "MIT" + }, + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg-up": { - "version": "3.0.0", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", + "node_modules/rgb-regex": { + "version": "1.0.1", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "pify": "^3.0.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", + "node_modules/rollup-plugin-analyzer": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/rollup-plugin-visualizer": { + "version": "5.5.2", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "nanoid": "^3.1.22", + "open": "^7.4.2", + "source-map": "^0.7.3", + "yargs": "^16.2.0" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" }, "engines": { - "node": ">= 6" + "node": ">=10.16" + }, + "peerDependencies": { + "rollup": "^2.0.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/run-async": { + "version": "2.4.1", "dev": true, "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">=0.12.0" } }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", + "node_modules/run-parallel": { + "version": "1.2.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", + "node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, "license": "MIT" }, - "node_modules/redux": { - "version": "4.1.2", + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.20.2", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.9.2" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, "license": "MIT" }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", + "node_modules/shebang-command": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", + "node_modules/signal-exit": { + "version": "3.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "dependencies": { + "is-arrayish": "^0.3.1" } }, - "node_modules/remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" }, - "node_modules/rename-keys": { - "version": "1.2.0", + "node_modules/slash": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/require-directory": { - "version": "2.1.1", + "node_modules/slice-ansi": { + "version": "3.0.0", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/require-from-string": { - "version": "2.0.2", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "color-convert": "^2.0.1" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/resolve-pathname": { - "version": "3.0.0", + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, "license": "MIT" }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, + "node_modules/slugify": { + "version": "1.6.0", "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true }, - "node_modules/rimraf": { - "version": "3.0.2", + "node_modules/spdx-correct": { + "version": "3.1.1", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } + "license": "CC-BY-3.0" }, - "node_modules/rollup-plugin-analyzer": { - "version": "4.0.0", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.0.0" + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.5.2", + "node_modules/spdx-license-ids": { + "version": "3.0.10", "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split-on-first": { + "version": "1.1.0", "license": "MIT", - "dependencies": { - "nanoid": "^3.1.22", - "open": "^7.4.2", - "source-map": "^0.7.3", - "yargs": "^16.2.0" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, "engines": { - "node": ">=10.16" - }, - "peerDependencies": { - "rollup": "^2.0.0" + "node": ">=6" } }, - "node_modules/rollup-plugin-visualizer/node_modules/source-map": { - "version": "0.7.3", + "node_modules/sprintf-js": { + "version": "1.0.3", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-3-Clause" + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/run-async": { - "version": "2.4.1", + "node_modules/string_decoder": { + "version": "1.3.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.12.0" + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", "dev": true, "funding": [ { @@ -8198,126 +10194,201 @@ "url": "https://feross.org/support" } ], + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "dev": true, "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rxjs": { - "version": "6.6.7", + "node_modules/stringify-object": { + "version": "3.3.0", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "dependencies": { - "tslib": "^1.9.0" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=4" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", + "node_modules/strip-ansi": { + "version": "6.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.20.2", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/shebang-command": { + "node_modules/strip-final-newline": { "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/side-channel": { - "version": "1.0.4", + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/superjson": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.3.tgz", + "integrity": "sha512-0j+U70KUtP8+roVPbwfqkyQI7lBt7ETnuA7KXbTDX3mCKiD/4fXs2ldKSMdt0MCfpTwiMxo20yFU3vu6ewETpQ==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, + "node_modules/svgson": { + "version": "4.1.0", "license": "MIT", "dependencies": { - "is-arrayish": "^0.3.1" + "deep-rename-keys": "^0.2.1", + "omit-deep": "0.3.0", + "xml-reader": "2.4.3" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", + "node_modules/table": { + "version": "6.7.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/slice-ansi": { - "version": "3.0.0", + "node_modules/table/node_modules/ajv": { + "version": "8.6.2", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { + "node_modules/table/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -8331,7 +10402,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/color-convert": { + "node_modules/table/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -8342,439 +10413,592 @@ "node": ">=7.0.0" } }, - "node_modules/slice-ansi/node_modules/color-name": { + "node_modules/table/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/slugify": { - "version": "1.6.0", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", + "node_modules/tailwindcss": { + "version": "2.2.16", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "arg": "^5.0.1", + "bytes": "^3.0.0", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.1", + "html-tags": "^3.1.0", + "is-color-stop": "^1.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.11.0", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/tailwindcss-theming": { + "version": "3.0.0-beta.3", "dev": true, "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@ctrl/tinycolor": "^3.1.4", + "lodash": "^4.17.20" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", + "node_modules/tailwindcss-touch": { + "version": "1.0.1", "dev": true, - "license": "CC0-1.0" + "license": "MIT" }, - "node_modules/split-on-first": { - "version": "1.1.0", + "node_modules/tailwindcss/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", + "node_modules/tailwindcss/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/string_decoder": { - "version": "1.3.0", + "node_modules/tailwindcss/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", + "node_modules/tailwindcss/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT" }, - "node_modules/string-argv": { - "version": "0.3.1", + "node_modules/tailwindcss/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6.19" + "node": ">=8" } }, - "node_modules/string-width": { - "version": "4.2.2", + "node_modules/tailwindcss/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" + "rimraf": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.17.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "is-number": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/transformation-matrix": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/tsconfig-paths": { + "version": "3.10.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "json5": "^2.2.0", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" } }, - "node_modules/stringify-object": { - "version": "3.3.0", + "node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "tslib": "^1.8.1" }, "engines": { - "node": ">=4" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/strip-ansi": { - "version": "6.0.0", + "node_modules/type-check": { + "version": "0.4.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/type-fest": { + "version": "0.21.3", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, - "license": "MIT", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=6" + "node": ">=4.2.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/unbox-primitive": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/superjson": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.3.tgz", - "integrity": "sha512-0j+U70KUtP8+roVPbwfqkyQI7lBt7ETnuA7KXbTDX3mCKiD/4fXs2ldKSMdt0MCfpTwiMxo20yFU3vu6ewETpQ==", + "node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unset-value": { + "version": "0.1.2", + "license": "MIT", "dependencies": { - "copy-anything": "^3.0.2" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "has-flag": "^3.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/supports-preserve-symlinks-flag": { + "node_modules/update-browserslist-db/node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, - "node_modules/svgson": { - "version": "4.1.0", - "license": "MIT", + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "deep-rename-keys": "^0.2.1", - "omit-deep": "0.3.0", - "xml-reader": "2.4.3" + "punycode": "^2.1.0" } }, - "node_modules/table": { - "version": "6.7.1", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "tslib": "^2.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node_modules/use-callback-ref/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/table/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", "dependencies": { - "color-convert": "^2.0.1" + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/table/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/use-sidecar/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/table/node_modules/color-name": { - "version": "1.1.4", + "node_modules/v8-compile-cache": { + "version": "2.3.0", "dev": true, "license": "MIT" }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", + "node_modules/vite": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz", + "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/tailwindcss": { - "version": "2.2.16", - "dev": true, - "license": "MIT", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "arg": "^5.0.1", - "bytes": "^3.0.0", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "color": "^4.0.1", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", - "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^3.0.3", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", - "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", - "resolve": "^1.20.0", - "tmp": "^0.2.1" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" }, "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" + "node-which": "bin/node-which" }, "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.0.9" + "node": ">= 8" } }, - "node_modules/tailwindcss-theming": { - "version": "3.0.0-beta.3", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "@ctrl/tinycolor": "^3.1.4", - "lodash": "^4.17.20" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tailwindcss-touch": { - "version": "1.0.1", + "node_modules/word-wrap": { + "version": "1.2.3", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/tailwindcss/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/tailwindcss/node_modules/chalk": { - "version": "4.1.2", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tailwindcss/node_modules/color-convert": { + "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -8785,580 +11009,1738 @@ "node": ">=7.0.0" } }, - "node_modules/tailwindcss/node_modules/color-name": { + "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/tailwindcss/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/wrappy": { + "version": "1.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/tailwindcss/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/write": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "mkdirp": "^0.5.1" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/text-table": { - "version": "0.2.0", + "node_modules/xml-lexer": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "eventemitter3": "^2.0.0" + } + }, + "node_modules/xml-reader": { + "version": "2.4.3", + "license": "MIT", + "dependencies": { + "eventemitter3": "^2.0.0", + "xml-lexer": "^0.2.2" + } + }, + "node_modules/xtend": { + "version": "4.0.2", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.4" + } }, - "node_modules/through": { - "version": "2.3.8", + "node_modules/y18n": { + "version": "5.0.8", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "license": "MIT" + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "license": "MIT" + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } }, - "node_modules/tmp": { - "version": "0.2.1", + "node_modules/yargs": { + "version": "16.2.0", "dev": true, "license": "MIT", "dependencies": { - "rimraf": "^3.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8.17.0" + "node": ">=10" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/yargs-parser": { + "version": "20.2.9", "dev": true, + "license": "ISC", "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/zustand": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", + "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "license": "MIT", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "requires": { + "tslib": "^1.11.1" + } + }, + "@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "requires": { + "tslib": "^1.11.1" + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "@aws-sdk/abort-controller": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.347.0.tgz", + "integrity": "sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "is-number": "^7.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/chunked-blob-reader": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz", + "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==", + "requires": { + "tslib": "^2.5.0" }, - "engines": { - "node": ">=8.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/client-s3": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.348.0.tgz", + "integrity": "sha512-19ShUJL/Kqol4pW2S6axD85oL2JIh91ctUgqPEuu5BzGyEgq5s+HP/DDNzcdsTKl7gfCfaIULf01yWU6RwY1EA==", + "requires": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.348.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/credential-provider-node": "3.348.0", + "@aws-sdk/eventstream-serde-browser": "3.347.0", + "@aws-sdk/eventstream-serde-config-resolver": "3.347.0", + "@aws-sdk/eventstream-serde-node": "3.347.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-blob-browser": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/hash-stream-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/md5-js": "3.347.0", + "@aws-sdk/middleware-bucket-endpoint": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-expect-continue": "3.347.0", + "@aws-sdk/middleware-flexible-checksums": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-location-constraint": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-sdk-s3": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-signing": "3.347.0", + "@aws-sdk/middleware-ssec": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/signature-v4-multi-region": "3.347.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-stream-browser": "3.347.0", + "@aws-sdk/util-stream-node": "3.348.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@aws-sdk/util-waiter": "3.347.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "fast-xml-parser": "4.2.4", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/client-sso": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.348.0.tgz", + "integrity": "sha512-5S23gVKBl0fhZ96RD8LdPhMKeh8E5fmebyZxMNZuWliSXz++Q9ZCrwPwQbkks3duPOTcKKobs3IoqP82HoXMvQ==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.348.0.tgz", + "integrity": "sha512-tvHpcycx4EALvk38I9rAOdPeHvBDezqIB4lrE7AvnOJljlvCcdQ2gXa9GDrwrM7zuYBIZMBRE/njTMrCwoOdAA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/client-sts": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.348.0.tgz", + "integrity": "sha512-4iaQlWAOHMEF4xjR/FB/ws3aUjXjJHwbsIcqbdYAxsKijDYYTZYCPc/gM0NE1yi28qlNYNhMzHipe5xTYbU2Eg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/credential-provider-node": "3.348.0", + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/hash-node": "3.347.0", + "@aws-sdk/invalid-dependency": "3.347.0", + "@aws-sdk/middleware-content-length": "3.347.0", + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/middleware-host-header": "3.347.0", + "@aws-sdk/middleware-logger": "3.347.0", + "@aws-sdk/middleware-recursion-detection": "3.347.0", + "@aws-sdk/middleware-retry": "3.347.0", + "@aws-sdk/middleware-sdk-sts": "3.347.0", + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/middleware-signing": "3.347.0", + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/middleware-user-agent": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-body-length-browser": "3.310.0", + "@aws-sdk/util-body-length-node": "3.310.0", + "@aws-sdk/util-defaults-mode-browser": "3.347.0", + "@aws-sdk/util-defaults-mode-node": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "@aws-sdk/util-user-agent-browser": "3.347.0", + "@aws-sdk/util-user-agent-node": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", + "fast-xml-parser": "4.2.4", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/config-resolver": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.347.0.tgz", + "integrity": "sha512-2ja+Sf/VnUO7IQ3nKbDQ5aumYKKJUaTm/BuVJ29wNho8wYHfuf7wHZV0pDTkB8RF5SH7IpHap7zpZAj39Iq+EA==", + "requires": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-config-provider": "3.310.0", + "@aws-sdk/util-middleware": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "@aws-sdk/credential-provider-env": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.347.0.tgz", + "integrity": "sha512-UnEM+LKGpXKzw/1WvYEQsC6Wj9PupYZdQOE+e2Dgy2dqk/pVFy4WueRtFXYDT2B41ppv3drdXUuKZRIDVqIgNQ==", + "requires": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/transformation-matrix": { - "version": "2.1.1", - "license": "MIT" + "@aws-sdk/credential-provider-imds": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.347.0.tgz", + "integrity": "sha512-7scCy/DCDRLIhlqTxff97LQWDnRwRXji3bxxMg+xWOTTaJe7PWx+etGSbBWaL42vsBHFShQjSLvJryEgoBktpw==", + "requires": { + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/tsconfig-paths": { - "version": "3.10.1", - "dev": true, - "license": "MIT", + "@aws-sdk/credential-provider-ini": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.348.0.tgz", + "integrity": "sha512-0IEH5mH/cz2iLyr/+pSa3sCsQcGADiLSEn6yivsXdfz1zDqBiv+ffDoL0+Pvnp+TKf8sA6OlX8PgoMoEBvBdKw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.347.0", + "@aws-sdk/credential-provider-imds": "3.347.0", + "@aws-sdk/credential-provider-process": "3.347.0", + "@aws-sdk/credential-provider-sso": "3.348.0", + "@aws-sdk/credential-provider-web-identity": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "json5": "^2.2.0", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" + "@aws-sdk/credential-provider-node": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.348.0.tgz", + "integrity": "sha512-ngRWphm9e36i58KqVi7Z8WOub+k0cSl+JZaAmgfFm0+dsfBG5uheo598OeiwWV0DqlilvaQZFaMVQgG2SX/tHg==", + "requires": { + "@aws-sdk/credential-provider-env": "3.347.0", + "@aws-sdk/credential-provider-imds": "3.347.0", + "@aws-sdk/credential-provider-ini": "3.348.0", + "@aws-sdk/credential-provider-process": "3.347.0", + "@aws-sdk/credential-provider-sso": "3.348.0", + "@aws-sdk/credential-provider-web-identity": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", + "@aws-sdk/credential-provider-process": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.347.0.tgz", + "integrity": "sha512-yl1z4MsaBdXd4GQ2halIvYds23S67kElyOwz7g8kaQ4kHj+UoYWxz3JVW/DGusM6XmQ9/F67utBrUVA0uhQYyw==", + "requires": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "tslib": "^1.8.1" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.348.0.tgz", + "integrity": "sha512-5cQao705376KgGkLv9xgkQ3T5H7KdNddWuyoH2wDcrHd1BA2Lnrell3Yyh7R6jQeV7uCQE/z0ugUOKhDqNKIqQ==", + "requires": { + "@aws-sdk/client-sso": "3.348.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/token-providers": "3.348.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">= 6" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.347.0.tgz", + "integrity": "sha512-DxoTlVK8lXjS1zVphtz/Ab+jkN/IZor9d6pP2GjJHNoAIIzXfRwwj5C8vr4eTayx/5VJ7GRP91J8GJ2cKly8Qw==", + "requires": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", + "@aws-sdk/eventstream-codec": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.347.0.tgz", + "integrity": "sha512-61q+SyspjsaQ4sdgjizMyRgVph2CiW4aAtfpoH69EJFJfTxTR/OqnZ9Jx/3YiYi0ksrvDenJddYodfWWJqD8/w==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-hex-encoding": "3.310.0", + "tslib": "^2.5.0" + }, "dependencies": { - "prelude-ls": "^1.2.1" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/eventstream-serde-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.347.0.tgz", + "integrity": "sha512-9BLVTHWgpiTo/hl+k7qt7E9iYu43zVwJN+4TEwA9ZZB3p12068t1Hay6HgCcgJC3+LWMtw/OhvypV6vQAG4UBg==", + "requires": { + "@aws-sdk/eventstream-serde-universal": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.347.0.tgz", + "integrity": "sha512-RcXQbNVq0PFmDqfn6+MnjCUWbbobcYVxpimaF6pMDav04o6Mcle+G2Hrefp5NlFr/lZbHW2eUKYsp1sXPaxVlQ==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "@aws-sdk/eventstream-serde-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.347.0.tgz", + "integrity": "sha512-pgQCWH0PkHjcHs04JE7FoGAD3Ww45ffV8Op0MSLUhg9OpGa6EDoO3EOpWi9l/TALtH4f0KRV35PVyUyHJ/wEkA==", + "requires": { + "@aws-sdk/eventstream-serde-universal": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">=4.2.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", + "@aws-sdk/eventstream-serde-universal": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.347.0.tgz", + "integrity": "sha512-4wWj6bz6lOyDIO/dCCjwaLwRz648xzQQnf89R29sLoEqvAPP5XOB7HL+uFaQ/f5tPNh49gL6huNFSVwDm62n4Q==", + "requires": { + "@aws-sdk/eventstream-codec": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.347.0.tgz", + "integrity": "sha512-sQ5P7ivY8//7wdxfA76LT1sF6V2Tyyz1qF6xXf9sihPN5Q1Y65c+SKpMzXyFSPqWZ82+SQQuDliYZouVyS6kQQ==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/querystring-builder": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "@aws-sdk/hash-blob-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.347.0.tgz", + "integrity": "sha512-RxgstIldLsdJKN5UHUwSI9PMiatr0xKmKxS4+tnWZ1/OOg6wuWqqpDpWdNOVSJSpxpUaP6kRrvG5Yo5ZevoTXw==", + "requires": { + "@aws-sdk/chunked-blob-reader": "3.310.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/unset-value": { - "version": "0.1.2", - "license": "MIT", + "@aws-sdk/hash-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.347.0.tgz", + "integrity": "sha512-96+ml/4EaUaVpzBdOLGOxdoXOjkPgkoJp/0i1fxOJEvl8wdAQSwc3IugVK9wZkCxy2DlENtgOe6DfIOhfffm/g==", + "requires": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-buffer-from": "3.310.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + }, "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/hash-stream-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.347.0.tgz", + "integrity": "sha512-tOBfcvELyt1GVuAlQ4d0mvm3QxoSSmvhH15SWIubM9RP4JWytBVzaFAn/aC02DBAWyvp0acMZ5J+47mxrWJElg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" + "@aws-sdk/invalid-dependency": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.347.0.tgz", + "integrity": "sha512-8imQcwLwqZ/wTJXZqzXT9pGLIksTRckhGLZaXT60tiBOPKuerTsus2L59UstLs5LP8TKaVZKFFSsjRIn9dQdmQ==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" } - ], + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz", + "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==", + "requires": { + "tslib": "^2.5.0" + }, "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/md5-js": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.347.0.tgz", + "integrity": "sha512-mChE+7DByTY9H4cQ6fnWp2x5jf8e6OZN+AdLp6WQ+W99z35zBeqBxVmgm8ziJwkMIrkSTv9j3Y7T9Ve3RIcSfg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" }, - "bin": { - "update-browserslist-db": "cli.js" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.347.0.tgz", + "integrity": "sha512-i9n4ylkGmGvizVcTfN4L+oN10OCL2DKvyMa4cCAVE1TJrsnaE0g7IOOyJGUS8p5KJYQrKVR7kcsa2L1S0VeEcA==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@aws-sdk/util-config-provider": "3.310.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/update-browserslist-db/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "@aws-sdk/middleware-content-length": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.347.0.tgz", + "integrity": "sha512-i4qtWTDImMaDUtwKQPbaZpXsReiwiBomM1cWymCU4bhz81HL01oIxOxOBuiM+3NlDoCSPr3KI6txZSz/8cqXCQ==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", + "@aws-sdk/middleware-endpoint": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.347.0.tgz", + "integrity": "sha512-unF0c6dMaUL1ffU+37Ugty43DgMnzPWXr/Jup/8GbK5fzzWT5NQq6dj9KHPubMbWeEjQbmczvhv25JuJdK8gNQ==", + "requires": { + "@aws-sdk/middleware-serde": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/url-parser": "3.347.0", + "@aws-sdk/util-middleware": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "punycode": "^2.1.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/use-callback-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", - "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "@aws-sdk/middleware-expect-continue": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.347.0.tgz", + "integrity": "sha512-95M1unD1ENL0tx35dfyenSfx0QuXBSKtOi/qJja6LfX5771C5fm5ZTOrsrzPFJvRg/wj8pCOVWRZk+d5+jvfOQ==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "tslib": "^2.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-flexible-checksums": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.347.0.tgz", + "integrity": "sha512-Pda7VMAIyeHw9nMp29rxdFft3EF4KP/tz/vLB6bqVoBNbLujo5rxn3SGOgStgIz7fuMLQQfoWIsmvxUm+Fp+Dw==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/is-array-buffer": "3.310.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">=10" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.347.0.tgz", + "integrity": "sha512-kpKmR9OvMlnReqp5sKcJkozbj1wmlblbVSbnQAIkzeQj2xD5dnVR3Nn2ogQKxSmU1Fv7dEroBtrruJ1o3fY38A==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-location-constraint": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.347.0.tgz", + "integrity": "sha512-x5fcEV7q8fQ0OmUO+cLhN5iPqGoLWtC3+aKHIfRRb2BpOO1khyc1FKzsIAdeQz2hfktq4j+WsrmcPvFKv51pSg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" } } }, - "node_modules/use-callback-ref/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@aws-sdk/middleware-logger": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.347.0.tgz", + "integrity": "sha512-NYC+Id5UCkVn+3P1t/YtmHt75uED06vwaKyxDy0UmB2K66PZLVtwWbLpVWrhbroaw1bvUHYcRyQ9NIfnVcXQjA==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" } } }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "@aws-sdk/middleware-recursion-detection": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.347.0.tgz", + "integrity": "sha512-qfnSvkFKCAMjMHR31NdsT0gv5Sq/ZHTUD4yQsSLpbVQ6iYAS834lrzXt41iyEHt57Y514uG7F/Xfvude3u4icQ==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.347.0.tgz", + "integrity": "sha512-CpdM+8dCSbX96agy4FCzOfzDmhNnGBM/pxrgIVLm5nkYTLuXp/d7ubpFEUHULr+4hCd5wakHotMt7yO29NFaVw==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/service-error-classification": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-middleware": "3.347.0", + "@aws-sdk/util-retry": "3.347.0", + "tslib": "^2.5.0", + "uuid": "^8.3.2" }, - "engines": { - "node": ">=10" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-sdk-s3": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.347.0.tgz", + "integrity": "sha512-TLr92+HMvamrhJJ0VDhA/PiUh4rTNQz38B9dB9ikohTaRgm+duP+mRiIv16tNPZPGl8v82Thn7Ogk2qPByNDtg==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.347.0.tgz", + "integrity": "sha512-38LJ0bkIoVF3W97x6Jyyou72YV9Cfbml4OaDEdnrCOo0EssNZM5d7RhjMvQDwww7/3OBY/BzeOcZKfJlkYUXGw==", + "requires": { + "@aws-sdk/middleware-signing": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" } } }, - "node_modules/use-sidecar/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "@aws-sdk/middleware-serde": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.347.0.tgz", + "integrity": "sha512-x5Foi7jRbVJXDu9bHfyCbhYDH5pKK+31MmsSJ3k8rY8keXLBxm2XEEg/AIoV9/TUF9EeVvZ7F1/RmMpJnWQsEg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@aws-sdk/middleware-signing": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.347.0.tgz", + "integrity": "sha512-zVBF/4MGKnvhAE/J+oAL/VAehiyv+trs2dqSQXwHou9j8eA8Vm8HS2NdOwpkZQchIxTuwFlqSusDuPEdYFbvGw==", + "requires": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/signature-v4": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-middleware": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" + "@aws-sdk/middleware-ssec": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.347.0.tgz", + "integrity": "sha512-467VEi2elPmUGcHAgTmzhguZ3lwTpwK+3s+pk312uZtVsS9rP1MAknYhpS3ZvssiqBUVPx8m29cLcC6Tx5nOJg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" + "@aws-sdk/middleware-stack": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.347.0.tgz", + "integrity": "sha512-Izidg4rqtYMcKuvn2UzgEpPLSmyd8ub9+LQ2oIzG3mpIzCBITq7wp40jN1iNkMg+X6KEnX9vdMJIYZsPYMCYuQ==", + "requires": { + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", + "@aws-sdk/middleware-user-agent": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.347.0.tgz", + "integrity": "sha512-wJbGN3OE1/daVCrwk49whhIr9E0j1N4gWwN/wi4WuyYIA+5lMUfVp0aGIOvZR+878DxuFz2hQ4XcZVT4K2WvQw==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-endpoints": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/value-equal": { - "version": "1.0.1", - "license": "MIT" + "@aws-sdk/node-config-provider": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.347.0.tgz", + "integrity": "sha512-faU93d3+5uTTUcotGgMXF+sJVFjrKh+ufW+CzYKT4yUHammyaIab/IbTPWy2hIolcEGtuPeVoxXw8TXbkh/tuw==", + "requires": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/vite": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz", - "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==", - "dev": true, + "@aws-sdk/node-http-handler": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.348.0.tgz", + "integrity": "sha512-wxdgc4tO5F6lN4wHr0CZ4TyIjDW/ORp4SJZdWYNs2L5J7+/SwqgJY2lxRlGi0i7Md+apAdE3sT3ukVQ/9pVfPg==", + "requires": { + "@aws-sdk/abort-controller": "3.347.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/querystring-builder": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/property-provider": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.347.0.tgz", + "integrity": "sha512-t3nJ8CYPLKAF2v9nIHOHOlF0CviQbTvbFc2L4a+A+EVd/rM4PzL3+3n8ZJsr0h7f6uD04+b5YRFgKgnaqLXlEg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "bin": { - "vite": "bin/vite.js" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/protocol-http": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.347.0.tgz", + "integrity": "sha512-2YdBhc02Wvy03YjhGwUxF0UQgrPWEy8Iq75pfS42N+/0B/+eWX1aQgfjFxIpLg7YSjT5eKtYOQGlYd4MFTgj9g==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.347.0.tgz", + "integrity": "sha512-phtKTe6FXoV02MoPkIVV6owXI8Mwr5IBN3bPoxhcPvJG2AjEmnetSIrhb8kwc4oNhlwfZwH6Jo5ARW/VEWbZtg==", + "requires": { + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-uri-escape": "3.310.0", + "tslib": "^2.5.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.347.0.tgz", + "integrity": "sha512-5VXOhfZz78T2W7SuXf2avfjKglx1VZgZgp9Zfhrt/Rq+MTu2D+PZc5zmJHhYigD7x83jLSLogpuInQpFMA9LgA==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/s3-request-presigner": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.348.0.tgz", + "integrity": "sha512-mldyh97l7RKG+wgK2cAgqO42WkAmXhU7rkFt6IKUO0OERGvLH3kjctAN9tL7esKzYmslnaGD7r+dnP67ElQWWg==", + "requires": { + "@aws-sdk/middleware-endpoint": "3.347.0", + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/signature-v4-multi-region": "3.347.0", + "@aws-sdk/smithy-client": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-format-url": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" } } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "@aws-sdk/service-error-classification": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.347.0.tgz", + "integrity": "sha512-xZ3MqSY81Oy2gh5g0fCtooAbahqh9VhsF8vcKjVX8+XPbGC8y+kej82+MsMg4gYL8gRFB9u4hgYbNgIS6JTAvg==" }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "@aws-sdk/shared-ini-file-loader": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.347.0.tgz", + "integrity": "sha512-Xw+zAZQVLb+xMNHChXQ29tzzLqm3AEHsD8JJnlkeFjeMnWQtXdUfOARl5s8NzAppcKQNlVe2gPzjaKjoy2jz1Q==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", + "@aws-sdk/signature-v4": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.347.0.tgz", + "integrity": "sha512-58Uq1do+VsTHYkP11dTK+DF53fguoNNJL9rHRWhzP+OcYv3/mBMLoS2WPz/x9FO5mBg4ESFsug0I6mXbd36tjw==", + "requires": { + "@aws-sdk/eventstream-codec": "3.347.0", + "@aws-sdk/is-array-buffer": "3.310.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-hex-encoding": "3.310.0", + "@aws-sdk/util-middleware": "3.347.0", + "@aws-sdk/util-uri-escape": "3.310.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + }, "dependencies": { - "isexe": "^2.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/signature-v4-multi-region": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.347.0.tgz", + "integrity": "sha512-838h7pbRCVYWlTl8W+r5+Z5ld7uoBObgAn7/RB1MQ4JjlkfLdN7emiITG6ueVL+7gWZNZc/4dXR/FJSzCgrkxQ==", + "requires": { + "@aws-sdk/protocol-http": "3.347.0", + "@aws-sdk/signature-v4": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "bin": { - "node-which": "bin/node-which" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/smithy-client": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.347.0.tgz", + "integrity": "sha512-PaGTDsJLGK0sTjA6YdYQzILRlPRN3uVFyqeBUkfltXssvUzkm8z2t1lz2H4VyJLAhwnG5ZuZTNEV/2mcWrU7JQ==", + "requires": { + "@aws-sdk/middleware-stack": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">= 8" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "@aws-sdk/token-providers": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.348.0.tgz", + "integrity": "sha512-nTjoJkUsJUrJTZuqaeMD9PW2//Rdg2HgfDjiyC4jmAXtayWYCi11mqauurMaUHJ3p5qJ8f5xzxm6vBTbrftPag==", + "requires": { + "@aws-sdk/client-sso-oidc": "3.348.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/shared-ini-file-loader": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/types": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.347.0.tgz", + "integrity": "sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==", + "requires": { + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@aws-sdk/url-parser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.347.0.tgz", + "integrity": "sha512-lhrnVjxdV7hl+yCnJfDZOaVLSqKjxN20MIOiijRiqaWGLGEAiSqBreMhL89X1WKCifxAs4zZf9YB9SbdziRpAA==", + "requires": { + "@aws-sdk/querystring-parser": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "requires": { + "tslib": "^2.5.0" }, - "engines": { - "node": ">=10" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-base64": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz", + "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==", + "requires": { + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "@aws-sdk/util-body-length-browser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz", + "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==", + "requires": { + "tslib": "^2.5.0" + }, "dependencies": { - "color-convert": "^2.0.1" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz", + "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==", + "requires": { + "tslib": "^2.5.0" }, - "engines": { - "node": ">=8" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz", + "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.310.0", + "tslib": "^2.5.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "@aws-sdk/util-config-provider": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz", + "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==", + "requires": { + "tslib": "^2.5.0" + }, "dependencies": { - "color-name": "~1.1.4" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-defaults-mode-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.347.0.tgz", + "integrity": "sha512-+JHFA4reWnW/nMWwrLKqL2Lm/biw/Dzi/Ix54DAkRZ08C462jMKVnUlzAI+TfxQE3YLm99EIa0G7jiEA+p81Qw==", + "requires": { + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">=7.0.0" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "@aws-sdk/util-defaults-mode-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.347.0.tgz", + "integrity": "sha512-A8BzIVhAAZE5WEukoAN2kYebzTc99ZgncbwOmgCCbvdaYlk5tzguR/s+uoT4G0JgQGol/4hAMuJEl7elNgU6RQ==", + "requires": { + "@aws-sdk/config-resolver": "3.347.0", + "@aws-sdk/credential-provider-imds": "3.347.0", + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/property-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" + "@aws-sdk/util-endpoints": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.347.0.tgz", + "integrity": "sha512-/WUkirizeNAqwVj0zkcrqdQ9pUm1HY5kU+qy7xTR0OebkuJauglkmSTMD+56L1JPunWqHhlwCMVRaz5eaJdSEQ==", + "requires": { + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/write": { - "version": "1.0.3", - "dev": true, - "license": "MIT", + "@aws-sdk/util-format-url": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.347.0.tgz", + "integrity": "sha512-y9UUEmWu0IBoMZ25NVjCCOwvAEa+xJ54WfiCsgwKeFyTHWYY2wZqJfARJtme/ezqrRa8neOcBJSVxjfJJegW+w==", + "requires": { + "@aws-sdk/querystring-builder": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" + }, "dependencies": { - "mkdirp": "^0.5.1" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz", + "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==", + "requires": { + "tslib": "^2.5.0" }, - "engines": { - "node": ">=4" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/xml-lexer": { - "version": "0.2.2", - "license": "MIT", + "@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "requires": { + "tslib": "^2.5.0" + }, "dependencies": { - "eventemitter3": "^2.0.0" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/xml-reader": { - "version": "2.4.3", - "license": "MIT", + "@aws-sdk/util-middleware": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.347.0.tgz", + "integrity": "sha512-8owqUA3ePufeYTUvlzdJ7Z0miLorTwx+rNol5lourGQZ9JXsVMo23+yGA7nOlFuXSGkoKpMOtn6S0BT2bcfeiw==", + "requires": { + "tslib": "^2.5.0" + }, "dependencies": { - "eventemitter3": "^2.0.0", - "xml-lexer": "^0.2.2" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" + "@aws-sdk/util-retry": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.347.0.tgz", + "integrity": "sha512-NxnQA0/FHFxriQAeEgBonA43Q9/VPFQa8cfJDuT2A1YZruMasgjcltoZszi1dvoIRWSZsFTW42eY2gdOd0nffQ==", + "requires": { + "@aws-sdk/service-error-classification": "3.347.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "@aws-sdk/util-stream-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.347.0.tgz", + "integrity": "sha512-pIbmzIJfyX26qG622uIESOmJSMGuBkhmNU7I98bzhYCet5ctC0ow9L5FZw9ljOE46P/HkEcsOhh+qTHyCXlCEQ==", + "requires": { + "@aws-sdk/fetch-http-handler": "3.347.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-base64": "3.310.0", + "@aws-sdk/util-hex-encoding": "3.310.0", + "@aws-sdk/util-utf8": "3.310.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" + "@aws-sdk/util-stream-node": { + "version": "3.348.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.348.0.tgz", + "integrity": "sha512-MFXyMUWA2oD0smBZf+sdnuyxLw8nCqyMEgYbos+6grvF1Szxn5+zbYTZrEBYiICqD1xJRLbWTzFLJU7oYm6pUg==", + "requires": { + "@aws-sdk/node-http-handler": "3.348.0", + "@aws-sdk/types": "3.347.0", + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } }, - "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "@aws-sdk/util-uri-escape": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz", + "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==", + "requires": { + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", + "@aws-sdk/util-user-agent-browser": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.347.0.tgz", + "integrity": "sha512-ydxtsKVtQefgbk1Dku1q7pMkjDYThauG9/8mQkZUAVik55OUZw71Zzr3XO8J8RKvQG8lmhPXuAQ0FKAyycc0RA==", + "requires": { + "@aws-sdk/types": "3.347.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.347.0.tgz", + "integrity": "sha512-6X0b9qGsbD1s80PmbaB6v1/ZtLfSx6fjRX8caM7NN0y/ObuLoX8LhYnW6WlB2f1+xb4EjaCNgpP/zCf98MXosw==", + "requires": { + "@aws-sdk/node-config-provider": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "engines": { - "node": ">=10" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "@aws-sdk/util-utf8": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz", + "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==", + "requires": { + "@aws-sdk/util-buffer-from": "3.310.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, - "node_modules/zustand": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", - "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", - "engines": { - "node": ">=12.7.0" + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "requires": { + "tslib": "^2.3.1" }, - "peerDependencies": { - "react": ">=16.8" + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@aws-sdk/util-waiter": { + "version": "3.347.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.347.0.tgz", + "integrity": "sha512-3ze/0PkwkzUzLncukx93tZgGL0JX9NaP8DxTi6WzflnL/TEul5Z63PCruRNK0om17iZYAWKrf8q2mFoHYb4grA==", + "requires": { + "@aws-sdk/abort-controller": "3.347.0", + "@aws-sdk/types": "3.347.0", + "tslib": "^2.5.0" }, - "peerDependenciesMeta": { - "react": { - "optional": true + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" } } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, + }, + "@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } } }, "@babel/code-frame": { @@ -11081,6 +14463,37 @@ "picomatch": "^2.2.2" } }, + "@smithy/protocol-http": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.0.1.tgz", + "integrity": "sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==", + "requires": { + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, + "@smithy/types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.0.0.tgz", + "integrity": "sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==", + "requires": { + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + } + } + }, "@tailwindcss/aspect-ratio": { "version": "0.2.1", "dev": true, @@ -11645,6 +15058,11 @@ "version": "2.2.0", "dev": true }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "brace-expansion": { "version": "1.1.11", "dev": true, @@ -12946,6 +16364,14 @@ "version": "2.0.6", "dev": true }, + "fast-xml-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz", + "integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==", + "requires": { + "strnum": "^1.0.5" + } + }, "fastq": { "version": "1.11.1", "dev": true, @@ -14375,6 +17801,12 @@ "integrity": "sha512-gxWW1kMeru9xR1GoR+Iw4hA+JBOM3SHfr4DWCUKY0xc7Vv1MLsF109oHtBeWl9shcyPFx67KHru44DheN0XY5A==", "requires": {} }, + "react-image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-image-size/-/react-image-size-2.0.2.tgz", + "integrity": "sha512-j2ZhFsY5n8HAU43ZrhvDOkGBhAY0IJX2DjajmwF+TdXuZ/lGHuhmqj5/88o1M+yL8Un5oNSLjBRH5XikWiiHlA==", + "requires": {} + }, "react-is": { "version": "16.13.1" }, @@ -14882,6 +18314,11 @@ "version": "3.1.1", "dev": true }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "superjson": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.3.tgz", @@ -15225,6 +18662,11 @@ "version": "1.0.2", "dev": true }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, "v8-compile-cache": { "version": "2.3.0", "dev": true diff --git a/ui/package.json b/ui/package.json index 0f9add05..8415a349 100644 --- a/ui/package.json +++ b/ui/package.json @@ -18,6 +18,8 @@ "tsc": "tsc --noEmit" }, "dependencies": { + "@aws-sdk/client-s3": "^3.348.0", + "@aws-sdk/s3-request-presigner": "^3.348.0", "@fingerprintjs/fingerprintjs": "^3.3.3", "@radix-ui/react-checkbox": "^0.1.5", "@radix-ui/react-dialog": "^1.0.2", @@ -59,6 +61,7 @@ "react-dom": "^17.0.2", "react-error-boundary": "^3.1.3", "react-hook-form": "^7.38.0", + "react-image-size": "^2.0.2", "react-router-dom": "^5.2.0", "slugify": "^1.6.0", "zustand": "^3.7.2" diff --git a/ui/src/gear/contacts/contact.ts b/ui/src/gear/contacts/contact.ts index 71d1c693..4f5b6d3b 100644 --- a/ui/src/gear/contacts/contact.ts +++ b/ui/src/gear/contacts/contact.ts @@ -1,4 +1,4 @@ -import { Flag } from "@/types/hark"; +import { Flag } from "@/gear"; export interface Contact { nickname: string; diff --git a/ui/src/gear/contacts/types.ts b/ui/src/gear/contacts/types.ts index 71d1c693..4f5b6d3b 100644 --- a/ui/src/gear/contacts/types.ts +++ b/ui/src/gear/contacts/types.ts @@ -1,4 +1,4 @@ -import { Flag } from "@/types/hark"; +import { Flag } from "@/gear"; export interface Contact { nickname: string; diff --git a/ui/src/gear/hark/lib.ts b/ui/src/gear/hark/lib.ts index 6bd9c318..314dd467 100644 --- a/ui/src/gear/hark/lib.ts +++ b/ui/src/gear/hark/lib.ts @@ -1,163 +1,125 @@ -import { BigInteger } from 'big-integer'; - -import { Poke } from '@urbit/http-api'; +import _ from 'lodash'; +import bigInt from 'big-integer'; import { - HarkBin, - HarkBinId, - HarkBody, - HarkLid, - HarkPlace + Blanket, + Carpet, + Flag, + HarkAction, + Rope, + Seam, + Skein, } from './types'; -import { parseUd } from '@urbit/aura'; - -export const harkAction = (data: T): Poke => ({ - app: 'hark-store', - mark: 'hark-action', - json: data -}); - -const graphHookAction = (data: T): Poke => ({ - app: 'hark-graph-hook', - mark: 'hark-graph-hook-action', - json: data -}); - -export { graphHookAction as harkGraphHookAction }; - -const groupHookAction = (data: T): Poke => ({ - app: 'hark-group-hook', - mark: 'hark-group-hook-action', - json: data -}); - -export { groupHookAction as harkGroupHookAction }; - -export const actOnNotification = ( - frond: string, - intTime: BigInteger, - bin: HarkBin -): Poke => - harkAction({ - [frond]: { - time: parseUd(intTime.toString()), - bin - } - }); - -export const setMentions = (mentions: boolean): Poke => - graphHookAction({ - 'set-mentions': mentions - }); - -export const setWatchOnSelf = (watchSelf: boolean): Poke => - graphHookAction({ - 'set-watch-on-self': watchSelf - }); - -export const setDoNotDisturb = (dnd: boolean): Poke => - harkAction({ - 'set-dnd': dnd - }); - -export const addNote = (bin: HarkBin, body: HarkBody) => - harkAction({ - 'add-note': { - bin, - body - } - }); - -export const archive = (bin: HarkBin, lid: HarkLid): Poke => - harkAction({ - archive: { - lid, - bin - } - }); - -export const opened = harkAction({ - opened: null -}); - -export const markCountAsRead = (place: HarkPlace): Poke => - harkAction({ - 'read-count': place - }); - -export const markEachAsRead = ( - place: HarkPlace, - path: string -): Poke => - harkAction({ - 'read-each': { - place, - path - } - }); - -export const seen = () => harkAction({ seen: null }); - -export const readAll = harkAction({ 'read-all': null }); -export const archiveAll = harkAction({ 'archive-all': null }); - -export const ignoreGroup = (group: string): Poke => - groupHookAction({ - ignore: group - }); +import api from '@/api'; +import { formatUd } from '@urbit/aura'; +import useReactQuerySubscription from '@/logic/useReactQuerySubscription'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +function harkAction(action: HarkAction) { + return { + app: 'hark', + mark: 'hark-action', + json: action, + }; +} -export const ignoreGraph = (graph: string, index: string): Poke => - graphHookAction({ - ignore: { - graph, - index - } +export function useCarpet(flag?: Flag) { + const { data, ...rest } = useReactQuerySubscription({ + queryKey: ['carpet', flag], + app: 'hark', + path: '/ui', + scry: flag ? `/group/${flag}/latest` : `/desk/${window.desk}/latest`, }); -export const listenGroup = (group: string): Poke => - groupHookAction({ - listen: group - }); + return { + data: data as Carpet, + ...rest, + }; +} -export const listenGraph = (graph: string, index: string): Poke => - graphHookAction({ - listen: { - graph, - index - } +export function useBlanket(flag?: Flag) { + const { data: carpet, isSuccess } = useCarpet(flag); + const quilt = isSuccess + ? carpet?.stitch === 0 + ? '0' + : formatUd(bigInt(carpet?.stitch) ?? 0) + : '0'; + const { data, ...rest } = useReactQuerySubscription({ + queryKey: ['blanket', flag], + app: 'hark', + path: '/ui', + scry: flag + ? `/group/${flag}/quilt/${quilt}` + : `/desk/${window.desk}/quilt/${quilt}`, + options: { enabled: isSuccess }, }); -/** - * Read all graphs belonging to a particular group - */ -export const readGroup = (group: string) => - harkAction({ - 'read-group': group - }); + return { + data: data as Blanket, + ...rest, + }; +} -/** - * Read all unreads in a graph - */ -export const readGraph = (graph: string) => - harkAction({ - 'read-graph': graph +export function useSkeins(flag?: Flag) { + const { data, ...rest } = useReactQuerySubscription({ + queryKey: ['skeins', flag ? flag : window.desk], + app: 'hark', + path: '/ui', + scry: flag ? `/group/${flag}/skeins` : `/desk/${window.desk}/skeins`, + options: { + refetchOnMount: true, + retry: 1, + }, }); -export function harkBinToId(bin: HarkBin): HarkBinId { - const { place, path } = bin; - return `${place.desk}${place.path}${path}`; + return { + data: data as Skein[], + ...rest, + }; } -export function harkBinEq(a: HarkBin, b: HarkBin): boolean { - return ( - a.place.path === b.place.path && - a.place.desk === b.place.desk && - a.path === b.path - ); +export function useSawRopeMutation() { + const queryClient = useQueryClient(); + const mutationFn = async (variables: { rope: Rope; update?: boolean }) => + api.trackedPoke( + harkAction({ + 'saw-rope': variables.rope, + }), + { app: 'hark', path: '/ui' } + ); + + return useMutation(mutationFn, { + onMutate: async (variables) => { + await queryClient.cancelQueries(['skeins', variables.rope.group]); + }, + onSettled: async (_data, _error, variables) => { + await queryClient.invalidateQueries(['skeins', variables.rope.group]); + }, + }); } -export function harkLidToId(lid: HarkLid): string { - if('time' in lid) { - return `archive-${lid.time}`; - } - return Object.keys(lid)[0]; +export function useSawSeamMutation() { + const queryClient = useQueryClient(); + const mutationFn = async (variables: { seam: Seam }) => + api.poke({ + ...harkAction({ + 'saw-seam': variables.seam, + }), + }); + + return useMutation(mutationFn, { + onMutate: async (variables) => { + if ('group' in variables.seam) { + await queryClient.cancelQueries(['skeins', variables.seam.group]); + } else { + await queryClient.cancelQueries(['skeins', window.desk]); + } + }, + onSettled: async (_data, _error, variables) => { + if ('group' in variables.seam) { + await queryClient.invalidateQueries(['skeins', variables.seam.group]); + } else { + await queryClient.invalidateQueries(['skeins', window.desk]); + } + }, + }); } diff --git a/ui/src/gear/storage/lib.ts b/ui/src/gear/storage/lib.ts index 0a11d8db..6b397206 100644 --- a/ui/src/gear/storage/lib.ts +++ b/ui/src/gear/storage/lib.ts @@ -1,47 +1,52 @@ import { Poke } from '@urbit/http-api'; -import { StorageUpdate, StorageUpdateCurrentBucket, StorageUpdateAddBucket, StorageUpdateRemoveBucket, StorageUpdateEndpoint, StorageUpdateAccessKeyId, StorageUpdateSecretAccessKey } from './types'; +import { StorageUpdate, StorageUpdateCurrentBucket, StorageUpdateAddBucket, StorageUpdateRemoveBucket, StorageUpdateEndpoint, StorageUpdateAccessKeyId, StorageUpdateSecretAccessKey, StorageUpdateRegion } from './types'; -const s3Action = ( +const storageAction = ( data: any ): Poke => ({ - app: 's3-store', - mark: 's3-action', + app: 'storage', + mark: 'storage-action', json: data }); export const setCurrentBucket = ( bucket: string -): Poke => s3Action({ +): Poke => storageAction({ 'set-current-bucket': bucket }); export const addBucket = ( bucket: string -): Poke => s3Action({ +): Poke => storageAction({ 'add-bucket': bucket }); export const removeBucket = ( bucket: string -): Poke => s3Action({ +): Poke => storageAction({ 'remove-bucket': bucket }); export const setEndpoint = ( endpoint: string -): Poke => s3Action({ +): Poke => storageAction({ 'set-endpoint': endpoint }); export const setAccessKeyId = ( accessKeyId: string -): Poke => s3Action({ +): Poke => storageAction({ 'set-access-key-id': accessKeyId }); export const setSecretAccessKey = ( secretAccessKey: string -): Poke => s3Action({ +): Poke => storageAction({ 'set-secret-access-key': secretAccessKey }); +export const setRegion = ( + region: string +): Poke => storageAction({ + 'set-region': region +}) diff --git a/ui/src/gear/storage/types.ts b/ui/src/gear/storage/types.ts index 6c5cb93e..6224e219 100644 --- a/ui/src/gear/storage/types.ts +++ b/ui/src/gear/storage/types.ts @@ -1,60 +1,128 @@ +import { S3Client } from '@aws-sdk/client-s3'; + +export type Status = 'initial' | 'idle' | 'loading' | 'success' | 'error'; + export interface StorageCredentials { endpoint: string; accessKeyId: string; secretAccessKey: string; } -export interface StorageConfiguration { - buckets: Set; - currentBucket: string; +export interface BaseStorageState { + loaded?: boolean; + hasCredentials?: boolean; + s3: { + configuration: { + buckets: Set; + currentBucket: string; + region: string; + }; + credentials: StorageCredentials | null; + }; + [ref: string]: unknown; +} + +export interface GcpToken { + accessKey: string; + expiresIn: number; +} + +export interface FileStoreFile { + key: string; + file: File; + url: string; + size: [number, number]; +} + +export interface Upload extends FileStoreFile { + status: Status; + errorMessage?: string; +} + +interface UpdateStatus { + (uploader: string, key: string, status: 'error', msg: string): void; + ( + uploader: string, + key: string, + status: Omit, + msg?: string + ): void; +} + +export interface Uploader { + files: Record; + getMostRecent: () => Upload | null; + uploadFiles: (files: FileList | null) => Promise; + removeByURL: (url: string) => void; + clear: () => void; + prompt: () => void; +} + +export interface FileStore { + client: S3Client | null; + uploaders: Record; + getUploader: (key: string) => Uploader; + createClient: (s3: StorageCredentials, region: string) => void; + update: (key: string, updateFn: (uploader: Uploader) => void) => void; + uploadFiles: ( + uploader: string, + files: FileList | null, + bucket: string + ) => Promise; + upload: (uploader: string, upload: Upload, bucket: string) => Promise; + clear: (uploader: string) => void; + updateFile: ( + uploader: string, + key: string, + file: Partial + ) => void; + updateStatus: UpdateStatus; + removeByURL: (uploader: string, url: string) => void; + getMostRecent: (uploader: string) => Upload | null; } -export interface StorageState { - configuration: StorageConfiguration; - credentials: StorageCredentials | null; +export interface UploadInputProps { + multiple?: boolean; + id: string; } export interface StorageUpdateCredentials { - credentials: StorageCredentials; + credentials: StorageCredentials; } export interface StorageUpdateConfiguration { - configuration: { - buckets: string[]; - currentBucket: string; - } + configuration: { + buckets: string[]; + currentBucket: string; + }; } export interface StorageUpdateCurrentBucket { - setCurrentBucket: string; + setCurrentBucket: string; } export interface StorageUpdateAddBucket { - addBucket: string; + addBucket: string; } export interface StorageUpdateRemoveBucket { - removeBucket: string; + removeBucket: string; } export interface StorageUpdateEndpoint { - setEndpoint: string; + setEndpoint: string; } export interface StorageUpdateAccessKeyId { - setAccessKeyId: string; + setAccessKeyId: string; } export interface StorageUpdateSecretAccessKey { - setSecretAccessKey: string; -} - -export type StorageUpdate = - StorageUpdateCredentials -| StorageUpdateConfiguration -| StorageUpdateCurrentBucket -| StorageUpdateAddBucket -| StorageUpdateRemoveBucket -| StorageUpdateEndpoint -| StorageUpdateAccessKeyId -| StorageUpdateSecretAccessKey; + setSecretAccessKey: string; +} + +export interface StorageUpdateRegion { + setRegion: string; +} + +export declare type StorageUpdate = StorageUpdateCredentials | StorageUpdateConfiguration | StorageUpdateCurrentBucket | StorageUpdateAddBucket | StorageUpdateRemoveBucket | StorageUpdateEndpoint | StorageUpdateAccessKeyId | StorageUpdateSecretAccessKey | StorageUpdateRegion; diff --git a/ui/src/state/hark.ts b/ui/src/state/hark.ts index 05add0ac..070d232c 100644 --- a/ui/src/state/hark.ts +++ b/ui/src/state/hark.ts @@ -1,5 +1,5 @@ import _ from 'lodash'; -import { HarkAction, Rope, Seam, Skein } from '../types/hark'; +import { HarkAction, Rope, Seam, Skein } from '@/gear'; import useReactQuerySubscription from '@/logic/useReactQuerySubscription'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { SettingsState } from './settings'; diff --git a/ui/src/state/mock-data.ts b/ui/src/state/mock-data.ts index 32397098..8f166b5b 100644 --- a/ui/src/state/mock-data.ts +++ b/ui/src/state/mock-data.ts @@ -5,13 +5,8 @@ import { DocketHrefGlob, Treaties, Treaty, - Notification, - HarkContent, - HarkBody, Contact, ContactRolodex, - Timebox, - harkBinToId, Pikes } from '@/gear'; import _ from 'lodash'; @@ -193,105 +188,109 @@ function text(t: string) { return { text: t }; } -function createDmNotification(...content: HarkContent[]): HarkBody { - return { - title: [ship('~hastuc-dibtux'), text(' messaged you')], - time: unixToDa(Date.now() - 3_600).toJSNumber(), - content, - binned: '/', - link: '/' - }; -} +/** + * TODO: replace with Skeins + */ -function createBitcoinNotif(amount: string) { - return { - title: [ship('~silnem'), text(` sent you ${amount}`)], - time: unixToDa(Date.now() - 3_600).toJSNumber(), - content: [], - binned: '/', - link: '/' - }; -} +// function createDmNotification(...content: HarkContent[]): HarkBody { +// return { +// title: [ship('~hastuc-dibtux'), text(' messaged you')], +// time: unixToDa(Date.now() - 3_600).toJSNumber(), +// content, +// binned: '/', +// link: '/' +// }; +// } -function createGroupNotif(to: string): HarkBody { - return { - title: [ship('~ridlur-figbud'), text(` invited you to ${to}`)], - content: [], - time: unixToDa(Date.now() - 3_600).toJSNumber(), - binned: '/', - link: '/' - }; -} +// function createBitcoinNotif(amount: string) { +// return { +// title: [ship('~silnem'), text(` sent you ${amount}`)], +// time: unixToDa(Date.now() - 3_600).toJSNumber(), +// content: [], +// binned: '/', +// link: '/' +// }; +// } -window.desk = window.desk || 'garden'; +// function createGroupNotif(to: string): HarkBody { +// return { +// title: [ship('~ridlur-figbud'), text(` invited you to ${to}`)], +// content: [], +// time: unixToDa(Date.now() - 3_600).toJSNumber(), +// binned: '/', +// link: '/' +// }; +// } -function createMockSysNotification(path: string, body: HarkBody[] = []) { - return { - bin: { - place: { - desk: window.desk, - path - }, - path: '/' - }, - time: Date.now() - 3_600, - body - }; -} +// window.desk = window.desk || 'garden'; -const lag = createMockSysNotification('/lag'); -const blocked = { - bin: { - place: { - desk: window.desk, - path: '/desk/base' - }, - path: '/blocked' - }, - time: Date.now() - 3_600, - body: [] -}; -const onboard = createMockSysNotification('/onboard'); +// function createMockSysNotification(path: string, body: HarkBody[] = []) { +// return { +// bin: { +// place: { +// desk: window.desk, +// path +// }, +// path: '/' +// }, +// time: Date.now() - 3_600, +// body +// }; +// } -const updateNotification = createMockSysNotification('/desk/bitcoin', [ - { - title: [{ text: 'App "Bitcoin" updated to version 1.0.1' }], - time: 0, - content: [], - link: '/desk/bitcoin', - binned: '/' - } -]); +// const lag = createMockSysNotification('/lag'); +// const blocked = { +// bin: { +// place: { +// desk: window.desk, +// path: '/desk/base' +// }, +// path: '/blocked' +// }, +// time: Date.now() - 3_600, +// body: [] +// }; +// const onboard = createMockSysNotification('/onboard'); -export function createMockNotification(desk: string, body: HarkBody[]): Notification { - return { - bin: { - place: { - desk, - path: '/' - }, - path: '/' - }, - time: Date.now() - 3_600, - body - }; -} +// const updateNotification = createMockSysNotification('/desk/bitcoin', [ +// { +// title: [{ text: 'App "Bitcoin" updated to version 1.0.1' }], +// time: 0, +// content: [], +// link: '/desk/bitcoin', +// binned: '/' +// } +// ]); -export const mockNotifications: Timebox = _.keyBy( - [ - lag, - blocked, - onboard, - updateNotification, - createMockNotification('groups', [ - createDmNotification(text('ie the hook agent responsible for marking the notifications')), - createDmNotification(ship('~hastuc-dibtux'), text(' sent a link')) - ]), - createMockNotification('bitcoin-wallet', [createBitcoinNotif('0.025 BTC')]), - createMockNotification('groups', [createGroupNotif('a Group: Tlon Corporation')]) - ], - (not) => harkBinToId(not.bin) -); +// export function createMockNotification(desk: string, body: HarkBody[]): Notification { +// return { +// bin: { +// place: { +// desk, +// path: '/' +// }, +// path: '/' +// }, +// time: Date.now() - 3_600, +// body +// }; +// } + +// export const mockNotifications: Timebox = _.keyBy( +// [ +// lag, +// blocked, +// onboard, +// updateNotification, +// createMockNotification('groups', [ +// createDmNotification(text('ie the hook agent responsible for marking the notifications')), +// createDmNotification(ship('~hastuc-dibtux'), text(' sent a link')) +// ]), +// createMockNotification('bitcoin-wallet', [createBitcoinNotif('0.025 BTC')]), +// createMockNotification('groups', [createGroupNotif('a Group: Tlon Corporation')]) +// ], +// (not) => harkBinToId(not.bin) +// ); const contact: Contact = { nickname: '', diff --git a/ui/src/state/storage/index.ts b/ui/src/state/storage/index.ts index 6f714fc6..42a29202 100644 --- a/ui/src/state/storage/index.ts +++ b/ui/src/state/storage/index.ts @@ -1,60 +1,2 @@ -import _ from 'lodash'; -import { enableMapSet } from 'immer'; -import { reduce } from './reducer'; -import { - createState, - createSubscription, - reduceStateN, - BaseState, -} from '../base'; -import { StorageCredentials } from '@/gear'; - -enableMapSet(); - -let numLoads = 0; - -export interface BaseStorageState { - loaded?: boolean; - hasCredentials?: boolean; - s3: { - configuration: { - buckets: Set; - currentBucket: string; - region: string; - }; - credentials: StorageCredentials | null; - }; - [ref: string]: unknown; -} - -export type StorageState = BaseStorageState & BaseState; - -export const useStorage = createState( - 'Storage', - () => ({ - loaded: false, - hasCredentials: false, - s3: { - configuration: { - buckets: new Set(), - currentBucket: '', - region: '', - }, - credentials: null, - }, - }), - {}, - [ - (set, get) => - createSubscription('storage', '/all', (e) => { - const data = _.get(e, 's3-update', false); - if (data) { - reduceStateN(get(), data, reduce); - } - numLoads += 1; - if (numLoads === 2) { - set({ loaded: true }); - } - }), - ] -); +export * from './storage'; +export * from './upload'; diff --git a/ui/src/state/storage/reducer.ts b/ui/src/state/storage/reducer.ts index 9f5ffadc..a68bbe08 100644 --- a/ui/src/state/storage/reducer.ts +++ b/ui/src/state/storage/reducer.ts @@ -1,9 +1,10 @@ +/* eslint-disable no-param-reassign */ import { StorageUpdate } from '@/gear'; import _ from 'lodash'; +import { BaseStorageState } from '@/gear'; import { BaseState } from '../base'; -import { StorageState as State } from '.'; -type StorageState = State & BaseState; +export type StorageState = BaseStorageState & BaseState; const credentials = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'credentials', false); @@ -33,14 +34,6 @@ const currentBucket = (json: StorageUpdate, state: StorageState): StorageState = return state; }; -const region = (json: StorageUpdate, state: StorageState): StorageState => { - const data = _.get(json, 'setRegion', false); - if (data && state.s3) { - state.s3.configuration.region = data; - } - return state; -}; - const addBucket = (json: StorageUpdate, state: StorageState): StorageState => { const data = _.get(json, 'addBucket', false); if (data) { @@ -81,7 +74,15 @@ const secretAccessKey = (json: StorageUpdate, state: StorageState): StorageState return state; }; -export const reduce = [ +const region = (json: StorageUpdate, state: StorageState): StorageState => { + const data = _.get(json, 'setRegion', false); + if (data && state.s3.configuration) { + state.s3.configuration.region = data; + } + return state; +}; + +const reduce = [ credentials, configuration, currentBucket, @@ -92,3 +93,5 @@ export const reduce = [ secretAccessKey, region, ]; + +export default reduce; diff --git a/ui/src/state/storage/storage.ts b/ui/src/state/storage/storage.ts new file mode 100644 index 00000000..e9ac7c61 --- /dev/null +++ b/ui/src/state/storage/storage.ts @@ -0,0 +1,46 @@ +import _ from 'lodash'; +import { enableMapSet } from 'immer'; +import { BaseStorageState } from '@/gear'; +import reduce from './reducer'; +import { + createState, + createSubscription, + reduceStateN, + BaseState, +} from '../base'; + +enableMapSet(); + +let numLoads = 0; + +export type StorageState = BaseStorageState & BaseState; + +export const useStorage = createState( + 'Storage', + () => ({ + loaded: false, + hasCredentials: false, + s3: { + configuration: { + buckets: new Set(), + currentBucket: '', + region: '', + }, + credentials: null, + }, + }), + {}, + [ + (set, get) => + createSubscription('storage-store', '/all', (e) => { + const data = _.get(e, 'storage-update', false); + if (data) { + reduceStateN(get(), data, reduce); + } + numLoads += 1; + if (numLoads === 2) { + set({ loaded: true }); + } + }), + ] +); diff --git a/ui/src/state/storage/upload.ts b/ui/src/state/storage/upload.ts new file mode 100644 index 00000000..7bfdd728 --- /dev/null +++ b/ui/src/state/storage/upload.ts @@ -0,0 +1,231 @@ +import _ from 'lodash'; +import create from 'zustand'; +import produce from 'immer'; +import { formatDa, unixToDa, deSig } from '@urbit/aura'; +import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; +import { getImageSize } from 'react-image-size'; +import { useCallback, useEffect, useState } from 'react'; +import { FileStore, Status, StorageCredentials, Uploader } from '@/gear'; +import { useStorage } from './storage'; +import { StorageState } from './reducer'; + +export function prefixEndpoint(endpoint: string) { + return endpoint.match(/https?:\/\//) ? endpoint : `https://${endpoint}`; +} + +function imageSize(url: string) { + const size = getImageSize(url).then<[number, number]>(({ width, height }) => [ + width, + height, + ]); + return size; +} + +export const useFileStore = create((set, get) => ({ + client: null, + uploaders: {}, + createClient: (credentials: StorageCredentials, region: string) => { + const endpoint = new URL(prefixEndpoint(credentials.endpoint)); + const client = new S3Client({ + endpoint: { + protocol: endpoint.protocol.slice(0, -1), + hostname: endpoint.host, + path: endpoint.pathname || '/', + }, + // us-east-1 is necessary for compatibility with other S3 providers (i.e., filebase) + region: region || 'us-east-1', + credentials, + forcePathStyle: true, + }); + set({ client }); + }, + getUploader: (key) => { + const { uploaders } = get(); + + return uploaders[key]; + }, + update: (key: string, updateFn: (uploader: Uploader) => void) => { + set(produce((draft) => updateFn(draft.uploaders[key]))); + }, + uploadFiles: async (uploader, files, bucket) => { + if (!files) return; + + const fileList = [...files].map((file) => ({ + file, + key: `${window.ship}/${deSig(formatDa(unixToDa(new Date().getTime())))}-${file.name}`, + status: 'initial' as Status, + url: '', + size: [0, 0] as [number, number], + })); + + const newFiles = _.keyBy(fileList, 'key'); + + const { update, upload } = get(); + + update(uploader, (draft) => { + draft.files = { ...draft.files, ...newFiles }; + }); + + fileList.forEach((f) => upload(uploader, f, bucket)); + }, + upload: async (uploader, upload, bucket) => { + const { client, updateStatus, updateFile } = get(); + if (!client) { + return; + } + + const { key, file } = upload; + updateStatus(uploader, key, 'loading'); + + const command = new PutObjectCommand({ + Bucket: bucket, + Key: key, + Body: file, + ContentType: file.type, + ContentLength: file.size, + ACL: 'public-read', + }); + + const url = await getSignedUrl(client, command); + + client + .send(command) + .then(() => { + const fileUrl = url.split('?')[0]; + updateStatus(uploader, key, 'success'); + imageSize(fileUrl).then((s) => + updateFile(uploader, key, { + size: s, + url: fileUrl, + }) + ); + }) + .catch((error: any) => { + updateStatus( + uploader, + key, + 'error', + `S3 upload error: ${error.message}, check your S3 configuration.` + ); + console.log({ error }); + }); + }, + clear: (uploader) => { + get().update(uploader, (draft) => { + draft.files = {}; + }); + }, + updateFile: (uploader, fileKey, file) => { + get().update(uploader, (draft) => { + const current = draft.files[fileKey]; + draft.files[fileKey] = { ...current, ...file }; + }); + }, + updateStatus: (uploader, fileKey, status, msg) => { + get().update(uploader, (draft) => { + draft.files[fileKey].status = status as Status; + + if (status === 'error' && msg) { + draft.files[fileKey].errorMessage = msg; + } + }); + }, + removeByURL: (uploader, url) => { + get().update(uploader, (draft) => { + const { files } = draft; + draft.files = Object.fromEntries( + Object.entries(files).filter(([_k, f]) => f.url !== url) + ); + }); + }, + getMostRecent: (key) => { + const uploader = get().uploaders[key]; + + if (!uploader) { + return null; + } + + const fileKey = _.last(Object.keys(uploader.files).sort()); + return fileKey ? uploader.files[fileKey] : null; + }, +})); + +const emptyUploader = (key: string, bucket: string): Uploader => ({ + files: {}, + getMostRecent: () => useFileStore.getState().getMostRecent(key), + uploadFiles: async (files) => + useFileStore.getState().uploadFiles(key, files, bucket), + clear: () => useFileStore.getState().clear(key), + removeByURL: (url) => useFileStore.getState().removeByURL(key, url), + prompt: () => { + const input = document.createElement('input'); + input.type = 'file'; + input.multiple = true; + input.id = key + Math.floor(Math.random() * 1000000); + input.accept = 'image/*,video/*,audio/*'; + input.addEventListener('change', async (e) => { + const { files } = e.target as HTMLInputElement; + useFileStore.getState().uploadFiles(key, files, bucket); + input.remove(); + }); + input.click(); + }, +}); + +export function useClient() { + const { + s3: { credentials, configuration }, + } = useStorage(); + const { client, createClient } = useFileStore(); + const [hasCredentials, setHasCredentials] = useState(false); + + useEffect(() => { + const hasCreds = + credentials?.accessKeyId && + credentials?.endpoint && + credentials?.secretAccessKey; + if (hasCreds) { + setHasCredentials(true); + } + }, [credentials]); + + const initClient = useCallback(async () => { + if (credentials) { + await createClient(credentials, configuration.region); + } + }, [createClient, credentials, configuration]); + + useEffect(() => { + if (hasCredentials && !client) { + initClient(); + } + }, [client, hasCredentials, initClient]); + + return client; +} + +const selS3 = (s: StorageState) => s.s3; +const selUploader = (key: string) => (s: FileStore) => s.uploaders[key]; +export function useUploader(key: string): Uploader | undefined { + const { + configuration: { currentBucket }, + } = useStorage(selS3); + const client = useClient(); + const uploader = useFileStore(selUploader(key)); + + useEffect(() => { + if (client && currentBucket) { + useFileStore.setState( + produce((draft) => { + draft.uploaders[key] = emptyUploader(key, currentBucket); + }) + ); + } + }, [client, currentBucket, key]); + + return uploader; +} +(window as any).fileUploader = useFileStore.getState; +(window as any).emptyUploader = emptyUploader; +(window as any).warehouse = useStorage.getState; From 5d13032fde5729e25d1534162566e9424b5bf9b9 Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 7 Jun 2023 21:17:30 -0700 Subject: [PATCH 10/14] gear: remove legacy Kiln types --- ui/src/gear/hood/types.ts | 127 -------------------------------------- 1 file changed, 127 deletions(-) diff --git a/ui/src/gear/hood/types.ts b/ui/src/gear/hood/types.ts index 17676b47..d255464e 100644 --- a/ui/src/gear/hood/types.ts +++ b/ui/src/gear/hood/types.ts @@ -1,53 +1,3 @@ - -/** - * A pending commit, awaiting a future kelvin version - */ -interface Woof { - aeon: number; - weft: Weft; -} - -interface Rein { - /** - * Agents not in manifest that should be running - */ - add: string[]; - /** - * Agents in manifest that should not be running - */ - sub: string[]; -} - -export interface Rail { - /** - * Original publisher of desk, if available - */ - publisher: string | null; - /** - * Ship of foreign vat - */ - ship: string; - /** - * Desk of foreign vat - */ - desk: string; - /** - * Aeon (version number) that we currently have synced - */ - aeon: number; - next: Woof[]; - paused: boolean; -} - -/** - * A tracker of a foreign {@link Vat} - * - */ -export interface Arak { - rein: Rein; - rail: Rail | null; -} - /** * A component's kelvin version */ @@ -66,52 +16,6 @@ export interface Weft { kelvin: number; } -export interface KilnDiffBlock { - block: { - desk: string; - arak: Arak; - weft: Weft; - blockers: string[]; - }; -} - -export interface KilnDiffReset { - reset: { - desk: string; - arak: Arak; - }; -} - -export interface KilnDiffMerge { - merge: { - desk: string; - arak: Arak; - }; -} - -export interface KilnDiffMergeSunk { - 'merge-sunk': { - desk: string; - arak: Arak; - tang: string; - }; -} - -export interface KilnDiffMergeFail { - 'merge-fail': { - desk: string; - arak: Arak; - tang: string; - }; -} - -export type KilnDiff = - | KilnDiffBlock - | KilnDiffReset - | KilnDiffMerge - | KilnDiffMergeSunk - | KilnDiffMergeFail; - /** * Cases for revision * @@ -130,37 +34,6 @@ export interface Cass { da: string; } -/** - * A local desk installation - */ -export interface Vat { - /** - * Desk that this Vat describes - */ - desk: string; - /** - * Hash of the desk, rendered as `@uv` - * - * @remarks - * Equivalent to - * ```hoon - * .^(@uv %cz /=desk=) - * ``` - */ - hash: string; - /** - * Current revision - */ - cass: Cass; - /** - * Foreign sync - */ - arak: Arak; -} - -export interface Vats { - [desk: string]: Vat; -} /** * TODO: crisp one-liner describing a Pike */ From 90a61b8ed6c085bf069ad866d11427ddf9bbfa69 Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 7 Jun 2023 21:21:41 -0700 Subject: [PATCH 11/14] gear: update settings-store name - also fix PutEntry type --- ui/src/gear/settings/lib.ts | 10 +++++----- ui/src/gear/settings/types.ts | 1 + ui/src/mocks/handlers.ts | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ui/src/gear/settings/lib.ts b/ui/src/gear/settings/lib.ts index 4d054b4d..e32c5480 100644 --- a/ui/src/gear/settings/lib.ts +++ b/ui/src/gear/settings/lib.ts @@ -2,7 +2,7 @@ import { Poke, Scry } from '@urbit/http-api'; import { PutBucket, Key, Bucket, DelBucket, Value, PutEntry, DelEntry, SettingsUpdate } from './types'; export const action = (data: T): Poke => ({ - app: 'settings-store', + app: 'settings', mark: 'settings-event', json: data }); @@ -56,22 +56,22 @@ export const delEntry = ( }); export const getAll: Scry = { - app: 'settings-store', + app: 'settings', path: '/all' }; export const getBucket = (desk: string, bucket: string) => ({ - app: 'settings-store', + app: 'settings', path: `/bucket/${bucket}` }); export const getEntry = (desk: string, bucket: string, entry: string) => ({ - app: 'settings-store', + app: 'settings', path: `/entry/${desk}/${bucket}/${entry}` }); export const getDeskSettings = (desk: string) => ({ - app: 'settings-store', + app: 'settings', path: `/desk/${desk}` }); diff --git a/ui/src/gear/settings/types.ts b/ui/src/gear/settings/types.ts index af02c70b..7d393912 100644 --- a/ui/src/gear/settings/types.ts +++ b/ui/src/gear/settings/types.ts @@ -21,6 +21,7 @@ export interface DelBucket { export interface PutEntry { 'put-entry': { + desk: string; 'bucket-key': Key; 'entry-key': Key; 'value'?: Value; diff --git a/ui/src/mocks/handlers.ts b/ui/src/mocks/handlers.ts index ab71796c..fa177f3b 100644 --- a/ui/src/mocks/handlers.ts +++ b/ui/src/mocks/handlers.ts @@ -4,7 +4,7 @@ import { mockAllies, mockCharges, mockTreaties } from '../state/mock-data'; const settingsSub = { action: 'subscribe', - app: 'settings-store', + app: 'settings', path: '/desk/garden' } as SubscriptionHandler; @@ -35,7 +35,7 @@ const mockHandlers: Handler[] = [ treatySub, { action: 'scry', - app: 'settings-store', + app: 'settings', path: '/desk/garden', func: () => ({ desk: { From 6d792405e71c02823ab482f7a33630a73583b03d Mon Sep 17 00:00:00 2001 From: tomholford Date: Wed, 7 Jun 2023 21:28:03 -0700 Subject: [PATCH 12/14] gear: fix BigIntArrayOrderedMap constructor See: https://github.com/tloncorp/landscape/pull/184#discussion_r1213348543 --- ui/src/gear/utils/BigIntArrayOrderedMap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/gear/utils/BigIntArrayOrderedMap.ts b/ui/src/gear/utils/BigIntArrayOrderedMap.ts index dcd1ec37..49987448 100644 --- a/ui/src/gear/utils/BigIntArrayOrderedMap.ts +++ b/ui/src/gear/utils/BigIntArrayOrderedMap.ts @@ -59,7 +59,7 @@ export class BigIntArrayOrderedMap implements Iterable<[BigInteger[], V]> { constructor(items: [BigInteger[], V][] = [], reversed = false) { items.forEach(([key, val]) => { - this.set(key, val); + this.root[arrToString(key)] = val; }); this.reversed = reversed; } From 9fc8adbd8f8ff8d3e30ded74dc585642ba1878bf Mon Sep 17 00:00:00 2001 From: tomholford Date: Thu, 8 Jun 2023 12:47:21 -0700 Subject: [PATCH 13/14] meta: refactor storageVersion Before this change, Vite was complaining that the value was being referenced before being defined. --- ui/package.json | 2 +- ui/src/constants.ts | 5 +++++ ui/src/logic/utils.ts | 8 +------- ui/src/nav/search/Home.tsx | 2 +- ui/src/state/base.ts | 3 +-- ui/src/state/local.ts | 2 +- ui/vite.config.ts | 4 +++- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ui/package.json b/ui/package.json index 8415a349..ac2af521 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "landscape", - "version": "0.0.0", + "version": "1.11.0", "private": true, "engines": { "node": "^16.0.0" diff --git a/ui/src/constants.ts b/ui/src/constants.ts index e653beeb..b7e16056 100644 --- a/ui/src/constants.ts +++ b/ui/src/constants.ts @@ -1,3 +1,8 @@ +export const storageVersion = parseInt( + import.meta.env.VITE_STORAGE_VERSION, + 10 +); + export const SECTIONS = { SELECTS: 'Tlon Selects', PALS: 'Powered by Pals', diff --git a/ui/src/logic/utils.ts b/ui/src/logic/utils.ts index 2d60dc2b..ca481e71 100644 --- a/ui/src/logic/utils.ts +++ b/ui/src/logic/utils.ts @@ -1,6 +1,5 @@ -import { Yarn, isYarnEmph, isYarnShip } from '@/gear'; +import { Yarn, isYarnEmph, isYarnShip, Docket, DocketHref, Treaty } from '@/gear'; import { findLast } from 'lodash'; -import { Docket, DocketHref, Treaty } from '@/gear'; import { hsla, parseToHsla, parseToRgba } from 'color2k'; import _ from 'lodash'; import { differenceInDays, endOfToday, format } from 'date-fns'; @@ -76,11 +75,6 @@ export function clearStorageMigration() { return {} as T; } -export const storageVersion = parseInt( - import.meta.env.VITE_STORAGE_VERSION, - 10 -); - export function isColor(color: string): boolean { try { parseToRgba(color); diff --git a/ui/src/nav/search/Home.tsx b/ui/src/nav/search/Home.tsx index c4699316..23763b12 100644 --- a/ui/src/nav/search/Home.tsx +++ b/ui/src/nav/search/Home.tsx @@ -1,3 +1,4 @@ +import { storageVersion } from '@/constants'; import produce from 'immer'; import create from 'zustand'; import _ from 'lodash'; @@ -18,7 +19,6 @@ import { clearStorageMigration, createStorageKey, getAppHref, - storageVersion, } from '@/logic/utils'; import useContactState, { emptyContact } from '../../state/contact'; diff --git a/ui/src/state/base.ts b/ui/src/state/base.ts index 51144d18..3a0885d6 100644 --- a/ui/src/state/base.ts +++ b/ui/src/state/base.ts @@ -1,4 +1,5 @@ /* eslint-disable no-param-reassign */ +import { storageVersion } from '@/constants'; import { applyPatches, Patch, @@ -16,9 +17,7 @@ import api from '../api'; import { clearStorageMigration, createStorageKey, - storageVersion, } from '../logic/utils'; - setAutoFreeze(false); enablePatches(); diff --git a/ui/src/state/local.ts b/ui/src/state/local.ts index 8f71ff5e..6032999a 100644 --- a/ui/src/state/local.ts +++ b/ui/src/state/local.ts @@ -1,10 +1,10 @@ +import { storageVersion } from '@/constants'; import create from 'zustand'; import { persist } from 'zustand/middleware'; import produce from 'immer'; import { clearStorageMigration, createStorageKey, - storageVersion, } from '@/logic/utils'; export type SubscriptionStatus = 'connected' | 'disconnected' | 'reconnecting'; diff --git a/ui/vite.config.ts b/ui/vite.config.ts index c6b38948..96d0c1d8 100644 --- a/ui/vite.config.ts +++ b/ui/vite.config.ts @@ -1,3 +1,4 @@ +import packageJson from './package.json'; import { loadEnv, defineConfig } from 'vite'; import analyze from 'rollup-plugin-analyzer'; import { visualizer } from 'rollup-plugin-visualizer'; @@ -8,7 +9,8 @@ import basicSsl from '@vitejs/plugin-basic-ssl'; // https://vitejs.dev/config/ export default ({ mode }) => { - process.env.VITE_STORAGE_VERSION = Date.now().toString(); + process.env.VITE_STORAGE_VERSION = + mode === 'development' ? Date.now().toString() : packageJson.version; Object.assign(process.env, loadEnv(mode, process.cwd())); const SHIP_URL = From 8d70226911d887fe8728f1fdf9d73c0aecb4cfe7 Mon Sep 17 00:00:00 2001 From: tomholford <16504501+tomholford@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:04:56 -0700 Subject: [PATCH 14/14] meta: storage-store --> storage mark rename Co-authored-by: Hunter Miller --- ui/src/state/storage/storage.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/state/storage/storage.ts b/ui/src/state/storage/storage.ts index e9ac7c61..b43ea7de 100644 --- a/ui/src/state/storage/storage.ts +++ b/ui/src/state/storage/storage.ts @@ -32,7 +32,7 @@ export const useStorage = createState( {}, [ (set, get) => - createSubscription('storage-store', '/all', (e) => { + createSubscription('storage', '/all', (e) => { const data = _.get(e, 'storage-update', false); if (data) { reduceStateN(get(), data, reduce);