Compare commits

..

6 Commits

Author SHA1 Message Date
github-actions[bot]
84dd864186 chore: update versions (#2992)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @nhost/dashboard@2.2.1

# @nhost/dashboard

## 1.30.0

### Minor Changes

- 50441a8: feat: add ui for project autoscaler settings and run services
autoscaler settings

## 1.29.0

### Minor Changes

-   55d8bb5: feat: integrate turnstile for signup verification
-   2a2e54c: fix: update docs url in run services form tooltip
- 18f942f: fix: display long error messages in error toast without
overflow

### Patch Changes

-   @nhost/react-apollo@13.0.0
-   @nhost/nextjs@2.1.22

## 1.28.2

### Patch Changes

- 52a38fe: chore: update dependencies to address security
vulnerabilities
-   Updated dependencies [52a38fe]
    -   @nhost/nextjs@2.1.21

## 1.28.1

### Patch Changes

-   9735fa2: chore: remove broken link

## 1.28.0

### Minor Changes

- 526183a: feat: allow filtering users in "make request as" in graphql
section
-   be3b85b: feat: add conceal errors toggle on auth settings page

### Patch Changes

- 35a2f12: fix: prevent run service details from opening when attempting
to delete
    -   @nhost/react-apollo@12.0.6
    -   @nhost/nextjs@2.1.20

## 1.27.0

### Minor Changes

-   a7cd02c: fix: resolve rate limit query

## 1.26.0

### Minor Changes

-   3773ad7: chore: update pricing information
- b63250d: fix: not allow run service creation form resubmission while
creating a run service
-   a44a1d4: feat: add rate limits settings page

### Patch Changes

-   @nhost/react-apollo@12.0.5
-   @nhost/nextjs@2.1.19

## 1.25.0

### Minor Changes

- d1ceede: feat: add setting to migrate postgres major and/or minor
versions
- e5d3d1a: fix: allow manually typing column for custom check in
database row permissions

### Patch Changes

-   @nhost/react-apollo@12.0.4
-   @nhost/nextjs@2.1.18

## 1.24.1

### Patch Changes

- 49f2e55: fix: use service subdomain in service form and service
details dialog
- 598b988: fix: use current project subdomain in ServiceDetailsDialog
component

## 1.24.0

### Minor Changes

-   abb24af: chore: add redirect to support page when project is locked
- 18a6455: feat: show contact us info and locked reason when project is
locked

### Patch Changes

-   e31eefa: fix: include ingresses field when updating run services

## 1.23.0

### Minor Changes

-   33284d3: fix: don't show double scrollbar in configuration editor

### Patch Changes

-   @nhost/react-apollo@12.0.3
-   @nhost/nextjs@2.1.17

## 1.22.0

### Minor Changes

-   998c037: fix: align drop-down list in select component
- 807b8c0: fix: show city name in region selection for project creation

## 1.21.0

### Minor Changes

- a2efeed: fix: improve project health error handling, add unknown state
and polling interval for health state

## 1.20.0

### Minor Changes

- 8ea4210: fix: error toasts can be closed individually, instead of
dismissing all toasts at once
- 58919ba: chore: add blink animation when project health service is
updating

## 1.19.0

### Minor Changes

- b519862: fix: get configuration in configuration editor using local
development environment

## 1.18.0

### Minor Changes

- 502abad: feat: add services health checks indicators to the overview
page
-   b3ff6ad: chore: update title text on service status modal
- dbadf59: feat: add project configuration TOML editor to the settings
page

## 1.17.0

### Minor Changes

- 77fba27: fix: postgres version validation when activating ai in ai
settings page
-   ac6d1b6: feat: use name instead of awsName

## 1.16.3

### Patch Changes

- 87a37cf: fix: remove unnecessary isPlatform check from verify button
disable logic on custom domains
    -   @nhost/react-apollo@12.0.2
    -   @nhost/nextjs@2.1.16

## 1.16.2

### Patch Changes

- a9413af: fix: update `GetAllWorkspacesAndProjects` query polling to
use exponential backoff
    -   @nhost/react-apollo@12.0.1
    -   @nhost/nextjs@2.1.15

## 1.16.1

### Patch Changes

-   @nhost/react-apollo@12.0.0
-   @nhost/nextjs@2.1.14

## 1.16.0

### Minor Changes

- c6d5c5c: feat: add toggle switch to enable/disable public access in
the database settings

## 1.15.2

### Patch Changes

-   @nhost/react-apollo@11.0.4
-   @nhost/nextjs@2.1.13

## 1.15.1

### Patch Changes

-   @nhost/react-apollo@11.0.3
-   @nhost/nextjs@2.1.12

## 1.15.0

### Minor Changes

-   a7bde37: feat: send metadata in the edit form

### Patch Changes

- 1bc615b: feat: improve error message handling in `ErrorToast`
component
    -   @nhost/react-apollo@11.0.2
    -   @nhost/nextjs@2.1.11

## 1.14.0

### Minor Changes

-   a448d7d: feat: allow configuring postmark and delete SMTP settings

## 1.13.3

### Patch Changes

-   5924bc3: fix: include password in `GetSmtpSettings` query
- c5ad634: fix: resolved an issue where one-click install links were
broken on Safari
- 7278991: fix: update graphql auto-embeddings configuration to use
String type for model field

## 1.13.2

### Patch Changes

-   026f84f: fix: use configuration server URL from environment variable

## 1.13.1

### Patch Changes

-   7e9a2ce: fix: resolve issue where run services form fails to open

## 1.13.0

### Minor Changes

-   dd5d262: feat: add model field to the auto-embeddings form
- 09962be: feat: enable settings and run services when running the
dashboard locally
- 9cdecb6: feat: enable users to update their email address from the
account settings page

## 1.12.2

### Patch Changes

-   c195c51: fix: send email upon signin for unverified users

## 1.12.1

### Patch Changes

- 93ebdf8: fix: use service urls when initilizaing NhostClient running
local dashboard
    -   @nhost/react-apollo@11.0.1
    -   @nhost/nextjs@2.1.10

## 1.12.0

### Minor Changes

- f242e4b: feat: add connect with github to the user's account settings
-   768ca17: chore: update dependencies
- d62bd0f: fix: "Track this" option within the SQL editor now correctly
updates the metadata
- 91c2bb6: feat: refactor sign-in and sign-up pages to enforce email
verification

### Patch Changes

-   943831f: fix: resolve an error toast issue when unpausing a project
-   Updated dependencies [768ca17]
    -   @nhost/react-apollo@11.0.0
    -   @nhost/nextjs@2.1.9

## 1.11.2

### Patch Changes

-   @nhost/react-apollo@10.0.2
-   @nhost/nextjs@2.1.8

## 1.11.1

### Patch Changes

-   981404f: fix: set default value for healthCheck field validation

## 1.11.0

### Minor Changes

- 7789469: chore: upgrade dependency `@graphql-codegen/cli` to `5.0.2`
to address vulnerability
- 6c11b75: feat: add update user displayName section in account settings

### Patch Changes

-   @nhost/react-apollo@10.0.1
-   @nhost/nextjs@2.1.7

## 1.10.0

### Minor Changes

-   49a80c2: chore: update dependencies
-   150c04a: feat: add healthcheck config to run services

### Patch Changes

- e03f141: fix: allow insert, update and delete on tables in `auth` and
`storage` schemas
- 28676f4: feat: add min postgres version check to enable the ai service
-   Updated dependencies [49a80c2]
    -   @nhost/react-apollo@10.0.0
    -   @nhost/nextjs@2.1.6

## 1.9.0

### Minor Changes

-   d86e5c9: feat: add support for filtering the logs using a RegExp

## 1.8.3

### Patch Changes

-   @nhost/react-apollo@9.0.3
-   @nhost/nextjs@2.1.5

## 1.8.2

### Patch Changes

- 6df4f02: fix: use custom error toast and show correct message when
sending an invite

## 1.8.1

### Patch Changes

-   @nhost/react-apollo@9.0.2
-   @nhost/nextjs@2.1.4

## 1.8.0

### Minor Changes

- 713d53c: feat: add catch-all route for workspace/project - useful for
documentation

### Patch Changes

-   3db2999: fix: refresh table list after running SQL using the editor
- 3c4dd55: fix: handle `Error` objects properly in the `ErrorToast`
component
- 92b434e: fix: resolve an issue where the checkbox in the data-grid
header did not select all rows
    -   @nhost/react-apollo@9.0.1
    -   @nhost/nextjs@2.1.3

## 1.7.0

### Minor Changes

-   0d8d0eb: Update docs and dashboard references

## 1.6.9

### Patch Changes

-   @nhost/react-apollo@9.0.0
-   @nhost/nextjs@2.1.2

## 1.6.8

### Patch Changes

-   @nhost/react-apollo@8.0.1
-   @nhost/nextjs@2.1.1

## 1.6.7

### Patch Changes

-   5ef5189: fix: update `@apollo/client` to `3.9.4` to fix a cache bug

## 1.6.6

### Patch Changes

-   3ba485e: fix: added discord.com to connect-src
-   e5bab6a: chore: update dependencies
-   Updated dependencies [b19ffed]
-   Updated dependencies [e5bab6a]
    -   @nhost/nextjs@2.1.0
    -   @nhost/react-apollo@8.0.0

## 1.6.5

### Patch Changes

- ba73bb4: fix: update ErrorToast component to show the internal graphql
error
- d5337ff: fix: utilize accumulator in the creation of validation schema
within data grid utils

## 1.6.4

### Patch Changes

-   7c2a1c2: feat: show error and debug info in the error toast

## 1.6.3

### Patch Changes

-   6b8aad5: fix: add bare nhost.run to CSP

## 1.6.2

### Patch Changes

-   b18edc0: feat: added CSP and X-Frame-Options

## 1.6.1

### Patch Changes

-   8d91f71: chore: update deps and enable pnpm audit
- 3b8473b: chore: update turbo to `1.11.3` and pnpm to `8.10.5` in
Dockerfile
-   Updated dependencies [8d91f71]
    -   @nhost/react-apollo@7.0.2
    -   @nhost/nextjs@2.0.2

## 1.6.0

### Minor Changes

-   3ff1c2b53: fix: show upgrade option for pro projects

## 1.5.0

### Minor Changes

-   c2ef17c0a: feat: add support for new Team plan

## 1.4.0

### Minor Changes

-   7883bbcbd: feat: don't show deprecated plans
- 44be6dc0a: feat: set redirectTo during sign-in to support preview
environments

### Patch Changes

- 3c3594898: fix: allow access to graphite when configured running in
local dashboard
-   32c246b7a: chore: update docs icon

## 1.3.2

### Patch Changes

-   174b4165b: chore: use env variables when running graphql codegen
-   7c977e714: chore: change `Allowed Roles` to `Default Allowed Roles`
-   46f028b9f: fix: remove hardcoded ai version setting

## 1.3.1

### Patch Changes

- af33c21d1: chore: remove backendUrl deprecation notice and remove all
references to `providersUpdated`

## 1.3.0

### Minor Changes

-   04784d880: Fix graphite's default version

## 1.2.0

### Minor Changes

-   5733162ed: feat: add settings and ui for graphite

## 1.1.0

### Minor Changes

-   e2b79b5ec: chore: remove sharp from deps

## 1.0.1

### Patch Changes

-   @nhost/react-apollo@7.0.1
-   @nhost/nextjs@2.0.1

## 1.0.0

### Major Changes

- bc9eff6e4: chore: remove support for using backendUrl when
instantiating the Nhost client

### Patch Changes

-   Updated dependencies [bc9eff6e4]
    -   @nhost/nextjs@2.0.0
    -   @nhost/react-apollo@7.0.0

## 0.21.1

### Patch Changes

-   97ced73a3: fix(dashboard): prevent dashboard from resolving secrets

## 0.21.0

### Minor Changes

- ed1a8d458: Update alert message on increasing PostgreSQL's volume
capacity
-   2e2248fd4: feat(dashboard): add SQL editor

## 0.20.28

### Patch Changes

-   7c2c31082: feat: add support for users to delete their account
    -   @nhost/react-apollo@6.0.1
    -   @nhost/nextjs@1.13.40

## 0.20.27

### Patch Changes

- fa79b7709: chore(dashboard): tweaks and fixes to the service form and
dialog
-   8df84d782: fix(dashboard): allow resetting custom domains
    -   @nhost/react-apollo@6.0.0
    -   @nhost/nextjs@1.13.39

## 0.20.26

### Patch Changes

- 331ba0376: feat(dashboard): add postgres storage capacity modifier in
the settings
-   b7f801874: feat(dashboard): add new settings page for custom domains

## 0.20.25

### Patch Changes

-   @nhost/react-apollo@5.0.38

## 0.20.24

### Patch Changes

-   e10389ecf: fix(dashboard): disable run tab when developing locally
    -   @nhost/react-apollo@5.0.37

## 0.20.23

### Patch Changes

-   c01568a7d: chore(dashboard): show alert to update oauth providers

## 0.20.22

### Patch Changes

-   c3efb7ec8: feat(dashboard): query latest announcement from platform

## 0.20.21

### Patch Changes

-   3e46d3873: chore: update link to node18 announcement

## 0.20.20

### Patch Changes

-   @nhost/react-apollo@5.0.36
-   @nhost/nextjs@1.13.38

## 0.20.19

### Patch Changes

-   75c4c8ae3: feat(dashboard): make env value input multiline

## 0.20.18

### Patch Changes

- 425d485f8: fix(dashboard): make sure dedicated resources pricing
follows total resources

## 0.20.17

### Patch Changes

-   ae324f67f: fix(dashboard): remove unused graphql fields

## 0.20.16

### Patch Changes

-   df5b4302c: chore(dashboard): remove run feature flag
- bf4a1f6c2: feat(dashboard): fetch auth, postgres, hasura and storage
versions from dashboard
- 34fc08ca7: fix(dashboard/run): show correct private registry in
service details
-   885d10620: chore(dashboard): change feedback to contact us

## 0.20.15

### Patch Changes

- ed16c8b5d: feat(run): add a confirmation dialog when deleting a run
service
- 216990888: fix(run): center loading indicator when selecting a project

## 0.20.14

### Patch Changes

-   9fbea9787: feat: add node18 announcement

## 0.20.13

### Patch Changes

- e84acf469: fix(run): handle subdomain undefined error when creating a
new service

## 0.20.12

### Patch Changes

-   b7c799d62: feat(run): add dialog to copy registry and URLs

## 0.20.11

### Patch Changes

-   8903e6abd: fix(dashboard): show correct egress limit in usage stats

## 0.20.10

### Patch Changes

- 666a75a23: feat(dashboard): add functions execution time and egress
volume to usage stats

## 0.20.9

### Patch Changes

-   5e1e80aa8: fix(dashboard): show correct locales in user details
    -   @nhost/react-apollo@5.0.35
    -   @nhost/nextjs@1.13.37

## 0.20.8

### Patch Changes

-   @nhost/react-apollo@5.0.34
-   @nhost/nextjs@1.13.36

## 0.20.7

### Patch Changes

-   4a7ede11e: fix: distinguish files that were not uploaded
- 202b64723: feat(nhost-run): add support for one-click-install run
services
- 074a0fa11: feat(dashboard): add settings toggle to enable/disable
antivirus
    -   @nhost/react-apollo@5.0.33
    -   @nhost/nextjs@1.13.35

## 0.20.6

### Patch Changes

-   b20761e97: feat(services): add pricing info and confirmation dialog
-   90df6d81d: fix(services): handle null values when editing a service
-   aa8508467: fix: query service logs correctly
    feat: enable multiline support for environment value input

## 0.20.5

### Patch Changes

-   8d7f84b8d: fix: make announcement adapt to theme

## 0.20.4

### Patch Changes

-   3b75bfce2: fix: make announcement close properly
- f49819075: fix: show correct values when dedicated resources are
disabled

## 0.20.3

### Patch Changes

-   e643bd362: fix(services): fix errors when config is null
-   bcdab66bf: feat: add annoucement for nhost run
-   f967a2e59: added note about storage not being able to be downsized
-   311c7756d: chore(services): consistent naming for compute

## 0.20.2

### Patch Changes

-   9073182d5: chore(dashboard): bump `turbo` to 1.10.11
-   ece717d6e: feat(logs): show services in the logs page
- 82b335311: feat(metrics): change grafana link to point to the
dashboards
- b135ef695: fix(services): set command as optional and set min replicas
to 0

## 0.20.1

### Patch Changes

-   3d5c34f4c: fix(auth): fix users pagination limit

## 0.20.0

### Minor Changes

-   c99d117d1: feat(services): add support for custom services

## 0.19.2

### Patch Changes

-   face99ccd: chore(deps): bump turbo version
-   cfe527307: style: tweak pull config warning in dark mode
- a9d7da8af: chore(deps): update dependency @types/pluralize to ^0.0.30
-   9aa4371ef: chore: add hasura-auth version 0.21.2
- d14e112bf: chore(deps): update dependency prettier-plugin-tailwindcss
to ^0.4.0
-   d3e8bb94a: chore(deps): update dependency vite-plugin-dts to v3

## 0.19.1

### Patch Changes

-   @nhost/react-apollo@5.0.32
-   @nhost/nextjs@1.13.34

## 0.19.0

### Minor Changes

- 9c61c69a7: chore(dashboard):add postgres 14.6-20230705-1 to the
version selector

### Patch Changes

-   47bda15ff: feat(settings): add warning to pull config

## 0.18.0

### Minor Changes

- ee0b9b8ed: chore(dashboard):add hasura v2.28.2 and v2.29.0 to the
version selector

## 0.17.20

### Patch Changes

-   @nhost/react-apollo@5.0.31
-   @nhost/nextjs@1.13.33

## 0.17.19

### Patch Changes

-   f866120a6: fix(users): use the password length from the config

## 0.17.18

### Patch Changes

-   @nhost/react-apollo@5.0.30
-   @nhost/nextjs@1.13.32

## 0.17.17

### Patch Changes

-   ea7b102c0: fix(pat): highlight expired tokens

## 0.17.16

### Patch Changes

- b3b64a3b7: chore(deps): bump `@types/react` to `v18.2.14` and
`@types/react-dom` to `v18.2.6`
-   32b221f94: chore(deps): bump `graphiql` to `v3`
-   3a56c12df: chore(deps): bump `turbo` to `v1.10.6`
-   Updated dependencies [b3b64a3b7]
    -   @nhost/react-apollo@5.0.29
    -   @nhost/nextjs@1.13.31

## 0.17.15

### Patch Changes

-   f41fdc12a: chore(deps): bump `turbo` to `1.10.5`
-   6199c1c55: fix(projects): don't redirect to 404 page
-   Updated dependencies [07a45fde0]
    -   @nhost/react-apollo@5.0.28
    -   @nhost/nextjs@1.13.30

## 0.17.14

### Patch Changes

- 80b22724d: chore(deps): bump `@types/react` to `v18.2.13`,
`@types/react-dom` to `v18.2.6` and `@storybook/testing-library` to
`v0.2.0`

## 0.17.13

### Patch Changes

-   cc02902cb: chore(docs): update environment variable documentation

## 0.17.12

### Patch Changes

-   660d339e1: fix(storybook): don't break storybook
-   660d339e1: fix(tests): prevent warnings during tests
    -   @nhost/react-apollo@5.0.27
    -   @nhost/nextjs@1.13.29

## 0.17.11

### Patch Changes

- bd4d0c270: chore(dashboard):add postgres 14.6-20230613-1 to the
version selector

## 0.17.10

### Patch Changes

-   c8c2a10b2: fix(database): don't break the password reset flow
- e70b45498: chore(deps): bump `@types/react` to `v18.2.12` and
`@types/react-dom` to `v18.2.5`

## 0.17.9

### Patch Changes

- 842055099: chore(deps): bump `turbo` to `v1.10.3` and `pnpm` to
`v8.6.2`
- fd12aa0a8: chore(projects): remove the postgres password input from
the project creation screen
-   022b76e78: chore(deps): bump `@types/react` to `v18.2.11`
-   3555ab2b7: chore(deps): bump `vitest` monorepo to `v0.32.0`
-   c43e54922: feat(backups): add download button to backups

## 0.17.8

### Patch Changes

-   d0457fe5c: feat(settings): improve the dashboard and config parity
    -   @nhost/react-apollo@5.0.26
    -   @nhost/nextjs@1.13.28

## 0.17.7

### Patch Changes

-   4f0368b95: fix(account): don't break account settings page

## 0.17.6

### Patch Changes

- 64a8f41d0: chore(resources): lower the maximum allowed resources per
service

## 0.17.5

### Patch Changes

-   @nhost/react-apollo@5.0.25
-   @nhost/nextjs@1.13.27

## 0.17.4

### Patch Changes

- 9b1d0f7a5: fix(deployments): use correct timestamp for deployment
details
-   6d2963ffa: chore(deps): bump `@types/react` to `v18.2.8`
- 8871267b9: chore(deps): downgrade `pnpm` to `v8.5.1` because of no
Turborepo support

## 0.17.3

### Patch Changes

-   01eeef9de: chore(misc): under the hood improvements
- 21e13db05: chore(deps): bump `@types/react` to `v18.2.7` and `turbo`
to `v1.10.1`
- f16433ae6: chore(secrets): allow empty secrets and environment
variables
-   aa3c62989: chore(cli): bump Nhost CLI version to v1.0
    -   @nhost/react-apollo@5.0.24
    -   @nhost/nextjs@1.13.26

## 0.17.2

### Patch Changes

-   88a4983f: chore(misc): under the hood improvements

## 0.17.1

### Patch Changes

-   9b0d4dde: feat(secrets): enable secrets

## 0.17.0

### Minor Changes

-   15d84a19: Add postgres 14.6-20230525

## 0.16.14

### Patch Changes

-   4c626174: chore: updated import paths, improved directory structure
-   cc047b71: chore(deps): bump `@fontsource` monorepo to `v5.0.0`
-   99edd012: feat(account): add support for personal access tokens

## 0.16.13

### Patch Changes

-   78c7109c: feat(settings): allow selecting service versions

## 0.16.12

### Patch Changes

- 399009d6: fix(gql): don't enter an infinite loop when fetching remote
app data
- 329e5a91: fix(deployments): use the same sorting of deployments
everywhere
- 6d559d6e: chore(settings): add under the hood improvements to the
settings page
- 12eb236c: chore(deps): bump `prettier-plugin-tailwindcss` to `v0.3.0`
-   f9b81a2a: chore(deps): bump `turbo` to `v1.9.8`
-   1345741b: fix(projects): don't redirect to 404 on project creation
-   Updated dependencies [7fea29a8]
    -   @nhost/react-apollo@5.0.23
    -   @nhost/nextjs@1.13.25

## 0.16.11

### Patch Changes

- 1230b722: fix(projects): don't redirect to 404 on when the project is
renamed
    -   @nhost/react-apollo@5.0.22
    -   @nhost/nextjs@1.13.24

## 0.16.10

### Patch Changes

-   Updated dependencies [da03bf39]
    -   @nhost/react-apollo@5.0.21
    -   @nhost/nextjs@1.13.23

## 0.16.9

### Patch Changes

- 349aac36: fix(settings): use region domain when constructing the
postgres connection string

## 0.16.8

### Patch Changes

- 20fb69fa: chore(projects): change the way how API URLs are constructed

## 0.16.7

### Patch Changes

- 49f9b837: chore(docker): bump `pnpm` to `v8.4.0` and `turbo` to
`v1.9.3`
- 3f478a4e: chore(deps): bump `vitest` to `v0.31.0`, `@types/react` to
`v18.2.6` and `@types/react-dom` to `v18.2.4`

## 0.16.6

### Patch Changes

- d926f156: fix(projects): redirect to 404 when an invalid project is
opened
- 49b99728: fix(projects): disable features for non-owner members of
workspaces

## 0.16.5

### Patch Changes

-   12e2855f: chore(deps): bump `jsdom` to v22
-   e4972b83: feat(metrics): add Grafana page

## 0.16.4

### Patch Changes

- 3f396a9e: fix(projects): unpause after upgrading a paused project to
pro
- 3f396a9e: fix(projects): don't redirect to 404 page after project
creation

## 0.16.3

### Patch Changes

-   Updated dependencies [90c60311]
    -   @nhost/react-apollo@5.0.20
    -   @nhost/nextjs@1.13.22

## 0.16.2

### Patch Changes

-   0f34f0c6: fix(projects): disallow downgrading to free plan
- 8da291ad: chore(deps): bump `@types/react` to v18.2.0 and
`@types/react-dom` to v18.2.1

## 0.16.1

### Patch Changes

- adc828a5: fix(gql): don't enter an infinite loop when fetching remote
app data

## 0.16.0

### Minor Changes

-   2fb1145f: feat(compute): add support for replicas

### Patch Changes

- d8ceccec: chore(env): remove deprecated `NHOST_BACKEND_URL`
environment variable

## 0.15.2

### Patch Changes

-   84b84ab7: fix(projects): filter projects by workspace

## 0.15.1

### Patch Changes

-   2faf7907: chore(deps): bump `graphql-request` to v6
-   f1b5a944: chore(deps): bump `@vitejs/plugin-react` to v4
-   7f1785ac: chore(deps): bump `@types/react` to v18.0.37
    -   @nhost/react-apollo@5.0.19

## 0.15.0

### Minor Changes

-   85889ee8: feat(dashboard): add Compute management to the settings

## 0.14.8

### Patch Changes

-   668c8771: chore(dialogs): unify dialog management of payment dialogs

## 0.14.7

### Patch Changes

-   d4ccc656: chore: cleanup unused code
    -   @nhost/react-apollo@5.0.18
    -   @nhost/nextjs@1.13.21

## 0.14.6

### Patch Changes

-   b299cfc9: chore(deps): bump `vitest` to v0.30.0
-   411cb65b: chore(projects): refactor workspace and project hooks
- 43b1b144: chore(deps): bump `@types/react` to v18.0.34 and
`@types/react-dom` to v18.0.11
-   Updated dependencies [43b1b144]
    -   @nhost/react-apollo@5.0.17
    -   @nhost/nextjs@1.13.20

## 0.14.5

### Patch Changes

-   ba0d57ee: fix(i18n): revert i18n library
-   3328ed05: feat(projects): improve overview when there is an error

## 0.14.4

### Patch Changes

-   5e0920ba: chore(deps): bump `next-seo` to v6
-   706c9dc3: chore(deps): bump `@types/react` to 18.0.33
-   99f8f6b3: feat(metrics): show metrics on the overview

## 0.14.3

### Patch Changes

-   @nhost/react-apollo@5.0.16

## 0.14.2

### Patch Changes

-   3cb67300: fix(logs): don't break UI when clearing time picker
-   7453bf3b: feat(projects): show project creator info
-   c166dad0: chore(tests): improve auth page tests
-   6a290bb2: chore(deps): bump `@types/react` to 18.0.32

## 0.14.1

### Patch Changes

-   @nhost/react-apollo@5.0.15
-   @nhost/nextjs@1.13.19

## 0.14.0

### Minor Changes

-   6e1f03ea: feat(dashboard): add support for the Azure AD provider

### Patch Changes

-   1bd2c373: chore(deps): bump `turbo` to 1.8.6
-   d329b621: chore(deps): bump `@types/react` to 18.0.30
-   cb248f0d: fix(tests): avoid name collision in database tests
-   867c8076: chore(deps): bump `@types/react` to 18.0.29

## 0.13.10

### Patch Changes

- e93b06ab: fix(dashboard): remove left margin from workspace list on
mobile
-   1c4806bf: chore(deps): bump `sharp` to 0.32.0
    -   @nhost/react-apollo@5.0.14
    -   @nhost/nextjs@1.13.18

## 0.13.9

### Patch Changes

-   912ed76c: chore(dashboard): bump `@apollo/client` to 3.7.10
-   Updated dependencies [912ed76c]
    -   @nhost/react-apollo@5.0.13

## 0.13.8

### Patch Changes

-   7c127372: chore(dashboard): bump `react-error-boundary` to v4

## 0.13.7

### Patch Changes

- 9130ab12: chore(dashboard): bump `yup` to v1 and `@hookform/resolvers`
to v3

## 0.13.6

### Patch Changes

- 253dd235: using new mutation to create projects + refactor Create
Project page.

## 0.13.5

### Patch Changes

-   @nhost/react-apollo@5.0.12
-   @nhost/nextjs@1.13.17

## 0.13.4

### Patch Changes

-   b48bc034: fix(dashboard): disable new users
-   798e591b: fix(dashboard): show correct date in data grid

## 0.13.3

### Patch Changes

-   bfb4c1a6: chore(dashboard): remove `useAxios` property
-   d8d8394b: Dashboard: allow to override hasura admin secret in docker
-   Updated dependencies [ce1ee40d]
    -   @nhost/nextjs@1.13.16
    -   @nhost/react-apollo@5.0.11

## 0.13.2

### Patch Changes

-   beed2eba: Fix docker entrypoint for dashboard
- 2c8559a3: fix(dashboard): refresh project list after deleting a
project
-   4329d048: chore(dashboard): bump `graphiql` dependencies

## 0.13.1

### Patch Changes

-   cbb1fc5b: chore(dashboard): cleanup GraphQL operations

## 0.13.0

### Minor Changes

-   088584e7: feat(dashboard): add support for custom local subdomains

### Patch Changes

-   2ac90dfd: fix(dashboard): improve mobile responsive layout
-   Updated dependencies [f375eacc]
    -   @nhost/nextjs@1.13.15
    -   @nhost/react-apollo@5.0.10

## 0.12.4

### Patch Changes

-   @nhost/react-apollo@5.0.9
-   @nhost/nextjs@1.13.14

## 0.12.3

### Patch Changes

-   2b1338f7: chore(dashboard): bump `turbo` to 1.8.3
- 5223ee93: fix(dashboard): show correct deployment status on the main
page
-   850a049c: chore(deps): update docker/build-push-action action to v4
-   Updated dependencies [850a049c]
    -   @nhost/nextjs@1.13.13
    -   @nhost/react-apollo@5.0.8

## 0.12.2

### Patch Changes

-   4bf40995: chore(deps): bump `typescript` to `4.9.5`
-   8bb097c9: chore(deps): bump `vitest`
- 35d52aab: chore(deps): replace `cross-fetch` with `isomorphic-unfetch`
-   Updated dependencies [4bf40995]
-   Updated dependencies [8bb097c9]
-   Updated dependencies [35d52aab]
    -   @nhost/react-apollo@5.0.7
    -   @nhost/nextjs@1.13.12

## 0.12.1

### Patch Changes

-   c96d7ccd: fix(dashboard): fix docker builds

## 0.12.0

### Minor Changes

-   d1671210: feat(dashboard): use mimir to manage project configuration

### Patch Changes

-   f65e4de9: chore(deps): bump @graphql-codegen monorepo to v3

## 0.11.20

### Patch Changes

-   4b4f0d01: chore(dashboard): improve dialog management

## 0.11.19

### Patch Changes

-   @nhost/react-apollo@5.0.6
-   @nhost/nextjs@1.13.11

## 0.11.18

### Patch Changes

-   01318860: fix(nhost-js): use correct URL for functions requests
-   Updated dependencies [01318860]
    -   @nhost/react-apollo@5.0.5
    -   @nhost/nextjs@1.13.10

## 0.11.17

### Patch Changes

-   f673adea: fix(dashboard): set correct Content-Type for user creation
-   445d8ef4: chore(deps): bump `@nhost/react-apollo` to 5.0.4
-   445d8ef4: chore(deps): bump `@nhost/nextjs` to 1.13.9
- 0368663d: fix(dashboard): allow permission editing for auth and
storage schemas
-   Updated dependencies [445d8ef4]
-   Updated dependencies [445d8ef4]
    -   @nhost/react-apollo@5.0.4
    -   @nhost/nextjs@1.13.9

## 0.11.16

### Patch Changes

-   b755e908: fix(dashboard): use correct date for last seen
-   2d9145f9: chore(deps): revert GraphQL client
- 1ddf704c: fix(dashboard): don't show false positive message for failed
user creation
    -   @nhost/react-apollo@5.0.3
    -   @nhost/nextjs@1.13.8

## 0.11.15

### Patch Changes

-   @nhost/react-apollo@5.0.2
-   @nhost/nextjs@1.13.7

## 0.11.14

### Patch Changes

- 2cc18dcb: fix(dashboard): prevent permission editor dropdown from
being always open

## 0.11.13

### Patch Changes

- 3343a363: chore(dashboard): bump `@testing-library/react` to v14 and
`@testing-library/dom` to v9
    -   @nhost/react-apollo@5.0.1
    -   @nhost/nextjs@1.13.6

## 0.11.12

### Patch Changes

- 87eda76e: chore(dashboard): bump `@types/react` to v18.0.28 and
`@types/react-dom` to v18.0.11
-   6f0ac570: feat(dashboard): show dashboard version in account menu

## 0.11.11

### Patch Changes

-   bf1e4071: chore(dashboard): bump `react-is` version to `18.2.0`
-   Updated dependencies [bf1e4071]
-   Updated dependencies [5013213b]
    -   @nhost/nextjs@1.13.5
    -   @nhost/react-apollo@4.13.5

## 0.11.10

### Patch Changes

- a37a430b: fix(dashboard): don't break UI when deployments are
unavailable
    -   @nhost/react-apollo@4.13.4
    -   @nhost/nextjs@1.13.4

## 0.11.9

### Patch Changes

-   7b970e68: fix(dashboard): fix header link color

## 0.11.8

### Patch Changes

- f33242f2: feat(dashboard): add new sign up, sign in and reset password
pages

## 0.11.7

### Patch Changes

-   e9c8909c: fix(dashboard): use correct theme color in dark mode

## 0.11.6

### Patch Changes

-   902f486b: fix(dashboard): re-enable Hasura on logs page

## 0.11.5

### Patch Changes

-   1f9720fa: fix(dashboard): apply select permissions properly

## 0.11.4

### Patch Changes

-   deb14b51: fix(dashboard): don't break billing form

## 0.11.3

### Patch Changes

-   @nhost/react-apollo@4.13.3
-   @nhost/nextjs@1.13.3

## 0.11.2

### Patch Changes

-   f143e51d: chore(dashboard): pin Turborepo to 1.6.3

## 0.11.1

### Patch Changes

-   c2b5a41a: chore(dashboard): select system colors by default

## 0.11.0

### Minor Changes

-   1ebaf429: feat(dashboard): introduce Dark Mode 🌚

### Patch Changes

- 63b445c4: fixed duplicated logs bug and made to date count during live
mode

## 0.10.1

### Patch Changes

-   e146d32e: chore(deps): update dependency @types/react to v18.0.27
-   59347fcd: correct allowed role name
-   5b65cac9: updated authentication documentation
-   963f9b5e: feat(dashboard): include project info in feedback

## 0.10.0

### Minor Changes

-   ed4c7801: chore(dashboard): remove Functions section

## 0.9.10

### Patch Changes

-   4e2f8ccd: fix(dashboard): don't break Auth page in local mode

## 0.9.9

### Patch Changes

-   31abbe5f: fix(dashboard): enable toggle when settings are filled in

## 0.9.8

### Patch Changes

- 5bdd31ad: chore(dashboard): list fewer images per page on the Storage
page
- 5121851c: fix(dashboard): don't throw validation error for valid
permission rules

## 0.9.7

### Patch Changes

-   c126b20d: fix(dashboard): correct redeployment button

## 0.9.6

### Patch Changes

-   36c3519c: feat(dashboard): retrigger deployments

## 0.9.5

### Patch Changes

- 200e9f77: chore(deps): update dependency @types/react-dom to v18.0.10
-   Updated dependencies [200e9f77]
    -   @nhost/nextjs@1.13.2
    -   @nhost/react-apollo@4.13.2

## 0.9.4

### Patch Changes

- dbd3ded5: fix(dashboard): workspaces creation, new form, correct
redirects.

## 0.9.3

### Patch Changes

-   85f0f943: fix(dashboard): don't break the table creation process

## 0.9.2

### Patch Changes

-   Updated dependencies [d42c27ae]
-   Updated dependencies [927be4a2]
    -   @nhost/nextjs@1.13.1
    -   @nhost/react-apollo@4.13.1

## 0.9.1

### Patch Changes

-   d0f80811: fix(dashboard): don't show error when signing out the user

## 0.9.0

### Minor Changes

- d92891b2: feat(dashboard): add Permission Editor to the Database
section

### Patch Changes

-   3d379128: fix(dashboard): create new user
    -   @nhost/react-apollo@4.13.0
    -   @nhost/nextjs@1.13.0

## 0.8.1

### Patch Changes

-   7cadd944: fix(dashboard): display Twitter provider settings

## 0.8.0

### Minor Changes

-   9a1aa7bb: add functions to the log dashboard
-   f29abe62: feat(dashboard): Users Management v2

### Patch Changes

-   7766624b: feat(dashboard): add JWT secret editor modal
    -   @nhost/react-apollo@4.12.1
    -   @nhost/nextjs@1.12.1

## 0.7.13

### Patch Changes

-   dd0738d5: fix(dashboard): provisioning status polling

## 0.7.12

### Patch Changes

-   b21222b3: chore(deps): update dependency @types/node to v16
-   9e0486a3: fix(dashboard): close modals when navigating
-   Updated dependencies [b21222b3]
-   Updated dependencies [65687bee]
-   Updated dependencies [54df0df4]
    -   @nhost/nextjs@1.12.0
    -   @nhost/react-apollo@4.12.0

## 0.7.11

### Patch Changes

-   d6527122: fix(dashboard): use correct service URLs

## 0.7.10

### Patch Changes

-   Updated dependencies [57db5b83]
    -   @nhost/nextjs@1.11.0
    -   @nhost/nhost-js@1.7.0
    -   @nhost/react@0.17.0
    -   @nhost/react-apollo@4.11.0

## 0.7.9

### Patch Changes

- a6d31dc2: fix(dashboard): don't break the UI when project is not
loaded yet

## 0.7.8

### Patch Changes

- 7f251111: Use `NhostProvider` instead of `NhostReactProvider` and
`NhostNextProvider`

    `NhostReactProvider` and `NhostNextProvider` are now deprecated

-   f4d70f88: fix(dashboard): do not break when region is nullish

- 4a9471cc: Windows Live Provider displayed link updated to match
backend url

- 594488e4: fix(dashboard): do not show error when submitting Apple
provider settings

-   Updated dependencies [7f251111]
    -   @nhost/nextjs@1.10.0
    -   @nhost/react@0.16.0
    -   @nhost/react-apollo@4.10.0

## 0.7.7

### Patch Changes

-   80b604ad: fix(dashboard): use correct Hasura slug

## 0.7.6

### Patch Changes

-   2d2beb53: fix(dashboard): prevent error on GraphQL page
-   ac8efcbd: chore(dashboard): deprecate old DNS name

## 0.7.5

### Patch Changes

-   132a4f4b: chore(dashboard): remove unused dependencies
- 132a4f4b: chore(deps): synchronize @types/react-dom and @types/react
versions
-   db57572f: fix(dashboard): correct section paddings when no env vars
-   Updated dependencies [132a4f4b]
    -   @nhost/react@0.15.2
    -   @nhost/react-apollo@4.9.2
    -   @nhost/nextjs@1.9.3

## 0.7.4

### Patch Changes

-   34d85e54: chore(deps): update dependency critters to ^0.0.16
- 9b93cf95: chore(deps): update dependency @netlify/functions to ^0.11.0
-   e0439030: chore(deps): update dependency @types/react-dom to v18.0.9
-   Updated dependencies [82124329]
    -   @nhost/nextjs@1.9.2

## 0.7.3

### Patch Changes

-   a1193da4: fix(dashboard): remove character limit from env var inputs

## 0.7.2

### Patch Changes

-   44f13f62: chore(dashboard): cleanup unused files

## 0.7.1

### Patch Changes

- e01cb2ed: chore(dashboard): change settings sidebar menu item density

## 0.7.0

### Minor Changes

- db342f45: chore(dashboard): refactor Roles and Permissions settings
sections
-   8b9fa0b1: feat(dashboard): add Environment Variables page

### Patch Changes

-   Updated dependencies [66b4f3d0]
-   Updated dependencies [2e6923dc]
-   Updated dependencies [ef117c28]
-   Updated dependencies [aebb8225]
    -   @nhost/core@0.9.4
    -   @nhost/nhost-js@1.6.2
    -   @nhost/nextjs@1.9.1
    -   @nhost/react@0.15.1
    -   @nhost/react-apollo@4.9.1

## 0.6.0

### Minor Changes

-   eef9c914: feat(dashboard): add Roles and Permissions page

## 0.5.0

### Minor Changes

-   a48dd5bf: feat(dashboard): make backend port configurable

## 0.4.3

### Patch Changes

-   5de965d9: fix(dashboard): alphabetic ordering of providers
-   b9087a4a: fix(dashboard): console -> dashboard terminology
-   ca012d79: docs(workos): WorkOS Docs

## 0.4.2

### Patch Changes

-   89bd37bc: fix(dashboard): correct redirect URL input opacity
-   Updated dependencies [4601d84e]
-   Updated dependencies [843087cb]
    -   @nhost/react@0.15.0
    -   @nhost/nextjs@1.9.0
    -   @nhost/react-apollo@4.9.0

## 0.4.1

### Patch Changes

-   766cb612: fix(dashboard): correct redirect URL for oauth providers
-   Updated dependencies [53bdc294]
-   Updated dependencies [f2aaff05]
    -   @nhost/nextjs@1.8.3
    -   @nhost/core@0.9.3
    -   @nhost/react@0.14.3
    -   @nhost/nhost-js@1.6.1
    -   @nhost/react-apollo@4.8.3

## 0.4.0

### Minor Changes

-   9211743d: feat(dashboard): migrate Settings page features

## 0.3.0

### Minor Changes

-   73da6a67: fix(dashboard): avoid using BACKEND_URL locally

## 0.2.0

### Minor Changes

-   db118f97: feat(dashboard): generate Docker image

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-04 18:55:11 +01:00
Hassan Ben Jobrane
e2c7741468 fix: disable ai settings under orgs (#2991) 2024-11-04 18:51:53 +01:00
github-actions[bot]
89fd97cbf0 chore: update versions (#2987)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @nhost/dashboard@2.2.0

# @nhost/dashboard

## 1.30.0

### Minor Changes

- 50441a8: feat: add ui for project autoscaler settings and run services
autoscaler settings

## 1.29.0

### Minor Changes

-   55d8bb5: feat: integrate turnstile for signup verification
-   2a2e54c: fix: update docs url in run services form tooltip
- 18f942f: fix: display long error messages in error toast without
overflow

### Patch Changes

-   @nhost/react-apollo@13.0.0
-   @nhost/nextjs@2.1.22

## 1.28.2

### Patch Changes

- 52a38fe: chore: update dependencies to address security
vulnerabilities
-   Updated dependencies [52a38fe]
    -   @nhost/nextjs@2.1.21

## 1.28.1

### Patch Changes

-   9735fa2: chore: remove broken link

## 1.28.0

### Minor Changes

- 526183a: feat: allow filtering users in "make request as" in graphql
section
-   be3b85b: feat: add conceal errors toggle on auth settings page

### Patch Changes

- 35a2f12: fix: prevent run service details from opening when attempting
to delete
    -   @nhost/react-apollo@12.0.6
    -   @nhost/nextjs@2.1.20

## 1.27.0

### Minor Changes

-   a7cd02c: fix: resolve rate limit query

## 1.26.0

### Minor Changes

-   3773ad7: chore: update pricing information
- b63250d: fix: not allow run service creation form resubmission while
creating a run service
-   a44a1d4: feat: add rate limits settings page

### Patch Changes

-   @nhost/react-apollo@12.0.5
-   @nhost/nextjs@2.1.19

## 1.25.0

### Minor Changes

- d1ceede: feat: add setting to migrate postgres major and/or minor
versions
- e5d3d1a: fix: allow manually typing column for custom check in
database row permissions

### Patch Changes

-   @nhost/react-apollo@12.0.4
-   @nhost/nextjs@2.1.18

## 1.24.1

### Patch Changes

- 49f2e55: fix: use service subdomain in service form and service
details dialog
- 598b988: fix: use current project subdomain in ServiceDetailsDialog
component

## 1.24.0

### Minor Changes

-   abb24af: chore: add redirect to support page when project is locked
- 18a6455: feat: show contact us info and locked reason when project is
locked

### Patch Changes

-   e31eefa: fix: include ingresses field when updating run services

## 1.23.0

### Minor Changes

-   33284d3: fix: don't show double scrollbar in configuration editor

### Patch Changes

-   @nhost/react-apollo@12.0.3
-   @nhost/nextjs@2.1.17

## 1.22.0

### Minor Changes

-   998c037: fix: align drop-down list in select component
- 807b8c0: fix: show city name in region selection for project creation

## 1.21.0

### Minor Changes

- a2efeed: fix: improve project health error handling, add unknown state
and polling interval for health state

## 1.20.0

### Minor Changes

- 8ea4210: fix: error toasts can be closed individually, instead of
dismissing all toasts at once
- 58919ba: chore: add blink animation when project health service is
updating

## 1.19.0

### Minor Changes

- b519862: fix: get configuration in configuration editor using local
development environment

## 1.18.0

### Minor Changes

- 502abad: feat: add services health checks indicators to the overview
page
-   b3ff6ad: chore: update title text on service status modal
- dbadf59: feat: add project configuration TOML editor to the settings
page

## 1.17.0

### Minor Changes

- 77fba27: fix: postgres version validation when activating ai in ai
settings page
-   ac6d1b6: feat: use name instead of awsName

## 1.16.3

### Patch Changes

- 87a37cf: fix: remove unnecessary isPlatform check from verify button
disable logic on custom domains
    -   @nhost/react-apollo@12.0.2
    -   @nhost/nextjs@2.1.16

## 1.16.2

### Patch Changes

- a9413af: fix: update `GetAllWorkspacesAndProjects` query polling to
use exponential backoff
    -   @nhost/react-apollo@12.0.1
    -   @nhost/nextjs@2.1.15

## 1.16.1

### Patch Changes

-   @nhost/react-apollo@12.0.0
-   @nhost/nextjs@2.1.14

## 1.16.0

### Minor Changes

- c6d5c5c: feat: add toggle switch to enable/disable public access in
the database settings

## 1.15.2

### Patch Changes

-   @nhost/react-apollo@11.0.4
-   @nhost/nextjs@2.1.13

## 1.15.1

### Patch Changes

-   @nhost/react-apollo@11.0.3
-   @nhost/nextjs@2.1.12

## 1.15.0

### Minor Changes

-   a7bde37: feat: send metadata in the edit form

### Patch Changes

- 1bc615b: feat: improve error message handling in `ErrorToast`
component
    -   @nhost/react-apollo@11.0.2
    -   @nhost/nextjs@2.1.11

## 1.14.0

### Minor Changes

-   a448d7d: feat: allow configuring postmark and delete SMTP settings

## 1.13.3

### Patch Changes

-   5924bc3: fix: include password in `GetSmtpSettings` query
- c5ad634: fix: resolved an issue where one-click install links were
broken on Safari
- 7278991: fix: update graphql auto-embeddings configuration to use
String type for model field

## 1.13.2

### Patch Changes

-   026f84f: fix: use configuration server URL from environment variable

## 1.13.1

### Patch Changes

-   7e9a2ce: fix: resolve issue where run services form fails to open

## 1.13.0

### Minor Changes

-   dd5d262: feat: add model field to the auto-embeddings form
- 09962be: feat: enable settings and run services when running the
dashboard locally
- 9cdecb6: feat: enable users to update their email address from the
account settings page

## 1.12.2

### Patch Changes

-   c195c51: fix: send email upon signin for unverified users

## 1.12.1

### Patch Changes

- 93ebdf8: fix: use service urls when initilizaing NhostClient running
local dashboard
    -   @nhost/react-apollo@11.0.1
    -   @nhost/nextjs@2.1.10

## 1.12.0

### Minor Changes

- f242e4b: feat: add connect with github to the user's account settings
-   768ca17: chore: update dependencies
- d62bd0f: fix: "Track this" option within the SQL editor now correctly
updates the metadata
- 91c2bb6: feat: refactor sign-in and sign-up pages to enforce email
verification

### Patch Changes

-   943831f: fix: resolve an error toast issue when unpausing a project
-   Updated dependencies [768ca17]
    -   @nhost/react-apollo@11.0.0
    -   @nhost/nextjs@2.1.9

## 1.11.2

### Patch Changes

-   @nhost/react-apollo@10.0.2
-   @nhost/nextjs@2.1.8

## 1.11.1

### Patch Changes

-   981404f: fix: set default value for healthCheck field validation

## 1.11.0

### Minor Changes

- 7789469: chore: upgrade dependency `@graphql-codegen/cli` to `5.0.2`
to address vulnerability
- 6c11b75: feat: add update user displayName section in account settings

### Patch Changes

-   @nhost/react-apollo@10.0.1
-   @nhost/nextjs@2.1.7

## 1.10.0

### Minor Changes

-   49a80c2: chore: update dependencies
-   150c04a: feat: add healthcheck config to run services

### Patch Changes

- e03f141: fix: allow insert, update and delete on tables in `auth` and
`storage` schemas
- 28676f4: feat: add min postgres version check to enable the ai service
-   Updated dependencies [49a80c2]
    -   @nhost/react-apollo@10.0.0
    -   @nhost/nextjs@2.1.6

## 1.9.0

### Minor Changes

-   d86e5c9: feat: add support for filtering the logs using a RegExp

## 1.8.3

### Patch Changes

-   @nhost/react-apollo@9.0.3
-   @nhost/nextjs@2.1.5

## 1.8.2

### Patch Changes

- 6df4f02: fix: use custom error toast and show correct message when
sending an invite

## 1.8.1

### Patch Changes

-   @nhost/react-apollo@9.0.2
-   @nhost/nextjs@2.1.4

## 1.8.0

### Minor Changes

- 713d53c: feat: add catch-all route for workspace/project - useful for
documentation

### Patch Changes

-   3db2999: fix: refresh table list after running SQL using the editor
- 3c4dd55: fix: handle `Error` objects properly in the `ErrorToast`
component
- 92b434e: fix: resolve an issue where the checkbox in the data-grid
header did not select all rows
    -   @nhost/react-apollo@9.0.1
    -   @nhost/nextjs@2.1.3

## 1.7.0

### Minor Changes

-   0d8d0eb: Update docs and dashboard references

## 1.6.9

### Patch Changes

-   @nhost/react-apollo@9.0.0
-   @nhost/nextjs@2.1.2

## 1.6.8

### Patch Changes

-   @nhost/react-apollo@8.0.1
-   @nhost/nextjs@2.1.1

## 1.6.7

### Patch Changes

-   5ef5189: fix: update `@apollo/client` to `3.9.4` to fix a cache bug

## 1.6.6

### Patch Changes

-   3ba485e: fix: added discord.com to connect-src
-   e5bab6a: chore: update dependencies
-   Updated dependencies [b19ffed]
-   Updated dependencies [e5bab6a]
    -   @nhost/nextjs@2.1.0
    -   @nhost/react-apollo@8.0.0

## 1.6.5

### Patch Changes

- ba73bb4: fix: update ErrorToast component to show the internal graphql
error
- d5337ff: fix: utilize accumulator in the creation of validation schema
within data grid utils

## 1.6.4

### Patch Changes

-   7c2a1c2: feat: show error and debug info in the error toast

## 1.6.3

### Patch Changes

-   6b8aad5: fix: add bare nhost.run to CSP

## 1.6.2

### Patch Changes

-   b18edc0: feat: added CSP and X-Frame-Options

## 1.6.1

### Patch Changes

-   8d91f71: chore: update deps and enable pnpm audit
- 3b8473b: chore: update turbo to `1.11.3` and pnpm to `8.10.5` in
Dockerfile
-   Updated dependencies [8d91f71]
    -   @nhost/react-apollo@7.0.2
    -   @nhost/nextjs@2.0.2

## 1.6.0

### Minor Changes

-   3ff1c2b53: fix: show upgrade option for pro projects

## 1.5.0

### Minor Changes

-   c2ef17c0a: feat: add support for new Team plan

## 1.4.0

### Minor Changes

-   7883bbcbd: feat: don't show deprecated plans
- 44be6dc0a: feat: set redirectTo during sign-in to support preview
environments

### Patch Changes

- 3c3594898: fix: allow access to graphite when configured running in
local dashboard
-   32c246b7a: chore: update docs icon

## 1.3.2

### Patch Changes

-   174b4165b: chore: use env variables when running graphql codegen
-   7c977e714: chore: change `Allowed Roles` to `Default Allowed Roles`
-   46f028b9f: fix: remove hardcoded ai version setting

## 1.3.1

### Patch Changes

- af33c21d1: chore: remove backendUrl deprecation notice and remove all
references to `providersUpdated`

## 1.3.0

### Minor Changes

-   04784d880: Fix graphite's default version

## 1.2.0

### Minor Changes

-   5733162ed: feat: add settings and ui for graphite

## 1.1.0

### Minor Changes

-   e2b79b5ec: chore: remove sharp from deps

## 1.0.1

### Patch Changes

-   @nhost/react-apollo@7.0.1
-   @nhost/nextjs@2.0.1

## 1.0.0

### Major Changes

- bc9eff6e4: chore: remove support for using backendUrl when
instantiating the Nhost client

### Patch Changes

-   Updated dependencies [bc9eff6e4]
    -   @nhost/nextjs@2.0.0
    -   @nhost/react-apollo@7.0.0

## 0.21.1

### Patch Changes

-   97ced73a3: fix(dashboard): prevent dashboard from resolving secrets

## 0.21.0

### Minor Changes

- ed1a8d458: Update alert message on increasing PostgreSQL's volume
capacity
-   2e2248fd4: feat(dashboard): add SQL editor

## 0.20.28

### Patch Changes

-   7c2c31082: feat: add support for users to delete their account
    -   @nhost/react-apollo@6.0.1
    -   @nhost/nextjs@1.13.40

## 0.20.27

### Patch Changes

- fa79b7709: chore(dashboard): tweaks and fixes to the service form and
dialog
-   8df84d782: fix(dashboard): allow resetting custom domains
    -   @nhost/react-apollo@6.0.0
    -   @nhost/nextjs@1.13.39

## 0.20.26

### Patch Changes

- 331ba0376: feat(dashboard): add postgres storage capacity modifier in
the settings
-   b7f801874: feat(dashboard): add new settings page for custom domains

## 0.20.25

### Patch Changes

-   @nhost/react-apollo@5.0.38

## 0.20.24

### Patch Changes

-   e10389ecf: fix(dashboard): disable run tab when developing locally
    -   @nhost/react-apollo@5.0.37

## 0.20.23

### Patch Changes

-   c01568a7d: chore(dashboard): show alert to update oauth providers

## 0.20.22

### Patch Changes

-   c3efb7ec8: feat(dashboard): query latest announcement from platform

## 0.20.21

### Patch Changes

-   3e46d3873: chore: update link to node18 announcement

## 0.20.20

### Patch Changes

-   @nhost/react-apollo@5.0.36
-   @nhost/nextjs@1.13.38

## 0.20.19

### Patch Changes

-   75c4c8ae3: feat(dashboard): make env value input multiline

## 0.20.18

### Patch Changes

- 425d485f8: fix(dashboard): make sure dedicated resources pricing
follows total resources

## 0.20.17

### Patch Changes

-   ae324f67f: fix(dashboard): remove unused graphql fields

## 0.20.16

### Patch Changes

-   df5b4302c: chore(dashboard): remove run feature flag
- bf4a1f6c2: feat(dashboard): fetch auth, postgres, hasura and storage
versions from dashboard
- 34fc08ca7: fix(dashboard/run): show correct private registry in
service details
-   885d10620: chore(dashboard): change feedback to contact us

## 0.20.15

### Patch Changes

- ed16c8b5d: feat(run): add a confirmation dialog when deleting a run
service
- 216990888: fix(run): center loading indicator when selecting a project

## 0.20.14

### Patch Changes

-   9fbea9787: feat: add node18 announcement

## 0.20.13

### Patch Changes

- e84acf469: fix(run): handle subdomain undefined error when creating a
new service

## 0.20.12

### Patch Changes

-   b7c799d62: feat(run): add dialog to copy registry and URLs

## 0.20.11

### Patch Changes

-   8903e6abd: fix(dashboard): show correct egress limit in usage stats

## 0.20.10

### Patch Changes

- 666a75a23: feat(dashboard): add functions execution time and egress
volume to usage stats

## 0.20.9

### Patch Changes

-   5e1e80aa8: fix(dashboard): show correct locales in user details
    -   @nhost/react-apollo@5.0.35
    -   @nhost/nextjs@1.13.37

## 0.20.8

### Patch Changes

-   @nhost/react-apollo@5.0.34
-   @nhost/nextjs@1.13.36

## 0.20.7

### Patch Changes

-   4a7ede11e: fix: distinguish files that were not uploaded
- 202b64723: feat(nhost-run): add support for one-click-install run
services
- 074a0fa11: feat(dashboard): add settings toggle to enable/disable
antivirus
    -   @nhost/react-apollo@5.0.33
    -   @nhost/nextjs@1.13.35

## 0.20.6

### Patch Changes

-   b20761e97: feat(services): add pricing info and confirmation dialog
-   90df6d81d: fix(services): handle null values when editing a service
-   aa8508467: fix: query service logs correctly
    feat: enable multiline support for environment value input

## 0.20.5

### Patch Changes

-   8d7f84b8d: fix: make announcement adapt to theme

## 0.20.4

### Patch Changes

-   3b75bfce2: fix: make announcement close properly
- f49819075: fix: show correct values when dedicated resources are
disabled

## 0.20.3

### Patch Changes

-   e643bd362: fix(services): fix errors when config is null
-   bcdab66bf: feat: add annoucement for nhost run
-   f967a2e59: added note about storage not being able to be downsized
-   311c7756d: chore(services): consistent naming for compute

## 0.20.2

### Patch Changes

-   9073182d5: chore(dashboard): bump `turbo` to 1.10.11
-   ece717d6e: feat(logs): show services in the logs page
- 82b335311: feat(metrics): change grafana link to point to the
dashboards
- b135ef695: fix(services): set command as optional and set min replicas
to 0

## 0.20.1

### Patch Changes

-   3d5c34f4c: fix(auth): fix users pagination limit

## 0.20.0

### Minor Changes

-   c99d117d1: feat(services): add support for custom services

## 0.19.2

### Patch Changes

-   face99ccd: chore(deps): bump turbo version
-   cfe527307: style: tweak pull config warning in dark mode
- a9d7da8af: chore(deps): update dependency @types/pluralize to ^0.0.30
-   9aa4371ef: chore: add hasura-auth version 0.21.2
- d14e112bf: chore(deps): update dependency prettier-plugin-tailwindcss
to ^0.4.0
-   d3e8bb94a: chore(deps): update dependency vite-plugin-dts to v3

## 0.19.1

### Patch Changes

-   @nhost/react-apollo@5.0.32
-   @nhost/nextjs@1.13.34

## 0.19.0

### Minor Changes

- 9c61c69a7: chore(dashboard):add postgres 14.6-20230705-1 to the
version selector

### Patch Changes

-   47bda15ff: feat(settings): add warning to pull config

## 0.18.0

### Minor Changes

- ee0b9b8ed: chore(dashboard):add hasura v2.28.2 and v2.29.0 to the
version selector

## 0.17.20

### Patch Changes

-   @nhost/react-apollo@5.0.31
-   @nhost/nextjs@1.13.33

## 0.17.19

### Patch Changes

-   f866120a6: fix(users): use the password length from the config

## 0.17.18

### Patch Changes

-   @nhost/react-apollo@5.0.30
-   @nhost/nextjs@1.13.32

## 0.17.17

### Patch Changes

-   ea7b102c0: fix(pat): highlight expired tokens

## 0.17.16

### Patch Changes

- b3b64a3b7: chore(deps): bump `@types/react` to `v18.2.14` and
`@types/react-dom` to `v18.2.6`
-   32b221f94: chore(deps): bump `graphiql` to `v3`
-   3a56c12df: chore(deps): bump `turbo` to `v1.10.6`
-   Updated dependencies [b3b64a3b7]
    -   @nhost/react-apollo@5.0.29
    -   @nhost/nextjs@1.13.31

## 0.17.15

### Patch Changes

-   f41fdc12a: chore(deps): bump `turbo` to `1.10.5`
-   6199c1c55: fix(projects): don't redirect to 404 page
-   Updated dependencies [07a45fde0]
    -   @nhost/react-apollo@5.0.28
    -   @nhost/nextjs@1.13.30

## 0.17.14

### Patch Changes

- 80b22724d: chore(deps): bump `@types/react` to `v18.2.13`,
`@types/react-dom` to `v18.2.6` and `@storybook/testing-library` to
`v0.2.0`

## 0.17.13

### Patch Changes

-   cc02902cb: chore(docs): update environment variable documentation

## 0.17.12

### Patch Changes

-   660d339e1: fix(storybook): don't break storybook
-   660d339e1: fix(tests): prevent warnings during tests
    -   @nhost/react-apollo@5.0.27
    -   @nhost/nextjs@1.13.29

## 0.17.11

### Patch Changes

- bd4d0c270: chore(dashboard):add postgres 14.6-20230613-1 to the
version selector

## 0.17.10

### Patch Changes

-   c8c2a10b2: fix(database): don't break the password reset flow
- e70b45498: chore(deps): bump `@types/react` to `v18.2.12` and
`@types/react-dom` to `v18.2.5`

## 0.17.9

### Patch Changes

- 842055099: chore(deps): bump `turbo` to `v1.10.3` and `pnpm` to
`v8.6.2`
- fd12aa0a8: chore(projects): remove the postgres password input from
the project creation screen
-   022b76e78: chore(deps): bump `@types/react` to `v18.2.11`
-   3555ab2b7: chore(deps): bump `vitest` monorepo to `v0.32.0`
-   c43e54922: feat(backups): add download button to backups

## 0.17.8

### Patch Changes

-   d0457fe5c: feat(settings): improve the dashboard and config parity
    -   @nhost/react-apollo@5.0.26
    -   @nhost/nextjs@1.13.28

## 0.17.7

### Patch Changes

-   4f0368b95: fix(account): don't break account settings page

## 0.17.6

### Patch Changes

- 64a8f41d0: chore(resources): lower the maximum allowed resources per
service

## 0.17.5

### Patch Changes

-   @nhost/react-apollo@5.0.25
-   @nhost/nextjs@1.13.27

## 0.17.4

### Patch Changes

- 9b1d0f7a5: fix(deployments): use correct timestamp for deployment
details
-   6d2963ffa: chore(deps): bump `@types/react` to `v18.2.8`
- 8871267b9: chore(deps): downgrade `pnpm` to `v8.5.1` because of no
Turborepo support

## 0.17.3

### Patch Changes

-   01eeef9de: chore(misc): under the hood improvements
- 21e13db05: chore(deps): bump `@types/react` to `v18.2.7` and `turbo`
to `v1.10.1`
- f16433ae6: chore(secrets): allow empty secrets and environment
variables
-   aa3c62989: chore(cli): bump Nhost CLI version to v1.0
    -   @nhost/react-apollo@5.0.24
    -   @nhost/nextjs@1.13.26

## 0.17.2

### Patch Changes

-   88a4983f: chore(misc): under the hood improvements

## 0.17.1

### Patch Changes

-   9b0d4dde: feat(secrets): enable secrets

## 0.17.0

### Minor Changes

-   15d84a19: Add postgres 14.6-20230525

## 0.16.14

### Patch Changes

-   4c626174: chore: updated import paths, improved directory structure
-   cc047b71: chore(deps): bump `@fontsource` monorepo to `v5.0.0`
-   99edd012: feat(account): add support for personal access tokens

## 0.16.13

### Patch Changes

-   78c7109c: feat(settings): allow selecting service versions

## 0.16.12

### Patch Changes

- 399009d6: fix(gql): don't enter an infinite loop when fetching remote
app data
- 329e5a91: fix(deployments): use the same sorting of deployments
everywhere
- 6d559d6e: chore(settings): add under the hood improvements to the
settings page
- 12eb236c: chore(deps): bump `prettier-plugin-tailwindcss` to `v0.3.0`
-   f9b81a2a: chore(deps): bump `turbo` to `v1.9.8`
-   1345741b: fix(projects): don't redirect to 404 on project creation
-   Updated dependencies [7fea29a8]
    -   @nhost/react-apollo@5.0.23
    -   @nhost/nextjs@1.13.25

## 0.16.11

### Patch Changes

- 1230b722: fix(projects): don't redirect to 404 on when the project is
renamed
    -   @nhost/react-apollo@5.0.22
    -   @nhost/nextjs@1.13.24

## 0.16.10

### Patch Changes

-   Updated dependencies [da03bf39]
    -   @nhost/react-apollo@5.0.21
    -   @nhost/nextjs@1.13.23

## 0.16.9

### Patch Changes

- 349aac36: fix(settings): use region domain when constructing the
postgres connection string

## 0.16.8

### Patch Changes

- 20fb69fa: chore(projects): change the way how API URLs are constructed

## 0.16.7

### Patch Changes

- 49f9b837: chore(docker): bump `pnpm` to `v8.4.0` and `turbo` to
`v1.9.3`
- 3f478a4e: chore(deps): bump `vitest` to `v0.31.0`, `@types/react` to
`v18.2.6` and `@types/react-dom` to `v18.2.4`

## 0.16.6

### Patch Changes

- d926f156: fix(projects): redirect to 404 when an invalid project is
opened
- 49b99728: fix(projects): disable features for non-owner members of
workspaces

## 0.16.5

### Patch Changes

-   12e2855f: chore(deps): bump `jsdom` to v22
-   e4972b83: feat(metrics): add Grafana page

## 0.16.4

### Patch Changes

- 3f396a9e: fix(projects): unpause after upgrading a paused project to
pro
- 3f396a9e: fix(projects): don't redirect to 404 page after project
creation

## 0.16.3

### Patch Changes

-   Updated dependencies [90c60311]
    -   @nhost/react-apollo@5.0.20
    -   @nhost/nextjs@1.13.22

## 0.16.2

### Patch Changes

-   0f34f0c6: fix(projects): disallow downgrading to free plan
- 8da291ad: chore(deps): bump `@types/react` to v18.2.0 and
`@types/react-dom` to v18.2.1

## 0.16.1

### Patch Changes

- adc828a5: fix(gql): don't enter an infinite loop when fetching remote
app data

## 0.16.0

### Minor Changes

-   2fb1145f: feat(compute): add support for replicas

### Patch Changes

- d8ceccec: chore(env): remove deprecated `NHOST_BACKEND_URL`
environment variable

## 0.15.2

### Patch Changes

-   84b84ab7: fix(projects): filter projects by workspace

## 0.15.1

### Patch Changes

-   2faf7907: chore(deps): bump `graphql-request` to v6
-   f1b5a944: chore(deps): bump `@vitejs/plugin-react` to v4
-   7f1785ac: chore(deps): bump `@types/react` to v18.0.37
    -   @nhost/react-apollo@5.0.19

## 0.15.0

### Minor Changes

-   85889ee8: feat(dashboard): add Compute management to the settings

## 0.14.8

### Patch Changes

-   668c8771: chore(dialogs): unify dialog management of payment dialogs

## 0.14.7

### Patch Changes

-   d4ccc656: chore: cleanup unused code
    -   @nhost/react-apollo@5.0.18
    -   @nhost/nextjs@1.13.21

## 0.14.6

### Patch Changes

-   b299cfc9: chore(deps): bump `vitest` to v0.30.0
-   411cb65b: chore(projects): refactor workspace and project hooks
- 43b1b144: chore(deps): bump `@types/react` to v18.0.34 and
`@types/react-dom` to v18.0.11
-   Updated dependencies [43b1b144]
    -   @nhost/react-apollo@5.0.17
    -   @nhost/nextjs@1.13.20

## 0.14.5

### Patch Changes

-   ba0d57ee: fix(i18n): revert i18n library
-   3328ed05: feat(projects): improve overview when there is an error

## 0.14.4

### Patch Changes

-   5e0920ba: chore(deps): bump `next-seo` to v6
-   706c9dc3: chore(deps): bump `@types/react` to 18.0.33
-   99f8f6b3: feat(metrics): show metrics on the overview

## 0.14.3

### Patch Changes

-   @nhost/react-apollo@5.0.16

## 0.14.2

### Patch Changes

-   3cb67300: fix(logs): don't break UI when clearing time picker
-   7453bf3b: feat(projects): show project creator info
-   c166dad0: chore(tests): improve auth page tests
-   6a290bb2: chore(deps): bump `@types/react` to 18.0.32

## 0.14.1

### Patch Changes

-   @nhost/react-apollo@5.0.15
-   @nhost/nextjs@1.13.19

## 0.14.0

### Minor Changes

-   6e1f03ea: feat(dashboard): add support for the Azure AD provider

### Patch Changes

-   1bd2c373: chore(deps): bump `turbo` to 1.8.6
-   d329b621: chore(deps): bump `@types/react` to 18.0.30
-   cb248f0d: fix(tests): avoid name collision in database tests
-   867c8076: chore(deps): bump `@types/react` to 18.0.29

## 0.13.10

### Patch Changes

- e93b06ab: fix(dashboard): remove left margin from workspace list on
mobile
-   1c4806bf: chore(deps): bump `sharp` to 0.32.0
    -   @nhost/react-apollo@5.0.14
    -   @nhost/nextjs@1.13.18

## 0.13.9

### Patch Changes

-   912ed76c: chore(dashboard): bump `@apollo/client` to 3.7.10
-   Updated dependencies [912ed76c]
    -   @nhost/react-apollo@5.0.13

## 0.13.8

### Patch Changes

-   7c127372: chore(dashboard): bump `react-error-boundary` to v4

## 0.13.7

### Patch Changes

- 9130ab12: chore(dashboard): bump `yup` to v1 and `@hookform/resolvers`
to v3

## 0.13.6

### Patch Changes

- 253dd235: using new mutation to create projects + refactor Create
Project page.

## 0.13.5

### Patch Changes

-   @nhost/react-apollo@5.0.12
-   @nhost/nextjs@1.13.17

## 0.13.4

### Patch Changes

-   b48bc034: fix(dashboard): disable new users
-   798e591b: fix(dashboard): show correct date in data grid

## 0.13.3

### Patch Changes

-   bfb4c1a6: chore(dashboard): remove `useAxios` property
-   d8d8394b: Dashboard: allow to override hasura admin secret in docker
-   Updated dependencies [ce1ee40d]
    -   @nhost/nextjs@1.13.16
    -   @nhost/react-apollo@5.0.11

## 0.13.2

### Patch Changes

-   beed2eba: Fix docker entrypoint for dashboard
- 2c8559a3: fix(dashboard): refresh project list after deleting a
project
-   4329d048: chore(dashboard): bump `graphiql` dependencies

## 0.13.1

### Patch Changes

-   cbb1fc5b: chore(dashboard): cleanup GraphQL operations

## 0.13.0

### Minor Changes

-   088584e7: feat(dashboard): add support for custom local subdomains

### Patch Changes

-   2ac90dfd: fix(dashboard): improve mobile responsive layout
-   Updated dependencies [f375eacc]
    -   @nhost/nextjs@1.13.15
    -   @nhost/react-apollo@5.0.10

## 0.12.4

### Patch Changes

-   @nhost/react-apollo@5.0.9
-   @nhost/nextjs@1.13.14

## 0.12.3

### Patch Changes

-   2b1338f7: chore(dashboard): bump `turbo` to 1.8.3
- 5223ee93: fix(dashboard): show correct deployment status on the main
page
-   850a049c: chore(deps): update docker/build-push-action action to v4
-   Updated dependencies [850a049c]
    -   @nhost/nextjs@1.13.13
    -   @nhost/react-apollo@5.0.8

## 0.12.2

### Patch Changes

-   4bf40995: chore(deps): bump `typescript` to `4.9.5`
-   8bb097c9: chore(deps): bump `vitest`
- 35d52aab: chore(deps): replace `cross-fetch` with `isomorphic-unfetch`
-   Updated dependencies [4bf40995]
-   Updated dependencies [8bb097c9]
-   Updated dependencies [35d52aab]
    -   @nhost/react-apollo@5.0.7
    -   @nhost/nextjs@1.13.12

## 0.12.1

### Patch Changes

-   c96d7ccd: fix(dashboard): fix docker builds

## 0.12.0

### Minor Changes

-   d1671210: feat(dashboard): use mimir to manage project configuration

### Patch Changes

-   f65e4de9: chore(deps): bump @graphql-codegen monorepo to v3

## 0.11.20

### Patch Changes

-   4b4f0d01: chore(dashboard): improve dialog management

## 0.11.19

### Patch Changes

-   @nhost/react-apollo@5.0.6
-   @nhost/nextjs@1.13.11

## 0.11.18

### Patch Changes

-   01318860: fix(nhost-js): use correct URL for functions requests
-   Updated dependencies [01318860]
    -   @nhost/react-apollo@5.0.5
    -   @nhost/nextjs@1.13.10

## 0.11.17

### Patch Changes

-   f673adea: fix(dashboard): set correct Content-Type for user creation
-   445d8ef4: chore(deps): bump `@nhost/react-apollo` to 5.0.4
-   445d8ef4: chore(deps): bump `@nhost/nextjs` to 1.13.9
- 0368663d: fix(dashboard): allow permission editing for auth and
storage schemas
-   Updated dependencies [445d8ef4]
-   Updated dependencies [445d8ef4]
    -   @nhost/react-apollo@5.0.4
    -   @nhost/nextjs@1.13.9

## 0.11.16

### Patch Changes

-   b755e908: fix(dashboard): use correct date for last seen
-   2d9145f9: chore(deps): revert GraphQL client
- 1ddf704c: fix(dashboard): don't show false positive message for failed
user creation
    -   @nhost/react-apollo@5.0.3
    -   @nhost/nextjs@1.13.8

## 0.11.15

### Patch Changes

-   @nhost/react-apollo@5.0.2
-   @nhost/nextjs@1.13.7

## 0.11.14

### Patch Changes

- 2cc18dcb: fix(dashboard): prevent permission editor dropdown from
being always open

## 0.11.13

### Patch Changes

- 3343a363: chore(dashboard): bump `@testing-library/react` to v14 and
`@testing-library/dom` to v9
    -   @nhost/react-apollo@5.0.1
    -   @nhost/nextjs@1.13.6

## 0.11.12

### Patch Changes

- 87eda76e: chore(dashboard): bump `@types/react` to v18.0.28 and
`@types/react-dom` to v18.0.11
-   6f0ac570: feat(dashboard): show dashboard version in account menu

## 0.11.11

### Patch Changes

-   bf1e4071: chore(dashboard): bump `react-is` version to `18.2.0`
-   Updated dependencies [bf1e4071]
-   Updated dependencies [5013213b]
    -   @nhost/nextjs@1.13.5
    -   @nhost/react-apollo@4.13.5

## 0.11.10

### Patch Changes

- a37a430b: fix(dashboard): don't break UI when deployments are
unavailable
    -   @nhost/react-apollo@4.13.4
    -   @nhost/nextjs@1.13.4

## 0.11.9

### Patch Changes

-   7b970e68: fix(dashboard): fix header link color

## 0.11.8

### Patch Changes

- f33242f2: feat(dashboard): add new sign up, sign in and reset password
pages

## 0.11.7

### Patch Changes

-   e9c8909c: fix(dashboard): use correct theme color in dark mode

## 0.11.6

### Patch Changes

-   902f486b: fix(dashboard): re-enable Hasura on logs page

## 0.11.5

### Patch Changes

-   1f9720fa: fix(dashboard): apply select permissions properly

## 0.11.4

### Patch Changes

-   deb14b51: fix(dashboard): don't break billing form

## 0.11.3

### Patch Changes

-   @nhost/react-apollo@4.13.3
-   @nhost/nextjs@1.13.3

## 0.11.2

### Patch Changes

-   f143e51d: chore(dashboard): pin Turborepo to 1.6.3

## 0.11.1

### Patch Changes

-   c2b5a41a: chore(dashboard): select system colors by default

## 0.11.0

### Minor Changes

-   1ebaf429: feat(dashboard): introduce Dark Mode 🌚

### Patch Changes

- 63b445c4: fixed duplicated logs bug and made to date count during live
mode

## 0.10.1

### Patch Changes

-   e146d32e: chore(deps): update dependency @types/react to v18.0.27
-   59347fcd: correct allowed role name
-   5b65cac9: updated authentication documentation
-   963f9b5e: feat(dashboard): include project info in feedback

## 0.10.0

### Minor Changes

-   ed4c7801: chore(dashboard): remove Functions section

## 0.9.10

### Patch Changes

-   4e2f8ccd: fix(dashboard): don't break Auth page in local mode

## 0.9.9

### Patch Changes

-   31abbe5f: fix(dashboard): enable toggle when settings are filled in

## 0.9.8

### Patch Changes

- 5bdd31ad: chore(dashboard): list fewer images per page on the Storage
page
- 5121851c: fix(dashboard): don't throw validation error for valid
permission rules

## 0.9.7

### Patch Changes

-   c126b20d: fix(dashboard): correct redeployment button

## 0.9.6

### Patch Changes

-   36c3519c: feat(dashboard): retrigger deployments

## 0.9.5

### Patch Changes

- 200e9f77: chore(deps): update dependency @types/react-dom to v18.0.10
-   Updated dependencies [200e9f77]
    -   @nhost/nextjs@1.13.2
    -   @nhost/react-apollo@4.13.2

## 0.9.4

### Patch Changes

- dbd3ded5: fix(dashboard): workspaces creation, new form, correct
redirects.

## 0.9.3

### Patch Changes

-   85f0f943: fix(dashboard): don't break the table creation process

## 0.9.2

### Patch Changes

-   Updated dependencies [d42c27ae]
-   Updated dependencies [927be4a2]
    -   @nhost/nextjs@1.13.1
    -   @nhost/react-apollo@4.13.1

## 0.9.1

### Patch Changes

-   d0f80811: fix(dashboard): don't show error when signing out the user

## 0.9.0

### Minor Changes

- d92891b2: feat(dashboard): add Permission Editor to the Database
section

### Patch Changes

-   3d379128: fix(dashboard): create new user
    -   @nhost/react-apollo@4.13.0
    -   @nhost/nextjs@1.13.0

## 0.8.1

### Patch Changes

-   7cadd944: fix(dashboard): display Twitter provider settings

## 0.8.0

### Minor Changes

-   9a1aa7bb: add functions to the log dashboard
-   f29abe62: feat(dashboard): Users Management v2

### Patch Changes

-   7766624b: feat(dashboard): add JWT secret editor modal
    -   @nhost/react-apollo@4.12.1
    -   @nhost/nextjs@1.12.1

## 0.7.13

### Patch Changes

-   dd0738d5: fix(dashboard): provisioning status polling

## 0.7.12

### Patch Changes

-   b21222b3: chore(deps): update dependency @types/node to v16
-   9e0486a3: fix(dashboard): close modals when navigating
-   Updated dependencies [b21222b3]
-   Updated dependencies [65687bee]
-   Updated dependencies [54df0df4]
    -   @nhost/nextjs@1.12.0
    -   @nhost/react-apollo@4.12.0

## 0.7.11

### Patch Changes

-   d6527122: fix(dashboard): use correct service URLs

## 0.7.10

### Patch Changes

-   Updated dependencies [57db5b83]
    -   @nhost/nextjs@1.11.0
    -   @nhost/nhost-js@1.7.0
    -   @nhost/react@0.17.0
    -   @nhost/react-apollo@4.11.0

## 0.7.9

### Patch Changes

- a6d31dc2: fix(dashboard): don't break the UI when project is not
loaded yet

## 0.7.8

### Patch Changes

- 7f251111: Use `NhostProvider` instead of `NhostReactProvider` and
`NhostNextProvider`

    `NhostReactProvider` and `NhostNextProvider` are now deprecated

-   f4d70f88: fix(dashboard): do not break when region is nullish

- 4a9471cc: Windows Live Provider displayed link updated to match
backend url

- 594488e4: fix(dashboard): do not show error when submitting Apple
provider settings

-   Updated dependencies [7f251111]
    -   @nhost/nextjs@1.10.0
    -   @nhost/react@0.16.0
    -   @nhost/react-apollo@4.10.0

## 0.7.7

### Patch Changes

-   80b604ad: fix(dashboard): use correct Hasura slug

## 0.7.6

### Patch Changes

-   2d2beb53: fix(dashboard): prevent error on GraphQL page
-   ac8efcbd: chore(dashboard): deprecate old DNS name

## 0.7.5

### Patch Changes

-   132a4f4b: chore(dashboard): remove unused dependencies
- 132a4f4b: chore(deps): synchronize @types/react-dom and @types/react
versions
-   db57572f: fix(dashboard): correct section paddings when no env vars
-   Updated dependencies [132a4f4b]
    -   @nhost/react@0.15.2
    -   @nhost/react-apollo@4.9.2
    -   @nhost/nextjs@1.9.3

## 0.7.4

### Patch Changes

-   34d85e54: chore(deps): update dependency critters to ^0.0.16
- 9b93cf95: chore(deps): update dependency @netlify/functions to ^0.11.0
-   e0439030: chore(deps): update dependency @types/react-dom to v18.0.9
-   Updated dependencies [82124329]
    -   @nhost/nextjs@1.9.2

## 0.7.3

### Patch Changes

-   a1193da4: fix(dashboard): remove character limit from env var inputs

## 0.7.2

### Patch Changes

-   44f13f62: chore(dashboard): cleanup unused files

## 0.7.1

### Patch Changes

- e01cb2ed: chore(dashboard): change settings sidebar menu item density

## 0.7.0

### Minor Changes

- db342f45: chore(dashboard): refactor Roles and Permissions settings
sections
-   8b9fa0b1: feat(dashboard): add Environment Variables page

### Patch Changes

-   Updated dependencies [66b4f3d0]
-   Updated dependencies [2e6923dc]
-   Updated dependencies [ef117c28]
-   Updated dependencies [aebb8225]
    -   @nhost/core@0.9.4
    -   @nhost/nhost-js@1.6.2
    -   @nhost/nextjs@1.9.1
    -   @nhost/react@0.15.1
    -   @nhost/react-apollo@4.9.1

## 0.6.0

### Minor Changes

-   eef9c914: feat(dashboard): add Roles and Permissions page

## 0.5.0

### Minor Changes

-   a48dd5bf: feat(dashboard): make backend port configurable

## 0.4.3

### Patch Changes

-   5de965d9: fix(dashboard): alphabetic ordering of providers
-   b9087a4a: fix(dashboard): console -> dashboard terminology
-   ca012d79: docs(workos): WorkOS Docs

## 0.4.2

### Patch Changes

-   89bd37bc: fix(dashboard): correct redirect URL input opacity
-   Updated dependencies [4601d84e]
-   Updated dependencies [843087cb]
    -   @nhost/react@0.15.0
    -   @nhost/nextjs@1.9.0
    -   @nhost/react-apollo@4.9.0

## 0.4.1

### Patch Changes

-   766cb612: fix(dashboard): correct redirect URL for oauth providers
-   Updated dependencies [53bdc294]
-   Updated dependencies [f2aaff05]
    -   @nhost/nextjs@1.8.3
    -   @nhost/core@0.9.3
    -   @nhost/react@0.14.3
    -   @nhost/nhost-js@1.6.1
    -   @nhost/react-apollo@4.8.3

## 0.4.0

### Minor Changes

-   9211743d: feat(dashboard): migrate Settings page features

## 0.3.0

### Minor Changes

-   73da6a67: fix(dashboard): avoid using BACKEND_URL locally

## 0.2.0

### Minor Changes

-   db118f97: feat(dashboard): generate Docker image

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-04 16:32:17 +01:00
Hassan Ben Jobrane
f830a9d5f2 fix: prevent unnecessary reload on project settings update (#2989) 2024-11-04 16:25:23 +01:00
David BM
9a7e431323 feat (dashboard): add spending warnings (#2945)
### **PR Type**
Enhancement, Tests, Documentation


___

### **Description**
- Enhanced the billing usage component to include spending warnings and
detailed billing cycle information.
- Added new BillingCycle component to display billing cycle details and
breakdown.
- Created SpendingWarnings component with a form for configuring
spending warnings, integrated with GraphQL queries and mutations.
- Updated getBillingCycleInfo utility to include billing cycle start and
end dates.
- Added new GraphQL types, queries, and mutations for organization costs
thresholds.
- Updated package.json to include new dependencies for Radix UI
components.
- Added changeset for the new spending warnings feature.



___



### **Changes walkthrough** 📝
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>9
files</summary><table>
<tr>
  <td>
    <details>
<summary><strong>Usage.tsx</strong><dd><code>Enhance billing usage
component with spending warnings</code>&nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>


dashboard/src/features/orgs/components/billing/components/Usage/Usage.tsx

<li>Added new components and imports for spending warnings.<br> <li>
Enhanced billing cycle display with additional details.<br> <li>
Introduced collapsible sections for detailed billing breakdown.<br>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-dc93b28dbf3130ba4179db883c81a5b1432f12cc144c40676c6a8754a58c80d6">+108/-45</a></td>

</tr>                    

<tr>
  <td>
    <details>
<summary><strong>BillingCycle.tsx</strong><dd><code>Add BillingCycle
component for detailed billing information</code></dd></summary>
<hr>


dashboard/src/features/orgs/components/billing/components/Usage/components/BillingCycle/BillingCycle.tsx

<li>Created new BillingCycle component.<br> <li> Display billing cycle
information and breakdown.<br>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-0d402370ce1a4d0c812ae8ca439bf76f813fb523854941dbe74d823f5503b434">+90/-0</a>&nbsp;
&nbsp; </td>

</tr>                    

<tr>
  <td>
    <details>
<summary><strong>index.ts</strong><dd><code>Export BillingCycle
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>


dashboard/src/features/orgs/components/billing/components/Usage/components/BillingCycle/index.ts

- Exported BillingCycle component.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-b826b2ebce18c53bdc48a9432bf3288ce2dfd48b13636b7ea2b5fb6c56faa32b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    

<tr>
  <td>
    <details>
<summary><strong>SpendingWarnings.tsx</strong><dd><code>Add
SpendingWarnings component with form and GraphQL
integration</code></dd></summary>
<hr>


dashboard/src/features/orgs/components/billing/components/Usage/components/SpendingWarnings/SpendingWarnings.tsx

<li>Created SpendingWarnings component.<br> <li> Added form for
configuring spending warnings.<br> <li> Integrated with GraphQL queries
and mutations.<br>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-baf483809d2aab89315b1aa32bfe63518a1f1686993be8382e1ba4b75dbebcdc">+275/-0</a>&nbsp;
</td>

</tr>                    

<tr>
  <td>
    <details>
<summary><strong>index.ts</strong><dd><code>Export SpendingWarnings
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/components/billing/components/Usage/components/SpendingWarnings/index.ts

- Exported SpendingWarnings component.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-15bdc431e8046be5ca0fedba23faac30a51aa2390751ca60f2c8c6770c6ed216">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    

<tr>
  <td>
    <details>
<summary><strong>getBillingCycle.ts</strong><dd><code>Update
getBillingCycleInfo to include date range</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/src/features/orgs/components/billing/utils/getBillingCycle.ts

- Updated getBillingCycleInfo to include start and end dates.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-7ead22c5c644cebb16fb17112127de3e0a31fc2da11ca4b28324675bb36bd0e3">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    

<tr>
  <td>
    <details>
<summary><strong>graphql.ts</strong><dd><code>Add GraphQL types and
queries for organization costs thresholds</code></dd></summary>
<hr>

dashboard/src/utils/__generated__/graphql.ts

<li>Added GraphQL types and queries for organization costs
thresholds.<br> <li> Updated existing types to include new fields.<br>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-fbd5db84b560b1c91675004448c6c7fa0dcbfb28b9eb05d53b03e6cb7b83ebac">+373/-9</a>&nbsp;
</td>

</tr>                    

<tr>
  <td>
    <details>

<summary><strong>getOrganizationSpendingWarning.gql</strong><dd><code>Add
query for fetching organization spending warning</code>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/src/gql/organizations/getOrganizationSpendingWarning.gql

- Added query for fetching organization spending warning.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-2569a705d7b23109b399d41f5ef69e2b1ac781a407c88bef1dd37039c5982d72">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    

<tr>
  <td>
    <details>

<summary><strong>updateOrganizationSpendingWarning.gql</strong><dd><code>Add
mutation for updating organization spending warning</code>&nbsp; &nbsp;
</dd></summary>
<hr>

dashboard/src/gql/organizations/updateOrganizationSpendingWarning.gql

- Added mutation for updating organization spending warning.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-9da3efb63d0915007fb5379bc3621b28bb39732cff941c301cc92167d1965877">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
  <td>
    <details>
<summary><strong>hip-camels-build.md</strong><dd><code>Add changeset for
spending warnings feature</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

.changeset/hip-camels-build.md

- Added changeset for spending warnings feature.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-687509242f7e5356804da14e6272f1acff937217137d9a71f3f1674be181f645">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1
files</summary><table>
<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Add new dependencies for
Radix UI components</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/package.json

- Added new dependencies for Radix UI components.



</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/2945/files#diff-2d8d55c799cd71f1b35e831f075f8178ed1734c4820a2ad548b4dd24d6938d7c">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>                    
</table></details></td></tr></tr></tbody></table>

___

> 💡 **PR-Agent usage**: Comment `/help "your question"` on any pull
request to receive relevant information
2024-11-01 13:34:17 -04:00
github-actions[bot]
1f2b0dced4 chore: modify update dependencies schedule (#2683)
Dependencies updated

Note - If you see this PR and the checks haven't run, close and reopen
the PR. See
https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#triggering-further-workflow-runs

Co-authored-by: David Barroso <dbarrosop@dravetech.com>
Co-authored-by: Hassan Ben Jobrane <hsanbenjobrane@gmail.com>
2024-11-01 13:27:58 +01:00
88 changed files with 1088 additions and 610 deletions

View File

@@ -2,7 +2,7 @@
name: "gen: update depenendencies"
on:
schedule:
- cron: '0 2 1 * *'
- cron: '0 2 1 2,5,8,11 *'
jobs:
run:

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/dashboard",
"version": "2.1.3",
"version": "2.2.1",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
@@ -42,6 +42,7 @@
"@mui/x-date-pickers": "^5.0.20",
"@nhost/nextjs": "workspace:*",
"@nhost/react-apollo": "workspace:*",
"@radix-ui/react-accordion": "^1.2.1",
"@radix-ui/react-alert-dialog": "^1.1.2",
"@radix-ui/react-checkbox": "^1.1.2",
"@radix-ui/react-dialog": "^1.1.1",

View File

@@ -0,0 +1,58 @@
'use client';
import * as AccordionPrimitive from '@radix-ui/react-accordion';
import { ChevronDown } from 'lucide-react';
import * as React from 'react';
import { cn } from '@/lib/utils';
const Accordion = AccordionPrimitive.Root;
const AccordionItem = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
>(({ className, ...props }, ref) => (
<AccordionPrimitive.Item
ref={ref}
className={cn('border-b', className)}
{...props}
/>
));
AccordionItem.displayName = 'AccordionItem';
const AccordionTrigger = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Trigger>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger
ref={ref}
className={cn(
'flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180',
className,
)}
{...props}
>
{children}
<ChevronDown className="h-4 w-4 shrink-0 transition-transform duration-200" />
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
));
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
const AccordionContent = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Content
ref={ref}
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all"
{...props}
>
<div className={cn('pb-4 pt-0', className)}>{children}</div>
</AccordionPrimitive.Content>
));
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };

View File

@@ -3,20 +3,30 @@ import * as React from 'react';
import { cn } from '@/lib/utils';
export interface InputProps
extends React.InputHTMLAttributes<HTMLInputElement> {}
extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'prefix'> {
prefix?: React.ReactNode;
}
const Input = React.forwardRef<HTMLInputElement, InputProps>(
({ className, type, ...props }, ref) => {
({ className, type, prefix, ...props }, ref) => {
return (
<input
type={type}
className={cn(
'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-accent',
className,
<div className="relative flex items-center">
{prefix && (
<span className="pointer-events-none absolute left-3 flex items-center text-muted-foreground">
{prefix}
</span>
)}
ref={ref}
{...props}
/>
<input
type={type}
className={cn(
'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-accent',
prefix && 'pl-6',
className,
)}
ref={ref}
{...props}
/>
</div>
);
},
);

View File

@@ -0,0 +1,27 @@
import { Divider } from '@/components/ui/v2/Divider';
import { BillingCycle } from './components/BillingCycle';
import { BillingDetails } from './components/BillingDetails';
import { Estimate } from './components/Estimate';
import { SpendingNotifications } from './components/SpendingNotifications';
export default function BillingEstimate() {
return (
<div className="">
<div className="flex w-full flex-col rounded-md border bg-background">
<div className="flex w-full flex-col gap-1 p-4">
<span className="text-xl font-medium">Billing Estimate</span>
</div>
<div className="flex flex-col">
<Divider />
<BillingCycle />
<Divider />
<Estimate />
<Divider />
<SpendingNotifications />
<Divider />
<BillingDetails />
</div>
</div>
</div>
);
}

View File

@@ -0,0 +1,26 @@
import { Progress } from '@/components/ui/v3/progress';
import { getBillingCycleInfo } from '@/features/orgs/components/billing/utils/getBillingCycle';
export default function BillingCycle() {
const { progress, billingCycleStart, billingCycleEnd, daysLeft } =
getBillingCycleInfo();
const daysText = daysLeft === 1 ? 'day' : 'days';
return (
<div className="flex w-full flex-col justify-between gap-4 p-4 md:flex-row md:gap-8">
<div className="flex basis-1/2 flex-col">
<span className="font-medium">
Current billing cycle ({daysLeft} {daysText} left)
</span>
</div>
<div className="flex flex-1 flex-col gap-2 pb-2">
<div className="flex justify-between">
<span className="text-muted-foreground">{billingCycleStart}</span>
<span className="text-muted-foreground">{billingCycleEnd}</span>
</div>
<Progress value={progress} className="h-3" />
</div>
</div>
);
}

View File

@@ -0,0 +1 @@
export { default as BillingCycle } from './BillingCycle';

View File

@@ -0,0 +1,91 @@
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from '@/components/ui/v3/accordion';
import {
Table,
TableBody,
TableCell,
TableFooter,
TableHead,
TableHeader,
TableRow,
} from '@/components/ui/v3/table';
import { useCurrentOrg } from '@/features/orgs/projects/hooks/useCurrentOrg';
import { useBillingGetNextInvoiceQuery } from '@/utils/__generated__/graphql';
export default function BillingDetails() {
const { org } = useCurrentOrg();
const { data, loading } = useBillingGetNextInvoiceQuery({
fetchPolicy: 'cache-first',
variables: {
organizationID: org?.id,
},
skip: !org,
});
const billingItems = data?.billingGetNextInvoice?.items ?? [];
const amountDue = data?.billingGetNextInvoice?.AmountDue ?? null;
if (!data || loading) {
return (
<div className="flex flex-col">
<div className="flex flex-col gap-4 p-4">
<div className="flex h-32 place-content-center">
<ActivityIndicator
label="Loading billing details..."
className="justify-center text-sm"
/>
</div>
</div>
</div>
);
}
return (
<Accordion type="single" collapsible>
<AccordionItem value="details" className="border-none">
<AccordionTrigger className="p-4">Details</AccordionTrigger>
<AccordionContent className="border-t-1 pb-0">
<div className="rounded-md">
<Table>
<TableHeader className="w-full bg-accent">
<TableRow>
<TableHead colSpan={3} className="w-full rounded-tl-md">
Item
</TableHead>
<TableHead className="rounded-tr-md text-right">
Amount
</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{billingItems.map((billingItem) => (
<TableRow key={billingItem.Description}>
<TableCell colSpan={3}>{billingItem.Description}</TableCell>
<TableCell colSpan={3} className="text-right">
${billingItem.Amount}
</TableCell>
</TableRow>
))}
</TableBody>
<TableFooter className="bg-accent">
<TableRow>
<TableCell colSpan={3} className="rounded-bl-md">
Total
</TableCell>
<TableCell className="rounded-br-md text-right">
${amountDue}
</TableCell>
</TableRow>
</TableFooter>
</Table>
</div>
</AccordionContent>
</AccordionItem>
</Accordion>
);
}

View File

@@ -0,0 +1 @@
export { default as BillingDetails } from './BillingDetails';

View File

@@ -0,0 +1,48 @@
import { useCurrentOrg } from '@/features/orgs/projects/hooks/useCurrentOrg';
import { useBillingGetNextInvoiceQuery } from '@/utils/__generated__/graphql';
import { useMemo } from 'react';
export default function Estimate() {
const { org } = useCurrentOrg();
const { data, loading } = useBillingGetNextInvoiceQuery({
fetchPolicy: 'cache-first',
variables: {
organizationID: org?.id,
},
skip: !org,
});
const amountDue = useMemo(() => {
const amount = data?.billingGetNextInvoice?.AmountDue;
if (!amount) {
return 'N/A';
}
if (typeof amount !== 'number') {
return 'N/A';
}
return amount.toLocaleString('en', {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
}, [data]);
if (loading) {
return null;
}
return (
<div className="flex w-full flex-col justify-between gap-2 p-4 md:flex-row md:gap-8">
<div className="flex basis-1/2 flex-col">
<span className="font-medium">Estimate</span>
<span className="text-xl font-semibold">${amountDue}</span>
</div>
<div className="flex flex-1 flex-col gap-2">
<p className="max-w-prose">
This estimate reflects your estimated next invoice based on current
usage. Please note that usage data may have a processing delay of a
few hours.
</p>
</div>
</div>
);
}

View File

@@ -0,0 +1 @@
export { default as Estimate } from './Estimate';

View File

@@ -0,0 +1,320 @@
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Switch } from '@/components/ui/v2/Switch';
import { Button } from '@/components/ui/v3/button';
import {
Form,
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@/components/ui/v3/form';
import { Input } from '@/components/ui/v3/input';
import { Progress } from '@/components/ui/v3/progress';
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from '@/components/ui/v3/tooltip';
import { useIsOrgAdmin } from '@/features/orgs/hooks/useIsOrgAdmin';
import { useCurrentOrg } from '@/features/orgs/projects/hooks/useCurrentOrg';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetOrganizationSpendingNotificationDocument,
useBillingGetNextInvoiceQuery,
useGetOrganizationSpendingNotificationQuery,
useUpdateOrganizationSpendingNotificationMutation,
} from '@/utils/__generated__/graphql';
import { yupResolver } from '@hookform/resolvers/yup';
import { useEffect, useMemo, type ChangeEvent } from 'react';
import { useForm } from 'react-hook-form';
import * as Yup from 'yup';
const validationSchema = Yup.object({
enabled: Yup.boolean().required(),
threshold: Yup.number().test(
'is-valid-threshold',
`Threshold must be greater than 110% of your plan's price`,
(value: number, { options }) => {
const planPrice = options?.context?.planPrice || 0;
if (value === 0) {
return true;
}
if (typeof value === 'number' && value > 1.1 * planPrice) {
return true;
}
return false;
},
),
});
type SpendingNotificationsFormValues = Yup.InferType<typeof validationSchema>;
export default function SpendingNotifications() {
const { org } = useCurrentOrg();
const isAdmin = useIsOrgAdmin();
const { data, loading } = useGetOrganizationSpendingNotificationQuery({
fetchPolicy: 'cache-first',
variables: { orgId: org?.id },
skip: !org,
});
const { data: nextInvoiceData, loading: loadingInvoice } =
useBillingGetNextInvoiceQuery({
fetchPolicy: 'cache-first',
variables: {
organizationID: org?.id,
},
skip: !org,
});
const amountDue = nextInvoiceData?.billingGetNextInvoice?.AmountDue ?? null;
const [updateConfig] = useUpdateOrganizationSpendingNotificationMutation({
refetchQueries: [GetOrganizationSpendingNotificationDocument],
});
const { threshold } = data?.organizations[0] ?? {};
const form = useForm<SpendingNotificationsFormValues>({
reValidateMode: 'onSubmit',
defaultValues: {
enabled: false,
threshold: threshold ?? 0,
},
resolver: yupResolver(validationSchema),
context: {
planPrice: org?.plan?.price ?? 0,
},
});
const { watch, setValue } = form;
const currentThreshold = watch('threshold');
const handleEnabledChange = (event: ChangeEvent<HTMLInputElement>) => {
const { checked } = event.target;
setValue('enabled', checked, { shouldDirty: true });
if (!checked) {
setValue('threshold', 0, { shouldDirty: true });
}
};
const enabled = watch('enabled');
const progress = useMemo(() => {
if (!enabled || threshold <= 0 || !amountDue) {
return 0;
}
const percent = (amountDue / threshold) * 100;
return Math.min(Math.max(percent, 0), 100);
}, [amountDue, enabled, threshold]);
const handleThresholdChange = (event: ChangeEvent<HTMLInputElement>) => {
if (event.target.value === '') {
setValue('threshold', undefined, { shouldDirty: true });
} else {
setValue('threshold', Number(event.target.value), { shouldDirty: true });
}
};
useEffect(() => {
if (!loading) {
form.reset({
enabled: !!threshold,
threshold,
});
}
}, [loading, threshold, form]);
const onSubmit = async (values: SpendingNotificationsFormValues) => {
const updateConfigPromise = updateConfig({
variables: {
id: org?.id,
threshold: values.threshold,
},
});
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
form.reset({
enabled: !!values.threshold,
threshold: values.threshold,
});
},
{
loadingMessage: 'Spending notifications are being updated...',
successMessage:
'Spending notifications have been updated successfully.',
errorMessage:
'An error occurred while trying to update spending notifications.',
},
);
};
const getNotificationPercentageAmount = (factor: number) => {
if (!threshold || threshold <= 0) {
return '\u00A0';
}
const amount = threshold * factor;
return `$${Math.round(amount)}`;
};
const inputMin = useMemo(
() => Math.ceil(1.1 * (amountDue ?? 0)),
[amountDue],
);
if (loading || loadingInvoice) {
return (
<div className="flex flex-col">
<div className="flex flex-col gap-4 p-4">
<div className="flex h-32 place-content-center">
<ActivityIndicator
label="Loading spending notifications..."
className="justify-center text-sm"
/>
</div>
</div>
</div>
);
}
return (
<Form {...form}>
<form
className="flex flex-col gap-4 p-4"
onSubmit={form.handleSubmit(onSubmit)}
>
<div className="flex flex-1 flex-row items-end justify-between gap-8">
<span className="font-medium">Spending Notifications</span>
<Switch
className="self-end"
id="enabled"
checked={enabled}
onChange={handleEnabledChange}
/>
</div>
<div className="flex w-full flex-col justify-between gap-8 md:flex-row">
<div className="flex basis-1/2 flex-col gap-2">
<p className="max-w-prose">
Specify a spending threshold to receive email notifications when
your usage approaches the designated amount.
</p>
</div>
<div className="flex flex-1 flex-col gap-4">
{enabled && (
<>
<FormField
control={form.control}
name="threshold"
render={({ field }) => (
<FormItem className="flex flex-1 flex-col">
<FormLabel className="flex flex-1 flex-row items-center gap-2">
<span>Amount</span>
</FormLabel>
<FormControl>
{isAdmin ? (
<Input
prefix="$"
type="number"
min={inputMin}
placeholder="0"
disabled={!enabled}
{...field}
onChange={handleThresholdChange}
value={currentThreshold}
/>
) : (
<Tooltip>
<TooltipTrigger type="button">
<Input
prefix="$"
type="number"
min="0"
placeholder="0"
disabled
{...field}
onChange={handleThresholdChange}
value={currentThreshold}
/>
</TooltipTrigger>
<TooltipContent>
Only an organization admin can change this value.
</TooltipContent>
</Tooltip>
)}
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<div className="flex flex-1 flex-col gap-2">
<div className="flex flex-1">
<div className="basis-3/4" />
<div className="flex flex-1 justify-between gap-2">
<div className="flex basis-2/3 text-muted-foreground">
<span className="w-13 text-center">75%</span>
</div>
<div className="flex basis-1/3 text-muted-foreground">
<span className="w-13 text-center">90%</span>
</div>
<div className="flex basis-1/3 text-muted-foreground">
<span className="w-13 text-center">100%</span>
</div>
</div>
</div>
<Progress value={progress} className="h-3" />
<div className="flex flex-1">
<div className="basis-3/4" />
<div className="flex flex-1 justify-between gap-2">
<div className="flex basis-2/3 text-muted-foreground">
<span className="w-13 overflow-hidden text-ellipsis text-center">
{getNotificationPercentageAmount(0.75) || '\u00A0'}
</span>
</div>
<div className="flex basis-1/3 text-muted-foreground">
<span className="w-13 overflow-hidden text-ellipsis text-center">
{getNotificationPercentageAmount(0.9) || '\u00A0'}
</span>
</div>
<div className="flex basis-1/3 text-muted-foreground">
<span className="w-13 overflow-hidden text-ellipsis text-center">
{getNotificationPercentageAmount(1) || '\u00A0'}
</span>
</div>
</div>
</div>
</div>
<p className="max-w-prose">
You&apos;ll receive email alerts when your usage reaches 75%,
90%, and 100% of your configured value. These are
notifications only - your service will continue running
normally.
</p>
</>
)}
<div className="flex flex-1 flex-col justify-end">
<Button
type="submit"
className="h-fit self-end"
disabled={!form.formState.isDirty || !isAdmin}
>
{form.formState.isSubmitting ? (
<ActivityIndicator className="text-sm" />
) : (
'Save'
)}
</Button>
</div>
</div>
</div>
</form>
</Form>
);
}

View File

@@ -0,0 +1 @@
export { default as SpendingNotifications } from './SpendingNotifications';

View File

@@ -0,0 +1 @@
export { default as BillingEstimate } from './BillingEstimate';

View File

@@ -41,8 +41,8 @@ const changeOrgPlanForm = z.object({
export default function SubscriptionPlan() {
const { maintenanceActive } = useUI();
const [open, setOpen] = useState(false);
const { org, refetch: refetchOrg } = useCurrentOrg();
const [open, setOpen] = useState(false);
const [changeOrgPlan] = useBillingChangeOrganizationPlanMutation();
const { data: { plans = [] } = {} } = useGetOrganizationPlansQuery();
const [fetchOrganizationCustomePortalLink, { loading }] =
@@ -102,7 +102,6 @@ export default function SubscriptionPlan() {
if (billingOrganizationCustomePortal) {
const newWindow = window.open(billingOrganizationCustomePortal);
if (!newWindow) {
window.location.href = billingOrganizationCustomePortal;
}
@@ -126,30 +125,34 @@ export default function SubscriptionPlan() {
<div className="flex w-full flex-col gap-1 border-b p-4">
<h4 className="font-medium">Subscription plan</h4>
</div>
<div className="flex flex-col border-b md:flex-row">
<div className="flex w-full flex-col gap-4 p-4">
<div className="flex w-full flex-col justify-between gap-8 border-b p-4 md:flex-row">
<div className="flex basis-1/2 flex-col gap-4">
<span className="font-medium">Organization name</span>
<span className="font-medium">{org?.name}</span>
</div>
<div className="flex w-full flex-col gap-2 p-4">
<span className="font-medium">Current plan</span>
<span className="text-xl font-bold text-primary">
{org?.plan?.name}
</span>
</div>
<div className="flex w-full flex-col items-start justify-start gap-4 p-4 md:items-end md:justify-end">
<div className="flex items-center gap-2">
<span className="text-xl font-semibold">
${org?.plan?.price}
<div className="flex flex-1 flex-col gap-8 md:flex-row">
<div className="flex flex-1 flex-col gap-2">
<span className="font-medium">Current plan</span>
<span className="text-xl font-bold text-primary">
{org?.plan?.name}
</span>
<Slash
className="h-5 w-5 text-muted-foreground/40"
strokeWidth={2.5}
/>
<span className="text-xl font-semibold">month</span>
</div>
<div className="flex flex-1 items-start justify-start md:items-end md:justify-end">
<div className="flex items-center gap-2">
<span className="text-xl font-semibold">
${org?.plan?.price}
</span>
<Slash
className="h-5 w-5 text-muted-foreground/40"
strokeWidth={2.5}
/>
<span className="text-xl font-semibold">month</span>
</div>
</div>
</div>
</div>
<div className="flex w-full flex-col-reverse items-end justify-between gap-2 p-4 md:flex-row md:items-center md:gap-0">
<div>
<span>For a complete list of features, visit our </span>
@@ -164,14 +167,18 @@ export default function SubscriptionPlan() {
<ArrowSquareOutIcon className="mb-[2px] ml-1 h-4 w-4" />
</Link>
</div>
<div className="flex flex-row items-center justify-end gap-2">
<div className="flex w-full flex-row items-center justify-end gap-2">
<Button
className="h-fit"
className="h-fit truncate"
variant="secondary"
onClick={handleUpdatePaymentDetails}
disabled={org?.plan?.isFree || maintenanceActive || loading}
>
{loading ? <ActivityIndicator /> : 'Stripe Customer Portal'}
{loading ? (
<ActivityIndicator />
) : (
<span className="truncate">Stripe Customer Portal</span>
)}
</Button>
<Button
disabled={org?.plan?.isFree || maintenanceActive}

View File

@@ -1,97 +0,0 @@
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Progress } from '@/components/ui/v3/progress';
import {
Table,
TableBody,
TableCell,
TableFooter,
TableHead,
TableHeader,
TableRow,
} from '@/components/ui/v3/table';
import { getBillingCycleInfo } from '@/features/orgs/components/billing/utils/getBillingCycle';
import { useCurrentOrg } from '@/features/orgs/projects/hooks/useCurrentOrg';
import { useBillingGetNextInvoiceQuery } from '@/utils/__generated__/graphql';
export default function Usage() {
const { org } = useCurrentOrg();
const { billingCycleRange, progress } = getBillingCycleInfo();
const { data, loading } = useBillingGetNextInvoiceQuery({
fetchPolicy: 'cache-first',
variables: {
organizationID: org?.id,
},
skip: !org,
});
const billingItems = data?.billingGetNextInvoice?.items ?? [];
const amountDue = data?.billingGetNextInvoice?.AmountDue ?? null;
return (
<div className="font-medium">
<div className="flex flex-col w-full border rounded-md bg-background">
<div className="flex flex-col w-full gap-1 p-4">
<span>Usage</span>
</div>
<div className="flex flex-col">
<div className="flex flex-row items-center justify-between w-full p-4 border-t border-b">
<span>Billing cycle ({billingCycleRange})</span>
<Progress value={progress} className="h-2 max-w-xl" />
</div>
<div className="flex flex-col gap-4 p-4">
{loading && (
<div className="flex h-32 place-content-center">
<ActivityIndicator
label="Loading usage stats..."
className="justify-center text-sm"
/>
</div>
)}
{!loading && data && (
<>
<span>Breakdown</span>
<div className="border rounded-md">
<Table>
<TableHeader className="w-full bg-accent">
<TableRow>
<TableHead colSpan={3} className="w-full rounded-tl-md">
Item
</TableHead>
<TableHead className="text-right rounded-tr-md">
Amount
</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{billingItems.map((billingItem) => (
<TableRow key={billingItem.Description}>
<TableCell colSpan={3}>
{billingItem.Description}
</TableCell>
<TableCell colSpan={3} className="text-right">
${billingItem.Amount}
</TableCell>
</TableRow>
))}
</TableBody>
<TableFooter className="bg-accent">
<TableRow>
<TableCell colSpan={3} className="rounded-bl-md">
Total
</TableCell>
<TableCell className="text-right rounded-br-md">
${amountDue}
</TableCell>
</TableRow>
</TableFooter>
</Table>
</div>
</>
)}
</div>
</div>
</div>
</div>
);
}

View File

@@ -1 +0,0 @@
export { default as Usage } from './Usage';

View File

@@ -18,9 +18,13 @@ export const getBillingCycleInfo = () => {
(now.getTime() - startOfMonth.getTime()) / (1000 * 60 * 60 * 24) + 1;
const progress = (daysPassed / totalDays) * 100;
const daysLeft = Math.max(Math.ceil(totalDays - daysPassed), 0);
return {
billingCycleStart,
billingCycleEnd,
billingCycleRange: `${billingCycleStart} - ${billingCycleEnd}`,
progress: Math.min(Math.max(progress, 0), 100), // Ensure the value is between 0 and 100
daysLeft,
};
};

View File

@@ -3,7 +3,7 @@ import { useDialog } from '@/components/common/DialogProvider';
import { Box } from '@/components/ui/v2/Box';
import { Button } from '@/components/ui/v2/Button';
import { Text } from '@/components/ui/v2/Text';
import { useCurrentWorkspaceAndProject } from '@/features/projects/common/hooks/useCurrentWorkspaceAndProject';
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { useIsPlatform } from '@/features/projects/common/hooks/useIsPlatform';
import { useLocalMimirClient } from '@/hooks/useLocalMimirClient';
import { execPromiseWithErrorToast } from '@/utils/execPromiseWithErrorToast';
@@ -26,11 +26,12 @@ export default function DisableAIServiceConfirmationDialog({
onCancel,
onServiceDisabled,
}: DisableAIServiceConfirmationDialogProps) {
const { project } = useProject();
const isPlatform = useIsPlatform();
const { openDialog, closeDialog } = useDialog();
const localMimirClient = useLocalMimirClient();
const [loading, setLoading] = useState(false);
const { currentProject } = useCurrentWorkspaceAndProject();
const [updateConfig] = useUpdateConfigMutation({
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -42,7 +43,7 @@ export default function DisableAIServiceConfirmationDialog({
async () => {
await updateConfig({
variables: {
appId: currentProject.id,
appId: project?.id,
config: {
ai: null,
},

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -32,13 +31,13 @@ export type AllowedEmailSettingsFormValues = Yup.InferType<
>;
export default function AllowedEmailDomainsSettings() {
const { openDialog } = useDialog();
const { project } = useProject();
const isPlatform = useIsPlatform();
const { openDialog } = useDialog();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -29,13 +28,13 @@ export type AllowedRedirectURLFormValues = Yup.InferType<
>;
export default function AllowedRedirectURLsSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const { project } = useProject();
const localMimirClient = useLocalMimirClient();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -9,7 +9,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -25,13 +24,13 @@ const validationSchema = Yup.object({
export type AnonymousSignInFormValues = Yup.InferType<typeof validationSchema>;
export default function AnonymousSignInSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -14,7 +14,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -58,13 +57,13 @@ export type AppleProviderFormValues = Yup.InferType<typeof validationSchema>;
export default function AppleProviderSettings() {
const theme = useTheme();
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -269,7 +268,7 @@ export default function AppleProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -6,7 +6,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetAuthenticationSettingsDocument,
Software_Type_Enum,
useGetAuthenticationSettingsQuery,
useGetSoftwareVersionsQuery,
@@ -34,13 +33,13 @@ export type AuthServiceVersionFormValues = Yup.InferType<
>;
export default function AuthServiceVersionSettings() {
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const { project } = useProject();
const isPlatform = useIsPlatform();
const { openDialog } = useDialog();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -154,7 +153,7 @@ export default function AuthServiceVersionSettings() {
}}
docsLink="https://github.com/nhost/hasura-auth/releases"
docsTitle="the latest releases"
className="grid grid-flow-row px-4 gap-x-4 gap-y-2 lg:grid-cols-5"
className="grid grid-flow-row gap-x-4 gap-y-2 px-4 lg:grid-cols-5"
>
<ControlledAutocomplete
id="version"

View File

@@ -15,7 +15,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -51,13 +50,13 @@ const validationSchema = Yup.object({
export type AzureADProviderFormValues = Yup.InferType<typeof validationSchema>;
export default function AzureADProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const { project } = useProject();
const localMimirClient = useLocalMimirClient();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -214,7 +213,7 @@ export default function AzureADProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -30,13 +29,13 @@ const validationSchema = Yup.object({
export type BlockedEmailFormValues = Yup.InferType<typeof validationSchema>;
export default function BlockedEmailSettings() {
const { openDialog } = useDialog();
const { project } = useProject();
const isPlatform = useIsPlatform();
const { openDialog } = useDialog();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -27,13 +26,13 @@ const validationSchema = Yup.object({
export type ClientURLFormValues = Yup.InferType<typeof validationSchema>;
export default function ClientURLSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -27,13 +26,13 @@ export type ToggleConcealErrorsFormValues = Yup.InferType<
>;
export default function ConcealErrorsSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -10,7 +10,7 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetSmtpSettingsDocument,
useGetSmtpSettingsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
import { useState } from 'react';
@@ -52,16 +52,24 @@ function ConfirmDeleteSMTPSettingsModal({
}
export default function DeleteSMTPSettings() {
const { openDialog, closeDialog } = useDialog();
const { project } = useProject();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const [loading, setLoading] = useState(false);
const { project } = useProject();
const { openDialog, closeDialog } = useDialog();
const localMimirClient = useLocalMimirClient();
const { data, refetch } = useGetSmtpSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
const smtpSettings = data?.config?.provider?.smtp ?? {};
const isSMTPConfigured = Boolean(Object.keys(smtpSettings).length);
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSmtpSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -111,7 +119,10 @@ export default function DeleteSMTPSettings() {
component: (
<ConfirmDeleteSMTPSettingsModal
close={closeDialog}
onDelete={deleteSMTPSettings}
onDelete={async () => {
await deleteSMTPSettings();
await refetch();
}}
/>
),
});
@@ -132,7 +143,7 @@ export default function DeleteSMTPSettings() {
color="error"
className="mx-4 mt-4 justify-self-end"
onClick={confirmDeleteSMTPSettings}
disabled={loading || maintenanceActive}
disabled={loading || maintenanceActive || !isSMTPConfigured}
loading={loading}
>
Delete

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -25,13 +24,13 @@ const validationSchema = Yup.object({
export type DisableNewUsersFormValues = Yup.InferType<typeof validationSchema>;
export default function DisableNewUsersSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -19,7 +19,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -30,13 +29,13 @@ import { FormProvider, useForm } from 'react-hook-form';
import { twMerge } from 'tailwind-merge';
export default function DiscordProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -184,7 +183,7 @@ export default function DiscordProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -8,7 +8,6 @@ import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import { Text } from '@/components/ui/v2/Text';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -35,13 +34,13 @@ const validationSchema = Yup.object({
export type EmailAndPasswordFormValues = Yup.InferType<typeof validationSchema>;
export default function EmailAndPasswordSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/orgs/projects/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -31,13 +30,13 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
export default function FacebookProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -185,7 +184,7 @@ export default function FacebookProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/orgs/projects/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -33,13 +32,13 @@ import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWith
export default function GitHubProviderSettings() {
const theme = useTheme();
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -191,7 +190,7 @@ export default function GitHubProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/orgs/projects/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -31,13 +30,13 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
export default function GoogleProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -185,7 +184,7 @@ export default function GoogleProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -7,7 +7,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Option } from '@/components/ui/v2/Option';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -35,13 +34,13 @@ const validationSchema = Yup.object({
export type GravatarFormValues = Yup.InferType<typeof validationSchema>;
export default function GravatarSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/orgs/projects/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -31,13 +30,13 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
export default function LinkedInProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -185,7 +184,7 @@ export default function LinkedInProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -29,18 +28,19 @@ const validationSchema = Yup.object({
export type MFASettingsFormValues = Yup.InferType<typeof validationSchema>;
export default function MFASettings() {
const { openDialog } = useDialog();
const { project } = useProject();
const isPlatform = useIsPlatform();
const { openDialog } = useDialog();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
const { data, loading, error } = useGetAuthenticationSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -26,13 +25,13 @@ const validationSchema = Yup.object({
export type MagicLinkFormValues = Yup.InferType<typeof validationSchema>;
export default function MagicLinkSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { Input } from '@/components/ui/v2/Input';
import {
GetSmtpSettingsDocument,
useGetSmtpSettingsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -28,21 +27,21 @@ const validationSchema = yup
export type PostmarkFormValues = yup.InferType<typeof validationSchema>;
export default function PostmarkSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data } = useGetSmtpSettingsQuery({
const { data, refetch } = useGetSmtpSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
const { sender, password } = data?.config?.provider?.smtp || {};
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSmtpSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -81,6 +80,8 @@ export default function PostmarkSettings() {
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
form.reset({ ...values });
await refetch();
if (!isPlatform) {
openDialog({

View File

@@ -9,7 +9,6 @@ import { Option } from '@/components/ui/v2/Option';
import { Select } from '@/components/ui/v2/Select';
import { Text } from '@/components/ui/v2/Text';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -50,17 +49,17 @@ const validationSchema = Yup.object({
export type SMSSettingsFormValues = Yup.InferType<typeof validationSchema>;
export default function SMSSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
const { data, error, loading } = useGetSignInMethodsQuery({
const { data, loading, error } = useGetSignInMethodsQuery({
variables: { appId: project?.id },
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -6,7 +6,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { Input } from '@/components/ui/v2/Input';
import {
GetSmtpSettingsDocument,
useGetSmtpSettingsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -38,14 +37,15 @@ const smtpValidationSchema = yup
export type SmtpFormValues = yup.InferType<typeof smtpValidationSchema>;
export default function SMTPSettings() {
const { maintenanceActive } = useUI();
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data } = useGetSmtpSettingsQuery({
const { data, refetch } = useGetSmtpSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -83,7 +83,6 @@ export default function SMTPSettings() {
} = form;
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSmtpSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -104,6 +103,8 @@ export default function SMTPSettings() {
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
form.reset({ ...values });
await refetch();
if (!isPlatform) {
openDialog({

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetAuthenticationSettingsDocument,
useGetAuthenticationSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -34,13 +33,13 @@ const validationSchema = Yup.object({
export type SessionFormValues = Yup.InferType<typeof validationSchema>;
export default function SessionSettings() {
const { openDialog } = useDialog();
const { project } = useProject();
const isPlatform = useIsPlatform();
const { openDialog } = useDialog();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetAuthenticationSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -31,13 +30,13 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
export default function SpotifyProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -185,7 +184,7 @@ export default function SpotifyProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/orgs/projects/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -33,13 +32,13 @@ import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWith
export default function TwitchProviderSettings() {
const theme = useTheme();
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const { project } = useProject();
const localMimirClient = useLocalMimirClient();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -191,7 +190,7 @@ export default function TwitchProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -9,7 +9,6 @@ import { CopyIcon } from '@/components/ui/v2/icons/CopyIcon';
import { Input } from '@/components/ui/v2/Input';
import { InputAdornment } from '@/components/ui/v2/InputAdornment';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -45,13 +44,13 @@ const validationSchema = Yup.object({
export type TwitterProviderFormValues = Yup.InferType<typeof validationSchema>;
export default function TwitterProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -217,7 +216,7 @@ export default function TwitterProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -26,13 +25,13 @@ const validationSchema = Yup.object({
export type WebAuthnFormValues = Yup.InferType<typeof validationSchema>;
export default function WebAuthnSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const { project } = useProject();
const localMimirClient = useLocalMimirClient();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -14,7 +14,6 @@ import {
baseProviderValidationSchema,
} from '@/features/orgs/projects/authentication/settings/components/BaseProviderSettings';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -31,13 +30,13 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
export default function WindowsLiveProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -183,7 +182,7 @@ export default function WindowsLiveProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -15,7 +15,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetSignInMethodsDocument,
useGetSignInMethodsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -57,13 +56,13 @@ const validationSchema = Yup.object({
export type WorkOsProviderFormValues = Yup.InferType<typeof validationSchema>;
export default function WorkOsProviderSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetSignInMethodsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -244,7 +243,7 @@ export default function WorkOsProviderSettings() {
);
}}
>
<CopyIcon className="w-4 h-4" />
<CopyIcon className="h-4 w-4" />
</IconButton>
</InputAdornment>
}

View File

@@ -10,7 +10,6 @@ import {
baseEnvironmentVariableFormValidationSchema,
} from '@/features/orgs/projects/environmentVariables/settings/components/BaseEnvironmentVariableForm';
import {
GetEnvironmentVariablesDocument,
useGetEnvironmentVariablesQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -51,13 +50,13 @@ export default function CreateEnvironmentVariableForm({
const { data, loading, error } = useGetEnvironmentVariablesQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
const availableEnvironmentVariables = data?.config?.global?.environment || [];
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetEnvironmentVariablesDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -11,7 +11,6 @@ import {
} from '@/features/orgs/projects/environmentVariables/settings/components/BaseEnvironmentVariableForm';
import type { EnvironmentVariable } from '@/types/application';
import {
GetEnvironmentVariablesDocument,
useGetEnvironmentVariablesQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -58,13 +57,13 @@ export default function EditEnvironmentVariableForm({
const { data, loading, error } = useGetEnvironmentVariablesQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
const availableEnvironmentVariables = data?.config?.global?.environment || [];
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetEnvironmentVariablesDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -2,7 +2,6 @@ import { ApplyLocalSettingsDialog } from '@/components/common/ApplyLocalSettings
import { useDialog } from '@/components/common/DialogProvider';
import { useUI } from '@/components/common/UIProvider';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Box } from '@/components/ui/v2/Box';
import { Button } from '@/components/ui/v2/Button';
import { Divider } from '@/components/ui/v2/Divider';
@@ -17,7 +16,6 @@ import { CreateEnvironmentVariableForm } from '@/features/orgs/projects/environm
import { EditEnvironmentVariableForm } from '@/features/orgs/projects/environmentVariables/settings/components/EditEnvironmentVariableForm';
import type { EnvironmentVariable } from '@/types/application';
import {
GetEnvironmentVariablesDocument,
useGetEnvironmentVariablesQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -43,8 +41,9 @@ export default function EnvironmentVariableSettings() {
const localMimirClient = useLocalMimirClient();
const { openDialog, openAlertDialog } = useDialog();
const { data, loading, error, refetch } = useGetEnvironmentVariablesQuery({
const { data, error, refetch } = useGetEnvironmentVariablesQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -63,19 +62,9 @@ export default function EnvironmentVariableSettings() {
});
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetEnvironmentVariablesDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
if (loading) {
return (
<ActivityIndicator
delay={1000}
label="Loading environment variables..."
/>
);
}
if (error) {
throw error;
}
@@ -100,6 +89,7 @@ export default function EnvironmentVariableSettings() {
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
await refetch();
if (!isPlatform) {
openDialog({

View File

@@ -41,6 +41,7 @@ export default function SystemEnvironmentVariableSettings() {
const { data, loading, error } = useGetEnvironmentVariablesQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -10,7 +10,6 @@ import { useIsPlatform } from '@/features/orgs/projects/common/hooks/useIsPlatfo
import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimirClient';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -36,7 +35,6 @@ export default function HasuraAllowListSettings() {
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -11,7 +11,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -32,8 +31,8 @@ export default function HasuraConsoleSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -9,7 +9,6 @@ import { Input } from '@/components/ui/v2/Input';
import { useIsPlatform } from '@/features/orgs/projects/common/hooks/useIsPlatform';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -40,8 +39,8 @@ export default function HasuraCorsDomainSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -7,7 +7,6 @@ import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { useIsPlatform } from '@/features/orgs/projects/common/hooks/useIsPlatform';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -32,8 +31,8 @@ export default function HasuraDevModeSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -11,7 +11,6 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -42,8 +41,8 @@ export default function HasuraEnabledAPISettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -144,7 +143,7 @@ export default function HasuraEnabledAPISettings() {
loading: formState.isSubmitting,
},
}}
className="grid grid-flow-row px-4 gap-x-4 gap-y-2 lg:grid-cols-6"
className="grid grid-flow-row gap-x-4 gap-y-2 px-4 lg:grid-cols-6"
>
<ControlledAutocomplete
id="enabledAPIs"

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -33,8 +32,8 @@ export default function HasuraInferFunctionPermissionsSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -7,7 +7,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { HighlightedText } from '@/components/presentational/HighlightedText';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -38,11 +37,11 @@ const AVAILABLE_HASURA_LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
export default function HasuraLogLevelSettings() {
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -161,7 +160,7 @@ export default function HasuraLogLevelSettings() {
loading: formState.isSubmitting,
},
}}
className="grid grid-flow-row px-4 gap-x-4 gap-y-2 lg:grid-cols-5"
className="grid grid-flow-row gap-x-4 gap-y-2 px-4 lg:grid-cols-5"
>
<ControlledAutocomplete
id="logLevel"

View File

@@ -6,7 +6,6 @@ import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Input } from '@/components/ui/v2/Input';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -36,8 +35,8 @@ export default function HasuraPoolSizeSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -124,7 +123,7 @@ export default function HasuraPoolSizeSettings() {
loading: formState.isSubmitting,
},
}}
className="grid grid-flow-row px-4 gap-x-4 gap-y-2 lg:grid-cols-5"
className="grid grid-flow-row gap-x-4 gap-y-2 px-4 lg:grid-cols-5"
>
<Input
{...register('httpPoolSize')}

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetHasuraSettingsDocument,
useGetHasuraSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -33,8 +32,8 @@ export default function HasuraRemoteSchemaPermissionsSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -10,7 +10,6 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
import {
GetHasuraSettingsDocument,
Software_Type_Enum,
useGetHasuraSettingsQuery,
useGetSoftwareVersionsQuery,
@@ -40,8 +39,8 @@ export default function HasuraServiceVersionSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -158,7 +157,7 @@ export default function HasuraServiceVersionSettings() {
}}
docsLink="https://hub.docker.com/r/nhost/graphql-engine/tags"
docsTitle="the latest releases"
className="grid grid-flow-row px-4 gap-x-4 gap-y-2 lg:grid-cols-5"
className="grid grid-flow-row gap-x-4 gap-y-2 px-4 lg:grid-cols-5"
>
<ControlledAutocomplete
id="version"

View File

@@ -11,7 +11,6 @@ import {
} from '@/features/orgs/projects/permissions/settings/components/BasePermissionVariableForm';
import { getAllPermissionVariables } from '@/features/orgs/projects/permissions/settings/utils/getAllPermissionVariables';
import {
GetRolesPermissionsDocument,
useGetRolesPermissionsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -35,12 +34,14 @@ export default function CreatePermissionVariableForm({
onSubmit,
...props
}: CreatePermissionVariableFormProps) {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data, error, loading } = useGetRolesPermissionsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -57,7 +58,6 @@ export default function CreatePermissionVariableForm({
});
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetRolesPermissionsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -12,7 +12,6 @@ import {
import { getAllPermissionVariables } from '@/features/orgs/projects/permissions/settings/utils/getAllPermissionVariables';
import type { PermissionVariable } from '@/types/application';
import {
GetRolesPermissionsDocument,
useGetRolesPermissionsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -41,13 +40,14 @@ export default function EditPermissionVariableForm({
onSubmit,
...props
}: EditPermissionVariableFormProps) {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data, error, loading } = useGetRolesPermissionsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -64,7 +64,6 @@ export default function EditPermissionVariableForm({
});
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetRolesPermissionsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -2,7 +2,6 @@ import { ApplyLocalSettingsDialog } from '@/components/common/ApplyLocalSettings
import { useDialog } from '@/components/common/DialogProvider';
import { useUI } from '@/components/common/UIProvider';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Box } from '@/components/ui/v2/Box';
import { Button } from '@/components/ui/v2/Button';
import { Divider } from '@/components/ui/v2/Divider';
@@ -22,7 +21,6 @@ import { getAllPermissionVariables } from '@/features/orgs/projects/permissions/
import type { PermissionVariable } from '@/types/application';
import {
GetRolesPermissionsDocument,
useGetRolesPermissionsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -35,14 +33,15 @@ import { useProject } from '@/features/orgs/projects/hooks/useProject';
import { execPromiseWithErrorToast } from '@/features/orgs/utils/execPromiseWithErrorToast';
export default function PermissionVariableSettings() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { openDialog, openAlertDialog } = useDialog();
const { data, loading, error, refetch } = useGetRolesPermissionsQuery({
const { data, error, refetch } = useGetRolesPermissionsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -50,16 +49,9 @@ export default function PermissionVariableSettings() {
data?.config?.auth?.session?.accessToken || {};
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetRolesPermissionsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
if (loading) {
return (
<ActivityIndicator delay={1000} label="Loading permission variables..." />
);
}
if (error) {
throw error;
}
@@ -102,6 +94,7 @@ export default function PermissionVariableSettings() {
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
await refetch();
showApplyChangesDialog();
},
{

View File

@@ -24,7 +24,6 @@ import {
} from '@/utils/constants/common';
import type { GetResourcesQuery } from '@/utils/__generated__/graphql';
import {
GetResourcesDocument,
useGetResourcesQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -49,10 +48,10 @@ function getInitialServiceResources(
}
export default function ResourcesForm() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { openDialog, closeDialog } = useDialog();
const { project } = useProject();
const {
data,
@@ -62,6 +61,7 @@ export default function ResourcesForm() {
variables: {
appId: project?.id,
},
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -72,7 +72,6 @@ export default function ResourcesForm() {
} = useProPlan();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetResourcesDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -254,6 +253,8 @@ export default function ResourcesForm() {
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
// await refetch();
form.reset({ ...formValues });
if (!isPlatform) {
openDialog({

View File

@@ -11,7 +11,6 @@ import type {
BaseRoleFormValues,
} from '@/features/projects/roles/settings/components/BaseRoleForm';
import {
GetRolesPermissionsDocument,
useGetRolesPermissionsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -35,14 +34,17 @@ export default function CreateRoleForm({
onSubmit,
...props
}: CreateRoleFormProps) {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data, loading, error } = useGetRolesPermissionsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
const { allowed: allowedRoles } = data?.config?.auth?.user?.roles || {};
const form = useForm<BaseRoleFormValues>({
@@ -52,7 +54,6 @@ export default function CreateRoleForm({
});
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetRolesPermissionsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -12,7 +12,6 @@ import type {
} from '@/features/projects/roles/settings/components/BaseRoleForm';
import type { Role } from '@/types/application';
import {
GetRolesPermissionsDocument,
useGetRolesPermissionsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -41,12 +40,14 @@ export default function EditRoleForm({
onSubmit,
...props
}: EditRoleFormProps) {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data, loading, error } = useGetRolesPermissionsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -62,7 +63,6 @@ export default function EditRoleForm({
});
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetRolesPermissionsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -2,7 +2,6 @@ import { ApplyLocalSettingsDialog } from '@/components/common/ApplyLocalSettings
import { useDialog } from '@/components/common/DialogProvider';
import { useUI } from '@/components/common/UIProvider';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import { Box } from '@/components/ui/v2/Box';
import { Button } from '@/components/ui/v2/Button';
import { Chip } from '@/components/ui/v2/Chip';
@@ -22,7 +21,6 @@ import { getUserRoles } from '@/features/orgs/projects/roles/settings/utils/getU
import type { Role } from '@/types/application';
import {
GetRolesPermissionsDocument,
useGetRolesPermissionsQuery,
useUpdateConfigMutation,
} from '@/utils/__generated__/graphql';
@@ -46,14 +44,15 @@ export interface RoleSettingsFormValues {
}
export default function RoleSettings() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { openDialog, openAlertDialog } = useDialog();
const { data, loading, error, refetch } = useGetRolesPermissionsQuery({
const { data, error, refetch } = useGetRolesPermissionsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -61,14 +60,9 @@ export default function RoleSettings() {
data?.config?.auth?.user?.roles || {};
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetRolesPermissionsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
if (loading) {
return <ActivityIndicator delay={1000} label="Loading user roles..." />;
}
if (error) {
throw error;
}
@@ -107,6 +101,7 @@ export default function RoleSettings() {
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
await refetch();
showApplyChangesDialog();
},
{
@@ -119,25 +114,25 @@ export default function RoleSettings() {
}
async function handleDeleteRole({ name }: Role) {
const updateConfigPromise = updateConfig({
variables: {
appId: project?.id,
config: {
auth: {
user: {
roles: {
allowed: allowedRoles.filter((role) => role !== name),
default: name === defaultRole ? 'user' : defaultRole,
await execPromiseWithErrorToast(
async () => {
await updateConfig({
variables: {
appId: project?.id,
config: {
auth: {
user: {
roles: {
allowed: allowedRoles.filter((role) => role !== name),
default: name === defaultRole ? 'user' : defaultRole,
},
},
},
},
},
},
},
});
});
await execPromiseWithErrorToast(
async () => {
await updateConfigPromise;
await refetch();
showApplyChangesDialog();
},
{

View File

@@ -8,10 +8,7 @@ import {
BaseSecretForm,
baseSecretFormValidationSchema,
} from '@/features/orgs/projects/secrets/settings/components/BaseSecretForm';
import {
GetSecretsDocument,
useInsertSecretMutation,
} from '@/utils/__generated__/graphql';
import { useInsertSecretMutation } from '@/utils/__generated__/graphql';
import { yupResolver } from '@hookform/resolvers/yup';
import { FormProvider, useForm } from 'react-hook-form';
@@ -32,6 +29,7 @@ export default function CreateSecretForm({
onSubmit,
...props
}: CreateSecretFormProps) {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
@@ -45,9 +43,7 @@ export default function CreateSecretForm({
resolver: yupResolver(baseSecretFormValidationSchema),
});
const { project } = useProject();
const [insertSecret] = useInsertSecretMutation({
refetchQueries: [GetSecretsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -5,7 +5,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetHasuraSettingsDocument,
useGetStorageSettingsQuery,
useUpdateConfigMutation,
} from '@/generated/graphql';
@@ -31,8 +30,8 @@ export default function HasuraStorageAVSettings() {
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project, refetch: refetchProject } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetHasuraSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -6,7 +6,6 @@ import { Form } from '@/components/form/Form';
import { SettingsContainer } from '@/components/layout/SettingsContainer';
import { ActivityIndicator } from '@/components/ui/v2/ActivityIndicator';
import {
GetStorageSettingsDocument,
Software_Type_Enum,
useGetSoftwareVersionsQuery,
useGetStorageSettingsQuery,
@@ -36,13 +35,13 @@ export type StorageServiceVersionFormValues = Yup.InferType<
>;
export default function StorageServiceVersionSettings() {
const { project } = useProject();
const { openDialog } = useDialog();
const isPlatform = useIsPlatform();
const { maintenanceActive } = useUI();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const [updateConfig] = useUpdateConfigMutation({
refetchQueries: [GetStorageSettingsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -158,7 +157,7 @@ export default function StorageServiceVersionSettings() {
}}
docsLink="https://github.com/nhost/hasura-storage/releases"
docsTitle="the latest releases"
className="grid grid-flow-row px-4 gap-x-4 gap-y-2 lg:grid-cols-5"
className="grid grid-flow-row gap-x-4 gap-y-2 px-4 lg:grid-cols-5"
>
<ControlledAutocomplete
id="version"

View File

@@ -0,0 +1,5 @@
query getOrganizationSpendingNotification($orgId: uuid!) {
organizations(where: { id: { _eq: $orgId } }) {
threshold
}
}

View File

@@ -0,0 +1,5 @@
mutation updateOrganizationSpendingNotification($id: uuid!, $threshold: Int!) {
updateOrganization(pk_columns: { id: $id }, _set: { threshold: $threshold }) {
threshold
}
}

View File

@@ -1,5 +1,5 @@
import { BillingEstimate } from '@/features/orgs/components/billing/components/BillingEstimate';
import { SubscriptionPlan } from '@/features/orgs/components/billing/components/SubscriptionPlan';
import { Usage } from '@/features/orgs/components/billing/components/Usage';
import { ProjectLayout } from '@/features/orgs/layout/ProjectLayout';
import { useCurrentOrg } from '@/features/orgs/projects/hooks/useCurrentOrg';
import type { ReactElement } from 'react';
@@ -9,7 +9,7 @@ export default function OrgBilling() {
return (
<div className="flex h-full flex-col gap-4 overflow-auto bg-accent p-4">
<SubscriptionPlan />
{!isFree && <Usage />}
{!isFree && <BillingEstimate />}
</div>
);
}

View File

@@ -27,6 +27,7 @@ export default function SettingsAuthenticationPage() {
const { data, loading, error } = useGetAuthenticationSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
skip: !project,
...(!isPlatform ? { client: localMimirClient } : {}),
});
@@ -47,7 +48,7 @@ export default function SettingsAuthenticationPage() {
return (
<Container
className="grid max-w-5xl grid-flow-row bg-transparent gap-y-6"
className="grid max-w-5xl grid-flow-row gap-y-6 bg-transparent"
rootClassName="bg-transparent"
>
<AuthServiceVersionSettings />

View File

@@ -19,6 +19,7 @@ export default function EnvironmentVariablesPage() {
const { loading, error } = useGetEnvironmentVariablesQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -21,12 +21,13 @@ import { useGetHasuraSettingsQuery } from '@/utils/__generated__/graphql';
import type { ReactElement } from 'react';
export default function HasuraSettingsPage() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { data, loading, error } = useGetHasuraSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
skip: !project,
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -19,7 +19,6 @@ import {
usePauseApplicationMutation,
useUpdateApplicationMutation,
} from '@/generated/graphql';
import { discordAnnounce } from '@/utils/discordAnnounce';
import { slugifyString } from '@/utils/helpers';
import { yupResolver } from '@hookform/resolvers/yup';
import { useRouter } from 'next/router';
@@ -89,28 +88,17 @@ export default function SettingsGeneralPage() {
},
});
try {
const { data: updateAppData } = await execPromiseWithErrorToast(
async () => updateAppMutation,
{
loadingMessage: `Project name is being updated...`,
successMessage: `Project name has been updated successfully.`,
errorMessage: `An error occurred while trying to update project name.`,
},
);
const updateAppResult = updateAppData?.updateApp;
if (!updateAppResult) {
await discordAnnounce('Failed to update project name.');
return;
}
form.reset(undefined, { keepValues: true, keepDirty: false });
} catch {
// Note: The toast will handle the error.
}
await execPromiseWithErrorToast(
async () => {
await updateAppMutation;
form.reset({ name: data.name });
},
{
loadingMessage: `Project name is being updated...`,
successMessage: `Project name has been updated successfully.`,
errorMessage: `An error occurred while trying to update project name.`,
},
);
}
async function handleDeleteApplication() {

View File

@@ -12,14 +12,15 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
export default function RolesAndPermissionsPage() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { loading, error } = useGetRolesPermissionsQuery({
variables: {
appId: project?.id,
},
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -19,10 +19,10 @@ import { CreateSecretForm } from '@/features/orgs/projects/secrets/settings/comp
import { EditSecretForm } from '@/features/orgs/projects/secrets/settings/components/EditSecretForm';
import type { Secret } from '@/types/application';
import {
GetSecretsDocument,
useDeleteSecretMutation,
useGetSecretsQuery,
} from '@/utils/__generated__/graphql';
import { NetworkStatus } from '@apollo/client';
import type { ReactElement } from 'react';
import { Fragment } from 'react';
import { twMerge } from 'tailwind-merge';
@@ -41,17 +41,18 @@ export default function SecretsPage() {
const localMimirClient = useLocalMimirClient();
const { openDialog, openAlertDialog } = useDialog();
const { data, loading, error, refetch } = useGetSecretsQuery({
const { data, error, refetch, networkStatus } = useGetSecretsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
notifyOnNetworkStatusChange: true,
...(!isPlatform ? { client: localMimirClient } : {}),
});
const [deleteSecret] = useDeleteSecretMutation({
refetchQueries: [GetSecretsDocument],
...(!isPlatform ? { client: localMimirClient } : {}),
});
if (loading) {
if (networkStatus === NetworkStatus.loading) {
return <ActivityIndicator delay={1000} label="Loading secrets..." />;
}
@@ -158,7 +159,7 @@ export default function SecretsPage() {
footer: { className: 'hidden' },
}}
>
<Box className="grid grid-cols-2 gap-2 border-b-1 px-4 py-3">
<Box className="grid grid-cols-2 gap-2 px-4 py-3 border-b-1">
<Text className="font-medium">Secret Name</Text>
</Box>
@@ -174,7 +175,7 @@ export default function SecretsPage() {
<Dropdown.Trigger
asChild
hideChevron
className="absolute right-4 top-1/2 -translate-y-1/2"
className="absolute -translate-y-1/2 right-4 top-1/2"
>
<IconButton
variant="borderless"

View File

@@ -27,13 +27,13 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
export default function SettingsSignInMethodsPage() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { loading, error } = useGetSignInMethodsQuery({
variables: { appId: project?.id },
fetchPolicy: 'network-only',
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -27,6 +27,7 @@ export default function SMTPSettingsPage() {
const { data, loading, error } = useGetSmtpSettingsQuery({
variables: { appId: project?.id },
fetchPolicy: 'cache-and-network',
...(!isPlatform ? { client: localMimirClient } : {}),
});

View File

@@ -12,9 +12,9 @@ import { useLocalMimirClient } from '@/features/orgs/projects/hooks/useLocalMimi
import { useProject } from '@/features/orgs/projects/hooks/useProject';
export default function StorageSettingsPage() {
const { project } = useProject();
const isPlatform = useIsPlatform();
const localMimirClient = useLocalMimirClient();
const { project } = useProject();
const { loading, error } = useGetStorageSettingsQuery({
variables: { appId: project?.id },

View File

@@ -26639,6 +26639,13 @@ export type GetOrganizationProjectsQueryVariables = Exact<{
export type GetOrganizationProjectsQuery = { __typename?: 'query_root', apps: Array<{ __typename?: 'apps', id: any, slug: string, name: string, repositoryProductionBranch: string, subdomain: string, createdAt: any, desiredState: number, nhostBaseFolder: string, config?: { __typename?: 'ConfigConfig', observability: { __typename?: 'ConfigObservability', grafana: { __typename?: 'ConfigGrafana', adminPassword: string } }, hasura: { __typename?: 'ConfigHasura', adminSecret: string, settings?: { __typename?: 'ConfigHasuraSettings', enableConsole?: boolean | null } | null }, ai?: { __typename?: 'ConfigAI', version?: string | null } | null } | null, featureFlags: Array<{ __typename?: 'featureFlags', description: string, id: any, name: string, value: string }>, appStates: Array<{ __typename?: 'appStateHistory', id: any, appId: any, message?: string | null, stateId: number, createdAt: any }>, region: { __typename?: 'regions', id: any, countryCode: string, name: string, domain: string, city: string }, legacyPlan?: { __typename?: 'plans', id: any, name: string, price: number, isFree: boolean, featureMaxDbSize: number } | null, githubRepository?: { __typename?: 'githubRepositories', fullName: string } | null, deployments: Array<{ __typename?: 'deployments', id: any, commitSHA: string, commitMessage?: string | null, commitUserName?: string | null, deploymentStartedAt?: any | null, deploymentEndedAt?: any | null, commitUserAvatarUrl?: string | null, deploymentStatus?: string | null }>, creator?: { __typename?: 'users', id: any, email?: any | null, displayName: string } | null }> };
export type GetOrganizationSpendingNotificationQueryVariables = Exact<{
orgId: Scalars['uuid'];
}>;
export type GetOrganizationSpendingNotificationQuery = { __typename?: 'query_root', organizations: Array<{ __typename?: 'organizations', threshold: number }> };
export type GetOrganizationsQueryVariables = Exact<{
userId: Scalars['uuid'];
}>;
@@ -26731,6 +26738,14 @@ export type UpdateOrganizationMemberMutationVariables = Exact<{
export type UpdateOrganizationMemberMutation = { __typename?: 'mutation_root', updateOrganizationMember?: { __typename?: 'organization_members', id: any } | null };
export type UpdateOrganizationSpendingNotificationMutationVariables = Exact<{
id: Scalars['uuid'];
threshold: Scalars['Int'];
}>;
export type UpdateOrganizationSpendingNotificationMutation = { __typename?: 'mutation_root', updateOrganization?: { __typename?: 'organizations', threshold: number } | null };
export type DeletePaymentMethodMutationVariables = Exact<{
paymentMethodId: Scalars['uuid'];
}>;
@@ -30837,6 +30852,44 @@ export type GetOrganizationProjectsQueryResult = Apollo.QueryResult<GetOrganizat
export function refetchGetOrganizationProjectsQuery(variables: GetOrganizationProjectsQueryVariables) {
return { query: GetOrganizationProjectsDocument, variables: variables }
}
export const GetOrganizationSpendingNotificationDocument = gql`
query getOrganizationSpendingNotification($orgId: uuid!) {
organizations(where: {id: {_eq: $orgId}}) {
threshold
}
}
`;
/**
* __useGetOrganizationSpendingNotificationQuery__
*
* To run a query within a React component, call `useGetOrganizationSpendingNotificationQuery` and pass it any options that fit your needs.
* When your component renders, `useGetOrganizationSpendingNotificationQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetOrganizationSpendingNotificationQuery({
* variables: {
* orgId: // value for 'orgId'
* },
* });
*/
export function useGetOrganizationSpendingNotificationQuery(baseOptions: Apollo.QueryHookOptions<GetOrganizationSpendingNotificationQuery, GetOrganizationSpendingNotificationQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useQuery<GetOrganizationSpendingNotificationQuery, GetOrganizationSpendingNotificationQueryVariables>(GetOrganizationSpendingNotificationDocument, options);
}
export function useGetOrganizationSpendingNotificationLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetOrganizationSpendingNotificationQuery, GetOrganizationSpendingNotificationQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useLazyQuery<GetOrganizationSpendingNotificationQuery, GetOrganizationSpendingNotificationQueryVariables>(GetOrganizationSpendingNotificationDocument, options);
}
export type GetOrganizationSpendingNotificationQueryHookResult = ReturnType<typeof useGetOrganizationSpendingNotificationQuery>;
export type GetOrganizationSpendingNotificationLazyQueryHookResult = ReturnType<typeof useGetOrganizationSpendingNotificationLazyQuery>;
export type GetOrganizationSpendingNotificationQueryResult = Apollo.QueryResult<GetOrganizationSpendingNotificationQuery, GetOrganizationSpendingNotificationQueryVariables>;
export function refetchGetOrganizationSpendingNotificationQuery(variables: GetOrganizationSpendingNotificationQueryVariables) {
return { query: GetOrganizationSpendingNotificationDocument, variables: variables }
}
export const GetOrganizationsDocument = gql`
query getOrganizations($userId: uuid!) {
organizations(order_by: {name: asc}, where: {members: {userID: {_eq: $userId}}}) {
@@ -31440,6 +31493,40 @@ export function useUpdateOrganizationMemberMutation(baseOptions?: Apollo.Mutatio
export type UpdateOrganizationMemberMutationHookResult = ReturnType<typeof useUpdateOrganizationMemberMutation>;
export type UpdateOrganizationMemberMutationResult = Apollo.MutationResult<UpdateOrganizationMemberMutation>;
export type UpdateOrganizationMemberMutationOptions = Apollo.BaseMutationOptions<UpdateOrganizationMemberMutation, UpdateOrganizationMemberMutationVariables>;
export const UpdateOrganizationSpendingNotificationDocument = gql`
mutation updateOrganizationSpendingNotification($id: uuid!, $threshold: Int!) {
updateOrganization(pk_columns: {id: $id}, _set: {threshold: $threshold}) {
threshold
}
}
`;
export type UpdateOrganizationSpendingNotificationMutationFn = Apollo.MutationFunction<UpdateOrganizationSpendingNotificationMutation, UpdateOrganizationSpendingNotificationMutationVariables>;
/**
* __useUpdateOrganizationSpendingNotificationMutation__
*
* To run a mutation, you first call `useUpdateOrganizationSpendingNotificationMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useUpdateOrganizationSpendingNotificationMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [updateOrganizationSpendingNotificationMutation, { data, loading, error }] = useUpdateOrganizationSpendingNotificationMutation({
* variables: {
* id: // value for 'id'
* threshold: // value for 'threshold'
* },
* });
*/
export function useUpdateOrganizationSpendingNotificationMutation(baseOptions?: Apollo.MutationHookOptions<UpdateOrganizationSpendingNotificationMutation, UpdateOrganizationSpendingNotificationMutationVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useMutation<UpdateOrganizationSpendingNotificationMutation, UpdateOrganizationSpendingNotificationMutationVariables>(UpdateOrganizationSpendingNotificationDocument, options);
}
export type UpdateOrganizationSpendingNotificationMutationHookResult = ReturnType<typeof useUpdateOrganizationSpendingNotificationMutation>;
export type UpdateOrganizationSpendingNotificationMutationResult = Apollo.MutationResult<UpdateOrganizationSpendingNotificationMutation>;
export type UpdateOrganizationSpendingNotificationMutationOptions = Apollo.BaseMutationOptions<UpdateOrganizationSpendingNotificationMutation, UpdateOrganizationSpendingNotificationMutationVariables>;
export const DeletePaymentMethodDocument = gql`
mutation deletePaymentMethod($paymentMethodId: uuid!) {
deletePaymentMethod(id: $paymentMethodId) {

View File

@@ -218,12 +218,22 @@ module.exports = {
'40%': { transform: 'translateX(0) scaleX(0.4)' },
'100%': { transform: 'translateX(100%) scaleX(0.5)' },
},
"accordion-down": {
from: { height: "0" },
to: { height: "var(--radix-accordion-content-height)" },
},
"accordion-up": {
from: { height: "var(--radix-accordion-content-height)" },
to: { height: "0" },
},
},
animation: {
blinking: 'blinking 1s infinite',
toastenter: 'enter 200ms ease-out',
toastleave: 'leave 150ms ease-in forwards',
progress: 'progress 1s infinite linear',
"accordion-down": "accordion-down 0.2s ease-out",
"accordion-up": "accordion-up 0.2s ease-out",
},
},
},

351
pnpm-lock.yaml generated
View File

@@ -240,6 +240,9 @@ importers:
'@nhost/react-apollo':
specifier: workspace:*
version: link:../integrations/react-apollo
'@radix-ui/react-accordion':
specifier: ^1.2.1
version: 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-alert-dialog':
specifier: ^1.1.2
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
@@ -248,7 +251,7 @@ importers:
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dialog':
specifier: ^1.1.1
version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dropdown-menu':
specifier: ^2.1.1
version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
@@ -751,7 +754,7 @@ importers:
version: 3.2.0(graphql@16.8.1)
'@tailwindcss/forms':
specifier: ^0.5.7
version: 0.5.7(tailwindcss@3.4.10)
version: 0.5.7(tailwindcss@3.4.12)
'@types/node':
specifier: ^18.19.28
version: 18.19.46
@@ -772,7 +775,7 @@ importers:
version: 8.4.47
tailwindcss:
specifier: ^3.4.3
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
typescript:
specifier: ^4.9.5
version: 4.9.5
@@ -818,7 +821,7 @@ importers:
version: 3.2.0(graphql@16.8.1)
'@tailwindcss/forms':
specifier: ^0.5.7
version: 0.5.7(tailwindcss@3.4.10)
version: 0.5.7(tailwindcss@3.4.12)
'@types/node':
specifier: ^16.18.93
version: 16.18.106
@@ -839,7 +842,7 @@ importers:
version: 8.4.47
tailwindcss:
specifier: ^3.4.3
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
typescript:
specifier: ^4.9.5
version: 4.9.5
@@ -882,7 +885,7 @@ importers:
version: 3.2.0(graphql@16.8.1)
'@tailwindcss/forms':
specifier: ^0.5.7
version: 0.5.7(tailwindcss@3.4.10)
version: 0.5.7(tailwindcss@3.4.12)
'@types/node':
specifier: ^16.18.93
version: 16.18.106
@@ -903,7 +906,7 @@ importers:
version: 8.4.47
tailwindcss:
specifier: ^3.4.3
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
typescript:
specifier: ^4.9.5
version: 4.9.5
@@ -1158,16 +1161,16 @@ importers:
version: 4.2.19
svelte-check:
specifier: ^3.6.8
version: 3.8.6(postcss@8.4.47)(svelte@4.2.19)
version: 3.8.6(@babel/core@7.25.2)(postcss@8.4.47)(svelte@4.2.19)
tailwindcss:
specifier: ^3.4.3
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
typescript:
specifier: ^5.4.3
version: 5.5.4
vite:
specifier: ^5.4.6
version: 5.4.6(@types/node@16.18.106)
version: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
vitest:
specifier: ^0.25.8
version: 0.25.8
@@ -1191,7 +1194,7 @@ importers:
version: link:../../integrations/react-apollo
'@radix-ui/react-dialog':
specifier: ^1.1.1
version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dropdown-menu':
specifier: ^2.1.1
version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
@@ -1251,7 +1254,7 @@ importers:
version: 1.14.0
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.4.10)
version: 1.0.7(tailwindcss@3.4.12)
zod:
specifier: ^3.23.8
version: 3.23.8
@@ -1303,7 +1306,7 @@ importers:
version: 8.4.47
tailwindcss:
specifier: ^3.4.9
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
totp-generator:
specifier: ^0.0.13
version: 0.0.13
@@ -1343,7 +1346,7 @@ importers:
version: 3.3.0-alpha-d8cdbf6.0(graphql@16.8.1)
'@tailwindcss/forms':
specifier: ^0.5.7
version: 0.5.7(tailwindcss@3.4.10)
version: 0.5.7(tailwindcss@3.4.12)
'@types/react':
specifier: ^18.2.73
version: 18.3.4
@@ -1361,7 +1364,7 @@ importers:
version: 8.4.47
tailwindcss:
specifier: ^3.4.3
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
typescript:
specifier: ^4.9.5
version: 4.9.5
@@ -2115,13 +2118,13 @@ importers:
version: 9.7.0(react@18.2.0)
'@nhost/react':
specifier: ^3.5.4
version: link:../../../packages/react
version: 3.6.0(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@nhost/react-apollo':
specifier: ^12.0.4
version: 12.0.6(@apollo/client@3.11.4)(@nhost/react@packages+react)(react-dom@18.2.0)(react@18.2.0)
version: 12.0.6(@apollo/client@3.11.4)(@nhost/react@3.6.0)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dialog':
specifier: ^1.1.1
version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dropdown-menu':
specifier: ^2.1.1
version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
@@ -2211,7 +2214,7 @@ importers:
version: 1.14.0
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.4.10)
version: 1.0.7(tailwindcss@3.4.12)
typescript:
specifier: ^4.9.5
version: 4.9.5
@@ -2230,7 +2233,7 @@ importers:
version: 8.4.47
tailwindcss:
specifier: ^3.4.10
version: 3.4.10
version: 3.4.12(ts-node@10.9.2)
templates/react-native: {}
@@ -2241,10 +2244,10 @@ importers:
version: 3.11.4(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@nhost/react':
specifier: ^3.5.2
version: link:../../../packages/react
version: 3.6.0(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@nhost/react-apollo':
specifier: ^12.0.2
version: 12.0.6(@apollo/client@3.11.4)(@nhost/react@packages+react)(react-dom@18.2.0)(react@18.2.0)
version: 12.0.6(@apollo/client@3.11.4)(@nhost/react@3.6.0)(react-dom@18.2.0)(react@18.2.0)
'@react-native-async-storage/async-storage':
specifier: ^1.23.1
version: 1.24.0(react-native@0.73.7)
@@ -2532,7 +2535,7 @@ packages:
/@apollo/client@3.11.4(@types/react@18.3.4)(graphql-ws@5.16.0)(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-bmgYKkULpym8wt8aXlAZ1heaYo0skLJ5ru0qJ+JCRoo03Pe+yIDbBCnqlDw6Mjj76hFkDw3HwFMgZC2Hxp30Mg==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
graphql-ws: ^5.5.5
react: 18.2.0
react-dom: 18.2.0
@@ -2571,7 +2574,7 @@ packages:
/@apollo/client@3.11.4(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-bmgYKkULpym8wt8aXlAZ1heaYo0skLJ5ru0qJ+JCRoo03Pe+yIDbBCnqlDw6Mjj76hFkDw3HwFMgZC2Hxp30Mg==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
graphql-ws: ^5.5.5
react: 18.2.0
react-dom: 18.2.0
@@ -2609,7 +2612,7 @@ packages:
/@apollo/client@3.11.4(graphql-ws@5.16.0)(graphql@16.8.1):
resolution: {integrity: sha512-bmgYKkULpym8wt8aXlAZ1heaYo0skLJ5ru0qJ+JCRoo03Pe+yIDbBCnqlDw6Mjj76hFkDw3HwFMgZC2Hxp30Mg==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
graphql-ws: ^5.5.5
react: 18.2.0
react-dom: 18.2.0
@@ -2647,7 +2650,7 @@ packages:
resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==}
hasBin: true
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@babel/core': 7.25.2
'@babel/generator': 7.25.5
@@ -5238,7 +5241,7 @@ packages:
/@envelop/types@2.4.0(graphql@16.8.1):
resolution: {integrity: sha512-pjxS98cDQBS84X29VcwzH3aJ/KiLCGwyMxuj7/5FkdiaCXAD1JEvKEj9LARWlFYj1bY43uII4+UptFebrhiIaw==}
peerDependencies:
graphql: '>=16.8.1'
graphql: 16.8.1
dependencies:
graphql: 16.8.1
tslib: 2.7.0
@@ -5846,7 +5849,7 @@ packages:
engines: {node: ^12.20.0 || >=14.13.0}
hasBin: true
peerDependencies:
graphql: '>=16.8.1'
graphql: 16.8.1
peerDependenciesMeta:
graphql:
optional: true
@@ -5882,7 +5885,7 @@ packages:
dependencies:
'@graphiql/toolkit': 0.9.2(@types/node@16.18.106)(graphql-ws@5.16.0)(graphql@16.8.1)
'@headlessui/react': 1.7.19(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dropdown-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-tooltip': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
@@ -6181,7 +6184,7 @@ packages:
/@graphql-codegen/plugin-helpers@4.2.0(graphql@16.8.1):
resolution: {integrity: sha512-THFTCfg+46PXlXobYJ/OoCX6pzjI+9woQqCjdyKtgoI0tn3Xq2HUUCiidndxUpEYVrXb5pRiRXb7b/ZbMQqD0A==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-tools/utils': 9.2.1(graphql@16.8.1)
change-case-all: 1.0.15
@@ -6430,7 +6433,7 @@ packages:
/@graphql-codegen/visitor-plugin-common@3.1.1(encoding@0.1.13)(graphql@16.8.1):
resolution: {integrity: sha512-uAfp+zu/009R3HUAuTK2AamR1bxIltM6rrYYI6EXSmkM3rFtFsLTuJhjUDj98HcUCszJZrADppz8KKLGRUVlNg==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1)
'@graphql-tools/optimize': 1.4.0(graphql@16.8.1)
@@ -6723,7 +6726,7 @@ packages:
resolution: {integrity: sha512-wJKkDjXRg2qJAVhAVE96zJGMli8Ity9mKUB7gTbvJwsAniaquRqLcTXUQ19X9qVT4ACzbbp+tAfk96b2U3tfog==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@babel/core': 7.25.2
'@babel/parser': 7.25.4
@@ -6789,7 +6792,7 @@ packages:
resolution: {integrity: sha512-TmkzFTFVieHnqu9mPTF6RxAQltaprpDQnM5HMTPSyMLXnJGMTvdWejV0yORKj7DW1YSi791/sUnKf8HytepBFQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-tools/utils': 10.5.4(graphql@16.8.1)
graphql: 16.8.1
@@ -6799,7 +6802,7 @@ packages:
/@graphql-tools/optimize@1.4.0(graphql@16.8.1):
resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
graphql: 16.8.1
tslib: 2.7.0
@@ -6880,7 +6883,7 @@ packages:
/@graphql-tools/relay-operation-optimizer@6.5.18(encoding@0.1.13)(graphql@16.8.1):
resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@ardatan/relay-compiler': 12.0.0(encoding@0.1.13)(graphql@16.8.1)
'@graphql-tools/utils': 9.2.1(graphql@16.8.1)
@@ -6910,7 +6913,7 @@ packages:
resolution: {integrity: sha512-EIJgPRGzpvDFEjVp+RF1zNNYIC36BYuIeZ514jFoJnI6IdxyVyIRDLx/ykgMdaa1pKQerpfdqDnsF4JnZoDHSQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-tools/merge': 9.0.6(graphql@16.8.1)
'@graphql-tools/utils': 10.5.4(graphql@16.8.1)
@@ -6922,7 +6925,7 @@ packages:
/@graphql-tools/schema@9.0.19(graphql@16.8.1):
resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-tools/merge': 8.4.2(graphql@16.8.1)
'@graphql-tools/utils': 9.2.1(graphql@16.8.1)
@@ -7009,7 +7012,7 @@ packages:
/@graphql-tools/utils@9.2.1(graphql@16.8.1):
resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
graphql: 16.8.1
@@ -8937,7 +8940,6 @@ packages:
jwt-decode: 4.0.0
transitivePeerDependencies:
- encoding
dev: true
/@nhost/hasura-auth-js@2.6.0:
resolution: {integrity: sha512-gy2H/JlwSzpfFdpczFaVwheGq95SxmyzxJVTimBLCdVTl2yrnCZ3Zvk8gDpCcGLga/u+HjgRK+ymjH+RdNgiTg==}
@@ -8949,7 +8951,6 @@ packages:
xstate: 4.38.3
transitivePeerDependencies:
- encoding
dev: true
/@nhost/hasura-storage-js@2.5.1:
resolution: {integrity: sha512-I3rOSa095lcR9BUmNw7dOoXLPWL39WOcrb0paUBFX4h3ltR92ILEHTZ38hN6bZSv157ZdqkIFNL/M2G45SSf7g==}
@@ -8960,7 +8961,6 @@ packages:
xstate: 4.38.3
transitivePeerDependencies:
- encoding
dev: true
/@nhost/nhost-js@3.1.10(graphql@16.8.1):
resolution: {integrity: sha512-9KOX1krHu1UYAxTCUuRgRlaD97Nylzstck9YRSYwW27dHqDKhWUM5OWwOmOxJ2/W+Ty0V6EYbxuW2LRzrsdt1A==}
@@ -8974,26 +8974,44 @@ packages:
isomorphic-unfetch: 3.1.0
transitivePeerDependencies:
- encoding
dev: true
/@nhost/react-apollo@12.0.6(@apollo/client@3.11.4)(@nhost/react@packages+react)(react-dom@18.2.0)(react@18.2.0):
/@nhost/react-apollo@12.0.6(@apollo/client@3.11.4)(@nhost/react@3.6.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-6Q4uN7PvC6UqS4YPKbjv/q/9FMP4SECdEcZFrfaKfJrcWyoAA5MRwJeQwDnD3uhx+npEUNgTbBxezXHjYH3AYw==}
peerDependencies:
'@apollo/client': ^3.7.10
'@nhost/react': 3.5.6
graphql: 16.8.1
graphql: '>=16.8.1'
react: 18.2.0
react-dom: 18.2.0
dependencies:
'@apollo/client': 3.11.4(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@nhost/apollo': 7.1.6(@apollo/client@3.11.4)
'@nhost/react': link:packages/react
'@nhost/react': 3.6.0(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
- '@nhost/nhost-js'
dev: false
/@nhost/react@3.6.0(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-siJ7oHeN0xmwtuN3U6sK9tMdBB9Nr7rIQy/UvqgIuVfbqrNyFfyrzMKzY7EYb61TpBNzyiOFfJl78s6jZmIl1g==}
peerDependencies:
react: 18.2.0
react-dom: 18.2.0
dependencies:
'@nhost/nhost-js': 3.1.10(graphql@16.8.1)
'@xstate/react': 3.2.2(@types/react@18.3.4)(react@18.2.0)(xstate@4.38.3)
jwt-decode: 4.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
xstate: 4.38.3
transitivePeerDependencies:
- '@types/react'
- '@xstate/fsm'
- encoding
- graphql
dev: false
/@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1:
resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
dependencies:
@@ -9348,7 +9366,7 @@ packages:
/@pothos/core@3.41.2(graphql@16.8.1):
resolution: {integrity: sha512-iR1gqd93IyD/snTW47HwKSsRCrvnJaYwjVNcUG8BztZPqMxyJKPAnjPHAgu1XB82KEdysrNqIUnXqnzZIs08QA==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
graphql: 16.8.1
dev: false
@@ -9439,6 +9457,34 @@ packages:
resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
dev: false
/@radix-ui/react-accordion@1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: 18.2.0
react-dom: 18.2.0
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
dependencies:
'@radix-ui/primitive': 1.1.0
'@radix-ui/react-collapsible': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-context': 1.1.1(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-direction': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@types/react': 18.3.4
'@types/react-dom': 18.3.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
/@radix-ui/react-alert-dialog@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-eGSlLzPhKO+TErxkiGcCZGuvbVMnLA1MTnyBksGOeGRGkxHiiJUujsjmNTdWTm4iHVSRaUao9/4Ur671auMghQ==}
peerDependencies:
@@ -9511,6 +9557,33 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
/@radix-ui/react-collapsible@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: 18.2.0
react-dom: 18.2.0
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
dependencies:
'@radix-ui/primitive': 1.1.0
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-context': 1.1.1(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@types/react': 18.3.4
'@types/react-dom': 18.3.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
/@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
peerDependencies:
@@ -9653,39 +9726,6 @@ packages:
react-remove-scroll: 2.5.5(@types/react@18.3.4)(react@18.2.0)
dev: false
/@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: 18.2.0
react-dom: 18.2.0
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
dependencies:
'@radix-ui/primitive': 1.1.0
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.2.0)
'@types/react': 18.3.4
'@types/react-dom': 18.3.0
aria-hidden: 1.2.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-remove-scroll: 2.5.7(@types/react@18.3.4)(react@18.2.0)
dev: false
/@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==}
peerDependencies:
@@ -12816,7 +12856,7 @@ packages:
svelte: 4.2.19
tiny-glob: 0.2.9
undici: 5.28.4
vite: 5.4.6(@types/node@16.18.106)
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -12832,7 +12872,7 @@ packages:
'@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.19)(vite@5.4.6)
debug: 4.3.7
svelte: 4.2.19
vite: 5.4.6(@types/node@16.18.106)
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -12851,7 +12891,7 @@ packages:
magic-string: 0.30.11
svelte: 4.2.19
svelte-hmr: 0.15.3(svelte@4.2.19)
vite: 5.4.6(@types/node@16.18.106)
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
vitefu: 0.2.5(vite@5.4.6)
transitivePeerDependencies:
- supports-color
@@ -13140,15 +13180,6 @@ packages:
defer-to-connect: 2.0.1
dev: true
/@tailwindcss/forms@0.5.7(tailwindcss@3.4.10):
resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==}
peerDependencies:
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
dependencies:
mini-svg-data-uri: 1.4.4
tailwindcss: 3.4.10
dev: true
/@tailwindcss/forms@0.5.7(tailwindcss@3.4.12):
resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==}
peerDependencies:
@@ -13156,7 +13187,6 @@ packages:
dependencies:
mini-svg-data-uri: 1.4.4
tailwindcss: 3.4.12(ts-node@10.9.2)
dev: false
/@tailwindcss/typography@0.5.14(tailwindcss@3.4.12):
resolution: {integrity: sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==}
@@ -14747,14 +14777,14 @@ packages:
resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: '>=4.5.1'
vite: '>=4.3.9'
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
'@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2)
magic-string: 0.27.0
react-refresh: 0.14.2
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
vite: 5.4.6(@types/node@18.19.46)
transitivePeerDependencies:
- supports-color
dev: true
@@ -14763,7 +14793,7 @@ packages:
resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: '>=4.5.1'
vite: '>=4.3.9'
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
@@ -14779,7 +14809,7 @@ packages:
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: '>=4.5.1'
vite: '>=4.3.9'
vue: ^3.2.25
dependencies:
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
@@ -19905,6 +19935,7 @@ packages:
/eslint@8.48.0:
resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
@@ -19951,6 +19982,7 @@ packages:
/eslint@8.57.0:
resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
@@ -21442,7 +21474,7 @@ packages:
/graphql-request@6.1.0(encoding@0.1.13)(graphql@16.8.1):
resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
'@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
cross-fetch: 3.1.8(encoding@0.1.13)
@@ -21473,7 +21505,7 @@ packages:
resolution: {integrity: sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==}
engines: {node: '>=10'}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
dependencies:
graphql: 16.8.1
@@ -22948,7 +22980,7 @@ packages:
/isomorphic-unfetch@3.1.0:
resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
dependencies:
node-fetch: 2.7.0
node-fetch: 2.7.0(encoding@0.1.13)
unfetch: 4.2.0
transitivePeerDependencies:
- encoding
@@ -26811,17 +26843,6 @@ packages:
dependencies:
whatwg-url: 5.0.0
/node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
encoding:
optional: true
dependencies:
whatwg-url: 5.0.0
/node-fetch@2.7.0(encoding@0.1.13):
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
@@ -28064,22 +28085,6 @@ packages:
yaml: 1.10.2
dev: true
/postcss-load-config@4.0.2(postcss@8.4.47):
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.4.31'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
dependencies:
lilconfig: 3.1.2
postcss: 8.4.47
yaml: 2.5.0
/postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2):
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
@@ -29762,7 +29767,7 @@ packages:
semver: 7.6.3
source-map-loader: 3.0.2(webpack@5.94.0)
style-loader: 3.3.4(webpack@5.94.0)
tailwindcss: 3.4.10
tailwindcss: 3.4.12(ts-node@10.9.2)
terser-webpack-plugin: 5.3.10(webpack@5.94.0)
typescript: 4.9.5
webpack: 5.94.0
@@ -32002,7 +32007,7 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
/svelte-check@3.8.6(postcss@8.4.47)(svelte@4.2.19):
/svelte-check@3.8.6(@babel/core@7.25.2)(postcss@8.4.47)(svelte@4.2.19):
resolution: {integrity: sha512-ij0u4Lw/sOTREP13BdWZjiXD/BlHE6/e2e34XzmVmsp5IN4kVa3PWP65NM32JAgwjZlwBg/+JtiNV1MM8khu0Q==}
hasBin: true
peerDependencies:
@@ -32013,7 +32018,7 @@ packages:
picocolors: 1.1.0
sade: 1.8.1
svelte: 4.2.19
svelte-preprocess: 5.1.4(postcss@8.4.47)(svelte@4.2.19)(typescript@5.5.4)
svelte-preprocess: 5.1.4(@babel/core@7.25.2)(postcss@8.4.47)(svelte@4.2.19)(typescript@5.5.4)
typescript: 5.5.4
transitivePeerDependencies:
- '@babel/core'
@@ -32053,7 +32058,7 @@ packages:
svelte: 4.2.19
dev: true
/svelte-preprocess@5.1.4(postcss@8.4.47)(svelte@4.2.19)(typescript@5.5.4):
/svelte-preprocess@5.1.4(@babel/core@7.25.2)(postcss@8.4.47)(svelte@4.2.19)(typescript@5.5.4):
resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==}
engines: {node: '>= 16.0.0'}
requiresBuild: true
@@ -32091,6 +32096,7 @@ packages:
typescript:
optional: true
dependencies:
'@babel/core': 7.25.2
'@types/pug': 2.0.10
detect-indent: 6.1.0
magic-string: 0.30.11
@@ -32199,14 +32205,6 @@ packages:
resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
dev: false
/tailwindcss-animate@1.0.7(tailwindcss@3.4.10):
resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
dependencies:
tailwindcss: 3.4.10
dev: false
/tailwindcss-animate@1.0.7(tailwindcss@3.4.12):
resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
peerDependencies:
@@ -32246,36 +32244,6 @@ packages:
- ts-node
dev: false
/tailwindcss@3.4.10:
resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==}
engines: {node: '>=14.0.0'}
hasBin: true
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.6
lilconfig: 2.1.0
micromatch: 4.0.8
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.0
postcss: 8.4.47
postcss-import: 15.1.0(postcss@8.4.47)
postcss-js: 4.0.1(postcss@8.4.47)
postcss-load-config: 4.0.2(postcss@8.4.47)
postcss-nested: 6.2.0(postcss@8.4.47)
postcss-selector-parser: 6.1.2
resolve: 1.22.8
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
/tailwindcss@3.4.12(ts-node@10.9.2):
resolution: {integrity: sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==}
engines: {node: '>=14.0.0'}
@@ -33681,7 +33649,7 @@ packages:
/urql@3.0.4(graphql@16.8.1)(react@18.2.0):
resolution: {integrity: sha512-okmQKQ9pF4t8O8iCC5gH9acqfFji5lkhW3nLBjx8WKDd2zZG7PXoUpUK19VQEMK87L6VFBOO/XZ52MMKFEI0AA==}
peerDependencies:
graphql: 16.8.1
graphql: '>=16.8.1'
react: 18.2.0
dependencies:
'@urql/core': 3.2.2(graphql@16.8.1)
@@ -34053,7 +34021,7 @@ packages:
/vite-tsconfig-paths@4.3.2(typescript@4.9.5)(vite@5.4.6):
resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==}
peerDependencies:
vite: '>=4.5.1'
vite: '>=4.3.9'
peerDependenciesMeta:
vite:
optional: true
@@ -34067,45 +34035,6 @@ packages:
- typescript
dev: true
/vite@5.4.6(@types/node@16.18.106):
resolution: {integrity: sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || >=20.0.0
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 16.18.106
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.24.0
optionalDependencies:
fsevents: 2.3.3
dev: true
/vite@5.4.6(@types/node@16.18.106)(sass@1.32.0):
resolution: {integrity: sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -34192,7 +34121,7 @@ packages:
vite:
optional: true
dependencies:
vite: 5.4.6(@types/node@16.18.106)
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
dev: true
/vitest@0.25.8:
@@ -34230,7 +34159,7 @@ packages:
tinybench: 2.9.0
tinypool: 0.3.1
tinyspy: 1.1.1
vite: 5.4.6(@types/node@16.18.106)
vite: 5.4.6(@types/node@16.18.106)(sass@1.32.0)
transitivePeerDependencies:
- less
- lightningcss