Commit Graph
119 Commits
Author SHA1 Message Date
Joshen Lim ec72485ca9 Standardize PH events (#31067)
* Standardize PH events

* Prettier

* Reinstate send events for sign in and sign up
2024-12-12 16:53:00 +08:00
Monica KhouryandJoshen Lim ff3522f856 chore: Remove auth email warning for org members (#31043)
* chore: Remove auth email warning for org members

* Edit auth warning on Settings page

* Clean up

* Add comment

* More clean up

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-12-11 12:56:10 +08:00
f650b5ae67 Feat/connection string revamp (#30572)
* add new page

* moar

* moar

* added icons

* improve icons

* moved connect dialog to main header

* update text

* smaller screen support

* moar

* add python and sqlalchemyString

* moar

* add IPv4 warning

* moar

* Delete pooler-icons-v2.tsx

* tidy

* Delete DatabaseSettings.tsx

* tidy

* tidy

* moar. Session pooler is de-prioritized

* Update DatabaseConnectionString.tsx

* type issue

* moar

* Update DatabaseConnectionString.tsx

* Spelling

* Clean up LayoutHeader

* Clean up ConnectionPanel

* Clean up ConnectionParameters

* Last batch of clean up

* Fix loading state padding

* Shift old Connect files to new Connect folder outside of Home

* Final clean up

* Smol fix

* FIX

* Fix button link

* Fixes

* Lint

---------

Co-authored-by: Terry Sutton <saltcod@gmail.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-12-05 17:23:14 +08:00
Joshen Lim ace71494f4 Add telemetry for cron (#30874)
* Add telemetry for cron

* Update
2024-12-04 15:47:58 +08:00
377e224983 Feat/save assistant messages (#30823)
* save chat messages

* just ai state in subscribe

* fix hydration issue

* check for url param to open assistant

* fix dashboard history

* fix ts

* safeguard against parsing errors

* Fix the type errors.

* Another try.

---------

Co-authored-by: Alaister Young <a@alaisteryoung.com>
Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
2024-12-03 09:23:37 +01:00
Joshen Lim d88cb12794 Remove assistant V2 from feature preview (#30779)
* Remove assistant V2 from feature preview

* Hide fix with assistant button in rls editor
2024-12-02 22:03:31 +08:00
Joshen Lim d8a57c1c7e Add settings for queues: toggle expose through postgrest + permissions via table privileges (#30564)
* Add settings for queues: toggle expose through postgrest + permissions via table privileges

* Ensure appropriate grants are granted when toggling, and revoked when disabling

* Update to use queues_public schema

* Update queue schema to pgmq_public and add/remove from data api when enabling/disabling

* Fix query for retrieving toggle state

* Add schema invalidation

* Remove hard code

* Use QueuesSettings from Queues folder, remove from NewQueues

* Update SQL for toggling exposure + support RLS enabling

* Support toggling RLS for a queue

* Update admonition copy in queues for enabling/disable postgrest exposure

* Add custom RLS policy for queue

* Minor style fixes

* Fix

* Remove hard code

* Update RLS to add message regarding relevancy only if exposure to PostgREST is enabled

* Update message in exposing queues to postgREST

* Address feedback

* Address feedback

* Don't revoke postgres role stuff

* Remove hard code

* Update copy

* Update

* Address Oli's feedback, ensure that queues ALL have RLS enabled prior to allowing exposure to PostgREST

* Address remaining feedback

* Remove hardcode

* Update

* Address feedback
2024-11-27 12:10:33 +08:00
Joshen LimandSaxon Fletcher 12d92aed99 Assistant V2 (#30523)
* start

* added panels

* remove stuff

* fixes and refinements

* clean up

* remove old assistant panel

* resizable assistant kinda

* use icon

* Add missing package

* remove canvas

* add suggestions

* updated empty state if no tables exist

* fix table condition

* Implement diffing if using assistant in sql editor

* Reinstate old assistant in SQL editor if feature preview is off

* pane size adjustment

* assistant button corners

* Add SQL snippet content to assistant if opening assistant in sql editor

* Add the necessary checks for opt in and hipaa

* revert adding snippet to assistant when opening assistant in sql editor

* Add cmd i shortcut

* Add admonitions for when disablePrompt is toggled on, and if no api key is set. Add footer note RE rate limitation

* Bump ai package in packages

* some fixes for backwards compability depending on feature preview toggled

* Rename feature preview property for new assistant

* Smol fix

* Prevent SQL snippet from running until message is finished

* only loading last message

* fix z-index

* save chat state to global state

* add debug to failed ai queries

* Add basic contextual invalidation

* Add explain code action to SQL editor

* Add link to abort ongoing queries from SqlSnippet

* Update feature preview content

* Fix

* Fix

* Fix

* Te4st

* Fix tests

* ONly show ai button within a project

* Fix PH tracking

* Beef up a bit more event tracking

* Rough fix to padding when assistant is open

* A bit more telemetry stuff

* Update prompts

* fix rls editing via assistant

* Update generate-v3.ts

prompt to get auth schema too

* Add policy satement to assistant when editing

* Address all comments

* fixc

* Fix SqlSnippet not taking full width on larger viewports

* Adjust max width

---------

Co-authored-by: Saxon Fletcher <saxonafletcher@gmail.com>
2024-11-25 18:50:56 +08:00
Joshen Lim ecf001ab90 Refactor restore to new project by breaking into smaller components (#30604)
* Refactor restore to new project by breaking into smaller components

* Shift generateStrongPassword into a utils

* Update each notice component in restore to new project to be more consistent

* Add long polling in restore to new project

* Call refetch
2024-11-22 16:42:12 +08:00
Kevin Grüneberg e5c87ea560 chore: remove kpsVersion property (#30350)
KPS has long been removed and the property is never set for projects
2024-11-07 16:28:21 +08:00
Joshen Lim 8f4f7e3e57 Chore/deprecate old users management UI components (#30224)
* Remove usage of userManagementV2 flag and deprecate old user management UI component

* Remove usage of API users endpoint, to use the same SQL query as users-infinite-query

* Use user-infinite-query in UserImpersonationSelector and deprecate users-query

* Fix import statements
2024-11-05 09:10:10 +08:00
Jonathan Summers-MuirandJoshen Lim 9f420962e1 Feat/compute and disk (#30068)
* inited. added disk config to a new page

* add instances

* move moar

* moved things around. billing badges updated. compute added

* tidy

* new components

* form now dynamically updating itself

* updated compute form. moved warning panels. added collapsible for advanced options

* review dialog now only showing what is relevant

* Update DiskManagementForm.tsx

* compute sizes now a reccomendation

* fix old form

* started adding flags

* removed unused code. fixed issue with IOPS price showing on smaller compute

* moar clearning

* IOPS logic wrong way round

* type fixes

* start adding better error handling

* TIDY

* moved everything to own file

* tidy

* fix hydration issue

* moved some components around

* clean up

* inline errors

* update form message

* Update DiskManagementForm.tsx

* error fields fixed. some formatting issues. nano added as an option

* fix constants

* add some plan restrictions

* moar

* units updated. labels updated

* Update DiskManagement.schema.ts

* fix a ton of type issues

* text udpates

* add panel to suggest switching to io2

* more notice board stuff

* number formatting. moved a file

* Update DiskManagementForm.tsx

* remove console logs

* upgrade comms. more type fixes

* add empty states for the old areas

* more links

* updated some label issues

* hide labels when chart is active

* Update DiskManagement.utils.ts

* Delete next-env.d.ts

* Update DiskManagementForm.tsx

* Update DiskManagement.schema.ts

* text updates

* Update DiskManagement.constants.tsx

* Update next-env.d.ts

* Update next-env.d.ts

* Small clean uop

* Clean up empty files

* Clean up spelling

* Clean up more

* Fix typo in file name

* Clean up import statements

* Update DiskManagementForm.tsx

* fix issues

* Update ProjectLayout.tsx

* Remove unused import

* Fix

* Address nit

* Update database.tsx

* remove supress toast

* Update DiskManagement.schema.ts

* Update database.tsx

* change upgrade comms

* Update DiskManagementPanelForm.tsx

* fixes

* fix button size on old form

* Update DiskManagementForm.tsx

* Update StorageTypeField.tsx

* update labels on compute

* dont show banner when infra is FLY

* update comms. hide disk config for FLY

* Fix TS

* Last round of clean upo

* fix message state

* fix message

* Fix TS

* Update DiskManagement.utils.ts

* fix errors

* Update BillingChangeBadge.tsx

* fixed some label issues

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-11-04 09:05:37 +00:00
Joshen Lim 7016b9db90 Smol tweak to consent toast on mobile (#30195)
* Smol tweak to consent toast on mobile

* Use useConsent hook from packages in dashboard, and remove manual calling of ConsentToast + deprecate dashboard's copy of telemetry local storage key

* Attempt to fix playwright tests

* Fix
2024-11-01 17:25:40 +08:00
Alaister Young 7e360731a3 fix: api types + remove old telemetry (#30096)
* fix: api types + remove old telemetry

* SendEventPH -> SendEvent

* address feedback
2024-10-25 20:47:31 +08:00
Joshen Lim 0070265e6d Chore/assistant tweaks (#30074)
* Add cmd i to close the assistant

* Update command in side nav

* Add kill switch for sending assistant prompts

* Add basic telemetry around quick sql editor assistant

* Fix
2024-10-25 09:57:09 +08:00
Joshen Lim f521109ce2 Chore/database functions v2 (#29969)
* Init AiAssistantPanel

* Temp

* Temp

* iterating on assistant ux

* More spiking

* Tweaking...

* Moar tweaking..

* Even more tweaking

* Tweek

* More tweaks

* Final tweaking...

* TWEAK

* Spelling

* Fix

* Assistant error handling and small bug fix in context for message

* Add feature flag

* Fix

* Address all feedback

* Minor
2024-10-23 16:43:38 +08:00
Ivan Vasilov 92955d5555 chore: Bump sentry to v8+ (#29896)
* Bump sentry to v8.

* Fix all obsolete APIs.

* Fix the sentry configs.

* Add pages for testing sentry.

* Add missing imports to sentry.config file.

* Add base path to the api path.

* Remove extra files.
2024-10-17 11:39:06 +02:00
divitandJoshen Lim 99c147a56c feat: support for restarting and resizing statuses (#29881)
* start using restarting and resizing statuses

* pretty 1

* Minor updates

* Small revert, to prevent conflicts

* PRETTY

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-10-17 11:52:22 +08:00
Joshen Lim cdb07346bc Update PH consent banner (#29891)
* Update PH consent banner

* Fix
2024-10-15 16:32:37 +08:00
Joshen Lim d455cda085 Fix create profile not triggering (#29790) 2024-10-09 13:03:50 +00:00
Joshen Lim 336d623910 Chore/refactor telemetry calls for dashboard to support PH (#29747)
* Refactor telemetry event into RQ hook, and update to support PH

* Refactor telemetry identify into RQ hook, and update to support PH

* Refactor telemetry page into RQ hook, and update to support PH

* Clean up and deprecate lib/telemetry

* Pretty

* Add ts-ignore in docs for telemetry calls temporarily

* Add credentials include for send event, page and identify mutation hooks

* Add consent check for event and page telemetry, allow RQ mutations for those to fail silently without a toast
2024-10-09 14:32:30 +08:00
Ivan Vasilov b77a1b48be feat: Use Vercel Toolbar for overriding feature flags (#29697)
* initial test.

* Add base path to the rewrites.

* Remove base path from the source rewrite.

* Another try.

* Another try.

* another try.

* Try another magic.

* Add try/catch to the flag processing code.

* Revert some of the unneeded changes.

* Fix the api route for flags.

* Remove vercel/toolbar for local dev.

* Try using a static file for toolbar config.

* Add a well known flags file in the www app.

* Add headers to interpret vercel/flags as json.

* Another try.

* Fix the json formatting.

* Add headers for the vercel/flags route in the www app.

* Change to force studio to deploy.
2024-10-08 11:21:03 +02:00
Joshen Lim 4e36d1f0bb Allow auth warning banner to be dismissible (#29733)
* Allow auth warning banner to be dismissible

* Add close text sr
2024-10-08 15:17:57 +08:00
Terry Sutton a40ccd11bc rls changes (#29118)
* Inital setup

* Add suggest feature to the RLS Assistant

* Add AI button

* Use existing policies in AI editor

* Remove old feature preview

* Cleanup

* Tooltip

* Update

* Change panel width

* Fix type

* Fix types again

* Flag cleanup

* Add tooltip

* Cleanup

* Add a clear history button
2024-10-02 08:52:36 -02:30
Joshen LimandAlaister Young 536dc37d58 Chore/user management v2 panel part 2 (#29515)
* Set up banning and unbanning user, although untested due to API CORs issue

* Update search filter UI for users management V2

* Update API types

* Minoir

* Small fix

* Update UI

* Add support for resizing and re-ordering columns

* Add google profile image url to csp

* Revert test button

* Implement toggling of columns

* Fix loading

* Fully implement banning/unbanning user

* Fix

* Update apps/studio/components/interfaces/Auth/Users/UserOverview.tsx

Co-authored-by: Alaister Young <alaister@users.noreply.github.com>

* Fallback non CSP supported avatar urls to user icon

* Fix some bugs

* Remove prism-react-renderer from studio, add to ui patterns

* Migrate users query from API to studio

* Address some feedback

---------

Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
2024-10-01 14:32:46 +08:00
Terry Sutton 62727e511d Chore/move simple codeblock (#29547)
* Move SimpleCodeBlock to shared packages

* Add new files

* Add use client

* Revert sitemap changes
2024-09-27 15:05:24 -02:30
Kamil OgórekandAlaister Young 0aa4793de8 ref: Unify /v1 api requests, remove API_ADMIN_URL constant (#29529)
* ref: Unify /v1 api requests, remove API_ADMIN_URL constant

* remove custom types

---------

Co-authored-by: Alaister Young <a@alaisteryoung.com>
2024-09-26 11:26:59 +00:00
Joshen Lim ff0a368fab Chore/notice banner for auth smtp changes (#29382)
* Notice banner for auth smtp changes

* Small style fix

* Update feedback
2024-09-19 16:19:18 +08:00
Joshen LimandKevin Grüneberg bcb847bbbb Chore/update rr pricing for new disk mgt (#29278)
* Update pricing details in DeployNewReplicaPanel

* Update disk mgt review modal to consider RR pricing

* Update tests

* Hide utilization bar for read replicas in new disk mgt ui

* Add guard

* Update link to docs for deploy replica panel

* Address feedback

* Ensure IOPS and throughput prices are considered for replicas

* Prettier

* Attempt to fix tests

* Attempt to fix tests

* Fix calculateDiskSizePrice for replicas

* Fixes

* Prettier

* Add ternary

* Feeeex

* Various small updates from Kevin's feedback

* smol stuff

* fixes

* Update DiskManagementPanelSchema.ts

---------

Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>
2024-09-18 18:38:58 +08:00
Terry Sutton 32b9cbf3c1 menu pref (#29297)
* Add a preference to prevent menu from expanding

* Use FormItemLayout

* Fix bottom padding

* Padding change

* Padding change back
2024-09-17 11:26:23 -02:30
Etienne Stalmans d171a02381 fix: stricter validation of returnTo path (#29288)
A returnTo path with /%09/place.website would cause the browser to
redirect to place.website instead of staying on the studio.
2024-09-17 10:10:40 +02:00
Kamil Ogórek 7dd11016a4 ref: Use local state to improve GitHub integration security (#29321) 2024-09-16 16:46:33 +02:00
Long Hoang db35ef9f3c feat: show new org page on first login for subset of users (#29188)
* feat: show new org page on first login for subset of users

* chore: keep local storage key in constants
2024-09-12 16:21:01 +08:00
Joshen Lim 17fd107f50 Chore/persist schema visualizer node positions (#29136)
* Midway implementing persist schema visualizer node positions

* Implement persisting node positions in local storage

* Fix SupportForm

* Improve default positions of new nodes
2024-09-09 11:11:32 +08:00
Terry SuttonandIvan Vasilov f8228f1f48 Chore/update opt in message (#28846)
* Working

* Allow for opting-in in place on the SQL Editor page

* Show a warning after the first message

* Fix width

* Remove import

* Add context to schema dropdown

* Cleanup

* no message

* Revert the package-lock.json.

* Remove the extra div.

* Move the confirmation modal outside so that it can be triggered by the first message alert.

* Add another alert to guide the user to selecting a schema.

* Fix imports

---------

Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
2024-09-03 15:04:01 -02:30
Joshen Lim 25bf3eae89 Silence config cat warnings (#29034)
* Silence config cat warnings

* Refactor
2024-09-03 11:09:13 +07:00
df52ea7ee0 feat: Replace all toasts with sonner (#28250)
* Update the design of the sonner toasts. Add the close button by default.

* Migrate studio and www apps to use the SonnerToaster.

* Migrate all toasts from studio.

* Migrate all leftover toasts in studio.

* Add a new toast component with progress. Use it in studio.

* Migrate the design-system app.

* Refactor the consent toast to use sonner.

* Switch docs to use the new sonner toasts.

* Remove toast examples from the design-system app.

* Remove all toast-related components and old code.

* Fix the progress bar in the toast progress component. Also make the bottom components vertically centered.

* Fix the width of the toast progress.

* Use text-foreground-lighter instead of muted for ToastProgress text

* Rename ToastProgress to SonnerProgress.

* Shorten the text in sonner progress.

* Use the correct classes for the close button. Add a const var for the default toast duration. Remove the custom width class from sonner.

* Set the position for all progress toasts to bottom right. Set the duration for all toasts to the default (when reusing a toast id from loading/progress toast, the duration is set to infinity).

* Fix the playwright tests.

* Refactor imports to use ui instead of @ui.

* Change all imports of react-hot-toast with sonner. These components were merged since the last commit to this branch.

* Remove react-hot-toast lib.

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com>
2024-08-31 07:50:51 +08:00
Alaister YoungandKevin Grüneberg bee86a9c63 feat: upgrade via pricing page (#28942)
* feat: upgrade via pricing page

* reinstall cmdk

* fix button size

* improve search & autoclose

* Update apps/www/lib/fetchWrapper.ts

Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>

* Update apps/www/lib/fetchWrapper.ts

Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>

* update telemetry events

---------

Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>
2024-08-28 21:43:00 +00:00
Ivan Vasilov 8c6d0f1890 feat: Save the selected schema in the URL and local storage (#28662)
* Add nuqs package.

* Add useSchemaQueryState hook.

* Use the new hook in all places where there's is a schema selector.

* Make the useQueryState work with SSR in playwright.

* Fix the saving to local storage to happen as a side effect without any additional rerenders.
2024-08-19 13:28:25 +02:00
Jordi Enric 7da83a9080 Add last sign in method used to sign in ui (#28631)
* add last sign in feat

* wrap only the button for email, update colors in wrapper

* foreground light for wrapper text

* use a Badge and move it to the right

* add outline

* use default colors
2024-08-15 11:03:13 +02:00
Ivan VasilovandJoshen Lim 6a29cd2bec feat: Choose which schemas to share with OpenAI (#28594)
* Change the getEntityDefinitions query to accept list of schemas instead of being hardcoded to public schema.

* Add a schema combo box for selecting schemas.

* Use the combobox in the SQL editor to select which schemas should be sent to the AI when asking a question.

* Add configurable schemas to AiPolicyEditor.

* Remove unneeded hook.

* Fix the AI settings modal.

* Add keys to the entity definitions query.

* Fix the AI settings modal which is used by cmdk flow.

* Minor fixes.

* Address feedback

* Some fixes

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-08-15 14:38:19 +08:00
Ivan Vasilov d6a33be225 feat: Make the AI panel in the SQL Editor resizable (#28506)
* Fix a "A component is `contentEditable` and contains `children` managed by React." error. Reexport ResizableHandle from react-resizable-panels. Add correct display name for text area.

* Change the AI panel to be resizable.
2024-08-09 16:23:14 +02:00
Ivan VasilovandJoshen Lim 0895081f4f fix: Make the onCopyUrl work on Safari (#27215)
* Add a new hook for copying URLs.

* Refactor the copyToClipboard function.

* Make the onCopyUrl function awaitable.

* Fix the test.

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-08-07 13:50:50 +08:00
f0cacd6223 Add an Authenticator Assurance Level toggle for impersonating users in Studio (#28332)
* Add AAL2 toggle for user impersonation

* Move AAL toggle into user selector & tweak styles

- Since the AAL level can only be toggled before a user is selected, move the toggle into the user selection area
- Also display the AAL status in the UserImpersonatingRow and the RoleImpersonationPopover
- Improve display styles

* Run prettier

* - fixes light mode text issue
- adds "Advanced options" collapsible
- adds info tooltip linking to MFA docs

---------

Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
Co-authored-by: Alaister Young <a@alaisteryoung.com>
2024-08-02 15:39:16 +08:00
Charis 5cd8384bca feat(docs), refactor(docs,studio): add regions list to docs (#28125)
* feat(docs), refactor(docs,studio): add regions list to docs

Adds list of supported AWS regions to docs.

Pulls the region information into `shared-data` package to provide common source of truth for dashboard and docs.

* style: format
2024-07-23 12:45:44 -04:00
Pamela Chia 1904d02e33 chore: remove unnecessary telemetry (#28127) 2024-07-23 13:39:35 +08:00
Etienne Stalmans 22d66f4999 chore: update docs and templates with search_path (#28066)
Advisor warns about missing search_path on the handle_new_user function,
which we supply in docs and SQL starter templates.
We have updated this in some docs but haven't pulled it through to everything
2024-07-18 17:54:15 +02:00
Alaister YoungandJoshen Lim b897d51a53 feat: use TUS for file uploads in dashboard (#28030)
* feat: use TUS for file uploads in dashboard

* handle upload progress

* add fallback for mime types

* lowercase extensions

* add note about mime

* Handle file size 0 and make check for nbsp replacement

* Fix NaN in progress

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2024-07-17 13:27:00 +08:00
Alaister YoungandKevin Grüneberg 70da0f1d1d chore: cleanup packages (#27770)
* chore: cleanup packages

- Avoid circular imports
- Export API-types as types
- pg-format without depending on Node internal Buffer (not browser-compatible)
- Avoid importing from barrel files in ui dir

* chore: avoid barrel file imports in studio (#27771)

* chore: avoid barrel file imports

- Removes some unused imports
- Avoids barrel file import for faster builds + less memory

* add eslint rule

* type fixes

* delete layouts barrel

* delete components/grid barrel file

* delete components/grid/utils barrel file

* delete components/grid/components/common barrel file

* delete components/grid/components/editor barrel file

* delete components/grid/components/formatter barrel file

* delete components/grid/components/grid barrel file

* delete components/grid/components/header/filter barrel file

* remote components/grid/store barrel file

* remove components/interfaces/Auth/Policies barrel file

* delete components/interfaces/Settings/Logs barrel file

* delete components/ui/CodeEditor barrel file

* delete components/ui/Forms barrel file

* delete components/ui/Shimmers barrel file

* delete data/analytics barrel file

* delete hooks barrel file

* cleanup lib/common/fetch barrel file

* final * barral files cleanup

* global react-data-grid styles

* remove console.log

---------

Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>

* fix build

---------

Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>
2024-07-04 14:48:10 +08:00
Joshen Lim 9123889139 Ignore 504 errors on sentry (#27745)
* Ignore 504 errors on sentry

* Ignore insertBefore errors

* Ignore r.default.setDefaultLevel is not a function

* Ignore copyToClipboard errors
2024-07-02 19:23:28 +08:00