diff --git a/@types/graphql.d.ts b/@types/graphql.d.ts index 999721d..5899e3c 100644 --- a/@types/graphql.d.ts +++ b/@types/graphql.d.ts @@ -1,136 +1,158 @@ + declare module '*/credential.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const CreateCredential: DocumentNode; - export const EditCredential: DocumentNode; - export const DeleteCredential: DocumentNode; +export const EditCredential: DocumentNode; +export const DeleteCredential: DocumentNode; export default defaultDocument; } + declare module '*/drop.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const CreateDrop: DocumentNode; - export const PatchDrop: DocumentNode; - export const PauseDrop: DocumentNode; - export const ResumeDrop: DocumentNode; - export const ShutdownDrop: DocumentNode; - export const RetryDrop: DocumentNode; - export const GetOrganizationDrops: DocumentNode; - export const GetProjectDrops: DocumentNode; - export const GetDrop: DocumentNode; - export const GetDropBasicDetail: DocumentNode; +export const PatchDrop: DocumentNode; +export const PauseDrop: DocumentNode; +export const ResumeDrop: DocumentNode; +export const ShutdownDrop: DocumentNode; +export const RetryDrop: DocumentNode; +export const GetOrganizationDrops: DocumentNode; +export const GetProjectDrops: DocumentNode; +export const GetDrop: DocumentNode; +export const GetDropBasicDetail: DocumentNode; export default defaultDocument; } + declare module '*/invite.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const InviteMember: DocumentNode; - export const AcceptInvite: DocumentNode; - export const GetInvite: DocumentNode; +export const AcceptInvite: DocumentNode; +export const GetInvite: DocumentNode; export default defaultDocument; } + declare module '*/member.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const DeactivateMember: DocumentNode; - export const ReactivateMember: DocumentNode; +export const ReactivateMember: DocumentNode; export default defaultDocument; } + declare module '*/mint.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const MintEdition: DocumentNode; - export const RetryMintEdition: DocumentNode; - export const UpdateCollectionMint: DocumentNode; - export const GetCollectionMints: DocumentNode; - export const GetCollectionMint: DocumentNode; - export const GetCollectionMintTransfers: DocumentNode; - export const GetCollectionMintUpdates: DocumentNode; +export const RetryMintEdition: DocumentNode; +export const UpdateCollectionMint: DocumentNode; +export const GetCollectionMints: DocumentNode; +export const GetCollectionMint: DocumentNode; +export const GetCollectionMintTransfers: DocumentNode; +export const GetCollectionMintUpdates: DocumentNode; export default defaultDocument; } + declare module '*/organization.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const CreateOrganization: DocumentNode; - export const EditOrganization: DocumentNode; - export const GetOrganizationProjects: DocumentNode; - export const GetOrganizationBasicInfo: DocumentNode; - export const GetOrganizationMembers: DocumentNode; +export const EditOrganization: DocumentNode; +export const GetOrganizationProjects: DocumentNode; +export const GetOrganizationBasicInfo: DocumentNode; +export const GetOrganizationMembers: DocumentNode; export default defaultDocument; } + declare module '*/project.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const CreateProject: DocumentNode; - export const EditProject: DocumentNode; - export const GetProject: DocumentNode; +export const EditProject: DocumentNode; +export const GetProject: DocumentNode; export default defaultDocument; } + declare module '*/webhook.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const CreateWebhook: DocumentNode; - export const DeleteWebhook: DocumentNode; - export const EditWebhook: DocumentNode; +export const DeleteWebhook: DocumentNode; +export const EditWebhook: DocumentNode; + + export default defaultDocument; +} + + +declare module '*/analytics.graphql' { + import { DocumentNode } from 'graphql'; + const defaultDocument: DocumentNode; + export const GetProjectAnalytics: DocumentNode; export default defaultDocument; } + declare module '*/collections.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const GetProjectCollections: DocumentNode; - export const GetProjectCollection: DocumentNode; - export const GetProjectCollectionMints: DocumentNode; - export const GetProjectCollectionHolders: DocumentNode; +export const GetProjectCollection: DocumentNode; +export const GetProjectCollectionMints: DocumentNode; +export const GetProjectCollectionHolders: DocumentNode; export default defaultDocument; } + declare module '*/credentials.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const GetOrganizationCredentials: DocumentNode; - export const GetOrganizationCredential: DocumentNode; +export const GetOrganizationCredential: DocumentNode; export default defaultDocument; } + declare module '*/credits.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const GetOrganizationCreditBalance: DocumentNode; - export const GetOrganizationCreditAndDeductionTotals: DocumentNode; - export const GetOrganizationCreditDeposits: DocumentNode; - export const GetCreditSheet: DocumentNode; +export const GetOrganizationCreditAndDeductionTotals: DocumentNode; +export const GetOrganizationCreditDeposits: DocumentNode; +export const GetCreditSheet: DocumentNode; export default defaultDocument; } + declare module '*/customer.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const GetProjectCustomers: DocumentNode; - export const GetCustomerBasicDetail: DocumentNode; - export const GetWallets: DocumentNode; - export const GetCustomerNfts: DocumentNode; +export const GetCustomerBasicDetail: DocumentNode; +export const GetWallets: DocumentNode; +export const GetCustomerNfts: DocumentNode; export default defaultDocument; } + declare module '*/holder.graphql' { import { DocumentNode } from 'graphql'; @@ -139,6 +161,7 @@ declare module '*/holder.graphql' { export default defaultDocument; } + declare module '*/purchase.graphql' { import { DocumentNode } from 'graphql'; @@ -147,6 +170,7 @@ declare module '*/purchase.graphql' { export default defaultDocument; } + declare module '*/treasury.graphql' { import { DocumentNode } from 'graphql'; @@ -155,21 +179,24 @@ declare module '*/treasury.graphql' { export default defaultDocument; } + declare module '*/user.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const GetUserAffiliations: DocumentNode; - export const GetUser: DocumentNode; +export const GetUser: DocumentNode; export default defaultDocument; } + declare module '*/webhooks.graphql' { import { DocumentNode } from 'graphql'; const defaultDocument: DocumentNode; export const GetOrganizationWebhooks: DocumentNode; - export const GetOrganizationWebhook: DocumentNode; +export const GetOrganizationWebhook: DocumentNode; export default defaultDocument; } + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 61e2c93..c73bdd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "dependencies": { "@apollo/client": "^3.7.4", "@holaplex/ui-library-react": "^0.19.0", + "@nivo/bar": "^0.83.0", + "@nivo/pie": "^0.83.0", "@ory/client": "^1.1.41", "@ory/integrations": "^1.1.0", "@stripe/react-stripe-js": "^2.1.0", @@ -2472,6 +2474,201 @@ "node": ">= 10" } }, + "node_modules/@nivo/annotations": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.83.0.tgz", + "integrity": "sha512-FkfCprk1a3WCCNcQOfI2+Ww7vqTP/nJjQDVhFYf1YAaEGwXi4+OO4uJAtKtNcGE5cJWdOp+f0Gt4aNPGx7RtEw==", + "dependencies": { + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/prop-types": "^15.7.2", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/arcs": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/arcs/-/arcs-0.83.0.tgz", + "integrity": "sha512-UcbNbtp28lbI5V/Sm6TIgYzZmtuhSxW3eTma+YBsgXi1AN/THSwEg0gSV8owyDT/8kaL+jcBQ6c54gzSLClhkw==", + "dependencies": { + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-shape": "^2.0.0", + "d3-shape": "^1.3.5" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/axes": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/axes/-/axes-0.83.0.tgz", + "integrity": "sha512-rHMl+DdXQlY2wl7VCSQNcJi4QNISUWOkcWzJeJeVaYR73Z13SVGgiC7kW0czJuogDTSnDAJ/EcFCGmyGVuznGQ==", + "dependencies": { + "@nivo/core": "0.83.0", + "@nivo/scales": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-format": "^1.4.1", + "@types/d3-time-format": "^2.3.1", + "@types/prop-types": "^15.7.2", + "d3-format": "^1.4.4", + "d3-time-format": "^3.0.0", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/bar": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/bar/-/bar-0.83.0.tgz", + "integrity": "sha512-QXN6BcT1PiT/YViyoDU4G5mytbOUP1jYbuQmJhDDxKPMLNcZ/pHfThedRGVfDoD1poHBRJtV6mbgeCpAVmlTtw==", + "dependencies": { + "@nivo/annotations": "0.83.0", + "@nivo/axes": "0.83.0", + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@nivo/legends": "0.83.0", + "@nivo/scales": "0.83.0", + "@nivo/tooltip": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-scale": "^3.2.3", + "@types/d3-shape": "^2.0.0", + "d3-scale": "^3.2.3", + "d3-shape": "^1.3.5", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/colors": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.83.0.tgz", + "integrity": "sha512-n34LWYtE2hbd1fdCDP7TCHNZdbiO1PwcvXLo0VsKK5lNPY/FA5SXA7Z9Ubl/ChSwBwbzAsaAhjTy8KzKzSjDcA==", + "dependencies": { + "@nivo/core": "0.83.0", + "@types/d3-color": "^2.0.0", + "@types/d3-scale": "^3.2.3", + "@types/d3-scale-chromatic": "^2.0.0", + "@types/prop-types": "^15.7.2", + "d3-color": "^3.1.0", + "d3-scale": "^3.2.3", + "d3-scale-chromatic": "^2.0.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/core": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/core/-/core-0.83.0.tgz", + "integrity": "sha512-I9fjZAbIPz41JA2WP8Avsud/xk0iiM1nWUzcvZBDebBGFDB5Y1lrldUt9l5kvOeMth3Qj/1lVFTiJxQuojxH4Q==", + "dependencies": { + "@nivo/recompose": "0.83.0", + "@nivo/tooltip": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-shape": "^2.0.0", + "d3-color": "^3.1.0", + "d3-format": "^1.4.4", + "d3-interpolate": "^2.0.1", + "d3-scale": "^3.2.3", + "d3-scale-chromatic": "^2.0.0", + "d3-shape": "^1.3.5", + "d3-time-format": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nivo/donate" + }, + "peerDependencies": { + "prop-types": ">= 15.5.10 < 16.0.0", + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/legends": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/legends/-/legends-0.83.0.tgz", + "integrity": "sha512-WWl3/hTpFJ7/2L0RG53Gbr9KQk+ZjD71a/RIPMJ5ArEvAvKKfWuWQCtEm3FpqAazX8eYMnsQ3Pi17c8ohEIXRg==", + "dependencies": { + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@types/d3-scale": "^3.2.3", + "@types/prop-types": "^15.7.2", + "d3-scale": "^3.2.3", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/pie": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/pie/-/pie-0.83.0.tgz", + "integrity": "sha512-98j/h4T/QmQ10gFh1cMh6uLfcGurFcYZN97Lu3ig3D9bbsLuLgpUED/d5O+8w7qLJtnlg3zptqy+N9UgRAqbOg==", + "dependencies": { + "@nivo/arcs": "0.83.0", + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@nivo/legends": "0.83.0", + "@nivo/tooltip": "0.83.0", + "@types/d3-shape": "^2.0.0", + "d3-shape": "^1.3.5" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/recompose": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/recompose/-/recompose-0.83.0.tgz", + "integrity": "sha512-3cLEoi9ZoE4LTn6B98oUVd0MRAy5bWK7W3yb0u4EkjLoXXCRvUAI08Wr2AAagOzVOg5PmvghIDgvkz1tlFZTGQ==", + "dependencies": { + "@types/prop-types": "^15.7.2", + "@types/react-lifecycles-compat": "^3.0.1", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">= 16.14.0 < 19.0.0" + } + }, + "node_modules/@nivo/scales": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/scales/-/scales-0.83.0.tgz", + "integrity": "sha512-DZn5IcMJErCURDuQPmYltu6GTPphTDVLMvbeN/Id/VSVbD1uYKvdXPKUNOe/N2IvnE8wjjCPv88DLcRhw6VTVg==", + "dependencies": { + "@types/d3-scale": "^3.2.3", + "@types/d3-time": "^1.1.1", + "@types/d3-time-format": "^3.0.0", + "d3-scale": "^3.2.3", + "d3-time": "^1.0.11", + "d3-time-format": "^3.0.0", + "lodash": "^4.17.21" + } + }, + "node_modules/@nivo/scales/node_modules/@types/d3-time-format": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-3.0.1.tgz", + "integrity": "sha512-5GIimz5IqaRsdnxs4YlyTZPwAMfALu/wA4jqSiuqgdbCxUZ2WjrnwANqOtoBJQgeaUTdYNfALJO0Yb0YrDqduA==" + }, + "node_modules/@nivo/tooltip": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/tooltip/-/tooltip-0.83.0.tgz", + "integrity": "sha512-HewujRqZNmcVnAv/LPLVyYwViad+rYTsFMdzLRzuTPq2hju1R+cfxokTomunG8e1SDtUPtULEVXtPg2ATIzNYg==", + "dependencies": { + "@nivo/core": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2707,6 +2904,66 @@ "react": ">=16.8" } }, + "node_modules/@react-spring/animated": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", + "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", + "dependencies": { + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", + "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/shared": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", + "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", + "dependencies": { + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", + "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==" + }, + "node_modules/@react-spring/web": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", + "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", + "dependencies": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@repeaterjs/repeater": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", @@ -2821,6 +3078,57 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/d3-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz", + "integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w==" + }, + "node_modules/@types/d3-format": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.2.tgz", + "integrity": "sha512-WeGCHAs7PHdZYq6lwl/+jsl+Nfc1J2W1kNcMeIMYzQsT6mtBDBgtJ/rcdjZ0k0rVIvqEZqhhuD5TK/v3P2gFHQ==" + }, + "node_modules/@types/d3-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-2.0.2.tgz", + "integrity": "sha512-3YHpvDw9LzONaJzejXLOwZ3LqwwkoXb9LI2YN7Hbd6pkGo5nIlJ09ul4bQhBN4hQZJKmUpX8HkVqbzgUKY48cg==" + }, + "node_modules/@types/d3-scale": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.2.tgz", + "integrity": "sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ==", + "dependencies": { + "@types/d3-time": "^2" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-2.0.1.tgz", + "integrity": "sha512-3EuZlbPu+pvclZcb1DhlymTWT2W+lYsRKBjvkH2ojDbCWDYavifqu1vYX9WGzlPgCgcS4Alhk1+zapXbGEGylQ==" + }, + "node_modules/@types/d3-scale/node_modules/@types/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg==" + }, + "node_modules/@types/d3-shape": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-2.1.3.tgz", + "integrity": "sha512-HAhCel3wP93kh4/rq+7atLdybcESZ5bRHDEZUojClyZWsRuEMo3A52NGYJSh48SxfxEU6RZIVbZL2YFZ2OAlzQ==", + "dependencies": { + "@types/d3-path": "^2" + } + }, + "node_modules/@types/d3-time": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.1.tgz", + "integrity": "sha512-ULX7LoqXTCYtM+tLYOaeAJK7IwCT+4Gxlm2MaH0ErKLi07R5lh8NHCAyWcDkCCmx1AfRcBEV6H9QE9R25uP7jw==" + }, + "node_modules/@types/d3-time-format": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.1.tgz", + "integrity": "sha512-fck0Z9RGfIQn3GJIEKVrp15h9m6Vlg0d5XXeiE/6+CQiBmMDZxfR21XtjEPuDeg7gC3bBM0SdieA5XF3GW1wKA==" + }, "node_modules/@types/formidable": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.5.tgz", @@ -2891,8 +3199,7 @@ "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/ramda": { "version": "0.28.22", @@ -2907,7 +3214,6 @@ "version": "18.0.26", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2923,6 +3229,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-lifecycles-compat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/react-lifecycles-compat/-/react-lifecycles-compat-3.0.1.tgz", + "integrity": "sha512-4KiU5s1Go4xRbf7t6VxUUpBeN5PGjpjpBv9VvET4uiPHC500VNYBclU13f8ehHkHoZL39b2cfwHu6RzbV3b44A==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -2931,8 +3245,7 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/tldjs": { "version": "2.3.1", @@ -4335,8 +4648,101 @@ "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "node_modules/d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "dependencies": { + "d3-color": "1 - 2" + } + }, + "node_modules/d3-interpolate/node_modules/d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "dependencies": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", + "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", + "dependencies": { + "d3-color": "1 - 2", + "d3-interpolate": "1 - 2" + } + }, + "node_modules/d3-scale-chromatic/node_modules/d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "node_modules/d3-scale/node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "dependencies": { + "d3-array": "2" + } + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "node_modules/d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "dependencies": { + "d3-time": "1 - 2" + } }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -6331,6 +6737,11 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7539,8 +7950,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -11778,6 +12188,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "node_modules/react-native-fetch-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", @@ -15498,6 +15913,171 @@ "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", "optional": true }, + "@nivo/annotations": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.83.0.tgz", + "integrity": "sha512-FkfCprk1a3WCCNcQOfI2+Ww7vqTP/nJjQDVhFYf1YAaEGwXi4+OO4uJAtKtNcGE5cJWdOp+f0Gt4aNPGx7RtEw==", + "requires": { + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/prop-types": "^15.7.2", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + } + }, + "@nivo/arcs": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/arcs/-/arcs-0.83.0.tgz", + "integrity": "sha512-UcbNbtp28lbI5V/Sm6TIgYzZmtuhSxW3eTma+YBsgXi1AN/THSwEg0gSV8owyDT/8kaL+jcBQ6c54gzSLClhkw==", + "requires": { + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-shape": "^2.0.0", + "d3-shape": "^1.3.5" + } + }, + "@nivo/axes": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/axes/-/axes-0.83.0.tgz", + "integrity": "sha512-rHMl+DdXQlY2wl7VCSQNcJi4QNISUWOkcWzJeJeVaYR73Z13SVGgiC7kW0czJuogDTSnDAJ/EcFCGmyGVuznGQ==", + "requires": { + "@nivo/core": "0.83.0", + "@nivo/scales": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-format": "^1.4.1", + "@types/d3-time-format": "^2.3.1", + "@types/prop-types": "^15.7.2", + "d3-format": "^1.4.4", + "d3-time-format": "^3.0.0", + "prop-types": "^15.7.2" + } + }, + "@nivo/bar": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/bar/-/bar-0.83.0.tgz", + "integrity": "sha512-QXN6BcT1PiT/YViyoDU4G5mytbOUP1jYbuQmJhDDxKPMLNcZ/pHfThedRGVfDoD1poHBRJtV6mbgeCpAVmlTtw==", + "requires": { + "@nivo/annotations": "0.83.0", + "@nivo/axes": "0.83.0", + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@nivo/legends": "0.83.0", + "@nivo/scales": "0.83.0", + "@nivo/tooltip": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-scale": "^3.2.3", + "@types/d3-shape": "^2.0.0", + "d3-scale": "^3.2.3", + "d3-shape": "^1.3.5", + "lodash": "^4.17.21" + } + }, + "@nivo/colors": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.83.0.tgz", + "integrity": "sha512-n34LWYtE2hbd1fdCDP7TCHNZdbiO1PwcvXLo0VsKK5lNPY/FA5SXA7Z9Ubl/ChSwBwbzAsaAhjTy8KzKzSjDcA==", + "requires": { + "@nivo/core": "0.83.0", + "@types/d3-color": "^2.0.0", + "@types/d3-scale": "^3.2.3", + "@types/d3-scale-chromatic": "^2.0.0", + "@types/prop-types": "^15.7.2", + "d3-color": "^3.1.0", + "d3-scale": "^3.2.3", + "d3-scale-chromatic": "^2.0.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + } + }, + "@nivo/core": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/core/-/core-0.83.0.tgz", + "integrity": "sha512-I9fjZAbIPz41JA2WP8Avsud/xk0iiM1nWUzcvZBDebBGFDB5Y1lrldUt9l5kvOeMth3Qj/1lVFTiJxQuojxH4Q==", + "requires": { + "@nivo/recompose": "0.83.0", + "@nivo/tooltip": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2", + "@types/d3-shape": "^2.0.0", + "d3-color": "^3.1.0", + "d3-format": "^1.4.4", + "d3-interpolate": "^2.0.1", + "d3-scale": "^3.2.3", + "d3-scale-chromatic": "^2.0.0", + "d3-shape": "^1.3.5", + "d3-time-format": "^3.0.0", + "lodash": "^4.17.21" + } + }, + "@nivo/legends": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/legends/-/legends-0.83.0.tgz", + "integrity": "sha512-WWl3/hTpFJ7/2L0RG53Gbr9KQk+ZjD71a/RIPMJ5ArEvAvKKfWuWQCtEm3FpqAazX8eYMnsQ3Pi17c8ohEIXRg==", + "requires": { + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@types/d3-scale": "^3.2.3", + "@types/prop-types": "^15.7.2", + "d3-scale": "^3.2.3", + "prop-types": "^15.7.2" + } + }, + "@nivo/pie": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/pie/-/pie-0.83.0.tgz", + "integrity": "sha512-98j/h4T/QmQ10gFh1cMh6uLfcGurFcYZN97Lu3ig3D9bbsLuLgpUED/d5O+8w7qLJtnlg3zptqy+N9UgRAqbOg==", + "requires": { + "@nivo/arcs": "0.83.0", + "@nivo/colors": "0.83.0", + "@nivo/core": "0.83.0", + "@nivo/legends": "0.83.0", + "@nivo/tooltip": "0.83.0", + "@types/d3-shape": "^2.0.0", + "d3-shape": "^1.3.5" + } + }, + "@nivo/recompose": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/recompose/-/recompose-0.83.0.tgz", + "integrity": "sha512-3cLEoi9ZoE4LTn6B98oUVd0MRAy5bWK7W3yb0u4EkjLoXXCRvUAI08Wr2AAagOzVOg5PmvghIDgvkz1tlFZTGQ==", + "requires": { + "@types/prop-types": "^15.7.2", + "@types/react-lifecycles-compat": "^3.0.1", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.4" + } + }, + "@nivo/scales": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/scales/-/scales-0.83.0.tgz", + "integrity": "sha512-DZn5IcMJErCURDuQPmYltu6GTPphTDVLMvbeN/Id/VSVbD1uYKvdXPKUNOe/N2IvnE8wjjCPv88DLcRhw6VTVg==", + "requires": { + "@types/d3-scale": "^3.2.3", + "@types/d3-time": "^1.1.1", + "@types/d3-time-format": "^3.0.0", + "d3-scale": "^3.2.3", + "d3-time": "^1.0.11", + "d3-time-format": "^3.0.0", + "lodash": "^4.17.21" + }, + "dependencies": { + "@types/d3-time-format": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-3.0.1.tgz", + "integrity": "sha512-5GIimz5IqaRsdnxs4YlyTZPwAMfALu/wA4jqSiuqgdbCxUZ2WjrnwANqOtoBJQgeaUTdYNfALJO0Yb0YrDqduA==" + } + } + }, + "@nivo/tooltip": { + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@nivo/tooltip/-/tooltip-0.83.0.tgz", + "integrity": "sha512-HewujRqZNmcVnAv/LPLVyYwViad+rYTsFMdzLRzuTPq2hju1R+cfxokTomunG8e1SDtUPtULEVXtPg2ATIzNYg==", + "requires": { + "@nivo/core": "0.83.0", + "@react-spring/web": "9.4.5 || ^9.7.2" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -15691,6 +16271,49 @@ "@react-hook/throttle": "^2.2.0" } }, + "@react-spring/animated": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.3.tgz", + "integrity": "sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==", + "requires": { + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + } + }, + "@react-spring/core": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.3.tgz", + "integrity": "sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==", + "requires": { + "@react-spring/animated": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + } + }, + "@react-spring/shared": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.3.tgz", + "integrity": "sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==", + "requires": { + "@react-spring/types": "~9.7.3" + } + }, + "@react-spring/types": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.3.tgz", + "integrity": "sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==" + }, + "@react-spring/web": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.3.tgz", + "integrity": "sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==", + "requires": { + "@react-spring/animated": "~9.7.3", + "@react-spring/core": "~9.7.3", + "@react-spring/shared": "~9.7.3", + "@react-spring/types": "~9.7.3" + } + }, "@repeaterjs/repeater": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", @@ -15776,6 +16399,59 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "@types/d3-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz", + "integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w==" + }, + "@types/d3-format": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.2.tgz", + "integrity": "sha512-WeGCHAs7PHdZYq6lwl/+jsl+Nfc1J2W1kNcMeIMYzQsT6mtBDBgtJ/rcdjZ0k0rVIvqEZqhhuD5TK/v3P2gFHQ==" + }, + "@types/d3-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-2.0.2.tgz", + "integrity": "sha512-3YHpvDw9LzONaJzejXLOwZ3LqwwkoXb9LI2YN7Hbd6pkGo5nIlJ09ul4bQhBN4hQZJKmUpX8HkVqbzgUKY48cg==" + }, + "@types/d3-scale": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.2.tgz", + "integrity": "sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ==", + "requires": { + "@types/d3-time": "^2" + }, + "dependencies": { + "@types/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg==" + } + } + }, + "@types/d3-scale-chromatic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-2.0.1.tgz", + "integrity": "sha512-3EuZlbPu+pvclZcb1DhlymTWT2W+lYsRKBjvkH2ojDbCWDYavifqu1vYX9WGzlPgCgcS4Alhk1+zapXbGEGylQ==" + }, + "@types/d3-shape": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-2.1.3.tgz", + "integrity": "sha512-HAhCel3wP93kh4/rq+7atLdybcESZ5bRHDEZUojClyZWsRuEMo3A52NGYJSh48SxfxEU6RZIVbZL2YFZ2OAlzQ==", + "requires": { + "@types/d3-path": "^2" + } + }, + "@types/d3-time": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.1.tgz", + "integrity": "sha512-ULX7LoqXTCYtM+tLYOaeAJK7IwCT+4Gxlm2MaH0ErKLi07R5lh8NHCAyWcDkCCmx1AfRcBEV6H9QE9R25uP7jw==" + }, + "@types/d3-time-format": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.1.tgz", + "integrity": "sha512-fck0Z9RGfIQn3GJIEKVrp15h9m6Vlg0d5XXeiE/6+CQiBmMDZxfR21XtjEPuDeg7gC3bBM0SdieA5XF3GW1wKA==" + }, "@types/formidable": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.5.tgz", @@ -15846,8 +16522,7 @@ "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/ramda": { "version": "0.28.22", @@ -15862,7 +16537,6 @@ "version": "18.0.26", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -15878,6 +16552,14 @@ "@types/react": "*" } }, + "@types/react-lifecycles-compat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/react-lifecycles-compat/-/react-lifecycles-compat-3.0.1.tgz", + "integrity": "sha512-4KiU5s1Go4xRbf7t6VxUUpBeN5PGjpjpBv9VvET4uiPHC500VNYBclU13f8ehHkHoZL39b2cfwHu6RzbV3b44A==", + "requires": { + "@types/react": "*" + } + }, "@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -15886,8 +16568,7 @@ "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/tldjs": { "version": "2.3.1", @@ -16927,8 +17608,104 @@ "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "requires": { + "d3-color": "1 - 2" + }, + "dependencies": { + "d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + } + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + }, + "dependencies": { + "d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + } + } + } + }, + "d3-scale-chromatic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", + "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", + "requires": { + "d3-color": "1 - 2", + "d3-interpolate": "1 - 2" + }, + "dependencies": { + "d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + } + } + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "requires": { + "d3-time": "1 - 2" + } }, "damerau-levenshtein": { "version": "1.0.8", @@ -18416,6 +19193,11 @@ "side-channel": "^1.0.4" } }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -19321,8 +20103,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -22170,6 +22951,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "react-native-fetch-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", diff --git a/package.json b/package.json index abedfb5..a8e4d4a 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "dependencies": { "@apollo/client": "^3.7.4", "@holaplex/ui-library-react": "^0.19.0", + "@nivo/bar": "^0.83.0", + "@nivo/pie": "^0.83.0", "@ory/client": "^1.1.41", "@ory/integrations": "^1.1.0", "@stripe/react-stripe-js": "^2.1.0", diff --git a/skaffold.yaml b/skaffold.yaml index 62ae54a..d6f8217 100644 --- a/skaffold.yaml +++ b/skaffold.yaml @@ -172,6 +172,7 @@ deploy: - name: hub-nfts-solana remoteChart: hub-nfts-solana repo: https://charts.holaplex.com + version: 0.4.1 valuesFiles: - .helm/values.nfts-solana.yaml - .helm/secrets.nfts-solana.yaml diff --git a/src/app/(project)/projects/[project]/analytics/ProjectAnalytics.tsx b/src/app/(project)/projects/[project]/analytics/ProjectAnalytics.tsx new file mode 100644 index 0000000..778379d --- /dev/null +++ b/src/app/(project)/projects/[project]/analytics/ProjectAnalytics.tsx @@ -0,0 +1,33 @@ +'use client'; + +import Typography, { Size } from '../../../../../components/Typography'; +import { useProject } from '../../../../../hooks/useProject'; +import { GetProjectAnalytics } from '../../../../../queries/analytics.graphql'; +import { Project } from '../../../../../graphql.types'; +import { ResponsiveBar } from '@nivo/bar'; +import { useQuery } from '@apollo/client'; + +interface GetProjectAnalyticsData { + project: Pick; +} + +interface GetProjectAnalyticsVars { + project: string; +} + +export default function ProjectAnalytics() { + const { project } = useProject(); + + const analyticsQuery = useQuery( + GetProjectAnalytics, + { + variables: { project: project?.id as string }, + } + ); + + return ( +
+ Analytics for {project?.name as string} +
+ ); +} diff --git a/src/app/(project)/projects/[project]/analytics/page.tsx b/src/app/(project)/projects/[project]/analytics/page.tsx new file mode 100644 index 0000000..b2f7bd8 --- /dev/null +++ b/src/app/(project)/projects/[project]/analytics/page.tsx @@ -0,0 +1,5 @@ +import ProjectAnalytics from "./ProjectAnalytics"; + +export default function ProjectAnalyticsPage() { + return +} \ No newline at end of file diff --git a/src/app/profile/edit/page.tsx b/src/app/profile/edit/page.tsx index dd84392..5bca36a 100644 --- a/src/app/profile/edit/page.tsx +++ b/src/app/profile/edit/page.tsx @@ -25,5 +25,5 @@ export default async function EditProfilePage(): Promise { return redirect('/login?return_to=/profile/edit'); } - return ; + return ; } diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx index 31ce283..eae0b0d 100644 --- a/src/components/Icon.tsx +++ b/src/components/Icon.tsx @@ -1287,6 +1287,34 @@ function Treasury({ } Icon.Treasury = Treasury; +function Chart({ + width = 20, + height = 20, + fill = 'none', + stroke = 'stroke-stone-950', + className = '', +}: IconProps) { + return ( + + + + ); +} + +Icon.Chart = Chart; + function CreateNft({ width = 96, height = 96, diff --git a/src/graphql.types.ts b/src/graphql.types.ts index ba681c2..f0d5961 100644 --- a/src/graphql.types.ts +++ b/src/graphql.types.ts @@ -18,16 +18,6 @@ export type Scalars = { DateTime: any; /** A scalar that can represent any JSON value. */ JSON: any; - /** - * ISO 8601 calendar date without timezone. - * Format: %Y-%m-%d - * - * # Examples - * - * * `1994-11-13` - * * `2000-02-24` - */ - NaiveDate: any; /** * ISO 8601 combined date and time without timezone. * @@ -83,8 +73,9 @@ export enum Action { RetryCollection = 'RETRY_COLLECTION', RetryDrop = 'RETRY_DROP', RetryMint = 'RETRY_MINT', + SwitchCollection = 'SWITCH_COLLECTION', TransferAsset = 'TRANSFER_ASSET', - UpdateMint = 'UPDATE_MINT', + UpdateMint = 'UPDATE_MINT' } /** Represents the cost of performing a certain action on different blockchains */ @@ -106,13 +97,13 @@ export enum AssetType { /** Mainnet Polygon */ Matic = 'MATIC', /** Mainnet Solana */ - Sol = 'SOL', + Sol = 'SOL' } export enum Blockchain { Ethereum = 'ETHEREUM', Polygon = 'POLYGON', - Solana = 'SOLANA', + Solana = 'SOLANA' } /** Represents the cost of performing an action on a specific blockchain */ @@ -132,6 +123,7 @@ export type Collection = { * On EVM chains it is the concatenation of the contract address and the token id `{contractAddress}:{tokenId}`. */ address?: Maybe; + analytics: Array; /** The blockchain of the collection. */ blockchain: Blockchain; /** The date and time in UTC when the collection was created. */ @@ -172,7 +164,6 @@ export type Collection = { shortTx?: Maybe; /** The transaction signature of the collection. */ signature?: Maybe; - stats: Array; /** The total supply of the collection. Setting to `null` implies unlimited minting. */ supply?: Maybe; /** The current number of NFTs minted from the collection. */ @@ -180,11 +171,10 @@ export type Collection = { transactionLink?: Maybe; }; -export type CollectionStatsArgs = { - dateRange?: InputMaybe; - granularity?: InputMaybe; + +export type CollectionAnalyticsArgs = { + interval?: InputMaybe; limit?: InputMaybe; - measures?: InputMaybe>; order?: InputMaybe; }; @@ -246,6 +236,8 @@ export type CollectionMint = { shortTx: Scalars['String']; /** The transaction signature associated with the NFT. */ signature?: Maybe; + /** The history of switched collections for the mint. */ + switchCollectionHistories?: Maybe>; transactionLink?: Maybe; /** The history of transfers for the mint. */ transferHistories?: Maybe>; @@ -253,6 +245,7 @@ export type CollectionMint = { updateHistories?: Maybe>; }; +/** Input object for creating a collection. */ export type CreateCollectionInput = { blockchain: Blockchain; creators: Array; @@ -260,6 +253,7 @@ export type CreateCollectionInput = { project: Scalars['UUID']; }; +/** Result of a successful create collection mutation. */ export type CreateCollectionPayload = { __typename?: 'CreateCollectionPayload'; collection: Collection; @@ -373,7 +367,7 @@ export enum CreationStatus { Created = 'CREATED', Failed = 'FAILED', Pending = 'PENDING', - Rejected = 'REJECTED', + Rejected = 'REJECTED' } /** An attributed creator for a collection or mint. */ @@ -451,29 +445,43 @@ export type Customer = { wallet?: Maybe>; }; + /** A customer record represents a user in your service and is used to group custodial wallets within a specific project. This allows for easy management of wallets and associated assets for a particular customer within your service. */ export type CustomerWalletArgs = { assetId?: InputMaybe; }; -/** A `DataPoint` object containing analytics information. */ -export type DataPoint = { - __typename?: 'DataPoint'; +export type Data = { + __typename?: 'Data'; /** The ID of the collection the data belongs to. */ collectionId?: Maybe; - /** Count of the metric. */ - count: Scalars['Int']; + /** Count for the metric. */ + count?: Maybe; /** The ID of the organization the data belongs to. */ organizationId?: Maybe; /** The ID of the project the data belongs to. */ projectId?: Maybe; - /** The timestamp associated with the data point. */ + /** the timestamp associated with the data point. */ timestamp?: Maybe; }; -export type DateRange = { - endDate: Scalars['NaiveDate']; - startDate: Scalars['NaiveDate']; +/** A `DataPoint` object containing analytics information. */ +export type DataPoint = { + __typename?: 'DataPoint'; + /** Analytics data for collections. */ + collections?: Maybe>; + credits?: Maybe>; + /** Analytics data for customers. */ + customers?: Maybe>; + /** Analytics data for mints. */ + mints?: Maybe>; + /** Analytics data for projects. */ + projects?: Maybe>; + timestamp?: Maybe; + transfers?: Maybe>; + /** Analytics data for wallets. */ + wallets?: Maybe>; + webhooks?: Maybe>; }; export type DeactivateMemberInput = { @@ -510,7 +518,7 @@ export type DeleteWebhookPayload = { export enum DepositReason { Gifted = 'GIFTED', - Purchased = 'PURCHASED', + Purchased = 'PURCHASED' } export type Drop = { @@ -565,7 +573,7 @@ export enum DropStatus { /** The drop is scheduled for minting. */ Scheduled = 'SCHEDULED', /** The drop is permanently shut down and can no longer be minted. */ - Shutdown = 'SHUTDOWN', + Shutdown = 'SHUTDOWN' } /** The input for editing the name of an existing credential by providing the `client_id` of the credential and the new `name` to be assigned. */ @@ -657,15 +665,7 @@ export enum FilterType { /** Event triggered when a new project is created */ ProjectCreated = 'PROJECT_CREATED', /** Event triggered when a new wallet is created for a project */ - ProjectWalletCreated = 'PROJECT_WALLET_CREATED', -} - -export enum Granularity { - Day = 'DAY', - Hour = 'HOUR', - Month = 'MONTH', - Week = 'WEEK', - Year = 'YEAR', + ProjectWalletCreated = 'PROJECT_WALLET_CREATED' } /** The holder of a collection. */ @@ -696,6 +696,21 @@ export type ImportCollectionPayload = { status: CreationStatus; }; +export enum Interval { + All = 'ALL', + Last_7Days = 'LAST_7_DAYS', + Last_30Days = 'LAST_30_DAYS', + LastMonth = 'LAST_MONTH', + LastQuarter = 'LAST_QUARTER', + LastWeek = 'LAST_WEEK', + LastYear = 'LAST_YEAR', + ThisMonth = 'THIS_MONTH', + ThisWeek = 'THIS_WEEK', + ThisYear = 'THIS_YEAR', + Today = 'TODAY', + Yesterday = 'YESTERDAY' +} + /** An invitation sent to join a Holaplex organization. */ export type Invite = { __typename?: 'Invite'; @@ -734,14 +749,9 @@ export enum InviteStatus { /** The member invitation has been revoked by an existing member of the organization and is no longer valid. */ Revoked = 'REVOKED', /** The member invitation has been sent to the invited user. */ - Sent = 'SENT', + Sent = 'SENT' } -export type Measure = { - operation: Operation; - resource: Resource; -}; - /** A member of a Holaplex organization, representing an individual who has been granted access to the organization. */ export type Member = { __typename?: 'Member'; @@ -1059,6 +1069,12 @@ export type Mutation = { * Fails if the drop or collection is not found, or if updating the drop record fails. */ shutdownDrop: ShutdownDropPayload; + /** + * This mutation allows you to change the collection to which a mint belongs. + * For Solana, the mint specified by `input` must already belong to a Metaplex Certified Collection. + * The collection you are aiming to switch to must also be Metaplex Certified Collection. + */ + switchCollection: SwitchCollectionPayload; /** * Transfers an asset from one user to another on a supported blockchain network. * The mutation supports transferring standard or compressed NFTs. @@ -1073,134 +1089,172 @@ export type Mutation = { updateMint: UpdateMintPayload; }; + export type MutationAcceptInviteArgs = { input: AcceptInviteInput; }; + export type MutationCreateCollectionArgs = { input: CreateCollectionInput; }; + export type MutationCreateCredentialArgs = { input: CreateCredentialInput; }; + export type MutationCreateCustomerArgs = { input: CreateCustomerInput; }; + export type MutationCreateCustomerWalletArgs = { input: CreateCustomerWalletInput; }; + export type MutationCreateDropArgs = { input: CreateDropInput; }; + export type MutationCreateOrganizationArgs = { input: CreateOrganizationInput; }; + export type MutationCreateProjectArgs = { input: CreateProjectInput; }; + export type MutationCreateWebhookArgs = { input: CreateWebhookInput; }; + export type MutationDeactivateMemberArgs = { input: DeactivateMemberInput; }; + export type MutationDeleteCredentialArgs = { input: DeleteCredentialInput; }; + export type MutationDeleteWebhookArgs = { input: DeleteWebhookInput; }; + export type MutationEditCredentialArgs = { input: EditCredentialInput; }; + export type MutationEditOrganizationArgs = { input: EditOrganizationInput; }; + export type MutationEditProjectArgs = { input: EditProjectInput; }; + export type MutationEditWebhookArgs = { input: EditWebhookInput; }; + export type MutationImportSolanaCollectionArgs = { input: ImportCollectionInput; }; + export type MutationInviteMemberArgs = { input: InviteMemberInput; }; + export type MutationMintEditionArgs = { input: MintDropInput; }; + export type MutationMintToCollectionArgs = { input: MintToCollectionInput; }; + export type MutationPatchCollectionArgs = { input: PatchCollectionInput; }; + export type MutationPatchDropArgs = { input: PatchDropInput; }; + export type MutationPauseDropArgs = { input: PauseDropInput; }; + export type MutationReactivateMemberArgs = { input: ReactivateMemberInput; }; + export type MutationResumeDropArgs = { input: ResumeDropInput; }; + export type MutationRetryCollectionArgs = { input: RetryCollectionInput; }; + export type MutationRetryDropArgs = { input: RetryDropInput; }; + export type MutationRetryMintEditionArgs = { input: RetryMintEditionInput; }; + export type MutationRetryMintToCollectionArgs = { input: RetryMintEditionInput; }; + export type MutationRetryUpdateMintArgs = { input: RetryUpdateMintInput; }; + export type MutationShutdownDropArgs = { input: ShutdownDropInput; }; + +export type MutationSwitchCollectionArgs = { + input: SwitchCollectionInput; +}; + + export type MutationTransferAssetArgs = { input: TransferAssetInput; }; + export type MutationUpdateMintArgs = { input: UpdateMintInput; }; @@ -1226,19 +1280,15 @@ export type NftTransfer = { txSignature?: Maybe; }; -export enum Operation { - Change = 'CHANGE', - Count = 'COUNT', -} - export enum Order { Asc = 'ASC', - Desc = 'DESC', + Desc = 'DESC' } /** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ export type Organization = { __typename?: 'Organization'; + analytics: Array; /** The datetime, in UTC, when the Holaplex organization was created by its owner. */ createdAt: Scalars['DateTime']; /** @@ -1299,7 +1349,6 @@ export type Organization = { profileImageUrlOriginal?: Maybe; /** The projects that have been created and are currently associated with the Holaplex organization, which are used to organize NFT campaigns or initiatives within the organization. */ projects: Array; - stats: Array; /** * Retrieves a specific webhook associated with the organization, based on its ID. * @@ -1335,30 +1384,33 @@ export type Organization = { webhooks?: Maybe>; }; + +/** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ +export type OrganizationAnalyticsArgs = { + interval?: InputMaybe; + limit?: InputMaybe; + order?: InputMaybe; +}; + + /** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ export type OrganizationCredentialArgs = { clientId: Scalars['String']; }; + /** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ export type OrganizationCredentialsArgs = { limit?: InputMaybe; offset?: InputMaybe; }; + /** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ export type OrganizationInvitesArgs = { status?: InputMaybe; }; -/** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ -export type OrganizationStatsArgs = { - dateRange?: InputMaybe; - granularity?: InputMaybe; - limit?: InputMaybe; - measures?: InputMaybe>; - order?: InputMaybe; -}; /** A Holaplex organization is the top-level account within the Holaplex ecosystem. Each organization has a single owner who can invite members to join. Organizations use projects to organize NFT campaigns or initiatives. */ export type OrganizationWebhookArgs = { @@ -1439,6 +1491,7 @@ export type PauseDropPayload = { /** A Holaplex project that belongs to an organization. Projects are used to group unique NFT campaigns or initiatives, and are used to assign objects that end customers will interact with, such as drops and wallets. */ export type Project = { __typename?: 'Project'; + analytics: Array; /** * Look up a collection associated with the project by its ID. * @deprecated Use `collection` root query field instead @@ -1471,37 +1524,57 @@ export type Project = { profileImageUrl?: Maybe; /** The optional profile image associated with the project, which can be used to visually represent the project. */ profileImageUrlOriginal?: Maybe; - stats: Array; /** The treasury assigned to the project, which contains the project's wallets. */ treasury?: Maybe; }; + +/** A Holaplex project that belongs to an organization. Projects are used to group unique NFT campaigns or initiatives, and are used to assign objects that end customers will interact with, such as drops and wallets. */ +export type ProjectAnalyticsArgs = { + interval?: InputMaybe; + limit?: InputMaybe; + order?: InputMaybe; +}; + + /** A Holaplex project that belongs to an organization. Projects are used to group unique NFT campaigns or initiatives, and are used to assign objects that end customers will interact with, such as drops and wallets. */ export type ProjectCollectionArgs = { id: Scalars['UUID']; }; + /** A Holaplex project that belongs to an organization. Projects are used to group unique NFT campaigns or initiatives, and are used to assign objects that end customers will interact with, such as drops and wallets. */ export type ProjectCustomerArgs = { id: Scalars['UUID']; }; + /** A Holaplex project that belongs to an organization. Projects are used to group unique NFT campaigns or initiatives, and are used to assign objects that end customers will interact with, such as drops and wallets. */ export type ProjectDropArgs = { id: Scalars['UUID']; }; -/** A Holaplex project that belongs to an organization. Projects are used to group unique NFT campaigns or initiatives, and are used to assign objects that end customers will interact with, such as drops and wallets. */ -export type ProjectStatsArgs = { - dateRange?: InputMaybe; - granularity?: InputMaybe; - limit?: InputMaybe; - measures?: InputMaybe>; - order?: InputMaybe; -}; - export type Query = { __typename?: 'Query'; + /** + * Returns a list of data points for a specific collection and timeframe. + * + * # Arguments + * * `organizationId` - The ID of the organization + * * `projectId` - The ID of the project. + * * `collectionId` - The ID of the collection. + * * `measures` - An map array of resources to query (resource, operation). + * * `interval` - The timeframe interval. `TODAY` | `YESTERDAY` | `THIS_MONTH` | `LAST_MONTH` + * * `order` - order the results by ASC or DESC. + * * `limit` - Optional limit on the number of data points to retrieve. + * + * # Returns + * A vector of Analytics objects representing the analytics data. + * + * # Errors + * This function returns an error if there was a problem with retrieving the data points. + */ + analytics: Array; /** Look up a `collection` by its ID. */ collection?: Maybe; /** @@ -1533,64 +1606,50 @@ export type Query = { organization?: Maybe; /** Query a project by it's ID, this query returns `null` if the project does not exist. */ project?: Maybe; - /** - * Returns a list of data points for a specific collection and timeframe. - * - * # Arguments - * * `organizationId` - The ID of the organization - * * `projectId` - The ID of the project. - * * `collectionId` - The ID of the collection. - * * `measures` - An map array of resources to query (resource, operation). - * * `granularity` - The time granularity for grouping (e.g., Day, Week, Month, Year). - * * `dateRange` - DateFrom and DateTo, in YYYY-MM-DD format. - * * `order` - order the results by ASC or DESC. - * * `limit` - Optional limit on the number of data points to retrieve. - * - * # Returns - * A vector of Stats objects representing the analytics data. - * - * # Errors - * This function returns an error if there was a problem with retrieving the data points. - */ - stats: Array; /** Retrieve a user identity by providing their ID. */ user?: Maybe; }; + +export type QueryAnalyticsArgs = { + collectionId?: InputMaybe; + interval?: InputMaybe; + limit?: InputMaybe; + order?: InputMaybe; + organizationId?: InputMaybe; + projectId?: InputMaybe; +}; + + export type QueryCollectionArgs = { id: Scalars['UUID']; }; + export type QueryDropArgs = { id: Scalars['UUID']; }; + export type QueryInviteArgs = { id: Scalars['UUID']; }; + export type QueryMintArgs = { id: Scalars['UUID']; }; + export type QueryOrganizationArgs = { id: Scalars['UUID']; }; + export type QueryProjectArgs = { id: Scalars['UUID']; }; -export type QueryStatsArgs = { - collectionId?: InputMaybe; - dateRange?: InputMaybe; - granularity?: InputMaybe; - limit?: InputMaybe; - measures?: InputMaybe>; - order?: InputMaybe; - organizationId?: InputMaybe; - projectId?: InputMaybe; -}; export type QueryUserArgs = { id: Scalars['UUID']; @@ -1600,15 +1659,6 @@ export type ReactivateMemberInput = { id: Scalars['UUID']; }; -export enum Resource { - Collections = 'COLLECTIONS', - Customers = 'CUSTOMERS', - Mints = 'MINTS', - Organizations = 'ORGANIZATIONS', - Projects = 'PROJECTS', - Wallets = 'WALLETS', -} - /** Represents input fields for resuming a paused drop. */ export type ResumeDropInput = { drop: Scalars['UUID']; @@ -1663,6 +1713,30 @@ export type ShutdownDropPayload = { drop: Drop; }; +export type SwitchCollectionHistory = { + __typename?: 'SwitchCollectionHistory'; + collectionId: Scalars['UUID']; + collectionMintId: Scalars['UUID']; + createdAt: Scalars['NaiveDateTime']; + creditDeductionId: Scalars['UUID']; + id: Scalars['UUID']; + initiatedBy: Scalars['UUID']; + signature?: Maybe; + status: CreationStatus; +}; + +/** Input object for switching a mint's collection. */ +export type SwitchCollectionInput = { + collectionAddress: Scalars['String']; + mint: Scalars['UUID']; +}; + +/** Represents the result of a successful switch collection mutation. */ +export type SwitchCollectionPayload = { + __typename?: 'SwitchCollectionPayload'; + collectionMint: CollectionMint; +}; + export type TransferAssetInput = { id: Scalars['UUID']; recipient: Scalars['String']; @@ -1692,6 +1766,7 @@ export type Treasury = { wallets?: Maybe>; }; + /** A collection of wallets assigned to different entities in the Holaplex ecosystem. */ export type TreasuryWalletArgs = { assetType: AssetType; diff --git a/src/layouts/Project.tsx b/src/layouts/Project.tsx index 2c73b92..799ca8e 100644 --- a/src/layouts/Project.tsx +++ b/src/layouts/Project.tsx @@ -100,6 +100,12 @@ export default function Project({ href={`/projects/${project.id}/treasury`} active={segments[0] === 'treasury'} /> + } + href={`/projects/${project.id}/analytics`} + active={segments[0] === 'analytics'} + /> diff --git a/src/queries/analytics.graphql b/src/queries/analytics.graphql new file mode 100644 index 0000000..1c3dbbe --- /dev/null +++ b/src/queries/analytics.graphql @@ -0,0 +1,18 @@ +query GetProjectAnalytics($project: UUID!) { + project(id: $project) { + id + analytics { + mints { + count + timestamp + } + mintByCollectionPie: mints { + count + } + customers { + count + timestamp + } + } + } +}