diff --git a/.gitignore b/.gitignore index c1ca77c4e..e5adc1c70 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ dist-ssr /package !.env.example vite.config.js.timestamp-* +vite.config.ts.timestamp-* # gitbutler .git/gb-* diff --git a/package.json b/package.json index a62eb3cfb..fc7256dad 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "@lezer/javascript": "^1.4.1", "@lezer/lr": "^1.3.3", "@replit/codemirror-lang-svelte": "^6.0.0", + "@sentry/sveltekit": "^7.49.0", "@square/svelte-store": "^1.0.14", "@storybook/addon-essentials": "next", "@storybook/addon-interactions": "next", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7fd07af59..8945b6d12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,7 @@ specifiers: '@lezer/javascript': ^1.4.1 '@lezer/lr': ^1.3.3 '@replit/codemirror-lang-svelte': ^6.0.0 + '@sentry/sveltekit': ^7.49.0 '@square/svelte-store': ^1.0.14 '@storybook/addon-essentials': next '@storybook/addon-interactions': next @@ -100,16 +101,17 @@ devDependencies: '@lezer/javascript': 1.4.1 '@lezer/lr': 1.3.3 '@replit/codemirror-lang-svelte': 6.0.0_ybny7xhlf2ysg4majw54z4nkly + '@sentry/sveltekit': 7.49.0_cqgjuo2ckbhu56wwgh6hvyzxbq '@square/svelte-store': 1.0.14 - '@storybook/addon-essentials': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-interactions': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-links': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-svelte-csf': 3.0.0-next.5_q6a7aji4t3j4im2thdo2rd7iga - '@storybook/blocks': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/svelte': 7.1.0-alpha.0_svelte@3.55.1 - '@storybook/sveltekit': 7.1.0-alpha.0_hcl52ejjmh2zpx2q5wi2i43hma + '@storybook/addon-essentials': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-interactions': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-links': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-svelte-csf': 3.0.0-next.5_bcto3nxs27mz7x3qhovdqmepye + '@storybook/blocks': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/svelte': 7.0.6_svelte@3.55.1 + '@storybook/sveltekit': 7.0.6_hcl52ejjmh2zpx2q5wi2i43hma '@storybook/testing-library': 0.0.14-next.2 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y '@sveltejs/adapter-static': 2.0.1_@sveltejs+kit@1.15.0 '@sveltejs/kit': 1.15.0_svelte@3.55.1+vite@4.0.4 '@tauri-apps/api': 1.2.0 @@ -134,15 +136,15 @@ devDependencies: prettier-plugin-tailwindcss: 0.2.4_yjdjpc7im5hvpskij45owfsns4 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - storybook: 7.1.0-alpha.0 + storybook: 7.0.6 svelte: 3.55.1 svelte-check: 3.0.3_gqx7lw3sljhsd4bstor5m2aa2u svelte-floating-ui: 1.5.2 svelte-french-toast: 1.0.3_svelte@3.55.1 svelte-resize-observer: 2.0.0 tailwindcss: 3.2.4_postcss@8.4.21 - tauri-plugin-log-api: github.com/tauri-apps/tauri-plugin-log/05a9bfd9edb9b5f4ab95412bb607691708b65a25 - tauri-plugin-websocket-api: github.com/tauri-apps/tauri-plugin-websocket/ee8a3465278043d8bfa09f5d79fd9f23bf2a5aa9 + tauri-plugin-log-api: github.com/tauri-apps/tauri-plugin-log/36100c269e33ac91246b0a4bfadd18c1caee5296 + tauri-plugin-websocket-api: github.com/tauri-apps/tauri-plugin-websocket/9b1883b40e6f53cfc77e029000408da8239fba7a tinykeys: 1.4.0 tslib: 2.5.0 typescript: 4.9.5 @@ -2356,6 +2358,172 @@ packages: '@lezer/lr': 1.3.3 dev: true + /@sentry-internal/tracing/7.49.0: + resolution: {integrity: sha512-ESh3+ZneQk/3HESTUmIPNrW5GVPu/HrRJU+eAJJto74vm+6vP7zDn2YV2gJ1w18O/37nc7W/bVCgZJlhZ3cwew==} + engines: {node: '>=8'} + dependencies: + '@sentry/core': 7.49.0 + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + tslib: 1.14.1 + dev: true + + /@sentry/browser/7.49.0: + resolution: {integrity: sha512-x2DekKkQoY7/dhBzE4J25mdQ978NtPBTVQb+uZqlF/t5mp4K44TAszmPqy8lC/CmVHkp7qcpRGSCIzeboUL4KA==} + engines: {node: '>=8'} + dependencies: + '@sentry-internal/tracing': 7.49.0 + '@sentry/core': 7.49.0 + '@sentry/replay': 7.49.0 + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + tslib: 1.14.1 + dev: true + + /@sentry/bundler-plugin-core/0.6.0: + resolution: {integrity: sha512-gDPBkFxiOkc525U9pxnGMI5B2DAG0+UCsNuiNgl9+AieDcPSYTwdzfGHytxDZrQgPMvIHEnTAp1VlNB+6UxUGQ==} + engines: {node: '>= 10'} + dependencies: + '@sentry/cli': 2.17.4 + '@sentry/node': 7.49.0 + '@sentry/tracing': 7.49.0 + find-up: 5.0.0 + glob: 9.3.2 + magic-string: 0.27.0 + unplugin: 1.0.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@sentry/cli/2.17.4: + resolution: {integrity: sha512-5tLu/2U+MuEksIhvzW5LJEwhoqbdgwxE3Q5UwIJtJt3do4PFv1UVg1aLBJ3u6sGxAJpxqJYWvqfc/tXswQCJBA==} + engines: {node: '>= 10'} + hasBin: true + requiresBuild: true + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.6.9 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@sentry/core/7.49.0: + resolution: {integrity: sha512-AlSnCYgfEbvK8pkNluUkmdW/cD9UpvOVCa+ERQswXNRkAv5aDGCL6Ihv6fnIajE++BYuwZh0+HwZUBVKTFzoZg==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + tslib: 1.14.1 + dev: true + + /@sentry/integrations/7.49.0: + resolution: {integrity: sha512-qsEVkcZjw+toFGnzsVo+Cozz+hMK9LugzkfJyOFL+CyiEx9MfkEmsvRpZe1ETEWKe/VZylYU27NQzl6UNuAUjw==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + localforage: 1.10.0 + tslib: 1.14.1 + dev: true + + /@sentry/node/7.49.0: + resolution: {integrity: sha512-KLIrqcbKk4yR3g8fjl87Eyv4M9j4YI6b7sqVAZYj3FrX3mC6JQyGdlDfUpSKy604n1iAdr6OuUp5f9x7jPJaeQ==} + engines: {node: '>=8'} + dependencies: + '@sentry-internal/tracing': 7.49.0 + '@sentry/core': 7.49.0 + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@sentry/replay/7.49.0: + resolution: {integrity: sha512-UY3bHoBDPOu4Dpq3m3oxNjLrq09NiFVYUfrTN4QOq1Am2SA04XbuCj/YZ+jNVy/NrFtoz9cTovK6oQbNw53jog==} + engines: {node: '>=12'} + dependencies: + '@sentry/core': 7.49.0 + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + dev: true + + /@sentry/svelte/7.49.0_svelte@3.55.1: + resolution: {integrity: sha512-S85KoVEdkrL/VyoF5Lttow1hrJNfyJLQxrbAcpEz8I3ehradI13358F5/2lYCa+X6nrh0cYaN/m0R1nTXzGdIQ==} + engines: {node: '>=8'} + peerDependencies: + svelte: 3.x + dependencies: + '@sentry/browser': 7.49.0 + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + magic-string: 0.26.7 + svelte: 3.55.1 + tslib: 1.14.1 + dev: true + + /@sentry/sveltekit/7.49.0_cqgjuo2ckbhu56wwgh6hvyzxbq: + resolution: {integrity: sha512-druo8C0LcDY/NRwaeqEo5Kjo/zv72ILIRWbBAKNEKksZfgfcvwndRYx1cgybYij+ApGRdEQ8uw53lwaWZNAyeA==} + engines: {node: '>=16'} + peerDependencies: + '@sveltejs/kit': 1.x + dependencies: + '@sentry-internal/tracing': 7.49.0 + '@sentry/core': 7.49.0 + '@sentry/integrations': 7.49.0 + '@sentry/node': 7.49.0 + '@sentry/svelte': 7.49.0_svelte@3.55.1 + '@sentry/types': 7.49.0 + '@sentry/utils': 7.49.0 + '@sentry/vite-plugin': 0.6.0 + '@sveltejs/kit': 1.15.0_svelte@3.55.1+vite@4.0.4 + magic-string: 0.30.0 + sorcery: 0.11.0 + transitivePeerDependencies: + - encoding + - supports-color + - svelte + dev: true + + /@sentry/tracing/7.49.0: + resolution: {integrity: sha512-RtyTt1DvX7s1M2ca9qnevOkuwn8HjbKXrSVHtMbQYoT3uGvjT8Pm71D5WtWMWH2QLpFgcqQq/1ifZBUAG4Y7qA==} + engines: {node: '>=8'} + dependencies: + '@sentry-internal/tracing': 7.49.0 + dev: true + + /@sentry/types/7.49.0: + resolution: {integrity: sha512-9yXXh7iv76+O6h2ONUVx0wsL1auqJFWez62mTjWk4350SgMmWp/zUkBxnVXhmcYqscz/CepC+Loz9vITLXtgxg==} + engines: {node: '>=8'} + dev: true + + /@sentry/utils/7.49.0: + resolution: {integrity: sha512-JdC9yGnOgev4ISJVwmIoFsk8Zx0psDZJAj2DV7x4wMZsO6QK+YjC7G3mUED/S5D5lsrkBZ/3uvQQhr8DQI4UcQ==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.49.0 + tslib: 1.14.1 + dev: true + + /@sentry/vite-plugin/0.6.0: + resolution: {integrity: sha512-3J1ESvbI5okGJaSWm+gTAOOIa96u4ZwfI/C3n+0HSStz3e4vGiGUh59iNyb1/2m5HFgR5OLaHNfAvlyP8GM/ew==} + engines: {node: '>= 10'} + dependencies: + '@sentry/bundler-plugin-core': 0.6.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@sinclair/typebox/0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true @@ -2367,8 +2535,8 @@ packages: svelte: 3.55.1 dev: true - /@storybook/addon-actions/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-aLvgK4NZLh+LsZ5HynYfpRJywd/zNSa5cbxdqq+xPtDWVdbLwVFyNtlOZ+RQoFlgq53+Yt0+Usx/NsOZYEQp8A==} + /@storybook/addon-actions/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-H592lkj06bJMX4uwmZI3AVpRFPQ8nkM5j+eo+JQdv0QX9lLZWKnhrGkGDTC/QMSnXMdgHooq0ce9PdGaDvUm1Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2378,14 +2546,14 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 dequal: 2.0.3 lodash: 4.17.21 polished: 4.2.2 @@ -2398,8 +2566,8 @@ packages: uuid-browser: 3.1.0 dev: true - /@storybook/addon-backgrounds/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-MjP19uJwnt4Jnawi1iP1QpTubv6SP0DCOtgwU1qvZxNWXx6LbkaVl3X6kzu9mOS0UOpSlNZNx/+ch6IXfe+FHQ==} + /@storybook/addon-backgrounds/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-jOmZq19xS8Ge5TEc49jrO7Qbmxg+6vmCwA04s1OApzmugEcscgtzBvplbw+FeXbSSjT6MM1c7u8XYVioDrzTXw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2409,22 +2577,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-controls/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-9KyPMfAoHKbFiRyW9sO7Zq4LUc4L8PTcBoOqLrVxoQ72YG1/uqbMx1Tc7tJMH9nyaabZeoJwSEeLJbXr0Jxlcw==} + /@storybook/addon-controls/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-yNaJ42CJxlPMKV9mpkuaiXrQXnjWhsgLASpZcZsE5+KyAqcS/iue9UWO+M/u5zt2/zb4w8BW4GysmvBKl0VDKQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2434,15 +2602,15 @@ packages: react-dom: optional: true dependencies: - '@storybook/blocks': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/blocks': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-common': 7.0.6 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/node-logger': 7.0.6 + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -2451,33 +2619,29 @@ packages: - supports-color dev: true - /@storybook/addon-docs/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-Qo0DUgtYZQN7Tbw5871blq5p8YZM/2K+0wAri5HJ+WimBcuvZoDL97ULnX2pddj/+V5NzoflEiv7kYVvKr2xyA==} + /@storybook/addon-docs/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-l5m2sGch9vexy4O0Oe6akyTbaV0+yh9Ihm4ez8FtZkDy8UTtPsKeZ4cdpkg7Lpwa4kYVMV6i2R3xI07/kwhqGg==} peerDependencies: - '@storybook/mdx1-csf': '>=1.0.0-0' react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@storybook/mdx1-csf': - optional: true dependencies: '@babel/core': 7.21.3 '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.3 '@jest/transform': 29.5.0 '@mdx-js/react': 2.3.0_react@18.2.0 - '@storybook/blocks': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/csf-plugin': 7.1.0-alpha.0 - '@storybook/csf-tools': 7.1.0-alpha.0 + '@storybook/blocks': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/csf-plugin': 7.0.6 + '@storybook/csf-tools': 7.0.6 '@storybook/global': 5.0.0 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/postinstall': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/react-dom-shim': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/node-logger': 7.0.6 + '@storybook/postinstall': 7.0.6 + '@storybook/preview-api': 7.0.6 + '@storybook/react-dom-shim': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 fs-extra: 11.1.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -2488,43 +2652,42 @@ packages: - supports-color dev: true - /@storybook/addon-essentials/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-7CzzYL3EkWwMjdh9iFUlz+YazO24DAiR8yINjQF8K/2OkMDGEr9UsIbuBqNpImvpPYBp2rodG1G2CC5Te5chqQ==} + /@storybook/addon-essentials/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-RLe+osvJ620njDiinPOlCdFAYckOg4PuE/OFFKYL+ityfKcGknYPZdtV8bknfdO3jSFCVx6zOpUv5KE6u4CgWg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/addon-actions': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-backgrounds': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-controls': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-docs': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-highlight': 7.1.0-alpha.0 - '@storybook/addon-measure': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-outline': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-toolbars': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-viewport': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 + '@storybook/addon-actions': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-backgrounds': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-controls': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-docs': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-highlight': 7.0.6 + '@storybook/addon-measure': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-outline': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-toolbars': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/addon-viewport': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-common': 7.0.6 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/node-logger': 7.0.6 + '@storybook/preview-api': 7.0.6 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 ts-dedent: 2.2.0 transitivePeerDependencies: - - '@storybook/mdx1-csf' - supports-color dev: true - /@storybook/addon-highlight/7.1.0-alpha.0: - resolution: {integrity: sha512-Vg7Fiv59ER9Hj5YzLZc6NTdAyijSpSWiUCUqxYhoyfirD8PBfLhC6jywB5VaIbj0TSaSac2WemJ1apND4XOHCg==} + /@storybook/addon-highlight/7.0.6: + resolution: {integrity: sha512-weM26CUku1+urbnefNUYxIKrc8xXvpLXHZsGzuxoYyOUCR25F09IUjVutOfgoVXqTqPUj1XWqVkG8PLQNs5vBQ==} dependencies: - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.0 + '@storybook/preview-api': 7.0.6 dev: true - /@storybook/addon-interactions/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-kq/ouMhlWniJCkfAhFxfc9TyeeMcG1oJj+2wIqoWcXWkSGfuaXFcLz2dCJsXVCdgDRqAqTiOq7mjy7amizNrEg==} + /@storybook/addon-interactions/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-+nTXVSF8OQrUDagyJ3cSmkzB4TzAUg8XZ4+5JqfzVY2lTNeVbe64jtvg9A5XlpObGaW5bbOdk79yvlivqTiPUA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2534,16 +2697,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-common': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 7.1.0-alpha.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/instrumenter': 7.0.6 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 jest-mock: 27.5.1 polished: 4.2.2 react: 18.2.0 @@ -2553,8 +2716,8 @@ packages: - supports-color dev: true - /@storybook/addon-links/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-qx105KbSCSgZSyvBtlw8zjX5lJc76cI2BiRZZGp75ioa9xtfHqrsg/6pC6m5uqQXTBjxvPImsr7ZEsWKdQ1Rmw==} + /@storybook/addon-links/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-KgaxvlWMJoT+yV4h6yElv3uPNSD/vhpgNO/2Br6KHW0MlB1MlqbrtTH8qJ9wUesJSLiw2O3d6npnsefHTtQiGw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2564,22 +2727,22 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/router': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/router': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-GeLUJwyFyAQALfukVxDkBNcNMZx8t4OP/MlvPCN50iq60m+77pu9ax+7qURG8e7GJCftCn7eeY1l1DiCtAURWA==} + /@storybook/addon-measure/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-mtd9tQOlNzxdDJvE0pP7/CMsm3l5skVr5G6wrkzHzhRqknfcj0hPdJUcA1P2PuxgejHBBQ32ZWZ6PubUtFXujQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2589,19 +2752,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/types': 7.0.6 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /@storybook/addon-outline/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-gSZjfIcwsBDhpRPOtTPocZnsN07d01dkIEh2xOk8ARYc3fHrlAoCEvJ0iBnOOJH4MtnNUBJpTb1qy+CsHpYbFQ==} + /@storybook/addon-outline/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-UYvL7aRdrn57gwp9O+xykky+BV3KPIZ415Fdb5HRuxfWA/3llWBslwswWXX5A8mAbIeaFZk+C4xIskZgRw1+mg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2611,19 +2774,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/types': 7.0.6 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-svelte-csf/3.0.0-next.5_q6a7aji4t3j4im2thdo2rd7iga: + /@storybook/addon-svelte-csf/3.0.0-next.5_bcto3nxs27mz7x3qhovdqmepye: resolution: {integrity: sha512-rGXjQqAxPbk9/NNBpLpWduNryuUbLSd0L/BD4TmtoeCG6YkwnPxSOzIkGg9DN94OhBSleSJZucz4e/LpeUqSmw==} peerDependencies: '@storybook/svelte': ^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0 @@ -2641,8 +2804,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@storybook/svelte': 7.1.0-alpha.0_svelte@3.55.1 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y + '@storybook/svelte': 7.0.6_svelte@3.55.1 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y fs-extra: 11.1.1 magic-string: 0.30.0 svelte: 3.55.1 @@ -2650,8 +2813,8 @@ packages: vite: 4.0.4 dev: true - /@storybook/addon-toolbars/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-HhNX53rFtnA8+hZ9kYP9uR7P/dvwQKWy1c1L1Z5Twe0Kw2585dJbtXA3VJ8oIoD6R6e/AHTFWujJJrT3NrHr8w==} + /@storybook/addon-toolbars/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-FzybNbJW9GQ6XCe7g2zyOXnJXay971VEoYhRqDPiFQEjBvkRiKca1mRKgdjQt6o5Mw7OzbaLunjR2Xvl3GhE0w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2661,17 +2824,17 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /@storybook/addon-viewport/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-4MoaFCq8hGhQbdSBqckTTiqgq299c2jhdsoHSMOhNT7QnY54kE6pod6w5VCZD7JH5ltzThEJD764Q+WBqqgfpw==} + /@storybook/addon-viewport/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-5GGAJeWJEplqYAL5x7GQkXw23n2MELhO6nnCV+Jd3d9qs0Aq2VSTEsD0MGTNef/SymZjYm/iOCNOVgbqIF9t+Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2681,36 +2844,36 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y memoizerific: 1.11.3 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /@storybook/blocks/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-tEFK4UOCsFbrSa6R3rOwUjBbEYOLUScF6hjtza9bsLW6tUcYG4qZdZi/nOpVdzkGfoRkmXJRoD11aRi8I9KJ+g==} + /@storybook/blocks/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-02B9sY8qrp6DCgyRWZEEd1X/+r7eaTXLOXlikqRmah5XMqtGpEasPXN4ETzzZKKRbSapkKfqxzsp9ZXfqXTNKQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/channels': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/components': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/channels': 7.0.6 + '@storybook/client-logger': 7.0.6 + '@storybook/components': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/core-events': 7.0.6 '@storybook/csf': 0.1.0 - '@storybook/docs-tools': 7.1.0-alpha.0 + '@storybook/docs-tools': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager-api': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/preview-api': 7.0.6 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 '@types/lodash': 4.14.191 color-convert: 2.0.1 dequal: 2.0.3 @@ -2728,13 +2891,13 @@ packages: - supports-color dev: true - /@storybook/builder-manager/7.1.0-alpha.0: - resolution: {integrity: sha512-d3WiL/1lXhubAdBblRYLD/s/3Lmf2op9eXysFAv2iUQIB6TtgdOG3auPZRoOx54P1jua3iz2nCfMsZlzwW791g==} + /@storybook/builder-manager/7.0.6: + resolution: {integrity: sha512-sjkESh+w1iMaHDSmNL68B6oAz1Re6ieJpQVpOfZEXrBJ4Bkf5ZjcvEnL15g4n2T6s39IYdAYgtB3MT40wCyGLw==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/manager': 7.1.0-alpha.0 - '@storybook/node-logger': 7.1.0-alpha.0 + '@storybook/core-common': 7.0.6 + '@storybook/manager': 7.0.6 + '@storybook/node-logger': 7.0.6 '@types/ejs': 3.1.2 '@types/find-cache-dir': 3.2.1 '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15_esbuild@0.17.14 @@ -2751,34 +2914,31 @@ packages: - supports-color dev: true - /@storybook/builder-vite/7.1.0-alpha.0_egung5nfepmolqa7uavvqho3gq: - resolution: {integrity: sha512-9N+voTydxZ4Dyy/ZK+TYgu31W/ERKvTokzl2DVDCSgNA98Y92rxsExA2+ipsdjMMfDqSVUrU6njH2A5vAzl9fg==} + /@storybook/builder-vite/7.0.6_egung5nfepmolqa7uavvqho3gq: + resolution: {integrity: sha512-sXthWQFMKxXS8nqihB5sSyRewLpBJDL3EjwzZxz5/4zQ9XCsuGHMW7DEepX9FMWUNPDIIw3KITs4vMrCNDkXhg==} peerDependencies: '@preact/preset-vite': '*' - '@storybook/mdx1-csf': '>=1.0.0-next.1' typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 vite-plugin-glimmerx: '*' peerDependenciesMeta: '@preact/preset-vite': optional: true - '@storybook/mdx1-csf': - optional: true typescript: optional: true vite-plugin-glimmerx: optional: true dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.0 - '@storybook/channel-websocket': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/csf-plugin': 7.1.0-alpha.0 + '@storybook/channel-postmessage': 7.0.6 + '@storybook/channel-websocket': 7.0.6 + '@storybook/client-logger': 7.0.6 + '@storybook/core-common': 7.0.6 + '@storybook/csf-plugin': 7.0.6 '@storybook/mdx2-csf': 1.0.0 - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/preview': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/node-logger': 7.0.6 + '@storybook/preview': 7.0.6 + '@storybook/preview-api': 7.0.6 + '@storybook/types': 7.0.6 browser-assert: 1.2.1 es-module-lexer: 0.9.3 express: 4.18.2 @@ -2795,59 +2955,44 @@ packages: - supports-color dev: true - /@storybook/channel-postmessage/7.0.1: - resolution: {integrity: sha512-wcJfnq49PwqKhfMJciDCJ1P5YcpN43gj9MLXIEprq7escegiM4YHBeOHCsu/YZnaE7pLnYRSxqCoy/MpWZPbIQ==} + /@storybook/channel-postmessage/7.0.6: + resolution: {integrity: sha512-xBsh/+85GS4bJ08r7z1iRn26EI6hGmMgNpjpFztRigMhsq5SkD9FJb+Nh9bbaHm+yPOCqJcaHQ2aQpuJNT8dHA==} dependencies: - '@storybook/channels': 7.0.1 - '@storybook/client-logger': 7.0.1 - '@storybook/core-events': 7.0.1 + '@storybook/channels': 7.0.6 + '@storybook/client-logger': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 qs: 6.11.1 telejson: 7.0.4 dev: true - /@storybook/channel-postmessage/7.1.0-alpha.0: - resolution: {integrity: sha512-uNt2+hsf31DT2c/QkwjZFIJ/tE4BLe/JQss721/9xR91WsCestdcJfDhUHLcC+d2q2qoLq29rWrWW2TK+kojKw==} + /@storybook/channel-websocket/7.0.6: + resolution: {integrity: sha512-tUk45xUa2/xpRg/QNw6g6j8qIWNPZ5DbpgrFDgWaZo2koI3JTQNL3mLQRWBJpVAG7rkqwBChXPOFO/KhIVaIXA==} dependencies: - '@storybook/channels': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 - '@storybook/global': 5.0.0 - qs: 6.11.1 - telejson: 7.0.4 - dev: true - - /@storybook/channel-websocket/7.1.0-alpha.0: - resolution: {integrity: sha512-JOALMW+TSFV/eZitV+ijiklEBnu1gvoY1J19ki7uYCEUkA/Ty6ZxbcLmXxDCmEZpd25//FnDUrum4lyzgLvUkA==} - dependencies: - '@storybook/channels': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 + '@storybook/channels': 7.0.6 + '@storybook/client-logger': 7.0.6 '@storybook/global': 5.0.0 telejson: 7.0.4 dev: true - /@storybook/channels/7.0.1: - resolution: {integrity: sha512-Hm/vrCkpxvZRIIjs9vwLDvK4TVINj8E3xRBPq29qUs/kdpf3f8+NiYd/gRXN+JNH7Ov1NC4L5khlR1rXh5AUNQ==} + /@storybook/channels/7.0.6: + resolution: {integrity: sha512-+34cVmrXZ3lb1s5tDK+OWd5HLtEPSUMas0VKFJ0k9LBpFlVl9aiCZBJRvSYmWL7beauUfa+HSmJgjlD6228ChQ==} dev: true - /@storybook/channels/7.1.0-alpha.0: - resolution: {integrity: sha512-9FGJaJU7FdrsF4O8JmvJe/8L3VoriNFssMGH+zkl4Amk0lpEQ/zB9FnHTaALV2hP5DUdtHhyO81u3YXQrmgOUQ==} - dev: true - - /@storybook/cli/7.1.0-alpha.0: - resolution: {integrity: sha512-6ogRZ3B1QXd4AVl21QeSIYVqEzSQZdeg79BNx+85cYdpzskX3PDrcWVM0rXFKXoXeVd0LyJ0uOh6ZxN2pMM6Tw==} + /@storybook/cli/7.0.6: + resolution: {integrity: sha512-x9Ht+N7wGknX31lnDDgfH4Td46UCVqhr0H8pgYRUz+lmhxKv58f0M5kErFRTlUxEXz6/ORI6Cx4cTw7451huyw==} hasBin: true dependencies: '@babel/core': 7.21.3 '@babel/preset-env': 7.21.4_@babel+core@7.21.3 '@ndelangen/get-tarball': 3.0.7 - '@storybook/codemod': 7.1.0-alpha.0 - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/core-server': 7.1.0-alpha.0 - '@storybook/csf-tools': 7.1.0-alpha.0 - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/telemetry': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/codemod': 7.0.6 + '@storybook/core-common': 7.0.6 + '@storybook/core-server': 7.0.6 + '@storybook/csf-tools': 7.0.6 + '@storybook/node-logger': 7.0.6 + '@storybook/telemetry': 7.0.6 + '@storybook/types': 7.0.6 '@types/semver': 7.3.13 boxen: 5.1.2 chalk: 4.1.2 @@ -2883,28 +3028,22 @@ packages: - utf-8-validate dev: true - /@storybook/client-logger/7.0.1: - resolution: {integrity: sha512-yR8tGywLSTY/cmCae9yCmo6CzU+F4QAzA2RqgKRHpM44LHjsD1rG3wQxnBa5cZs7/zopMKYK1Bt7xhp/dSS56g==} + /@storybook/client-logger/7.0.6: + resolution: {integrity: sha512-TC/E5BBkY+WNldNw5p5Ffr9x4UgMe48GmC50ikBpQFk6og1B7XpFGMMbj40EBB0R5cpZkQNEVQh4OvunEygNzg==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger/7.1.0-alpha.0: - resolution: {integrity: sha512-NFIFFeKgZxSXvDnd0nTG1MehTw1j7tMCg8rbK4lJ/R5waQkygJ/9QDVXZlZjC9+FU/Gj175iSIf5LNCHQjylAQ==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/codemod/7.1.0-alpha.0: - resolution: {integrity: sha512-fEXyW8d7YAfphXCceBdtV2C3Qeh9cNAQUIGGn3+KCuiSlRikH1opvIvCaxe1XA1jJ018LqKp0pAQtaHci8OYqQ==} + /@storybook/codemod/7.0.6: + resolution: {integrity: sha512-tI6A0L+7WxYQj3fW7rlrw6XgVBE8FSJdg5XskNMLArYiMRnK5qnN5JNKeJc8DR5plJ5wm77j0e9cUnuI86vaGg==} dependencies: '@babel/core': 7.21.3 '@babel/preset-env': 7.21.4_@babel+core@7.21.3 '@babel/types': 7.21.4 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.1.0-alpha.0 - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/csf-tools': 7.0.6 + '@storybook/node-logger': 7.0.6 + '@storybook/types': 7.0.6 cross-spawn: 7.0.3 globby: 11.1.0 jscodeshift: 0.14.0_@babel+preset-env@7.21.4 @@ -2915,17 +3054,17 @@ packages: - supports-color dev: true - /@storybook/components/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-cJjiGDusSg9XCrTwnp6S13LmuHByumlvbvUsooCaWbLL5CsQbhHaXjj/04sxxQFuNz8vl+cUGG5RRUTJtEZbRQ==} + /@storybook/components/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-SiHkSgYR8CcAGrWLof85FImcPIb+ApRW6K3LVcyinctJzOQCWLgh0poKUQ5och3CjSxQbM1G4S1ZXrAfZdU9Cg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -2933,18 +3072,18 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/core-client/7.1.0-alpha.0: - resolution: {integrity: sha512-iLHJFlWkT3OA73U03yN+D2ZNFfngWPjwCd8q2Q0+jG3TdegUnmUDVHIs9BeDVaH4cnqbDiBfY8Fwy+DmwT+WMw==} + /@storybook/core-client/7.0.6: + resolution: {integrity: sha512-XF6m6Yr+6AjYxaAU5/1Nor5tjn0IRNXU85xUgll8JkhlYDsPmXwolQRb2lfArbCuXE72E2CcOz9KCqo7oNE3OA==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/preview-api': 7.0.6 dev: true - /@storybook/core-common/7.1.0-alpha.0: - resolution: {integrity: sha512-83EiqRptheyzKXJuQniar3IXNJEL7ezfyPWNwXqdcLDiT6i7Bu/20HFluVvh5atulHHDCunPu1dEWmcsmFf4nw==} + /@storybook/core-common/7.0.6: + resolution: {integrity: sha512-vnrv7Wl2yqfl0BLda/57Ii2OgeSO5mVWgvy9WUER3xdEX6obLgEKqhq08U+dkp0pX8YEyjQgfe+rqyanEspLDQ==} dependencies: - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/node-logger': 7.0.6 + '@storybook/types': 7.0.6 '@types/node': 16.18.21 '@types/pretty-hrtime': 1.0.1 chalk: 4.1.2 @@ -2966,31 +3105,27 @@ packages: - supports-color dev: true - /@storybook/core-events/7.0.1: - resolution: {integrity: sha512-Q3wBHoahO5d7Zm0S0zvXIqnG/fuf02RNMjTiAMYG55MlPZEmu3ll4VzDtroeku4Zwo9xbHGxgVQH5LFScQncEQ==} + /@storybook/core-events/7.0.6: + resolution: {integrity: sha512-kGrtjlYtjd4iTVk+Phb4CymZaVkB+MGscKAgcO8gfgJ/Q/gq8HQLVZSIzeoCDcDSHOGlBzbg2WVtdHIHhCKlOQ==} dev: true - /@storybook/core-events/7.1.0-alpha.0: - resolution: {integrity: sha512-GckKwXy5rcbeLym9yvwziT3KiryLr3uvh2hF9F3Tde1iKvi822Acytg8viVQIUahzdBvlnaRZIIBxhAFPIAu5g==} - dev: true - - /@storybook/core-server/7.1.0-alpha.0: - resolution: {integrity: sha512-/R9rbv3lRAkXbLxe24d9yNS8B3u0dD2wmYRwy4wKFFmJQ6rSy+2OEUSkdGXLI7Dez7jGL7TgMT5XbD4ILrDiqg==} + /@storybook/core-server/7.0.6: + resolution: {integrity: sha512-1y9qTcHGwdZrUBJ9RYYJqKESJ/nWDz+ngjVM+pSlVqk+kmgFAQ127OwJFtiD/wzrdiOnzVe1/1CctPESdwL2Fg==} dependencies: '@aw-web-design/x-default-browser': 1.4.88 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.1.0-alpha.0 - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/builder-manager': 7.0.6 + '@storybook/core-common': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.1.0-alpha.0 + '@storybook/csf-tools': 7.0.6 '@storybook/docs-mdx': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.1.0-alpha.0 - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/telemetry': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/manager': 7.0.6 + '@storybook/node-logger': 7.0.6 + '@storybook/preview-api': 7.0.6 + '@storybook/telemetry': 7.0.6 + '@storybook/types': 7.0.6 '@types/detect-port': 1.3.2 '@types/node': 16.18.21 '@types/node-fetch': 2.6.2 @@ -3026,24 +3161,24 @@ packages: - utf-8-validate dev: true - /@storybook/csf-plugin/7.1.0-alpha.0: - resolution: {integrity: sha512-4VT3xVb2cOPUbDChOTIEoW7Jq1TpBplpoutFxxbEWbMxI0dTQh7Tq1hdOvGe4D6Tg2xCtEdbRLYHFmT99r2JKg==} + /@storybook/csf-plugin/7.0.6: + resolution: {integrity: sha512-3NnqKcR2JQwvmT/aX1dCNNk7XS2hm9iP8lCwZxYT9KVIqDymA5mzEBMCH6y+eRYCmaCOAD9ITN+5xT4XoRMmSQ==} dependencies: - '@storybook/csf-tools': 7.1.0-alpha.0 + '@storybook/csf-tools': 7.0.6 unplugin: 0.10.2 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools/7.1.0-alpha.0: - resolution: {integrity: sha512-Xh7/qV7CGWFow3iCbPvKJ6LHUD+cwybMJF440xZzDldMdCIP8UpbgI8GaQkAzAtDQnZhYmyrHEAXSHDdJkVC/g==} + /@storybook/csf-tools/7.0.6: + resolution: {integrity: sha512-xKOjuAlFuUOWO6JmhcEqUGTSGds9hbGSLYg0bh2BueWRvqhT3kvHqE4OKWmEfhfl4UDxIKbfEbJOxxVNni14gg==} dependencies: '@babel/generator': 7.21.3 '@babel/parser': 7.21.3 '@babel/traverse': 7.21.3 '@babel/types': 7.21.4 '@storybook/csf': 0.1.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/types': 7.0.6 fs-extra: 11.1.1 recast: 0.23.1 ts-dedent: 2.2.0 @@ -3061,13 +3196,13 @@ packages: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true - /@storybook/docs-tools/7.1.0-alpha.0: - resolution: {integrity: sha512-LDthzWCd9Lq7+3yNektx5WQrV41ltsnHhuaimFsDA1yVmceouyKG4j2eWBP5TI96+1vpe2aE5ts9JCc7/pUKMg==} + /@storybook/docs-tools/7.0.6: + resolution: {integrity: sha512-A4zLn/lliVZwKwkiaiAXsyjeVfoAyixkDSBGYK+hGp6VVWVhYh1+TiWUZXQElnrh/xukxPTPSI/iuW+FbUUpfw==} dependencies: '@babel/core': 7.21.3 - '@storybook/core-common': 7.1.0-alpha.0 - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/core-common': 7.0.6 + '@storybook/preview-api': 7.0.6 + '@storybook/types': 7.0.6 '@types/doctrine': 0.0.3 doctrine: 3.0.0 lodash: 4.17.21 @@ -3079,40 +3214,30 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true - /@storybook/instrumenter/7.0.1: - resolution: {integrity: sha512-QeM4Jkib9/2KwPiw1dPlvwJ6ld9AZCweeKAH+uQg2BiU4qPINg6SGFoa2SwLxviZZzsMjAU/XvUei1BW2QLaow==} + /@storybook/instrumenter/7.0.6: + resolution: {integrity: sha512-JUcDas1cYCE+ZMVOw5CKc5g6PxDe3HH+IGdh/W9wL5vmdOUvAs858m7NLxkjkQGufof+Ohbmf/Yz5gyXaZ5+Yg==} dependencies: - '@storybook/channels': 7.0.1 - '@storybook/client-logger': 7.0.1 - '@storybook/core-events': 7.0.1 + '@storybook/channels': 7.0.6 + '@storybook/client-logger': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.1 + '@storybook/preview-api': 7.0.6 dev: true - /@storybook/instrumenter/7.1.0-alpha.0: - resolution: {integrity: sha512-ySi6SXRAKoY202QZaUQqsdBXV3YhlcIfIkfdrcOOa8+abwxQABrZJeRQi41gGWIiqXDWTfx2BZDlaRU39Kyw5Q==} - dependencies: - '@storybook/channels': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.0 - dev: true - - /@storybook/manager-api/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-hykc2La8h9Xb7s6wgbGDFt95ANZ4drmT59KorQyTym7ADmSot+8iwFSCNiZS2qxNJP14nSIzV/39fvPAxCD2YA==} + /@storybook/manager-api/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-u942CGr/CIJwyeZvLRofPL714YRXVToJXmiyOdFSyGYcC9EQWRRrTX0zg4ZrzvllD4aZe8HXIemqlLrRB+Bu+g==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/channels': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 + '@storybook/channels': 7.0.6 + '@storybook/client-logger': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/router': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/theming': 7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.1.0-alpha.0 + '@storybook/router': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/theming': 7.0.6_biqbaboplfbrettd7655fr4n2y + '@storybook/types': 7.0.6 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -3124,16 +3249,16 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/manager/7.1.0-alpha.0: - resolution: {integrity: sha512-TnkZYTtcWc95NqwrSLkFo5HM8d5NI8POlPnhh7S+yjWkZKFO6fgjSsa2nVZb8ZR2t56AyVGNFAn2r385F1P+dQ==} + /@storybook/manager/7.0.6: + resolution: {integrity: sha512-idBnm56raTAjUdlaQjHQKCtsU2f0EiQpY1q0JOP81X18lN2QZAxVjgU5j17hQZwMQxp0nJFo8ERBAw0TiCvcZg==} dev: true /@storybook/mdx2-csf/1.0.0: resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==} dev: true - /@storybook/node-logger/7.1.0-alpha.0: - resolution: {integrity: sha512-+HaMHMs3+PA1l1P3ODSQqKta/J5/SwUIx8oX9feCXsXUI7JC9HBP33vxG1buTlJXmREgnOazG9Efi9/H/c+TZQ==} + /@storybook/node-logger/7.0.6: + resolution: {integrity: sha512-719jP38S72w+dPqIxM9X8+voTmLAkseMktbTlPDJtMKd1br3NveHCpaJkZPCvqlYbZrqzkF1pAFwWVkQyCxbAA==} dependencies: '@types/npmlog': 4.1.4 chalk: 4.1.2 @@ -3141,20 +3266,20 @@ packages: pretty-hrtime: 1.0.3 dev: true - /@storybook/postinstall/7.1.0-alpha.0: - resolution: {integrity: sha512-CWEIgn+fOseShHxjU147aU03FBcWbEb/+7G1Pue4NX064fOmIoUMa6hUoMAfTA+NDIs71ndQGy3Ba56aNsSh2Q==} + /@storybook/postinstall/7.0.6: + resolution: {integrity: sha512-NDAA2I2LqDKXqnCMgnNNpwU87rNYmf5tjLg0MK9NFR79zSdjPryy+64oBWoNjGdub342Y9fyc3gTV7OIQdvH0Q==} dev: true - /@storybook/preview-api/7.0.1: - resolution: {integrity: sha512-7MIDCND5plj1RSuCUnRBlJGkH4lBr3j8fIqqmzkoBaw7sMggtWlgGg6lF9j/OOzirpQeDKf4pjKhF0DdL6UAWw==} + /@storybook/preview-api/7.0.6: + resolution: {integrity: sha512-uNsedNyiEccBV2EDUC/xcKTbmiNCYuVHbgOoWTmBz0ZqFo9bX0jxkpyYWHEhJM79qqVqmrpiQ5jbS8QKn8TIxQ==} dependencies: - '@storybook/channel-postmessage': 7.0.1 - '@storybook/channels': 7.0.1 - '@storybook/client-logger': 7.0.1 - '@storybook/core-events': 7.0.1 + '@storybook/channel-postmessage': 7.0.6 + '@storybook/channels': 7.0.6 + '@storybook/client-logger': 7.0.6 + '@storybook/core-events': 7.0.6 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.0.1 + '@storybook/types': 7.0.6 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -3165,32 +3290,12 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api/7.1.0-alpha.0: - resolution: {integrity: sha512-wZCEFCpxqjjSGdJKtVYd/ck/Fg/dsU3cPEbjPhUyLQqKnUA/MsR8vVzDtkmugWwupviChfjARvwLdNN8u45OXw==} - dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.0 - '@storybook/channels': 7.1.0-alpha.0 - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.0 - '@types/qs': 6.9.7 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.11.1 - synchronous-promise: 2.0.17 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 + /@storybook/preview/7.0.6: + resolution: {integrity: sha512-swawfiqqSpHh2Jqt9hZUpdLpZyFzOB2uwj4vy9bhmep7sxnh81VbLBCrWrDjtcH5tC2TVVAQHYp3w8cHE94cSA==} dev: true - /@storybook/preview/7.1.0-alpha.0: - resolution: {integrity: sha512-5agB4CKIeeLBacHdDcphCxcOSBsSyzKOZrflgLah9PhDXKlzPdPyHoZqO4VedDO7moGFc3mFlThagBNVVSI+uQ==} - dev: true - - /@storybook/react-dom-shim/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-DbZ/nD5zFyOQ9sNB2fusArRCBJlTWCyKdmV9E3y5ztXIsQyiWEeHdMhBKqxUTG3eZjqJmMizQ+hCTcVr2V3xKQ==} + /@storybook/react-dom-shim/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-pmoyspsehnaSJGYXDXK4tJTyDRiWYsb5HDwmT/ZlB5iS0PEP2vB5ZAW0M6MZPCNq+rcyIhRzWpylgccJ8OJquQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3199,30 +3304,30 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: true - /@storybook/router/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-qq3J2Y6ZLQhcGiXEIhjZKt2U4S/jbtireekMJW4D+TIQIM1VNrfchMF6yqwiitg6D3C2YfbksDdr4zff1YbzWw==} + /@storybook/router/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-JdqNMxybgugQc/qZ69YeFn81wvLGGGOTVfCbimE5RJbTu0BPH7vtfsrhhP1muumYBizrpNgkueYMfqmaz91zJw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 memoizerific: 1.11.3 qs: 6.11.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /@storybook/svelte-vite/7.1.0-alpha.0_3rgppvbkzeavxpnueqngpbpqhu: - resolution: {integrity: sha512-REv7B/m4XQdiaLcdlv84BwrBIADARkMBR7j7CW51zscroCdOzh3KntnSOy4D9vzcQZiHTIH5NlnO87I6KF5+hA==} + /@storybook/svelte-vite/7.0.6_3rgppvbkzeavxpnueqngpbpqhu: + resolution: {integrity: sha512-P1h0c0ohJ2qo/q6CojLBUDim1MhAmqaCfZZ22oV2LMt57eledqWwTyfmjwY6Zvp4mYkZn+pTbN3779tbjyNIEQ==} engines: {node: ^14.18 || >=16} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 dependencies: - '@storybook/builder-vite': 7.1.0-alpha.0_egung5nfepmolqa7uavvqho3gq - '@storybook/node-logger': 7.1.0-alpha.0 - '@storybook/svelte': 7.1.0-alpha.0_svelte@3.55.1 + '@storybook/builder-vite': 7.0.6_egung5nfepmolqa7uavvqho3gq + '@storybook/node-logger': 7.0.6 + '@storybook/svelte': 7.0.6_svelte@3.55.1 '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.0.4 magic-string: 0.27.0 react: 18.2.0 @@ -3233,25 +3338,24 @@ packages: vite: 4.0.4 transitivePeerDependencies: - '@preact/preset-vite' - - '@storybook/mdx1-csf' - supports-color - typescript - vite-plugin-glimmerx dev: true - /@storybook/svelte/7.1.0-alpha.0_svelte@3.55.1: - resolution: {integrity: sha512-0mdMJAcpW4du2crK9yTp+RGg1y/RfwLBL90SB6svAXBoejjJK1Ah0GyjvywcauAYcI+M0IMtrm/KXgWDbBMQJA==} + /@storybook/svelte/7.0.6_svelte@3.55.1: + resolution: {integrity: sha512-tlbT44Fj5NlnYDeeGY4MQZ47VgXWV/JBznXwPz7mGlFIrqKkx5T8zBwG5/r1V2uYhS6m4WS0p8zgimoSNwgFyg==} engines: {node: '>=16.0.0'} peerDependencies: svelte: ^3.1.0 dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-client': 7.1.0-alpha.0 - '@storybook/core-events': 7.1.0-alpha.0 - '@storybook/docs-tools': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/core-client': 7.0.6 + '@storybook/core-events': 7.0.6 + '@storybook/docs-tools': 7.0.6 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.0 - '@storybook/types': 7.1.0-alpha.0 + '@storybook/preview-api': 7.0.6 + '@storybook/types': 7.0.6 svelte: 3.55.1 sveltedoc-parser: 4.2.1 type-fest: 2.19.0 @@ -3259,19 +3363,18 @@ packages: - supports-color dev: true - /@storybook/sveltekit/7.1.0-alpha.0_hcl52ejjmh2zpx2q5wi2i43hma: - resolution: {integrity: sha512-yynGSEBwsd8Fkr7uAn32RC8GMqPjmuRzFrAfEJkSgRjF9x1AWX6eg7tmcKvk5yMYX+GyDUuZyWOBSfvlgmwZOQ==} + /@storybook/sveltekit/7.0.6_hcl52ejjmh2zpx2q5wi2i43hma: + resolution: {integrity: sha512-DNLGMYpEiovxH1NSrS7DQ/55QMnZSNUkeICZQWZPlEOMeRTOBTMraeHjVMl44oSg33xnp/Pc8d4+yaSufdgW3Q==} engines: {node: ^14.18 || >=16} peerDependencies: vite: ^4.0.0 dependencies: - '@storybook/builder-vite': 7.1.0-alpha.0_egung5nfepmolqa7uavvqho3gq - '@storybook/svelte': 7.1.0-alpha.0_svelte@3.55.1 - '@storybook/svelte-vite': 7.1.0-alpha.0_3rgppvbkzeavxpnueqngpbpqhu + '@storybook/builder-vite': 7.0.6_egung5nfepmolqa7uavvqho3gq + '@storybook/svelte': 7.0.6_svelte@3.55.1 + '@storybook/svelte-vite': 7.0.6_3rgppvbkzeavxpnueqngpbpqhu vite: 4.0.4 transitivePeerDependencies: - '@preact/preset-vite' - - '@storybook/mdx1-csf' - react - react-dom - supports-color @@ -3280,11 +3383,11 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/telemetry/7.1.0-alpha.0: - resolution: {integrity: sha512-LKuRtzJGzIvXIqWZx+PmEnBgANU2NSKL+9vr92OIcqXnc1saSlvVuYRBa8ibNyJAa+XkC56VfHDszhP3MNc94g==} + /@storybook/telemetry/7.0.6: + resolution: {integrity: sha512-hR9Fb0bxOHNqExQdlc/gmch0vDwCQZJs+O6znA4IF9wzCyjgk4vti7cptES5PZ/kIlh0ICL13yx7O+BxYjUE5Q==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.0 - '@storybook/core-common': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 + '@storybook/core-common': 7.0.6 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.4 @@ -3300,40 +3403,31 @@ packages: /@storybook/testing-library/0.0.14-next.2: resolution: {integrity: sha512-i/SLSGm0o978ELok/SB4Qg1sZ3zr+KuuCkzyFqcCD0r/yf+bG35aQGkFqqxfSAdDxuQom0NO02FE+qys5Eapdg==} dependencies: - '@storybook/client-logger': 7.0.1 - '@storybook/instrumenter': 7.0.1 + '@storybook/client-logger': 7.0.6 + '@storybook/instrumenter': 7.0.6 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm ts-dedent: 2.2.0 dev: true - /@storybook/theming/7.1.0-alpha.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-ysnXjL8gRM2T6ACuIzGWKrcVjBvPaMGrcogG2vDAqb8qA7XB4DQGAdBbTVxm1uJ6s2HTQq34F1ssgQBEq9gHvg==} + /@storybook/theming/7.0.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-EVN3cA9Z2odkPdUgKNTJTEa5i1H2EJzGDAh/b3GLDQgIPOBD6/ynQIB+e2TmJUFflIyRTuDZJrhcf33U6J9Pww==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 - '@storybook/client-logger': 7.1.0-alpha.0 + '@storybook/client-logger': 7.0.6 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /@storybook/types/7.0.1: - resolution: {integrity: sha512-Tpmxv0cZzujB6fktjf5hHZk9nBMQ5dA+dez3avGfow3BkSuqSZgNZ3NF5Bb6sDR/ccO2hWh+zttZqfS4SngVvQ==} + /@storybook/types/7.0.6: + resolution: {integrity: sha512-dFASQxzvldU2Nx/eJG+oL4wCchUWAKOmOSYJYhKgtGpx99oXOiWUyC0SgCpTveBJ7AppoiseyasQ9Gd/Ccycdw==} dependencies: - '@storybook/channels': 7.0.1 - '@types/babel__core': 7.20.0 - '@types/express': 4.17.17 - file-system-cache: 2.0.2 - dev: true - - /@storybook/types/7.1.0-alpha.0: - resolution: {integrity: sha512-84VOCC/NEH6B5puWgK9VGjigmAfTU1iJJmly+OaF2lJv6LeHRb4/UOPSeg8fA8uHh3E32jSRKA2B8sUnxCCQrg==} - dependencies: - '@storybook/channels': 7.1.0-alpha.0 + '@storybook/channels': 7.0.6 '@types/babel__core': 7.20.0 '@types/express': 4.17.17 file-system-cache: 2.0.2 @@ -4546,6 +4640,11 @@ packages: resolution: {integrity: sha512-HeVqbVy8BjXhAAuFtL6MTG+witHoLbxfky2jgVh9FmxmyL6IKa9gSSyPNjevXCCCxPu6Tzd9J8+eXTRQzYU/cg==} dev: true + /cookie/0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: true + /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} @@ -5661,6 +5760,16 @@ packages: once: 1.4.0 dev: true + /glob/9.3.2: + resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 7.4.6 + minipass: 4.2.5 + path-scurry: 1.7.0 + dev: true + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -5845,6 +5954,10 @@ packages: engines: {node: '>= 4'} dev: true + /immediate/3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + dev: true + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -6347,6 +6460,12 @@ packages: type-check: 0.4.0 dev: true + /lie/3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + dependencies: + immediate: 3.0.6 + dev: true + /lilconfig/2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} @@ -6356,6 +6475,12 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /localforage/1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + dependencies: + lie: 3.1.1 + dev: true + /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -6410,11 +6535,27 @@ packages: yallist: 4.0.0 dev: true + /lru-cache/9.1.0: + resolution: {integrity: sha512-qFXQEwchrZcMVen2uIDceR8Tii6kCJak5rzDStfEM0qA3YLMswaxIEZO0DhIbJ3aqaJiDjt+3crlplOb0tDtKQ==} + engines: {node: 14 || >=16.14} + dev: true + + /lru_map/0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + dev: true + /lz-string/1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true dev: true + /magic-string/0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /magic-string/0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -6563,6 +6704,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch/7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist/1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true @@ -6579,6 +6727,11 @@ packages: engines: {node: '>=8'} dev: true + /minipass/5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + /minizlib/2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -6920,6 +7073,14 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry/1.7.0: + resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 9.1.0 + minipass: 5.0.0 + dev: true + /path-to-regexp/0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true @@ -7791,6 +7952,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + /space-separated-tokens/1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} dev: true @@ -7837,11 +8003,11 @@ packages: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true - /storybook/7.1.0-alpha.0: - resolution: {integrity: sha512-C+ctQQ1p8783iZgHx7Lq8m6tAQIUEy2zXj4wvSibzYc/LHsbuvcSLuLZL/2XHYwcA51ug2FeGDDvgwgaBZSUhw==} + /storybook/7.0.6: + resolution: {integrity: sha512-dhl+5jbPf6sT/cQxePxXM4T6AGJ0EtdSUTZmdOA7LA6P5C55Wc+GqPdIAh7RqZoMJdNNhXBeHHtCoYZev7uPxw==} hasBin: true dependencies: - '@storybook/cli': 7.1.0-alpha.0 + '@storybook/cli': 7.0.6 transitivePeerDependencies: - bufferutil - encoding @@ -8388,6 +8554,15 @@ packages: webpack-virtual-modules: 0.4.6 dev: true + /unplugin/1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + dependencies: + acorn: 8.8.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + dev: true + /untildify/4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -8535,6 +8710,10 @@ packages: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} dev: true + /webpack-virtual-modules/0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -8741,16 +8920,16 @@ packages: engines: {node: '>=10'} dev: true - github.com/tauri-apps/tauri-plugin-log/05a9bfd9edb9b5f4ab95412bb607691708b65a25: - resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-log/tar.gz/05a9bfd9edb9b5f4ab95412bb607691708b65a25} + github.com/tauri-apps/tauri-plugin-log/36100c269e33ac91246b0a4bfadd18c1caee5296: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-log/tar.gz/36100c269e33ac91246b0a4bfadd18c1caee5296} name: tauri-plugin-log-api version: 0.0.0 dependencies: '@tauri-apps/api': 1.2.0 dev: true - github.com/tauri-apps/tauri-plugin-websocket/ee8a3465278043d8bfa09f5d79fd9f23bf2a5aa9: - resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-websocket/tar.gz/ee8a3465278043d8bfa09f5d79fd9f23bf2a5aa9} + github.com/tauri-apps/tauri-plugin-websocket/9b1883b40e6f53cfc77e029000408da8239fba7a: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-websocket/tar.gz/9b1883b40e6f53cfc77e029000408da8239fba7a} name: tauri-plugin-websocket-api version: 0.0.0 dependencies: diff --git a/scripts/release.sh b/scripts/release.sh index 64f27782b..361484e2e 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -178,7 +178,7 @@ trap "rm -rf '$TMP_DIR'" exit jq '.package.version="'"$VERSION"'"' "$PWD/../src-tauri/tauri.conf.release.json" >"$TMP_DIR/tauri.conf.json" # build the app with release config -tauri build --config "$TMP_DIR/tauri.conf.json" +SENTRY_RELEASE="$VERSION" tauri build --config "$TMP_DIR/tauri.conf.json" BUNDLE_DIR="$PWD/../src-tauri/target/release/bundle" MACOS_DMG="$(find "$BUNDLE_DIR/dmg" -depth 1 -type f -name "*.dmg")" diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 571adfb86..a3423d05e 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -66,6 +66,9 @@ name = "anyhow" version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +dependencies = [ + "backtrace", +] [[package]] name = "arc-swap" @@ -528,16 +531,16 @@ dependencies = [ [[package]] name = "crash-handler" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b333adce79bc5ee4f421211a160514ed5a3f4dc9cd4202021d70ebdd7657e50" +checksum = "37571ca6b1166c54bdde2b482eea4c935207d5d82889382b327ad6fcf88ce656" dependencies = [ "cfg-if", "crash-context", "libc", "mach2", "parking_lot", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] @@ -985,6 +988,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "findshlibs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" +dependencies = [ + "cc", + "lazy_static", + "libc", + "winapi", +] + [[package]] name = "flate2" version = "1.0.25" @@ -1333,8 +1348,10 @@ dependencies = [ "portable-pty", "reqwest", "scopeguard", - "sentry", - "sentry-tauri", + "sentry 0.31.0", + "sentry-anyhow", + "sentry-debug-images 0.31.0", + "sentry-rust-minidump", "serde", "serde-jsonlines", "serde_json", @@ -2226,9 +2243,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minidump-common" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a134e10507b4352836be67e13cfa06e7881df5b4e091999e75c05eb449dc6985" +checksum = "97dbaf56dfe28d07e1fecffce410976774dcac1f0d7f6d797b437468e989e687" dependencies = [ "bitflags 1.3.2", "debugid", @@ -2242,9 +2259,9 @@ dependencies = [ [[package]] name = "minidump-writer" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e663ad99c0ad5f62dec920482cae3dc84d4138395efbac39a3c1ab817fe9d59" +checksum = "8c8c8fcc3823f1f4eec257a24990ab4c6a20ef9bcbc515400d0eb4a99620b943" dependencies = [ "byteorder", "cfg-if", @@ -2255,18 +2272,18 @@ dependencies = [ "memmap2", "memoffset 0.6.5", "minidump-common", - "nix 0.24.3", + "nix", "scroll", "tempfile", "thiserror", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "minidumper" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc0932e7cf3760d8ea4784bbe7ec45cc1970c08d1f6e7d108d8da1890d26586" +checksum = "a8e7577424f7abeacef16980ed8e200c84e74aaabb799c3ee30159ea877534fb" dependencies = [ "cfg-if", "crash-context", @@ -2278,7 +2295,19 @@ dependencies = [ "scroll", "thiserror", "uds", - "windows-sys 0.36.1", + "windows-sys 0.42.0", +] + +[[package]] +name = "minidumper-child" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f6a7c1a63d65dd21fa335135e5a614a7adb03560b2feb9fcb70eef34439bc8" +dependencies = [ + "crash-handler", + "minidumper", + "thiserror", + "uuid 1.3.1", ] [[package]] @@ -2373,17 +2402,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - [[package]] name = "nix" version = "0.25.1" @@ -2638,6 +2656,17 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "os_info" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" +dependencies = [ + "log", + "serde", + "winapi", +] + [[package]] name = "overload" version = "0.1.1" @@ -2897,7 +2926,7 @@ dependencies = [ "lazy_static", "libc", "log", - "nix 0.25.1", + "nix", "serde", "serde_derive", "serial", @@ -3436,99 +3465,205 @@ dependencies = [ [[package]] name = "sentry" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73642819e7fa63eb264abc818a2f65ac8764afbe4870b5ee25bcecc491be0d4c" +checksum = "b5ce6d3512e2617c209ec1e86b0ca2fea06454cd34653c91092bf0f3ec41f8e3" dependencies = [ "httpdate", + "native-tls", "reqwest", - "sentry-backtrace", - "sentry-contexts", - "sentry-core", - "sentry-panic", + "sentry-backtrace 0.30.0", + "sentry-contexts 0.30.0", + "sentry-core 0.30.0", + "sentry-debug-images 0.30.0", + "sentry-panic 0.30.0", "tokio", + "ureq", +] + +[[package]] +name = "sentry" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c3d7f8bf7373e75222452fcdd9347d857452a92d0eec738f941bc4656c5b5df" +dependencies = [ + "httpdate", + "native-tls", + "reqwest", + "sentry-anyhow", + "sentry-backtrace 0.31.0", + "sentry-contexts 0.31.0", + "sentry-core 0.31.0", + "sentry-debug-images 0.31.0", + "sentry-panic 0.31.0", + "tokio", + "ureq", +] + +[[package]] +name = "sentry-anyhow" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef7f47c57a1146d553b4976f20e8bba370195a88858bdf6945a63c529549236" +dependencies = [ + "anyhow", + "sentry-backtrace 0.31.0", + "sentry-core 0.31.0", ] [[package]] name = "sentry-backtrace" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49bafa55eefc6dbc04c7dac91e8c8ab9e89e9414f3193c105cabd991bbc75134" +checksum = "0e7fe408d4d1f8de188a9309916e02e129cbe51ca19e55badea5a64899399b1a" dependencies = [ "backtrace", "once_cell", "regex", - "sentry-core", + "sentry-core 0.30.0", +] + +[[package]] +name = "sentry-backtrace" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b7cdefbdca51f1146f0f24a3cb4ecb6428951f030ff5c720cfb5c60bd174c0" +dependencies = [ + "backtrace", + "once_cell", + "regex", + "sentry-core 0.31.0", ] [[package]] name = "sentry-contexts" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c63317c4051889e73f0b00ce4024cae3e6a225f2e18a27d2c1522eb9ce2743da" +checksum = "5695096a059a89973ec541062d331ff4c9aeef9c2951416c894f0fff76340e7d" dependencies = [ "hostname", "libc", + "os_info", "rustc_version", - "sentry-core", + "sentry-core 0.30.0", + "uname", +] + +[[package]] +name = "sentry-contexts" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af4cb29066e0e8df0cc3111211eb93543ccb09e1ccbe71de6d88b4bb459a2b1" +dependencies = [ + "hostname", + "libc", + "os_info", + "rustc_version", + "sentry-core 0.31.0", "uname", ] [[package]] name = "sentry-core" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a4591a2d128af73b1b819ab95f143bc6a2fbe48cd23a4c45e1ee32177e66ae6" +checksum = "5b22828bfd118a7b660cf7a155002a494755c0424cebb7061e4743ecde9c7dbc" dependencies = [ "once_cell", "rand 0.8.5", - "sentry-types", + "sentry-types 0.30.0", "serde", "serde_json", ] [[package]] -name = "sentry-panic" -version = "0.27.0" +name = "sentry-core" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "696c74c5882d5a0d5b4a31d0ff3989b04da49be7983b7f52a52c667da5b480bf" +checksum = "5e781b55761e47a60d1ff326ae8059de22b0e6b0cee68eab1c5912e4fb199a76" dependencies = [ - "sentry-backtrace", - "sentry-core", + "once_cell", + "rand 0.8.5", + "sentry-types 0.31.0", + "serde", + "serde_json", +] + +[[package]] +name = "sentry-debug-images" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a9164d44a2929b1b7670afd7e87552514b70d3ae672ca52884639373d912a3d" +dependencies = [ + "findshlibs", + "once_cell", + "sentry-core 0.30.0", +] + +[[package]] +name = "sentry-debug-images" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e758030b31ee2cd97424a980dfa34a12dcd8477424861cf81ae3aa1f9f616a8c" +dependencies = [ + "findshlibs", + "once_cell", + "sentry-core 0.31.0", +] + +[[package]] +name = "sentry-panic" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ced2a7a8c14899d58eec402d946f69d5ed26a3fc363a7e8b1e5cb88473a01" +dependencies = [ + "sentry-backtrace 0.30.0", + "sentry-core 0.30.0", +] + +[[package]] +name = "sentry-panic" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0b877981990d9e84ae6916df61993d188fdf76afb59521f0aeaf9b8e6d26d0" +dependencies = [ + "sentry-backtrace 0.31.0", + "sentry-core 0.31.0", ] [[package]] name = "sentry-rust-minidump" -version = "0.1.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d986b33fedaa7638225e07ac1cc0217894ee2958798a09e2d61b2fe5f486bc89" +checksum = "a489204e5cb676310d7ef1506eefb76d006a82f27b648f5477ea74733467d5a1" dependencies = [ - "crash-handler", - "dirs-next", - "minidumper", - "sentry", - "thiserror", - "uuid 1.3.1", -] - -[[package]] -name = "sentry-tauri" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13a2132c1f33f471f3842001c1aee74df0b94c10628833da798275285bcf0f9" -dependencies = [ - "sentry", - "sentry-rust-minidump", - "serde", - "tauri", + "minidumper-child", + "sentry 0.30.0", "thiserror", ] [[package]] name = "sentry-types" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "823923ae5f54a729159d720aa12181673044ee5c79cbda3be09e56f885e5468f" +checksum = "360ee3270f7a4a1eee6c667f7d38360b995431598a73b740dfe420da548d9cc9" +dependencies = [ + "debugid", + "getrandom 0.2.9", + "hex", + "serde", + "serde_json", + "thiserror", + "time", + "url", + "uuid 1.3.1", +] + +[[package]] +name = "sentry-types" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d642a04657cc77d8de52ae7c6d93a15cb02284eb219344a89c1e2b26bbaf578c" dependencies = [ "debugid", "getrandom 0.2.9", @@ -4745,6 +4880,19 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +[[package]] +name = "ureq" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d" +dependencies = [ + "base64 0.13.1", + "log", + "native-tls", + "once_cell", + "url", +] + [[package]] name = "url" version = "2.3.1" @@ -5123,19 +5271,6 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -5217,12 +5352,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - [[package]] name = "windows_aarch64_msvc" version = "0.37.0" @@ -5247,12 +5376,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - [[package]] name = "windows_i686_gnu" version = "0.37.0" @@ -5277,12 +5400,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - [[package]] name = "windows_i686_msvc" version = "0.37.0" @@ -5307,12 +5424,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - [[package]] name = "windows_x86_64_gnu" version = "0.37.0" @@ -5349,12 +5460,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - [[package]] name = "windows_x86_64_msvc" version = "0.37.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index aaac488a2..f90bcd879 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -26,8 +26,7 @@ uuid = "1.3.0" git2 = { version = "0.16.1", features = ["vendored-openssl", "vendored-libgit2"] } filetime = "0.2.19" sha2 = "0.10.6" -sentry-tauri = "0.1.0" -sentry = "0.27" +sentry = {version = "0.31.0", features = ["backtrace", "contexts", "panic", "transport", "anyhow", "debug-images", "reqwest", "native-tls" ] } walkdir = "2.3.2" anyhow = "1.0.69" tempfile = "3.3.0" @@ -48,6 +47,9 @@ timed = "0.2.1" serde-jsonlines = "0.4.0" crossbeam-channel = "0.5.8" scopeguard = "1.1.0" +sentry-anyhow = "0.31.0" +sentry-rust-minidump = "0.5.1" +sentry-debug-images = "0.31.0" [features] # by default Tauri runs in production mode diff --git a/src-tauri/src/app/gb_repository.rs b/src-tauri/src/app/gb_repository.rs index 4aefa7e85..895130a97 100644 --- a/src-tauri/src/app/gb_repository.rs +++ b/src-tauri/src/app/gb_repository.rs @@ -493,7 +493,6 @@ fn build_wd_tree( abs_path.display(), e ); - println!("failed to read file {}: {:#}", abs_path.display(), e); continue; } }; diff --git a/src-tauri/src/app/project_repository.rs b/src-tauri/src/app/project_repository.rs index be508c82d..5225072b2 100644 --- a/src-tauri/src/app/project_repository.rs +++ b/src-tauri/src/app/project_repository.rs @@ -2,7 +2,6 @@ use std::{collections::HashMap, env}; use anyhow::{Context, Result}; use serde::Serialize; -use tauri::regex::Regex; use walkdir::WalkDir; use crate::{git::activity, projects}; @@ -211,25 +210,23 @@ impl<'repository> Repository<'repository> { .workdir() .with_context(|| "failed to get working directory")?; - let pattern = Regex::new(pattern).with_context(|| "regex parse error"); - match pattern { - Ok(pattern) => { - let mut files = vec![]; - for entry in WalkDir::new(workdir) + let pattern = pattern.to_lowercase(); + let mut files = vec![]; + for entry in WalkDir::new(workdir) .into_iter() - .filter_entry(|e| { + .filter_entry(|entry| { // need to remove workdir so we're not matching it - let match_string = e + let relative_path = entry .path() - .strip_prefix::<&std::path::Path>(workdir.as_ref()) + .strip_prefix(workdir) .unwrap() .to_str() .unwrap(); // this is to make it faster, so we dont have to traverse every directory if it is ignored by git - e.path().to_str() == workdir.to_str() // but we need to traverse the first one - || ((e.file_type().is_dir() // traverse all directories if they are not ignored by git - || pattern.is_match(match_string)) // but only pass on files that match the regex - && !self.git_repository.is_path_ignored(&e.path()).unwrap_or(true)) + entry.path().to_str() == workdir.to_str() // but we need to traverse the first one + || ((entry.file_type().is_dir() // traverse all directories if they are not ignored by git + || relative_path.to_lowercase().contains(&pattern)) // but only pass on files that match the regex + && !self.git_repository.is_path_ignored(&entry.path()).unwrap_or(true)) }) .filter_map(Result::ok) { @@ -248,13 +245,8 @@ impl<'repository> Repository<'repository> { files.push(path); } } - files.sort(); - return Ok(files); - } - Err(e) => { - return Err(e); - } - } + files.sort(); + return Ok(files); } pub fn git_branches(&self) -> Result> { diff --git a/src-tauri/src/deltas/operations/operations.rs b/src-tauri/src/deltas/operations/operations.rs index b6f1f3609..a6d94d879 100644 --- a/src-tauri/src/deltas/operations/operations.rs +++ b/src-tauri/src/deltas/operations/operations.rs @@ -91,7 +91,6 @@ pub fn get_delta_operations(initial_text: &str, final_text: &str) -> Vec { deltas.push(Operation::Delete(( diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 78d46e4e5..5bec97ccc 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -58,6 +58,7 @@ impl From for Error { impl From for Error { fn from(e: anyhow::Error) -> Self { + sentry_anyhow::capture_anyhow(&e); log::error!("{:#}", e); Error::Unknown } @@ -65,14 +66,6 @@ impl From for Error { const IS_DEV: bool = cfg!(debug_assertions); -fn app_title() -> String { - if IS_DEV { - "GitButler (dev)".to_string() - } else { - "GitButler".to_string() - } -} - fn build_asset_url(path: &str) -> String { format!("asset://localhost/{}", urlencoding::encode(path)) } @@ -410,15 +403,27 @@ async fn git_commit( } fn main() { + let tauri_context = generate_context!(); + + let _guard = sentry::init(("https://9d407634d26b4d30b6a42d57a136d255@o4504644069687296.ingest.sentry.io/4504649768108032", sentry::ClientOptions { + release: Some(tauri_context.package_info().version.to_string().into()), + attach_stacktrace: true, + default_integrations: true, + ..Default::default() + })); + + let app_title = tauri_context.package_info().name.clone(); + let quit = tauri::CustomMenuItem::new("quit".to_string(), "Quit"); - let hide = tauri::CustomMenuItem::new("toggle".to_string(), format!("Hide {}", app_title())); + let hide = tauri::CustomMenuItem::new("toggle".to_string(), format!("Hide {}", app_title)); let tray_menu = tauri::SystemTrayMenu::new().add_item(hide).add_item(quit); let tray = tauri::SystemTray::new().with_menu(tray_menu); - let tauri_app_builder = tauri::Builder::default() + tauri::Builder::default() .system_tray(tray) .on_system_tray_event(|app_handle, event| match event { tauri::SystemTrayEvent::MenuItemClick { id, .. } => { + let app_title = app_handle.package_info().name.clone(); let item_handle = app_handle.tray_handle().get_item(&id); match id.as_str() { "quit" => { @@ -429,20 +434,20 @@ fn main() { if window.is_visible().unwrap() { window.hide().unwrap(); item_handle - .set_title(format!("Show {}", app_title())) + .set_title(format!("Show {}", app_title)) .unwrap(); } else { window.show().unwrap(); window.set_focus().unwrap(); item_handle - .set_title(format!("Hide {}", app_title())) + .set_title(format!("Hide {}", app_title)) .unwrap(); } } None => { create_window(&app_handle).expect("Failed to create window"); item_handle - .set_title(format!("Hide {}", app_title())) + .set_title(format!("Hide {}", app_title)) .unwrap(); } }, @@ -455,12 +460,13 @@ fn main() { tauri::WindowEvent::CloseRequested { api, .. } => { api.prevent_close(); let window = event.window(); + let app_handle = window.app_handle(); + let app_title = app_handle.package_info().name.clone(); - window - .app_handle() + app_handle .tray_handle() .get_item("toggle") - .set_title(format!("Show {}", app_title())) + .set_title(format!("Show {}", app_title)) .expect("Failed to set tray item title"); window.hide().expect("Failed to hide window"); @@ -544,37 +550,16 @@ fn main() { git_stage, git_unstage, git_wd_diff, - ]); - - let tauri_context = generate_context!(); - let app_version = tauri_context.package_info().version.to_string(); - - sentry_tauri::init( - app_version.clone(), - |_| { - sentry::init(( - "https://9d407634d26b4d30b6a42d57a136d255@o4504644069687296.ingest.sentry.io/4504649768108032", - sentry::ClientOptions { - release: Some(std::borrow::Cow::from(app_version)), - ..Default::default() - }, - )) - }, - |sentry_plugin| { - let tauri_app = tauri_app_builder - .plugin(sentry_plugin) - .build(tauri_context) - .expect("Failed to build tauri app"); - - tauri_app.run(|app_handle, event| match event { - tauri::RunEvent::ExitRequested { api, .. } => { - hide_window(&app_handle).expect("Failed to hide window"); - api.prevent_exit(); - } - _ => {} - }); - }, - ); + ]) + .build(tauri_context) + .expect("Failed to build tauri app") + .run(|app_handle, event| match event { + tauri::RunEvent::ExitRequested { api, .. } => { + hide_window(&app_handle).expect("Failed to hide window"); + api.prevent_exit(); + } + _ => {} + }); } fn init(app_handle: tauri::AppHandle) -> Result<()> { @@ -616,9 +601,10 @@ fn get_window(handle: &tauri::AppHandle) -> Option { #[cfg(not(target_os = "macos"))] fn create_window(handle: &tauri::AppHandle) -> tauri::Result { log::info!("Creating window"); + let app_title = handle.package_info().name.clone(); tauri::WindowBuilder::new(handle, "main", tauri::WindowUrl::App("index.html".into())) .resizable(true) - .title(app_title()) + .title(app_title) .theme(Some(tauri::Theme::Dark)) .min_inner_size(600.0, 300.0) .inner_size(800.0, 600.0) @@ -630,7 +616,7 @@ fn create_window(handle: &tauri::AppHandle) -> tauri::Result { log::info!("Creating window"); tauri::WindowBuilder::new(handle, "main", tauri::WindowUrl::App("index.html".into())) .resizable(true) - .title(app_title()) + .title(handle.package_info().name.clone()) .theme(Some(tauri::Theme::Dark)) .min_inner_size(1024.0, 600.0) .inner_size(1024.0, 600.0) @@ -643,7 +629,7 @@ fn hide_window(handle: &tauri::AppHandle) -> tauri::Result<()> { handle .tray_handle() .get_item("toggle") - .set_title(format!("Show {}", app_title()))?; + .set_title(format!("Show {}", handle.package_info().name))?; match get_window(handle) { Some(window) => { diff --git a/src-tauri/src/search/deltas_test.rs b/src-tauri/src/search/deltas_test.rs index 7d8576e2e..d13acc8c5 100644 --- a/src-tauri/src/search/deltas_test.rs +++ b/src-tauri/src/search/deltas_test.rs @@ -221,7 +221,6 @@ fn test_simple() -> Result<()> { offset: None, range: Range { start: 0, end: 10 }, }); - println!("{:?}", search_result1); assert!(search_result1.is_ok()); let search_result1 = search_result1.unwrap(); assert_eq!(search_result1.total, 1); diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 54ab3c1e1..0c0506915 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -14,7 +14,7 @@ "all": false, "shell": { "all": false, - "open": true + "open": "^(https://)|(mailto:)?." }, "dialog": { "all": false, diff --git a/src-tauri/tauri.conf.release.json b/src-tauri/tauri.conf.release.json index 6d74ddff7..ae85c2f2c 100644 --- a/src-tauri/tauri.conf.release.json +++ b/src-tauri/tauri.conf.release.json @@ -15,7 +15,7 @@ "csp": { "default-src": "'self'", "img-src": "'self' asset: https://asset.localhost", - "connect-src": "'self' https://eu.posthog.com https://app.gitbutler.com ws://localhost:7703", + "connect-src": "'self' https://eu.posthog.com https://app.gitbutler.com https://o4504644069687296.ingest.sentry.io ws://localhost:7703", "script-src": "'self' https://eu.posthog.com", "style-src": "'self' 'unsafe-inline'" } diff --git a/src/app.postcss b/src/app.postcss index e40464587..3385106f4 100644 --- a/src/app.postcss +++ b/src/app.postcss @@ -95,5 +95,5 @@ input:focus { padding: 24px; } .xterm-screen { - wdith: 100% !important; + width: 100% !important; } diff --git a/src/hooks.client.ts b/src/hooks.client.ts index 0e0b9ff69..f0ae8a55a 100644 --- a/src/hooks.client.ts +++ b/src/hooks.client.ts @@ -1,9 +1,19 @@ -import type { HandleClientError } from '@sveltejs/kit'; +import { handleErrorWithSentry, init } from '@sentry/sveltekit'; +import type { NavigationEvent } from '@sveltejs/kit'; +import { dev } from '$app/environment'; +import { log } from '$lib'; -// This will catch errors in load functions from +page.ts files -export const handleError = (({ error, event }: { error: any; event: any }) => { - console.error(error, event); - return { - message: error.message - }; -}) satisfies HandleClientError; +init({ + enabled: !dev, + dsn: 'https://9d407634d26b4d30b6a42d57a136d255@o4504644069687296.ingest.sentry.io/4504649768108032', + environment: dev ? 'development' : 'production', + tracesSampleRate: 1.0 +}); + +log.info(`sentry init`); + +const myErrorHandler = ({ error, event }: { error: any; event: NavigationEvent }) => { + console.error('An error occurred on the client side:', error, event); +}; + +export const handleError = handleErrorWithSentry(myErrorHandler); diff --git a/src/lib/api.ts b/src/lib/api/cloud/api.ts similarity index 100% rename from src/lib/api.ts rename to src/lib/api/cloud/api.ts diff --git a/src/lib/api/cloud/index.ts b/src/lib/api/cloud/index.ts new file mode 100644 index 000000000..c0697724b --- /dev/null +++ b/src/lib/api/cloud/index.ts @@ -0,0 +1,2 @@ +export { default as Api } from './api'; +export type { User, LoginToken, Project } from './api'; diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts new file mode 100644 index 000000000..29d544b87 --- /dev/null +++ b/src/lib/api/index.ts @@ -0,0 +1,2 @@ +export * from './ipc'; +export { Api as CloudApi, type User, type LoginToken } from './cloud'; diff --git a/src/lib/deltas.ts b/src/lib/api/ipc/deltas.ts similarity index 68% rename from src/lib/deltas.ts rename to src/lib/api/ipc/deltas.ts index ecba3691b..3634e0589 100644 --- a/src/lib/deltas.ts +++ b/src/lib/api/ipc/deltas.ts @@ -1,8 +1,7 @@ -import { log } from '$lib'; import { invoke } from '@tauri-apps/api'; import { appWindow } from '@tauri-apps/api/window'; -import { writable, type Readable } from 'svelte/store'; -import { clone } from './utils'; +import { clone } from '$lib/utils'; +import { writable } from 'svelte/store'; export type OperationDelete = { delete: [number, number] }; export type OperationInsert = { insert: [number, string] }; @@ -19,11 +18,6 @@ export namespace Operation { export type Delta = { timestampMs: number; operations: Operation[] }; -export type DeltasEvent = { - deltas: Delta[]; - filePath: string; -}; - const cache: Record>>> = {}; export const list = async (params: { projectId: string; sessionId: string; paths?: string[] }) => { @@ -53,22 +47,27 @@ export const list = async (params: { projectId: string; sessionId: string; paths ); }; -export default async (params: { projectId: string; sessionId: string }) => { - const init = await list(params); - - const store = writable>(init); - appWindow.listen( +export const subscribe = ( + params: { projectId: string; sessionId: string }, + callback: (params: { + projectId: string; + sessionId: string; + filePath: string; + deltas: Delta[]; + }) => Promise | void +) => + appWindow.listen<{ deltas: Delta[]; filePath: string }>( `project://${params.projectId}/sessions/${params.sessionId}/deltas`, - (event) => { - log.info( - `Received deltas for ${params.projectId}, ${params.sessionId}, ${event.payload.filePath}` - ); - store.update((deltas) => ({ - ...deltas, - [event.payload.filePath]: event.payload.deltas - })); - } + (event) => callback({ ...params, ...event.payload }) ); - return store as Readable>; +export const Deltas = async (params: { projectId: string; sessionId: string }) => { + const store = writable(await list(params)); + subscribe(params, ({ filePath, deltas }) => { + store.update((deltasCache) => { + deltasCache[filePath] = deltas; + return deltasCache; + }); + }); + return { subscribe: store.subscribe }; }; diff --git a/src/lib/api/ipc/files.ts b/src/lib/api/ipc/files.ts new file mode 100644 index 000000000..15a6b8c89 --- /dev/null +++ b/src/lib/api/ipc/files.ts @@ -0,0 +1,31 @@ +import { invoke } from '@tauri-apps/api'; +import { clone } from '$lib/utils'; + +const cache: Record>>> = {}; + +export const list = async (params: { projectId: string; sessionId: string; paths?: string[] }) => { + const sessionFilesCache = cache[params.projectId] || {}; + if (params.sessionId in sessionFilesCache) { + return sessionFilesCache[params.sessionId].then((files) => + Object.fromEntries( + Object.entries(clone(files)).filter(([path]) => + params.paths ? params.paths.includes(path) : true + ) + ) + ); + } + + const promise = invoke>('list_session_files', { + sessionId: params.sessionId, + projectId: params.projectId + }); + sessionFilesCache[params.sessionId] = promise; + cache[params.projectId] = sessionFilesCache; + return promise.then((files) => + Object.fromEntries( + Object.entries(clone(files)).filter(([path]) => + params.paths ? params.paths.includes(path) : true + ) + ) + ); +}; diff --git a/src/lib/api/ipc/git/activities.ts b/src/lib/api/ipc/git/activities.ts new file mode 100644 index 000000000..567348d25 --- /dev/null +++ b/src/lib/api/ipc/git/activities.ts @@ -0,0 +1,28 @@ +import { invoke } from '@tauri-apps/api'; +import { appWindow } from '@tauri-apps/api/window'; +import { get, writable } from 'svelte/store'; + +export type Activity = { + type: string; + timestampMs: number; + message: string; +}; + +export const list = (params: { projectId: string; startTimeMs?: number }) => + invoke('git_activity', params); + +export const subscribe = ( + params: { projectId: string }, + callback: (params: { projectId: string }) => Promise | void +) => appWindow.listen(`project://${params.projectId}/git/activity`, () => callback(params)); + +export const Activities = async (params: { projectId: string }) => { + const store = writable(await list(params)); + subscribe(params, async () => { + const activity = get(store); + const startTimeMs = activity.at(-1)?.timestampMs; + const newActivities = await list({ projectId: params.projectId, startTimeMs }); + store.update((activities) => [...activities, ...newActivities]); + }); + return { subscribe: store.subscribe }; +}; diff --git a/src/lib/api/ipc/git/diffs.ts b/src/lib/api/ipc/git/diffs.ts new file mode 100644 index 000000000..caa8c6c1e --- /dev/null +++ b/src/lib/api/ipc/git/diffs.ts @@ -0,0 +1,13 @@ +import { invoke } from '@tauri-apps/api'; +import { writable } from 'svelte/store'; +import { sessions, git } from '$lib/api'; + +const list = (params: { projectId: string }) => + invoke>('git_wd_diff', params); + +export const Diffs = async (params: { projectId: string }) => { + const store = writable(await list(params)); + git.activities.subscribe(params, ({ projectId }) => list({ projectId }).then(store.set)); + sessions.subscribe(params, () => list(params).then(store.set)); + return { subscribe: store.subscribe }; +}; diff --git a/src/lib/api/ipc/git/heads.ts b/src/lib/api/ipc/git/heads.ts new file mode 100644 index 000000000..9b976a967 --- /dev/null +++ b/src/lib/api/ipc/git/heads.ts @@ -0,0 +1,19 @@ +import { invoke } from '@tauri-apps/api'; +import { appWindow } from '@tauri-apps/api/window'; +import { derived, writable } from 'svelte/store'; + +export const get = (params: { projectId: string }) => invoke('git_head', params); + +export const subscribe = ( + params: { projectId: string }, + callback: (params: { projectId: string; head: string }) => Promise | void +) => + appWindow.listen<{ head: string }>(`project://${params.projectId}/git/head`, (event) => + callback({ ...params, ...event.payload }) + ); + +export const Head = async (params: { projectId: string }) => { + const store = writable(await get(params)); + subscribe(params, ({ head }) => store.set(head)); + return derived(store, (head) => head.replace('refs/heads/', '')); +}; diff --git a/src/lib/git/index.ts b/src/lib/api/ipc/git/index.ts similarity index 66% rename from src/lib/git/index.ts rename to src/lib/api/ipc/git/index.ts index b8e77946d..9d6671a45 100644 --- a/src/lib/git/index.ts +++ b/src/lib/api/ipc/git/index.ts @@ -1,7 +1,12 @@ -import { invoke } from '@tauri-apps/api'; +export * as statuses from './statuses'; +export { Status } from './statuses'; +export * as activities from './activities'; +export type { Activity } from './activities'; +export * as heads from './heads'; +export * as diffs from './diffs'; +export * as indexes from './indexes'; -export { default as statuses } from './statuses'; -export { default as activity } from './activity'; +import { invoke } from '@tauri-apps/api'; export const commit = (params: { projectId: string; message: string; push: boolean }) => invoke('git_commit', params); diff --git a/src/lib/api/ipc/git/indexes.ts b/src/lib/api/ipc/git/indexes.ts new file mode 100644 index 000000000..1efafb663 --- /dev/null +++ b/src/lib/api/ipc/git/indexes.ts @@ -0,0 +1,6 @@ +import { appWindow } from '@tauri-apps/api/window'; + +export const subscribe = ( + params: { projectId: string }, + callback: (params: { projectId: string }) => Promise +) => appWindow.listen(`project://${params.projectId}/git/activity`, () => callback({ ...params })); diff --git a/src/lib/git/statuses.ts b/src/lib/api/ipc/git/statuses.ts similarity index 50% rename from src/lib/git/statuses.ts rename to src/lib/api/ipc/git/statuses.ts index 109fca6a5..4e515667e 100644 --- a/src/lib/git/statuses.ts +++ b/src/lib/api/ipc/git/statuses.ts @@ -1,6 +1,6 @@ import { invoke } from '@tauri-apps/api'; -import { appWindow } from '@tauri-apps/api/window'; -import { writable, type Readable } from 'svelte/store'; +import { writable } from 'svelte/store'; +import { sessions, git } from '$lib/api'; type FileStatus = 'added' | 'modified' | 'deleted' | 'renamed' | 'typeChange' | 'other'; @@ -16,22 +16,13 @@ export namespace Status { 'unstaged' in status && status.unstaged !== null; } -const list = (params: { projectId: string }) => +export const list = (params: { projectId: string }) => invoke>('git_status', params); -export default async (params: { projectId: string }) => { - const statuses = await list(params); - const store = writable(statuses); - - [ - `project://${params.projectId}/git/index`, - `project://${params.projectId}/git/activity`, - `project://${params.projectId}/sessions` - ].forEach((eventName) => { - appWindow.listen(eventName, async () => { - store.set(await list(params)); - }); - }); - - return store as Readable>; +export const Statuses = async (params: { projectId: string }) => { + const store = writable(await list(params)); + sessions.subscribe(params, () => list(params).then(store.set)); + git.activities.subscribe(params, () => list(params).then(store.set)); + git.indexes.subscribe(params, () => list(params).then(store.set)); + return { subscribe: store.subscribe }; }; diff --git a/src/lib/api/ipc/index.ts b/src/lib/api/ipc/index.ts new file mode 100644 index 000000000..f2b48dbfd --- /dev/null +++ b/src/lib/api/ipc/index.ts @@ -0,0 +1,12 @@ +export * as git from './git'; +export { Status, type Activity } from './git'; +export * as deltas from './deltas'; +export { type Delta, Operation } from './deltas'; +export * as sessions from './sessions'; +export { Session } from './sessions'; +export * as users from './users'; +export * as projects from './projects'; +export type { Project } from './projects'; +export * as searchResults from './search'; +export { type SearchResult } from './search'; +export * as files from './files'; diff --git a/src/lib/projects.ts b/src/lib/api/ipc/projects.ts similarity index 72% rename from src/lib/projects.ts rename to src/lib/api/ipc/projects.ts index 9f92ec49f..79fa84fc1 100644 --- a/src/lib/projects.ts +++ b/src/lib/api/ipc/projects.ts @@ -1,6 +1,6 @@ import { invoke } from '@tauri-apps/api'; -import { derived, writable } from 'svelte/store'; -import type { Project as ApiProject } from '$lib/api'; +import type { Project as ApiProject } from '$lib/api/cloud'; +import { derived, readable, writable } from 'svelte/store'; export type Project = { id: string; @@ -9,9 +9,9 @@ export type Project = { api: ApiProject & { sync: boolean }; }; -const list = () => invoke('list_projects'); +export const list = () => invoke('list_projects'); -const update = (params: { +export const update = (params: { project: { id: string; title?: string; @@ -19,14 +19,12 @@ const update = (params: { }; }) => invoke('update_project', params); -const add = (params: { path: string }) => invoke('add_project', params); +export const add = (params: { path: string }) => invoke('add_project', params); -const del = (params: { id: string }) => invoke('delete_project', params); - -export default async () => { - const init = await list(); - const store = writable(init); +export const del = (params: { id: string }) => invoke('delete_project', params); +export const Projects = async () => { + const store = writable(await list()); return { subscribe: store.subscribe, get: (id: string) => { diff --git a/src/lib/search.ts b/src/lib/api/ipc/search.ts similarity index 92% rename from src/lib/search.ts rename to src/lib/api/ipc/search.ts index 506d3c338..b8597de3e 100644 --- a/src/lib/search.ts +++ b/src/lib/api/ipc/search.ts @@ -10,7 +10,7 @@ export type SearchResult = { highlighted: string[]; }; -export const search = (params: { +export const list = (params: { projectId: string; query: string; limit?: number; diff --git a/src/lib/api/ipc/sessions.ts b/src/lib/api/ipc/sessions.ts new file mode 100644 index 000000000..9fd4e47f2 --- /dev/null +++ b/src/lib/api/ipc/sessions.ts @@ -0,0 +1,63 @@ +import { invoke } from '@tauri-apps/api'; +import { appWindow } from '@tauri-apps/api/window'; +import { clone } from '$lib/utils'; +import { writable } from 'svelte/store'; + +export namespace Session { + export const within = (session: Session | undefined, timestampMs: number) => { + if (!session) return false; + const { startTimestampMs, lastTimestampMs } = session.meta; + return startTimestampMs <= timestampMs && timestampMs <= lastTimestampMs; + }; +} + +export type Session = { + id: string; + hash?: string; + meta: { + startTimestampMs: number; + lastTimestampMs: number; + branch?: string; + commit?: string; + }; +}; +const cache: Record> = {}; + +export const list = async (params: { projectId: string; earliestTimestampMs?: number }) => { + if (params.projectId in cache) { + return cache[params.projectId].then((sessions) => + clone(sessions).filter((s) => + params.earliestTimestampMs ? s.meta.startTimestampMs >= params.earliestTimestampMs : true + ) + ); + } + cache[params.projectId] = invoke('list_sessions', { + projectId: params.projectId + }); + return cache[params.projectId].then((sessions) => + clone(sessions).filter((s) => + params.earliestTimestampMs ? s.meta.startTimestampMs >= params.earliestTimestampMs : true + ) + ); +}; + +export const subscribe = ( + params: { projectId: string }, + callback: (params: { projectId: string; session: Session }) => Promise | void +) => + appWindow.listen(`project://${params.projectId}/sessions`, async (event) => + callback({ ...params, session: event.payload }) + ); + +export const Sessions = async (params: { projectId: string }) => { + const store = writable(await list(params)); + subscribe(params, ({ session }) => { + store.update((sessions) => { + const index = sessions.findIndex((s) => s.id === session.id); + if (index === -1) return [...sessions, session]; + sessions[index] = session; + return sessions; + }); + }); + return { subscribe: store.subscribe }; +}; diff --git a/src/lib/users.ts b/src/lib/api/ipc/users.ts similarity index 51% rename from src/lib/users.ts rename to src/lib/api/ipc/users.ts index 204edaa43..4a672fc54 100644 --- a/src/lib/users.ts +++ b/src/lib/api/ipc/users.ts @@ -1,18 +1,15 @@ import type { User } from '$lib/api'; -import { writable } from 'svelte/store'; import { invoke } from '@tauri-apps/api'; +import { writable } from 'svelte/store'; -const get = () => invoke('get_user'); +export const get = () => invoke('get_user'); -const set = (params: { user: User }) => invoke('set_user', params); +export const set = (params: { user: User }) => invoke('set_user', params); -const del = () => invoke('delete_user'); +export const del = () => invoke('delete_user'); -export default async () => { - const store = writable(undefined); - - const init = await get(); - store.set(init); +export const CurrentUser = async () => { + const store = writable(await get()); return { subscribe: store.subscribe, set: async (user: User) => { diff --git a/src/lib/components/Breadcrumbs.svelte b/src/lib/components/Breadcrumbs.svelte index c86713aa8..31f86c825 100644 --- a/src/lib/components/Breadcrumbs.svelte +++ b/src/lib/components/Breadcrumbs.svelte @@ -1,5 +1,5 @@ -
- -
-
- - {#if $scopeToProject && $project} - - {$project.title} - - / - {/if} - {#if $selectedGroup} - - {$selectedGroup.title} - - {:else} - - - {/if} -
-
+
+
+ +
+
+ + {#if $scopeToProject && $project} + + {$project.title} + + / + {/if} + {#if $selectedGroup} + + {$selectedGroup.title} + + {:else} + + + {/if} +
+
- -
    - {#each $commandGroups as group, groupIdx} - {#await group then group} -
  • -
    - {group.title} - {#if group.description} - ({group.description}) - {/if} -
    + +
      + {#each $commandGroups as group, groupIdx} + {#await group then group} +
    • +
      + {group.title} + {#if group.description} + ({group.description}) + {/if} +
      -
        - {#each group.commands as command, commandIdx} -
      • - -
      • - {/each} -
      -
    • - {/await} - {/each} -
    + +
  • + {/each} +
+ + {/await} + {/each} + +
diff --git a/src/lib/components/CommandPalette/commands.ts b/src/lib/components/CommandPalette/commands.ts index 68c28c139..ea942c9fc 100644 --- a/src/lib/components/CommandPalette/commands.ts +++ b/src/lib/components/CommandPalette/commands.ts @@ -1,22 +1,38 @@ -import type { Project } from '$lib/projects'; -import { GitCommitIcon, IconFile, IconProject, IconTerminal, RewindIcon, FileIcon } from '../icons'; -import { matchFiles } from '$lib/git'; +import { type Project, git } from '$lib/api'; +import { open } from '@tauri-apps/api/dialog'; +import { toasts } from '$lib'; +import { + IconGitCommit, + IconFile, + IconFeedback, + IconProject, + IconTerminal, + IconSettings, + IconAdjustmentsHorizontal, + IconDiscord, + IconSearch, + IconRewind +} from '../icons'; import type { SvelteComponent } from 'svelte'; -import { format, startOfISOWeek, startOfMonth, subDays, subMonths, subWeeks } from 'date-fns'; type ActionLink = { href: string; }; +type ActionRun = () => void; + interface Newable { new (...args: any[]): ReturnType; } -export type Action = ActionLink | Group; +export type Action = ActionLink | Group | ActionRun; export namespace Action { export const isLink = (action: Action): action is ActionLink => 'href' in action; + export const isExternalLink = (action: Action): action is ActionLink => + isLink(action) && (action.href.startsWith('http') || action.href.startsWith('mailto')); export const isGroup = (action: Action): action is Group => 'commands' in action; + export const isRun = (action: Action): action is ActionRun => typeof action === 'function'; } export type Command = { @@ -32,98 +48,105 @@ export type Group = { commands: Command[]; }; -const goToProjectGroup = ({ projects, input }: { projects: Project[]; input: string }): Group => ({ - title: 'Go to project', - commands: projects - .map((project) => ({ - title: project.title, - action: { - href: `/projects/${project.id}/` - }, - icon: IconProject - })) - .filter(({ title }) => input.length === 0 || title.toLowerCase().includes(input.toLowerCase())) -}); - -const actionsGroup = ({ project, input }: { project: Project; input: string }): Group => ({ - title: 'Actions', +const projectsGroup = ({ + addProject, + projects, + input +}: { + addProject: (params: { path: string }) => Promise; + projects: Project[]; + input: string; +}): Group => ({ + title: 'Projects', commands: [ { - title: 'Commit', - hotkey: 'Shift+C', - action: { - href: `/projects/${project.id}/commit/` - }, - icon: GitCommitIcon + title: 'New project...', + hotkey: 'Meta+Shift+N', + icon: IconProject, + action: async () => { + const selectedPath = await open({ + directory: true, + recursive: true + }); + if (selectedPath === null) return; + if (Array.isArray(selectedPath) && selectedPath.length !== 1) return; + const projectPath = Array.isArray(selectedPath) ? selectedPath[0] : selectedPath; + + try { + addProject({ path: projectPath }); + } catch (e: any) { + toasts.error(e.message); + } + } }, + ...projects + .filter( + ({ title }) => input.length === 0 || title.toLowerCase().includes(input.toLowerCase()) + ) + .map((project, i) => ({ + title: project.title, + hotkey: `Meta+${i + 1}`, + action: { + href: `/projects/${project.id}/` + }, + icon: IconProject + })), { - title: 'Terminal', - hotkey: 'Shift+T', + title: 'Search all repositories', action: { - href: `/projects/${project?.id}/terminal/` + href: '/' }, - icon: IconTerminal - }, - { - title: 'Replay History', - action: { - title: 'Replay working history', - commands: [ + icon: IconSearch + } + ].filter(({ title }) => input.length === 0 || title.toLowerCase().includes(input.toLowerCase())) +}); + +const navigateGroup = ({ project, input }: { project?: Project; input: string }): Group => ({ + title: 'Navigate', + commands: [ + ...(project + ? [ { - title: 'Eralier today', - icon: RewindIcon, - hotkey: '1', + title: 'Commit', + hotkey: 'Meta+Shift+C', action: { - href: `/projects/${project.id}/player/${format(new Date(), 'yyyy-MM-dd')}/` - } + href: `/projects/${project.id}/commit/` + }, + icon: IconGitCommit }, { - title: 'Yesterday', - icon: RewindIcon, - hotkey: '2', + title: 'Replay', + hotkey: 'Meta+R', action: { - href: `/projects/${project.id}/player/${format( - subDays(new Date(), 1), - 'yyyy-MM-dd' - )}/` - } + href: `/projects/${project.id}/player/` + }, + icon: IconRewind }, { - title: 'The day before yesterday', - icon: RewindIcon, - hotkey: '3', + title: 'Terminal', + hotkey: 'Meta+T', action: { - href: `/projects/${project.id}/player/${format( - subDays(new Date(), 2), - 'yyyy-MM-dd' - )}/` - } + href: `/projects/${project?.id}/terminal/` + }, + icon: IconTerminal }, { - title: 'The beginning of last week', - icon: RewindIcon, - hotkey: '4', + title: 'Project settings', + hotkey: 'Meta+Shift+,', action: { - href: `/projects/${project.id}/player/${format( - startOfISOWeek(subWeeks(new Date(), 1)), - 'yyyy-MM-dd' - )}/` - } - }, - { - title: 'The beginning of last month', - icon: RewindIcon, - hotkey: '5', - action: { - href: `/projects/${project.id}/player/${format( - startOfMonth(subMonths(new Date(), 1)), - 'yyyy-MM-dd' - )}/` - } + href: `/projects/${project?.id}/settings/` + }, + icon: IconSettings } - ] + ] + : []), + { + title: 'Settings', + hotkey: 'Meta+,', + action: { + href: '/users/' }, - icon: RewindIcon + icon: IconAdjustmentsHorizontal } ].filter(({ title }) => input.length === 0 || title.toLowerCase().includes(input.toLowerCase())) }); @@ -141,7 +164,7 @@ const fileGroup = ({ description: 'type part of a file name', commands: [] } - : matchFiles({ projectId: project.id, matchPattern: input }).then((files) => ({ + : git.matchFiles({ projectId: project.id, matchPattern: input }).then((files) => ({ title: 'Files', description: files.length === 0 ? `no files containing '${input}'` : '', commands: files.map((file) => ({ @@ -161,24 +184,36 @@ const supportGroup = ({ input }: { input: string }): Group => ({ action: { href: `https://docs.gitbutler.com` }, - icon: FileIcon + icon: IconFile }, { title: 'Discord', action: { href: `https://discord.gg/MmFkmaJ42D` }, - icon: GitCommitIcon + icon: IconDiscord + }, + { + title: 'Send feedback', + action: { + href: 'mailto:hello@gitbutler.com' + }, + icon: IconFeedback } ].filter(({ title }) => input.length === 0 || title.toLowerCase().includes(input.toLowerCase())) }); -export default (params: { projects: Project[]; project?: Project; input: string }) => { - const { projects, input, project } = params; +export default (params: { + addProject: (params: { path: string }) => Promise; + projects: Project[]; + project?: Project; + input: string; +}) => { + const { addProject, projects, input, project } = params; const groups = []; - !project && groups.push(goToProjectGroup({ projects, input })); - project && groups.push(actionsGroup({ project, input })); + groups.push(navigateGroup({ project, input })); + !project && groups.push(projectsGroup({ addProject, projects, input })); project && groups.push(fileGroup({ project, input })); groups.push(supportGroup({ input })); diff --git a/src/lib/components/Dialog/Dialog.stories.svelte b/src/lib/components/Dialog/Dialog.stories.svelte index 15bacea95..98b740d81 100644 --- a/src/lib/components/Dialog/Dialog.stories.svelte +++ b/src/lib/components/Dialog/Dialog.stories.svelte @@ -5,12 +5,21 @@ import Button from '../Button/Button.svelte'; let dialog: Dialog; - let count = 0; - + + + + + +

+ GitButler offers support for generating Git commits automatically. To use this feature, you + will need to sync with GitButler cloud. +

+
+
diff --git a/src/lib/components/Dialog/Dialog.svelte b/src/lib/components/Dialog/Dialog.svelte index 0caa4ec99..870d2ddbf 100644 --- a/src/lib/components/Dialog/Dialog.svelte +++ b/src/lib/components/Dialog/Dialog.svelte @@ -4,29 +4,46 @@ import { IconClose } from '$lib/components/icons'; export const show = () => modal.show(); - const hide = () => modal.hide(); let modal: Modal; - -
-
-
+ +
+
+

Title +

+ +
+ + {#if $$slots.default} +
+
- -
-

- -

-
- - - + {/if} + +
+ + + -
+
+ + diff --git a/src/lib/components/Login.svelte b/src/lib/components/Login.svelte index 1e8a1e7ec..17287c01d 100644 --- a/src/lib/components/Login.svelte +++ b/src/lib/components/Login.svelte @@ -1,12 +1,10 @@ - - - - {#if open} - diff --git a/src/lib/components/Statuses.svelte b/src/lib/components/Statuses.svelte index 923678935..f44519ecb 100644 --- a/src/lib/components/Statuses.svelte +++ b/src/lib/components/Statuses.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/components/icons/BookmarkIcon.svelte b/src/lib/components/icons/BookmarkIcon.svelte deleted file mode 100644 index 260ff8c89..000000000 --- a/src/lib/components/icons/BookmarkIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/lib/components/icons/BranchIcon.svelte b/src/lib/components/icons/BranchIcon.svelte deleted file mode 100644 index c410aa7f6..000000000 --- a/src/lib/components/icons/BranchIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/lib/components/icons/CommitIcon.svelte b/src/lib/components/icons/CommitIcon.svelte deleted file mode 100644 index 87efd0c62..000000000 --- a/src/lib/components/icons/CommitIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/lib/components/icons/ContactIcon.svelte b/src/lib/components/icons/ContactIcon.svelte deleted file mode 100644 index 0853b5519..000000000 --- a/src/lib/components/icons/ContactIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/lib/components/icons/FileIcon.svelte b/src/lib/components/icons/FileIcon.svelte deleted file mode 100644 index 474cee6c6..000000000 --- a/src/lib/components/icons/FileIcon.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/src/lib/components/icons/FolderIcon.svelte b/src/lib/components/icons/FolderIcon.svelte deleted file mode 100644 index 6e4bedb80..000000000 --- a/src/lib/components/icons/FolderIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/src/lib/components/icons/HashtagIcon.svelte b/src/lib/components/icons/HashtagIcon.svelte deleted file mode 100644 index d1ce4996b..000000000 --- a/src/lib/components/icons/HashtagIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/src/lib/components/icons/IconAdjustmentsHorizontal.svelte b/src/lib/components/icons/IconAdjustmentsHorizontal.svelte new file mode 100644 index 000000000..02384f853 --- /dev/null +++ b/src/lib/components/icons/IconAdjustmentsHorizontal.svelte @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/src/lib/components/icons/IconCircleCancel.svelte b/src/lib/components/icons/IconCircleCancel.svelte deleted file mode 100644 index 752788746..000000000 --- a/src/lib/components/icons/IconCircleCancel.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/lib/components/icons/IconCircleFilled.svelte b/src/lib/components/icons/IconCircleFilled.svelte deleted file mode 100644 index 4cde6c926..000000000 --- a/src/lib/components/icons/IconCircleFilled.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - diff --git a/src/lib/components/icons/IconCircleHalf.svelte b/src/lib/components/icons/IconCircleHalf.svelte deleted file mode 100644 index 3a5bc7604..000000000 --- a/src/lib/components/icons/IconCircleHalf.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - diff --git a/src/lib/components/icons/IconDiscord.svelte b/src/lib/components/icons/IconDiscord.svelte new file mode 100644 index 000000000..68e80a902 --- /dev/null +++ b/src/lib/components/icons/IconDiscord.svelte @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/lib/components/icons/IconExternalLink.svelte b/src/lib/components/icons/IconExternalLink.svelte new file mode 100644 index 000000000..47a9d2861 --- /dev/null +++ b/src/lib/components/icons/IconExternalLink.svelte @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/src/lib/components/icons/IconFeedback.svelte b/src/lib/components/icons/IconFeedback.svelte new file mode 100644 index 000000000..5f4429606 --- /dev/null +++ b/src/lib/components/icons/IconFeedback.svelte @@ -0,0 +1,20 @@ + + + + + diff --git a/src/lib/components/icons/GitCommitIcon.svelte b/src/lib/components/icons/IconGitCommit.svelte similarity index 100% rename from src/lib/components/icons/GitCommitIcon.svelte rename to src/lib/components/icons/IconGitCommit.svelte diff --git a/src/lib/components/icons/IconMapPinFilled.svelte b/src/lib/components/icons/IconMapPinFilled.svelte deleted file mode 100644 index 5068aac71..000000000 --- a/src/lib/components/icons/IconMapPinFilled.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - diff --git a/src/lib/components/icons/RewindIcon.svelte b/src/lib/components/icons/IconRewind.svelte similarity index 100% rename from src/lib/components/icons/RewindIcon.svelte rename to src/lib/components/icons/IconRewind.svelte diff --git a/src/lib/components/icons/IconRotateClockwise.svelte b/src/lib/components/icons/IconRotateClockwise.svelte deleted file mode 100644 index 325c561ef..000000000 --- a/src/lib/components/icons/IconRotateClockwise.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - diff --git a/src/lib/components/icons/IconSearch.svelte b/src/lib/components/icons/IconSearch.svelte new file mode 100644 index 000000000..8a47896b7 --- /dev/null +++ b/src/lib/components/icons/IconSearch.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/src/lib/components/icons/IconSettings.svelte b/src/lib/components/icons/IconSettings.svelte new file mode 100644 index 000000000..feaa72f67 --- /dev/null +++ b/src/lib/components/icons/IconSettings.svelte @@ -0,0 +1,20 @@ + + + + + + diff --git a/src/lib/components/icons/IconSquareRoundedFilled.svelte b/src/lib/components/icons/IconSquareRoundedFilled.svelte deleted file mode 100644 index d21771a9e..000000000 --- a/src/lib/components/icons/IconSquareRoundedFilled.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - - diff --git a/src/lib/components/icons/LabelIcon.svelte b/src/lib/components/icons/LabelIcon.svelte deleted file mode 100644 index e25cde184..000000000 --- a/src/lib/components/icons/LabelIcon.svelte +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/lib/components/icons/ProjectIcon.svelte b/src/lib/components/icons/ProjectIcon.svelte deleted file mode 100644 index 966e6fbc0..000000000 --- a/src/lib/components/icons/ProjectIcon.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/lib/components/icons/index.ts b/src/lib/components/icons/index.ts index 934f31928..81adc5f48 100644 --- a/src/lib/components/icons/index.ts +++ b/src/lib/components/icons/index.ts @@ -1,21 +1,7 @@ -export { default as BookmarkIcon } from './BookmarkIcon.svelte'; -export { default as BranchIcon } from './BranchIcon.svelte'; -export { default as CommitIcon } from './CommitIcon.svelte'; -export { default as ContactIcon } from './ContactIcon.svelte'; -export { default as FileIcon } from './FileIcon.svelte'; -export { default as FolderIcon } from './FolderIcon.svelte'; -export { default as LabelIcon } from './LabelIcon.svelte'; -export { default as GitCommitIcon } from './GitCommitIcon.svelte'; -export { default as ProjectIcon } from './ProjectIcon.svelte'; -export { default as RewindIcon } from './RewindIcon.svelte'; -export { default as IconRotateClockwise } from './IconRotateClockwise.svelte'; +export { default as IconGitCommit } from './IconGitCommit.svelte'; +export { default as IconRewind } from './IconRewind.svelte'; export { default as IconPlayerPauseFilled } from './IconPlayerPauseFilled.svelte'; export { default as IconPlayerPlayFilled } from './IconPlayerPlayFilled.svelte'; -export { default as IconCircleHalf } from './IconCircleHalf.svelte'; -export { default as IconSquareRoundedFilled } from './IconSquareRoundedFilled.svelte'; -export { default as IconMapPinFilled } from './IconMapPinFilled.svelte'; -export { default as IconCircleFilled } from './IconCircleFilled.svelte'; -export { default as IconCircleCancel } from './IconCircleCancel.svelte'; export { default as IconChevronLeft } from './IconChevronLeft.svelte'; export { default as IconChevronRight } from './IconChevronRight.svelte'; export { default as IconFile } from './IconFile.svelte'; @@ -25,3 +11,9 @@ export { default as IconLoading } from './IconLoading.svelte'; export { default as IconProject } from './IconProject.svelte'; export { default as IconTerminal } from './IconTerminal.svelte'; export { default as IconClose } from './IconClose.svelte'; +export { default as IconSettings } from './IconSettings.svelte'; +export { default as IconAdjustmentsHorizontal } from './IconAdjustmentsHorizontal.svelte'; +export { default as IconDiscord } from './IconDiscord.svelte'; +export { default as IconExternalLink } from './IconExternalLink.svelte'; +export { default as IconFeedback } from './IconFeedback.svelte'; +export { default as IconSearch } from './IconSearch.svelte'; diff --git a/src/lib/git/activity.ts b/src/lib/git/activity.ts deleted file mode 100644 index 3d50c3cb9..000000000 --- a/src/lib/git/activity.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { invoke } from '@tauri-apps/api'; -import { appWindow } from '@tauri-apps/api/window'; -import { writable, type Readable } from 'svelte/store'; -import { log } from '$lib'; - -export type Activity = { - type: string; - timestampMs: number; - message: string; -}; - -const list = (params: { projectId: string; startTimeMs?: number }) => - invoke('git_activity', params); - -export default async (params: { projectId: string }) => { - const activity = await list(params); - const store = writable(activity); - - appWindow.listen(`project://${params.projectId}/git/activity`, async () => { - log.info(`Status: Received git activity event, projectId: ${params.projectId}`); - const startTimeMs = activity.at(-1)?.timestampMs; - const newActivities = await list({ projectId: params.projectId, startTimeMs }); - store.update((activities) => [...activities, ...newActivities]); - }); - - return store as Readable; -}; diff --git a/src/lib/git/diffs.ts b/src/lib/git/diffs.ts deleted file mode 100644 index d7fe08b30..000000000 --- a/src/lib/git/diffs.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { invoke } from '@tauri-apps/api'; -import { appWindow } from '@tauri-apps/api/window'; -import { writable, type Readable } from 'svelte/store'; -import { log } from '$lib'; - -const getDiffs = (params: { projectId: string }) => - invoke>('git_wd_diff', params); - -export default async (params: { projectId: string }) => { - const diffs = await getDiffs(params); - const store = writable(diffs); - - appWindow.listen(`project://${params.projectId}/sessions`, async () => { - log.info(`Status: Received sessions event, projectId: ${params.projectId}`); - store.set(await getDiffs(params)); - }); - - appWindow.listen(`project://${params.projectId}/git/index`, async () => { - log.info(`Status: Received git activity event, projectId: ${params.projectId}`); - store.set(await getDiffs(params)); - }); - - return store as Readable>; -}; diff --git a/src/lib/git/head.ts b/src/lib/git/head.ts deleted file mode 100644 index 47a2a67d0..000000000 --- a/src/lib/git/head.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { invoke } from '@tauri-apps/api'; -import { appWindow } from '@tauri-apps/api/window'; -import { derived, writable } from 'svelte/store'; -import { log } from '$lib'; - -const list = (params: { projectId: string }) => invoke('git_head', params); - -export default async (params: { projectId: string }) => { - const head = await list(params); - const store = writable(head); - - appWindow.listen<{ head: string }>(`project://${params.projectId}/git/head`, async (payload) => { - log.info(`Status: Received git head event, projectId: ${params.projectId}`); - store.set(payload.payload.head); - }); - - return derived(store, (head) => head.replace('refs/heads/', '')); -}; diff --git a/src/lib/index.ts b/src/lib/index.ts index b8bd297b4..5c3e0d41b 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,8 +1,6 @@ -export * as deltas from './deltas'; -export * as projects from './projects'; +export * as api from './api'; export * as log from './log'; export * as toasts from './toasts'; -export * as sessions from './sessions'; +export { Toaster } from './toasts'; export * as week from './week'; export * as uisessions from './uisessions'; -export * from './search'; diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts new file mode 100644 index 000000000..86b313ff0 --- /dev/null +++ b/src/lib/sentry.ts @@ -0,0 +1,21 @@ +import { setUser } from '@sentry/sveltekit'; +import type { User } from '$lib/api'; +import * as log from '$lib/log'; + +export default () => { + return { + identify: (user: User | undefined) => { + if (user) { + log.info(`sentry identify`); + setUser({ + id: user.id.toString(), + email: user.email, + username: user.name + }); + } else { + log.info(`sentry reset`); + setUser(null); + } + } + }; +}; diff --git a/src/lib/sessions.ts b/src/lib/sessions.ts deleted file mode 100644 index 1eb211706..000000000 --- a/src/lib/sessions.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { invoke } from '@tauri-apps/api'; -import { appWindow } from '@tauri-apps/api/window'; -import { writable, type Readable } from 'svelte/store'; -import { log } from '$lib'; -import type { Activity } from './git/activity'; -import { clone } from './utils'; - -export namespace Session { - export const within = (session: Session | undefined, timestampMs: number) => { - if (!session) return false; - const { startTimestampMs, lastTimestampMs } = session.meta; - return startTimestampMs <= timestampMs && timestampMs <= lastTimestampMs; - }; -} - -export type Session = { - id: string; - hash?: string; - meta: { - startTimestampMs: number; - lastTimestampMs: number; - branch?: string; - commit?: string; - }; - activity: Activity[]; -}; - -const filesCache: Record>>> = {}; - -export const listFiles = async (params: { - projectId: string; - sessionId: string; - paths?: string[]; -}) => { - const sessionFilesCache = filesCache[params.projectId] || {}; - if (params.sessionId in sessionFilesCache) { - return sessionFilesCache[params.sessionId].then((files) => - Object.fromEntries( - Object.entries(clone(files)).filter(([path]) => - params.paths ? params.paths.includes(path) : true - ) - ) - ); - } - - const promise = invoke>('list_session_files', { - sessionId: params.sessionId, - projectId: params.projectId - }); - sessionFilesCache[params.sessionId] = promise; - filesCache[params.projectId] = sessionFilesCache; - return promise.then((files) => - Object.fromEntries( - Object.entries(clone(files)).filter(([path]) => - params.paths ? params.paths.includes(path) : true - ) - ) - ); -}; - -const sessionsCache: Record> = {}; - -const list = async (params: { projectId: string; earliestTimestampMs?: number }) => { - if (params.projectId in sessionsCache) { - return sessionsCache[params.projectId].then((sessions) => - clone(sessions).filter((s) => - params.earliestTimestampMs ? s.meta.startTimestampMs >= params.earliestTimestampMs : true - ) - ); - } - sessionsCache[params.projectId] = invoke('list_sessions', { - projectId: params.projectId - }); - return sessionsCache[params.projectId].then((sessions) => - clone(sessions).filter((s) => - params.earliestTimestampMs ? s.meta.startTimestampMs >= params.earliestTimestampMs : true - ) - ); -}; - -export default async (params: { projectId: string; earliestTimestampMs?: number }) => { - const store = writable([] as Session[]); - list(params).then((sessions) => { - store.set(sessions); - }); - - appWindow.listen(`project://${params.projectId}/sessions`, async (event) => { - log.info(`Received sessions event, projectId: ${params.projectId}`); - const session = event.payload; - store.update((sessions) => { - const index = sessions.findIndex((session) => session.id === event.payload.id); - if (index === -1) { - return [...sessions, session]; - } else { - return [...sessions.slice(0, index), session, ...sessions.slice(index + 1)]; - } - }); - }); - - return store as Readable; -}; diff --git a/src/lib/toasts.ts b/src/lib/toasts.ts index acb8e99a8..8b2d6305d 100644 --- a/src/lib/toasts.ts +++ b/src/lib/toasts.ts @@ -1,4 +1,5 @@ import toast, { type ToastOptions, type ToastPosition } from 'svelte-french-toast'; +export { Toaster } from 'svelte-french-toast'; const defaultOptions = { position: 'bottom-center' as ToastPosition, diff --git a/src/lib/uisessions.ts b/src/lib/uisessions.ts index b3e8bfe36..bddd367e8 100644 --- a/src/lib/uisessions.ts +++ b/src/lib/uisessions.ts @@ -1,5 +1,4 @@ -import type { Session } from '$lib/sessions'; -import type { Delta } from '$lib/deltas'; +import type { Session, Delta } from '$lib/api'; export type UISession = { session: Session; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index cad03d5e8..348b9561e 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,18 +1,18 @@
@@ -59,5 +76,5 @@
- +
diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index d4e34cdb8..b6357adc4 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -1,27 +1,29 @@ import { readable } from 'svelte/store'; import type { LayoutLoad } from './$types'; import { building } from '$app/environment'; -import type { Project } from '$lib/projects'; -import Api from '$lib/api'; +import type { Project } from '$lib/api'; +import { Api } from '$lib/api/cloud'; import Posthog from '$lib/posthog'; -import * as log from '$lib/log'; +import Sentry from '$lib/sentry'; +import { setup as setupLogger } from '$lib/log'; +import { wrapLoadWithSentry } from '@sentry/sveltekit'; export const ssr = false; export const prerender = true; export const csr = true; -export const load: LayoutLoad = async ({ fetch }) => { +export const load: LayoutLoad = wrapLoadWithSentry(async ({ fetch }) => { const projects = building ? { ...readable([]), - add: () => { + add: (params: { path: string }): Promise => { throw new Error('not implemented'); }, get: () => { throw new Error('not implemented'); } } - : await (await import('$lib/projects')).default(); + : await (await import('$lib/api')).projects.Projects(); const user = building ? { ...readable(undefined), @@ -32,12 +34,13 @@ export const load: LayoutLoad = async ({ fetch }) => { throw new Error('not implemented'); } } - : await (await import('$lib/users')).default(); - await log.setup(); + : await (await import('$lib/api')).users.CurrentUser(); + setupLogger(); return { projects, user, api: Api({ fetch }), - posthog: Posthog() + posthog: Posthog(), + sentry: Sentry() }; -}; +}); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 803659aa9..72068a504 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,6 +1,6 @@ diff --git a/src/routes/projects/[projectId]/player/[date]/[sessionId]/Slider.svelte b/src/routes/projects/[projectId]/player/[date]/[sessionId]/Slider.svelte index 89c318d4d..dba686a56 100644 --- a/src/routes/projects/[projectId]/player/[date]/[sessionId]/Slider.svelte +++ b/src/routes/projects/[projectId]/player/[date]/[sessionId]/Slider.svelte @@ -1,7 +1,6 @@