From bbce2b02634843a898d10a7ddd04f1d62c9afe50 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 20 Jul 2023 16:34:28 +0900 Subject: [PATCH 01/36] First commit for simultaneous-cursors project. Currently working on MVP. --- examples/simultaneous-cursors/.eslintrc.cjs | 15 + examples/simultaneous-cursors/.gitignore | 24 + examples/simultaneous-cursors/index.html | 13 + .../simultaneous-cursors/package-lock.json | 3570 +++++++++++++++++ examples/simultaneous-cursors/package.json | 27 + examples/simultaneous-cursors/public/vite.svg | 1 + examples/simultaneous-cursors/src/App.css | 86 + examples/simultaneous-cursors/src/App.jsx | 272 ++ .../src/assets/icons/clock.svg | 3 + .../src/assets/icons/community_help.svg | 64 + .../src/assets/icons/error_404.svg | 63 + .../src/assets/icons/error_500.svg | 64 + .../src/assets/icons/icon_Transfer.svg | 10 + .../src/assets/icons/icon_add_member.svg | 3 + .../src/assets/icons/icon_alert.svg | 3 + .../src/assets/icons/icon_alert_danger.svg | 10 + .../src/assets/icons/icon_alert_info.svg | 10 + .../src/assets/icons/icon_alert_success.svg | 10 + .../src/assets/icons/icon_alert_warning.svg | 3 + .../src/assets/icons/icon_arrow.svg | 3 + .../src/assets/icons/icon_arrow2.svg | 3 + .../src/assets/icons/icon_arrow_back.svg | 3 + .../src/assets/icons/icon_arrow_back2.svg | 3 + .../assets/icons/icon_arrow_circle_right.svg | 3 + .../src/assets/icons/icon_arrow_product.svg | 3 + .../src/assets/icons/icon_back.svg | 3 + .../src/assets/icons/icon_back_home.svg | 3 + .../src/assets/icons/icon_book.svg | 3 + .../src/assets/icons/icon_branch.svg | 3 + .../src/assets/icons/icon_bulb.svg | 3 + .../src/assets/icons/icon_chart.svg | 3 + .../src/assets/icons/icon_check.svg | 3 + .../src/assets/icons/icon_check_circle.svg | 3 + .../icons/icon_checkbox_fill_circle.svg | 4 + .../icons/icon_checkbox_fill_square.svg | 5 + .../src/assets/icons/icon_circle.svg | 3 + .../src/assets/icons/icon_circle_close.svg | 10 + .../src/assets/icons/icon_circle_filled.svg | 3 + .../assets/icons/icon_circle_quetion_mark.svg | 10 + .../src/assets/icons/icon_clock.svg | 3 + .../src/assets/icons/icon_close.svg | 3 + .../src/assets/icons/icon_close_small.svg | 3 + .../src/assets/icons/icon_cloud.svg | 3 + .../src/assets/icons/icon_cloud_border.svg | 4 + .../src/assets/icons/icon_cloud_orange.svg | 3 + .../src/assets/icons/icon_code_snippet.svg | 3 + .../assets/icons/icon_collaborate_cursor.svg | 78 + .../assets/icons/icon_collaborate_editing.svg | 71 + .../assets/icons/icon_collaborate_profile.svg | 22 + .../icons/icon_collaborate_selection.svg | 28 + .../src/assets/icons/icon_connect.svg | 10 + .../src/assets/icons/icon_container.svg | 3 + .../src/assets/icons/icon_copy.svg | 10 + .../src/assets/icons/icon_cursor.svg | 4 + .../icons/icon_dashboard_user_green.svg | 12 + .../icons/icon_dashboard_user_purple.svg | 12 + .../assets/icons/icon_dashboard_user_red.svg | 12 + .../icons/icon_dashboard_user_yellow.svg | 12 + .../src/assets/icons/icon_diamond.svg | 3 + .../src/assets/icons/icon_discord.svg | 1 + .../src/assets/icons/icon_edit.svg | 3 + .../src/assets/icons/icon_expand.svg | 3 + .../src/assets/icons/icon_eye.svg | 3 + .../src/assets/icons/icon_eye_off.svg | 3 + .../src/assets/icons/icon_file.svg | 3 + .../src/assets/icons/icon_folder.svg | 3 + .../src/assets/icons/icon_folder_open.svg | 4 + .../src/assets/icons/icon_github.svg | 3 + .../src/assets/icons/icon_gnb_menu.svg | 3 + .../src/assets/icons/icon_google.svg | 9 + .../src/assets/icons/icon_heart.svg | 10 + .../src/assets/icons/icon_input.svg | 4 + .../src/assets/icons/icon_key.svg | 3 + .../src/assets/icons/icon_keynote.svg | 10 + .../src/assets/icons/icon_line.svg | 4 + .../src/assets/icons/icon_link.svg | 3 + .../src/assets/icons/icon_lock.svg | 3 + .../src/assets/icons/icon_lock_small.svg | 3 + .../src/assets/icons/icon_logo_text.svg | 11 + .../src/assets/icons/icon_member_email.svg | 3 + .../src/assets/icons/icon_menu.svg | 3 + .../src/assets/icons/icon_message.svg | 3 + .../src/assets/icons/icon_message_smile.svg | 3 + .../src/assets/icons/icon_message_square.svg | 3 + .../src/assets/icons/icon_minimize.svg | 3 + .../src/assets/icons/icon_more.svg | 3 + .../src/assets/icons/icon_more_large.svg | 5 + .../src/assets/icons/icon_naver.svg | 9 + .../src/assets/icons/icon_next.svg | 4 + .../src/assets/icons/icon_open_selector.svg | 3 + .../src/assets/icons/icon_package.svg | 4 + .../src/assets/icons/icon_pen.svg | 13 + .../src/assets/icons/icon_pie_chart.svg | 10 + .../src/assets/icons/icon_pin.svg | 3 + .../src/assets/icons/icon_play.svg | 3 + .../src/assets/icons/icon_plus.svg | 3 + .../src/assets/icons/icon_previous.svg | 4 + .../src/assets/icons/icon_recorder.svg | 3 + .../src/assets/icons/icon_refresh.svg | 3 + .../src/assets/icons/icon_repeat.svg | 10 + .../src/assets/icons/icon_report.svg | 3 + .../src/assets/icons/icon_route.svg | 3 + .../src/assets/icons/icon_search.svg | 3 + .../src/assets/icons/icon_secenario.svg | 3 + .../icons/icon_service_main_users_alone.svg | 10 + .../icons/icon_service_main_users_group.svg | 22 + .../src/assets/icons/icon_setting.svg | 4 + .../src/assets/icons/icon_short_cut.svg | 3 + .../src/assets/icons/icon_shuffle.svg | 3 + .../src/assets/icons/icon_slack.svg | 9 + .../src/assets/icons/icon_smile.svg | 3 + .../src/assets/icons/icon_square.svg | 3 + .../src/assets/icons/icon_square_check.svg | 3 + .../assets/icons/icon_square_exclamation.svg | 3 + .../assets/icons/icon_stable_monitoring.svg | 17 + .../src/assets/icons/icon_stable_server.svg | 9 + .../src/assets/icons/icon_stable_sharing.svg | 22 + .../src/assets/icons/icon_star.svg | 3 + .../src/assets/icons/icon_star_full.svg | 4 + .../src/assets/icons/icon_stars.svg | 10 + .../assets/icons/icon_system_user_green.svg | 9 + .../assets/icons/icon_system_user_pink.svg | 9 + .../assets/icons/icon_system_user_purple.svg | 9 + .../src/assets/icons/icon_thumbs.svg | 10 + .../src/assets/icons/icon_tool.svg | 3 + .../src/assets/icons/icon_top_button.svg | 4 + .../src/assets/icons/icon_trash.svg | 3 + .../src/assets/icons/icon_twinkle.svg | 3 + .../src/assets/icons/icon_unconnect.svg | 10 + .../src/assets/icons/icon_upload.svg | 3 + .../src/assets/icons/icon_users.svg | 3 + .../src/assets/icons/icon_view_full.svg | 3 + .../src/assets/icons/icon_view_grid.svg | 3 + .../src/assets/icons/icon_view_list.svg | 3 + .../src/assets/icons/icon_view_show.svg | 7 + .../src/assets/icons/icon_view_split.svg | 3 + .../src/assets/icons/logo.svg | 11 + .../src/assets/icons/logo_3d.svg | 15 + .../src/assets/icons/logo_3d_2.svg | 9 + .../src/assets/icons/logo_3d_side.svg | 15 + .../src/assets/icons/logo_footer.svg | 11 + .../src/assets/icons/logo_gnb.svg | 5 + .../src/assets/icons/logo_horizontal_l.svg | 11 + .../src/assets/icons/logo_horizontal_s.svg | 11 + .../assets/icons/logo_horizontal_s_gray.svg | 11 + .../src/assets/icons/logo_horizontal_xs.svg | 14 + .../src/assets/icons/logo_no_text.svg | 5 + .../src/assets/icons/plus.svg | 3 + .../src/assets/icons/pop_remove.svg | 3 + .../src/assets/icons/star.svg | 3 + .../src/components/Cursor.jsx | 25 + .../src/components/CursorSelections.jsx | 29 + examples/simultaneous-cursors/src/main.jsx | 9 + examples/simultaneous-cursors/vite.config.js | 7 + 154 files changed, 5236 insertions(+) create mode 100644 examples/simultaneous-cursors/.eslintrc.cjs create mode 100644 examples/simultaneous-cursors/.gitignore create mode 100644 examples/simultaneous-cursors/index.html create mode 100644 examples/simultaneous-cursors/package-lock.json create mode 100644 examples/simultaneous-cursors/package.json create mode 100644 examples/simultaneous-cursors/public/vite.svg create mode 100644 examples/simultaneous-cursors/src/App.css create mode 100644 examples/simultaneous-cursors/src/App.jsx create mode 100644 examples/simultaneous-cursors/src/assets/icons/clock.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/community_help.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/error_404.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/error_500.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_back.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_book.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_branch.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_chart.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_check.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_clock.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_close.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_connect.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_container.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_copy.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_discord.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_edit.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_expand.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_eye.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_file.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_folder.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_github.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_google.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_heart.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_input.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_key.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_line.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_link.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_lock.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_menu.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_message.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_more.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_naver.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_next.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_package.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_pen.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_pin.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_play.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_plus.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_previous.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_report.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_route.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_search.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_setting.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_slack.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_smile.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_square.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_star.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stars.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_tool.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_trash.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_upload.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_users.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_3d.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_footer.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/plus.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/pop_remove.svg create mode 100644 examples/simultaneous-cursors/src/assets/icons/star.svg create mode 100644 examples/simultaneous-cursors/src/components/Cursor.jsx create mode 100644 examples/simultaneous-cursors/src/components/CursorSelections.jsx create mode 100644 examples/simultaneous-cursors/src/main.jsx create mode 100644 examples/simultaneous-cursors/vite.config.js diff --git a/examples/simultaneous-cursors/.eslintrc.cjs b/examples/simultaneous-cursors/.eslintrc.cjs new file mode 100644 index 000000000..ec601b2ce --- /dev/null +++ b/examples/simultaneous-cursors/.eslintrc.cjs @@ -0,0 +1,15 @@ +module.exports = { + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + ], + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + settings: { react: { version: '18.2' } }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': 'warn', + }, +} diff --git a/examples/simultaneous-cursors/.gitignore b/examples/simultaneous-cursors/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/examples/simultaneous-cursors/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/examples/simultaneous-cursors/index.html b/examples/simultaneous-cursors/index.html new file mode 100644 index 000000000..79c470191 --- /dev/null +++ b/examples/simultaneous-cursors/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/examples/simultaneous-cursors/package-lock.json b/examples/simultaneous-cursors/package-lock.json new file mode 100644 index 000000000..195ed450a --- /dev/null +++ b/examples/simultaneous-cursors/package-lock.json @@ -0,0 +1,3570 @@ +{ + "name": "simultaneous-cursors", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "simultaneous-cursors", + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "yorkie-js-sdk": "^0.4.5" + }, + "devDependencies": { + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^8.38.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "vite": "^4.3.9" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.14.tgz", + "integrity": "sha512-blODaaL+lngG5bdK/t4qZcQvq2BBqrABmYwqPPcS5VRxrCSGHb9R/rA3fqxh7R18I7WU4KKv+NYkt22FDfalcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.14.tgz", + "integrity": "sha512-rZ2v+Luba5/3D6l8kofWgTnqE+qsC/L5MleKIKFyllHTKHrNBMqeRCnZI1BtRx8B24xMYxeU32iIddRQqMsOsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.14.tgz", + "integrity": "sha512-qSwh8y38QKl+1Iqg+YhvCVYlSk3dVLk9N88VO71U4FUjtiSFylMWK3Ugr8GC6eTkkP4Tc83dVppt2n8vIdlSGg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.14.tgz", + "integrity": "sha512-9Hl2D2PBeDYZiNbnRKRWuxwHa9v5ssWBBjisXFkVcSP5cZqzZRFBUWEQuqBHO4+PKx4q4wgHoWtfQ1S7rUqJ2Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.14.tgz", + "integrity": "sha512-ZnI3Dg4ElQ6tlv82qLc/UNHtFsgZSKZ7KjsUNAo1BF1SoYDjkGKHJyCrYyWjFecmXpvvG/KJ9A/oe0H12odPLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.14.tgz", + "integrity": "sha512-h3OqR80Da4oQCIa37zl8tU5MwHQ7qgPV0oVScPfKJK21fSRZEhLE4IIVpmcOxfAVmqjU6NDxcxhYaM8aDIGRLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.14.tgz", + "integrity": "sha512-ha4BX+S6CZG4BoH9tOZTrFIYC1DH13UTCRHzFc3GWX74nz3h/N6MPF3tuR3XlsNjMFUazGgm35MPW5tHkn2lzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.14.tgz", + "integrity": "sha512-5+7vehI1iqru5WRtJyU2XvTOvTGURw3OZxe3YTdE9muNNIdmKAVmSHpB3Vw2LazJk2ifEdIMt/wTWnVe5V98Kg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.14.tgz", + "integrity": "sha512-IXORRe22In7U65NZCzjwAUc03nn8SDIzWCnfzJ6t/8AvGx5zBkcLfknI+0P+hhuftufJBmIXxdSTbzWc8X/V4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.14.tgz", + "integrity": "sha512-BfHlMa0nibwpjG+VXbOoqJDmFde4UK2gnW351SQ2Zd4t1N3zNdmUEqRkw/srC1Sa1DRBE88Dbwg4JgWCbNz/FQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.14.tgz", + "integrity": "sha512-j2/Ex++DRUWIAaUDprXd3JevzGtZ4/d7VKz+AYDoHZ3HjJzCyYBub9CU1wwIXN+viOP0b4VR3RhGClsvyt/xSw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.14.tgz", + "integrity": "sha512-qn2+nc+ZCrJmiicoAnJXJJkZWt8Nwswgu1crY7N+PBR8ChBHh89XRxj38UU6Dkthl2yCVO9jWuafZ24muzDC/A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.14.tgz", + "integrity": "sha512-aGzXzd+djqeEC5IRkDKt3kWzvXoXC6K6GyYKxd+wsFJ2VQYnOWE954qV2tvy5/aaNrmgPTb52cSCHFE+Z7Z0yg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.14.tgz", + "integrity": "sha512-8C6vWbfr0ygbAiMFLS6OPz0BHvApkT2gCboOGV76YrYw+sD/MQJzyITNsjZWDXJwPu9tjrFQOVG7zijRzBCnLw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.14.tgz", + "integrity": "sha512-G/Lf9iu8sRMM60OVGOh94ZW2nIStksEcITkXdkD09/T6QFD/o+g0+9WVyR/jajIb3A0LvBJ670tBnGe1GgXMgw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.14.tgz", + "integrity": "sha512-TBgStYBQaa3EGhgqIDM+ECnkreb0wkcKqL7H6m+XPcGUoU4dO7dqewfbm0mWEQYH3kzFHrzjOFNpSAVzDZRSJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.14.tgz", + "integrity": "sha512-stvCcjyCQR2lMTroqNhAbvROqRjxPEq0oQ380YdXxA81TaRJEucH/PzJ/qsEtsHgXlWFW6Ryr/X15vxQiyRXVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.14.tgz", + "integrity": "sha512-apAOJF14CIsN5ht1PA57PboEMsNV70j3FUdxLmA2liZ20gEQnfTG5QU0FhENo5nwbTqCB2O3WDsXAihfODjHYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.14.tgz", + "integrity": "sha512-fYRaaS8mDgZcGybPn2MQbn1ZNZx+UXFSUoS5Hd2oEnlsyUcr/l3c6RnXf1bLDRKKdLRSabTmyCy7VLQ7VhGdOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.14.tgz", + "integrity": "sha512-1c44RcxKEJPrVj62XdmYhxXaU/V7auELCmnD+Ri+UCt+AGxTvzxl9uauQhrFso8gj6ZV1DaORV0sT9XSHOAk8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.14.tgz", + "integrity": "sha512-EXAFttrdAxZkFQmpvcAQ2bywlWUsONp/9c2lcfvPUhu8vXBBenCXpoq9YkUvVP639ld3YGiYx0YUQ6/VQz3Maw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.14.tgz", + "integrity": "sha512-K0QjGbcskx+gY+qp3v4/940qg8JitpXbdxFhRDA1aYoNaPff88+aEwoq45aqJ+ogpxQxmU0ZTjgnrQD/w8iiUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/google-protobuf": { + "version": "3.15.6", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.6.tgz", + "integrity": "sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.15.tgz", + "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", + "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.466", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.466.tgz", + "integrity": "sha512-TSkRvbXRXD8BwhcGlZXDsbI2lRoP8dvqR7LQnqQNk9KxXBc4tG8O+rTuXgTyIpEdiqSGKEBSqrxdqEntnjNncA==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.14", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.14.tgz", + "integrity": "sha512-uNPj5oHPYmj+ZhSQeYQVFZ+hAlJZbAGOmmILWIqrGvPVlNLbyOvU5Bu6Woi8G8nskcx0vwY0iFoMPrzT86Ko+w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.14", + "@esbuild/android-arm64": "0.18.14", + "@esbuild/android-x64": "0.18.14", + "@esbuild/darwin-arm64": "0.18.14", + "@esbuild/darwin-x64": "0.18.14", + "@esbuild/freebsd-arm64": "0.18.14", + "@esbuild/freebsd-x64": "0.18.14", + "@esbuild/linux-arm": "0.18.14", + "@esbuild/linux-arm64": "0.18.14", + "@esbuild/linux-ia32": "0.18.14", + "@esbuild/linux-loong64": "0.18.14", + "@esbuild/linux-mips64el": "0.18.14", + "@esbuild/linux-ppc64": "0.18.14", + "@esbuild/linux-riscv64": "0.18.14", + "@esbuild/linux-s390x": "0.18.14", + "@esbuild/linux-x64": "0.18.14", + "@esbuild/netbsd-x64": "0.18.14", + "@esbuild/openbsd-x64": "0.18.14", + "@esbuild/sunos-x64": "0.18.14", + "@esbuild/win32-arm64": "0.18.14", + "@esbuild/win32-ia32": "0.18.14", + "@esbuild/win32-x64": "0.18.14" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/google-protobuf": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", + "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==" + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/grpc-web": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.4.2.tgz", + "integrity": "sha512-gUxWq42l5ldaRplcKb4Pw5O4XBONWZgz3vxIIXnfIeJj8Jc3wYiq2O4c9xzx/NGbbPEej4rhI62C9eTENwLGNw==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", + "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.26.tgz", + "integrity": "sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.26.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", + "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.4.tgz", + "integrity": "sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.25", + "rollup": "^3.25.2" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yorkie-js-sdk": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/yorkie-js-sdk/-/yorkie-js-sdk-0.4.5.tgz", + "integrity": "sha512-PKlmM6xvsexMTAhJN6C918LJw0S8+MTXfcO2meqN2HAmvY3oERQbt0oNV6iib9ufpxbtn9Xoyez64eSYl7TBhg==", + "dependencies": { + "@types/google-protobuf": "^3.15.5", + "@types/long": "^4.0.1", + "google-protobuf": "^3.19.4", + "grpc-web": "^1.3.1", + "long": "^5.2.0" + } + } + } +} diff --git a/examples/simultaneous-cursors/package.json b/examples/simultaneous-cursors/package.json new file mode 100644 index 000000000..e173d5c43 --- /dev/null +++ b/examples/simultaneous-cursors/package.json @@ -0,0 +1,27 @@ +{ + "name": "simultaneous-cursors", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "yorkie-js-sdk": "^0.4.5" + }, + "devDependencies": { + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^8.38.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "vite": "^4.3.9" + } +} diff --git a/examples/simultaneous-cursors/public/vite.svg b/examples/simultaneous-cursors/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/examples/simultaneous-cursors/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css new file mode 100644 index 000000000..113c226a9 --- /dev/null +++ b/examples/simultaneous-cursors/src/App.css @@ -0,0 +1,86 @@ +.cursor-selector-container { + /* z-index: 10; */ + + height: 92px; + width: 192px; + + + /* border: solid; */ + + position: fixed; + bottom: 0; + right: 0; + + padding: 20px; + + display: flex; + flex-direction: column; + justify-content: space-between; + + +} + +.cursor-selections-container { + /* border: solid; */ + + display: flex; + justify-content: space-between; + align-items: center; + +} + +.num-users-container { + /* border: solid; */ + + border-radius: 8px; + background-color: rgba(27, 26, 26, 0.8); + + display: flex; + justify-content: center; + align-items: center; + + color: white; + + + height: 40px; + width: 192px; + + + + + + +} + + + +.cursor-shape-selected { + /* cursor: none; */ +} + +.cursor-shape-not-selected { + /* cursor: none; */ + opacity: 0.5; + +} +.cursor-shape-not-selected:hover { + opacity: 0.7; +} + + + + +.cursor { + position: fixed; + left: 0; + top: 0; + /* background-color: none; */ + /* cursor: none; we don't have it here since when selecting options, cursor pops out */ +} + +* { + /* cursor: none; */ + /* pointer-events: none; */ +} + + diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx new file mode 100644 index 000000000..2f29c31e9 --- /dev/null +++ b/examples/simultaneous-cursors/src/App.jsx @@ -0,0 +1,272 @@ +import { useEffect, useRef, useState } from 'react' +import "./App.css" + +import yorkie from 'yorkie-js-sdk'; +import Cursor from './components/Cursor'; +import CursorSelections from './components/CursorSelections'; + + +const client = new yorkie.Client('https://api.yorkie.dev', { + apiKey: 'cinr4o2bjhd62lidlji0', + presence: { + name: "", + color: "", + }, +}); + +const doc = new yorkie.Document('simult-cursors'); // some work some don't + + + +function App() { + + + const cursorRef = useRef(null); + + + + const [mousePos, setMousePos] = useState({}); + + const [clients, setClients] = useState([]); + + const [currClient, setCurrClient] = useState(""); + + const [otherClients, setOtherClients] = useState([]); + + const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); + + + + const handleCursorShapeSelect = async (cursorShape) => { + + setSelectedCursorShape(cursorShape) // 아 맞가 얘 async 였지 + + + doc.update((root) => { + + const clientIdx = root.users.findIndex(obj => { + return obj.clientID === client.getID() + }) + + if (clientIdx !== -1) { + root.users[clientIdx].cursorShape = cursorShape + } + + }); + + } + + + + + + useEffect(() => { + + + + + const setup = async () => { + + await client.activate(); + + client.subscribe((event) => { + + console.log(event.type, " ------------- ") + + if (event.type === 'peers-changed') { + + setClients(client.getPeersByDocKey(doc.getKey())) + + const getCommonValuesByProperty = (array1, array2, property) => { + return array1.filter((item1) => array2.some((item2) => item2[property] === item1[property])); + } + + doc.update((root) => { + root.users = getCommonValuesByProperty(root.users, client.getPeersByDocKey(doc.getKey()), 'clientID'); + }); + + } + + if (event.type === "documents-changed") { + doc.update((root) => { + setOtherClients(root.users) + }); + } + + }); + + + + setCurrClient(client.getID()); + + + + await client.attach(doc); + + + + doc.subscribe((event) => { + if (event.type === 'remote-change') { + doc.update((root) => { + setOtherClients(root.users) + }); + } + }) + + + + + + window.addEventListener('beforeunload', () => { + client.deactivate(); + }); + + } + + + + setup(); + + + const handleMouseMove = (event) => { + + setMousePos({ x: event.clientX, y: event.clientY }); + + doc.update((root) => { + root.users = [] + console.log(root.users, " ------------- root.users") + + const clientIdx = root.users.findIndex(obj => { + return obj.clientID === client.getID() + }) + + + if (clientIdx !== -1) { + root.users[clientIdx].xPos = event.clientX; + root.users[clientIdx].yPos = event.clientY; + } else { + root.users.push( + { + clientID: client.getID(), + xPos: event.clientX, + yPos: event.clientY, + } + ) + } + + }); + + + + + }; + + + + + + + + + window.addEventListener('mousemove', handleMouseMove); + + + + + + + + // what was this code here again? - ask GPT + return () => { + window.removeEventListener( + 'mousemove', + handleMouseMove + ); + }; + + }, []); + + + + + + + + + return ( +
+ + + + + + {otherClients.map(user => + {return user.clientID !== client.getID() ? : <> } + )} + + + + + + + + + + + + {otherClients.map(user => + (

{user.xPos} {user.yPos}

) + )} + +
{otherClients.length}
+ The mouse is at position{' '} + + ({mousePos.x}, {mousePos.y}) + + + ------ clients.length {clients.length} + ------ clients.length {currClient} + + + + + + {/* */} + + + +
+ + +
+ + handleCursorShapeSelect('heart')} className={selectedCursorShape === 'heart' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_heart.svg" /> + handleCursorShapeSelect('thumbs')} className={selectedCursorShape === 'thumbs' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_thumbs.svg" /> + handleCursorShapeSelect('pen')} className={selectedCursorShape === 'pen' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_pen.svg" /> + handleCursorShapeSelect('cursor')} className={selectedCursorShape === 'cursor' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_cursor.svg" /> + +
+ +
+ + { clients.length !== 1 ?

{clients.length} users are here

:

1 user here

} + +
+ +
+ + + + + +
+ ); + +} + +export default App + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/clock.svg b/examples/simultaneous-cursors/src/assets/icons/clock.svg new file mode 100644 index 000000000..5fd10bc29 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/clock.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/community_help.svg b/examples/simultaneous-cursors/src/assets/icons/community_help.svg new file mode 100644 index 000000000..623e5fff0 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/community_help.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/error_404.svg b/examples/simultaneous-cursors/src/assets/icons/error_404.svg new file mode 100644 index 000000000..79c827c33 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/error_404.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/error_500.svg b/examples/simultaneous-cursors/src/assets/icons/error_500.svg new file mode 100644 index 000000000..a865ef792 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/error_500.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg b/examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg new file mode 100644 index 000000000..2bb5abf29 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg b/examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg new file mode 100644 index 000000000..a73ce30a5 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert.svg new file mode 100644 index 000000000..45dc4b414 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_alert.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg new file mode 100644 index 000000000..30303fe42 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg new file mode 100644 index 000000000..e28c61987 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg new file mode 100644 index 000000000..08bc38517 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg new file mode 100644 index 000000000..aba84326c --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg new file mode 100644 index 000000000..f9b7b3707 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg new file mode 100644 index 000000000..4e2b334ce --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg new file mode 100644 index 000000000..d3999329b --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg new file mode 100644 index 000000000..87429bc90 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg new file mode 100644 index 000000000..2fb8bdac8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg new file mode 100644 index 000000000..0cc837673 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_back.svg b/examples/simultaneous-cursors/src/assets/icons/icon_back.svg new file mode 100644 index 000000000..257e6a4df --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_back.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg b/examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg new file mode 100644 index 000000000..2c34b7150 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_book.svg b/examples/simultaneous-cursors/src/assets/icons/icon_book.svg new file mode 100644 index 000000000..2c1091904 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_book.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_branch.svg b/examples/simultaneous-cursors/src/assets/icons/icon_branch.svg new file mode 100644 index 000000000..88eae73b4 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_branch.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg b/examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg new file mode 100644 index 000000000..036aee09e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_chart.svg b/examples/simultaneous-cursors/src/assets/icons/icon_chart.svg new file mode 100644 index 000000000..2575e68b8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_chart.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_check.svg b/examples/simultaneous-cursors/src/assets/icons/icon_check.svg new file mode 100644 index 000000000..0645a67b7 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_check.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg new file mode 100644 index 000000000..63f1ed165 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg new file mode 100644 index 000000000..6421dfae1 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg b/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg new file mode 100644 index 000000000..aaf1b68bf --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle.svg new file mode 100644 index 000000000..78d3aa6a3 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg new file mode 100644 index 000000000..0d17fffd2 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg new file mode 100644 index 000000000..61d258567 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg new file mode 100644 index 000000000..927948fe6 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_clock.svg b/examples/simultaneous-cursors/src/assets/icons/icon_clock.svg new file mode 100644 index 000000000..5fd10bc29 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_clock.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_close.svg b/examples/simultaneous-cursors/src/assets/icons/icon_close.svg new file mode 100644 index 000000000..23214b7d7 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_close.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg b/examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg new file mode 100644 index 000000000..66c593c9e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg new file mode 100644 index 000000000..06d8ad10a --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg new file mode 100644 index 000000000..69690714e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg new file mode 100644 index 000000000..88e0ca113 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg b/examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg new file mode 100644 index 000000000..35c104a2f --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg new file mode 100644 index 000000000..f8bbff404 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg new file mode 100644 index 000000000..bd9d124d6 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg new file mode 100644 index 000000000..0f9eb47d7 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg new file mode 100644 index 000000000..1cae4163d --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_connect.svg b/examples/simultaneous-cursors/src/assets/icons/icon_connect.svg new file mode 100644 index 000000000..89d04f939 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_connect.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_container.svg b/examples/simultaneous-cursors/src/assets/icons/icon_container.svg new file mode 100644 index 000000000..6c8d3d712 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_container.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_copy.svg b/examples/simultaneous-cursors/src/assets/icons/icon_copy.svg new file mode 100644 index 000000000..520a8b4d4 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_copy.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg new file mode 100644 index 000000000..8dd523389 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg new file mode 100644 index 000000000..c71c6c762 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg new file mode 100644 index 000000000..59690cdf8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg new file mode 100644 index 000000000..3ff7c7386 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg new file mode 100644 index 000000000..b8d3e8aa4 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg b/examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg new file mode 100644 index 000000000..52b4c1062 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_discord.svg b/examples/simultaneous-cursors/src/assets/icons/icon_discord.svg new file mode 100644 index 000000000..4b7477340 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_edit.svg b/examples/simultaneous-cursors/src/assets/icons/icon_edit.svg new file mode 100644 index 000000000..c4e04b717 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_edit.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_expand.svg b/examples/simultaneous-cursors/src/assets/icons/icon_expand.svg new file mode 100644 index 000000000..197e01c9b --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_expand.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_eye.svg b/examples/simultaneous-cursors/src/assets/icons/icon_eye.svg new file mode 100644 index 000000000..707af350b --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_eye.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg b/examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg new file mode 100644 index 000000000..aba55f355 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_file.svg b/examples/simultaneous-cursors/src/assets/icons/icon_file.svg new file mode 100644 index 000000000..555c96eb6 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_file.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_folder.svg b/examples/simultaneous-cursors/src/assets/icons/icon_folder.svg new file mode 100644 index 000000000..d7add9648 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_folder.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg b/examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg new file mode 100644 index 000000000..eff4c13e6 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_github.svg b/examples/simultaneous-cursors/src/assets/icons/icon_github.svg new file mode 100644 index 000000000..8756cf33b --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_github.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg b/examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg new file mode 100644 index 000000000..a7ffcedc8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_google.svg b/examples/simultaneous-cursors/src/assets/icons/icon_google.svg new file mode 100644 index 000000000..06deff153 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_google.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg b/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg new file mode 100644 index 000000000..c1fe6a75d --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_input.svg b/examples/simultaneous-cursors/src/assets/icons/icon_input.svg new file mode 100644 index 000000000..063638ace --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_input.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_key.svg b/examples/simultaneous-cursors/src/assets/icons/icon_key.svg new file mode 100644 index 000000000..0861c8417 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_key.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg b/examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg new file mode 100644 index 000000000..654c825db --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_line.svg b/examples/simultaneous-cursors/src/assets/icons/icon_line.svg new file mode 100644 index 000000000..df86a0860 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_line.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_link.svg b/examples/simultaneous-cursors/src/assets/icons/icon_link.svg new file mode 100644 index 000000000..fbfeaaefe --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_link.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_lock.svg b/examples/simultaneous-cursors/src/assets/icons/icon_lock.svg new file mode 100644 index 000000000..33145c8bf --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_lock.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg b/examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg new file mode 100644 index 000000000..3e5bbe03f --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg b/examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg new file mode 100644 index 000000000..2848994aa --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg b/examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg new file mode 100644 index 000000000..c46518b82 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_menu.svg b/examples/simultaneous-cursors/src/assets/icons/icon_menu.svg new file mode 100644 index 000000000..21f55b851 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_message.svg b/examples/simultaneous-cursors/src/assets/icons/icon_message.svg new file mode 100644 index 000000000..d9a7f3fba --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_message.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg b/examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg new file mode 100644 index 000000000..634b436a5 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg b/examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg new file mode 100644 index 000000000..3f60018c9 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg b/examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg new file mode 100644 index 000000000..51f11a482 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_more.svg b/examples/simultaneous-cursors/src/assets/icons/icon_more.svg new file mode 100644 index 000000000..d6c400859 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_more.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg b/examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg new file mode 100644 index 000000000..60e666515 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_naver.svg b/examples/simultaneous-cursors/src/assets/icons/icon_naver.svg new file mode 100644 index 000000000..922dd3713 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_naver.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_next.svg b/examples/simultaneous-cursors/src/assets/icons/icon_next.svg new file mode 100644 index 000000000..1d78c2d96 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_next.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg b/examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg new file mode 100644 index 000000000..06b98684d --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_package.svg b/examples/simultaneous-cursors/src/assets/icons/icon_package.svg new file mode 100644 index 000000000..a0f145edf --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_package.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg b/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg new file mode 100644 index 000000000..ee35df4a6 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg b/examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg new file mode 100644 index 000000000..8ca94d055 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pin.svg b/examples/simultaneous-cursors/src/assets/icons/icon_pin.svg new file mode 100644 index 000000000..9b40d2654 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_pin.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_play.svg b/examples/simultaneous-cursors/src/assets/icons/icon_play.svg new file mode 100644 index 000000000..01e8434c7 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_play.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_plus.svg b/examples/simultaneous-cursors/src/assets/icons/icon_plus.svg new file mode 100644 index 000000000..d2a207670 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_previous.svg b/examples/simultaneous-cursors/src/assets/icons/icon_previous.svg new file mode 100644 index 000000000..baf1cdbbe --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_previous.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg b/examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg new file mode 100644 index 000000000..59b553ff6 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg b/examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg new file mode 100644 index 000000000..237e82d90 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg b/examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg new file mode 100644 index 000000000..27809ced7 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_report.svg b/examples/simultaneous-cursors/src/assets/icons/icon_report.svg new file mode 100644 index 000000000..9be09cb2a --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_report.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_route.svg b/examples/simultaneous-cursors/src/assets/icons/icon_route.svg new file mode 100644 index 000000000..8dfe2cfce --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_route.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_search.svg b/examples/simultaneous-cursors/src/assets/icons/icon_search.svg new file mode 100644 index 000000000..bca9569c1 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_search.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg b/examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg new file mode 100644 index 000000000..8336bad02 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg b/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg new file mode 100644 index 000000000..3e79f8e15 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg b/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg new file mode 100644 index 000000000..3cc275b35 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_setting.svg b/examples/simultaneous-cursors/src/assets/icons/icon_setting.svg new file mode 100644 index 000000000..c8b29732e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_setting.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg b/examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg new file mode 100644 index 000000000..6e03e1578 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg new file mode 100644 index 000000000..9b744e0aa --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_slack.svg b/examples/simultaneous-cursors/src/assets/icons/icon_slack.svg new file mode 100644 index 000000000..6b4bc914a --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_slack.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_smile.svg b/examples/simultaneous-cursors/src/assets/icons/icon_smile.svg new file mode 100644 index 000000000..403254a2e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_smile.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_square.svg b/examples/simultaneous-cursors/src/assets/icons/icon_square.svg new file mode 100644 index 000000000..7ff5b5daa --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_square.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg b/examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg new file mode 100644 index 000000000..dfb26dd76 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg b/examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg new file mode 100644 index 000000000..5e3a48761 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg new file mode 100644 index 000000000..a8dcd78df --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg new file mode 100644 index 000000000..579de667b --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg new file mode 100644 index 000000000..f28422e9f --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_star.svg b/examples/simultaneous-cursors/src/assets/icons/icon_star.svg new file mode 100644 index 000000000..8ede87039 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_star.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg b/examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg new file mode 100644 index 000000000..ce7e51749 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stars.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stars.svg new file mode 100644 index 000000000..39a1e640e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_stars.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg new file mode 100644 index 000000000..55be34194 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg new file mode 100644 index 000000000..5c70519d3 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg new file mode 100644 index 000000000..225fa380a --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg b/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg new file mode 100644 index 000000000..397f9e8b2 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_tool.svg b/examples/simultaneous-cursors/src/assets/icons/icon_tool.svg new file mode 100644 index 000000000..931fa3728 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_tool.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg b/examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg new file mode 100644 index 000000000..07c1f23a1 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_trash.svg b/examples/simultaneous-cursors/src/assets/icons/icon_trash.svg new file mode 100644 index 000000000..67fb81efb --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_trash.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg new file mode 100644 index 000000000..5a1db411d --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg b/examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg new file mode 100644 index 000000000..c01893138 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_upload.svg b/examples/simultaneous-cursors/src/assets/icons/icon_upload.svg new file mode 100644 index 000000000..32b410f3e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_upload.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_users.svg b/examples/simultaneous-cursors/src/assets/icons/icon_users.svg new file mode 100644 index 000000000..5b78b23e0 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_users.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg new file mode 100644 index 000000000..5277aaf7e --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg new file mode 100644 index 000000000..90b930fe8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg new file mode 100644 index 000000000..b3a517f03 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg new file mode 100644 index 000000000..26e97f724 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg new file mode 100644 index 000000000..74b511e60 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo.svg b/examples/simultaneous-cursors/src/assets/icons/logo.svg new file mode 100644 index 000000000..b3892fa00 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_3d.svg b/examples/simultaneous-cursors/src/assets/icons/logo_3d.svg new file mode 100644 index 000000000..d1c28704d --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_3d.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg b/examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg new file mode 100644 index 000000000..00b020e61 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg b/examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg new file mode 100644 index 000000000..ed2337a9a --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_footer.svg b/examples/simultaneous-cursors/src/assets/icons/logo_footer.svg new file mode 100644 index 000000000..905d130b8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_footer.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg b/examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg new file mode 100644 index 000000000..2c57f2e23 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg new file mode 100644 index 000000000..397e3c1ed --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg new file mode 100644 index 000000000..3c6225556 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg new file mode 100644 index 000000000..905d130b8 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg new file mode 100644 index 000000000..90db6c9bf --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg b/examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg new file mode 100644 index 000000000..2c57f2e23 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/plus.svg b/examples/simultaneous-cursors/src/assets/icons/plus.svg new file mode 100644 index 000000000..d2a207670 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/pop_remove.svg b/examples/simultaneous-cursors/src/assets/icons/pop_remove.svg new file mode 100644 index 000000000..76a8f6241 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/pop_remove.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/assets/icons/star.svg b/examples/simultaneous-cursors/src/assets/icons/star.svg new file mode 100644 index 000000000..8ede87039 --- /dev/null +++ b/examples/simultaneous-cursors/src/assets/icons/star.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx new file mode 100644 index 000000000..ec96dcd1f --- /dev/null +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -0,0 +1,25 @@ + +const Cursor = ({ cursorShape, x, y }) => { + + return ( + + ); +} + +export default Cursor; + + + + + // {/* {selectedCursorShape === 'heart' && } + // {selectedCursorShape === 'thumbs' && } + // {selectedCursorShape === 'pen' && } + // {selectedCursorShape === 'cursor' && } */} + diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx new file mode 100644 index 000000000..2dff9870c --- /dev/null +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -0,0 +1,29 @@ + +const CursorSelections = ({ handleCursorShapeSelect, clients }) => { + return ( + +
+ + +
+ + handleCursorShapeSelect('heart')} className={selectedCursorShape === 'heart' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_heart.svg" /> + handleCursorShapeSelect('thumbs')} className={selectedCursorShape === 'thumbs' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_thumbs.svg" /> + handleCursorShapeSelect('pen')} className={selectedCursorShape === 'pen' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_pen.svg" /> + handleCursorShapeSelect('cursor')} className={selectedCursorShape === 'cursor' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_cursor.svg" /> + +
+ +
+ + { clients.length !== 1 ?

{clients.length} users are here

:

1 user here

} + +
+ +
+ + + ); +} + +export default CursorSelections; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/main.jsx b/examples/simultaneous-cursors/src/main.jsx new file mode 100644 index 000000000..363941af9 --- /dev/null +++ b/examples/simultaneous-cursors/src/main.jsx @@ -0,0 +1,9 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + +) diff --git a/examples/simultaneous-cursors/vite.config.js b/examples/simultaneous-cursors/vite.config.js new file mode 100644 index 000000000..5a33944a9 --- /dev/null +++ b/examples/simultaneous-cursors/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From 71a9fce992ad0060d1624e59fe43b86a49293e31 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 25 Jul 2023 14:24:05 +0900 Subject: [PATCH 02/36] Organize code/white space --- examples/simultaneous-cursors/src/App.jsx | 280 +++++++----------- .../src/components/Cursor.jsx | 43 +-- .../src/components/CursorSelections.jsx | 81 +++-- examples/simultaneous-cursors/src/main.jsx | 10 +- 4 files changed, 185 insertions(+), 229 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 2f29c31e9..6ecb16ef8 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,272 +1,202 @@ -import { useEffect, useRef, useState } from 'react' -import "./App.css" +import { useEffect, useRef, useState } from 'react'; +import './App.css'; import yorkie from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; - const client = new yorkie.Client('https://api.yorkie.dev', { apiKey: 'cinr4o2bjhd62lidlji0', presence: { - name: "", - color: "", + name: '', + color: '', }, -}); +}); const doc = new yorkie.Document('simult-cursors'); // some work some don't - - function App() { - - const cursorRef = useRef(null); - - const [mousePos, setMousePos] = useState({}); const [clients, setClients] = useState([]); - const [currClient, setCurrClient] = useState(""); + const [currClient, setCurrClient] = useState(''); const [otherClients, setOtherClients] = useState([]); const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); - - const handleCursorShapeSelect = async (cursorShape) => { - - setSelectedCursorShape(cursorShape) // 아 맞가 얘 async 였지 - + setSelectedCursorShape(cursorShape); doc.update((root) => { - - const clientIdx = root.users.findIndex(obj => { - return obj.clientID === client.getID() - }) + const clientIdx = root.users.findIndex((obj) => { + return obj.clientID === client.getID(); + }); if (clientIdx !== -1) { - root.users[clientIdx].cursorShape = cursorShape - } - + root.users[clientIdx].cursorShape = cursorShape; + } }); - - } - - - - + }; useEffect(() => { - - - - - const setup = async () => { - + const setup = async () => { await client.activate(); client.subscribe((event) => { - - console.log(event.type, " ------------- ") + console.log(event.type, ' ------------- '); if (event.type === 'peers-changed') { - - setClients(client.getPeersByDocKey(doc.getKey())) + setClients(client.getPeersByDocKey(doc.getKey())); const getCommonValuesByProperty = (array1, array2, property) => { - return array1.filter((item1) => array2.some((item2) => item2[property] === item1[property])); - } + return array1.filter((item1) => + array2.some((item2) => item2[property] === item1[property]), + ); + }; doc.update((root) => { - root.users = getCommonValuesByProperty(root.users, client.getPeersByDocKey(doc.getKey()), 'clientID'); + root.users = getCommonValuesByProperty( + root.users, + client.getPeersByDocKey(doc.getKey()), + 'clientID', + ); }); - } - if (event.type === "documents-changed") { + if (event.type === 'documents-changed') { doc.update((root) => { - setOtherClients(root.users) + setOtherClients(root.users); }); } - }); - - setCurrClient(client.getID()); - - await client.attach(doc); - - doc.subscribe((event) => { - if (event.type === 'remote-change') { - doc.update((root) => { - setOtherClients(root.users) - }); - } - }) - - - - + if (event.type === 'remote-change') { + doc.update((root) => { + setOtherClients(root.users); + }); + } + }); window.addEventListener('beforeunload', () => { client.deactivate(); }); - - } - - + }; setup(); - const handleMouseMove = (event) => { - setMousePos({ x: event.clientX, y: event.clientY }); doc.update((root) => { - root.users = [] - console.log(root.users, " ------------- root.users") + root.users = []; + console.log(root.users, ' ------------- root.users'); - const clientIdx = root.users.findIndex(obj => { - return obj.clientID === client.getID() - }) + const clientIdx = root.users.findIndex((obj) => { + return obj.clientID === client.getID(); + }); - if (clientIdx !== -1) { - root.users[clientIdx].xPos = event.clientX; - root.users[clientIdx].yPos = event.clientY; + root.users[clientIdx].xPos = event.clientX; + root.users[clientIdx].yPos = event.clientY; } else { - root.users.push( - { - clientID: client.getID(), - xPos: event.clientX, - yPos: event.clientY, - } - ) + root.users.push({ + clientID: client.getID(), + xPos: event.clientX, + yPos: event.clientY, + }); } - }); - - - - }; - - - - - - - window.addEventListener('mousemove', handleMouseMove); - - - - - - - // what was this code here again? - ask GPT return () => { - window.removeEventListener( - 'mousemove', - handleMouseMove - ); + window.removeEventListener('mousemove', handleMouseMove); }; - }, []); - - - - - - - return (
- - - - - - {otherClients.map(user => - {return user.clientID !== client.getID() ? : <> } - )} - - - - - - - - - - - - {otherClients.map(user => - (

{user.xPos} {user.yPos}

) - )} - + {otherClients.map((user) => { + return user.clientID !== client.getID() ? ( + + ) : ( + <> + ); + })} + + {otherClients.map((user) => ( +

+ {user.xPos} {user.yPos} +

+ ))}
{otherClients.length}
The mouse is at position{' '} ({mousePos.x}, {mousePos.y}) - ------ clients.length {clients.length} ------ clients.length {currClient} - - - - - {/* */} - - - -
- - -
- - handleCursorShapeSelect('heart')} className={selectedCursorShape === 'heart' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_heart.svg" /> - handleCursorShapeSelect('thumbs')} className={selectedCursorShape === 'thumbs' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_thumbs.svg" /> - handleCursorShapeSelect('pen')} className={selectedCursorShape === 'pen' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_pen.svg" /> - handleCursorShapeSelect('cursor')} className={selectedCursorShape === 'cursor' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_cursor.svg" /> - +
+
+ handleCursorShapeSelect('heart')} + className={ + selectedCursorShape === 'heart' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_heart.svg" + /> + handleCursorShapeSelect('thumbs')} + className={ + selectedCursorShape === 'thumbs' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_thumbs.svg" + /> + handleCursorShapeSelect('pen')} + className={ + selectedCursorShape === 'pen' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_pen.svg" + /> + handleCursorShapeSelect('cursor')} + className={ + selectedCursorShape === 'cursor' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_cursor.svg" + />
-
- - { clients.length !== 1 ?

{clients.length} users are here

:

1 user here

} - +
+ {clients.length !== 1 ? ( +

{clients.length} users are here

+ ) : ( +

1 user here

+ )}
-
- - - - -
); - } -export default App - - - - - +export default App; diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index ec96dcd1f..c81b96e30 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -1,25 +1,26 @@ - const Cursor = ({ cursorShape, x, y }) => { + return ( + + ); +}; - return ( - - ); -} - export default Cursor; - - - - // {/* {selectedCursorShape === 'heart' && } - // {selectedCursorShape === 'thumbs' && } - // {selectedCursorShape === 'pen' && } - // {selectedCursorShape === 'cursor' && } */} - +// {/* {selectedCursorShape === 'heart' && } +// {selectedCursorShape === 'thumbs' && } +// {selectedCursorShape === 'pen' && } +// {selectedCursorShape === 'cursor' && } */} diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index 2dff9870c..dcb00fb6e 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -1,29 +1,54 @@ - const CursorSelections = ({ handleCursorShapeSelect, clients }) => { - return ( - -
- - -
- - handleCursorShapeSelect('heart')} className={selectedCursorShape === 'heart' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_heart.svg" /> - handleCursorShapeSelect('thumbs')} className={selectedCursorShape === 'thumbs' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_thumbs.svg" /> - handleCursorShapeSelect('pen')} className={selectedCursorShape === 'pen' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_pen.svg" /> - handleCursorShapeSelect('cursor')} className={selectedCursorShape === 'cursor' ? 'cursor-shape-selected' : 'cursor-shape-not-selected'} src="src/assets/icons/icon_cursor.svg" /> - -
- -
- - { clients.length !== 1 ?

{clients.length} users are here

:

1 user here

} - -
- -
- - - ); -} - -export default CursorSelections; \ No newline at end of file + return ( +
+
+ handleCursorShapeSelect('heart')} + className={ + selectedCursorShape === 'heart' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_heart.svg" + /> + handleCursorShapeSelect('thumbs')} + className={ + selectedCursorShape === 'thumbs' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_thumbs.svg" + /> + handleCursorShapeSelect('pen')} + className={ + selectedCursorShape === 'pen' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_pen.svg" + /> + handleCursorShapeSelect('cursor')} + className={ + selectedCursorShape === 'cursor' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + } + src="src/assets/icons/icon_cursor.svg" + /> +
+ +
+ {clients.length !== 1 ? ( +

{clients.length} users are here

+ ) : ( +

1 user here

+ )} +
+
+ ); +}; + +export default CursorSelections; diff --git a/examples/simultaneous-cursors/src/main.jsx b/examples/simultaneous-cursors/src/main.jsx index 363941af9..265cbed70 100644 --- a/examples/simultaneous-cursors/src/main.jsx +++ b/examples/simultaneous-cursors/src/main.jsx @@ -1,9 +1,9 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.jsx' +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App.jsx'; ReactDOM.createRoot(document.getElementById('root')).render( - -) + , +); From 802e38887d2d413bb0228d8004775feb73c21424 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 25 Jul 2023 16:23:43 +0900 Subject: [PATCH 03/36] Work in progress... --- examples/simultaneous-cursors/.env | 2 + examples/simultaneous-cursors/.env.production | 2 + examples/simultaneous-cursors/src/App.css | 89 +- examples/simultaneous-cursors/src/App.jsx | 118 +- examples/simultaneous-cursors/src/main.jsx | 4 +- package-lock.json | 3409 +++++++++++++---- 6 files changed, 2773 insertions(+), 851 deletions(-) create mode 100644 examples/simultaneous-cursors/.env create mode 100644 examples/simultaneous-cursors/.env.production diff --git a/examples/simultaneous-cursors/.env b/examples/simultaneous-cursors/.env new file mode 100644 index 000000000..58bcc916b --- /dev/null +++ b/examples/simultaneous-cursors/.env @@ -0,0 +1,2 @@ +VITE_YORKIE_API_ADDR='http://localhost:8080' +VITE_YORKIE_API_KEY='' diff --git a/examples/simultaneous-cursors/.env.production b/examples/simultaneous-cursors/.env.production new file mode 100644 index 000000000..dfb3cfe70 --- /dev/null +++ b/examples/simultaneous-cursors/.env.production @@ -0,0 +1,2 @@ +VITE_YORKIE_API_ADDR='https://api.yorkie.dev' +VITE_YORKIE_API_KEY='cedaovjuioqlk4pjqn6g' diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 113c226a9..ef17cf355 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -1,86 +1,67 @@ .cursor-selector-container { - /* z-index: 10; */ + /* z-index: 10; */ - height: 92px; - width: 192px; - + height: 92px; + width: 192px; - /* border: solid; */ + /* border: solid; */ - position: fixed; - bottom: 0; - right: 0; + position: fixed; + bottom: 0; + right: 0; - padding: 20px; + padding: 20px; - display: flex; - flex-direction: column; - justify-content: space-between; - - + display: flex; + flex-direction: column; + justify-content: space-between; } .cursor-selections-container { - /* border: solid; */ - - display: flex; - justify-content: space-between; - align-items: center; + /* border: solid; */ + display: flex; + justify-content: space-between; + align-items: center; } .num-users-container { - /* border: solid; */ - - border-radius: 8px; - background-color: rgba(27, 26, 26, 0.8); - - display: flex; - justify-content: center; - align-items: center; - - color: white; - - - height: 40px; - width: 192px; - + /* border: solid; */ + border-radius: 8px; + background-color: rgba(27, 26, 26, 0.8); + display: flex; + justify-content: center; + align-items: center; - + color: white; + height: 40px; + width: 192px; } - - .cursor-shape-selected { - /* cursor: none; */ + /* cursor: none; */ } .cursor-shape-not-selected { - /* cursor: none; */ - opacity: 0.5; - + /* cursor: none; */ + opacity: 0.5; } .cursor-shape-not-selected:hover { - opacity: 0.7; + opacity: 0.7; } - - - .cursor { - position: fixed; - left: 0; - top: 0; - /* background-color: none; */ - /* cursor: none; we don't have it here since when selecting options, cursor pops out */ + position: fixed; + left: 0; + top: 0; + /* background-color: none; */ + /* cursor: none; we don't have it here since when selecting options, cursor pops out */ } * { - /* cursor: none; */ - /* pointer-events: none; */ + /* cursor: none; */ + /* pointer-events: none; */ } - - diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 6ecb16ef8..28c6b53b4 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,19 +1,15 @@ import { useEffect, useRef, useState } from 'react'; import './App.css'; -import yorkie from 'yorkie-js-sdk'; +import yorkie, { DocEventType } from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; -const client = new yorkie.Client('https://api.yorkie.dev', { - apiKey: 'cinr4o2bjhd62lidlji0', - presence: { - name: '', - color: '', - }, +const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { + apiKey: import.meta.env.VITE_YORKIE_API_KEY, }); -const doc = new yorkie.Document('simult-cursors'); // some work some don't +const doc = new yorkie.Document('simult-cursors'); function App() { const cursorRef = useRef(null); @@ -43,52 +39,88 @@ function App() { }; useEffect(() => { + const setup = async () => { await client.activate(); - client.subscribe((event) => { - console.log(event.type, ' ------------- '); - - if (event.type === 'peers-changed') { - setClients(client.getPeersByDocKey(doc.getKey())); - - const getCommonValuesByProperty = (array1, array2, property) => { - return array1.filter((item1) => - array2.some((item2) => item2[property] === item1[property]), - ); - }; - - doc.update((root) => { - root.users = getCommonValuesByProperty( - root.users, - client.getPeersByDocKey(doc.getKey()), - 'clientID', - ); - }); + doc.subscribe('my-presence', (event) => { + console.log('my-presence ---------- ', event.type); + if (event.type === DocEventType.Initialized) { + console.log('doc.getPresences() -------- ', doc.getPresences()); + console.log(client.getID()); } - - if (event.type === 'documents-changed') { - doc.update((root) => { - setOtherClients(root.users); - }); + }); + doc.subscribe('others', (event) => { + console.log('others ---------- ', event.type); + if ( + event.type === DocEventType.Watched || + event.type === DocEventType.Unwatched + ) { + setOtherClients(doc.getPresences()); + setClients(doc.getPresences()); + console.log(doc.getPresences()); + console.log(client.getID()); } }); - setCurrClient(client.getID()); - - await client.attach(doc); - - doc.subscribe((event) => { - if (event.type === 'remote-change') { - doc.update((root) => { - setOtherClients(root.users); - }); - } + await client.attach(doc, { + initialPresence: { + name: '', + color: '', + }, }); + window.addEventListener('beforeunload', () => { + // client.detach(doc); client.deactivate(); }); + + // await client.activate(); + + // client.subscribe((event) => { + // console.log(event.type, ' ------------- '); + + // if (event.type === 'peers-changed') { + // setClients(client.getPeersByDocKey(doc.getKey())); + + // const getCommonValuesByProperty = (array1, array2, property) => { + // return array1.filter((item1) => + // array2.some((item2) => item2[property] === item1[property]), + // ); + // }; + + // doc.update((root) => { + // root.users = getCommonValuesByProperty( + // root.users, + // client.getPeersByDocKey(doc.getKey()), + // 'clientID', + // ); + // }); + // } + + // if (event.type === 'documents-changed') { + // doc.update((root) => { + // setOtherClients(root.users); + // }); + // } + // }); + + // setCurrClient(client.getID()); + + // await client.attach(doc); + + // doc.subscribe((event) => { + // if (event.type === 'remote-change') { + // doc.update((root) => { + // setOtherClients(root.users); + // }); + // } + // }); + + // window.addEventListener('beforeunload', () => { + // client.deactivate(); + // }); }; setup(); @@ -98,7 +130,7 @@ function App() { doc.update((root) => { root.users = []; - console.log(root.users, ' ------------- root.users'); + // console.log(root.users, ' ------------- root.users'); const clientIdx = root.users.findIndex((obj) => { return obj.clientID === client.getID(); diff --git a/examples/simultaneous-cursors/src/main.jsx b/examples/simultaneous-cursors/src/main.jsx index 265cbed70..0af95b532 100644 --- a/examples/simultaneous-cursors/src/main.jsx +++ b/examples/simultaneous-cursors/src/main.jsx @@ -3,7 +3,7 @@ import ReactDOM from 'react-dom/client'; import App from './App.jsx'; ReactDOM.createRoot(document.getElementById('root')).render( - + // - , + // , ); diff --git a/package-lock.json b/package-lock.json index 51954f4af..c6da3168d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "yorkie-js-sdk", - "version": "0.4.4", + "version": "0.4.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "yorkie-js-sdk", - "version": "0.4.4", + "version": "0.4.5", "license": "Apache-2.0", "workspaces": [ "examples/*" @@ -111,6 +111,194 @@ "vite": "^3.2.7" } }, + "examples/simultaneous-cursors": { + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "yorkie-js-sdk": "^0.4.5" + }, + "devDependencies": { + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^8.38.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "vite": "^4.3.9" + } + }, + "examples/simultaneous-cursors/node_modules/@esbuild/android-arm": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.16.tgz", + "integrity": "sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "examples/simultaneous-cursors/node_modules/@esbuild/linux-loong64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.16.tgz", + "integrity": "sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "examples/simultaneous-cursors/node_modules/@vitejs/plugin-react": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", + "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "examples/simultaneous-cursors/node_modules/esbuild": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.16.tgz", + "integrity": "sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.16", + "@esbuild/android-arm64": "0.18.16", + "@esbuild/android-x64": "0.18.16", + "@esbuild/darwin-arm64": "0.18.16", + "@esbuild/darwin-x64": "0.18.16", + "@esbuild/freebsd-arm64": "0.18.16", + "@esbuild/freebsd-x64": "0.18.16", + "@esbuild/linux-arm": "0.18.16", + "@esbuild/linux-arm64": "0.18.16", + "@esbuild/linux-ia32": "0.18.16", + "@esbuild/linux-loong64": "0.18.16", + "@esbuild/linux-mips64el": "0.18.16", + "@esbuild/linux-ppc64": "0.18.16", + "@esbuild/linux-riscv64": "0.18.16", + "@esbuild/linux-s390x": "0.18.16", + "@esbuild/linux-x64": "0.18.16", + "@esbuild/netbsd-x64": "0.18.16", + "@esbuild/openbsd-x64": "0.18.16", + "@esbuild/sunos-x64": "0.18.16", + "@esbuild/win32-arm64": "0.18.16", + "@esbuild/win32-ia32": "0.18.16", + "@esbuild/win32-x64": "0.18.16" + } + }, + "examples/simultaneous-cursors/node_modules/rollup": { + "version": "3.26.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", + "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "examples/simultaneous-cursors/node_modules/vite": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", + "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.26", + "rollup": "^3.25.2" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "examples/simultaneous-cursors/node_modules/yorkie-js-sdk": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/yorkie-js-sdk/-/yorkie-js-sdk-0.4.5.tgz", + "integrity": "sha512-PKlmM6xvsexMTAhJN6C918LJw0S8+MTXfcO2meqN2HAmvY3oERQbt0oNV6iib9ufpxbtn9Xoyez64eSYl7TBhg==", + "dependencies": { + "@types/google-protobuf": "^3.15.5", + "@types/long": "^4.0.1", + "google-protobuf": "^3.19.4", + "grpc-web": "^1.3.1", + "long": "^5.2.0" + } + }, "examples/vanilla-codemirror6": { "version": "0.0.0", "dependencies": { @@ -191,6 +379,15 @@ "examples/yorkie-js-sdk": { "extraneous": true }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -218,47 +415,47 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.2", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -269,9 +466,9 @@ } }, "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -281,22 +478,23 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dev": true, "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -328,15 +526,16 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -345,161 +544,176 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -531,9 +745,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", "bin": { "parser": "bin/babel-parser.js" }, @@ -591,12 +805,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -606,12 +820,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -637,33 +851,33 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -671,23 +885,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1049,81 +1254,425 @@ "node": ">=12" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", + "dev": true, + "dependencies": { + "comment-parser": "1.3.1", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "~3.1.0" + }, + "engines": { + "node": "^14 || ^16 || ^17 || ^18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.16.tgz", + "integrity": "sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.16.tgz", + "integrity": "sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz", + "integrity": "sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz", + "integrity": "sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.16.tgz", + "integrity": "sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.16.tgz", + "integrity": "sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.16.tgz", + "integrity": "sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.16.tgz", + "integrity": "sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.16.tgz", + "integrity": "sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.16.tgz", + "integrity": "sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.16.tgz", + "integrity": "sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.16.tgz", + "integrity": "sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.16.tgz", + "integrity": "sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.16.tgz", + "integrity": "sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.16.tgz", + "integrity": "sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.16.tgz", + "integrity": "sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.16.tgz", + "integrity": "sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=10.0.0" + "node": ">=12" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", - "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.16.tgz", + "integrity": "sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "comment-parser": "1.3.1", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~3.1.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14 || ^16 || ^17 || ^18" + "node": ">=12" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.16.tgz", + "integrity": "sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==", "cpu": [ - "arm" + "ia32" ], "dev": true, "optional": true, "os": [ - "android" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "node_modules/@esbuild/win32-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz", + "integrity": "sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==", "cpu": [ - "loong64" + "x64" ], "dev": true, "optional": true, "os": [ - "linux" + "win32" ], "engines": { "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", + "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1132,6 +1681,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -1140,6 +1692,21 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1152,6 +1719,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@floating-ui/core": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", @@ -1305,19 +1881,32 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1373,13 +1962,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@lezer/common": { @@ -2886,9 +3475,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.0.26", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", - "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "version": "18.2.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.16.tgz", + "integrity": "sha512-LLFWr12ZhBJ4YVw7neWLe6Pk7Ey5R9OCydfuMsz1L8bZxzaawJj2p06Q8/EFEHDeTBQNFLF62X+CG7B2zIyu0Q==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2896,9 +3485,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dev": true, "dependencies": { "@types/react": "*" @@ -3621,9 +4210,9 @@ } }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3831,12 +4420,44 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3846,6 +4467,75 @@ "node": ">=8" } }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -4393,9 +5083,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "funding": [ { @@ -4405,13 +5095,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -4499,9 +5193,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", "dev": true, "funding": [ { @@ -4511,6 +5205,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -5193,9 +5891,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/default-gateway": { @@ -5220,14 +5918,18 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/del": { @@ -5422,9 +6124,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.470", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", + "integrity": "sha512-zZM48Lmy2FKWgqyvsX9XK+J6FfP7aCDUFLmgooLJzA7v1agCs/sxSoBpTIwDLhmbhpx9yJIxj2INig/ncjJRqg==", "dev": true }, "node_modules/elliptic": { @@ -5525,31 +6227,50 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -5564,6 +6285,29 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -5972,46 +6716,48 @@ } }, "node_modules/eslint": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", - "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -6076,10 +6822,107 @@ "eslint": ">=7.28.0", "prettier": ">=2.0.0" }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", + "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-tsdoc": { @@ -6164,12 +7007,15 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/argparse": { @@ -6179,9 +7025,9 @@ "dev": true }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -6189,6 +7035,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -6212,6 +7061,21 @@ "node": ">=10.13.0" } }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -6225,17 +7089,20 @@ } }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -6252,9 +7119,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6560,7 +7427,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fastest-levenshtein": { @@ -6720,11 +7587,14 @@ } } }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } }, "node_modules/forwarded": { "version": "0.2.0", @@ -6789,12 +7659,38 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6823,13 +7719,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6910,18 +7807,27 @@ "dev": true }, "node_modules/globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/globby": { @@ -6949,12 +7855,30 @@ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.19.4.tgz", "integrity": "sha512-OIPNCxsG2lkIvf+P5FNfJ/Km95CsXOBecS9ZcAU6m2Rq3svc0Apl9nB3GMDNKfQ9asNv4KjyAqGwPQFrVle3Yg==" }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -7023,9 +7947,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7040,10 +7964,32 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -7493,12 +8439,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -7569,6 +8515,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -7610,9 +8570,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -7736,9 +8696,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" @@ -7757,9 +8717,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -7826,10 +8786,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7877,16 +8840,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -7908,12 +8867,12 @@ } }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7931,6 +8890,12 @@ "node": ">=8" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isbinaryfile": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", @@ -8235,6 +9200,21 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", + "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -9108,9 +10088,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-path": { @@ -9144,9 +10124,9 @@ } }, "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9176,14 +10156,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -9193,6 +10173,67 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -9271,17 +10312,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -9554,9 +10595,9 @@ } }, "node_modules/postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", + "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", "funding": [ { "type": "opencollective", @@ -9565,10 +10606,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -9577,9 +10622,15 @@ } }, "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9642,6 +10693,17 @@ "resolved": "examples/profile-stack", "link": true }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -10082,12 +11144,13 @@ "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -10279,12 +11342,44 @@ "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -10660,6 +11755,10 @@ "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, + "node_modules/simultaneous-cursors": { + "resolved": "examples/simultaneous-cursors", + "link": true + }, "node_modules/sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -11022,27 +12121,65 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11503,6 +12640,71 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "4.7.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", @@ -11548,14 +12750,14 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -11589,9 +12791,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -11601,6 +12803,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -11608,7 +12814,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -11750,12 +12956,6 @@ "uuid": "bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -12272,17 +13472,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12297,15 +13496,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", @@ -12537,6 +13727,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -12560,65 +13756,66 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" } }, "@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.2", + "semver": "^6.3.1" }, "dependencies": { "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dev": true, "requires": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -12640,135 +13837,148 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -12793,9 +14003,9 @@ } }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==" }, "@babel/plugin-syntax-jsx": { "version": "7.18.6", @@ -12829,21 +14039,21 @@ } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/runtime": { @@ -12862,50 +14072,42 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "dependencies": { @@ -13291,6 +14493,69 @@ "dev": true, "optional": true }, + "@esbuild/android-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.16.tgz", + "integrity": "sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.16.tgz", + "integrity": "sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz", + "integrity": "sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz", + "integrity": "sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.16.tgz", + "integrity": "sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.16.tgz", + "integrity": "sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.16.tgz", + "integrity": "sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.16.tgz", + "integrity": "sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.16.tgz", + "integrity": "sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==", + "dev": true, + "optional": true + }, "@esbuild/linux-loong64": { "version": "0.15.18", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", @@ -13298,16 +14563,108 @@ "dev": true, "optional": true }, + "@esbuild/linux-mips64el": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.16.tgz", + "integrity": "sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.16.tgz", + "integrity": "sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.16.tgz", + "integrity": "sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.16.tgz", + "integrity": "sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.16.tgz", + "integrity": "sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.16.tgz", + "integrity": "sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.16.tgz", + "integrity": "sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.16.tgz", + "integrity": "sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.16.tgz", + "integrity": "sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.16.tgz", + "integrity": "sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz", + "integrity": "sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", + "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -13321,6 +14678,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -13332,6 +14698,12 @@ } } }, + "@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true + }, "@floating-ui/core": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", @@ -13489,16 +14861,22 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -13545,13 +14923,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@lezer/common": { @@ -14835,9 +16213,9 @@ "dev": true }, "@types/react": { - "version": "18.0.26", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", - "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "version": "18.2.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.16.tgz", + "integrity": "sha512-LLFWr12ZhBJ4YVw7neWLe6Pk7Ey5R9OCydfuMsz1L8bZxzaawJj2p06Q8/EFEHDeTBQNFLF62X+CG7B2zIyu0Q==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -14845,9 +16223,9 @@ } }, "@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dev": true, "requires": { "@types/react": "*" @@ -15429,9 +16807,9 @@ } }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true }, "acorn-import-assertions": { @@ -15579,18 +16957,92 @@ } } }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -16064,15 +17516,15 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" } }, "buffer": { @@ -16131,9 +17583,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", "dev": true }, "chai": { @@ -16680,9 +18132,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-gateway": { @@ -16701,11 +18153,12 @@ "dev": true }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "del": { @@ -16871,9 +18324,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.470", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.470.tgz", + "integrity": "sha512-zZM48Lmy2FKWgqyvsX9XK+J6FfP7aCDUFLmgooLJzA7v1agCs/sxSoBpTIwDLhmbhpx9yJIxj2INig/ncjJRqg==", "dev": true }, "elliptic": { @@ -16958,31 +18411,50 @@ "dev": true }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" } }, "es-module-lexer": { @@ -16991,6 +18463,26 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -17197,46 +18689,48 @@ "dev": true }, "eslint": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", - "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "argparse": { @@ -17246,9 +18740,9 @@ "dev": true }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -17267,7 +18761,16 @@ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" } }, "js-yaml": { @@ -17316,6 +18819,77 @@ "prettier-linter-helpers": "^1.0.0" } }, + "eslint-plugin-react": { + "version": "7.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", + "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react-refresh": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", + "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", + "dev": true, + "requires": {} + }, "eslint-plugin-tsdoc": { "version": "0.2.16", "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.16.tgz", @@ -17384,20 +18958,20 @@ } }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -17407,9 +18981,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -17656,7 +19230,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastest-levenshtein": { @@ -17777,11 +19351,14 @@ "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } }, "forwarded": { "version": "0.2.0", @@ -17830,12 +19407,29 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -17855,13 +19449,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" } }, "get-nonce": { @@ -17915,12 +19510,18 @@ "dev": true }, "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "define-properties": "^1.1.3" } }, "globby": { @@ -17942,12 +19543,27 @@ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.19.4.tgz", "integrity": "sha512-OIPNCxsG2lkIvf+P5FNfJ/Km95CsXOBecS9ZcAU6m2Rq3svc0Apl9nB3GMDNKfQ9asNv4KjyAqGwPQFrVle3Yg==" }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -18000,9 +19616,9 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -18011,10 +19627,23 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", @@ -18345,12 +19974,12 @@ "dev": true }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -18408,6 +20037,17 @@ "has-tostringtag": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -18437,9 +20077,9 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-core-module": { @@ -18512,9 +20152,9 @@ } }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { @@ -18524,9 +20164,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -18569,10 +20209,13 @@ } }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -18599,16 +20242,12 @@ } }, "is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" } }, "is-unicode-supported": { @@ -18618,12 +20257,12 @@ "dev": true }, "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-wsl": { @@ -18635,6 +20274,12 @@ "is-docker": "^2.0.0" } }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "isbinaryfile": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", @@ -18878,6 +20523,18 @@ "graceful-fs": "^4.1.6" } }, + "jsx-ast-utils": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", + "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, "just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -19576,9 +21233,9 @@ } }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "normalize-path": { @@ -19603,9 +21260,9 @@ "dev": true }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true }, "object-is": { @@ -19623,17 +21280,60 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -19691,17 +21391,17 @@ "dev": true }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "os-browserify": { @@ -19915,19 +21615,19 @@ } }, "postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", + "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, "dependencies": { "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" } } }, @@ -19971,6 +21671,17 @@ "yorkie-js-sdk": "^0.4.2" } }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -20335,12 +22046,13 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" } }, "regexpp": { @@ -20468,12 +22180,35 @@ "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" }, + "safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -20782,6 +22517,113 @@ "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, + "simultaneous-cursors": { + "version": "file:examples/simultaneous-cursors", + "requires": { + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^8.38.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "vite": "^4.3.9", + "yorkie-js-sdk": "^0.4.5" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.16.tgz", + "integrity": "sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.16.tgz", + "integrity": "sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==", + "dev": true, + "optional": true + }, + "@vitejs/plugin-react": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", + "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", + "dev": true, + "requires": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + } + }, + "esbuild": { + "version": "0.18.16", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.16.tgz", + "integrity": "sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.16", + "@esbuild/android-arm64": "0.18.16", + "@esbuild/android-x64": "0.18.16", + "@esbuild/darwin-arm64": "0.18.16", + "@esbuild/darwin-x64": "0.18.16", + "@esbuild/freebsd-arm64": "0.18.16", + "@esbuild/freebsd-x64": "0.18.16", + "@esbuild/linux-arm": "0.18.16", + "@esbuild/linux-arm64": "0.18.16", + "@esbuild/linux-ia32": "0.18.16", + "@esbuild/linux-loong64": "0.18.16", + "@esbuild/linux-mips64el": "0.18.16", + "@esbuild/linux-ppc64": "0.18.16", + "@esbuild/linux-riscv64": "0.18.16", + "@esbuild/linux-s390x": "0.18.16", + "@esbuild/linux-x64": "0.18.16", + "@esbuild/netbsd-x64": "0.18.16", + "@esbuild/openbsd-x64": "0.18.16", + "@esbuild/sunos-x64": "0.18.16", + "@esbuild/win32-arm64": "0.18.16", + "@esbuild/win32-ia32": "0.18.16", + "@esbuild/win32-x64": "0.18.16" + } + }, + "rollup": { + "version": "3.26.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", + "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "vite": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", + "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.26", + "rollup": "^3.25.2" + } + }, + "yorkie-js-sdk": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/yorkie-js-sdk/-/yorkie-js-sdk-0.4.5.tgz", + "integrity": "sha512-PKlmM6xvsexMTAhJN6C918LJw0S8+MTXfcO2meqN2HAmvY3oERQbt0oNV6iib9ufpxbtn9Xoyez64eSYl7TBhg==", + "requires": { + "@types/google-protobuf": "^3.15.5", + "@types/long": "^4.0.1", + "google-protobuf": "^3.19.4", + "grpc-web": "^1.3.1", + "long": "^5.2.0" + } + } + } + }, "sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", @@ -21090,24 +22932,53 @@ "strip-ansi": "^6.0.0" } }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "strip-ansi": { @@ -21423,6 +23294,53 @@ "mime-types": "~2.1.24" } }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typescript": { "version": "4.7.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", @@ -21445,14 +23363,14 @@ "dev": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, @@ -21474,9 +23392,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -21585,12 +23503,6 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -21971,17 +23883,16 @@ } }, "which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" } }, "wildcard": { @@ -21990,12 +23901,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true - }, "workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", From e2ad8a8fabd15109553f54a35f7febc98622e83c Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 25 Jul 2023 18:18:40 +0900 Subject: [PATCH 04/36] Working on properly attaching doc. Promise Rejection taking place. --- .../simultaneous-cursors/package-lock.json | 3570 ----------------- examples/simultaneous-cursors/src/App.jsx | 163 +- 2 files changed, 78 insertions(+), 3655 deletions(-) delete mode 100644 examples/simultaneous-cursors/package-lock.json diff --git a/examples/simultaneous-cursors/package-lock.json b/examples/simultaneous-cursors/package-lock.json deleted file mode 100644 index 195ed450a..000000000 --- a/examples/simultaneous-cursors/package-lock.json +++ /dev/null @@ -1,3570 +0,0 @@ -{ - "name": "simultaneous-cursors", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "simultaneous-cursors", - "version": "0.0.0", - "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0", - "yorkie-js-sdk": "^0.4.5" - }, - "devDependencies": { - "@types/react": "^18.0.37", - "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", - "vite": "^4.3.9" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.14.tgz", - "integrity": "sha512-blODaaL+lngG5bdK/t4qZcQvq2BBqrABmYwqPPcS5VRxrCSGHb9R/rA3fqxh7R18I7WU4KKv+NYkt22FDfalcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.14.tgz", - "integrity": "sha512-rZ2v+Luba5/3D6l8kofWgTnqE+qsC/L5MleKIKFyllHTKHrNBMqeRCnZI1BtRx8B24xMYxeU32iIddRQqMsOsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.14.tgz", - "integrity": "sha512-qSwh8y38QKl+1Iqg+YhvCVYlSk3dVLk9N88VO71U4FUjtiSFylMWK3Ugr8GC6eTkkP4Tc83dVppt2n8vIdlSGg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.14.tgz", - "integrity": "sha512-9Hl2D2PBeDYZiNbnRKRWuxwHa9v5ssWBBjisXFkVcSP5cZqzZRFBUWEQuqBHO4+PKx4q4wgHoWtfQ1S7rUqJ2Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.14.tgz", - "integrity": "sha512-ZnI3Dg4ElQ6tlv82qLc/UNHtFsgZSKZ7KjsUNAo1BF1SoYDjkGKHJyCrYyWjFecmXpvvG/KJ9A/oe0H12odPLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.14.tgz", - "integrity": "sha512-h3OqR80Da4oQCIa37zl8tU5MwHQ7qgPV0oVScPfKJK21fSRZEhLE4IIVpmcOxfAVmqjU6NDxcxhYaM8aDIGRLw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.14.tgz", - "integrity": "sha512-ha4BX+S6CZG4BoH9tOZTrFIYC1DH13UTCRHzFc3GWX74nz3h/N6MPF3tuR3XlsNjMFUazGgm35MPW5tHkn2lzQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.14.tgz", - "integrity": "sha512-5+7vehI1iqru5WRtJyU2XvTOvTGURw3OZxe3YTdE9muNNIdmKAVmSHpB3Vw2LazJk2ifEdIMt/wTWnVe5V98Kg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.14.tgz", - "integrity": "sha512-IXORRe22In7U65NZCzjwAUc03nn8SDIzWCnfzJ6t/8AvGx5zBkcLfknI+0P+hhuftufJBmIXxdSTbzWc8X/V4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.14.tgz", - "integrity": "sha512-BfHlMa0nibwpjG+VXbOoqJDmFde4UK2gnW351SQ2Zd4t1N3zNdmUEqRkw/srC1Sa1DRBE88Dbwg4JgWCbNz/FQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.14.tgz", - "integrity": "sha512-j2/Ex++DRUWIAaUDprXd3JevzGtZ4/d7VKz+AYDoHZ3HjJzCyYBub9CU1wwIXN+viOP0b4VR3RhGClsvyt/xSw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.14.tgz", - "integrity": "sha512-qn2+nc+ZCrJmiicoAnJXJJkZWt8Nwswgu1crY7N+PBR8ChBHh89XRxj38UU6Dkthl2yCVO9jWuafZ24muzDC/A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.14.tgz", - "integrity": "sha512-aGzXzd+djqeEC5IRkDKt3kWzvXoXC6K6GyYKxd+wsFJ2VQYnOWE954qV2tvy5/aaNrmgPTb52cSCHFE+Z7Z0yg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.14.tgz", - "integrity": "sha512-8C6vWbfr0ygbAiMFLS6OPz0BHvApkT2gCboOGV76YrYw+sD/MQJzyITNsjZWDXJwPu9tjrFQOVG7zijRzBCnLw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.14.tgz", - "integrity": "sha512-G/Lf9iu8sRMM60OVGOh94ZW2nIStksEcITkXdkD09/T6QFD/o+g0+9WVyR/jajIb3A0LvBJ670tBnGe1GgXMgw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.14.tgz", - "integrity": "sha512-TBgStYBQaa3EGhgqIDM+ECnkreb0wkcKqL7H6m+XPcGUoU4dO7dqewfbm0mWEQYH3kzFHrzjOFNpSAVzDZRSJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.14.tgz", - "integrity": "sha512-stvCcjyCQR2lMTroqNhAbvROqRjxPEq0oQ380YdXxA81TaRJEucH/PzJ/qsEtsHgXlWFW6Ryr/X15vxQiyRXVg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.14.tgz", - "integrity": "sha512-apAOJF14CIsN5ht1PA57PboEMsNV70j3FUdxLmA2liZ20gEQnfTG5QU0FhENo5nwbTqCB2O3WDsXAihfODjHYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.14.tgz", - "integrity": "sha512-fYRaaS8mDgZcGybPn2MQbn1ZNZx+UXFSUoS5Hd2oEnlsyUcr/l3c6RnXf1bLDRKKdLRSabTmyCy7VLQ7VhGdOQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.14.tgz", - "integrity": "sha512-1c44RcxKEJPrVj62XdmYhxXaU/V7auELCmnD+Ri+UCt+AGxTvzxl9uauQhrFso8gj6ZV1DaORV0sT9XSHOAk8Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.14.tgz", - "integrity": "sha512-EXAFttrdAxZkFQmpvcAQ2bywlWUsONp/9c2lcfvPUhu8vXBBenCXpoq9YkUvVP639ld3YGiYx0YUQ6/VQz3Maw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.14.tgz", - "integrity": "sha512-K0QjGbcskx+gY+qp3v4/940qg8JitpXbdxFhRDA1aYoNaPff88+aEwoq45aqJ+ogpxQxmU0ZTjgnrQD/w8iiUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/google-protobuf": { - "version": "3.15.6", - "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.6.tgz", - "integrity": "sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.15.tgz", - "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", - "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", - "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.466", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.466.tgz", - "integrity": "sha512-TSkRvbXRXD8BwhcGlZXDsbI2lRoP8dvqR7LQnqQNk9KxXBc4tG8O+rTuXgTyIpEdiqSGKEBSqrxdqEntnjNncA==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.18.14", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.14.tgz", - "integrity": "sha512-uNPj5oHPYmj+ZhSQeYQVFZ+hAlJZbAGOmmILWIqrGvPVlNLbyOvU5Bu6Woi8G8nskcx0vwY0iFoMPrzT86Ko+w==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.14", - "@esbuild/android-arm64": "0.18.14", - "@esbuild/android-x64": "0.18.14", - "@esbuild/darwin-arm64": "0.18.14", - "@esbuild/darwin-x64": "0.18.14", - "@esbuild/freebsd-arm64": "0.18.14", - "@esbuild/freebsd-x64": "0.18.14", - "@esbuild/linux-arm": "0.18.14", - "@esbuild/linux-arm64": "0.18.14", - "@esbuild/linux-ia32": "0.18.14", - "@esbuild/linux-loong64": "0.18.14", - "@esbuild/linux-mips64el": "0.18.14", - "@esbuild/linux-ppc64": "0.18.14", - "@esbuild/linux-riscv64": "0.18.14", - "@esbuild/linux-s390x": "0.18.14", - "@esbuild/linux-x64": "0.18.14", - "@esbuild/netbsd-x64": "0.18.14", - "@esbuild/openbsd-x64": "0.18.14", - "@esbuild/sunos-x64": "0.18.14", - "@esbuild/win32-arm64": "0.18.14", - "@esbuild/win32-ia32": "0.18.14", - "@esbuild/win32-x64": "0.18.14" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz", - "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/google-protobuf": { - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", - "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==" - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/grpc-web": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.4.2.tgz", - "integrity": "sha512-gUxWq42l5ldaRplcKb4Pw5O4XBONWZgz3vxIIXnfIeJj8Jc3wYiq2O4c9xzx/NGbbPEej4rhI62C9eTENwLGNw==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.26.tgz", - "integrity": "sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.26.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", - "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vite": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.4.tgz", - "integrity": "sha512-4mvsTxjkveWrKDJI70QmelfVqTm+ihFAb6+xf4sjEU2TmUCTlVX87tmg/QooPEMQb/lM9qGHT99ebqPziEd3wg==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.25", - "rollup": "^3.25.2" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yorkie-js-sdk": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/yorkie-js-sdk/-/yorkie-js-sdk-0.4.5.tgz", - "integrity": "sha512-PKlmM6xvsexMTAhJN6C918LJw0S8+MTXfcO2meqN2HAmvY3oERQbt0oNV6iib9ufpxbtn9Xoyez64eSYl7TBhg==", - "dependencies": { - "@types/google-protobuf": "^3.15.5", - "@types/long": "^4.0.1", - "google-protobuf": "^3.19.4", - "grpc-web": "^1.3.1", - "long": "^5.2.0" - } - } - } -} diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 28c6b53b4..efc0b9c6c 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -5,11 +5,14 @@ import yorkie, { DocEventType } from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; -const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { - apiKey: import.meta.env.VITE_YORKIE_API_KEY, -}); +// const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { +// apiKey: import.meta.env.VITE_YORKIE_API_KEY, +// }); +// const client = new yorkie.Client('https://api.yorkie.dev', { +// apiKey: 'cinr4o2bjhd62lidlji0', +// }); -const doc = new yorkie.Document('simult-cursors'); +// const doc = new yorkie.Document('test'); function App() { const cursorRef = useRef(null); @@ -38,89 +41,79 @@ function App() { }); }; + + + + + useEffect(() => { - const setup = async () => { - await client.activate(); + try { + const client = new yorkie.Client('https://api.yorkie.dev', { + apiKey: 'cinr4o2bjhd62lidlji0', + }); - doc.subscribe('my-presence', (event) => { - console.log('my-presence ---------- ', event.type); - if (event.type === DocEventType.Initialized) { - console.log('doc.getPresences() -------- ', doc.getPresences()); - console.log(client.getID()); - } - }); - doc.subscribe('others', (event) => { - console.log('others ---------- ', event.type); - if ( - event.type === DocEventType.Watched || - event.type === DocEventType.Unwatched - ) { - setOtherClients(doc.getPresences()); - setClients(doc.getPresences()); - console.log(doc.getPresences()); - console.log(client.getID()); - } - }); + const doc = new yorkie.Document('test'); + await client.activate(); - await client.attach(doc, { - initialPresence: { - name: '', - color: '', - }, - }); + doc.subscribe('presence', (event) => { + if (event.type !== DocEventType.PresenceChanged) { + setClients(doc.getPresences()); + setOtherClients(doc.getPresences()); + // console.log('doc.getPresences() -------- ', ); + // console.log(client.getID()); + } + }); + doc.subscribe('my-presence', (event) => { + console.log('my-presence ---------- ', event.type); + if (event.type === DocEventType.Initialized) { + console.log('doc.getPresences() -------- ', doc.getPresences()); + console.log(client.getID()); + } + }); + doc.subscribe('others', (event) => { + console.log('others ---------- ', event.type); + if ( + event.type === DocEventType.Watched || + event.type === DocEventType.Unwatched + ) { + setOtherClients(doc.getPresences()); + setClients(doc.getPresences()); + console.log(doc.getPresences()); + console.log(client.getID()); + } + }); - window.addEventListener('beforeunload', () => { - // client.detach(doc); - client.deactivate(); - }); + try { + await client.attach(doc, { + initialPresence: { + name: '', + color: '', + }, + }); + } catch (err) { + console.log(' ---------err', err) + } - // await client.activate(); - - // client.subscribe((event) => { - // console.log(event.type, ' ------------- '); - - // if (event.type === 'peers-changed') { - // setClients(client.getPeersByDocKey(doc.getKey())); - - // const getCommonValuesByProperty = (array1, array2, property) => { - // return array1.filter((item1) => - // array2.some((item2) => item2[property] === item1[property]), - // ); - // }; - - // doc.update((root) => { - // root.users = getCommonValuesByProperty( - // root.users, - // client.getPeersByDocKey(doc.getKey()), - // 'clientID', - // ); - // }); - // } - - // if (event.type === 'documents-changed') { - // doc.update((root) => { - // setOtherClients(root.users); - // }); - // } - // }); - - // setCurrClient(client.getID()); - - // await client.attach(doc); - - // doc.subscribe((event) => { - // if (event.type === 'remote-change') { - // doc.update((root) => { - // setOtherClients(root.users); - // }); - // } - // }); - - // window.addEventListener('beforeunload', () => { - // client.deactivate(); - // }); + await client.attach(doc, { + initialPresence: { + name: '', + color: '', + }, + }); + + console.log(' ------- print marker 1'); + + window.addEventListener('beforeunload', () => { + // client.detach(doc); + client.deactivate(); + }); + console.log(' ------- print marker 2'); + } catch (err) { + console.log(' ---------err', err); + console.log(' ---------err', err.message); + } }; setup(); @@ -149,7 +142,7 @@ function App() { }); }; - window.addEventListener('mousemove', handleMouseMove); + // window.addEventListener('mousemove', handleMouseMove); return () => { window.removeEventListener('mousemove', handleMouseMove); @@ -158,7 +151,7 @@ function App() { return (
- {otherClients.map((user) => { + {/* {otherClients.map((user) => { return user.clientID !== client.getID() ? ( ) : ( @@ -177,9 +170,9 @@ function App() { ({mousePos.x}, {mousePos.y}) ------ clients.length {clients.length} - ------ clients.length {currClient} + ------ clients.length {currClient} */} {/* */} -
+ {/*
handleCursorShapeSelect('heart')} @@ -226,7 +219,7 @@ function App() {

1 user here

)}
-
+
*/}
); } From 861d7f0a469ec265a8e0309ea7f1e5a1773dd587 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 25 Jul 2023 18:30:04 +0900 Subject: [PATCH 05/36] Working on properly attaching doc. Promise Rejection taking place. Testing with try catch block. --- examples/simultaneous-cursors/src/App.jsx | 153 ++++++++++------------ 1 file changed, 69 insertions(+), 84 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index efc0b9c6c..2bb7c2456 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -27,24 +27,19 @@ function App() { const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); - const handleCursorShapeSelect = async (cursorShape) => { - setSelectedCursorShape(cursorShape); - - doc.update((root) => { - const clientIdx = root.users.findIndex((obj) => { - return obj.clientID === client.getID(); - }); - - if (clientIdx !== -1) { - root.users[clientIdx].cursorShape = cursorShape; - } - }); - }; - - - + // const handleCursorShapeSelect = async (cursorShape) => { + // setSelectedCursorShape(cursorShape); + // doc.update((root) => { + // const clientIdx = root.users.findIndex((obj) => { + // return obj.clientID === client.getID(); + // }); + // if (clientIdx !== -1) { + // root.users[clientIdx].cursorShape = cursorShape; + // } + // }); + // }; useEffect(() => { const setup = async () => { @@ -53,48 +48,38 @@ function App() { apiKey: 'cinr4o2bjhd62lidlji0', }); - const doc = new yorkie.Document('test'); await client.activate(); - doc.subscribe('presence', (event) => { - if (event.type !== DocEventType.PresenceChanged) { - setClients(doc.getPresences()); - setOtherClients(doc.getPresences()); - // console.log('doc.getPresences() -------- ', ); - // console.log(client.getID()); - } - }); - doc.subscribe('my-presence', (event) => { - console.log('my-presence ---------- ', event.type); - if (event.type === DocEventType.Initialized) { - console.log('doc.getPresences() -------- ', doc.getPresences()); - console.log(client.getID()); - } - }); - - doc.subscribe('others', (event) => { - console.log('others ---------- ', event.type); - if ( - event.type === DocEventType.Watched || - event.type === DocEventType.Unwatched - ) { - setOtherClients(doc.getPresences()); - setClients(doc.getPresences()); - console.log(doc.getPresences()); - console.log(client.getID()); - } - }); + const doc = new yorkie.Document('test'); - try { - await client.attach(doc, { - initialPresence: { - name: '', - color: '', - }, - }); - } catch (err) { - console.log(' ---------err', err) - } + // doc.subscribe('presence', (event) => { + // if (event.type !== DocEventType.PresenceChanged) { + // setClients(doc.getPresences()); + // setOtherClients(doc.getPresences()); + // // console.log('doc.getPresences() -------- ', ); + // // console.log(client.getID()); + // } + // }); + // doc.subscribe('my-presence', (event) => { + // console.log('my-presence ---------- ', event.type); + // if (event.type === DocEventType.Initialized) { + // console.log('doc.getPresences() -------- ', doc.getPresences()); + // console.log(client.getID()); + // } + // }); + + // doc.subscribe('others', (event) => { + // console.log('others ---------- ', event.type); + // if ( + // event.type === DocEventType.Watched || + // event.type === DocEventType.Unwatched + // ) { + // setOtherClients(doc.getPresences()); + // setClients(doc.getPresences()); + // console.log(doc.getPresences()); + // console.log(client.getID()); + // } + // }); await client.attach(doc, { initialPresence: { @@ -110,43 +95,43 @@ function App() { client.deactivate(); }); console.log(' ------- print marker 2'); - } catch (err) { - console.log(' ---------err', err); - console.log(' ---------err', err.message); + } catch (error) { + console.log(' --------- error', error); + console.log(' --------- error', error.message); } }; setup(); - const handleMouseMove = (event) => { - setMousePos({ x: event.clientX, y: event.clientY }); - - doc.update((root) => { - root.users = []; - // console.log(root.users, ' ------------- root.users'); - - const clientIdx = root.users.findIndex((obj) => { - return obj.clientID === client.getID(); - }); - - if (clientIdx !== -1) { - root.users[clientIdx].xPos = event.clientX; - root.users[clientIdx].yPos = event.clientY; - } else { - root.users.push({ - clientID: client.getID(), - xPos: event.clientX, - yPos: event.clientY, - }); - } - }); - }; + // const handleMouseMove = (event) => { + // setMousePos({ x: event.clientX, y: event.clientY }); + + // doc.update((root) => { + // root.users = []; + // // console.log(root.users, ' ------------- root.users'); + + // const clientIdx = root.users.findIndex((obj) => { + // return obj.clientID === client.getID(); + // }); + + // if (clientIdx !== -1) { + // root.users[clientIdx].xPos = event.clientX; + // root.users[clientIdx].yPos = event.clientY; + // } else { + // root.users.push({ + // clientID: client.getID(), + // xPos: event.clientX, + // yPos: event.clientY, + // }); + // } + // }); + // }; // window.addEventListener('mousemove', handleMouseMove); - return () => { - window.removeEventListener('mousemove', handleMouseMove); - }; + // return () => { + // window.removeEventListener('mousemove', handleMouseMove); + // }; }, []); return ( From 7c4151d2f52830e29b7af7c47b7e77accc11145d Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 27 Jul 2023 13:47:37 +0900 Subject: [PATCH 06/36] Delete unneeded icon files. Update docker yml file to 0.4.5. --- docker/docker-compose.yml | 2 +- examples/simultaneous-cursors/src/App.jsx | 70 ++++++++--------- .../src/assets/icons/clock.svg | 3 - .../src/assets/icons/community_help.svg | 64 --------------- .../src/assets/icons/error_404.svg | 63 --------------- .../src/assets/icons/error_500.svg | 64 --------------- .../src/assets/icons/icon_Transfer.svg | 10 --- .../src/assets/icons/icon_add_member.svg | 3 - .../src/assets/icons/icon_alert.svg | 3 - .../src/assets/icons/icon_alert_danger.svg | 10 --- .../src/assets/icons/icon_alert_info.svg | 10 --- .../src/assets/icons/icon_alert_success.svg | 10 --- .../src/assets/icons/icon_alert_warning.svg | 3 - .../src/assets/icons/icon_arrow.svg | 3 - .../src/assets/icons/icon_arrow2.svg | 3 - .../src/assets/icons/icon_arrow_back.svg | 3 - .../src/assets/icons/icon_arrow_back2.svg | 3 - .../assets/icons/icon_arrow_circle_right.svg | 3 - .../src/assets/icons/icon_arrow_product.svg | 3 - .../src/assets/icons/icon_back.svg | 3 - .../src/assets/icons/icon_back_home.svg | 3 - .../src/assets/icons/icon_book.svg | 3 - .../src/assets/icons/icon_branch.svg | 3 - .../src/assets/icons/icon_bulb.svg | 3 - .../src/assets/icons/icon_chart.svg | 3 - .../src/assets/icons/icon_check.svg | 3 - .../src/assets/icons/icon_check_circle.svg | 3 - .../icons/icon_checkbox_fill_circle.svg | 4 - .../icons/icon_checkbox_fill_square.svg | 5 -- .../src/assets/icons/icon_circle.svg | 3 - .../src/assets/icons/icon_circle_close.svg | 10 --- .../src/assets/icons/icon_circle_filled.svg | 3 - .../assets/icons/icon_circle_quetion_mark.svg | 10 --- .../src/assets/icons/icon_clock.svg | 3 - .../src/assets/icons/icon_close.svg | 3 - .../src/assets/icons/icon_close_small.svg | 3 - .../src/assets/icons/icon_cloud.svg | 3 - .../src/assets/icons/icon_cloud_border.svg | 4 - .../src/assets/icons/icon_cloud_orange.svg | 3 - .../src/assets/icons/icon_code_snippet.svg | 3 - .../assets/icons/icon_collaborate_cursor.svg | 78 ------------------- .../assets/icons/icon_collaborate_editing.svg | 71 ----------------- .../assets/icons/icon_collaborate_profile.svg | 22 ------ .../icons/icon_collaborate_selection.svg | 28 ------- .../src/assets/icons/icon_connect.svg | 10 --- .../src/assets/icons/icon_container.svg | 3 - .../src/assets/icons/icon_copy.svg | 10 --- .../icons/icon_dashboard_user_green.svg | 12 --- .../icons/icon_dashboard_user_purple.svg | 12 --- .../assets/icons/icon_dashboard_user_red.svg | 12 --- .../icons/icon_dashboard_user_yellow.svg | 12 --- .../src/assets/icons/icon_diamond.svg | 3 - .../src/assets/icons/icon_discord.svg | 1 - .../src/assets/icons/icon_edit.svg | 3 - .../src/assets/icons/icon_expand.svg | 3 - .../src/assets/icons/icon_eye.svg | 3 - .../src/assets/icons/icon_eye_off.svg | 3 - .../src/assets/icons/icon_file.svg | 3 - .../src/assets/icons/icon_folder.svg | 3 - .../src/assets/icons/icon_folder_open.svg | 4 - .../src/assets/icons/icon_github.svg | 3 - .../src/assets/icons/icon_gnb_menu.svg | 3 - .../src/assets/icons/icon_google.svg | 9 --- .../src/assets/icons/icon_input.svg | 4 - .../src/assets/icons/icon_key.svg | 3 - .../src/assets/icons/icon_keynote.svg | 10 --- .../src/assets/icons/icon_line.svg | 4 - .../src/assets/icons/icon_link.svg | 3 - .../src/assets/icons/icon_lock.svg | 3 - .../src/assets/icons/icon_lock_small.svg | 3 - .../src/assets/icons/icon_logo_text.svg | 11 --- .../src/assets/icons/icon_member_email.svg | 3 - .../src/assets/icons/icon_menu.svg | 3 - .../src/assets/icons/icon_message.svg | 3 - .../src/assets/icons/icon_message_smile.svg | 3 - .../src/assets/icons/icon_message_square.svg | 3 - .../src/assets/icons/icon_minimize.svg | 3 - .../src/assets/icons/icon_more.svg | 3 - .../src/assets/icons/icon_more_large.svg | 5 -- .../src/assets/icons/icon_naver.svg | 9 --- .../src/assets/icons/icon_next.svg | 4 - .../src/assets/icons/icon_open_selector.svg | 3 - .../src/assets/icons/icon_package.svg | 4 - .../src/assets/icons/icon_pie_chart.svg | 10 --- .../src/assets/icons/icon_pin.svg | 3 - .../src/assets/icons/icon_play.svg | 3 - .../src/assets/icons/icon_plus.svg | 3 - .../src/assets/icons/icon_previous.svg | 4 - .../src/assets/icons/icon_recorder.svg | 3 - .../src/assets/icons/icon_refresh.svg | 3 - .../src/assets/icons/icon_repeat.svg | 10 --- .../src/assets/icons/icon_report.svg | 3 - .../src/assets/icons/icon_route.svg | 3 - .../src/assets/icons/icon_search.svg | 3 - .../src/assets/icons/icon_secenario.svg | 3 - .../icons/icon_service_main_users_alone.svg | 10 --- .../icons/icon_service_main_users_group.svg | 22 ------ .../src/assets/icons/icon_setting.svg | 4 - .../src/assets/icons/icon_short_cut.svg | 3 - .../src/assets/icons/icon_shuffle.svg | 3 - .../src/assets/icons/icon_slack.svg | 9 --- .../src/assets/icons/icon_smile.svg | 3 - .../src/assets/icons/icon_square.svg | 3 - .../src/assets/icons/icon_square_check.svg | 3 - .../assets/icons/icon_square_exclamation.svg | 3 - .../assets/icons/icon_stable_monitoring.svg | 17 ---- .../src/assets/icons/icon_stable_server.svg | 9 --- .../src/assets/icons/icon_stable_sharing.svg | 22 ------ .../src/assets/icons/icon_star.svg | 3 - .../src/assets/icons/icon_star_full.svg | 4 - .../src/assets/icons/icon_stars.svg | 10 --- .../assets/icons/icon_system_user_green.svg | 9 --- .../assets/icons/icon_system_user_pink.svg | 9 --- .../assets/icons/icon_system_user_purple.svg | 9 --- .../src/assets/icons/icon_tool.svg | 3 - .../src/assets/icons/icon_top_button.svg | 4 - .../src/assets/icons/icon_trash.svg | 3 - .../src/assets/icons/icon_twinkle.svg | 3 - .../src/assets/icons/icon_unconnect.svg | 10 --- .../src/assets/icons/icon_upload.svg | 3 - .../src/assets/icons/icon_users.svg | 3 - .../src/assets/icons/icon_view_full.svg | 3 - .../src/assets/icons/icon_view_grid.svg | 3 - .../src/assets/icons/icon_view_list.svg | 3 - .../src/assets/icons/icon_view_show.svg | 7 -- .../src/assets/icons/icon_view_split.svg | 3 - .../src/assets/icons/logo.svg | 11 --- .../src/assets/icons/logo_3d.svg | 15 ---- .../src/assets/icons/logo_3d_2.svg | 9 --- .../src/assets/icons/logo_3d_side.svg | 15 ---- .../src/assets/icons/logo_footer.svg | 11 --- .../src/assets/icons/logo_gnb.svg | 5 -- .../src/assets/icons/logo_horizontal_l.svg | 11 --- .../src/assets/icons/logo_horizontal_s.svg | 11 --- .../assets/icons/logo_horizontal_s_gray.svg | 11 --- .../src/assets/icons/logo_horizontal_xs.svg | 14 ---- .../src/assets/icons/logo_no_text.svg | 5 -- .../src/assets/icons/plus.svg | 3 - .../src/assets/icons/pop_remove.svg | 3 - .../src/assets/icons/star.svg | 3 - 140 files changed, 36 insertions(+), 1157 deletions(-) delete mode 100644 examples/simultaneous-cursors/src/assets/icons/clock.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/community_help.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/error_404.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/error_500.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_back.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_book.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_branch.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_chart.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_check.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_clock.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_close.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_connect.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_container.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_copy.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_discord.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_edit.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_expand.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_eye.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_file.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_folder.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_github.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_google.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_input.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_key.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_line.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_link.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_lock.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_menu.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_message.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_more.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_naver.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_next.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_package.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_pin.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_play.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_plus.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_previous.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_report.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_route.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_search.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_setting.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_slack.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_smile.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_square.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_star.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_stars.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_tool.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_trash.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_upload.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_users.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_3d.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_footer.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/plus.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/pop_remove.svg delete mode 100644 examples/simultaneous-cursors/src/assets/icons/star.svg diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 0b8c865a1..27a1542d7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -22,7 +22,7 @@ services: extra_hosts: - "host.docker.internal:host-gateway" yorkie: - image: 'yorkieteam/yorkie:latest' + image: 'yorkieteam/yorkie:0.4.5' container_name: 'yorkie' command: [ 'server', diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 2bb7c2456..dd3f3c528 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -5,14 +5,14 @@ import yorkie, { DocEventType } from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; -// const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { -// apiKey: import.meta.env.VITE_YORKIE_API_KEY, -// }); +const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { + apiKey: import.meta.env.VITE_YORKIE_API_KEY, +}); // const client = new yorkie.Client('https://api.yorkie.dev', { // apiKey: 'cinr4o2bjhd62lidlji0', // }); -// const doc = new yorkie.Document('test'); +const doc = new yorkie.Document('test'); function App() { const cursorRef = useRef(null); @@ -44,42 +44,42 @@ function App() { useEffect(() => { const setup = async () => { try { - const client = new yorkie.Client('https://api.yorkie.dev', { - apiKey: 'cinr4o2bjhd62lidlji0', - }); + // const client = new yorkie.Client('https://api.yorkie.dev', { + // apiKey: 'cinr4o2bjhd62lidlji0', + // }); await client.activate(); - const doc = new yorkie.Document('test'); + // const doc = new yorkie.Document('test'); - // doc.subscribe('presence', (event) => { - // if (event.type !== DocEventType.PresenceChanged) { - // setClients(doc.getPresences()); - // setOtherClients(doc.getPresences()); - // // console.log('doc.getPresences() -------- ', ); - // // console.log(client.getID()); - // } - // }); - // doc.subscribe('my-presence', (event) => { - // console.log('my-presence ---------- ', event.type); - // if (event.type === DocEventType.Initialized) { - // console.log('doc.getPresences() -------- ', doc.getPresences()); - // console.log(client.getID()); - // } - // }); + doc.subscribe('presence', (event) => { + if (event.type !== DocEventType.PresenceChanged) { + setClients(doc.getPresences()); + setOtherClients(doc.getPresences()); + // console.log('doc.getPresences() -------- ', ); + // console.log(client.getID()); + } + }); + doc.subscribe('my-presence', (event) => { + console.log('my-presence ---------- ', event.type); + if (event.type === DocEventType.Initialized) { + console.log('doc.getPresences() -------- ', doc.getPresences()); + console.log(client.getID()); + } + }); - // doc.subscribe('others', (event) => { - // console.log('others ---------- ', event.type); - // if ( - // event.type === DocEventType.Watched || - // event.type === DocEventType.Unwatched - // ) { - // setOtherClients(doc.getPresences()); - // setClients(doc.getPresences()); - // console.log(doc.getPresences()); - // console.log(client.getID()); - // } - // }); + doc.subscribe('others', (event) => { + console.log('others ---------- ', event.type); + if ( + event.type === DocEventType.Watched || + event.type === DocEventType.Unwatched + ) { + setOtherClients(doc.getPresences()); + setClients(doc.getPresences()); + console.log(doc.getPresences()); + console.log(client.getID()); + } + }); await client.attach(doc, { initialPresence: { diff --git a/examples/simultaneous-cursors/src/assets/icons/clock.svg b/examples/simultaneous-cursors/src/assets/icons/clock.svg deleted file mode 100644 index 5fd10bc29..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/community_help.svg b/examples/simultaneous-cursors/src/assets/icons/community_help.svg deleted file mode 100644 index 623e5fff0..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/community_help.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/error_404.svg b/examples/simultaneous-cursors/src/assets/icons/error_404.svg deleted file mode 100644 index 79c827c33..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/error_404.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/error_500.svg b/examples/simultaneous-cursors/src/assets/icons/error_500.svg deleted file mode 100644 index a865ef792..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/error_500.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg b/examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg deleted file mode 100644 index 2bb5abf29..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_Transfer.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg b/examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg deleted file mode 100644 index a73ce30a5..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_add_member.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert.svg deleted file mode 100644 index 45dc4b414..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_alert.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg deleted file mode 100644 index 30303fe42..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_alert_danger.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg deleted file mode 100644 index e28c61987..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_alert_info.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg deleted file mode 100644 index 08bc38517..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_alert_success.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg b/examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg deleted file mode 100644 index aba84326c..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_alert_warning.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg deleted file mode 100644 index f9b7b3707..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_arrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg deleted file mode 100644 index 4e2b334ce..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_arrow2.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg deleted file mode 100644 index d3999329b..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg deleted file mode 100644 index 87429bc90..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_back2.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg deleted file mode 100644 index 2fb8bdac8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_circle_right.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg b/examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg deleted file mode 100644 index 0cc837673..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_arrow_product.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_back.svg b/examples/simultaneous-cursors/src/assets/icons/icon_back.svg deleted file mode 100644 index 257e6a4df..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_back.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg b/examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg deleted file mode 100644 index 2c34b7150..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_back_home.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_book.svg b/examples/simultaneous-cursors/src/assets/icons/icon_book.svg deleted file mode 100644 index 2c1091904..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_book.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_branch.svg b/examples/simultaneous-cursors/src/assets/icons/icon_branch.svg deleted file mode 100644 index 88eae73b4..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_branch.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg b/examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg deleted file mode 100644 index 036aee09e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_bulb.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_chart.svg b/examples/simultaneous-cursors/src/assets/icons/icon_chart.svg deleted file mode 100644 index 2575e68b8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_chart.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_check.svg b/examples/simultaneous-cursors/src/assets/icons/icon_check.svg deleted file mode 100644 index 0645a67b7..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_check.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg deleted file mode 100644 index 63f1ed165..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_check_circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg deleted file mode 100644 index 6421dfae1..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_circle.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg b/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg deleted file mode 100644 index aaf1b68bf..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_checkbox_fill_square.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle.svg deleted file mode 100644 index 78d3aa6a3..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_circle.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg deleted file mode 100644 index 0d17fffd2..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_circle_close.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg deleted file mode 100644 index 61d258567..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_circle_filled.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg b/examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg deleted file mode 100644 index 927948fe6..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_circle_quetion_mark.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_clock.svg b/examples/simultaneous-cursors/src/assets/icons/icon_clock.svg deleted file mode 100644 index 5fd10bc29..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_close.svg b/examples/simultaneous-cursors/src/assets/icons/icon_close.svg deleted file mode 100644 index 23214b7d7..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_close.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg b/examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg deleted file mode 100644 index 66c593c9e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_close_small.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg deleted file mode 100644 index 06d8ad10a..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg deleted file mode 100644 index 69690714e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_cloud_border.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg deleted file mode 100644 index 88e0ca113..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_cloud_orange.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg b/examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg deleted file mode 100644 index 35c104a2f..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_code_snippet.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg deleted file mode 100644 index f8bbff404..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_cursor.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg deleted file mode 100644 index bd9d124d6..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_editing.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg deleted file mode 100644 index 0f9eb47d7..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_profile.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg b/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg deleted file mode 100644 index 1cae4163d..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_collaborate_selection.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_connect.svg b/examples/simultaneous-cursors/src/assets/icons/icon_connect.svg deleted file mode 100644 index 89d04f939..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_connect.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_container.svg b/examples/simultaneous-cursors/src/assets/icons/icon_container.svg deleted file mode 100644 index 6c8d3d712..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_container.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_copy.svg b/examples/simultaneous-cursors/src/assets/icons/icon_copy.svg deleted file mode 100644 index 520a8b4d4..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_copy.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg deleted file mode 100644 index c71c6c762..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_green.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg deleted file mode 100644 index 59690cdf8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_purple.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg deleted file mode 100644 index 3ff7c7386..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_red.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg b/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg deleted file mode 100644 index b8d3e8aa4..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_dashboard_user_yellow.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg b/examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg deleted file mode 100644 index 52b4c1062..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_diamond.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_discord.svg b/examples/simultaneous-cursors/src/assets/icons/icon_discord.svg deleted file mode 100644 index 4b7477340..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_discord.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_edit.svg b/examples/simultaneous-cursors/src/assets/icons/icon_edit.svg deleted file mode 100644 index c4e04b717..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_edit.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_expand.svg b/examples/simultaneous-cursors/src/assets/icons/icon_expand.svg deleted file mode 100644 index 197e01c9b..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_expand.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_eye.svg b/examples/simultaneous-cursors/src/assets/icons/icon_eye.svg deleted file mode 100644 index 707af350b..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_eye.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg b/examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg deleted file mode 100644 index aba55f355..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_eye_off.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_file.svg b/examples/simultaneous-cursors/src/assets/icons/icon_file.svg deleted file mode 100644 index 555c96eb6..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_file.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_folder.svg b/examples/simultaneous-cursors/src/assets/icons/icon_folder.svg deleted file mode 100644 index d7add9648..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_folder.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg b/examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg deleted file mode 100644 index eff4c13e6..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_folder_open.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_github.svg b/examples/simultaneous-cursors/src/assets/icons/icon_github.svg deleted file mode 100644 index 8756cf33b..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_github.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg b/examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg deleted file mode 100644 index a7ffcedc8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_gnb_menu.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_google.svg b/examples/simultaneous-cursors/src/assets/icons/icon_google.svg deleted file mode 100644 index 06deff153..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_google.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_input.svg b/examples/simultaneous-cursors/src/assets/icons/icon_input.svg deleted file mode 100644 index 063638ace..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_input.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_key.svg b/examples/simultaneous-cursors/src/assets/icons/icon_key.svg deleted file mode 100644 index 0861c8417..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_key.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg b/examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg deleted file mode 100644 index 654c825db..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_keynote.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_line.svg b/examples/simultaneous-cursors/src/assets/icons/icon_line.svg deleted file mode 100644 index df86a0860..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_line.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_link.svg b/examples/simultaneous-cursors/src/assets/icons/icon_link.svg deleted file mode 100644 index fbfeaaefe..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_link.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_lock.svg b/examples/simultaneous-cursors/src/assets/icons/icon_lock.svg deleted file mode 100644 index 33145c8bf..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_lock.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg b/examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg deleted file mode 100644 index 3e5bbe03f..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_lock_small.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg b/examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg deleted file mode 100644 index 2848994aa..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_logo_text.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg b/examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg deleted file mode 100644 index c46518b82..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_member_email.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_menu.svg b/examples/simultaneous-cursors/src/assets/icons/icon_menu.svg deleted file mode 100644 index 21f55b851..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_menu.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_message.svg b/examples/simultaneous-cursors/src/assets/icons/icon_message.svg deleted file mode 100644 index d9a7f3fba..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_message.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg b/examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg deleted file mode 100644 index 634b436a5..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_message_smile.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg b/examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg deleted file mode 100644 index 3f60018c9..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_message_square.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg b/examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg deleted file mode 100644 index 51f11a482..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_minimize.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_more.svg b/examples/simultaneous-cursors/src/assets/icons/icon_more.svg deleted file mode 100644 index d6c400859..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_more.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg b/examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg deleted file mode 100644 index 60e666515..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_more_large.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_naver.svg b/examples/simultaneous-cursors/src/assets/icons/icon_naver.svg deleted file mode 100644 index 922dd3713..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_naver.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_next.svg b/examples/simultaneous-cursors/src/assets/icons/icon_next.svg deleted file mode 100644 index 1d78c2d96..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_next.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg b/examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg deleted file mode 100644 index 06b98684d..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_open_selector.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_package.svg b/examples/simultaneous-cursors/src/assets/icons/icon_package.svg deleted file mode 100644 index a0f145edf..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_package.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg b/examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg deleted file mode 100644 index 8ca94d055..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_pie_chart.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pin.svg b/examples/simultaneous-cursors/src/assets/icons/icon_pin.svg deleted file mode 100644 index 9b40d2654..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_pin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_play.svg b/examples/simultaneous-cursors/src/assets/icons/icon_play.svg deleted file mode 100644 index 01e8434c7..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_play.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_plus.svg b/examples/simultaneous-cursors/src/assets/icons/icon_plus.svg deleted file mode 100644 index d2a207670..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_previous.svg b/examples/simultaneous-cursors/src/assets/icons/icon_previous.svg deleted file mode 100644 index baf1cdbbe..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_previous.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg b/examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg deleted file mode 100644 index 59b553ff6..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_recorder.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg b/examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg deleted file mode 100644 index 237e82d90..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_refresh.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg b/examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg deleted file mode 100644 index 27809ced7..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_repeat.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_report.svg b/examples/simultaneous-cursors/src/assets/icons/icon_report.svg deleted file mode 100644 index 9be09cb2a..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_report.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_route.svg b/examples/simultaneous-cursors/src/assets/icons/icon_route.svg deleted file mode 100644 index 8dfe2cfce..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_route.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_search.svg b/examples/simultaneous-cursors/src/assets/icons/icon_search.svg deleted file mode 100644 index bca9569c1..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_search.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg b/examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg deleted file mode 100644 index 8336bad02..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_secenario.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg b/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg deleted file mode 100644 index 3e79f8e15..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_alone.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg b/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg deleted file mode 100644 index 3cc275b35..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_service_main_users_group.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_setting.svg b/examples/simultaneous-cursors/src/assets/icons/icon_setting.svg deleted file mode 100644 index c8b29732e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_setting.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg b/examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg deleted file mode 100644 index 6e03e1578..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_short_cut.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg deleted file mode 100644 index 9b744e0aa..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_shuffle.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_slack.svg b/examples/simultaneous-cursors/src/assets/icons/icon_slack.svg deleted file mode 100644 index 6b4bc914a..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_slack.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_smile.svg b/examples/simultaneous-cursors/src/assets/icons/icon_smile.svg deleted file mode 100644 index 403254a2e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_smile.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_square.svg b/examples/simultaneous-cursors/src/assets/icons/icon_square.svg deleted file mode 100644 index 7ff5b5daa..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_square.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg b/examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg deleted file mode 100644 index dfb26dd76..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_square_check.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg b/examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg deleted file mode 100644 index 5e3a48761..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_square_exclamation.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg deleted file mode 100644 index a8dcd78df..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_stable_monitoring.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg deleted file mode 100644 index 579de667b..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_stable_server.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg deleted file mode 100644 index f28422e9f..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_stable_sharing.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_star.svg b/examples/simultaneous-cursors/src/assets/icons/icon_star.svg deleted file mode 100644 index 8ede87039..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_star.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg b/examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg deleted file mode 100644 index ce7e51749..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_star_full.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_stars.svg b/examples/simultaneous-cursors/src/assets/icons/icon_stars.svg deleted file mode 100644 index 39a1e640e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_stars.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg deleted file mode 100644 index 55be34194..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_green.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg deleted file mode 100644 index 5c70519d3..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_pink.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg b/examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg deleted file mode 100644 index 225fa380a..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_system_user_purple.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_tool.svg b/examples/simultaneous-cursors/src/assets/icons/icon_tool.svg deleted file mode 100644 index 931fa3728..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_tool.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg b/examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg deleted file mode 100644 index 07c1f23a1..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_top_button.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_trash.svg b/examples/simultaneous-cursors/src/assets/icons/icon_trash.svg deleted file mode 100644 index 67fb81efb..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_trash.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg b/examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg deleted file mode 100644 index 5a1db411d..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_twinkle.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg b/examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg deleted file mode 100644 index c01893138..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_unconnect.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_upload.svg b/examples/simultaneous-cursors/src/assets/icons/icon_upload.svg deleted file mode 100644 index 32b410f3e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_upload.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_users.svg b/examples/simultaneous-cursors/src/assets/icons/icon_users.svg deleted file mode 100644 index 5b78b23e0..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_users.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg deleted file mode 100644 index 5277aaf7e..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_view_full.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg deleted file mode 100644 index 90b930fe8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_view_grid.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg deleted file mode 100644 index b3a517f03..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_view_list.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg deleted file mode 100644 index 26e97f724..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_view_show.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg b/examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg deleted file mode 100644 index 74b511e60..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/icon_view_split.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo.svg b/examples/simultaneous-cursors/src/assets/icons/logo.svg deleted file mode 100644 index b3892fa00..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_3d.svg b/examples/simultaneous-cursors/src/assets/icons/logo_3d.svg deleted file mode 100644 index d1c28704d..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_3d.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg b/examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg deleted file mode 100644 index 00b020e61..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_3d_2.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg b/examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg deleted file mode 100644 index ed2337a9a..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_3d_side.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_footer.svg b/examples/simultaneous-cursors/src/assets/icons/logo_footer.svg deleted file mode 100644 index 905d130b8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_footer.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg b/examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg deleted file mode 100644 index 2c57f2e23..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_gnb.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg deleted file mode 100644 index 397e3c1ed..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_l.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg deleted file mode 100644 index 3c6225556..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg deleted file mode 100644 index 905d130b8..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_s_gray.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg b/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg deleted file mode 100644 index 90db6c9bf..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_horizontal_xs.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg b/examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg deleted file mode 100644 index 2c57f2e23..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/logo_no_text.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/plus.svg b/examples/simultaneous-cursors/src/assets/icons/plus.svg deleted file mode 100644 index d2a207670..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/plus.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/pop_remove.svg b/examples/simultaneous-cursors/src/assets/icons/pop_remove.svg deleted file mode 100644 index 76a8f6241..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/pop_remove.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/simultaneous-cursors/src/assets/icons/star.svg b/examples/simultaneous-cursors/src/assets/icons/star.svg deleted file mode 100644 index 8ede87039..000000000 --- a/examples/simultaneous-cursors/src/assets/icons/star.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - From d35e62ed9c949e19e9d1bebabc1b07a32038c9e3 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Fri, 28 Jul 2023 13:24:44 +0900 Subject: [PATCH 07/36] Adding in separate cursor components and their animations. Pen animation being finished, currently adding in other animations. --- examples/simultaneous-cursors/src/App.css | 21 +- examples/simultaneous-cursors/src/App.jsx | 179 ++++++------------ examples/simultaneous-cursors/src/Apptest.jsx | 120 ++++++++++++ .../src/components/ArrowCursor.css | 0 .../src/components/ArrowCursor.jsx | 5 + .../src/components/Cursor.css | 57 ++++++ .../src/components/Cursor.jsx | 86 +++++++-- .../src/components/CursorSelections.jsx | 38 ++-- .../src/components/HeartCursor.css | 0 .../src/components/HeartCursor.jsx | 5 + .../src/components/PenCursor.css | 7 + .../src/components/PenCursor.jsx | 96 ++++++++++ .../src/components/TestCursor.css | 0 .../src/components/TestCursor.jsx | 0 .../src/components/ThumbsCursor.css | 0 .../src/components/ThumbsCursor.jsx | 5 + examples/simultaneous-cursors/src/index.css | 7 + examples/simultaneous-cursors/src/main.jsx | 9 +- 18 files changed, 464 insertions(+), 171 deletions(-) create mode 100644 examples/simultaneous-cursors/src/Apptest.jsx create mode 100644 examples/simultaneous-cursors/src/components/ArrowCursor.css create mode 100644 examples/simultaneous-cursors/src/components/ArrowCursor.jsx create mode 100644 examples/simultaneous-cursors/src/components/Cursor.css create mode 100644 examples/simultaneous-cursors/src/components/HeartCursor.css create mode 100644 examples/simultaneous-cursors/src/components/HeartCursor.jsx create mode 100644 examples/simultaneous-cursors/src/components/PenCursor.css create mode 100644 examples/simultaneous-cursors/src/components/PenCursor.jsx create mode 100644 examples/simultaneous-cursors/src/components/TestCursor.css create mode 100644 examples/simultaneous-cursors/src/components/TestCursor.jsx create mode 100644 examples/simultaneous-cursors/src/components/ThumbsCursor.css create mode 100644 examples/simultaneous-cursors/src/components/ThumbsCursor.jsx create mode 100644 examples/simultaneous-cursors/src/index.css diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index ef17cf355..ec9d02e6e 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -53,15 +53,20 @@ opacity: 0.7; } -.cursor { - position: fixed; - left: 0; - top: 0; - /* background-color: none; */ - /* cursor: none; we don't have it here since when selecting options, cursor pops out */ -} - * { /* cursor: none; */ /* pointer-events: none; */ + /* z-index: 100; */ +} + +.circle { + height: 24px; + width: 24px; + border-radius: 24px; + background-color: black; + position: fixed; + top: 0; + left: 0; + pointer-events: none; + z-index: 99999999; /* so that it stays on top of all other elements */ } diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index dd3f3c528..29d32eb1d 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -12,52 +12,38 @@ const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { // apiKey: 'cinr4o2bjhd62lidlji0', // }); -const doc = new yorkie.Document('test'); +const doc = new yorkie.Document('vitecursortask'); -function App() { +const App = () => { const cursorRef = useRef(null); - const [mousePos, setMousePos] = useState({}); const [clients, setClients] = useState([]); - const [currClient, setCurrClient] = useState(''); - const [otherClients, setOtherClients] = useState([]); - const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); - // const handleCursorShapeSelect = async (cursorShape) => { - // setSelectedCursorShape(cursorShape); - - // doc.update((root) => { - // const clientIdx = root.users.findIndex((obj) => { - // return obj.clientID === client.getID(); - // }); + const handleCursorShapeSelect = (cursorShape) => { + setSelectedCursorShape(cursorShape); - // if (clientIdx !== -1) { - // root.users[clientIdx].cursorShape = cursorShape; - // } - // }); - // }; + doc.update((root, presence) => { + presence.set({ + cursorShape: cursorShape, + }); + }); + }; useEffect(() => { const setup = async () => { try { - // const client = new yorkie.Client('https://api.yorkie.dev', { - // apiKey: 'cinr4o2bjhd62lidlji0', - // }); - await client.activate(); - // const doc = new yorkie.Document('test'); - doc.subscribe('presence', (event) => { if (event.type !== DocEventType.PresenceChanged) { setClients(doc.getPresences()); setOtherClients(doc.getPresences()); - // console.log('doc.getPresences() -------- ', ); - // console.log(client.getID()); + console.log('doc.getPresences() -------- '); + console.log(client.getID()); } }); doc.subscribe('my-presence', (event) => { @@ -67,7 +53,6 @@ function App() { console.log(client.getID()); } }); - doc.subscribe('others', (event) => { console.log('others ---------- ', event.type); if ( @@ -83,8 +68,7 @@ function App() { await client.attach(doc, { initialPresence: { - name: '', - color: '', + cursorShape: 'cursor', }, }); @@ -96,54 +80,51 @@ function App() { }); console.log(' ------- print marker 2'); } catch (error) { - console.log(' --------- error', error); - console.log(' --------- error', error.message); + console.log( + ' ------------------------------------------------------ error', + error, + ); + console.log( + ' ------------------------------------------------------ error', + error.message, + ); } }; setup(); - // const handleMouseMove = (event) => { - // setMousePos({ x: event.clientX, y: event.clientY }); - - // doc.update((root) => { - // root.users = []; - // // console.log(root.users, ' ------------- root.users'); - - // const clientIdx = root.users.findIndex((obj) => { - // return obj.clientID === client.getID(); - // }); - - // if (clientIdx !== -1) { - // root.users[clientIdx].xPos = event.clientX; - // root.users[clientIdx].yPos = event.clientY; - // } else { - // root.users.push({ - // clientID: client.getID(), - // xPos: event.clientX, - // yPos: event.clientY, - // }); - // } - // }); - // }; - - // window.addEventListener('mousemove', handleMouseMove); - - // return () => { - // window.removeEventListener('mousemove', handleMouseMove); - // }; - }, []); + const handleMouseMove = (event) => { + setMousePos({ x: event.clientX, y: event.clientY }); + + doc.update((root, presence) => { + presence.set({ + cursor: { + xPos: event.clientX, + yPos: event.clientY, + }, + }); + }); + }; + + window.addEventListener('mousemove', handleMouseMove); + // what was this code here again? - ask GPT + return () => { + window.removeEventListener('mousemove', handleMouseMove); + }; + }, []); + return ( -
- {/* {otherClients.map((user) => { - return user.clientID !== client.getID() ? ( - - ) : ( - <> - ); - })} - +
+ {console.log('doc.getMyPresence() ------- ', doc.getMyPresence())} + {/* {otherClients.map(user => + {return user.clientID !== client.getID() ? : <> } + )} */} + {otherClients.map((user) => (

{user.xPos} {user.yPos} @@ -155,58 +136,14 @@ function App() { ({mousePos.x}, {mousePos.y}) ------ clients.length {clients.length} - ------ clients.length {currClient} */} - {/* */} - {/*

-
- handleCursorShapeSelect('heart')} - className={ - selectedCursorShape === 'heart' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_heart.svg" - /> - handleCursorShapeSelect('thumbs')} - className={ - selectedCursorShape === 'thumbs' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_thumbs.svg" - /> - handleCursorShapeSelect('pen')} - className={ - selectedCursorShape === 'pen' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_pen.svg" - /> - handleCursorShapeSelect('cursor')} - className={ - selectedCursorShape === 'cursor' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_cursor.svg" - /> -
- -
- {clients.length !== 1 ? ( -

{clients.length} users are here

- ) : ( -

1 user here

- )} -
-
*/} + ------ clients.length {currClient} +
); -} +}; export default App; diff --git a/examples/simultaneous-cursors/src/Apptest.jsx b/examples/simultaneous-cursors/src/Apptest.jsx new file mode 100644 index 000000000..d3fd21caf --- /dev/null +++ b/examples/simultaneous-cursors/src/Apptest.jsx @@ -0,0 +1,120 @@ +import { useEffect, useRef, useState } from 'react' +import "./App.css" + +import yorkie from 'yorkie-js-sdk'; + + + + + + +const client = new yorkie.Client('https://api.yorkie.dev', { + apiKey: 'cinr4o2bjhd62lidlji0', + presence: { + name: "", + color: "", + }, +}); + +const doc = new yorkie.Document('test2'); // some work some don't + + +const App = () => { + + const [currClient, setCurrClient] = useState(); + const [clients, setClients] = useState([]); + + + + useEffect(() => { + + + + + const setup = async () => { + + await client.activate(); + + client.subscribe((event) => { + + console.log("client event ---------- ", event.type) + + if (event.type === 'peers-changed') { + + setClients(client.getPeersByDocKey(doc.getKey())) + + const getCommonValuesByProperty = (array1, array2, property) => { + return array1.filter((item1) => array2.some((item2) => item2[property] === item1[property])); + } + + doc.update((root) => { + root.users = getCommonValuesByProperty(root.users, client.getPeersByDocKey(doc.getKey()), 'clientID'); + }); + + } + + if (event.type === "documents-changed") { + doc.update((root) => { + setOtherClients(root.users) + }); + } + + }); + + + + setCurrClient(client.getID()); + + + + await client.attach(doc); + + + + + doc.subscribe((event) => { + + console.log("doc event ---------- ", event.type) + + if (event.type === 'remote-change') { + doc.update((root) => { + setOtherClients(root.users) + }); + } + }) + + + + + + doc.update((root) => { + root.users = [] + }); + + + window.addEventListener('beforeunload', () => { + client.deactivate(); + }); + + } + + + + setup(); + + + + + + }, []); + + + + return ( +
+ {clients.length}

---------------------

+
+ ); +} + +export default App; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/ArrowCursor.css b/examples/simultaneous-cursors/src/components/ArrowCursor.css new file mode 100644 index 000000000..e69de29bb diff --git a/examples/simultaneous-cursors/src/components/ArrowCursor.jsx b/examples/simultaneous-cursors/src/components/ArrowCursor.jsx new file mode 100644 index 000000000..cc44ee7e0 --- /dev/null +++ b/examples/simultaneous-cursors/src/components/ArrowCursor.jsx @@ -0,0 +1,5 @@ +// const ArrowCursor = () => { +// return ( ); +// } + +// export default ArrowCursor; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/Cursor.css b/examples/simultaneous-cursors/src/components/Cursor.css new file mode 100644 index 000000000..dd58b3f29 --- /dev/null +++ b/examples/simultaneous-cursors/src/components/Cursor.css @@ -0,0 +1,57 @@ +.circle { + height: 24px; + width: 24px; + border-radius: 24px; + background-color: black; + position: fixed; + top: 0; + left: 0; + pointer-events: none; + z-index: 99999999; /* so that it stays on top of all other elements */ +} + +.cursor { + /* position: fixed; */ + /* left: 0; + top: 0; */ + /* background-color: none; */ + /* cursor: none; we don't have it here since when selecting options, cursor pops out */ +} + +* { + cursor: none; + /* pointer-events: none; */ + /* z-index: 100; */ +} + +.pen-cursor { + /* cursor: none; */ + + position: fixed; + left: -10px; + top: -30px; +} + +.heart-cursor { + /* cursor: none; */ + + position: fixed; + left: -17px; + top: -17px; +} + +.thumbs-cursor { + /* cursor: none; */ + + position: fixed; + left: -17px; + top: -17px; +} + +.cursor-cursor { + /* cursor: none; */ + + position: fixed; + left: -5px; + top: -5px; +} diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index c81b96e30..8a45b61c5 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -1,26 +1,70 @@ -const Cursor = ({ cursorShape, x, y }) => { +import PenCursor from "./PenCursor"; + +import "./Cursor.css"; + +const Cursor = ({ selectedCursorShape, x, y }) => { return ( - + <> + {selectedCursorShape === "heart" ? ( + <> + + + ) : ( + <> + )} + {selectedCursorShape === "thumbs" ? ( + <> + + + ) : ( + <> + )} + {selectedCursorShape === "pen" ? ( + <> + + + + ) : ( + <> + )} + {selectedCursorShape === "cursor" ? ( + <> + + + ) : ( + <> + )} + + {/* default 어케 set 할건데 like before */} + {/* + */} + + {/* */} + ); }; export default Cursor; - -// {/* {selectedCursorShape === 'heart' && } -// {selectedCursorShape === 'thumbs' && } -// {selectedCursorShape === 'pen' && } -// {selectedCursorShape === 'cursor' && } */} diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index dcb00fb6e..1c180defd 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -1,40 +1,44 @@ -const CursorSelections = ({ handleCursorShapeSelect, clients }) => { +const CursorSelections = ({ + handleCursorShapeSelect, + selectedCursorShape, + clients, +}) => { return (
handleCursorShapeSelect('heart')} + onClick={() => handleCursorShapeSelect("heart")} className={ - selectedCursorShape === 'heart' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' + selectedCursorShape === "heart" + ? "cursor-shape-selected" + : "cursor-shape-not-selected" } src="src/assets/icons/icon_heart.svg" /> handleCursorShapeSelect('thumbs')} + onClick={() => handleCursorShapeSelect("thumbs")} className={ - selectedCursorShape === 'thumbs' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' + selectedCursorShape === "thumbs" + ? "cursor-shape-selected" + : "cursor-shape-not-selected" } src="src/assets/icons/icon_thumbs.svg" /> handleCursorShapeSelect('pen')} + onClick={() => handleCursorShapeSelect("pen")} className={ - selectedCursorShape === 'pen' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' + selectedCursorShape === "pen" + ? "cursor-shape-selected" + : "cursor-shape-not-selected" } src="src/assets/icons/icon_pen.svg" /> handleCursorShapeSelect('cursor')} + onClick={() => handleCursorShapeSelect("cursor")} className={ - selectedCursorShape === 'cursor' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' + selectedCursorShape === "cursor" + ? "cursor-shape-selected" + : "cursor-shape-not-selected" } src="src/assets/icons/icon_cursor.svg" /> diff --git a/examples/simultaneous-cursors/src/components/HeartCursor.css b/examples/simultaneous-cursors/src/components/HeartCursor.css new file mode 100644 index 000000000..e69de29bb diff --git a/examples/simultaneous-cursors/src/components/HeartCursor.jsx b/examples/simultaneous-cursors/src/components/HeartCursor.jsx new file mode 100644 index 000000000..7d34a4146 --- /dev/null +++ b/examples/simultaneous-cursors/src/components/HeartCursor.jsx @@ -0,0 +1,5 @@ +// const HeartCursor = () => { +// return ( ); +// } + +// export default HeartCursor; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/PenCursor.css b/examples/simultaneous-cursors/src/components/PenCursor.css new file mode 100644 index 000000000..c352b8b0f --- /dev/null +++ b/examples/simultaneous-cursors/src/components/PenCursor.css @@ -0,0 +1,7 @@ +.pen-cursor-canvas { + position: fixed; + /* height: 100vh; + width: 100vw; */ + top: 0; + left: 0; +} \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx new file mode 100644 index 000000000..9ef185415 --- /dev/null +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -0,0 +1,96 @@ +import React, { useRef, useEffect } from "react"; +import "./PenCursor.css"; + +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + this.lifetime = 0; + } +} + +const PenCursor = () => { + const canvasRef = useRef(null); + const points = []; + + const addPoint = (x, y) => { + const point = new Point(x, y); + points.push(point); + }; + + useEffect(() => { + const canvas = canvasRef.current; + const ctx = canvas.getContext("2d"); + + const animatePoints = () => { + ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); + const duration = (0.7 * (1 * 4000)) / 60; // Last 80% of a frame per point + + for (let i = 0; i < points.length; ++i) { + const point = points[i]; + let lastPoint; + + if (points[i - 1] !== undefined) { + lastPoint = points[i - 1]; + } else lastPoint = point; + + point.lifetime += 1; + + if (point.lifetime > duration) { + // If the point dies, remove it. + points.shift(); + } else { + // Otherwise animate it: + + // As the lifetime goes on, lifePercent goes from 0 to 1. + const lifePercent = point.lifetime / duration; + const spreadRate = 7 * (1 - lifePercent); + + ctx.lineJoin = "round"; + ctx.lineWidth = spreadRate; + + // As time increases decrease r and b, increase g to go from purple to green. + // const red = Math.floor(190 - 190 * lifePercent); + // const green = 0; + // const blue = Math.floor(210 + 210 * lifePercent); + const red = 0; + const green = 0; + const blue = 0; + ctx.strokeStyle = `rgb(${red},${green},${blue}`; + + ctx.beginPath(); + + ctx.moveTo(lastPoint.x, lastPoint.y); + ctx.lineTo(point.x, point.y); + + ctx.stroke(); + ctx.closePath(); + } + } + requestAnimationFrame(animatePoints); + }; + + const handleMouseMove = ({ clientX, clientY }) => { + addPoint(clientX - canvas.offsetLeft, clientY - canvas.offsetTop); + }; + + document.addEventListener("mousemove", handleMouseMove, false); + + animatePoints(); + + return () => { + document.removeEventListener("mousemove", handleMouseMove, false); + }; + }, []); + + return ( + + ); +}; + +export default PenCursor; diff --git a/examples/simultaneous-cursors/src/components/TestCursor.css b/examples/simultaneous-cursors/src/components/TestCursor.css new file mode 100644 index 000000000..e69de29bb diff --git a/examples/simultaneous-cursors/src/components/TestCursor.jsx b/examples/simultaneous-cursors/src/components/TestCursor.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/examples/simultaneous-cursors/src/components/ThumbsCursor.css b/examples/simultaneous-cursors/src/components/ThumbsCursor.css new file mode 100644 index 000000000..e69de29bb diff --git a/examples/simultaneous-cursors/src/components/ThumbsCursor.jsx b/examples/simultaneous-cursors/src/components/ThumbsCursor.jsx new file mode 100644 index 000000000..355164743 --- /dev/null +++ b/examples/simultaneous-cursors/src/components/ThumbsCursor.jsx @@ -0,0 +1,5 @@ +// const ThumbsCursor = () => { +// return ( ); +// } + +// export default ThumbsCursor; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/index.css b/examples/simultaneous-cursors/src/index.css new file mode 100644 index 000000000..2a93ce767 --- /dev/null +++ b/examples/simultaneous-cursors/src/index.css @@ -0,0 +1,7 @@ +body { + /* margin: 0; */ + /* display: flex; */ + /* place-items: center; */ + min-width: 320px; + min-height: 100vh; +} diff --git a/examples/simultaneous-cursors/src/main.jsx b/examples/simultaneous-cursors/src/main.jsx index 0af95b532..c9de325cb 100644 --- a/examples/simultaneous-cursors/src/main.jsx +++ b/examples/simultaneous-cursors/src/main.jsx @@ -1,9 +1,10 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App.jsx'; +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' +import './index.css' ReactDOM.createRoot(document.getElementById('root')).render( // // , -); +) From 1d1477d6efac41db48e92e0ebe616fd304ce4e80 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Fri, 28 Jul 2023 13:26:11 +0900 Subject: [PATCH 08/36] Organizing code. --- examples/simultaneous-cursors/src/App.jsx | 49 ++-- .../src/components/Cursor.jsx | 2 +- .../src/components/PenCursor.jsx | 240 ++++++++++++++++-- 3 files changed, 245 insertions(+), 46 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 29d32eb1d..7cbbaec1e 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -20,7 +20,6 @@ const App = () => { const [clients, setClients] = useState([]); const [currClient, setCurrClient] = useState(''); - const [otherClients, setOtherClients] = useState([]); const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); const handleCursorShapeSelect = (cursorShape) => { @@ -39,46 +38,52 @@ const App = () => { await client.activate(); doc.subscribe('presence', (event) => { + // console.log('prescence ---------- ', event.type); + // console.log(doc.getPresences()) + setClients(doc.getPresences()); if (event.type !== DocEventType.PresenceChanged) { setClients(doc.getPresences()); - setOtherClients(doc.getPresences()); - console.log('doc.getPresences() -------- '); - console.log(client.getID()); + // console.log(doc.getPresences()) } }); doc.subscribe('my-presence', (event) => { - console.log('my-presence ---------- ', event.type); + setClients(doc.getPresences()); + // console.log('my-presence ---------- ', event.type); if (event.type === DocEventType.Initialized) { - console.log('doc.getPresences() -------- ', doc.getPresences()); - console.log(client.getID()); + setClients(doc.getPresences()); + // console.log('doc.getPresences() -------- ', doc.getPresences()); } }); doc.subscribe('others', (event) => { - console.log('others ---------- ', event.type); + setClients(doc.getPresences()); + // console.log('others ---------- ', event.type); + // console.log(doc.getPresences()) if ( event.type === DocEventType.Watched || event.type === DocEventType.Unwatched ) { - setOtherClients(doc.getPresences()); setClients(doc.getPresences()); - console.log(doc.getPresences()); - console.log(client.getID()); + // console.log(doc.getPresences()) } }); await client.attach(doc, { initialPresence: { cursorShape: 'cursor', + cursor: { + xPos: 0, + yPos: 0, + }, }, }); - console.log(' ------- print marker 1'); + // console.log(' ------- print marker 1'); window.addEventListener('beforeunload', () => { // client.detach(doc); client.deactivate(); }); - console.log(' ------- print marker 2'); + // console.log(' ------- print marker 2'); } catch (error) { console.log( ' ------------------------------------------------------ error', @@ -113,24 +118,30 @@ const App = () => { window.removeEventListener('mousemove', handleMouseMove); }; }, []); - + return (
- {console.log('doc.getMyPresence() ------- ', doc.getMyPresence())} - {/* {otherClients.map(user => - {return user.clientID !== client.getID() ? : <> } + {/* {console.log('doc.getMyPresence() ------- ', doc.getMyPresence())} */} + {/* {console.log('doc.getPresences() -------- ', doc.getPresences())} */} + {/* {console.log(clients)} */} + {doc.getPresences().map(user => + {return user.clientID !== client.getID() ? : <> } + )} + {/* {doc.getPresences().map(user => + {console.log(user.clientID === client.getID(), user.presence.cursor.xPos, user.presence.cursor.yPos, user.presence.cursorShape)} + // , user.presence.cursor.yPos, user.presence.cursorShape )} */} - {otherClients.map((user) => ( + {clients.map((user) => (

{user.xPos} {user.yPos}

))} -
{otherClients.length}
+
{clients.length}
The mouse is at position{' '} ({mousePos.x}, {mousePos.y}) diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index 8a45b61c5..1fcb0f4f1 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -34,7 +34,7 @@ const Cursor = ({ selectedCursorShape, x, y }) => { className="pen-cursor" style={{ transform: `translate3d(${x}px, ${y}px, 0)` }} /> - + ) : ( <> diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index 9ef185415..684f99983 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -1,4 +1,4 @@ -import React, { useRef, useEffect } from "react"; +import React, { useRef, useEffect, useState } from "react"; import "./PenCursor.css"; class Point { @@ -9,18 +9,111 @@ class Point { } } -const PenCursor = () => { +const PenCursor = ({ xPos, yPos }) => { + // const canvasRef = useRef(null); + // const points = []; + + // const addPoint = (x, y) => { + // const point = new Point(x, y); + // points.push(point); + // }; + + // useEffect(() => { + // const canvas = canvasRef.current; + // const ctx = canvas.getContext("2d"); + + // const animatePoints = () => { + // ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); + // const duration = (0.7 * (1 * 4000)) / 60; // Last 80% of a frame per point + + // for (let i = 0; i < points.length; ++i) { + // const point = points[i]; + // let lastPoint; + + // if (points[i - 1] !== undefined) { + // lastPoint = points[i - 1]; + // } else lastPoint = point; + + // point.lifetime += 1; + + // if (point.lifetime > duration) { + // points.shift(); + // } else { + + // const lifePercent = point.lifetime / duration; + // const spreadRate = 7 * (1 - lifePercent); + + // ctx.lineJoin = "round"; + // ctx.lineWidth = spreadRate; + + // const red = 0; + // const green = 0; + // const blue = 0; + // ctx.strokeStyle = `rgb(${red},${green},${blue}`; + + // ctx.beginPath(); + + // ctx.moveTo(lastPoint.x, lastPoint.y); + // ctx.lineTo(point.x, point.y); + + // ctx.stroke(); + // ctx.closePath(); + // } + // } + // requestAnimationFrame(animatePoints); + // }; + + // useEffect(() => { + // addPoint(xPos - canvas.offsetLeft, yPos - canvas.offsetTop); + // }, [xPos, yPos]); + + + + // // const handleMouseMove = ({ clientX, clientY }) => { + // // addPoint(clientX - canvas.offsetLeft, clientY - canvas.offsetTop); + // // }; + + // // document.addEventListener("mousemove", handleMouseMove, false); + + // animatePoints(); + + // // return () => { + // // document.removeEventListener("mousemove", handleMouseMove, false); + // // }; + // }, []); + + + + + + + + + + + + + + + + + + + + + const canvasRef = useRef(null); - const points = []; + const [points, setPoints] = useState([]); const addPoint = (x, y) => { const point = new Point(x, y); - points.push(point); + points.push(point) + setPoints(points) }; useEffect(() => { const canvas = canvasRef.current; - const ctx = canvas.getContext("2d"); + const ctx = canvas.getContext('2d'); const animatePoints = () => { ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); @@ -37,26 +130,19 @@ const PenCursor = () => { point.lifetime += 1; if (point.lifetime > duration) { - // If the point dies, remove it. points.shift(); } else { - // Otherwise animate it: - - // As the lifetime goes on, lifePercent goes from 0 to 1. const lifePercent = point.lifetime / duration; - const spreadRate = 7 * (1 - lifePercent); + const spreadRate = 5; + // const spreadRate = 7 * (1 - lifePercent); - ctx.lineJoin = "round"; + ctx.lineJoin = 'round'; ctx.lineWidth = spreadRate; - // As time increases decrease r and b, increase g to go from purple to green. - // const red = Math.floor(190 - 190 * lifePercent); - // const green = 0; - // const blue = Math.floor(210 + 210 * lifePercent); const red = 0; const green = 0; const blue = 0; - ctx.strokeStyle = `rgb(${red},${green},${blue}`; + ctx.strokeStyle = `rgb(${red},${green},${blue})`; ctx.beginPath(); @@ -70,18 +156,20 @@ const PenCursor = () => { requestAnimationFrame(animatePoints); }; - const handleMouseMove = ({ clientX, clientY }) => { - addPoint(clientX - canvas.offsetLeft, clientY - canvas.offsetTop); - }; + animatePoints(); + + }, [points]); + + useEffect(() => { + addPoint(xPos, yPos); + }, [xPos, yPos]); + + + + - document.addEventListener("mousemove", handleMouseMove, false); - animatePoints(); - return () => { - document.removeEventListener("mousemove", handleMouseMove, false); - }; - }, []); return ( { ref={canvasRef} width={document.body.clientWidth} height={document.body.clientHeight} - /> + /> ); }; export default PenCursor; + + + + + + + + + + + +// import React, { useRef, useEffect } from "react"; +// import "./PenCursor.css"; + +// class Point { +// constructor(x, y) { +// this.x = x; +// this.y = y; +// this.lifetime = 0; +// } +// } + +// const PenCursor = ({ xPos, yPos }) => { +// const canvasRef = useRef(null); +// const points = []; + +// const addPoint = (x, y) => { +// const point = new Point(x, y); +// points.push(point); +// }; + +// useEffect(() => { +// const canvas = canvasRef.current; +// const ctx = canvas.getContext("2d"); + +// const animatePoints = () => { +// ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); +// const duration = (0.7 * (1 * 4000)) / 60; // Last 80% of a frame per point + +// for (let i = 0; i < points.length; ++i) { +// const point = points[i]; +// let lastPoint; + +// if (points[i - 1] !== undefined) { +// lastPoint = points[i - 1]; +// } else lastPoint = point; + +// point.lifetime += 1; + +// if (point.lifetime > duration) { +// points.shift(); +// } else { + +// const lifePercent = point.lifetime / duration; +// const spreadRate = 7 * (1 - lifePercent); + +// ctx.lineJoin = "round"; +// ctx.lineWidth = spreadRate; + +// const red = 0; +// const green = 0; +// const blue = 0; +// ctx.strokeStyle = `rgb(${red},${green},${blue}`; + +// ctx.beginPath(); + +// ctx.moveTo(lastPoint.x, lastPoint.y); +// ctx.lineTo(point.x, point.y); + +// ctx.stroke(); +// ctx.closePath(); +// } +// } +// requestAnimationFrame(animatePoints); +// }; + +// const handleMouseMove = ({ clientX, clientY }) => { +// addPoint(clientX - canvas.offsetLeft, clientY - canvas.offsetTop); +// }; + +// document.addEventListener("mousemove", handleMouseMove, false); + +// animatePoints(); + +// return () => { +// document.removeEventListener("mousemove", handleMouseMove, false); +// }; +// }, []); + +// return ( +// +// ); +// }; + +// export default PenCursor; From a3e6040e0028e01556ebeb52d0479542914971cb Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Fri, 28 Jul 2023 13:26:33 +0900 Subject: [PATCH 09/36] Work in progress --- docker/docker-compose.yml | 9 +- examples/simultaneous-cursors/src/App.jsx | 14 +- .../src/components/Cursor.jsx | 20 +- .../src/components/PenCursor.jsx | 212 +----------------- 4 files changed, 30 insertions(+), 225 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 27a1542d7..8aff6b8a0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -17,17 +17,14 @@ services: # If you're using Mac or Windows, this special domain name("host.docker.internal" which makes containers able to connect to the host) # is supported by default. # But if you're using Linux and want an envoy container to communicate with the host, - # it may help to define "host.docker.internal" in extra_hosts. + # it may help to define "host.docker.internal" in extra_hosts. # (Actually, other hostnames are available, but in that case you should update clusters[].host configurations of envoy.yaml) extra_hosts: - - "host.docker.internal:host-gateway" + - 'host.docker.internal:host-gateway' yorkie: image: 'yorkieteam/yorkie:0.4.5' container_name: 'yorkie' - command: [ - 'server', - '--enable-pprof', - ] + command: ['server', '--enable-pprof'] restart: always ports: - '11101:11101' diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 7cbbaec1e..e2e3a3efe 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -124,9 +124,17 @@ const App = () => { {/* {console.log('doc.getMyPresence() ------- ', doc.getMyPresence())} */} {/* {console.log('doc.getPresences() -------- ', doc.getPresences())} */} {/* {console.log(clients)} */} - {doc.getPresences().map(user => - {return user.clientID !== client.getID() ? : <> } - )} + {doc.getPresences().map((user) => { + return user.clientID !== client.getID() ? ( + + ) : ( + <> + ); + })} {/* {doc.getPresences().map(user => {console.log(user.clientID === client.getID(), user.presence.cursor.xPos, user.presence.cursor.yPos, user.presence.cursorShape)} // , user.presence.cursor.yPos, user.presence.cursorShape diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index 1fcb0f4f1..e88180fe5 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -1,14 +1,14 @@ -import PenCursor from "./PenCursor"; +import PenCursor from './PenCursor'; -import "./Cursor.css"; +import './Cursor.css'; const Cursor = ({ selectedCursorShape, x, y }) => { return ( <> - {selectedCursorShape === "heart" ? ( + {selectedCursorShape === 'heart' ? ( <> @@ -16,10 +16,10 @@ const Cursor = ({ selectedCursorShape, x, y }) => { ) : ( <> )} - {selectedCursorShape === "thumbs" ? ( + {selectedCursorShape === 'thumbs' ? ( <> @@ -27,10 +27,10 @@ const Cursor = ({ selectedCursorShape, x, y }) => { ) : ( <> )} - {selectedCursorShape === "pen" ? ( + {selectedCursorShape === 'pen' ? ( <> @@ -39,10 +39,10 @@ const Cursor = ({ selectedCursorShape, x, y }) => { ) : ( <> )} - {selectedCursorShape === "cursor" ? ( + {selectedCursorShape === 'cursor' ? ( <> diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index 684f99983..43eb1227e 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -1,5 +1,5 @@ -import React, { useRef, useEffect, useState } from "react"; -import "./PenCursor.css"; +import React, { useRef, useEffect, useState } from 'react'; +import './PenCursor.css'; class Point { constructor(x, y) { @@ -10,105 +10,13 @@ class Point { } const PenCursor = ({ xPos, yPos }) => { - // const canvasRef = useRef(null); - // const points = []; - - // const addPoint = (x, y) => { - // const point = new Point(x, y); - // points.push(point); - // }; - - // useEffect(() => { - // const canvas = canvasRef.current; - // const ctx = canvas.getContext("2d"); - - // const animatePoints = () => { - // ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - // const duration = (0.7 * (1 * 4000)) / 60; // Last 80% of a frame per point - - // for (let i = 0; i < points.length; ++i) { - // const point = points[i]; - // let lastPoint; - - // if (points[i - 1] !== undefined) { - // lastPoint = points[i - 1]; - // } else lastPoint = point; - - // point.lifetime += 1; - - // if (point.lifetime > duration) { - // points.shift(); - // } else { - - // const lifePercent = point.lifetime / duration; - // const spreadRate = 7 * (1 - lifePercent); - - // ctx.lineJoin = "round"; - // ctx.lineWidth = spreadRate; - - // const red = 0; - // const green = 0; - // const blue = 0; - // ctx.strokeStyle = `rgb(${red},${green},${blue}`; - - // ctx.beginPath(); - - // ctx.moveTo(lastPoint.x, lastPoint.y); - // ctx.lineTo(point.x, point.y); - - // ctx.stroke(); - // ctx.closePath(); - // } - // } - // requestAnimationFrame(animatePoints); - // }; - - // useEffect(() => { - // addPoint(xPos - canvas.offsetLeft, yPos - canvas.offsetTop); - // }, [xPos, yPos]); - - - - // // const handleMouseMove = ({ clientX, clientY }) => { - // // addPoint(clientX - canvas.offsetLeft, clientY - canvas.offsetTop); - // // }; - - // // document.addEventListener("mousemove", handleMouseMove, false); - - // animatePoints(); - - // // return () => { - // // document.removeEventListener("mousemove", handleMouseMove, false); - // // }; - // }, []); - - - - - - - - - - - - - - - - - - - - - const canvasRef = useRef(null); const [points, setPoints] = useState([]); const addPoint = (x, y) => { const point = new Point(x, y); - points.push(point) - setPoints(points) + points.push(point); + setPoints(points); }; useEffect(() => { @@ -157,128 +65,20 @@ const PenCursor = ({ xPos, yPos }) => { }; animatePoints(); - }, [points]); useEffect(() => { addPoint(xPos, yPos); }, [xPos, yPos]); - - - - - - - return ( + /> ); }; export default PenCursor; - - - - - - - - - - - -// import React, { useRef, useEffect } from "react"; -// import "./PenCursor.css"; - -// class Point { -// constructor(x, y) { -// this.x = x; -// this.y = y; -// this.lifetime = 0; -// } -// } - -// const PenCursor = ({ xPos, yPos }) => { -// const canvasRef = useRef(null); -// const points = []; - -// const addPoint = (x, y) => { -// const point = new Point(x, y); -// points.push(point); -// }; - -// useEffect(() => { -// const canvas = canvasRef.current; -// const ctx = canvas.getContext("2d"); - -// const animatePoints = () => { -// ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); -// const duration = (0.7 * (1 * 4000)) / 60; // Last 80% of a frame per point - -// for (let i = 0; i < points.length; ++i) { -// const point = points[i]; -// let lastPoint; - -// if (points[i - 1] !== undefined) { -// lastPoint = points[i - 1]; -// } else lastPoint = point; - -// point.lifetime += 1; - -// if (point.lifetime > duration) { -// points.shift(); -// } else { - -// const lifePercent = point.lifetime / duration; -// const spreadRate = 7 * (1 - lifePercent); - -// ctx.lineJoin = "round"; -// ctx.lineWidth = spreadRate; - -// const red = 0; -// const green = 0; -// const blue = 0; -// ctx.strokeStyle = `rgb(${red},${green},${blue}`; - -// ctx.beginPath(); - -// ctx.moveTo(lastPoint.x, lastPoint.y); -// ctx.lineTo(point.x, point.y); - -// ctx.stroke(); -// ctx.closePath(); -// } -// } -// requestAnimationFrame(animatePoints); -// }; - -// const handleMouseMove = ({ clientX, clientY }) => { -// addPoint(clientX - canvas.offsetLeft, clientY - canvas.offsetTop); -// }; - -// document.addEventListener("mousemove", handleMouseMove, false); - -// animatePoints(); - -// return () => { -// document.removeEventListener("mousemove", handleMouseMove, false); -// }; -// }, []); - -// return ( -// -// ); -// }; - -// export default PenCursor; From a662017f390b17041a780eadbbf555ef91898e07 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Fri, 28 Jul 2023 16:26:56 +0900 Subject: [PATCH 10/36] Finishing up pen cursor. Working on other animations as well. --- examples/simultaneous-cursors/src/components/PenCursor.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index 43eb1227e..18a29f5c0 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -25,7 +25,7 @@ const PenCursor = ({ xPos, yPos }) => { const animatePoints = () => { ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - const duration = (0.7 * (1 * 4000)) / 60; // Last 80% of a frame per point + const duration = (0.7 * (1 * 4000)) / 60; for (let i = 0; i < points.length; ++i) { const point = points[i]; @@ -41,8 +41,7 @@ const PenCursor = ({ xPos, yPos }) => { points.shift(); } else { const lifePercent = point.lifetime / duration; - const spreadRate = 5; - // const spreadRate = 7 * (1 - lifePercent); + const spreadRate = 5; // i.e. line width ctx.lineJoin = 'round'; ctx.lineWidth = spreadRate; From 722578df4a7e2f02756838dcf0a3029a7b7dc066 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Mon, 31 Jul 2023 18:59:13 +0900 Subject: [PATCH 11/36] Finishing animations for all 4 types of cursors. Moving onto organizing code and polishing up functionalities(e.g. improvements in UI/UX). --- examples/simultaneous-cursors/src/App.css | 24 +-- examples/simultaneous-cursors/src/App.jsx | 145 ++++++++++++-- .../src/assets/icons/icon_cursor.svg | 2 +- .../src/assets/icons/icon_heart.svg | 2 +- .../src/assets/icons/icon_pen.svg | 2 +- .../src/assets/icons/icon_thumbs.svg | 2 +- .../src/components/Cursor.css | 19 +- .../src/components/CursorSelections.css | 5 + .../src/components/CursorSelections.jsx | 34 ++-- .../src/components/FlyingReaction.jsx | 40 ++++ .../src/components/FlyingReaction.module.css | 96 +++++++++ .../src/components/PenCursor.css | 10 +- .../src/components/ReactionSelector.jsx | 32 +++ .../src/hooks/useInterval.jsx | 24 +++ examples/simultaneous-cursors/src/index.css | 51 ++++- examples/simultaneous-cursors/src/temp.jsx | 186 ++++++++++++++++++ 16 files changed, 604 insertions(+), 70 deletions(-) create mode 100644 examples/simultaneous-cursors/src/components/CursorSelections.css create mode 100644 examples/simultaneous-cursors/src/components/FlyingReaction.jsx create mode 100644 examples/simultaneous-cursors/src/components/FlyingReaction.module.css create mode 100644 examples/simultaneous-cursors/src/components/ReactionSelector.jsx create mode 100644 examples/simultaneous-cursors/src/hooks/useInterval.jsx create mode 100644 examples/simultaneous-cursors/src/temp.jsx diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index ec9d02e6e..daeee0370 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -1,3 +1,9 @@ +.general-container { + border: solid; + min-width: 100vw; + min-height: 100vh; +} + .cursor-selector-container { /* z-index: 10; */ @@ -43,14 +49,20 @@ .cursor-shape-selected { /* cursor: none; */ + background-color: rgb(81, 76, 73); + border-radius: 9px; } .cursor-shape-not-selected { /* cursor: none; */ + background-color: rgb(81, 76, 73); opacity: 0.5; + border-radius: 9px; } .cursor-shape-not-selected:hover { + background-color: rgb(81, 76, 73); opacity: 0.7; + border-radius: 9px; } * { @@ -58,15 +70,3 @@ /* pointer-events: none; */ /* z-index: 100; */ } - -.circle { - height: 24px; - width: 24px; - border-radius: 24px; - background-color: black; - position: fixed; - top: 0; - left: 0; - pointer-events: none; - z-index: 99999999; /* so that it stays on top of all other elements */ -} diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index e2e3a3efe..32b3d724c 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,10 +1,15 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState, useCallback } from 'react'; import './App.css'; import yorkie, { DocEventType } from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; +import FlyingReaction from './components/FlyingReaction'; +import ReactionSelector from './components/ReactionSelector'; +import useInterval from './hooks/useInterval'; +import './index.css'; + const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { apiKey: import.meta.env.VITE_YORKIE_API_KEY, }); @@ -14,8 +19,17 @@ const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { const doc = new yorkie.Document('vitecursortask'); +var CursorMode; +(function (CursorMode) { + CursorMode[(CursorMode['Hidden'] = 0)] = 'Hidden'; + CursorMode[(CursorMode['Chat'] = 1)] = 'Chat'; + CursorMode[(CursorMode['ReactionSelector'] = 2)] = 'ReactionSelector'; + CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; +})(CursorMode || (CursorMode = {})); + const App = () => { - const cursorRef = useRef(null); + // ----------------------------------------------------------------------------- prescence & base cursor functionalities code + const [mousePos, setMousePos] = useState({}); const [clients, setClients] = useState([]); @@ -38,32 +52,24 @@ const App = () => { await client.activate(); doc.subscribe('presence', (event) => { - // console.log('prescence ---------- ', event.type); - // console.log(doc.getPresences()) setClients(doc.getPresences()); if (event.type !== DocEventType.PresenceChanged) { setClients(doc.getPresences()); - // console.log(doc.getPresences()) } }); doc.subscribe('my-presence', (event) => { setClients(doc.getPresences()); - // console.log('my-presence ---------- ', event.type); if (event.type === DocEventType.Initialized) { setClients(doc.getPresences()); - // console.log('doc.getPresences() -------- ', doc.getPresences()); } }); doc.subscribe('others', (event) => { setClients(doc.getPresences()); - // console.log('others ---------- ', event.type); - // console.log(doc.getPresences()) if ( event.type === DocEventType.Watched || event.type === DocEventType.Unwatched ) { setClients(doc.getPresences()); - // console.log(doc.getPresences()) } }); @@ -77,13 +83,10 @@ const App = () => { }, }); - // console.log(' ------- print marker 1'); - window.addEventListener('beforeunload', () => { // client.detach(doc); client.deactivate(); }); - // console.log(' ------- print marker 2'); } catch (error) { console.log( ' ------------------------------------------------------ error', @@ -119,11 +122,96 @@ const App = () => { }; }, []); + // ----------------------------------------------------------------------------- heart & thumbs animation code + + const [state, setState] = useState({ mode: CursorMode.Reaction }); + const [reactions, setReactions] = useState([]); + + const bubbleRate = 100; + + // Remove reactions that are not visible anymore (every 1 sec) + useInterval(() => { + setReactions((reactions) => + reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), + ); + }, 1000); + + useInterval(() => { + console.log('working'); + console.log('state.isPressed ---- ', state.isPressed); + if (state.mode === CursorMode.Reaction && state.isPressed) { + setReactions((reactions) => + reactions.concat([ + { + point: { x: cursor.x, y: cursor.y }, + value: state.reaction, + timestamp: Date.now(), + }, + ]), + ); + } + }, bubbleRate); + + const [cursor, setCursor] = useState({ x: 0, y: 0 }); + + useEffect(() => { + function onKeyUp(e) { + if (e.key === '/') { + setState({ mode: CursorMode.Chat, previousMessage: null, message: '' }); + } else if (e.key === 'Escape') { + // updateMyPresence({ message: "" }); + setState({ mode: CursorMode.Hidden }); + } else if (e.key === 'e') { + setState({ mode: CursorMode.ReactionSelector }); + } + } + + window.addEventListener('keyup', onKeyUp); + + function onKeyDown(e) { + if (e.key === '/') { + e.preventDefault(); + } + } + + window.addEventListener('keydown', onKeyDown); + + const handleMouseMove = (event) => { + const { clientX, clientY } = event; + const newCursor = { ...cursor, x: clientX, y: clientY }; + setCursor(newCursor); + }; + + document.addEventListener('mousemove', handleMouseMove, false); + + return () => { + window.removeEventListener('keyup', onKeyUp); + window.removeEventListener('keydown', onKeyDown); + window.removeEventListener('mousemove', handleMouseMove); + }; + }, []); + return ( -
- {/* {console.log('doc.getMyPresence() ------- ', doc.getMyPresence())} */} - {/* {console.log('doc.getPresences() -------- ', doc.getPresences())} */} - {/* {console.log(clients)} */} +
{ + console.log('downnnn'); + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: true } + : state, + ); + }} + onPointerUp={() => { + console.log('uppppp'); + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: false } + : state, + ); + }} + > + {/* simultaneous cursors display code & pen cursor display code */} {doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( { ({mousePos.x}, {mousePos.y}) ------ clients.length {clients.length} - ------ clients.length {currClient} + {/* bubbling animation code */} + {cursor && ( +
+ {reactions.map((reaction) => { + return ( + + ); + })} +
+ )}
); }; diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg b/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg index 8dd523389..28d502456 100644 --- a/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg +++ b/examples/simultaneous-cursors/src/assets/icons/icon_cursor.svg @@ -1,4 +1,4 @@ - + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg b/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg index c1fe6a75d..fc76738d9 100644 --- a/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg +++ b/examples/simultaneous-cursors/src/assets/icons/icon_heart.svg @@ -1,5 +1,5 @@ - + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg b/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg index ee35df4a6..1dd4f049f 100644 --- a/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg +++ b/examples/simultaneous-cursors/src/assets/icons/icon_pen.svg @@ -1,5 +1,5 @@ - + diff --git a/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg b/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg index 397f9e8b2..5026d3cb1 100644 --- a/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg +++ b/examples/simultaneous-cursors/src/assets/icons/icon_thumbs.svg @@ -1,5 +1,5 @@ - + diff --git a/examples/simultaneous-cursors/src/components/Cursor.css b/examples/simultaneous-cursors/src/components/Cursor.css index dd58b3f29..eddccda04 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.css +++ b/examples/simultaneous-cursors/src/components/Cursor.css @@ -1,15 +1,3 @@ -.circle { - height: 24px; - width: 24px; - border-radius: 24px; - background-color: black; - position: fixed; - top: 0; - left: 0; - pointer-events: none; - z-index: 99999999; /* so that it stays on top of all other elements */ -} - .cursor { /* position: fixed; */ /* left: 0; @@ -20,6 +8,7 @@ * { cursor: none; + /* user-select: none; */ /* pointer-events: none; */ /* z-index: 100; */ } @@ -27,6 +16,7 @@ .pen-cursor { /* cursor: none; */ + pointer-events: none; position: fixed; left: -10px; top: -30px; @@ -34,6 +24,7 @@ .heart-cursor { /* cursor: none; */ + pointer-events: none; position: fixed; left: -17px; @@ -42,7 +33,7 @@ .thumbs-cursor { /* cursor: none; */ - + pointer-events: none; position: fixed; left: -17px; top: -17px; @@ -50,7 +41,7 @@ .cursor-cursor { /* cursor: none; */ - + pointer-events: none; position: fixed; left: -5px; top: -5px; diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.css b/examples/simultaneous-cursors/src/components/CursorSelections.css new file mode 100644 index 000000000..1b7653ceb --- /dev/null +++ b/examples/simultaneous-cursors/src/components/CursorSelections.css @@ -0,0 +1,5 @@ +/* .cursor-selections-container img { + background-color: black; + opacity: 0.7; + border-radius: 7px; +} */ \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index 1c180defd..e890d5877 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -1,3 +1,5 @@ +import './CursorSelections.css'; + const CursorSelections = ({ handleCursorShapeSelect, selectedCursorShape, @@ -7,38 +9,38 @@ const CursorSelections = ({
handleCursorShapeSelect("heart")} + onClick={() => handleCursorShapeSelect('heart')} className={ - selectedCursorShape === "heart" - ? "cursor-shape-selected" - : "cursor-shape-not-selected" + selectedCursorShape === 'heart' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' } src="src/assets/icons/icon_heart.svg" /> handleCursorShapeSelect("thumbs")} + onClick={() => handleCursorShapeSelect('thumbs')} className={ - selectedCursorShape === "thumbs" - ? "cursor-shape-selected" - : "cursor-shape-not-selected" + selectedCursorShape === 'thumbs' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' } src="src/assets/icons/icon_thumbs.svg" /> handleCursorShapeSelect("pen")} + onClick={() => handleCursorShapeSelect('pen')} className={ - selectedCursorShape === "pen" - ? "cursor-shape-selected" - : "cursor-shape-not-selected" + selectedCursorShape === 'pen' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' } src="src/assets/icons/icon_pen.svg" /> handleCursorShapeSelect("cursor")} + onClick={() => handleCursorShapeSelect('cursor')} className={ - selectedCursorShape === "cursor" - ? "cursor-shape-selected" - : "cursor-shape-not-selected" + selectedCursorShape === 'cursor' + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' } src="src/assets/icons/icon_cursor.svg" /> diff --git a/examples/simultaneous-cursors/src/components/FlyingReaction.jsx b/examples/simultaneous-cursors/src/components/FlyingReaction.jsx new file mode 100644 index 000000000..59a0e2c31 --- /dev/null +++ b/examples/simultaneous-cursors/src/components/FlyingReaction.jsx @@ -0,0 +1,40 @@ +import styles from './FlyingReaction.module.css'; +import '../index.css'; + +export default function FlyingReaction({ + x, + y, + timestamp, + selectedCursorShape, +}) { + console.log('selectedCursorShape ppppppppppppp ', selectedCursorShape); + + return ( +
+
+
+
+ +
+
+
+
+ ); +} diff --git a/examples/simultaneous-cursors/src/components/FlyingReaction.module.css b/examples/simultaneous-cursors/src/components/FlyingReaction.module.css new file mode 100644 index 000000000..ccf709e8b --- /dev/null +++ b/examples/simultaneous-cursors/src/components/FlyingReaction.module.css @@ -0,0 +1,96 @@ +.goUp0 { + opacity: 0; + animation: goUpAnimation0 2s, fadeOut 2s; +} + +@keyframes goUpAnimation0 { + from { + transform: translate(0px, 0px); + } + + to { + transform: translate(0px, -400px); + } +} + +.goUp1 { + opacity: 0; + animation: goUpAnimation1 2s, fadeOut 2s; +} + +@keyframes goUpAnimation1 { + from { + transform: translate(0px, 0px); + } + + to { + transform: translate(0px, -300px); + } +} + +.goUp2 { + opacity: 0; + animation: goUpAnimation2 2s, fadeOut 2s; +} + +@keyframes goUpAnimation2 { + from { + transform: translate(0px, 0px); + } + + to { + transform: translate(0px, -200px); + } +} + +.leftRight0 { + animation: leftRightAnimation0 0.3s alternate infinite ease-in-out; +} + +@keyframes leftRightAnimation0 { + from { + transform: translate(0px, 0px); + } + + to { + transform: translate(50px, 0px); + } +} + +.leftRight1 { + animation: leftRightAnimation1 0.3s alternate infinite ease-in-out; +} + +@keyframes leftRightAnimation1 { + from { + transform: translate(0px, 0px); + } + + to { + transform: translate(100px, 0px); + } +} + +.leftRight2 { + animation: leftRightAnimation2 0.3s alternate infinite ease-in-out; +} + +@keyframes leftRightAnimation2 { + from { + transform: translate(0px, 0px); + } + + to { + transform: translate(-50px, 0px); + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} diff --git a/examples/simultaneous-cursors/src/components/PenCursor.css b/examples/simultaneous-cursors/src/components/PenCursor.css index c352b8b0f..dce643097 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.css +++ b/examples/simultaneous-cursors/src/components/PenCursor.css @@ -1,7 +1,7 @@ .pen-cursor-canvas { - position: fixed; - /* height: 100vh; + position: fixed; + /* height: 100vh; width: 100vw; */ - top: 0; - left: 0; -} \ No newline at end of file + top: 0; + left: 0; +} diff --git a/examples/simultaneous-cursors/src/components/ReactionSelector.jsx b/examples/simultaneous-cursors/src/components/ReactionSelector.jsx new file mode 100644 index 000000000..c083c0fff --- /dev/null +++ b/examples/simultaneous-cursors/src/components/ReactionSelector.jsx @@ -0,0 +1,32 @@ +import React from 'react'; + +export default function ReactionSelector({ setReaction }) { + return ( +
e.stopPropagation()} + > + + + + + + +
+ ); +} + +function ReactionButton({ reaction, onSelect }) { + return ( + + ); +} diff --git a/examples/simultaneous-cursors/src/hooks/useInterval.jsx b/examples/simultaneous-cursors/src/hooks/useInterval.jsx new file mode 100644 index 000000000..2b4f14d6b --- /dev/null +++ b/examples/simultaneous-cursors/src/hooks/useInterval.jsx @@ -0,0 +1,24 @@ + +import { useRef, useEffect } from "react" + +// From Dan Abramov's blog: https://overreacted.io/making-setinterval-declarative-with-react-hooks/ + +export default function useInterval(callback, delay) { + const savedCallback = useRef(callback) + + // Remember the latest callback. + useEffect(() => { + savedCallback.current = callback + }, [callback]) + + // Set up the interval. + useEffect(() => { + function tick() { + savedCallback.current() + } + if (delay !== null) { + let id = setInterval(tick, delay) + return () => clearInterval(id) + } + }, [delay]) +} diff --git a/examples/simultaneous-cursors/src/index.css b/examples/simultaneous-cursors/src/index.css index 2a93ce767..dfe3a74d7 100644 --- a/examples/simultaneous-cursors/src/index.css +++ b/examples/simultaneous-cursors/src/index.css @@ -2,6 +2,55 @@ body { /* margin: 0; */ /* display: flex; */ /* place-items: center; */ - min-width: 320px; + /* min-width: 320px; + min-height: 100vh; */ +} + +.c1 { + /* border: solid; + border-color: red; */ + + /* pointer-events: none; */ + + left: -20px; + top: -5px; + position: absolute; +} + +.reactions-container { + position: absolute; + left: -20px; + top: -10px; + /* pointer-events: none; */ + + /* border: solid; + border-color: blue; */ +} + +/* * { + cursor: none; +} */ + +.c2 { + border: solid; + border-color: black; +} +.c3 { + border: solid; + border-color: blue; +} +.c4 { + /* border: solid; + border-color: purple; */ +} +.c5 { + border: solid; + border-color: red; min-height: 100vh; + + /* z-index: 100000; */ +} +.c8 { +} +.c76 { } diff --git a/examples/simultaneous-cursors/src/temp.jsx b/examples/simultaneous-cursors/src/temp.jsx new file mode 100644 index 000000000..a52899483 --- /dev/null +++ b/examples/simultaneous-cursors/src/temp.jsx @@ -0,0 +1,186 @@ + + + +var CursorMode; +(function (CursorMode) { + CursorMode[(CursorMode['Hidden'] = 0)] = 'Hidden'; + CursorMode[(CursorMode['Chat'] = 1)] = 'Chat'; + CursorMode[(CursorMode['ReactionSelector'] = 2)] = 'ReactionSelector'; + CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; +})(CursorMode || (CursorMode = {})); + +const Example = ({ bubbleRate, selectedCursorShape }) => { + const [state, setState] = useState({ mode: CursorMode.Hidden }); + const [reactions, setReactions] = useState([]); + + useInterval(() => { + setReactions((reactions) => + reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), + ); + }, 1000); + + useInterval(() => { + if (state.mode === CursorMode.Reaction && state.isPressed) { + setReactions((reactions) => + reactions.concat([ + { + point: { x: cursor.x, y: cursor.y }, + value: state.reaction, + timestamp: Date.now(), + }, + ]), + ); + } + }, bubbleRate); + + const [cursor, setCursor] = useState({ x: 0, y: 0 }); + + useEffect(() => { + function onKeyUp(e) { + if (e.key === '/') { + setState({ mode: CursorMode.Chat, previousMessage: null, message: '' }); + } else if (e.key === 'Escape') { + setState({ mode: CursorMode.Hidden }); + } else if (e.key === 'e') { + console.log('wutup'); + setState({ mode: CursorMode.ReactionSelector }); + } + } + + window.addEventListener('keyup', onKeyUp); + + function onKeyDown(e) { + if (e.key === '/') { + e.preventDefault(); + } + } + + window.addEventListener('keydown', onKeyDown); + + const handleMouseMove = (event) => { + const { clientX, clientY } = event; + const newCursor = { ...cursor, x: clientX, y: clientY }; + setCursor(newCursor); + }; + + document.addEventListener('mousemove', handleMouseMove, false); + + return () => { + window.removeEventListener('keyup', onKeyUp); + window.removeEventListener('keydown', onKeyDown); + window.removeEventListener('mousemove', handleMouseMove); + }; + }, []); + + return ( + <> +
{ + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: true } + : state, + ); + }} + onPointerUp={() => { + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: false } + : state, + ); + }} + > + {cursor && ( +
+ {reactions.map((reaction) => { + return ( + + ); + })} +
+ )} + + {/* {state.mode === CursorMode.ReactionSelector && ( + { + setReaction(reaction); + }} + /> + )} */} + + {cursor && ( +
+ {/* 이거는 cursor 따라다니는 emoji */} + {state.mode === CursorMode.Reaction && ( +
{state.reaction}
+ )} + + {/* 이 div 안에서 this happening takes place, and this div is tracks the x y movement */} + + {state.mode === CursorMode.Chat && ( + <> +
e.stopPropagation()} + style={{ + borderRadius: 20, + }} + > + {state.previousMessage &&
{state.previousMessage}
} + { + setState({ + mode: CursorMode.Chat, + previousMessage: null, + message: e.target.value, + }); + }} + onKeyDown={(e) => { + if (e.key === 'Enter') { + setState({ + mode: CursorMode.Chat, + previousMessage: state.message, + message: '', + }); + } else if (e.key === 'Escape') { + setState({ + mode: CursorMode.Hidden, + }); + } + }} + placeholder={state.previousMessage ? '' : 'Say something…'} + value={state.message} + maxLength={50} + /> +
+ + )} +
+ )} +
+ + ); +}; + + + From 9d8585cb9ce44d5077d6481c3d7260c5cbe461fa Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 1 Aug 2023 14:50:25 +0900 Subject: [PATCH 12/36] Adding functionality to show animation for other clients as well. --- examples/simultaneous-cursors/src/App.jsx | 256 ++++++++++++------ .../src/components/Animations.jsx | 83 ++++++ .../src/components/Cursor.css | 1 + .../src/components/Cursor.jsx | 19 +- .../src/components/FlyingReaction.jsx | 25 +- examples/simultaneous-cursors/src/index.css | 2 + 6 files changed, 268 insertions(+), 118 deletions(-) create mode 100644 examples/simultaneous-cursors/src/components/Animations.jsx diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 32b3d724c..68355584c 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -9,6 +9,7 @@ import FlyingReaction from './components/FlyingReaction'; import ReactionSelector from './components/ReactionSelector'; import useInterval from './hooks/useInterval'; import './index.css'; +import Animations from './components/Animations'; const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { apiKey: import.meta.env.VITE_YORKIE_API_KEY, @@ -35,6 +36,9 @@ const App = () => { const [clients, setClients] = useState([]); const [currClient, setCurrClient] = useState(''); const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); + + const [pointerDown, setPointerDown] = useState(false); + const [pointerUp, setPointerUp] = useState(true); const handleCursorShapeSelect = (cursorShape) => { setSelectedCursorShape(cursorShape); @@ -79,6 +83,8 @@ const App = () => { cursor: { xPos: 0, yPos: 0, + pointerDown: false, + pointerUp: true }, }, }); @@ -101,156 +107,225 @@ const App = () => { setup(); + + const handleMouseMove = (event) => { setMousePos({ x: event.clientX, y: event.clientY }); - doc.update((root, presence) => { presence.set({ cursor: { xPos: event.clientX, yPos: event.clientY, + // pointerDown: pointerDown, + // pointerUp: pointerUp }, }); }); }; - window.addEventListener('mousemove', handleMouseMove); - // what was this code here again? - ask GPT + const handlePointerDown = () => { + setPointerDown(true) + setPointerUp(false) + + doc.update((root, presence) => { + presence.set({ + cursor: { + pointerDown: true, + pointerUp: false + }, + }); + }); + } + window.addEventListener('mousedown', handlePointerDown); + + const handlePointerUp = () => { + setPointerDown(false) + setPointerUp(true) + + doc.update((root, presence) => { + presence.set({ + cursor: { + pointerDown: false, + pointerUp: true + }, + }); + }); + } + window.addEventListener('mouseup', handlePointerUp); + return () => { window.removeEventListener('mousemove', handleMouseMove); + window.removeEventListener('mousedown', handlePointerDown); + window.removeEventListener('mouseup', handlePointerDown); }; }, []); // ----------------------------------------------------------------------------- heart & thumbs animation code - const [state, setState] = useState({ mode: CursorMode.Reaction }); - const [reactions, setReactions] = useState([]); - - const bubbleRate = 100; - - // Remove reactions that are not visible anymore (every 1 sec) - useInterval(() => { - setReactions((reactions) => - reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), - ); - }, 1000); - - useInterval(() => { - console.log('working'); - console.log('state.isPressed ---- ', state.isPressed); - if (state.mode === CursorMode.Reaction && state.isPressed) { - setReactions((reactions) => - reactions.concat([ - { - point: { x: cursor.x, y: cursor.y }, - value: state.reaction, - timestamp: Date.now(), - }, - ]), - ); - } - }, bubbleRate); + // const [state, setState] = useState({ mode: CursorMode.Reaction }); + // const [reactions, setReactions] = useState([]); + + // const bubbleRate = 100; + + // // Remove reactions that are not visible anymore (every 1 sec) + // useInterval(() => { + // setReactions((reactions) => + // reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), + // ); + // }, 1000); + + // useInterval(() => { + // if (state.mode === CursorMode.Reaction && state.isPressed) { + // setReactions((reactions) => + // reactions.concat([ + // { + // point: { x: cursor.x, y: cursor.y }, + // value: state.reaction, + // timestamp: Date.now(), + // }, + // ]), + // ); + // } + // }, bubbleRate); + + // const [cursor, setCursor] = useState({ x: 0, y: 0 }); + + // useEffect(() => { + // // function onKeyUp(e) { + // // if (e.key === '/') { + // // setState({ mode: CursorMode.Chat, previousMessage: null, message: '' }); + // // } else if (e.key === 'Escape') { + // // // updateMyPresence({ message: "" }); + // // setState({ mode: CursorMode.Hidden }); + // // } else if (e.key === 'e') { + // // setState({ mode: CursorMode.ReactionSelector }); + // // } + // // } + + // // window.addEventListener('keyup', onKeyUp); + + // // function onKeyDown(e) { + // // if (e.key === '/') { + // // e.preventDefault(); + // // } + // // } + + // // window.addEventListener('keydown', onKeyDown); + + // const handleMouseMove = (event) => { + // const { clientX, clientY } = event; + // const newCursor = { ...cursor, x: clientX, y: clientY }; + // setCursor(newCursor); + // }; + + // document.addEventListener('mousemove', handleMouseMove, false); + + // return () => { + // // window.removeEventListener('keyup', onKeyUp); + // // window.removeEventListener('keydown', onKeyDown); + // window.removeEventListener('mousemove', handleMouseMove); + // }; + // }, []); + + + + + + + - const [cursor, setCursor] = useState({ x: 0, y: 0 }); - useEffect(() => { - function onKeyUp(e) { - if (e.key === '/') { - setState({ mode: CursorMode.Chat, previousMessage: null, message: '' }); - } else if (e.key === 'Escape') { - // updateMyPresence({ message: "" }); - setState({ mode: CursorMode.Hidden }); - } else if (e.key === 'e') { - setState({ mode: CursorMode.ReactionSelector }); - } - } - window.addEventListener('keyup', onKeyUp); - function onKeyDown(e) { - if (e.key === '/') { - e.preventDefault(); - } - } - window.addEventListener('keydown', onKeyDown); - const handleMouseMove = (event) => { - const { clientX, clientY } = event; - const newCursor = { ...cursor, x: clientX, y: clientY }; - setCursor(newCursor); - }; - document.addEventListener('mousemove', handleMouseMove, false); - return () => { - window.removeEventListener('keyup', onKeyUp); - window.removeEventListener('keydown', onKeyDown); - window.removeEventListener('mousemove', handleMouseMove); - }; - }, []); return (
{ - console.log('downnnn'); - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: true } - : state, - ); + // setState((state) => + // state.mode === CursorMode.Reaction + // ? { ...state, isPressed: true } + // : state, + // ); + + + + // setPointerDown(true) + // setPointerUp(false) + + // doc.update((root, presence) => { + // presence.set({ + // cursor: { + // pointerDown: true, + // pointerUp: false + // }, + // }); + // }); + }} onPointerUp={() => { - console.log('uppppp'); - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: false } - : state, - ); + // setState((state) => + // state.mode === CursorMode.Reaction + // ? { ...state, isPressed: false } + // : state, + // ); + + + + // setPointerDown(false) + // setPointerUp(true) + // doc.update((root, presence) => { + // presence.set({ + // cursor: { + // pointerDown: false, + // pointerUp: true + // }, + // }); + // }); + + + }} > - {/* simultaneous cursors display code & pen cursor display code */} {doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( ) : ( <> ); })} - {/* {doc.getPresences().map(user => - {console.log(user.clientID === client.getID(), user.presence.cursor.xPos, user.presence.cursor.yPos, user.presence.cursorShape)} - // , user.presence.cursor.yPos, user.presence.cursorShape - )} */} + {clients.map((user) => (

{user.xPos} {user.yPos}

))} -
{clients.length}
- The mouse is at position{' '} - - ({mousePos.x}, {mousePos.y}) - - ------ clients.length {clients.length} + - {/* bubbling animation code */} - {cursor && ( -
{ }} > {reactions.map((reaction) => { + {console.log('reactions.length ------------- ', reactions.length)} return ( { /> ); })} -
- )} +
*/} + + {/* */} +
); }; diff --git a/examples/simultaneous-cursors/src/components/Animations.jsx b/examples/simultaneous-cursors/src/components/Animations.jsx new file mode 100644 index 000000000..f0f3378aa --- /dev/null +++ b/examples/simultaneous-cursors/src/components/Animations.jsx @@ -0,0 +1,83 @@ +import { useEffect, useState } from 'react'; +import FlyingReaction from './FlyingReaction'; +import useInterval from '../hooks/useInterval'; +import '../index.css'; +import '../App.css'; + +var CursorMode; +(function (CursorMode) { + CursorMode[(CursorMode['Hidden'] = 0)] = 'Hidden'; + CursorMode[(CursorMode['Chat'] = 1)] = 'Chat'; + CursorMode[(CursorMode['ReactionSelector'] = 2)] = 'ReactionSelector'; + CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; +})(CursorMode || (CursorMode = {})); + +const Animations = ({ pointerDown, pointerUp, xPos, yPos, selectedCursorShape }) => { + const [state, setState] = useState({ mode: CursorMode.Reaction }); + const [reactions, setReactions] = useState([]); + + const bubbleRate = 100; + + // Remove reactions that are not visible anymore (every 1 sec) + useInterval(() => { + setReactions((reactions) => + reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), + ); + }, 1000); + + useInterval(() => { + if (state.mode === CursorMode.Reaction && state.isPressed) { + setReactions((reactions) => + reactions.concat([ + { + point: { x: xPos, y: yPos }, + value: state.reaction, + timestamp: Date.now(), + }, + ]), + ); + } + }, bubbleRate); + + useEffect(() => { + if (pointerDown) { + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: true } + : state, + ); + } + + if (pointerUp) { + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: false } + : state, + ); + } + }, [pointerDown, pointerUp]); + + return ( +
+ {reactions.map((reaction) => { + return ( + + ); + })} +
+ ); +}; + +export default Animations; diff --git a/examples/simultaneous-cursors/src/components/Cursor.css b/examples/simultaneous-cursors/src/components/Cursor.css index eddccda04..c99a50a77 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.css +++ b/examples/simultaneous-cursors/src/components/Cursor.css @@ -4,6 +4,7 @@ top: 0; */ /* background-color: none; */ /* cursor: none; we don't have it here since when selecting options, cursor pops out */ + } * { diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index e88180fe5..e4aaee76a 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -1,10 +1,14 @@ import PenCursor from './PenCursor'; import './Cursor.css'; +import Animations from './Animations'; -const Cursor = ({ selectedCursorShape, x, y }) => { +const Cursor = ({ selectedCursorShape, x, y, pointerDown, pointerUp }) => { return ( <> + + + {selectedCursorShape === 'heart' ? ( <> { ) : ( <> )} - - {/* default 어케 set 할건데 like before */} - {/* - */} - - {/* */} ); }; diff --git a/examples/simultaneous-cursors/src/components/FlyingReaction.jsx b/examples/simultaneous-cursors/src/components/FlyingReaction.jsx index 59a0e2c31..6ae1fe184 100644 --- a/examples/simultaneous-cursors/src/components/FlyingReaction.jsx +++ b/examples/simultaneous-cursors/src/components/FlyingReaction.jsx @@ -7,8 +7,6 @@ export default function FlyingReaction({ timestamp, selectedCursorShape, }) { - console.log('selectedCursorShape ppppppppppppp ', selectedCursorShape); - return (
- + {selectedCursorShape === 'heart' ? ( + + ) : ( + <> + )} + {selectedCursorShape === 'thumbs' ? ( + + ) : ( + <> + )}
diff --git a/examples/simultaneous-cursors/src/index.css b/examples/simultaneous-cursors/src/index.css index dfe3a74d7..cc1dcd3d7 100644 --- a/examples/simultaneous-cursors/src/index.css +++ b/examples/simultaneous-cursors/src/index.css @@ -53,4 +53,6 @@ body { .c8 { } .c76 { + /* border: solid; */ + /* border-color: rebeccapurple; */ } From 129b2db9d022c4d7481ea62902cb5c5fe9b5f682 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 1 Aug 2023 16:42:26 +0900 Subject: [PATCH 13/36] Working on fixing inconsistent tracking of other clients' actions. --- examples/simultaneous-cursors/src/App.jsx | 181 ++---------------- .../src/components/Animations.jsx | 8 +- .../src/components/ArrowCursor.css | 0 .../src/components/ArrowCursor.jsx | 5 - .../src/components/Cursor.css | 1 - .../src/components/Cursor.jsx | 9 +- .../src/components/HeartCursor.css | 0 .../src/components/HeartCursor.jsx | 5 - .../src/components/ReactionSelector.jsx | 32 ---- .../src/components/TestCursor.css | 0 .../src/components/TestCursor.jsx | 0 .../src/components/ThumbsCursor.css | 0 .../src/components/ThumbsCursor.jsx | 5 - 13 files changed, 25 insertions(+), 221 deletions(-) delete mode 100644 examples/simultaneous-cursors/src/components/ArrowCursor.css delete mode 100644 examples/simultaneous-cursors/src/components/ArrowCursor.jsx delete mode 100644 examples/simultaneous-cursors/src/components/HeartCursor.css delete mode 100644 examples/simultaneous-cursors/src/components/HeartCursor.jsx delete mode 100644 examples/simultaneous-cursors/src/components/ReactionSelector.jsx delete mode 100644 examples/simultaneous-cursors/src/components/TestCursor.css delete mode 100644 examples/simultaneous-cursors/src/components/TestCursor.jsx delete mode 100644 examples/simultaneous-cursors/src/components/ThumbsCursor.css delete mode 100644 examples/simultaneous-cursors/src/components/ThumbsCursor.jsx diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 68355584c..e9d45aa24 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -29,14 +29,12 @@ var CursorMode; })(CursorMode || (CursorMode = {})); const App = () => { - // ----------------------------------------------------------------------------- prescence & base cursor functionalities code - const [mousePos, setMousePos] = useState({}); const [clients, setClients] = useState([]); const [currClient, setCurrClient] = useState(''); const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); - + const [pointerDown, setPointerDown] = useState(false); const [pointerUp, setPointerUp] = useState(true); @@ -84,7 +82,7 @@ const App = () => { xPos: 0, yPos: 0, pointerDown: false, - pointerUp: true + pointerUp: true, }, }, }); @@ -107,8 +105,6 @@ const App = () => { setup(); - - const handleMouseMove = (event) => { setMousePos({ x: event.clientX, y: event.clientY }); doc.update((root, presence) => { @@ -116,8 +112,6 @@ const App = () => { cursor: { xPos: event.clientX, yPos: event.clientY, - // pointerDown: pointerDown, - // pointerUp: pointerUp }, }); }); @@ -125,33 +119,33 @@ const App = () => { window.addEventListener('mousemove', handleMouseMove); const handlePointerDown = () => { - setPointerDown(true) - setPointerUp(false) + setPointerDown(true); + setPointerUp(false); doc.update((root, presence) => { presence.set({ cursor: { pointerDown: true, - pointerUp: false + pointerUp: false, }, }); }); - } + }; window.addEventListener('mousedown', handlePointerDown); const handlePointerUp = () => { - setPointerDown(false) - setPointerUp(true) + setPointerDown(false); + setPointerUp(true); doc.update((root, presence) => { presence.set({ cursor: { pointerDown: false, - pointerUp: true + pointerUp: true, }, }); }); - } + }; window.addEventListener('mouseup', handlePointerUp); return () => { @@ -161,137 +155,8 @@ const App = () => { }; }, []); - // ----------------------------------------------------------------------------- heart & thumbs animation code - - // const [state, setState] = useState({ mode: CursorMode.Reaction }); - // const [reactions, setReactions] = useState([]); - - // const bubbleRate = 100; - - // // Remove reactions that are not visible anymore (every 1 sec) - // useInterval(() => { - // setReactions((reactions) => - // reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), - // ); - // }, 1000); - - // useInterval(() => { - // if (state.mode === CursorMode.Reaction && state.isPressed) { - // setReactions((reactions) => - // reactions.concat([ - // { - // point: { x: cursor.x, y: cursor.y }, - // value: state.reaction, - // timestamp: Date.now(), - // }, - // ]), - // ); - // } - // }, bubbleRate); - - // const [cursor, setCursor] = useState({ x: 0, y: 0 }); - - // useEffect(() => { - // // function onKeyUp(e) { - // // if (e.key === '/') { - // // setState({ mode: CursorMode.Chat, previousMessage: null, message: '' }); - // // } else if (e.key === 'Escape') { - // // // updateMyPresence({ message: "" }); - // // setState({ mode: CursorMode.Hidden }); - // // } else if (e.key === 'e') { - // // setState({ mode: CursorMode.ReactionSelector }); - // // } - // // } - - // // window.addEventListener('keyup', onKeyUp); - - // // function onKeyDown(e) { - // // if (e.key === '/') { - // // e.preventDefault(); - // // } - // // } - - // // window.addEventListener('keydown', onKeyDown); - - // const handleMouseMove = (event) => { - // const { clientX, clientY } = event; - // const newCursor = { ...cursor, x: clientX, y: clientY }; - // setCursor(newCursor); - // }; - - // document.addEventListener('mousemove', handleMouseMove, false); - - // return () => { - // // window.removeEventListener('keyup', onKeyUp); - // // window.removeEventListener('keydown', onKeyDown); - // window.removeEventListener('mousemove', handleMouseMove); - // }; - // }, []); - - - - - - - - - - - - - - - - return ( -
{ - // setState((state) => - // state.mode === CursorMode.Reaction - // ? { ...state, isPressed: true } - // : state, - // ); - - - - // setPointerDown(true) - // setPointerUp(false) - - // doc.update((root, presence) => { - // presence.set({ - // cursor: { - // pointerDown: true, - // pointerUp: false - // }, - // }); - // }); - - }} - onPointerUp={() => { - // setState((state) => - // state.mode === CursorMode.Reaction - // ? { ...state, isPressed: false } - // : state, - // ); - - - - // setPointerDown(false) - // setPointerUp(true) - // doc.update((root, presence) => { - // presence.set({ - // cursor: { - // pointerDown: false, - // pointerUp: true - // }, - // }); - // }); - - - - }} - > +
{doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( { selectedCursorShape={selectedCursorShape} clients={clients} /> - - {/*
- {reactions.map((reaction) => { - {console.log('reactions.length ------------- ', reactions.length)} - return ( - - ); - })} -
*/} - - {/* */} -
); }; diff --git a/examples/simultaneous-cursors/src/components/Animations.jsx b/examples/simultaneous-cursors/src/components/Animations.jsx index f0f3378aa..9aa191521 100644 --- a/examples/simultaneous-cursors/src/components/Animations.jsx +++ b/examples/simultaneous-cursors/src/components/Animations.jsx @@ -12,7 +12,13 @@ var CursorMode; CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; })(CursorMode || (CursorMode = {})); -const Animations = ({ pointerDown, pointerUp, xPos, yPos, selectedCursorShape }) => { +const Animations = ({ + pointerDown, + pointerUp, + xPos, + yPos, + selectedCursorShape, +}) => { const [state, setState] = useState({ mode: CursorMode.Reaction }); const [reactions, setReactions] = useState([]); diff --git a/examples/simultaneous-cursors/src/components/ArrowCursor.css b/examples/simultaneous-cursors/src/components/ArrowCursor.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/simultaneous-cursors/src/components/ArrowCursor.jsx b/examples/simultaneous-cursors/src/components/ArrowCursor.jsx deleted file mode 100644 index cc44ee7e0..000000000 --- a/examples/simultaneous-cursors/src/components/ArrowCursor.jsx +++ /dev/null @@ -1,5 +0,0 @@ -// const ArrowCursor = () => { -// return ( ); -// } - -// export default ArrowCursor; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/Cursor.css b/examples/simultaneous-cursors/src/components/Cursor.css index c99a50a77..eddccda04 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.css +++ b/examples/simultaneous-cursors/src/components/Cursor.css @@ -4,7 +4,6 @@ top: 0; */ /* background-color: none; */ /* cursor: none; we don't have it here since when selecting options, cursor pops out */ - } * { diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index e4aaee76a..026337de1 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -6,8 +6,13 @@ import Animations from './Animations'; const Cursor = ({ selectedCursorShape, x, y, pointerDown, pointerUp }) => { return ( <> - - + {selectedCursorShape === 'heart' ? ( <> diff --git a/examples/simultaneous-cursors/src/components/HeartCursor.css b/examples/simultaneous-cursors/src/components/HeartCursor.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/simultaneous-cursors/src/components/HeartCursor.jsx b/examples/simultaneous-cursors/src/components/HeartCursor.jsx deleted file mode 100644 index 7d34a4146..000000000 --- a/examples/simultaneous-cursors/src/components/HeartCursor.jsx +++ /dev/null @@ -1,5 +0,0 @@ -// const HeartCursor = () => { -// return ( ); -// } - -// export default HeartCursor; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/ReactionSelector.jsx b/examples/simultaneous-cursors/src/components/ReactionSelector.jsx deleted file mode 100644 index c083c0fff..000000000 --- a/examples/simultaneous-cursors/src/components/ReactionSelector.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; - -export default function ReactionSelector({ setReaction }) { - return ( -
e.stopPropagation()} - > - - - - - - -
- ); -} - -function ReactionButton({ reaction, onSelect }) { - return ( - - ); -} diff --git a/examples/simultaneous-cursors/src/components/TestCursor.css b/examples/simultaneous-cursors/src/components/TestCursor.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/simultaneous-cursors/src/components/TestCursor.jsx b/examples/simultaneous-cursors/src/components/TestCursor.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/simultaneous-cursors/src/components/ThumbsCursor.css b/examples/simultaneous-cursors/src/components/ThumbsCursor.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/simultaneous-cursors/src/components/ThumbsCursor.jsx b/examples/simultaneous-cursors/src/components/ThumbsCursor.jsx deleted file mode 100644 index 355164743..000000000 --- a/examples/simultaneous-cursors/src/components/ThumbsCursor.jsx +++ /dev/null @@ -1,5 +0,0 @@ -// const ThumbsCursor = () => { -// return ( ); -// } - -// export default ThumbsCursor; \ No newline at end of file From 392408e1a75d5c86b8173911123dc1a1d3a11d29 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 1 Aug 2023 16:43:00 +0900 Subject: [PATCH 14/36] More organizing code and files. --- examples/simultaneous-cursors/src/App.css | 16 +- examples/simultaneous-cursors/src/App.jsx | 154 ++++++++------- examples/simultaneous-cursors/src/Apptest.jsx | 120 ----------- .../src/components/Animations.jsx | 3 +- .../src/components/Cursor.css | 23 +-- .../src/components/PenCursor.css | 7 - .../src/components/PenCursor.jsx | 1 - examples/simultaneous-cursors/src/index.css | 55 +----- examples/simultaneous-cursors/src/temp.jsx | 186 ------------------ 9 files changed, 99 insertions(+), 466 deletions(-) delete mode 100644 examples/simultaneous-cursors/src/Apptest.jsx delete mode 100644 examples/simultaneous-cursors/src/components/PenCursor.css delete mode 100644 examples/simultaneous-cursors/src/temp.jsx diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index daeee0370..2276c7484 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -5,13 +5,11 @@ } .cursor-selector-container { - /* z-index: 10; */ + user-select: none; height: 92px; width: 192px; - /* border: solid; */ - position: fixed; bottom: 0; right: 0; @@ -24,16 +22,12 @@ } .cursor-selections-container { - /* border: solid; */ - display: flex; justify-content: space-between; align-items: center; } .num-users-container { - /* border: solid; */ - border-radius: 8px; background-color: rgba(27, 26, 26, 0.8); @@ -48,13 +42,11 @@ } .cursor-shape-selected { - /* cursor: none; */ background-color: rgb(81, 76, 73); border-radius: 9px; } .cursor-shape-not-selected { - /* cursor: none; */ background-color: rgb(81, 76, 73); opacity: 0.5; border-radius: 9px; @@ -64,9 +56,3 @@ opacity: 0.7; border-radius: 9px; } - -* { - /* cursor: none; */ - /* pointer-events: none; */ - /* z-index: 100; */ -} diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index e9d45aa24..d608dd842 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,16 +1,9 @@ import { useEffect, useRef, useState, useCallback } from 'react'; import './App.css'; - import yorkie, { DocEventType } from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; -import FlyingReaction from './components/FlyingReaction'; -import ReactionSelector from './components/ReactionSelector'; -import useInterval from './hooks/useInterval'; -import './index.css'; -import Animations from './components/Animations'; - const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { apiKey: import.meta.env.VITE_YORKIE_API_KEY, }); @@ -32,7 +25,6 @@ const App = () => { const [mousePos, setMousePos] = useState({}); const [clients, setClients] = useState([]); - const [currClient, setCurrClient] = useState(''); const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); const [pointerDown, setPointerDown] = useState(false); @@ -50,74 +42,62 @@ const App = () => { useEffect(() => { const setup = async () => { - try { - await client.activate(); + await client.activate(); - doc.subscribe('presence', (event) => { + doc.subscribe('presence', (event) => { + setClients(doc.getPresences()); + if (event.type !== DocEventType.PresenceChanged) { setClients(doc.getPresences()); - if (event.type !== DocEventType.PresenceChanged) { - setClients(doc.getPresences()); - } - }); - doc.subscribe('my-presence', (event) => { + } + }); + doc.subscribe('my-presence', (event) => { + setClients(doc.getPresences()); + if (event.type === DocEventType.Initialized) { setClients(doc.getPresences()); - if (event.type === DocEventType.Initialized) { - setClients(doc.getPresences()); - } - }); - doc.subscribe('others', (event) => { + } + }); + doc.subscribe('others', (event) => { + setClients(doc.getPresences()); + if ( + event.type === DocEventType.Watched || + event.type === DocEventType.Unwatched + ) { setClients(doc.getPresences()); - if ( - event.type === DocEventType.Watched || - event.type === DocEventType.Unwatched - ) { - setClients(doc.getPresences()); - } - }); + } + }); - await client.attach(doc, { - initialPresence: { - cursorShape: 'cursor', - cursor: { - xPos: 0, - yPos: 0, - pointerDown: false, - pointerUp: true, - }, + await client.attach(doc, { + initialPresence: { + cursorShape: 'cursor', + cursor: { + xPos: 0, + yPos: 0, + pointerDown: false, + pointerUp: true, }, - }); + }, + }); - window.addEventListener('beforeunload', () => { - // client.detach(doc); - client.deactivate(); - }); - } catch (error) { - console.log( - ' ------------------------------------------------------ error', - error, - ); - console.log( - ' ------------------------------------------------------ error', - error.message, - ); - } + window.addEventListener('beforeunload', () => { + client.deactivate(); + }); }; setup(); - const handleMouseMove = (event) => { - setMousePos({ x: event.clientX, y: event.clientY }); + const handlePointerUp = () => { + setPointerDown(false); + setPointerUp(true); + doc.update((root, presence) => { presence.set({ cursor: { - xPos: event.clientX, - yPos: event.clientY, + pointerDown: false, + pointerUp: true, }, }); }); }; - window.addEventListener('mousemove', handleMouseMove); - const handlePointerDown = () => { setPointerDown(true); setPointerUp(false); @@ -131,32 +111,70 @@ const App = () => { }); }); }; - window.addEventListener('mousedown', handlePointerDown); - - const handlePointerUp = () => { - setPointerDown(false); - setPointerUp(true); - + const handleMouseMove = (event) => { + setMousePos({ x: event.clientX, y: event.clientY }); doc.update((root, presence) => { presence.set({ cursor: { - pointerDown: false, - pointerUp: true, + xPos: event.clientX, + yPos: event.clientY, }, }); }); }; + + window.addEventListener('mousedown', handlePointerDown); + window.addEventListener('mouseup', handlePointerUp); + window.addEventListener('mousemove', handleMouseMove); + return () => { - window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mousedown', handlePointerDown); - window.removeEventListener('mouseup', handlePointerDown); + window.removeEventListener('mouseup', handlePointerUp); + window.removeEventListener('mousemove', handleMouseMove); }; }, []); + // useEffect(() => { + + // const interval = setInterval(() => { + // console.log(doc.getPresences()) + // console.log(pointerDown) + + // // doc.update((root, presence) => { + // // presence.set({ + // // cursor: { + // // pointerDown: pointerDown, + // // pointerUp: pointerUp, + // // }, + // // }); + // // }); + + // if (pointerDown === false) { // pointerUp + // doc.update((root, presence) => { + // console.log(pointerDown) + // presence.set({ + // cursor: { + // pointerDown: pointerDown, + // pointerUp: pointerUp, + // }, + // }); + // }); + // } + + // }, 2000); // 3000 milliseconds = 3 seconds + + // // Cleanup function to remove the interval when the component unmounts + // return () => { + // clearInterval(interval); + // }; + // }, []); + return (
+ {console.log(doc.getPresences())} + {console.log('pointerDown --------------------------- ', pointerDown)} {doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( { - - const [currClient, setCurrClient] = useState(); - const [clients, setClients] = useState([]); - - - - useEffect(() => { - - - - - const setup = async () => { - - await client.activate(); - - client.subscribe((event) => { - - console.log("client event ---------- ", event.type) - - if (event.type === 'peers-changed') { - - setClients(client.getPeersByDocKey(doc.getKey())) - - const getCommonValuesByProperty = (array1, array2, property) => { - return array1.filter((item1) => array2.some((item2) => item2[property] === item1[property])); - } - - doc.update((root) => { - root.users = getCommonValuesByProperty(root.users, client.getPeersByDocKey(doc.getKey()), 'clientID'); - }); - - } - - if (event.type === "documents-changed") { - doc.update((root) => { - setOtherClients(root.users) - }); - } - - }); - - - - setCurrClient(client.getID()); - - - - await client.attach(doc); - - - - - doc.subscribe((event) => { - - console.log("doc event ---------- ", event.type) - - if (event.type === 'remote-change') { - doc.update((root) => { - setOtherClients(root.users) - }); - } - }) - - - - - - doc.update((root) => { - root.users = [] - }); - - - window.addEventListener('beforeunload', () => { - client.deactivate(); - }); - - } - - - - setup(); - - - - - - }, []); - - - - return ( -
- {clients.length}

---------------------

-
- ); -} - -export default App; \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/components/Animations.jsx b/examples/simultaneous-cursors/src/components/Animations.jsx index 9aa191521..84df07085 100644 --- a/examples/simultaneous-cursors/src/components/Animations.jsx +++ b/examples/simultaneous-cursors/src/components/Animations.jsx @@ -65,8 +65,7 @@ const Animations = ({ return (
{ - const [state, setState] = useState({ mode: CursorMode.Hidden }); - const [reactions, setReactions] = useState([]); - - useInterval(() => { - setReactions((reactions) => - reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), - ); - }, 1000); - - useInterval(() => { - if (state.mode === CursorMode.Reaction && state.isPressed) { - setReactions((reactions) => - reactions.concat([ - { - point: { x: cursor.x, y: cursor.y }, - value: state.reaction, - timestamp: Date.now(), - }, - ]), - ); - } - }, bubbleRate); - - const [cursor, setCursor] = useState({ x: 0, y: 0 }); - - useEffect(() => { - function onKeyUp(e) { - if (e.key === '/') { - setState({ mode: CursorMode.Chat, previousMessage: null, message: '' }); - } else if (e.key === 'Escape') { - setState({ mode: CursorMode.Hidden }); - } else if (e.key === 'e') { - console.log('wutup'); - setState({ mode: CursorMode.ReactionSelector }); - } - } - - window.addEventListener('keyup', onKeyUp); - - function onKeyDown(e) { - if (e.key === '/') { - e.preventDefault(); - } - } - - window.addEventListener('keydown', onKeyDown); - - const handleMouseMove = (event) => { - const { clientX, clientY } = event; - const newCursor = { ...cursor, x: clientX, y: clientY }; - setCursor(newCursor); - }; - - document.addEventListener('mousemove', handleMouseMove, false); - - return () => { - window.removeEventListener('keyup', onKeyUp); - window.removeEventListener('keydown', onKeyDown); - window.removeEventListener('mousemove', handleMouseMove); - }; - }, []); - - return ( - <> -
{ - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: true } - : state, - ); - }} - onPointerUp={() => { - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: false } - : state, - ); - }} - > - {cursor && ( -
- {reactions.map((reaction) => { - return ( - - ); - })} -
- )} - - {/* {state.mode === CursorMode.ReactionSelector && ( - { - setReaction(reaction); - }} - /> - )} */} - - {cursor && ( -
- {/* 이거는 cursor 따라다니는 emoji */} - {state.mode === CursorMode.Reaction && ( -
{state.reaction}
- )} - - {/* 이 div 안에서 this happening takes place, and this div is tracks the x y movement */} - - {state.mode === CursorMode.Chat && ( - <> -
e.stopPropagation()} - style={{ - borderRadius: 20, - }} - > - {state.previousMessage &&
{state.previousMessage}
} - { - setState({ - mode: CursorMode.Chat, - previousMessage: null, - message: e.target.value, - }); - }} - onKeyDown={(e) => { - if (e.key === 'Enter') { - setState({ - mode: CursorMode.Chat, - previousMessage: state.message, - message: '', - }); - } else if (e.key === 'Escape') { - setState({ - mode: CursorMode.Hidden, - }); - } - }} - placeholder={state.previousMessage ? '' : 'Say something…'} - value={state.message} - maxLength={50} - /> -
- - )} -
- )} -
- - ); -}; - - - From 861cdda02ba4a4474c1b4a812e8de7dcb7a02b18 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 1 Aug 2023 16:45:32 +0900 Subject: [PATCH 15/36] Files name change. --- examples/simultaneous-cursors/src/components/Animations.jsx | 4 ++-- .../components/{FlyingReaction.jsx => SingleAnimation.jsx} | 4 ++-- .../{FlyingReaction.module.css => SingleAnimation.module.css} | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename examples/simultaneous-cursors/src/components/{FlyingReaction.jsx => SingleAnimation.jsx} (90%) rename examples/simultaneous-cursors/src/components/{FlyingReaction.module.css => SingleAnimation.module.css} (100%) diff --git a/examples/simultaneous-cursors/src/components/Animations.jsx b/examples/simultaneous-cursors/src/components/Animations.jsx index 84df07085..4f87b1e99 100644 --- a/examples/simultaneous-cursors/src/components/Animations.jsx +++ b/examples/simultaneous-cursors/src/components/Animations.jsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import FlyingReaction from './FlyingReaction'; +import SingleAnimation from './SingleAnimation'; import useInterval from '../hooks/useInterval'; import '../index.css'; import '../App.css'; @@ -72,7 +72,7 @@ const Animations = ({ > {reactions.map((reaction) => { return ( - Date: Tue, 1 Aug 2023 16:48:33 +0900 Subject: [PATCH 16/36] Awaiting review for current progress(?) --- examples/simultaneous-cursors/src/App.css | 2 +- examples/simultaneous-cursors/src/App.jsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 2276c7484..a4cc849c4 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -1,5 +1,5 @@ .general-container { - border: solid; + /* border: solid; */ min-width: 100vw; min-height: 100vh; } diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index d608dd842..d491fb887 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -173,8 +173,8 @@ const App = () => { return (
- {console.log(doc.getPresences())} - {console.log('pointerDown --------------------------- ', pointerDown)} + {/* {console.log(doc.getPresences())} */} + {/* {console.log('pointerDown --------------------------- ', pointerDown)} */} {doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( Date: Tue, 1 Aug 2023 17:14:27 +0900 Subject: [PATCH 17/36] Organizing more code and files. --- examples/simultaneous-cursors/src/App.css | 8 +++++ examples/simultaneous-cursors/src/App.jsx | 10 +----- .../src/components/Cursor.css | 3 -- .../src/components/Cursor.jsx | 6 ++-- .../src/components/CursorSelections.css | 5 --- .../src/components/CursorSelections.jsx | 2 -- .../{Animations.jsx => FullAnimation.jsx} | 31 +++++++++---------- .../src/components/PenCursor.jsx | 1 - .../src/components/SingleAnimation.jsx | 3 +- examples/simultaneous-cursors/src/index.css | 7 ----- examples/simultaneous-cursors/src/main.jsx | 11 +++---- 11 files changed, 33 insertions(+), 54 deletions(-) delete mode 100644 examples/simultaneous-cursors/src/components/CursorSelections.css rename examples/simultaneous-cursors/src/components/{Animations.jsx => FullAnimation.jsx} (72%) delete mode 100644 examples/simultaneous-cursors/src/index.css diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index a4cc849c4..b7e8f404d 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -56,3 +56,11 @@ opacity: 0.7; border-radius: 9px; } + +.single-animation-container { + user-select: none; + pointer-events: none; + position: absolute; + left: -20px; + top: -10px; +} diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index d491fb887..3d40e99f4 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,8 +1,8 @@ import { useEffect, useRef, useState, useCallback } from 'react'; -import './App.css'; import yorkie, { DocEventType } from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; +import './App.css'; const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { apiKey: import.meta.env.VITE_YORKIE_API_KEY, @@ -13,14 +13,6 @@ const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { const doc = new yorkie.Document('vitecursortask'); -var CursorMode; -(function (CursorMode) { - CursorMode[(CursorMode['Hidden'] = 0)] = 'Hidden'; - CursorMode[(CursorMode['Chat'] = 1)] = 'Chat'; - CursorMode[(CursorMode['ReactionSelector'] = 2)] = 'ReactionSelector'; - CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; -})(CursorMode || (CursorMode = {})); - const App = () => { const [mousePos, setMousePos] = useState({}); diff --git a/examples/simultaneous-cursors/src/components/Cursor.css b/examples/simultaneous-cursors/src/components/Cursor.css index 75b45bbf3..830f831a8 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.css +++ b/examples/simultaneous-cursors/src/components/Cursor.css @@ -1,8 +1,5 @@ * { cursor: none; - /* user-select: none; */ - /* pointer-events: none; */ - /* z-index: 100; */ } .pen-cursor { diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index 026337de1..dda0e6bec 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -1,12 +1,12 @@ import PenCursor from './PenCursor'; - +import FullAnimation from './FullAnimation'; import './Cursor.css'; -import Animations from './Animations'; +import '../App.css'; const Cursor = ({ selectedCursorShape, x, y, pointerDown, pointerUp }) => { return ( <> - { const [state, setState] = useState({ mode: CursorMode.Reaction }); - const [reactions, setReactions] = useState([]); + const [singleAnimation, setSingleAnimation] = useState([]); const bubbleRate = 100; - // Remove reactions that are not visible anymore (every 1 sec) + // Remove singleAnimation not visible anymore (every 1 sec) useInterval(() => { - setReactions((reactions) => - reactions.filter((reaction) => reaction.timestamp > Date.now() - 4000), + setSingleAnimation((singleAnimation) => + singleAnimation.filter( + (animation) => animation.timestamp > Date.now() - 4000, + ), ); }, 1000); useInterval(() => { if (state.mode === CursorMode.Reaction && state.isPressed) { - setReactions((reactions) => - reactions.concat([ + setSingleAnimation((singleAnimation) => + singleAnimation.concat([ { point: { x: xPos, y: yPos }, value: state.reaction, @@ -65,18 +65,17 @@ const Animations = ({ return (
- {reactions.map((reaction) => { + {singleAnimation.map((animation) => { return ( ); @@ -85,4 +84,4 @@ const Animations = ({ ); }; -export default Animations; +export default FullAnimation; diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index e843b9aff..78958cf2a 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -39,7 +39,6 @@ const PenCursor = ({ xPos, yPos }) => { if (point.lifetime > duration) { points.shift(); } else { - const lifePercent = point.lifetime / duration; const spreadRate = 5; // i.e. line width ctx.lineJoin = 'round'; diff --git a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx index e62658631..74953aedb 100644 --- a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx @@ -1,5 +1,4 @@ import styles from './SingleAnimation.module.css'; -import '../index.css'; export default function SingleAnimation({ x, @@ -8,7 +7,7 @@ export default function SingleAnimation({ selectedCursorShape, }) { return ( -
+
- + , // , -) +); From 273e5925392ae2caf325b7b2184b763f259d13a4 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Tue, 1 Aug 2023 17:16:11 +0900 Subject: [PATCH 18/36] More code organizing. --- examples/simultaneous-cursors/src/App.css | 41 +++++++++++++++++++ .../src/components/Cursor.css | 40 ------------------ .../src/components/Cursor.jsx | 2 - 3 files changed, 41 insertions(+), 42 deletions(-) delete mode 100644 examples/simultaneous-cursors/src/components/Cursor.css diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index b7e8f404d..d61210dd0 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -64,3 +64,44 @@ left: -20px; top: -10px; } + +* { + cursor: none; +} + +.pen-cursor { + user-select: none; + pointer-events: none; + position: fixed; + left: -10px; + top: -30px; +} +.pen-cursor-canvas { + position: fixed; + top: 0; + left: 0; +} + +.heart-cursor { + user-select: none; + pointer-events: none; + position: fixed; + left: -17px; + top: -17px; +} + +.thumbs-cursor { + user-select: none; + pointer-events: none; + position: fixed; + left: -17px; + top: -17px; +} + +.cursor-cursor { + user-select: none; + pointer-events: none; + position: fixed; + left: -5px; + top: -5px; +} diff --git a/examples/simultaneous-cursors/src/components/Cursor.css b/examples/simultaneous-cursors/src/components/Cursor.css deleted file mode 100644 index 830f831a8..000000000 --- a/examples/simultaneous-cursors/src/components/Cursor.css +++ /dev/null @@ -1,40 +0,0 @@ -* { - cursor: none; -} - -.pen-cursor { - user-select: none; - pointer-events: none; - position: fixed; - left: -10px; - top: -30px; -} -.pen-cursor-canvas { - position: fixed; - top: 0; - left: 0; -} - -.heart-cursor { - user-select: none; - pointer-events: none; - position: fixed; - left: -17px; - top: -17px; -} - -.thumbs-cursor { - user-select: none; - pointer-events: none; - position: fixed; - left: -17px; - top: -17px; -} - -.cursor-cursor { - user-select: none; - pointer-events: none; - position: fixed; - left: -5px; - top: -5px; -} diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index dda0e6bec..f765e9d06 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -1,7 +1,5 @@ import PenCursor from './PenCursor'; import FullAnimation from './FullAnimation'; -import './Cursor.css'; -import '../App.css'; const Cursor = ({ selectedCursorShape, x, y, pointerDown, pointerUp }) => { return ( From cc29935538ed29254cbc7881c540c307092987bd Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Wed, 2 Aug 2023 14:24:07 +0900 Subject: [PATCH 19/36] Allowing client names to appear next to cursor. Fixed code for updating presence data. Allowing pen to draw only when mouse is pressed down. --- examples/simultaneous-cursors/src/App.css | 82 ++++++++++++- examples/simultaneous-cursors/src/App.jsx | 112 +++++++----------- .../src/components/Cursor.jsx | 7 +- .../src/components/FullAnimation.jsx | 12 +- 4 files changed, 132 insertions(+), 81 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index d61210dd0..6c2ba8b8e 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -1,6 +1,16 @@ +body { + /* border: solid; */ + border-color: blue; + + max-width: 100vw; + min-height: 100vh; + /* overflow-x: hidden; */ +} + .general-container { /* border: solid; */ - min-width: 100vw; + border-color: red; + max-width: 100vw; min-height: 100vh; } @@ -105,3 +115,73 @@ left: -5px; top: -5px; } + +.cursor-name { + position: fixed; + left: 35px; + top: -10px; +} + + + + +/* Form Styles */ +.client-name-input-form { + position: fixed; + display: flex; + flex-direction: column; + justify-content: space-evenly; + max-width: 200px; + min-height: 120px; + margin: 0 auto; +} + +.form-group { + margin-bottom: 15px; +} + +/* Input Styles */ +.client-name-input { + padding: 10px; + font-size: 16px; + border: 2px solid #ccc; + border-radius: 8px; + width: 100%; + transition: border-color 0.3s, box-shadow 0.3s; +} +.client-name-input:hover { + border-color: #999; +} + +.client-name-input:focus { + border-color: #007bff; + box-shadow: 0 0 8px rgba(0, 123, 255, 0.5); + outline: none; /* Remove the default outline */ +} + +.client-name-input::placeholder { + color: #ccc; +} + +/* Button Styles */ +.form-submit-button { + z-index: 10000; + padding: 8px 20px; /* Adjusted padding for a smaller button */ + font-size: 10px; + background-color: #007bff; + color: #fff; + border: none; + border-radius: 8px; + transition: background-color 0.3s; + width: 60px; + display: flex; + justify-content: center; +} + +.form-submit-button:hover { + background-color: #0056b3; +} + +.form-submit-button:focus { + outline: none; /* Remove the default outline */ +} diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 3d40e99f4..66a0fc166 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -19,8 +19,7 @@ const App = () => { const [clients, setClients] = useState([]); const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); - const [pointerDown, setPointerDown] = useState(false); - const [pointerUp, setPointerUp] = useState(true); + const [pointerDown, setPointerDown] = useState(false); // try to make into a single variable const handleCursorShapeSelect = (cursorShape) => { setSelectedCursorShape(cursorShape); @@ -38,34 +37,20 @@ const App = () => { doc.subscribe('presence', (event) => { setClients(doc.getPresences()); - if (event.type !== DocEventType.PresenceChanged) { - setClients(doc.getPresences()); - } - }); - doc.subscribe('my-presence', (event) => { - setClients(doc.getPresences()); - if (event.type === DocEventType.Initialized) { - setClients(doc.getPresences()); - } - }); - doc.subscribe('others', (event) => { - setClients(doc.getPresences()); - if ( - event.type === DocEventType.Watched || - event.type === DocEventType.Unwatched - ) { - setClients(doc.getPresences()); - } + // console.log( + // 'prescence event --- ', + // event.value.presence.cursor.pointerDown, + // ); // .type 을 안해도, 무슨 value 가 같이 오는지 보는것도 중요 }); await client.attach(doc, { initialPresence: { + clientName: '', cursorShape: 'cursor', cursor: { xPos: 0, yPos: 0, pointerDown: false, - pointerUp: true, }, }, }); @@ -78,36 +63,42 @@ const App = () => { setup(); const handlePointerUp = () => { + console.log('handlePointerUp called 😁'); setPointerDown(false); - setPointerUp(true); doc.update((root, presence) => { + const prevCursor = doc.getMyPresence().cursor; presence.set({ cursor: { + ...prevCursor, pointerDown: false, - pointerUp: true, }, }); }); }; const handlePointerDown = () => { + // console.log('handlePointerDown called 🤢'); // ctrl cmd space setPointerDown(true); - setPointerUp(false); doc.update((root, presence) => { + const prevCursor = doc.getMyPresence().cursor; presence.set({ cursor: { + ...prevCursor, pointerDown: true, - pointerUp: false, }, }); }); }; const handleMouseMove = (event) => { + // console.log('pointerDown ----- 😈 ', pointerDown); setMousePos({ x: event.clientX, y: event.clientY }); doc.update((root, presence) => { + // presence.get('cursor') + const prevCursor = doc.getMyPresence().cursor; presence.set({ cursor: { + ...prevCursor, // 위에 있는 as well like here, use spread operator, not copying in local state variables also try to think, why is the Yorkie state and local state different, as well as then which one to use maybe, only update Yorkie, then use that yorkie data to update local? so putting priority on Yorkie data over local data, i.e. local data Follows Yorkie data xPos: event.clientX, yPos: event.clientY, }, @@ -128,71 +119,56 @@ const App = () => { }; }, []); - // useEffect(() => { - - // const interval = setInterval(() => { - // console.log(doc.getPresences()) - // console.log(pointerDown) - - // // doc.update((root, presence) => { - // // presence.set({ - // // cursor: { - // // pointerDown: pointerDown, - // // pointerUp: pointerUp, - // // }, - // // }); - // // }); - - // if (pointerDown === false) { // pointerUp - // doc.update((root, presence) => { - // console.log(pointerDown) - // presence.set({ - // cursor: { - // pointerDown: pointerDown, - // pointerUp: pointerUp, - // }, - // }); - // }); - // } - - // }, 2000); // 3000 milliseconds = 3 seconds - - // // Cleanup function to remove the interval when the component unmounts - // return () => { - // clearInterval(interval); - // }; - // }, []); + const handleFormSubmit = (event) => { + console.log('dddddddd') + event.preventDefault(); + setClientName(''); + doc.update((root, presence) => { + presence.set({ + clientName: clientName, + }); + }); + }; + + const [clientName, setClientName] = useState(''); return (
- {/* {console.log(doc.getPresences())} */} - {/* {console.log('pointerDown --------------------------- ', pointerDown)} */} +
+ + setClientName(event.target.value)} + value={clientName} + placeholder='Hit Enter to Submit' + /> + {/* */} +
+ + {doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( ) : ( <> ); })} + {console.log(doc.getMyPresence().cursor)} - {clients.map((user) => ( -

- {user.xPos} {user.yPos} -

- ))} { +const Cursor = ({ clientName, selectedCursorShape, x, y, pointerDown }) => { return ( <> +

{clientName}

+ { className="pen-cursor" style={{ transform: `translate3d(${x}px, ${y}px, 0)` }} /> - + {pointerDown && } ) : ( <> diff --git a/examples/simultaneous-cursors/src/components/FullAnimation.jsx b/examples/simultaneous-cursors/src/components/FullAnimation.jsx index 560ed363c..bfb046521 100644 --- a/examples/simultaneous-cursors/src/components/FullAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/FullAnimation.jsx @@ -10,13 +10,7 @@ var CursorMode; CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; })(CursorMode || (CursorMode = {})); -const FullAnimation = ({ - pointerDown, - pointerUp, - xPos, - yPos, - selectedCursorShape, -}) => { +const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { const [state, setState] = useState({ mode: CursorMode.Reaction }); const [singleAnimation, setSingleAnimation] = useState([]); @@ -54,14 +48,14 @@ const FullAnimation = ({ ); } - if (pointerUp) { + if (!pointerDown) { setState((state) => state.mode === CursorMode.Reaction ? { ...state, isPressed: false } : state, ); } - }, [pointerDown, pointerUp]); + }, [pointerDown]); return (
Date: Wed, 2 Aug 2023 14:54:35 +0900 Subject: [PATCH 20/36] Dropping name setting form related code for further bug fixing. --- examples/simultaneous-cursors/src/App.css | 66 +------------------ examples/simultaneous-cursors/src/App.jsx | 45 +++---------- .../src/components/Cursor.jsx | 6 +- 3 files changed, 12 insertions(+), 105 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 6c2ba8b8e..589267d35 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -120,68 +120,4 @@ body { position: fixed; left: 35px; top: -10px; -} - - - - -/* Form Styles */ -.client-name-input-form { - position: fixed; - display: flex; - flex-direction: column; - justify-content: space-evenly; - max-width: 200px; - min-height: 120px; - margin: 0 auto; -} - -.form-group { - margin-bottom: 15px; -} - -/* Input Styles */ -.client-name-input { - padding: 10px; - font-size: 16px; - border: 2px solid #ccc; - border-radius: 8px; - width: 100%; - transition: border-color 0.3s, box-shadow 0.3s; -} -.client-name-input:hover { - border-color: #999; -} - -.client-name-input:focus { - border-color: #007bff; - box-shadow: 0 0 8px rgba(0, 123, 255, 0.5); - outline: none; /* Remove the default outline */ -} - -.client-name-input::placeholder { - color: #ccc; -} - -/* Button Styles */ -.form-submit-button { - z-index: 10000; - padding: 8px 20px; /* Adjusted padding for a smaller button */ - font-size: 10px; - background-color: #007bff; - color: #fff; - border: none; - border-radius: 8px; - transition: background-color 0.3s; - width: 60px; - display: flex; - justify-content: center; -} - -.form-submit-button:hover { - background-color: #0056b3; -} - -.form-submit-button:focus { - outline: none; /* Remove the default outline */ -} +} \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 66a0fc166..5acf423be 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -45,7 +45,6 @@ const App = () => { await client.attach(doc, { initialPresence: { - clientName: '', cursorShape: 'cursor', cursor: { xPos: 0, @@ -119,38 +118,11 @@ const App = () => { }; }, []); - const handleFormSubmit = (event) => { - console.log('dddddddd') - event.preventDefault(); - setClientName(''); - doc.update((root, presence) => { - presence.set({ - clientName: clientName, - }); - }); - }; - - const [clientName, setClientName] = useState(''); - return (
-
- - setClientName(event.target.value)} - value={clientName} - placeholder='Hit Enter to Submit' - /> - {/* */} -
- - {doc.getPresences().map((user) => { return user.clientID !== client.getID() ? ( { ); })} - {console.log(doc.getMyPresence().cursor)} - + {console.log(doc.getMyPresence())} + {doc && ( + + )} { +const Cursor = ({ selectedCursorShape, x, y, pointerDown }) => { return ( - <> -

{clientName}

- + <> Date: Wed, 2 Aug 2023 15:08:59 +0900 Subject: [PATCH 21/36] Changing all local data usage to using data from Yorkie. --- examples/simultaneous-cursors/src/App.jsx | 47 +++---------------- .../src/components/CursorSelections.jsx | 29 ++++++++---- 2 files changed, 26 insertions(+), 50 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 5acf423be..029df1614 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -7,23 +7,13 @@ import './App.css'; const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { apiKey: import.meta.env.VITE_YORKIE_API_KEY, }); -// const client = new yorkie.Client('https://api.yorkie.dev', { -// apiKey: 'cinr4o2bjhd62lidlji0', -// }); const doc = new yorkie.Document('vitecursortask'); const App = () => { - const [mousePos, setMousePos] = useState({}); - const [clients, setClients] = useState([]); - const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); - - const [pointerDown, setPointerDown] = useState(false); // try to make into a single variable const handleCursorShapeSelect = (cursorShape) => { - setSelectedCursorShape(cursorShape); - doc.update((root, presence) => { presence.set({ cursorShape: cursorShape, @@ -37,10 +27,6 @@ const App = () => { doc.subscribe('presence', (event) => { setClients(doc.getPresences()); - // console.log( - // 'prescence event --- ', - // event.value.presence.cursor.pointerDown, - // ); // .type 을 안해도, 무슨 value 가 같이 오는지 보는것도 중요 }); await client.attach(doc, { @@ -63,8 +49,6 @@ const App = () => { const handlePointerUp = () => { console.log('handlePointerUp called 😁'); - setPointerDown(false); - doc.update((root, presence) => { const prevCursor = doc.getMyPresence().cursor; presence.set({ @@ -76,9 +60,6 @@ const App = () => { }); }; const handlePointerDown = () => { - // console.log('handlePointerDown called 🤢'); // ctrl cmd space - setPointerDown(true); - doc.update((root, presence) => { const prevCursor = doc.getMyPresence().cursor; presence.set({ @@ -90,10 +71,7 @@ const App = () => { }); }; const handleMouseMove = (event) => { - // console.log('pointerDown ----- 😈 ', pointerDown); - setMousePos({ x: event.clientX, y: event.clientY }); doc.update((root, presence) => { - // presence.get('cursor') const prevCursor = doc.getMyPresence().cursor; presence.set({ cursor: { @@ -120,32 +98,19 @@ const App = () => { return (
- {doc.getPresences().map((user) => { - return user.clientID !== client.getID() ? ( + {clients.map(({ presence }) => { + return ( - ) : ( - <> ); })} - {console.log(doc.getMyPresence())} - {doc && ( - - )} -
diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index cc68c5ef9..3b2ea4c81 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -1,13 +1,15 @@ -const CursorSelections = ({ - handleCursorShapeSelect, - selectedCursorShape, - clients, -}) => { +import { useState } from 'react'; + +const CursorSelections = ({ handleCursorShapeSelect, clients }) => { + const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); return (
handleCursorShapeSelect('heart')} + onClick={() => { + handleCursorShapeSelect('heart'); + setSelectedCursorShape('heart'); + }} className={ selectedCursorShape === 'heart' ? 'cursor-shape-selected' @@ -16,7 +18,10 @@ const CursorSelections = ({ src="src/assets/icons/icon_heart.svg" /> handleCursorShapeSelect('thumbs')} + onClick={() => { + handleCursorShapeSelect('thumbs'); + setSelectedCursorShape('thumbs'); + }} className={ selectedCursorShape === 'thumbs' ? 'cursor-shape-selected' @@ -25,7 +30,10 @@ const CursorSelections = ({ src="src/assets/icons/icon_thumbs.svg" /> handleCursorShapeSelect('pen')} + onClick={() => { + handleCursorShapeSelect('pen'); + setSelectedCursorShape('pen'); + }} className={ selectedCursorShape === 'pen' ? 'cursor-shape-selected' @@ -34,7 +42,10 @@ const CursorSelections = ({ src="src/assets/icons/icon_pen.svg" /> handleCursorShapeSelect('cursor')} + onClick={() => { + handleCursorShapeSelect('cursor'); + selectedCursorShape('cursor'); + }} className={ selectedCursorShape === 'cursor' ? 'cursor-shape-selected' From c033ffbdaf07423a36c3058e5a07d1ae95012a52 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Wed, 2 Aug 2023 15:34:01 +0900 Subject: [PATCH 22/36] Decreasing depth of pointerDown data to no longer require use of spread operator to copy previous prescence state. --- examples/simultaneous-cursors/src/App.css | 2 +- examples/simultaneous-cursors/src/App.jsx | 31 ++++------- .../src/components/Cursor.jsx | 55 +++++++------------ .../src/components/CursorSelections.jsx | 6 +- .../src/components/SingleAnimation.jsx | 8 +-- 5 files changed, 36 insertions(+), 66 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 589267d35..76ba7fca7 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -120,4 +120,4 @@ body { position: fixed; left: 35px; top: -10px; -} \ No newline at end of file +} diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 029df1614..307fe1056 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -16,7 +16,7 @@ const App = () => { const handleCursorShapeSelect = (cursorShape) => { doc.update((root, presence) => { presence.set({ - cursorShape: cursorShape, + cursorShape, }); }); }; @@ -35,8 +35,8 @@ const App = () => { cursor: { xPos: 0, yPos: 0, - pointerDown: false, }, + pointerDown: false, }, }); @@ -48,34 +48,23 @@ const App = () => { setup(); const handlePointerUp = () => { - console.log('handlePointerUp called 😁'); doc.update((root, presence) => { - const prevCursor = doc.getMyPresence().cursor; presence.set({ - cursor: { - ...prevCursor, - pointerDown: false, - }, + pointerDown: false, }); }); }; const handlePointerDown = () => { doc.update((root, presence) => { - const prevCursor = doc.getMyPresence().cursor; presence.set({ - cursor: { - ...prevCursor, - pointerDown: true, - }, + pointerDown: true, }); }); }; const handleMouseMove = (event) => { doc.update((root, presence) => { - const prevCursor = doc.getMyPresence().cursor; presence.set({ cursor: { - ...prevCursor, // 위에 있는 as well like here, use spread operator, not copying in local state variables also try to think, why is the Yorkie state and local state different, as well as then which one to use maybe, only update Yorkie, then use that yorkie data to update local? so putting priority on Yorkie data over local data, i.e. local data Follows Yorkie data xPos: event.clientX, yPos: event.clientY, }, @@ -98,20 +87,20 @@ const App = () => { return (
- {clients.map(({ presence }) => { + {clients.map(({ presence: { cursorShape, cursor, pointerDown } }) => { return ( ); })}
); diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index e77f13d75..4c89e22ca 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -3,37 +3,28 @@ import FullAnimation from './FullAnimation'; const Cursor = ({ selectedCursorShape, x, y, pointerDown }) => { return ( - <> + <> - - {selectedCursorShape === 'heart' ? ( - <> - - - ) : ( - <> + {selectedCursorShape === 'heart' && ( + )} - {selectedCursorShape === 'thumbs' ? ( - <> - - - ) : ( - <> + {selectedCursorShape === 'thumbs' && ( + )} - {selectedCursorShape === 'pen' ? ( + {selectedCursorShape === 'pen' && ( <> { /> {pointerDown && } - ) : ( - <> )} - {selectedCursorShape === 'cursor' ? ( - <> - - - ) : ( - <> + {selectedCursorShape === 'cursor' && ( + )} ); diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index 3b2ea4c81..867ab75af 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -1,6 +1,6 @@ import { useState } from 'react'; -const CursorSelections = ({ handleCursorShapeSelect, clients }) => { +const CursorSelections = ({ handleCursorShapeSelect, clientsLength }) => { const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); return (
@@ -56,8 +56,8 @@ const CursorSelections = ({ handleCursorShapeSelect, clients }) => {
- {clients.length !== 1 ? ( -

{clients.length} users are here

+ {clientsLength !== 1 ? ( +

{clientsLength} users are here

) : (

1 user here

)} diff --git a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx index 74953aedb..9f3540bf5 100644 --- a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx @@ -16,15 +16,11 @@ export default function SingleAnimation({ >
- {selectedCursorShape === 'heart' ? ( + {selectedCursorShape === 'heart' && ( - ) : ( - <> )} - {selectedCursorShape === 'thumbs' ? ( + {selectedCursorShape === 'thumbs' && ( - ) : ( - <> )}
From 652f008fc4b8d8fdc8e06882b734bae0efe14f47 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Wed, 2 Aug 2023 17:18:58 +0900 Subject: [PATCH 23/36] Continuing to improde code quality. --- examples/simultaneous-cursors/src/App.css | 10 ++++----- examples/simultaneous-cursors/src/App.jsx | 2 -- .../src/components/CursorSelections.jsx | 2 +- .../src/components/FullAnimation.jsx | 21 ++++++------------- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 76ba7fca7..2709ae329 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -1,17 +1,17 @@ body { - /* border: solid; */ + border: solid; border-color: blue; max-width: 100vw; min-height: 100vh; - /* overflow-x: hidden; */ + overflow-x: hidden; } .general-container { - /* border: solid; */ + border: solid; border-color: red; - max-width: 100vw; - min-height: 100vh; + max-width: 100%; + /* min-height: 100vh; */ } .cursor-selector-container { diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 307fe1056..fa838f28e 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -73,9 +73,7 @@ const App = () => { }; window.addEventListener('mousedown', handlePointerDown); - window.addEventListener('mouseup', handlePointerUp); - window.addEventListener('mousemove', handleMouseMove); return () => { diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index 867ab75af..a7f97ba29 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -44,7 +44,7 @@ const CursorSelections = ({ handleCursorShapeSelect, clientsLength }) => { { handleCursorShapeSelect('cursor'); - selectedCursorShape('cursor'); + setSelectedCursorShape('cursor'); }} className={ selectedCursorShape === 'cursor' diff --git a/examples/simultaneous-cursors/src/components/FullAnimation.jsx b/examples/simultaneous-cursors/src/components/FullAnimation.jsx index bfb046521..91a635e4c 100644 --- a/examples/simultaneous-cursors/src/components/FullAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/FullAnimation.jsx @@ -9,6 +9,7 @@ var CursorMode; CursorMode[(CursorMode['ReactionSelector'] = 2)] = 'ReactionSelector'; CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; })(CursorMode || (CursorMode = {})); +// rewrite this code above to be more readable, currently unnecessary code is mixed in, and too difficult to use const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { const [state, setState] = useState({ mode: CursorMode.Reaction }); @@ -40,21 +41,11 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { }, bubbleRate); useEffect(() => { - if (pointerDown) { - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: true } - : state, - ); - } - - if (!pointerDown) { - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: false } - : state, - ); - } + setState((state) => + state.mode === CursorMode.Reaction + ? { ...state, isPressed: pointerDown } + : state, + ); }, [pointerDown]); return ( From b9b00f0204b519e28e86332f6eecd57691b7dde9 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Wed, 2 Aug 2023 17:22:54 +0900 Subject: [PATCH 24/36] Taking care of warning(key required for each child in a list) --- examples/simultaneous-cursors/src/App.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index fa838f28e..f02518322 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -85,13 +85,14 @@ const App = () => { return (
- {clients.map(({ presence: { cursorShape, cursor, pointerDown } }) => { + {clients.map(({ presence: { cursorShape, cursor, pointerDown } }, index) => { return ( ); })} From 3613be00cf9bafdbce410adad0781c6aaf847f4a Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Wed, 2 Aug 2023 17:36:38 +0900 Subject: [PATCH 25/36] Removing unnecessary CursorMode code. --- examples/simultaneous-cursors/src/App.jsx | 2 +- .../src/components/FullAnimation.jsx | 21 +------------------ 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index f02518322..a4f4c3afe 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -92,7 +92,7 @@ const App = () => { x={cursor.xPos} y={cursor.yPos} pointerDown={pointerDown} - // key={index} + key={index} /> ); })} diff --git a/examples/simultaneous-cursors/src/components/FullAnimation.jsx b/examples/simultaneous-cursors/src/components/FullAnimation.jsx index 91a635e4c..414bd7b56 100644 --- a/examples/simultaneous-cursors/src/components/FullAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/FullAnimation.jsx @@ -2,17 +2,7 @@ import { useEffect, useState } from 'react'; import SingleAnimation from './SingleAnimation'; import useInterval from '../hooks/useInterval'; -var CursorMode; -(function (CursorMode) { - CursorMode[(CursorMode['Hidden'] = 0)] = 'Hidden'; - CursorMode[(CursorMode['Chat'] = 1)] = 'Chat'; - CursorMode[(CursorMode['ReactionSelector'] = 2)] = 'ReactionSelector'; - CursorMode[(CursorMode['Reaction'] = 3)] = 'Reaction'; -})(CursorMode || (CursorMode = {})); -// rewrite this code above to be more readable, currently unnecessary code is mixed in, and too difficult to use - const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { - const [state, setState] = useState({ mode: CursorMode.Reaction }); const [singleAnimation, setSingleAnimation] = useState([]); const bubbleRate = 100; @@ -27,12 +17,11 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { }, 1000); useInterval(() => { - if (state.mode === CursorMode.Reaction && state.isPressed) { + if (pointerDown) { setSingleAnimation((singleAnimation) => singleAnimation.concat([ { point: { x: xPos, y: yPos }, - value: state.reaction, timestamp: Date.now(), }, ]), @@ -40,14 +29,6 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { } }, bubbleRate); - useEffect(() => { - setState((state) => - state.mode === CursorMode.Reaction - ? { ...state, isPressed: pointerDown } - : state, - ); - }, [pointerDown]); - return (
Date: Wed, 2 Aug 2023 17:40:04 +0900 Subject: [PATCH 26/36] Continuing improving code. --- examples/simultaneous-cursors/src/App.css | 1 - examples/simultaneous-cursors/src/App.jsx | 26 ++++++++++--------- .../src/components/Cursor.jsx | 15 ++++++----- .../src/components/FullAnimation.jsx | 16 ++++++------ 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 2709ae329..33c65de36 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -11,7 +11,6 @@ body { border: solid; border-color: red; max-width: 100%; - /* min-height: 100vh; */ } .cursor-selector-container { diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index a4f4c3afe..ddeb56323 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,5 +1,5 @@ import { useEffect, useRef, useState, useCallback } from 'react'; -import yorkie, { DocEventType } from 'yorkie-js-sdk'; +import yorkie from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; import './App.css'; @@ -85,17 +85,19 @@ const App = () => { return (
- {clients.map(({ presence: { cursorShape, cursor, pointerDown } }, index) => { - return ( - - ); - })} + {clients.map( + ({ presence: { cursorShape, cursor, pointerDown } }, index) => { + return ( + + ); + }, + )} { return ( <> - + {(selectedCursorShape === 'heart' || + selectedCursorShape === 'thumbs') && ( + + )} {selectedCursorShape === 'heart' && ( { - const [singleAnimation, setSingleAnimation] = useState([]); + const [singleAnimationsArray, setSingleAnimationsArray] = useState([]); const bubbleRate = 100; - // Remove singleAnimation not visible anymore (every 1 sec) + // Remove singleAnimationsArray not visible anymore (every 1 sec) useInterval(() => { - setSingleAnimation((singleAnimation) => - singleAnimation.filter( + setSingleAnimationsArray((singleAnimationsArray) => + singleAnimationsArray.filter( (animation) => animation.timestamp > Date.now() - 4000, ), ); @@ -18,8 +18,8 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { useInterval(() => { if (pointerDown) { - setSingleAnimation((singleAnimation) => - singleAnimation.concat([ + setSingleAnimationsArray((singleAnimationsArray) => + singleAnimationsArray.concat([ { point: { x: xPos, y: yPos }, timestamp: Date.now(), @@ -35,7 +35,7 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { transform: `translateX(${xPos}px) translateY(${yPos}px)`, }} > - {singleAnimation.map((animation) => { + {singleAnimationsArray.map((animation) => { return ( Date: Thu, 3 Aug 2023 13:51:11 +0900 Subject: [PATCH 27/36] Working on code quality. --- examples/simultaneous-cursors/src/App.jsx | 2 +- .../simultaneous-cursors/src/components/FullAnimation.jsx | 4 ++-- examples/simultaneous-cursors/src/components/PenCursor.jsx | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index ddeb56323..615db8caa 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState, useCallback } from 'react'; +import { useEffect, useState } from 'react'; import yorkie from 'yorkie-js-sdk'; import Cursor from './components/Cursor'; import CursorSelections from './components/CursorSelections'; diff --git a/examples/simultaneous-cursors/src/components/FullAnimation.jsx b/examples/simultaneous-cursors/src/components/FullAnimation.jsx index 0bfa2069d..03a5fee3d 100644 --- a/examples/simultaneous-cursors/src/components/FullAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/FullAnimation.jsx @@ -5,7 +5,7 @@ import useInterval from '../hooks/useInterval'; const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { const [singleAnimationsArray, setSingleAnimationsArray] = useState([]); - const bubbleRate = 100; + const animationBubbleRate = 100; // Remove singleAnimationsArray not visible anymore (every 1 sec) useInterval(() => { @@ -27,7 +27,7 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { ]), ); } - }, bubbleRate); + }, animationBubbleRate); return (
{ if (point.lifetime > duration) { points.shift(); } else { - const spreadRate = 5; // i.e. line width + ctx.lineWidth = 5; ctx.lineJoin = 'round'; - ctx.lineWidth = spreadRate; const red = 0; const green = 0; From 8d1419ac9c3bfebcf08c4d3bfb0a0ad4c28c0f23 Mon Sep 17 00:00:00 2001 From: Yourim Cha Date: Thu, 3 Aug 2023 14:55:16 +0900 Subject: [PATCH 28/36] Remove unused code --- examples/simultaneous-cursors/.eslintrc.cjs | 15 --------------- examples/simultaneous-cursors/index.html | 4 ++-- examples/simultaneous-cursors/package.json | 5 ----- .../simultaneous-cursors/public/favicon.ico | Bin 0 -> 16958 bytes examples/simultaneous-cursors/public/vite.svg | 1 - examples/simultaneous-cursors/src/App.jsx | 2 +- .../src/hooks/useInterval.jsx | 18 ++++++++---------- examples/simultaneous-cursors/src/main.jsx | 6 +----- 8 files changed, 12 insertions(+), 39 deletions(-) delete mode 100644 examples/simultaneous-cursors/.eslintrc.cjs create mode 100644 examples/simultaneous-cursors/public/favicon.ico delete mode 100644 examples/simultaneous-cursors/public/vite.svg diff --git a/examples/simultaneous-cursors/.eslintrc.cjs b/examples/simultaneous-cursors/.eslintrc.cjs deleted file mode 100644 index ec601b2ce..000000000 --- a/examples/simultaneous-cursors/.eslintrc.cjs +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:react/jsx-runtime', - 'plugin:react-hooks/recommended', - ], - parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, - settings: { react: { version: '18.2' } }, - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': 'warn', - }, -} diff --git a/examples/simultaneous-cursors/index.html b/examples/simultaneous-cursors/index.html index 79c470191..c6a29d358 100644 --- a/examples/simultaneous-cursors/index.html +++ b/examples/simultaneous-cursors/index.html @@ -2,9 +2,9 @@ - + - Vite + React + Simultaneous Cursors - Yorkie Example
diff --git a/examples/simultaneous-cursors/package.json b/examples/simultaneous-cursors/package.json index e173d5c43..4f280852c 100644 --- a/examples/simultaneous-cursors/package.json +++ b/examples/simultaneous-cursors/package.json @@ -6,7 +6,6 @@ "scripts": { "dev": "vite", "build": "vite build", - "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, "dependencies": { @@ -18,10 +17,6 @@ "@types/react": "^18.0.37", "@types/react-dom": "^18.0.11", "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.38.0", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.3.4", "vite": "^4.3.9" } } diff --git a/examples/simultaneous-cursors/public/favicon.ico b/examples/simultaneous-cursors/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..03e1378ff5228f7e8e176f08c5a81f72383c6857 GIT binary patch literal 16958 zcmeHPZERcB8Gf>AN)c=YO|+Z%QP>1++BE*U{>q2##&+!M&ucq_N*&WE(4iF=V`USx zYon>t1hh;rv~G;CO=yCF5Q9me4U#7DR})5om6gF@%f?y;lctVA^W}T*o^zd)G$d() z?fk)x9-my_d(VBJ_dMr)-*X%VXyA{}2fkm7^_{?K0P6{UgdReCZoGWuX6C!D>!_pd zgSrOl8mMcau7SD+>KdqPpssb z-CEFAoBPLL?mGqZp-}_&!UO~ygp{9zHLI>6?&Q70yzdqE-N*J3_W2|By~k3}w)6OM zp7)xI+6HSuT}?aBvCwuN8#eMhOv3K`6bIUCF6ivLe4c&4GQiLJ#xRTjO7dSr{+E$I zIhDF;^LAnv`QIb#pgq6ivtQ)z|0Lcg^hG1D9w-0Rrr!5q>JvBxDLeTAa;49*uM>;z zul(#&;vQiWZTmfcf0VeF9Cy>_Uo|-7>8pa?ME;*6zjJ5v=U83K`wP5Ja2h4%=agOG z+(P$FowH^q@3ag|z%n?60WlUD%w-+^K+0Fv|AMyX)N!7Fi+(yx&F?VxjtcGXpik!K zy9iEadFGjY7u2UEq0=eQ78ocP?NdwYt3ul>gOk^h`^n{crWjlL`))Db)3D_x8B3;+ zE#0+TwiwUJYwxlhTh?a|mYS>sjHQe}Hnw)g)frf~thQv;2|iE6vNJVWqhrST@41Sj zFi;qU^SKgS!#Z4y&90&jH(}3f`xuLAZ;yy$dG!dn|Fq`(h3<3eF?((T&iojhgX55n z=#XC0;e1(#<3+aFvLBrE1@r35HTMDeGoRi^?pM~FKgZM3uYbO!SBL2t9UGq~p3~vm zz6buVeFyGWb+o>rqmAR=&d=S$+82aPwf2FOD}C8s(ALzHzsN0Fb*K3d$F)zzCUUn> z1Hr3qMx><)@}?#PzH&3XN5|nC(XpAj=%gMT1??NuK`rNjW*O90JB^x2>#vQkHJvqG z-d#Keci|MAFEGdbT}Sk$9%Py?K~PR36i=gT?ZxQW_FXtna2~wCd5~vo)NATMP3$t} zqjt#LFXE2I`cu8S7SCb*RdVDe*0@Bh8=ipebsb&%?!)D67DQu71j7nKQ3ZjZ0^g-( zwBPywT=b8NbD))TfwrxtU24_!S~Cy-PP4V=}F5W*0s;-*uWU?{Pi((ceWuD@*|Z=BN|uE>ynioIj-yp zbfrG!@ucCC{Mc-2L)&A=;QB{79=gT+%xOg0L@X%kE2+)@RZE{zZt_BVmg`PJ)EolB2aLHDYe34ESmSD8%c1g`debX9 zLObt3#?g#~(v5hWb3T&#mEb-N;RE6!SymuNyAd-r!++DAu>Xzv|3le6)FY87=MDX?=++W=fqOiv@>HySzA9hG0(R!&#&kBb^NdwTU<@Zq!Y+w6vUHC zGCYI(v=3yVgNV`{W=sr+5{PYVg6G~|NN9GbMg(hL6J;|B{Jl1=>F+>xeH&E=fN|90P|sI27&c0@NU}!JNt4n zCyKg&^T4sxx=4%-YrQ9(1=ikq+BO55S!>NiCv%SHd0phge=pk4VqOhsw~IM%?JuF3 zUb#bwP z^DyX(Hb>>_U`GB!8v#U8^j;%9v|56FgKkEp7>3YZ}8-lEBLacF^ z--d;@r}>?=Enhoq#KK4hQHuqEtv4F^&`$m$7SQHP7q+b&CmD~@My{WV_p^T&>+ZQA za-yTaeTrP^x`lMWG5EHTO9v-m66==(k0EW@VC1#Tfd%>mEYLq?r6*TG$86C$%b%pE1ayU9MiR7LA!wQr#P)q#(I&1Blg1+uohX{RDnP1 zMYxAVouHn}y~+glYXjmt3){dXTBya1%=P}84j^G|K_r%esN<;nyOuQP=ktMx1<}+! zp)SRUC*e)Z2R9xl*M`hpZliAD8ZM^>xYmx-59f(}CVR2E{9XJ$r5q3V9S!%ag^_Js&UHvD38XWO_erI#BHhpOMU**_Yh<^_lY-ZiK<6dv&~eK_IHuOhPR>#C zH@-h2f9|I)5C3M?CGH;=aJj1)si+Jkl|mw^G*I*Zs#y24d_XQRqIq^YbjTA|j z>jFta+apII(H5?`YCrx$XUvP6xR2xPJpm<|LZ-uxM5-H#qJVWvl;gDcJU?rU&+4~w zK1ha*nxY#~JJ-{}1oPp4v59j*qHQ+rX)HSvf3~^Q`L`SKbSSl}{T!h|mX47k!Y1>lcS$rfnwf zGuauF?L(XsR`= zOw7-7A$-Gb%#U3NT~B;{H{|PgBH8JK;<9ob8%H$BHEKdJz&$MYa&Z^>5^JQcu+r}5 zzG;AYF%aTjVjzyN$%-!5X091`!h79rc&^z6?=`o&;-<<}>|BhPg{*3+^2SO2Lzt}$&d&sB3eS=^yhLE!rVabWGL%@ZwlkGeR zQA3p?98(USVc!g`*6j1R@)Mc*s}vE&@QRU0?Wh^gd3+gBQad7CV?VC#xE%baVqe(fQQ-Afj;iq&b1|;8&<76@qW(Qu zWxUPx)T44zu?4xl65PceS*7?m{Ec6oWBqSg>l&zQpss{fV~?3wZV*5*LmEJ zhLX1jE7*>$WjlfuV{7}-ID*ELtHc{tjqqUAm}pOeeXs3b!M75;Jq>)*%I#hqdjXCA z8li_z+1sG&{0Q{tx{Up{4); literal 0 HcmV?d00001 diff --git a/examples/simultaneous-cursors/public/vite.svg b/examples/simultaneous-cursors/public/vite.svg deleted file mode 100644 index e7b8dfb1b..000000000 --- a/examples/simultaneous-cursors/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 615db8caa..6a7c3e30a 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -8,7 +8,7 @@ const client = new yorkie.Client(import.meta.env.VITE_YORKIE_API_ADDR, { apiKey: import.meta.env.VITE_YORKIE_API_KEY, }); -const doc = new yorkie.Document('vitecursortask'); +const doc = new yorkie.Document('simultaneous-cursors'); const App = () => { const [clients, setClients] = useState([]); diff --git a/examples/simultaneous-cursors/src/hooks/useInterval.jsx b/examples/simultaneous-cursors/src/hooks/useInterval.jsx index 2b4f14d6b..a4c04691b 100644 --- a/examples/simultaneous-cursors/src/hooks/useInterval.jsx +++ b/examples/simultaneous-cursors/src/hooks/useInterval.jsx @@ -1,24 +1,22 @@ - -import { useRef, useEffect } from "react" +import { useRef, useEffect } from 'react'; // From Dan Abramov's blog: https://overreacted.io/making-setinterval-declarative-with-react-hooks/ - export default function useInterval(callback, delay) { - const savedCallback = useRef(callback) + const savedCallback = useRef(callback); // Remember the latest callback. useEffect(() => { - savedCallback.current = callback - }, [callback]) + savedCallback.current = callback; + }, [callback]); // Set up the interval. useEffect(() => { function tick() { - savedCallback.current() + savedCallback.current(); } if (delay !== null) { - let id = setInterval(tick, delay) - return () => clearInterval(id) + let id = setInterval(tick, delay); + return () => clearInterval(id); } - }, [delay]) + }, [delay]); } diff --git a/examples/simultaneous-cursors/src/main.jsx b/examples/simultaneous-cursors/src/main.jsx index 70d37dfe6..02b64aae0 100644 --- a/examples/simultaneous-cursors/src/main.jsx +++ b/examples/simultaneous-cursors/src/main.jsx @@ -2,8 +2,4 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App.jsx'; -ReactDOM.createRoot(document.getElementById('root')).render( - // - , - // , -); +ReactDOM.createRoot(document.getElementById('root')).render(); From 53afea69cc2a74df9ac1d6a902183deea5b0d2dc Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 3 Aug 2023 15:31:13 +0900 Subject: [PATCH 29/36] Adding key for clients array. --- examples/simultaneous-cursors/src/App.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 6a7c3e30a..8b305c62d 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -86,14 +86,14 @@ const App = () => { return (
{clients.map( - ({ presence: { cursorShape, cursor, pointerDown } }, index) => { + ({ clientID, presence: { cursorShape, cursor, pointerDown } }) => { return ( ); }, From 19a5172f58af19314425e2482d29d8853dc0aa16 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 3 Aug 2023 15:32:00 +0900 Subject: [PATCH 30/36] Touching on css styling. --- examples/simultaneous-cursors/src/App.css | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.css b/examples/simultaneous-cursors/src/App.css index 33c65de36..3026cc511 100644 --- a/examples/simultaneous-cursors/src/App.css +++ b/examples/simultaneous-cursors/src/App.css @@ -1,15 +1,10 @@ body { - border: solid; - border-color: blue; - max-width: 100vw; min-height: 100vh; overflow-x: hidden; } .general-container { - border: solid; - border-color: red; max-width: 100%; } From deaacdb46c910a597780ea4da86261d69ee6c0dc Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 3 Aug 2023 16:52:59 +0900 Subject: [PATCH 31/36] Tweaking Cursor.jsx SingleAnimation.jsx --- .../src/components/Cursor.jsx | 45 +++++++++++-------- .../src/components/SingleAnimation.jsx | 7 +-- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index 432237bdc..f216219a9 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -4,28 +4,35 @@ import FullAnimation from './FullAnimation'; const Cursor = ({ selectedCursorShape, x, y, pointerDown }) => { return ( <> - {(selectedCursorShape === 'heart' || - selectedCursorShape === 'thumbs') && ( - - )} {selectedCursorShape === 'heart' && ( - + <> + + + )} {selectedCursorShape === 'thumbs' && ( - + <> + + + )} {selectedCursorShape === 'pen' && ( <> diff --git a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx index 9f3540bf5..79d139895 100644 --- a/examples/simultaneous-cursors/src/components/SingleAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/SingleAnimation.jsx @@ -16,12 +16,7 @@ export default function SingleAnimation({ >
- {selectedCursorShape === 'heart' && ( - - )} - {selectedCursorShape === 'thumbs' && ( - - )} +
From 65ef4d5f39a6c47e72e84435777de146c6da3821 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 3 Aug 2023 16:58:18 +0900 Subject: [PATCH 32/36] Tweaking Cursor.jsx --- .../src/components/Cursor.jsx | 60 +++++-------------- 1 file changed, 15 insertions(+), 45 deletions(-) diff --git a/examples/simultaneous-cursors/src/components/Cursor.jsx b/examples/simultaneous-cursors/src/components/Cursor.jsx index f216219a9..080da8f3c 100644 --- a/examples/simultaneous-cursors/src/components/Cursor.jsx +++ b/examples/simultaneous-cursors/src/components/Cursor.jsx @@ -4,53 +4,23 @@ import FullAnimation from './FullAnimation'; const Cursor = ({ selectedCursorShape, x, y, pointerDown }) => { return ( <> - {selectedCursorShape === 'heart' && ( - <> - - - - )} - {selectedCursorShape === 'thumbs' && ( - <> - - - - )} - {selectedCursorShape === 'pen' && ( - <> - - {pointerDown && } - - )} - {selectedCursorShape === 'cursor' && ( - + {(selectedCursorShape === 'heart' || + selectedCursorShape === 'thumbs') && ( + )} + {selectedCursorShape === 'pen' && pointerDown && ( + + )} ); }; From 80291767b407a842b42bf0fbb2c964eead12d735 Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 3 Aug 2023 17:18:23 +0900 Subject: [PATCH 33/36] Working on making pen cursor smoother) --- .../simultaneous-cursors/src/components/PenCursor.jsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index 1dd76eab2..00ab6850e 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -9,13 +9,18 @@ class Point { } const PenCursor = ({ xPos, yPos }) => { + const [allPoints, setAllPoints] = useState([]); const canvasRef = useRef(null); const [points, setPoints] = useState([]); const addPoint = (x, y) => { const point = new Point(x, y); + points.push(point); setPoints(points); + + allPoints.push(point); + setAllPoints(allPoints); }; useEffect(() => { @@ -73,7 +78,9 @@ const PenCursor = ({ xPos, yPos }) => { ref={canvasRef} width={document.body.clientWidth} height={document.body.clientHeight} - /> + > + {console.log(xPos, yPos, allPoints.length)} + ); }; From 1b2caa514ade543132e107128fc2f0bfa1d39ee5 Mon Sep 17 00:00:00 2001 From: Yourim Cha Date: Fri, 4 Aug 2023 15:08:21 +0900 Subject: [PATCH 34/36] Add log for debugging --- examples/simultaneous-cursors/src/App.jsx | 20 +++++++++++++++++++ .../src/components/PenCursor.jsx | 7 ++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 8b305c62d..4d2eed7a5 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -28,6 +28,10 @@ const App = () => { doc.subscribe('presence', (event) => { setClients(doc.getPresences()); }); + doc.subscribe('others', (event) => { + if (event.type !== 'presence-changed') return; + console.log('others 🚀', event.value.presence.points.length); + }); await client.attach(doc, { initialPresence: { @@ -37,6 +41,7 @@ const App = () => { yPos: 0, }, pointerDown: false, + points: [], }, }); @@ -63,12 +68,16 @@ const App = () => { }; const handleMouseMove = (event) => { doc.update((root, presence) => { + const points = doc.getMyPresence().points; + points.push([event.clientX, event.clientY]); presence.set({ cursor: { xPos: event.clientX, yPos: event.clientY, }, + points, }); + console.log('my✅', points.length); }); }; @@ -85,6 +94,17 @@ const App = () => { return (
+ {clients.map(({ clientID, presence: { points } }) => { + return ( +
+ + {clientID} : {points.length} {JSON.stringify(points)} + +
+
+ ); + })} + {clients.map( ({ clientID, presence: { cursorShape, cursor, pointerDown } }) => { return ( diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index 00ab6850e..199f24784 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -28,6 +28,7 @@ const PenCursor = ({ xPos, yPos }) => { const ctx = canvas.getContext('2d'); const animatePoints = () => { + // console.log('requestAnimationFrame', xPos); ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); const duration = (0.7 * (1 * 4000)) / 60; @@ -72,15 +73,15 @@ const PenCursor = ({ xPos, yPos }) => { addPoint(xPos, yPos); }, [xPos, yPos]); + console.log('pen render 🖍', xPos, yPos); + return ( - {console.log(xPos, yPos, allPoints.length)} - + > ); }; From e521ac35b4df4e64b536e329b487009792383a2b Mon Sep 17 00:00:00 2001 From: YoonKiJin Date: Thu, 10 Aug 2023 16:15:41 +0900 Subject: [PATCH 35/36] Optimize code in CursorSelections. Organize other code as needed. --- examples/simultaneous-cursors/src/App.jsx | 13 ---- .../src/components/CursorSelections.jsx | 76 ++++++------------- .../src/components/FullAnimation.jsx | 1 - .../src/components/PenCursor.jsx | 3 - .../src/hooks/useInterval.jsx | 3 - 5 files changed, 23 insertions(+), 73 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 4d2eed7a5..406430317 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -30,7 +30,6 @@ const App = () => { }); doc.subscribe('others', (event) => { if (event.type !== 'presence-changed') return; - console.log('others 🚀', event.value.presence.points.length); }); await client.attach(doc, { @@ -77,7 +76,6 @@ const App = () => { }, points, }); - console.log('my✅', points.length); }); }; @@ -94,17 +92,6 @@ const App = () => { return (
- {clients.map(({ clientID, presence: { points } }) => { - return ( -
- - {clientID} : {points.length} {JSON.stringify(points)} - -
-
- ); - })} - {clients.map( ({ clientID, presence: { cursorShape, cursor, pointerDown } }) => { return ( diff --git a/examples/simultaneous-cursors/src/components/CursorSelections.jsx b/examples/simultaneous-cursors/src/components/CursorSelections.jsx index a7f97ba29..cbaa933f0 100644 --- a/examples/simultaneous-cursors/src/components/CursorSelections.jsx +++ b/examples/simultaneous-cursors/src/components/CursorSelections.jsx @@ -2,65 +2,35 @@ import { useState } from 'react'; const CursorSelections = ({ handleCursorShapeSelect, clientsLength }) => { const [selectedCursorShape, setSelectedCursorShape] = useState('cursor'); + + const cursorShapes = ['heart', 'thumbs', 'pen', 'cursor']; + return (
- { - handleCursorShapeSelect('heart'); - setSelectedCursorShape('heart'); - }} - className={ - selectedCursorShape === 'heart' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_heart.svg" - /> - { - handleCursorShapeSelect('thumbs'); - setSelectedCursorShape('thumbs'); - }} - className={ - selectedCursorShape === 'thumbs' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_thumbs.svg" - /> - { - handleCursorShapeSelect('pen'); - setSelectedCursorShape('pen'); - }} - className={ - selectedCursorShape === 'pen' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_pen.svg" - /> - { - handleCursorShapeSelect('cursor'); - setSelectedCursorShape('cursor'); - }} - className={ - selectedCursorShape === 'cursor' - ? 'cursor-shape-selected' - : 'cursor-shape-not-selected' - } - src="src/assets/icons/icon_cursor.svg" - /> + {cursorShapes.map((shape) => ( + { + handleCursorShapeSelect(shape); + setSelectedCursorShape(shape); + }} + className={`${ + selectedCursorShape === shape + ? 'cursor-shape-selected' + : 'cursor-shape-not-selected' + }`} + src={`src/assets/icons/icon_${shape}.svg`} + /> + ))}
- {clientsLength !== 1 ? ( -

{clientsLength} users are here

- ) : ( -

1 user here

- )} +

+ {clientsLength !== 1 + ? `${clientsLength} users are here` + : '1 user here'} +

); diff --git a/examples/simultaneous-cursors/src/components/FullAnimation.jsx b/examples/simultaneous-cursors/src/components/FullAnimation.jsx index 03a5fee3d..e14dac9c3 100644 --- a/examples/simultaneous-cursors/src/components/FullAnimation.jsx +++ b/examples/simultaneous-cursors/src/components/FullAnimation.jsx @@ -7,7 +7,6 @@ const FullAnimation = ({ pointerDown, xPos, yPos, selectedCursorShape }) => { const animationBubbleRate = 100; - // Remove singleAnimationsArray not visible anymore (every 1 sec) useInterval(() => { setSingleAnimationsArray((singleAnimationsArray) => singleAnimationsArray.filter( diff --git a/examples/simultaneous-cursors/src/components/PenCursor.jsx b/examples/simultaneous-cursors/src/components/PenCursor.jsx index 199f24784..aefdf8ae5 100644 --- a/examples/simultaneous-cursors/src/components/PenCursor.jsx +++ b/examples/simultaneous-cursors/src/components/PenCursor.jsx @@ -28,7 +28,6 @@ const PenCursor = ({ xPos, yPos }) => { const ctx = canvas.getContext('2d'); const animatePoints = () => { - // console.log('requestAnimationFrame', xPos); ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); const duration = (0.7 * (1 * 4000)) / 60; @@ -73,8 +72,6 @@ const PenCursor = ({ xPos, yPos }) => { addPoint(xPos, yPos); }, [xPos, yPos]); - console.log('pen render 🖍', xPos, yPos); - return ( { savedCallback.current = callback; }, [callback]); - // Set up the interval. useEffect(() => { function tick() { savedCallback.current(); From c3d00acf324545c2f376233accf08d94c2852f12 Mon Sep 17 00:00:00 2001 From: Yourim Cha Date: Thu, 10 Aug 2023 17:08:56 +0900 Subject: [PATCH 36/36] Remove unused code --- examples/simultaneous-cursors/src/App.jsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/examples/simultaneous-cursors/src/App.jsx b/examples/simultaneous-cursors/src/App.jsx index 406430317..8b305c62d 100644 --- a/examples/simultaneous-cursors/src/App.jsx +++ b/examples/simultaneous-cursors/src/App.jsx @@ -28,9 +28,6 @@ const App = () => { doc.subscribe('presence', (event) => { setClients(doc.getPresences()); }); - doc.subscribe('others', (event) => { - if (event.type !== 'presence-changed') return; - }); await client.attach(doc, { initialPresence: { @@ -40,7 +37,6 @@ const App = () => { yPos: 0, }, pointerDown: false, - points: [], }, }); @@ -67,14 +63,11 @@ const App = () => { }; const handleMouseMove = (event) => { doc.update((root, presence) => { - const points = doc.getMyPresence().points; - points.push([event.clientX, event.clientY]); presence.set({ cursor: { xPos: event.clientX, yPos: event.clientY, }, - points, }); }); };